[{"data":1,"prerenderedAt":173017},["ShallowReactive",2],{"wiki-list":3},{"data":4,"error":23344,"isEmpty":173016},[5,5129,6237,7657,10646,11997,13486,14575,23338,23351,23950,23976,24100,24341,24406,24424,24437,24484,24608,24777,24976,25156,25361,25497,25592,25629,25642,25952,26693,27401,27422,28442,30073,30224,30237,30249,30550,50362,50377,50394,50427,53299,76647,92792,92813,92926,93047,93817,94480,94841,94879,94985,95085,95128,95154,95215,96869,96970,96995,97486,97986,99066,99349,100091,100593,100605,102621,104285,105788,107486,109403,111322,113344,116814,117246,117709,118458,121402,121750,121772,122128,125435,125447,125850,125873,126020,126187,126392,126693,127250,127907,129838,131436,132085,133579,135010,136245,137939,139691,142101,142217,143152,143363,144248,145483,145711,145724,146879,149291,151659,154980,157457,159101,160878,162891,165943,168123,170650,172844],{"id":6,"title":7,"body":8,"description":71,"extension":5123,"meta":5124,"navigation":2364,"path":5125,"seo":5126,"stem":5127,"__hash__":5128},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":9,"value":10,"toc":5095},"minimark",[11,15,20,24,28,41,45,50,53,56,59,62,65,102,106,109,112,115,118,171,175,194,196,210,213,221,224,1087,1094,1111,1115,1206,1210,1216,1305,1309,1347,1351,1415,1419,1423,1430,1441,1445,1450,1454,1459,1463,1468,1472,1476,1481,1751,1756,1894,1899,2156,2159,2167,2171,2176,2279,2282,2589,2598,2699,2702,2705,2708,2711,2971,2976,3116,3119,3298,3301,3429,3432,3584,3588,3593,3596,3607,3615,3618,3725,3729,3733,3738,3788,3793,3798,3822,3827,3880,3883,3888,4065,4070,4355,4360,4757,4761,4766,4823,4828,4836,4839,4979,4982,5091],[12,13,7],"h1",{"id":14},"_1基础入门",[16,17,19],"h2",{"id":18},"_11注释","1.1注释",[21,22,23],"p",{},"\u002F\u002F或者\u002F* *\u002F",[16,25,27],{"id":26},"_12命名","1.2命名",[29,30,31,35,38],"ol",{},[32,33,34],"li",{},"字母数字下划线",[32,36,37],{},"开头必须是字母或_",[32,39,40],{},"不能使用关键词",[16,42,44],{"id":43},"_13数据类型","1.3数据类型",[46,47,49],"h3",{"id":48},"_131整形","1.3.1整形",[21,51,52],{},"short 短整形 2",[21,54,55],{},"int 整形 4",[21,57,58],{},"long 长整形 win4 linux32位4 linux64位8",[21,60,61],{},"long long 长长整形 8",[21,63,64],{},"利用sizeof可以求数据类型占用的内存空间大小",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++","",[73,74,75,94],"code",{"__ignoreMap":71},[76,77,80,84,88,91],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"szBVR","sizeof",[76,85,87],{"class":86},"sVt8B","(",[76,89,90],{"class":82},"int",[76,92,93],{"class":86},")\n",[76,95,97,99],{"class":78,"line":96},2,[76,98,83],{"class":82},[76,100,101],{"class":86},"(num)\n",[46,103,105],{"id":104},"_132浮点型","1.3.2浮点型",[21,107,108],{},"float 单精度 4节 7位有效数字",[21,110,111],{},"double 双精度 8节 15-16有效数字",[21,113,114],{},"默认情况下，输出一个小数，会显示6位有效数字",[21,116,117],{},"注意点：",[66,119,121],{"className":68,"code":120,"language":70,"meta":71,"style":71},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[73,122,123,148],{"__ignoreMap":71},[76,124,125,128,131,134,138,141,144],{"class":78,"line":79},[76,126,127],{"class":82},"float",[76,129,130],{"class":86}," f1",[76,132,133],{"class":82},"=",[76,135,137],{"class":136},"sj4cs","3.14",[76,139,140],{"class":82},"f",[76,142,143],{"class":86},";",[76,145,147],{"class":146},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[76,149,150,152,155,157,160,163,166,168],{"class":78,"line":96},[76,151,127],{"class":82},[76,153,154],{"class":86}," f2",[76,156,133],{"class":82},[76,158,159],{"class":136},"3",[76,161,162],{"class":82},"e",[76,164,165],{"class":136},"2",[76,167,143],{"class":86},[76,169,170],{"class":146}," \u002F\u002F科学记数法\n",[46,172,174],{"id":173},"_133字符型","1.3.3字符型",[66,176,178],{"className":68,"code":177,"language":70,"meta":71,"style":71},"char ch='a'\n",[73,179,180],{"__ignoreMap":71},[76,181,182,185,188,190],{"class":78,"line":79},[76,183,184],{"class":82},"char",[76,186,187],{"class":86}," ch",[76,189,133],{"class":82},[76,191,193],{"class":192},"sZZnC","'a'\n",[21,195,117],{},[29,197,198,201,204,207],{},[32,199,200],{},"在显示字符型变量时，只能单引号，双引号x",[32,202,203],{},"单引号内只能一个字符，不能字符串",[32,205,206],{},"c和c++字符型变量只占用一个字符",[32,208,209],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[21,211,212],{},"ASCII码大致由以下两部分组成：",[29,214,215,218],{},[32,216,217],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[32,219,220],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[21,222,223],{},"ASCII码表格：",[225,226,227,271],"table",{},[228,229,230],"thead",{},[231,232,233,241,246,250,255,259,263,267],"tr",{},[234,235,236,240],"th",{},[237,238,239],"strong",{},"ASCII","值",[234,242,243],{},[237,244,245],{},"控制字符",[234,247,248,240],{},[237,249,239],{},[234,251,252],{},[237,253,254],{},"字符",[234,256,257,240],{},[237,258,239],{},[234,260,261],{},[237,262,254],{},[234,264,265,240],{},[237,266,239],{},[234,268,269],{},[237,270,254],{},[272,273,274,301,327,352,377,403,428,453,479,504,530,556,582,607,633,659,685,709,734,759,784,809,834,859,884,909,934,960,985,1010,1035,1061],"tbody",{},[231,275,276,280,283,286,289,292,295,298],{},[277,278,279],"td",{},"0",[277,281,282],{},"NUT",[277,284,285],{},"32",[277,287,288],{},"(space)",[277,290,291],{},"64",[277,293,294],{},"@",[277,296,297],{},"96",[277,299,300],{},"、",[231,302,303,306,309,312,315,318,321,324],{},[277,304,305],{},"1",[277,307,308],{},"SOH",[277,310,311],{},"33",[277,313,314],{},"!",[277,316,317],{},"65",[277,319,320],{},"A",[277,322,323],{},"97",[277,325,326],{},"a",[231,328,329,331,334,337,340,343,346,349],{},[277,330,165],{},[277,332,333],{},"STX",[277,335,336],{},"34",[277,338,339],{},"\"",[277,341,342],{},"66",[277,344,345],{},"B",[277,347,348],{},"98",[277,350,351],{},"b",[231,353,354,356,359,362,365,368,371,374],{},[277,355,159],{},[277,357,358],{},"ETX",[277,360,361],{},"35",[277,363,364],{},"#",[277,366,367],{},"67",[277,369,370],{},"C",[277,372,373],{},"99",[277,375,376],{},"c",[231,378,379,382,385,388,391,394,397,400],{},[277,380,381],{},"4",[277,383,384],{},"EOT",[277,386,387],{},"36",[277,389,390],{},"$",[277,392,393],{},"68",[277,395,396],{},"D",[277,398,399],{},"100",[277,401,402],{},"d",[231,404,405,408,411,414,417,420,423,426],{},[277,406,407],{},"5",[277,409,410],{},"ENQ",[277,412,413],{},"37",[277,415,416],{},"%",[277,418,419],{},"69",[277,421,422],{},"E",[277,424,425],{},"101",[277,427,162],{},[231,429,430,433,436,439,442,445,448,451],{},[277,431,432],{},"6",[277,434,435],{},"ACK",[277,437,438],{},"38",[277,440,441],{},"&",[277,443,444],{},"70",[277,446,447],{},"F",[277,449,450],{},"102",[277,452,140],{},[231,454,455,458,461,464,467,470,473,476],{},[277,456,457],{},"7",[277,459,460],{},"BEL",[277,462,463],{},"39",[277,465,466],{},",",[277,468,469],{},"71",[277,471,472],{},"G",[277,474,475],{},"103",[277,477,478],{},"g",[231,480,481,484,487,490,492,495,498,501],{},[277,482,483],{},"8",[277,485,486],{},"BS",[277,488,489],{},"40",[277,491,87],{},[277,493,494],{},"72",[277,496,497],{},"H",[277,499,500],{},"104",[277,502,503],{},"h",[231,505,506,509,512,515,518,521,524,527],{},[277,507,508],{},"9",[277,510,511],{},"HT",[277,513,514],{},"41",[277,516,517],{},")",[277,519,520],{},"73",[277,522,523],{},"I",[277,525,526],{},"105",[277,528,529],{},"i",[231,531,532,535,538,541,544,547,550,553],{},[277,533,534],{},"10",[277,536,537],{},"LF",[277,539,540],{},"42",[277,542,543],{},"*",[277,545,546],{},"74",[277,548,549],{},"J",[277,551,552],{},"106",[277,554,555],{},"j",[231,557,558,561,564,567,570,573,576,579],{},[277,559,560],{},"11",[277,562,563],{},"VT",[277,565,566],{},"43",[277,568,569],{},"+",[277,571,572],{},"75",[277,574,575],{},"K",[277,577,578],{},"107",[277,580,581],{},"k",[231,583,584,587,590,593,595,598,601,604],{},[277,585,586],{},"12",[277,588,589],{},"FF",[277,591,592],{},"44",[277,594,466],{},[277,596,597],{},"76",[277,599,600],{},"L",[277,602,603],{},"108",[277,605,606],{},"l",[231,608,609,612,615,618,621,624,627,630],{},[277,610,611],{},"13",[277,613,614],{},"CR",[277,616,617],{},"45",[277,619,620],{},"-",[277,622,623],{},"77",[277,625,626],{},"M",[277,628,629],{},"109",[277,631,632],{},"m",[231,634,635,638,641,644,647,650,653,656],{},[277,636,637],{},"14",[277,639,640],{},"SO",[277,642,643],{},"46",[277,645,646],{},".",[277,648,649],{},"78",[277,651,652],{},"N",[277,654,655],{},"110",[277,657,658],{},"n",[231,660,661,664,667,670,673,676,679,682],{},[277,662,663],{},"15",[277,665,666],{},"SI",[277,668,669],{},"47",[277,671,672],{},"\u002F",[277,674,675],{},"79",[277,677,678],{},"O",[277,680,681],{},"111",[277,683,684],{},"o",[231,686,687,690,693,696,698,701,704,707],{},[277,688,689],{},"16",[277,691,692],{},"DLE",[277,694,695],{},"48",[277,697,279],{},[277,699,700],{},"80",[277,702,703],{},"P",[277,705,706],{},"112",[277,708,21],{},[231,710,711,714,717,720,722,725,728,731],{},[277,712,713],{},"17",[277,715,716],{},"DCI",[277,718,719],{},"49",[277,721,305],{},[277,723,724],{},"81",[277,726,727],{},"Q",[277,729,730],{},"113",[277,732,733],{},"q",[231,735,736,739,742,745,747,750,753,756],{},[277,737,738],{},"18",[277,740,741],{},"DC2",[277,743,744],{},"50",[277,746,165],{},[277,748,749],{},"82",[277,751,752],{},"R",[277,754,755],{},"114",[277,757,758],{},"r",[231,760,761,764,767,770,772,775,778,781],{},[277,762,763],{},"19",[277,765,766],{},"DC3",[277,768,769],{},"51",[277,771,159],{},[277,773,774],{},"83",[277,776,777],{},"S",[277,779,780],{},"115",[277,782,783],{},"s",[231,785,786,789,792,795,797,800,803,806],{},[277,787,788],{},"20",[277,790,791],{},"DC4",[277,793,794],{},"52",[277,796,381],{},[277,798,799],{},"84",[277,801,802],{},"T",[277,804,805],{},"116",[277,807,808],{},"t",[231,810,811,814,817,820,822,825,828,831],{},[277,812,813],{},"21",[277,815,816],{},"NAK",[277,818,819],{},"53",[277,821,407],{},[277,823,824],{},"85",[277,826,827],{},"U",[277,829,830],{},"117",[277,832,833],{},"u",[231,835,836,839,842,845,847,850,853,856],{},[277,837,838],{},"22",[277,840,841],{},"SYN",[277,843,844],{},"54",[277,846,432],{},[277,848,849],{},"86",[277,851,852],{},"V",[277,854,855],{},"118",[277,857,858],{},"v",[231,860,861,864,867,870,872,875,878,881],{},[277,862,863],{},"23",[277,865,866],{},"TB",[277,868,869],{},"55",[277,871,457],{},[277,873,874],{},"87",[277,876,877],{},"W",[277,879,880],{},"119",[277,882,883],{},"w",[231,885,886,889,892,895,897,900,903,906],{},[277,887,888],{},"24",[277,890,891],{},"CAN",[277,893,894],{},"56",[277,896,483],{},[277,898,899],{},"88",[277,901,902],{},"X",[277,904,905],{},"120",[277,907,908],{},"x",[231,910,911,914,917,920,922,925,928,931],{},[277,912,913],{},"25",[277,915,916],{},"EM",[277,918,919],{},"57",[277,921,508],{},[277,923,924],{},"89",[277,926,927],{},"Y",[277,929,930],{},"121",[277,932,933],{},"y",[231,935,936,939,942,945,948,951,954,957],{},[277,937,938],{},"26",[277,940,941],{},"SUB",[277,943,944],{},"58",[277,946,947],{},":",[277,949,950],{},"90",[277,952,953],{},"Z",[277,955,956],{},"122",[277,958,959],{},"z",[231,961,962,965,968,971,973,976,979,982],{},[277,963,964],{},"27",[277,966,967],{},"ESC",[277,969,970],{},"59",[277,972,143],{},[277,974,975],{},"91",[277,977,978],{},"[",[277,980,981],{},"123",[277,983,984],{},"{",[231,986,987,990,993,996,999,1002,1004,1007],{},[277,988,989],{},"28",[277,991,992],{},"FS",[277,994,995],{},"60",[277,997,998],{},"\u003C",[277,1000,1001],{},"92",[277,1003,672],{},[277,1005,1006],{},"124",[277,1008,1009],{},"|",[231,1011,1012,1015,1018,1021,1023,1026,1029,1032],{},[277,1013,1014],{},"29",[277,1016,1017],{},"GS",[277,1019,1020],{},"61",[277,1022,133],{},[277,1024,1025],{},"93",[277,1027,1028],{},"]",[277,1030,1031],{},"125",[277,1033,1034],{},"}",[231,1036,1037,1040,1043,1046,1049,1052,1055,1058],{},[277,1038,1039],{},"30",[277,1041,1042],{},"RS",[277,1044,1045],{},"62",[277,1047,1048],{},">",[277,1050,1051],{},"94",[277,1053,1054],{},"^",[277,1056,1057],{},"126",[277,1059,1060],{},"`",[231,1062,1063,1066,1069,1072,1075,1078,1081,1084],{},[277,1064,1065],{},"31",[277,1067,1068],{},"US",[277,1070,1071],{},"63",[277,1073,1074],{},"?",[277,1076,1077],{},"95",[277,1079,1080],{},"_",[277,1082,1083],{},"127",[277,1085,1086],{},"DEL",[21,1088,1089,1090,1093],{},"ASCII 码大致由以下",[237,1091,1092],{},"两部分组","成：",[1095,1096,1097,1104],"ul",{},[32,1098,1099,1100,1103],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[237,1101,1102],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[32,1105,1106,1107,1110],{},"ASCII 打印字符：数字 ",[237,1108,1109],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[46,1112,1114],{"id":1113},"_134转义字符","1.3.4转义字符",[66,1116,1118],{"className":68,"code":1117,"language":70,"meta":71,"style":71},"\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",[73,1119,1120,1125,1141,1156,1162,1176,1182],{"__ignoreMap":71},[76,1121,1122],{"class":78,"line":79},[76,1123,1124],{"class":146},"\u002F\u002F换行符\n",[76,1126,1127,1130,1133,1136,1138],{"class":78,"line":96},[76,1128,1129],{"class":86},"cout ",[76,1131,1132],{"class":82},"\u003C\u003C",[76,1134,1135],{"class":192},"\"hello world\u002Fn\"",[76,1137,143],{"class":86},[76,1139,1140],{"class":146}," \u002F\u002F就等同于如下：\n",[76,1142,1144,1146,1148,1151,1153],{"class":78,"line":1143},3,[76,1145,1129],{"class":86},[76,1147,1132],{"class":82},[76,1149,1150],{"class":192},"\"hello world\"",[76,1152,1132],{"class":82},[76,1154,1155],{"class":86},"endl;\n",[76,1157,1159],{"class":78,"line":1158},4,[76,1160,1161],{"class":146},"\u002F\u002F反斜杠\n",[76,1163,1165,1167,1169,1172,1174],{"class":78,"line":1164},5,[76,1166,1129],{"class":86},[76,1168,1132],{"class":82},[76,1170,1171],{"class":192},"\"\u002F\u002F\"",[76,1173,1132],{"class":82},[76,1175,1155],{"class":86},[76,1177,1179],{"class":78,"line":1178},6,[76,1180,1181],{"class":146},"\u002F\u002F水平制表符\n",[76,1183,1185,1187,1189,1192,1195,1198,1200,1203],{"class":78,"line":1184},7,[76,1186,1129],{"class":86},[76,1188,1132],{"class":82},[76,1190,1191],{"class":192},"\"aaaa",[76,1193,1194],{"class":136},"\\t",[76,1196,1197],{"class":192},"helloworld\"",[76,1199,1132],{"class":82},[76,1201,1202],{"class":86},"endl;",[76,1204,1205],{"class":146}," \u002F\u002F输出窗口时有对齐效果\n",[46,1207,1209],{"id":1208},"_135字符串型","1.3.5字符串型",[21,1211,1212,1213,1215],{},"char 变量名",[76,1214],{},"=\"字符串值\"",[66,1217,1219],{"className":68,"code":1218,"language":70,"meta":71,"style":71},"\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",[73,1220,1221,1226,1231,1236,1241,1255,1268,1273,1279,1291],{"__ignoreMap":71},[76,1222,1223],{"class":78,"line":79},[76,1224,1225],{"class":146},"\u002F\u002Fc风格字符串\n",[76,1227,1228],{"class":78,"line":96},[76,1229,1230],{"class":146},"\u002F\u002F注意事项：\n",[76,1232,1233],{"class":78,"line":1143},[76,1234,1235],{"class":146},"\u002F\u002F1.char字符串名[]\n",[76,1237,1238],{"class":78,"line":1158},[76,1239,1240],{"class":146},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[76,1242,1243,1245,1248,1250,1252],{"class":78,"line":1164},[76,1244,184],{"class":82},[76,1246,1247],{"class":86}," str[]",[76,1249,133],{"class":82},[76,1251,1150],{"class":192},[76,1253,1254],{"class":86},";\n",[76,1256,1257,1259,1261,1264,1266],{"class":78,"line":1178},[76,1258,1129],{"class":86},[76,1260,1132],{"class":82},[76,1262,1263],{"class":86},"str",[76,1265,1132],{"class":82},[76,1267,1155],{"class":86},[76,1269,1270],{"class":78,"line":1184},[76,1271,1272],{"class":146},"\u002F\u002Fc++风格字符串\n",[76,1274,1276],{"class":78,"line":1275},8,[76,1277,1278],{"class":146},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[76,1280,1282,1285,1287,1289],{"class":78,"line":1281},9,[76,1283,1284],{"class":86},"string str2",[76,1286,133],{"class":82},[76,1288,1150],{"class":192},[76,1290,1254],{"class":86},[76,1292,1294,1296,1298,1301,1303],{"class":78,"line":1293},10,[76,1295,1129],{"class":86},[76,1297,1132],{"class":82},[76,1299,1300],{"class":86},"str2",[76,1302,1132],{"class":82},[76,1304,1155],{"class":86},[46,1306,1308],{"id":1307},"_136布尔类型bool","1.3.6布尔类型bool",[66,1310,1312],{"className":68,"code":1311,"language":70,"meta":71,"style":71},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[73,1313,1314,1329],{"__ignoreMap":71},[76,1315,1316,1319,1322,1324,1327],{"class":78,"line":79},[76,1317,1318],{"class":82},"bool",[76,1320,1321],{"class":86}," flag",[76,1323,133],{"class":82},[76,1325,1326],{"class":136},"true",[76,1328,1254],{"class":86},[76,1330,1331,1334,1337,1340,1342,1344],{"class":78,"line":96},[76,1332,1333],{"class":86},"cout",[76,1335,1336],{"class":82},"\u003C\u003Csizeof",[76,1338,1339],{"class":86},"(flag)",[76,1341,1132],{"class":82},[76,1343,1202],{"class":86},[76,1345,1346],{"class":146}," \u002F\u002F查看布尔占内存空间\n",[16,1348,1350],{"id":1349},"_14键盘输入cin","1.4键盘输入cin",[66,1352,1354],{"className":68,"code":1353,"language":70,"meta":71,"style":71},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[73,1355,1356,1369,1386,1397],{"__ignoreMap":71},[76,1357,1358,1360,1363,1365,1367],{"class":78,"line":79},[76,1359,90],{"class":82},[76,1361,1362],{"class":86}," a",[76,1364,133],{"class":82},[76,1366,279],{"class":136},[76,1368,1254],{"class":86},[76,1370,1371,1373,1375,1378,1380,1382,1384],{"class":78,"line":96},[76,1372,1333],{"class":86},[76,1374,1132],{"class":82},[76,1376,1377],{"class":192},"\"请给整型变量a赋值\"",[76,1379,1132],{"class":82},[76,1381,326],{"class":86},[76,1383,1132],{"class":82},[76,1385,1155],{"class":86},[76,1387,1388,1391,1394],{"class":78,"line":1143},[76,1389,1390],{"class":86},"cin ",[76,1392,1393],{"class":82},">>",[76,1395,1396],{"class":86}," a;\n",[76,1398,1399,1401,1403,1406,1409,1411,1413],{"class":78,"line":1158},[76,1400,1129],{"class":86},[76,1402,1132],{"class":82},[76,1404,1405],{"class":192}," \"整型变量a=\"",[76,1407,1408],{"class":82}," \u003C\u003C",[76,1410,326],{"class":86},[76,1412,1132],{"class":82},[76,1414,1155],{"class":86},[16,1416,1418],{"id":1417},"_15运算符","1.5运算符",[46,1420,1422],{"id":1421},"_151算术运算符","1.5.1算术运算符",[21,1424,1425,1429],{},[1426,1427],"img",{"alt":71,"src":1428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[29,1431,1432,1435,1438],{},[32,1433,1434],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[32,1436,1437],{},"两个小数不可以做取模运算",[32,1439,1440],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[46,1442,1444],{"id":1443},"_152赋值运算符","1.5.2赋值运算符",[21,1446,1447],{},[1426,1448],{"alt":71,"src":1449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[46,1451,1453],{"id":1452},"_153比较运算符","1.5.3比较运算符",[21,1455,1456],{},[1426,1457],{"alt":71,"src":1458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[46,1460,1462],{"id":1461},"_154逻辑运算符","1.5.4逻辑运算符",[21,1464,1465],{},[1426,1466],{"alt":71,"src":1467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[16,1469,1471],{"id":1470},"_16程序流程结构","1.6程序流程结构",[46,1473,1475],{"id":1474},"_161选择结构","1.6.1选择结构",[29,1477,1478],{},[32,1479,1480],{},"if语句\n单行、多行、多条件if语句",[66,1482,1484],{"className":68,"code":1483,"language":70,"meta":71,"style":71},"\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",[73,1485,1486,1491,1506,1511,1525,1530,1535,1544,1557,1561,1574,1579,1585,1590,1604,1609,1615,1636,1641,1655,1660,1689,1694,1711,1716,1721,1726,1740,1745],{"__ignoreMap":71},[76,1487,1488],{"class":78,"line":79},[76,1489,1490],{"class":146},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[76,1492,1493,1496,1499,1501,1504],{"class":78,"line":96},[76,1494,1495],{"class":82},"if",[76,1497,1498],{"class":86},"(score",[76,1500,1048],{"class":82},[76,1502,1503],{"class":136},"600",[76,1505,93],{"class":86},[76,1507,1508],{"class":78,"line":1143},[76,1509,1510],{"class":86},"{\n",[76,1512,1513,1516,1518,1521,1523],{"class":78,"line":1158},[76,1514,1515],{"class":86},"    cout",[76,1517,1132],{"class":82},[76,1519,1520],{"class":192},"'这是单行if语句'",[76,1522,1132],{"class":82},[76,1524,1155],{"class":86},[76,1526,1527],{"class":78,"line":1164},[76,1528,1529],{"class":86},"}\n",[76,1531,1532],{"class":78,"line":1178},[76,1533,1534],{"class":146},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[76,1536,1537,1539,1541],{"class":78,"line":1184},[76,1538,1390],{"class":86},[76,1540,1393],{"class":82},[76,1542,1543],{"class":86}," score\n",[76,1545,1546,1548,1550,1553,1555],{"class":78,"line":1275},[76,1547,1495],{"class":82},[76,1549,1498],{"class":86},[76,1551,1552],{"class":82},"\u003C=",[76,1554,1503],{"class":136},[76,1556,93],{"class":86},[76,1558,1559],{"class":78,"line":1281},[76,1560,1510],{"class":86},[76,1562,1563,1565,1567,1570,1572],{"class":78,"line":1293},[76,1564,1515],{"class":86},[76,1566,1393],{"class":82},[76,1568,1569],{"class":192},"\"小于等于600\"",[76,1571,1132],{"class":82},[76,1573,1155],{"class":86},[76,1575,1577],{"class":78,"line":1576},11,[76,1578,1529],{"class":86},[76,1580,1582],{"class":78,"line":1581},12,[76,1583,1584],{"class":82},"else\n",[76,1586,1588],{"class":78,"line":1587},13,[76,1589,1510],{"class":86},[76,1591,1593,1595,1597,1600,1602],{"class":78,"line":1592},14,[76,1594,1515],{"class":86},[76,1596,1393],{"class":82},[76,1598,1599],{"class":192},"\"大于600\"",[76,1601,1393],{"class":82},[76,1603,1155],{"class":86},[76,1605,1607],{"class":78,"line":1606},15,[76,1608,1529],{"class":86},[76,1610,1612],{"class":78,"line":1611},16,[76,1613,1614],{"class":146},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[76,1616,1618,1620,1623,1625,1627,1630,1632,1634],{"class":78,"line":1617},17,[76,1619,1495],{"class":82},[76,1621,1622],{"class":86}," (",[76,1624,279],{"class":136},[76,1626,998],{"class":82},[76,1628,1629],{"class":86},"num",[76,1631,998],{"class":82},[76,1633,399],{"class":136},[76,1635,93],{"class":86},[76,1637,1639],{"class":78,"line":1638},18,[76,1640,1510],{"class":86},[76,1642,1644,1646,1648,1651,1653],{"class":78,"line":1643},19,[76,1645,1515],{"class":86},[76,1647,1132],{"class":82},[76,1649,1650],{"class":192},"\"小于100\"",[76,1652,1132],{"class":82},[76,1654,1155],{"class":86},[76,1656,1658],{"class":78,"line":1657},20,[76,1659,1529],{"class":86},[76,1661,1663,1666,1669,1672,1675,1677,1680,1682,1684,1687],{"class":78,"line":1662},21,[76,1664,1665],{"class":82},"else",[76,1667,1668],{"class":82}," if",[76,1670,1671],{"class":86}," (nmu",[76,1673,1674],{"class":82},">=",[76,1676,399],{"class":136},[76,1678,1679],{"class":82},"&&",[76,1681,1629],{"class":86},[76,1683,998],{"class":82},[76,1685,1686],{"class":136},"200",[76,1688,93],{"class":86},[76,1690,1692],{"class":78,"line":1691},22,[76,1693,1510],{"class":86},[76,1695,1697,1699,1701,1704,1706,1708],{"class":78,"line":1696},23,[76,1698,1515],{"class":86},[76,1700,1132],{"class":82},[76,1702,1703],{"class":192},"\"不小于100且小于200\"",[76,1705,1132],{"class":82},[76,1707,1202],{"class":86},[76,1709,1710],{"class":146}," \u002F\u002F可以无限else if,python中是elif：\n",[76,1712,1714],{"class":78,"line":1713},24,[76,1715,1529],{"class":86},[76,1717,1719],{"class":78,"line":1718},25,[76,1720,1584],{"class":82},[76,1722,1724],{"class":78,"line":1723},26,[76,1725,1510],{"class":86},[76,1727,1729,1731,1733,1736,1738],{"class":78,"line":1728},27,[76,1730,1515],{"class":86},[76,1732,1132],{"class":82},[76,1734,1735],{"class":192},"\"不小于200\"",[76,1737,1132],{"class":82},[76,1739,1155],{"class":86},[76,1741,1743],{"class":78,"line":1742},28,[76,1744,1529],{"class":86},[76,1746,1748],{"class":78,"line":1747},29,[76,1749,1750],{"class":146},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[29,1752,1753],{"start":96},[32,1754,1755],{},"三目运算符",[66,1757,1759],{"className":68,"code":1758,"language":70,"meta":71,"style":71},"\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",[73,1760,1761,1766,1771,1797,1819,1836,1841,1864,1879],{"__ignoreMap":71},[76,1762,1763],{"class":78,"line":79},[76,1764,1765],{"class":146},"\u002F\u002F创建三个变量a,b,c\n",[76,1767,1768],{"class":78,"line":96},[76,1769,1770],{"class":146},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[76,1772,1773,1775,1777,1779,1781,1784,1786,1788,1791,1793,1795],{"class":78,"line":1143},[76,1774,90],{"class":82},[76,1776,1362],{"class":86},[76,1778,133],{"class":82},[76,1780,788],{"class":136},[76,1782,1783],{"class":86},",b",[76,1785,133],{"class":82},[76,1787,534],{"class":136},[76,1789,1790],{"class":86},",c",[76,1792,133],{"class":82},[76,1794,279],{"class":136},[76,1796,1254],{"class":86},[76,1798,1799,1801,1803,1806,1808,1810,1812,1814,1816],{"class":78,"line":1158},[76,1800,376],{"class":86},[76,1802,133],{"class":82},[76,1804,1805],{"class":86},"(a",[76,1807,1048],{"class":82},[76,1809,351],{"class":86},[76,1811,1074],{"class":82},[76,1813,326],{"class":86},[76,1815,947],{"class":82},[76,1817,1818],{"class":86},"b)\n",[76,1820,1821,1823,1825,1828,1830,1832,1834],{"class":78,"line":1164},[76,1822,1333],{"class":86},[76,1824,1132],{"class":82},[76,1826,1827],{"class":192},"\"c=\"",[76,1829,1132],{"class":82},[76,1831,376],{"class":86},[76,1833,1132],{"class":82},[76,1835,1155],{"class":86},[76,1837,1838],{"class":78,"line":1178},[76,1839,1840],{"class":146},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[76,1842,1843,1845,1847,1849,1851,1853,1855,1858,1860,1862],{"class":78,"line":1184},[76,1844,1805],{"class":86},[76,1846,1048],{"class":82},[76,1848,351],{"class":86},[76,1850,1074],{"class":82},[76,1852,326],{"class":86},[76,1854,947],{"class":82},[76,1856,1857],{"class":86},"b)",[76,1859,133],{"class":82},[76,1861,399],{"class":136},[76,1863,1254],{"class":86},[76,1865,1866,1868,1870,1872,1874,1876],{"class":78,"line":1275},[76,1867,1333],{"class":86},[76,1869,1132],{"class":82},[76,1871,326],{"class":86},[76,1873,1132],{"class":82},[76,1875,1202],{"class":86},[76,1877,1878],{"class":146}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[76,1880,1881,1883,1885,1887,1889,1891],{"class":78,"line":1281},[76,1882,1333],{"class":86},[76,1884,1132],{"class":82},[76,1886,351],{"class":86},[76,1888,1132],{"class":82},[76,1890,1202],{"class":86},[76,1892,1893],{"class":146}," \u002F\u002F10   a>b,b还是原值\n",[29,1895,1896],{"start":1143},[32,1897,1898],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[66,1900,1902],{"className":68,"code":1901,"language":70,"meta":71,"style":71},"\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",[73,1903,1904,1909,1917,1931,1941,1945,1959,1972,1982,1990,1995,2020,2041,2063,2084,2106,2127,2147,2152],{"__ignoreMap":71},[76,1905,1906],{"class":78,"line":79},[76,1907,1908],{"class":146},"\u002F\u002F案例-电影打分\n",[76,1910,1911,1914],{"class":78,"line":96},[76,1912,1913],{"class":82},"#include",[76,1915,1916],{"class":192},"\u003Ciostream>\n",[76,1918,1919,1922,1925,1929],{"class":78,"line":1143},[76,1920,1921],{"class":82},"using",[76,1923,1924],{"class":82}," namespace",[76,1926,1928],{"class":1927},"sScJk"," std",[76,1930,1254],{"class":86},[76,1932,1933,1935,1938],{"class":78,"line":1158},[76,1934,90],{"class":82},[76,1936,1937],{"class":1927}," main",[76,1939,1940],{"class":86},"()\n",[76,1942,1943],{"class":78,"line":1164},[76,1944,1510],{"class":86},[76,1946,1947,1950,1953,1955,1957],{"class":78,"line":1178},[76,1948,1949],{"class":82},"    int",[76,1951,1952],{"class":86}," score",[76,1954,133],{"class":82},[76,1956,279],{"class":136},[76,1958,1254],{"class":86},[76,1960,1961,1963,1965,1968,1970],{"class":78,"line":1184},[76,1962,1515],{"class":86},[76,1964,1132],{"class":82},[76,1966,1967],{"class":192},"\"电影打分：\"",[76,1969,1132],{"class":82},[76,1971,1155],{"class":86},[76,1973,1974,1977,1979],{"class":78,"line":1275},[76,1975,1976],{"class":86},"    cin",[76,1978,1393],{"class":82},[76,1980,1981],{"class":86},"score;\n",[76,1983,1984,1987],{"class":78,"line":1281},[76,1985,1986],{"class":82},"    switch",[76,1988,1989],{"class":86},"(score)\n",[76,1991,1992],{"class":78,"line":1293},[76,1993,1994],{"class":86},"    {\n",[76,1996,1997,2000,2003,2006,2008,2011,2013,2015,2018],{"class":78,"line":1576},[76,1998,1999],{"class":82},"        case",[76,2001,2002],{"class":136}," 10",[76,2004,2005],{"class":86},":cout",[76,2007,1132],{"class":82},[76,2009,2010],{"class":192},"\"经典\"",[76,2012,1132],{"class":82},[76,2014,1202],{"class":86},[76,2016,2017],{"class":82},"break",[76,2019,1254],{"class":86},[76,2021,2022,2024,2027,2029,2031,2033,2035,2037,2039],{"class":78,"line":1581},[76,2023,1999],{"class":82},[76,2025,2026],{"class":136}," 9",[76,2028,2005],{"class":86},[76,2030,1132],{"class":82},[76,2032,2010],{"class":192},[76,2034,1132],{"class":82},[76,2036,1202],{"class":86},[76,2038,2017],{"class":82},[76,2040,1254],{"class":86},[76,2042,2043,2045,2048,2050,2052,2055,2057,2059,2061],{"class":78,"line":1587},[76,2044,1999],{"class":82},[76,2046,2047],{"class":136}," 8",[76,2049,2005],{"class":86},[76,2051,1132],{"class":82},[76,2053,2054],{"class":192},"\"非常好\"",[76,2056,1132],{"class":82},[76,2058,1202],{"class":86},[76,2060,2017],{"class":82},[76,2062,1254],{"class":86},[76,2064,2065,2067,2070,2072,2074,2076,2078,2080,2082],{"class":78,"line":1592},[76,2066,1999],{"class":82},[76,2068,2069],{"class":136}," 7",[76,2071,2005],{"class":86},[76,2073,1132],{"class":82},[76,2075,2054],{"class":192},[76,2077,1132],{"class":82},[76,2079,1202],{"class":86},[76,2081,2017],{"class":82},[76,2083,1254],{"class":86},[76,2085,2086,2088,2091,2093,2095,2098,2100,2102,2104],{"class":78,"line":1606},[76,2087,1999],{"class":82},[76,2089,2090],{"class":136}," 6",[76,2092,2005],{"class":86},[76,2094,1132],{"class":82},[76,2096,2097],{"class":192},"\"一般\"",[76,2099,1132],{"class":82},[76,2101,1202],{"class":86},[76,2103,2017],{"class":82},[76,2105,1254],{"class":86},[76,2107,2108,2110,2113,2115,2117,2119,2121,2123,2125],{"class":78,"line":1611},[76,2109,1999],{"class":82},[76,2111,2112],{"class":136}," 5",[76,2114,2005],{"class":86},[76,2116,1132],{"class":82},[76,2118,2097],{"class":192},[76,2120,1132],{"class":82},[76,2122,1202],{"class":86},[76,2124,2017],{"class":82},[76,2126,1254],{"class":86},[76,2128,2129,2132,2134,2136,2139,2141,2143,2145],{"class":78,"line":1617},[76,2130,2131],{"class":82},"        default",[76,2133,2005],{"class":86},[76,2135,1132],{"class":82},[76,2137,2138],{"class":192},"\"烂片\"",[76,2140,1132],{"class":82},[76,2142,1202],{"class":86},[76,2144,2017],{"class":82},[76,2146,1254],{"class":86},[76,2148,2149],{"class":78,"line":1638},[76,2150,2151],{"class":86},"    }\n",[76,2153,2154],{"class":78,"line":1643},[76,2155,1529],{"class":86},[21,2157,2158],{},"if和switch区别：",[1095,2160,2161,2164],{},[32,2162,2163],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[32,2165,2166],{},"switch优点：结构清晰，执行效率高",[46,2168,2170],{"id":2169},"_162循环结构","1.6.2循环结构",[29,2172,2173],{},[32,2174,2175],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[66,2177,2179],{"className":68,"code":2178,"language":70,"meta":71,"style":71},"\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",[73,2180,2181,2186,2194,2198,2211,2225,2229,2249,2259,2263,2275],{"__ignoreMap":71},[76,2182,2183],{"class":78,"line":79},[76,2184,2185],{"class":146},"\u002F\u002F打印0-9数字\n",[76,2187,2188,2190,2192],{"class":78,"line":96},[76,2189,90],{"class":82},[76,2191,1937],{"class":1927},[76,2193,1940],{"class":86},[76,2195,2196],{"class":78,"line":1143},[76,2197,1510],{"class":86},[76,2199,2200,2202,2205,2207,2209],{"class":78,"line":1158},[76,2201,1949],{"class":82},[76,2203,2204],{"class":86}," num",[76,2206,133],{"class":82},[76,2208,279],{"class":136},[76,2210,1254],{"class":86},[76,2212,2213,2216,2219,2221,2223],{"class":78,"line":1164},[76,2214,2215],{"class":82},"    while",[76,2217,2218],{"class":86},"(num",[76,2220,998],{"class":82},[76,2222,534],{"class":136},[76,2224,93],{"class":86},[76,2226,2227],{"class":78,"line":1178},[76,2228,1994],{"class":86},[76,2230,2231,2234,2237,2239,2241,2243,2246],{"class":78,"line":1184},[76,2232,2233],{"class":1927},"       std",[76,2235,2236],{"class":86},"::cout",[76,2238,1132],{"class":82},[76,2240,1629],{"class":86},[76,2242,1132],{"class":82},[76,2244,2245],{"class":1927},"std",[76,2247,2248],{"class":86},"::endl;\n",[76,2250,2251,2254,2257],{"class":78,"line":1275},[76,2252,2253],{"class":86},"        num",[76,2255,2256],{"class":82},"++",[76,2258,1254],{"class":86},[76,2260,2261],{"class":78,"line":1281},[76,2262,2151],{"class":86},[76,2264,2265,2268,2270,2273],{"class":78,"line":1293},[76,2266,2267],{"class":1927},"    system",[76,2269,87],{"class":86},[76,2271,2272],{"class":192},"\"pause\"",[76,2274,93],{"class":86},[76,2276,2277],{"class":78,"line":1576},[76,2278,1529],{"class":86},[21,2280,2281],{},"注意：写好循环条件，避免死循环情况",[66,2283,2285],{"className":68,"code":2284,"language":70,"meta":71,"style":71},"\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",[73,2286,2287,2292,2299,2306,2316,2324,2328,2333,2360,2366,2371,2379,2406,2411,2416,2429,2439,2443,2453,2458,2471,2476,2490,2495,2510,2514,2527,2531,2536,2540,2554,2562,2567,2573,2579,2584],{"__ignoreMap":71},[76,2288,2289],{"class":78,"line":79},[76,2290,2291],{"class":146},"\u002F\u002F循环结构-猜数字\n",[76,2293,2294,2296],{"class":78,"line":96},[76,2295,1913],{"class":82},[76,2297,2298],{"class":192}," \u003Ciostream>\n",[76,2300,2301,2303],{"class":78,"line":1143},[76,2302,1913],{"class":82},[76,2304,2305],{"class":192}," \u003Cctime>\n",[76,2307,2308,2310,2312,2314],{"class":78,"line":1158},[76,2309,1921],{"class":82},[76,2311,1924],{"class":82},[76,2313,1928],{"class":1927},[76,2315,1254],{"class":86},[76,2317,2318,2320,2322],{"class":78,"line":1164},[76,2319,90],{"class":82},[76,2321,1937],{"class":1927},[76,2323,1940],{"class":86},[76,2325,2326],{"class":78,"line":1178},[76,2327,1510],{"class":86},[76,2329,2330],{"class":78,"line":1184},[76,2331,2332],{"class":146},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[76,2334,2335,2338,2341,2344,2347,2349,2352,2354,2357],{"class":78,"line":1275},[76,2336,2337],{"class":1927},"    srand",[76,2339,2340],{"class":86},"((",[76,2342,2343],{"class":82},"unsigned",[76,2345,2346],{"class":82}," int",[76,2348,517],{"class":86},[76,2350,2351],{"class":1927},"time",[76,2353,87],{"class":86},[76,2355,2356],{"class":136},"NULL",[76,2358,2359],{"class":86},"));\n",[76,2361,2362],{"class":78,"line":1281},[76,2363,2365],{"emptyLinePlaceholder":2364},true,"\n",[76,2367,2368],{"class":78,"line":1293},[76,2369,2370],{"class":146},"    \u002F\u002F1.系统生成随机数\n",[76,2372,2373,2376],{"class":78,"line":1576},[76,2374,2375],{"class":146},"    \u002F\u002Frand()%100",[76,2377,2378],{"class":146}," \u002F\u002F生成0-99的随机数\n",[76,2380,2381,2383,2385,2387,2390,2393,2395,2397,2399,2401,2403],{"class":78,"line":1581},[76,2382,1949],{"class":82},[76,2384,2204],{"class":86},[76,2386,133],{"class":82},[76,2388,2389],{"class":1927},"rand",[76,2391,2392],{"class":86},"()",[76,2394,416],{"class":82},[76,2396,399],{"class":136},[76,2398,569],{"class":82},[76,2400,305],{"class":136},[76,2402,143],{"class":86},[76,2404,2405],{"class":146}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[76,2407,2408],{"class":78,"line":1587},[76,2409,2410],{"class":146},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[76,2412,2413],{"class":78,"line":1592},[76,2414,2415],{"class":146},"    \u002F\u002F2.玩家猜测\n",[76,2417,2418,2420,2423,2425,2427],{"class":78,"line":1606},[76,2419,1949],{"class":82},[76,2421,2422],{"class":86}," val",[76,2424,133],{"class":82},[76,2426,279],{"class":136},[76,2428,1254],{"class":86},[76,2430,2431,2433,2435,2437],{"class":78,"line":1611},[76,2432,2215],{"class":82},[76,2434,1622],{"class":86},[76,2436,305],{"class":136},[76,2438,93],{"class":86},[76,2440,2441],{"class":78,"line":1617},[76,2442,1994],{"class":86},[76,2444,2445,2448,2450],{"class":78,"line":1638},[76,2446,2447],{"class":86},"        cin",[76,2449,1393],{"class":82},[76,2451,2452],{"class":86},"val;\n",[76,2454,2455],{"class":78,"line":1643},[76,2456,2457],{"class":146},"        \u002F\u002F3.判断玩家猜测\n",[76,2459,2460,2463,2466,2468],{"class":78,"line":1657},[76,2461,2462],{"class":82},"        if",[76,2464,2465],{"class":86},"(val",[76,2467,998],{"class":82},[76,2469,2470],{"class":86},"num) \n",[76,2472,2473],{"class":78,"line":1662},[76,2474,2475],{"class":86},"        {\n",[76,2477,2478,2481,2483,2486,2488],{"class":78,"line":1691},[76,2479,2480],{"class":86},"            cout",[76,2482,1132],{"class":82},[76,2484,2485],{"class":192},"\"猜小了！\"",[76,2487,1132],{"class":82},[76,2489,1155],{"class":86},[76,2491,2492],{"class":78,"line":1696},[76,2493,2494],{"class":86},"        }\n",[76,2496,2497,2500,2502,2505,2507],{"class":78,"line":1713},[76,2498,2499],{"class":82},"        else",[76,2501,1668],{"class":82},[76,2503,2504],{"class":86}," (val",[76,2506,1048],{"class":82},[76,2508,2509],{"class":86},"num)\n",[76,2511,2512],{"class":78,"line":1718},[76,2513,2475],{"class":86},[76,2515,2516,2518,2520,2523,2525],{"class":78,"line":1723},[76,2517,2480],{"class":86},[76,2519,1132],{"class":82},[76,2521,2522],{"class":192},"\"猜大了！\"",[76,2524,1132],{"class":82},[76,2526,1155],{"class":86},[76,2528,2529],{"class":78,"line":1728},[76,2530,2494],{"class":86},[76,2532,2533],{"class":78,"line":1742},[76,2534,2535],{"class":82},"        else\n",[76,2537,2538],{"class":78,"line":1747},[76,2539,2475],{"class":86},[76,2541,2543,2545,2547,2550,2552],{"class":78,"line":2542},30,[76,2544,2480],{"class":86},[76,2546,1132],{"class":82},[76,2548,2549],{"class":192},"\"猜对了！\"",[76,2551,1132],{"class":82},[76,2553,1155],{"class":86},[76,2555,2557,2560],{"class":78,"line":2556},31,[76,2558,2559],{"class":82},"            break",[76,2561,1254],{"class":86},[76,2563,2565],{"class":78,"line":2564},32,[76,2566,2494],{"class":86},[76,2568,2570],{"class":78,"line":2569},33,[76,2571,2572],{"class":146},"        \u002F\u002F猜对 退出游戏\n",[76,2574,2576],{"class":78,"line":2575},34,[76,2577,2578],{"class":146},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[76,2580,2582],{"class":78,"line":2581},35,[76,2583,2151],{"class":86},[76,2585,2587],{"class":78,"line":2586},36,[76,2588,1529],{"class":86},[29,2590,2591],{"start":96},[32,2592,2593,2594,2597],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[237,2595,2596],{},"do...while会先执行一次循环语句","，在判断循环语句",[66,2599,2601],{"className":68,"code":2600,"language":70,"meta":71,"style":71},"\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",[73,2602,2603,2608,2616,2620,2632,2640,2644,2661,2668,2672,2685,2695],{"__ignoreMap":71},[76,2604,2605],{"class":78,"line":79},[76,2606,2607],{"class":146},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[76,2609,2610,2612,2614],{"class":78,"line":96},[76,2611,90],{"class":82},[76,2613,1937],{"class":1927},[76,2615,1940],{"class":86},[76,2617,2618],{"class":78,"line":1143},[76,2619,1510],{"class":86},[76,2621,2622,2624,2626,2628,2630],{"class":78,"line":1158},[76,2623,1949],{"class":82},[76,2625,2204],{"class":86},[76,2627,133],{"class":82},[76,2629,279],{"class":136},[76,2631,1254],{"class":86},[76,2633,2634,2637],{"class":78,"line":1164},[76,2635,2636],{"class":82},"    do",[76,2638,2639],{"class":86}," \n",[76,2641,2642],{"class":78,"line":1178},[76,2643,1994],{"class":86},[76,2645,2646,2649,2651,2653,2655,2657,2659],{"class":78,"line":1184},[76,2647,2648],{"class":1927},"        std",[76,2650,2236],{"class":86},[76,2652,1132],{"class":82},[76,2654,1629],{"class":86},[76,2656,1132],{"class":82},[76,2658,2245],{"class":1927},[76,2660,2248],{"class":86},[76,2662,2663,2665],{"class":78,"line":1275},[76,2664,2253],{"class":86},[76,2666,2667],{"class":82},"++\n",[76,2669,2670],{"class":78,"line":1281},[76,2671,2151],{"class":86},[76,2673,2674,2676,2678,2680,2682],{"class":78,"line":1293},[76,2675,2215],{"class":82},[76,2677,2218],{"class":86},[76,2679,998],{"class":82},[76,2681,534],{"class":136},[76,2683,2684],{"class":86},");\n",[76,2686,2687,2689,2691,2693],{"class":78,"line":1576},[76,2688,2267],{"class":1927},[76,2690,87],{"class":86},[76,2692,2272],{"class":192},[76,2694,2684],{"class":86},[76,2696,2697],{"class":78,"line":1581},[76,2698,1529],{"class":86},[21,2700,2701],{},"案例-水仙花数",[21,2703,2704],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[21,2706,2707],{},"例如：1^3+5^3+3^3=153",[21,2709,2710],{},"请用do...while语句，求出所有3位数的水仙花数",[66,2712,2714],{"className":68,"code":2713,"language":70,"meta":71,"style":71},"#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",[73,2715,2716,2722,2732,2740,2744,2749,2761,2767,2771,2776,2792,2808,2824,2839,2858,2873,2921,2925,2937,2941,2949,2953,2967],{"__ignoreMap":71},[76,2717,2718,2720],{"class":78,"line":79},[76,2719,1913],{"class":82},[76,2721,2298],{"class":192},[76,2723,2724,2726,2728,2730],{"class":78,"line":96},[76,2725,1921],{"class":82},[76,2727,1924],{"class":82},[76,2729,1928],{"class":1927},[76,2731,1254],{"class":86},[76,2733,2734,2736,2738],{"class":78,"line":1143},[76,2735,90],{"class":82},[76,2737,1937],{"class":1927},[76,2739,1940],{"class":86},[76,2741,2742],{"class":78,"line":1158},[76,2743,1510],{"class":86},[76,2745,2746],{"class":78,"line":1164},[76,2747,2748],{"class":146},"    \u002F\u002F1.先打印所有三位数字\n",[76,2750,2751,2753,2755,2757,2759],{"class":78,"line":1178},[76,2752,1949],{"class":82},[76,2754,2204],{"class":86},[76,2756,133],{"class":82},[76,2758,399],{"class":136},[76,2760,1254],{"class":86},[76,2762,2763,2765],{"class":78,"line":1184},[76,2764,2636],{"class":82},[76,2766,2639],{"class":86},[76,2768,2769],{"class":78,"line":1275},[76,2770,1994],{"class":86},[76,2772,2773],{"class":78,"line":1281},[76,2774,2775],{"class":146},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[76,2777,2778,2781,2783,2785,2787,2789],{"class":78,"line":1293},[76,2779,2780],{"class":82},"        int",[76,2782,1362],{"class":86},[76,2784,133],{"class":82},[76,2786,279],{"class":136},[76,2788,143],{"class":86},[76,2790,2791],{"class":146}," \u002F\u002F个位\n",[76,2793,2794,2796,2799,2801,2803,2805],{"class":78,"line":1576},[76,2795,2780],{"class":82},[76,2797,2798],{"class":86}," b",[76,2800,133],{"class":82},[76,2802,279],{"class":136},[76,2804,143],{"class":86},[76,2806,2807],{"class":146}," \u002F\u002F十位\n",[76,2809,2810,2812,2815,2817,2819,2821],{"class":78,"line":1581},[76,2811,2780],{"class":82},[76,2813,2814],{"class":86}," c",[76,2816,133],{"class":82},[76,2818,279],{"class":136},[76,2820,143],{"class":86},[76,2822,2823],{"class":146}," \u002F\u002F百位\n",[76,2825,2826,2829,2831,2833,2835,2837],{"class":78,"line":1587},[76,2827,2828],{"class":86},"        a",[76,2830,133],{"class":82},[76,2832,1629],{"class":86},[76,2834,416],{"class":82},[76,2836,534],{"class":136},[76,2838,1254],{"class":86},[76,2840,2841,2844,2846,2848,2850,2852,2854,2856],{"class":78,"line":1592},[76,2842,2843],{"class":86},"        b",[76,2845,133],{"class":82},[76,2847,1629],{"class":86},[76,2849,672],{"class":82},[76,2851,534],{"class":136},[76,2853,416],{"class":82},[76,2855,534],{"class":136},[76,2857,1254],{"class":86},[76,2859,2860,2863,2865,2867,2869,2871],{"class":78,"line":1606},[76,2861,2862],{"class":86},"        c",[76,2864,133],{"class":82},[76,2866,1629],{"class":86},[76,2868,672],{"class":82},[76,2870,399],{"class":136},[76,2872,1254],{"class":86},[76,2874,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2912,2915,2918],{"class":78,"line":1611},[76,2876,2462],{"class":82},[76,2878,1805],{"class":86},[76,2880,543],{"class":82},[76,2882,326],{"class":86},[76,2884,543],{"class":82},[76,2886,326],{"class":86},[76,2888,569],{"class":82},[76,2890,351],{"class":86},[76,2892,543],{"class":82},[76,2894,351],{"class":86},[76,2896,543],{"class":82},[76,2898,351],{"class":86},[76,2900,569],{"class":82},[76,2902,376],{"class":86},[76,2904,543],{"class":82},[76,2906,376],{"class":86},[76,2908,543],{"class":82},[76,2910,2911],{"class":86},"c ",[76,2913,2914],{"class":82},"==",[76,2916,2917],{"class":86}," num)",[76,2919,2920],{"class":146}," \u002F\u002F如果是水仙花数，才打印\n",[76,2922,2923],{"class":78,"line":1617},[76,2924,2475],{"class":86},[76,2926,2927,2929,2931,2933,2935],{"class":78,"line":1638},[76,2928,2480],{"class":86},[76,2930,1132],{"class":82},[76,2932,1629],{"class":86},[76,2934,1132],{"class":82},[76,2936,1155],{"class":86},[76,2938,2939],{"class":78,"line":1643},[76,2940,2494],{"class":86},[76,2942,2943,2945,2947],{"class":78,"line":1657},[76,2944,2253],{"class":86},[76,2946,2256],{"class":82},[76,2948,1254],{"class":86},[76,2950,2951],{"class":78,"line":1662},[76,2952,2151],{"class":86},[76,2954,2955,2957,2960,2962,2965],{"class":78,"line":1691},[76,2956,2215],{"class":82},[76,2958,2959],{"class":86}," (num ",[76,2961,998],{"class":82},[76,2963,2964],{"class":136}," 1000",[76,2966,2684],{"class":86},[76,2968,2969],{"class":78,"line":1696},[76,2970,1529],{"class":86},[29,2972,2973],{"start":1143},[32,2974,2975],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[66,2977,2979],{"className":68,"code":2978,"language":70,"meta":71,"style":71},"\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",[73,2980,2981,2986,3015,3019,3031,3035,3040,3051,3058,3062,3076,3080,3087,3091,3103,3112],{"__ignoreMap":71},[76,2982,2983],{"class":78,"line":79},[76,2984,2985],{"class":146},"\u002F\u002F从数字0-9打印\n",[76,2987,2988,2991,2993,2995,2998,3000,3002,3005,3007,3009,3011,3013],{"class":78,"line":96},[76,2989,2990],{"class":82},"for",[76,2992,87],{"class":86},[76,2994,90],{"class":82},[76,2996,2997],{"class":86}," i",[76,2999,133],{"class":82},[76,3001,279],{"class":136},[76,3003,3004],{"class":86},";i",[76,3006,998],{"class":82},[76,3008,534],{"class":136},[76,3010,3004],{"class":86},[76,3012,2256],{"class":82},[76,3014,93],{"class":86},[76,3016,3017],{"class":78,"line":1143},[76,3018,1510],{"class":86},[76,3020,3021,3023,3025,3027,3029],{"class":78,"line":1158},[76,3022,1515],{"class":86},[76,3024,1132],{"class":82},[76,3026,529],{"class":86},[76,3028,1132],{"class":82},[76,3030,1155],{"class":86},[76,3032,3033],{"class":78,"line":1164},[76,3034,1529],{"class":86},[76,3036,3037],{"class":78,"line":1178},[76,3038,3039],{"class":146},"\u002F\u002F上式可以进行拆分\n",[76,3041,3042,3044,3046,3048],{"class":78,"line":1184},[76,3043,90],{"class":82},[76,3045,2997],{"class":86},[76,3047,133],{"class":82},[76,3049,3050],{"class":136},"0\n",[76,3052,3053,3055],{"class":78,"line":1275},[76,3054,2990],{"class":82},[76,3056,3057],{"class":86},"(;;;)\n",[76,3059,3060],{"class":78,"line":1281},[76,3061,1510],{"class":86},[76,3063,3064,3067,3070,3072,3074],{"class":78,"line":1293},[76,3065,3066],{"class":82},"    if",[76,3068,3069],{"class":86},"(i",[76,3071,1674],{"class":82},[76,3073,534],{"class":136},[76,3075,93],{"class":86},[76,3077,3078],{"class":78,"line":1576},[76,3079,1994],{"class":86},[76,3081,3082,3085],{"class":78,"line":1581},[76,3083,3084],{"class":82},"        break",[76,3086,1254],{"class":86},[76,3088,3089],{"class":78,"line":1587},[76,3090,2151],{"class":86},[76,3092,3093,3095,3097,3099,3101],{"class":78,"line":1592},[76,3094,1515],{"class":86},[76,3096,1132],{"class":82},[76,3098,529],{"class":86},[76,3100,1132],{"class":82},[76,3102,1155],{"class":86},[76,3104,3105,3108,3110],{"class":78,"line":1606},[76,3106,3107],{"class":86},"    i",[76,3109,2256],{"class":82},[76,3111,1254],{"class":86},[76,3113,3114],{"class":78,"line":1611},[76,3115,1529],{"class":86},[21,3117,3118],{},"小练习",[66,3120,3122],{"className":68,"code":3121,"language":70,"meta":71,"style":71},"#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",[73,3123,3124,3130,3140,3148,3152,3157,3162,3190,3194,3199,3204,3245,3249,3262,3266,3270,3274,3286,3290,3294],{"__ignoreMap":71},[76,3125,3126,3128],{"class":78,"line":79},[76,3127,1913],{"class":82},[76,3129,1916],{"class":192},[76,3131,3132,3134,3136,3138],{"class":78,"line":96},[76,3133,1921],{"class":82},[76,3135,1924],{"class":82},[76,3137,1928],{"class":1927},[76,3139,1254],{"class":86},[76,3141,3142,3144,3146],{"class":78,"line":1143},[76,3143,90],{"class":82},[76,3145,1937],{"class":1927},[76,3147,1940],{"class":86},[76,3149,3150],{"class":78,"line":1158},[76,3151,1510],{"class":86},[76,3153,3154],{"class":78,"line":1164},[76,3155,3156],{"class":146},"    \u002F\u002F敲桌子案例\n",[76,3158,3159],{"class":78,"line":1178},[76,3160,3161],{"class":146},"    \u002F\u002F1.先输出1-100的数字\n",[76,3163,3164,3167,3169,3171,3173,3175,3177,3180,3182,3184,3186,3188],{"class":78,"line":1184},[76,3165,3166],{"class":82},"    for",[76,3168,87],{"class":86},[76,3170,90],{"class":82},[76,3172,2997],{"class":86},[76,3174,133],{"class":82},[76,3176,305],{"class":136},[76,3178,3179],{"class":86},"; i",[76,3181,1552],{"class":82},[76,3183,399],{"class":136},[76,3185,3179],{"class":86},[76,3187,2256],{"class":82},[76,3189,93],{"class":86},[76,3191,3192],{"class":78,"line":1275},[76,3193,1994],{"class":86},[76,3195,3196],{"class":78,"line":1281},[76,3197,3198],{"class":146},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[76,3200,3201],{"class":78,"line":1293},[76,3202,3203],{"class":146},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[76,3205,3206,3208,3210,3212,3214,3216,3218,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243],{"class":78,"line":1576},[76,3207,2462],{"class":82},[76,3209,3069],{"class":86},[76,3211,416],{"class":82},[76,3213,457],{"class":136},[76,3215,2914],{"class":82},[76,3217,279],{"class":136},[76,3219,3220],{"class":82}," ||",[76,3222,2997],{"class":86},[76,3224,416],{"class":82},[76,3226,534],{"class":136},[76,3228,2914],{"class":82},[76,3230,457],{"class":136},[76,3232,3220],{"class":82},[76,3234,2997],{"class":86},[76,3236,672],{"class":82},[76,3238,534],{"class":136},[76,3240,2914],{"class":82},[76,3242,457],{"class":136},[76,3244,93],{"class":86},[76,3246,3247],{"class":78,"line":1581},[76,3248,2475],{"class":86},[76,3250,3251,3253,3255,3258,3260],{"class":78,"line":1587},[76,3252,2480],{"class":86},[76,3254,1132],{"class":82},[76,3256,3257],{"class":192},"\"敲桌子\"",[76,3259,1132],{"class":82},[76,3261,1155],{"class":86},[76,3263,3264],{"class":78,"line":1592},[76,3265,2494],{"class":86},[76,3267,3268],{"class":78,"line":1606},[76,3269,2535],{"class":82},[76,3271,3272],{"class":78,"line":1611},[76,3273,2475],{"class":86},[76,3275,3276,3278,3280,3282,3284],{"class":78,"line":1617},[76,3277,2480],{"class":86},[76,3279,1132],{"class":82},[76,3281,529],{"class":86},[76,3283,1132],{"class":82},[76,3285,1155],{"class":86},[76,3287,3288],{"class":78,"line":1638},[76,3289,2494],{"class":86},[76,3291,3292],{"class":78,"line":1643},[76,3293,2151],{"class":86},[76,3295,3296],{"class":78,"line":1657},[76,3297,1529],{"class":86},[21,3299,3300],{},"嵌套实现星图",[66,3302,3304],{"className":68,"code":3303,"language":70,"meta":71,"style":71},"#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",[73,3305,3306,3312,3322,3330,3334,3360,3364,3393,3397,3408,3412,3421,3425],{"__ignoreMap":71},[76,3307,3308,3310],{"class":78,"line":79},[76,3309,1913],{"class":82},[76,3311,1916],{"class":192},[76,3313,3314,3316,3318,3320],{"class":78,"line":96},[76,3315,1921],{"class":82},[76,3317,1924],{"class":82},[76,3319,1928],{"class":1927},[76,3321,1254],{"class":86},[76,3323,3324,3326,3328],{"class":78,"line":1143},[76,3325,90],{"class":82},[76,3327,1937],{"class":1927},[76,3329,1940],{"class":86},[76,3331,3332],{"class":78,"line":1158},[76,3333,1510],{"class":86},[76,3335,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358],{"class":78,"line":1164},[76,3337,3166],{"class":82},[76,3339,1622],{"class":86},[76,3341,90],{"class":82},[76,3343,2997],{"class":86},[76,3345,133],{"class":82},[76,3347,279],{"class":136},[76,3349,3004],{"class":86},[76,3351,998],{"class":82},[76,3353,534],{"class":136},[76,3355,3004],{"class":86},[76,3357,2256],{"class":82},[76,3359,93],{"class":86},[76,3361,3362],{"class":78,"line":1178},[76,3363,1994],{"class":86},[76,3365,3366,3369,3371,3373,3376,3378,3380,3383,3385,3387,3389,3391],{"class":78,"line":1184},[76,3367,3368],{"class":82},"        for",[76,3370,1622],{"class":86},[76,3372,90],{"class":82},[76,3374,3375],{"class":86}," j",[76,3377,133],{"class":82},[76,3379,279],{"class":136},[76,3381,3382],{"class":86},";j",[76,3384,998],{"class":82},[76,3386,534],{"class":136},[76,3388,3382],{"class":86},[76,3390,2256],{"class":82},[76,3392,93],{"class":86},[76,3394,3395],{"class":78,"line":1275},[76,3396,2475],{"class":86},[76,3398,3399,3401,3403,3406],{"class":78,"line":1281},[76,3400,2480],{"class":86},[76,3402,1132],{"class":82},[76,3404,3405],{"class":192},"\"*\"",[76,3407,1254],{"class":86},[76,3409,3410],{"class":78,"line":1293},[76,3411,2494],{"class":86},[76,3413,3414,3417,3419],{"class":78,"line":1576},[76,3415,3416],{"class":86},"        cout",[76,3418,1132],{"class":82},[76,3420,1155],{"class":86},[76,3422,3423],{"class":78,"line":1581},[76,3424,2151],{"class":86},[76,3426,3427],{"class":78,"line":1587},[76,3428,1529],{"class":86},[21,3430,3431],{},"乘法口诀表",[66,3433,3435],{"className":68,"code":3434,"language":70,"meta":71,"style":71},"#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",[73,3436,3437,3443,3453,3461,3465,3491,3495,3520,3524,3564,3568,3576,3580],{"__ignoreMap":71},[76,3438,3439,3441],{"class":78,"line":79},[76,3440,1913],{"class":82},[76,3442,2298],{"class":192},[76,3444,3445,3447,3449,3451],{"class":78,"line":96},[76,3446,1921],{"class":82},[76,3448,1924],{"class":82},[76,3450,1928],{"class":1927},[76,3452,1254],{"class":86},[76,3454,3455,3457,3459],{"class":78,"line":1143},[76,3456,90],{"class":82},[76,3458,1937],{"class":1927},[76,3460,1940],{"class":86},[76,3462,3463],{"class":78,"line":1158},[76,3464,1510],{"class":86},[76,3466,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489],{"class":78,"line":1164},[76,3468,3166],{"class":82},[76,3470,87],{"class":86},[76,3472,90],{"class":82},[76,3474,2997],{"class":86},[76,3476,133],{"class":82},[76,3478,305],{"class":136},[76,3480,3004],{"class":86},[76,3482,998],{"class":82},[76,3484,534],{"class":136},[76,3486,3004],{"class":86},[76,3488,2256],{"class":82},[76,3490,93],{"class":86},[76,3492,3493],{"class":78,"line":1178},[76,3494,1994],{"class":86},[76,3496,3497,3499,3501,3503,3505,3507,3509,3511,3513,3516,3518],{"class":78,"line":1184},[76,3498,3368],{"class":82},[76,3500,87],{"class":86},[76,3502,90],{"class":82},[76,3504,3375],{"class":86},[76,3506,133],{"class":82},[76,3508,305],{"class":136},[76,3510,3382],{"class":86},[76,3512,1552],{"class":82},[76,3514,3515],{"class":86},"i;j",[76,3517,2256],{"class":82},[76,3519,93],{"class":86},[76,3521,3522],{"class":78,"line":1275},[76,3523,2475],{"class":86},[76,3525,3526,3528,3530,3532,3534,3536,3538,3540,3542,3545,3547,3549,3551,3553,3555,3558,3560,3562],{"class":78,"line":1281},[76,3527,2480],{"class":86},[76,3529,1132],{"class":82},[76,3531,555],{"class":86},[76,3533,1132],{"class":82},[76,3535,3405],{"class":192},[76,3537,1132],{"class":82},[76,3539,529],{"class":86},[76,3541,1132],{"class":82},[76,3543,3544],{"class":192},"\"=\"",[76,3546,1132],{"class":82},[76,3548,529],{"class":86},[76,3550,543],{"class":82},[76,3552,555],{"class":86},[76,3554,1132],{"class":82},[76,3556,3557],{"class":192},"'",[76,3559,1194],{"class":136},[76,3561,3557],{"class":192},[76,3563,1254],{"class":86},[76,3565,3566],{"class":78,"line":1293},[76,3567,2494],{"class":86},[76,3569,3570,3572,3574],{"class":78,"line":1576},[76,3571,3416],{"class":86},[76,3573,1132],{"class":82},[76,3575,1155],{"class":86},[76,3577,3578],{"class":78,"line":1581},[76,3579,2151],{"class":86},[76,3581,3582],{"class":78,"line":1587},[76,3583,1529],{"class":86},[46,3585,3587],{"id":3586},"_163跳出语句","1.6.3跳出语句",[29,3589,3590],{},[32,3591,3592],{},"break语句\n作用：用于跳出选择结构或者循环结构",[21,3594,3595],{},"break使用时机：",[1095,3597,3598,3601,3604],{},[32,3599,3600],{},"出现在switch条件语句中，作用是终止case并跳出switch",[32,3602,3603],{},"出现在循环结构中，作用是跳出当前的循环结构",[32,3605,3606],{},"出现在嵌套循环中，跳出最近的内层循环语句",[29,3608,3609,3612],{"start":96},[32,3610,3611],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[32,3613,3614],{},"goto语句\n语法：goto 标记;",[21,3616,3617],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[66,3619,3621],{"className":68,"code":3620,"language":70,"meta":71,"style":71},"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",[73,3622,3623,3631,3635,3648,3658,3671,3684,3697,3705,3721],{"__ignoreMap":71},[76,3624,3625,3627,3629],{"class":78,"line":79},[76,3626,90],{"class":82},[76,3628,1937],{"class":1927},[76,3630,1940],{"class":86},[76,3632,3633],{"class":78,"line":96},[76,3634,1510],{"class":86},[76,3636,3637,3639,3641,3644,3646],{"class":78,"line":1143},[76,3638,1515],{"class":86},[76,3640,1132],{"class":82},[76,3642,3643],{"class":192},"\"1\"",[76,3645,1132],{"class":82},[76,3647,1155],{"class":86},[76,3649,3650,3653,3656],{"class":78,"line":1158},[76,3651,3652],{"class":82},"    goto",[76,3654,3655],{"class":1927}," FLAG",[76,3657,1254],{"class":86},[76,3659,3660,3662,3664,3667,3669],{"class":78,"line":1164},[76,3661,1515],{"class":86},[76,3663,1132],{"class":82},[76,3665,3666],{"class":192},"\"2\"",[76,3668,1132],{"class":82},[76,3670,1155],{"class":86},[76,3672,3673,3675,3677,3680,3682],{"class":78,"line":1178},[76,3674,1515],{"class":86},[76,3676,1132],{"class":82},[76,3678,3679],{"class":192},"\"3\"",[76,3681,1132],{"class":82},[76,3683,1155],{"class":86},[76,3685,3686,3688,3690,3693,3695],{"class":78,"line":1184},[76,3687,1515],{"class":86},[76,3689,1132],{"class":82},[76,3691,3692],{"class":192},"\"4\"",[76,3694,1132],{"class":82},[76,3696,1155],{"class":86},[76,3698,3699,3702],{"class":78,"line":1275},[76,3700,3701],{"class":1927},"    FLAG",[76,3703,3704],{"class":86},":\n",[76,3706,3707,3709,3711,3714,3716,3718],{"class":78,"line":1281},[76,3708,1515],{"class":86},[76,3710,1132],{"class":82},[76,3712,3713],{"class":192},"\"5\"",[76,3715,1132],{"class":82},[76,3717,1202],{"class":86},[76,3719,3720],{"class":146},"\u002F\u002F跳过了2,3,4,直接到5\n",[76,3722,3723],{"class":78,"line":1293},[76,3724,1529],{"class":86},[16,3726,3728],{"id":3727},"_17数组","1.7数组",[46,3730,3732],{"id":3731},"_171一维数组","1.7.1一维数组",[29,3734,3735],{},[32,3736,3737],{},"一维数组定义方式",[225,3739,3740,3750],{},[228,3741,3742],{},[231,3743,3744,3747],{},[234,3745,3746],{},"方式",[234,3748,3749],{},"注意事项",[272,3751,3752,3766,3776],{},[231,3753,3754,3760],{},[277,3755,3756,3757,143],{},"数据类型 数组名",[76,3758,3759],{},"数组长度",[277,3761,3762,3763,3765],{},"这种方式是先定义再arr",[76,3764,529],{},"赋值",[231,3767,3768,3773],{},[277,3769,3756,3770,3772],{},[76,3771,3759],{},"={值1,值2....};",[277,3774,3775],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[231,3777,3778,3782],{},[277,3779,3756,3780,3772],{},[76,3781],{},[277,3783,3784,3785,3787],{},"int arr",[76,3786],{},";这是不正确的，按照这样的方式定义必须有初始长度",[29,3789,3790],{"start":96},[32,3791,3792],{},"一维数组数组名\n用途：",[1095,3794,3795],{},[32,3796,3797],{},"1.可以统计整个数组在内存中的长度：",[66,3799,3801],{"className":68,"code":3800,"language":70,"meta":71,"style":71},"sizeof(arr);\nsizeof(arr[0]);\n",[73,3802,3803,3810],{"__ignoreMap":71},[76,3804,3805,3807],{"class":78,"line":79},[76,3806,83],{"class":82},[76,3808,3809],{"class":86},"(arr);\n",[76,3811,3812,3814,3817,3819],{"class":78,"line":96},[76,3813,83],{"class":82},[76,3815,3816],{"class":86},"(arr[",[76,3818,279],{"class":136},[76,3820,3821],{"class":86},"]);\n",[1095,3823,3824],{},[32,3825,3826],{},"2.可以获取数组在内存中的首地址:",[66,3828,3830],{"className":68,"code":3829,"language":70,"meta":71,"style":71},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[73,3831,3832,3837,3850,3855],{"__ignoreMap":71},[76,3833,3834],{"class":78,"line":79},[76,3835,3836],{"class":146},"\u002F\u002F查看16进制的首地址\n",[76,3838,3839,3841,3843,3846,3848],{"class":78,"line":96},[76,3840,1333],{"class":86},[76,3842,1132],{"class":82},[76,3844,3845],{"class":86},"arr",[76,3847,1132],{"class":82},[76,3849,1155],{"class":86},[76,3851,3852],{"class":78,"line":1143},[76,3853,3854],{"class":146},"\u002F\u002F看10进制数\n",[76,3856,3857,3859,3861,3863,3865,3867,3869,3872,3874,3876,3878],{"class":78,"line":1158},[76,3858,1333],{"class":86},[76,3860,1132],{"class":82},[76,3862,87],{"class":86},[76,3864,90],{"class":82},[76,3866,517],{"class":86},[76,3868,441],{"class":82},[76,3870,3871],{"class":86},"arr[",[76,3873,279],{"class":136},[76,3875,1028],{"class":86},[76,3877,1132],{"class":82},[76,3879,1155],{"class":86},[21,3881,3882],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1095,3884,3885],{},[32,3886,3887],{},"1️⃣五只小猪称体重",[66,3889,3891],{"className":68,"code":3890,"language":70,"meta":71,"style":71},"#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",[73,3892,3893,3899,3909,3917,3921,3961,3974,4000,4004,4016,4020,4030,4034,4038,4051,4061],{"__ignoreMap":71},[76,3894,3895,3897],{"class":78,"line":79},[76,3896,1913],{"class":82},[76,3898,1916],{"class":192},[76,3900,3901,3903,3905,3907],{"class":78,"line":96},[76,3902,1921],{"class":82},[76,3904,1924],{"class":82},[76,3906,1928],{"class":1927},[76,3908,1254],{"class":86},[76,3910,3911,3913,3915],{"class":78,"line":1143},[76,3912,90],{"class":82},[76,3914,1937],{"class":1927},[76,3916,1940],{"class":86},[76,3918,3919],{"class":78,"line":1158},[76,3920,1510],{"class":86},[76,3922,3923,3925,3928,3930,3932,3934,3936,3939,3941,3944,3946,3948,3950,3953,3955,3958],{"class":78,"line":1164},[76,3924,1949],{"class":82},[76,3926,3927],{"class":86}," arr[",[76,3929,407],{"class":136},[76,3931,1028],{"class":86},[76,3933,133],{"class":82},[76,3935,984],{"class":86},[76,3937,3938],{"class":136},"300",[76,3940,466],{"class":86},[76,3942,3943],{"class":136},"350",[76,3945,466],{"class":86},[76,3947,1686],{"class":136},[76,3949,466],{"class":86},[76,3951,3952],{"class":136},"400",[76,3954,466],{"class":86},[76,3956,3957],{"class":136},"250",[76,3959,3960],{"class":86},"};\n",[76,3962,3963,3965,3968,3970,3972],{"class":78,"line":1178},[76,3964,1949],{"class":82},[76,3966,3967],{"class":86}," tmp",[76,3969,133],{"class":82},[76,3971,279],{"class":136},[76,3973,1254],{"class":86},[76,3975,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998],{"class":78,"line":1184},[76,3977,3166],{"class":82},[76,3979,1622],{"class":86},[76,3981,90],{"class":82},[76,3983,2997],{"class":86},[76,3985,133],{"class":82},[76,3987,279],{"class":136},[76,3989,3004],{"class":86},[76,3991,998],{"class":82},[76,3993,407],{"class":136},[76,3995,3004],{"class":86},[76,3997,2256],{"class":82},[76,3999,93],{"class":86},[76,4001,4002],{"class":78,"line":1275},[76,4003,1994],{"class":86},[76,4005,4006,4008,4011,4013],{"class":78,"line":1281},[76,4007,2462],{"class":82},[76,4009,4010],{"class":86},"(tmp",[76,4012,998],{"class":82},[76,4014,4015],{"class":86},"arr[i])\n",[76,4017,4018],{"class":78,"line":1293},[76,4019,2475],{"class":86},[76,4021,4022,4025,4027],{"class":78,"line":1576},[76,4023,4024],{"class":86},"            tmp",[76,4026,133],{"class":82},[76,4028,4029],{"class":86},"arr[i];\n",[76,4031,4032],{"class":78,"line":1581},[76,4033,2494],{"class":86},[76,4035,4036],{"class":78,"line":1587},[76,4037,2151],{"class":86},[76,4039,4040,4042,4044,4047,4049],{"class":78,"line":1592},[76,4041,1515],{"class":86},[76,4043,1132],{"class":82},[76,4045,4046],{"class":86},"tmp",[76,4048,1132],{"class":82},[76,4050,1155],{"class":86},[76,4052,4053,4056,4059],{"class":78,"line":1606},[76,4054,4055],{"class":82},"    return",[76,4057,4058],{"class":136}," 0",[76,4060,1254],{"class":86},[76,4062,4063],{"class":78,"line":1611},[76,4064,1529],{"class":86},[1095,4066,4067],{},[32,4068,4069],{},"2️⃣数组元素逆置",[66,4071,4073],{"className":68,"code":4072,"language":70,"meta":71,"style":71},"\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",[73,4074,4075,4080,4086,4096,4104,4108,4143,4159,4191,4204,4209,4214,4226,4236,4246,4251,4260,4270,4275,4280,4307,4311,4327,4331,4342,4351],{"__ignoreMap":71},[76,4076,4077],{"class":78,"line":79},[76,4078,4079],{"class":146},"\u002F\u002F元素逆置\n",[76,4081,4082,4084],{"class":78,"line":96},[76,4083,1913],{"class":82},[76,4085,1916],{"class":192},[76,4087,4088,4090,4092,4094],{"class":78,"line":1143},[76,4089,1921],{"class":82},[76,4091,1924],{"class":82},[76,4093,1928],{"class":1927},[76,4095,1254],{"class":86},[76,4097,4098,4100,4102],{"class":78,"line":1158},[76,4099,90],{"class":82},[76,4101,1937],{"class":1927},[76,4103,1940],{"class":86},[76,4105,4106],{"class":78,"line":1164},[76,4107,1510],{"class":86},[76,4109,4110,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141],{"class":78,"line":1178},[76,4111,4112],{"class":82},"   int",[76,4114,3927],{"class":86},[76,4116,407],{"class":136},[76,4118,1028],{"class":86},[76,4120,133],{"class":82},[76,4122,984],{"class":86},[76,4124,305],{"class":136},[76,4126,466],{"class":86},[76,4128,165],{"class":136},[76,4130,466],{"class":86},[76,4132,159],{"class":136},[76,4134,466],{"class":86},[76,4136,381],{"class":136},[76,4138,466],{"class":86},[76,4140,407],{"class":136},[76,4142,3960],{"class":86},[76,4144,4145,4147,4150,4152,4154,4156],{"class":78,"line":1184},[76,4146,4112],{"class":82},[76,4148,4149],{"class":86}," start",[76,4151,133],{"class":82},[76,4153,279],{"class":136},[76,4155,143],{"class":86},[76,4157,4158],{"class":146},"\u002F\u002F起始下标\n",[76,4160,4161,4163,4166,4169,4172,4175,4177,4179,4182,4184,4186,4188],{"class":78,"line":1275},[76,4162,4112],{"class":82},[76,4164,4165],{"class":86}," end",[76,4167,4168],{"class":82},"=sizeof",[76,4170,4171],{"class":86},"(arr)",[76,4173,4174],{"class":82},"\u002Fsizeof",[76,4176,3816],{"class":86},[76,4178,279],{"class":136},[76,4180,4181],{"class":86},"])",[76,4183,620],{"class":82},[76,4185,305],{"class":136},[76,4187,143],{"class":86},[76,4189,4190],{"class":146},"\u002F\u002F结束下标\n",[76,4192,4193,4196,4199,4201],{"class":78,"line":1281},[76,4194,4195],{"class":82},"   while",[76,4197,4198],{"class":86}," (start",[76,4200,998],{"class":82},[76,4202,4203],{"class":86},"end)\n",[76,4205,4206],{"class":78,"line":1293},[76,4207,4208],{"class":86},"   {\n",[76,4210,4211],{"class":78,"line":1576},[76,4212,4213],{"class":146},"    \u002F\u002F实现元素互换代码\n",[76,4215,4216,4218,4221,4223],{"class":78,"line":1581},[76,4217,1949],{"class":82},[76,4219,4220],{"class":86}," temp",[76,4222,133],{"class":82},[76,4224,4225],{"class":86},"arr[start];\n",[76,4227,4228,4231,4233],{"class":78,"line":1587},[76,4229,4230],{"class":86},"    arr[start]",[76,4232,133],{"class":82},[76,4234,4235],{"class":86},"arr[end];\n",[76,4237,4238,4241,4243],{"class":78,"line":1592},[76,4239,4240],{"class":86},"    arr[end]",[76,4242,133],{"class":82},[76,4244,4245],{"class":86},"temp;\n",[76,4247,4248],{"class":78,"line":1606},[76,4249,4250],{"class":146},"    \u002F\u002F下标更新\n",[76,4252,4253,4256,4258],{"class":78,"line":1611},[76,4254,4255],{"class":86},"    start",[76,4257,2256],{"class":82},[76,4259,1254],{"class":86},[76,4261,4262,4265,4268],{"class":78,"line":1617},[76,4263,4264],{"class":86},"    end",[76,4266,4267],{"class":82},"--",[76,4269,1254],{"class":86},[76,4271,4272],{"class":78,"line":1638},[76,4273,4274],{"class":86},"   }\n",[76,4276,4277],{"class":78,"line":1643},[76,4278,4279],{"class":146},"   \u002F\u002F输出逆置后的数组\n",[76,4281,4282,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305],{"class":78,"line":1657},[76,4283,4284],{"class":82},"   for",[76,4286,1622],{"class":86},[76,4288,90],{"class":82},[76,4290,2997],{"class":86},[76,4292,133],{"class":82},[76,4294,279],{"class":136},[76,4296,3004],{"class":86},[76,4298,998],{"class":82},[76,4300,407],{"class":136},[76,4302,3004],{"class":86},[76,4304,2256],{"class":82},[76,4306,93],{"class":86},[76,4308,4309],{"class":78,"line":1662},[76,4310,4208],{"class":86},[76,4312,4313,4315,4317,4320,4322,4325],{"class":78,"line":1691},[76,4314,1515],{"class":86},[76,4316,1132],{"class":82},[76,4318,4319],{"class":86},"arr[i]",[76,4321,1132],{"class":82},[76,4323,4324],{"class":192},"\" \"",[76,4326,1254],{"class":86},[76,4328,4329],{"class":78,"line":1696},[76,4330,4274],{"class":86},[76,4332,4333,4336,4338,4340],{"class":78,"line":1713},[76,4334,4335],{"class":1927},"   system",[76,4337,87],{"class":86},[76,4339,2272],{"class":192},[76,4341,2684],{"class":86},[76,4343,4344,4347,4349],{"class":78,"line":1718},[76,4345,4346],{"class":82},"   return",[76,4348,4058],{"class":136},[76,4350,1254],{"class":86},[76,4352,4353],{"class":78,"line":1723},[76,4354,1529],{"class":86},[1095,4356,4357],{},[32,4358,4359],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[66,4361,4363],{"className":68,"code":4362,"language":70,"meta":71,"style":71},"\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",[73,4364,4365,4370,4376,4386,4394,4398,4450,4463,4489,4493,4507,4511,4516,4521,4551,4555,4560,4594,4598,4603,4623,4628,4640,4656,4671,4676,4680,4684,4697,4723,4727,4741,4745,4753],{"__ignoreMap":71},[76,4366,4367],{"class":78,"line":79},[76,4368,4369],{"class":146},"\u002F\u002F冒泡排序,升序\n",[76,4371,4372,4374],{"class":78,"line":96},[76,4373,1913],{"class":82},[76,4375,1916],{"class":192},[76,4377,4378,4380,4382,4384],{"class":78,"line":1143},[76,4379,1921],{"class":82},[76,4381,1924],{"class":82},[76,4383,1928],{"class":1927},[76,4385,1254],{"class":86},[76,4387,4388,4390,4392],{"class":78,"line":1158},[76,4389,90],{"class":82},[76,4391,1937],{"class":1927},[76,4393,1940],{"class":86},[76,4395,4396],{"class":78,"line":1164},[76,4397,1510],{"class":86},[76,4399,4400,4402,4404,4406,4409,4411,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448],{"class":78,"line":1178},[76,4401,1949],{"class":82},[76,4403,3927],{"class":86},[76,4405,508],{"class":136},[76,4407,4408],{"class":86},"] ",[76,4410,133],{"class":82},[76,4412,4413],{"class":86}," {",[76,4415,381],{"class":136},[76,4417,466],{"class":86},[76,4419,165],{"class":136},[76,4421,466],{"class":86},[76,4423,483],{"class":136},[76,4425,466],{"class":86},[76,4427,279],{"class":136},[76,4429,466],{"class":86},[76,4431,407],{"class":136},[76,4433,466],{"class":86},[76,4435,457],{"class":136},[76,4437,466],{"class":86},[76,4439,305],{"class":136},[76,4441,466],{"class":86},[76,4443,159],{"class":136},[76,4445,466],{"class":86},[76,4447,508],{"class":136},[76,4449,3960],{"class":86},[76,4451,4452,4454,4456,4459,4461],{"class":78,"line":1184},[76,4453,1515],{"class":86},[76,4455,1132],{"class":82},[76,4457,4458],{"class":192},"\"排序前：\"",[76,4460,1132],{"class":82},[76,4462,1155],{"class":86},[76,4464,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487],{"class":78,"line":1275},[76,4466,3166],{"class":82},[76,4468,1622],{"class":86},[76,4470,90],{"class":82},[76,4472,2997],{"class":86},[76,4474,133],{"class":82},[76,4476,279],{"class":136},[76,4478,3004],{"class":86},[76,4480,998],{"class":82},[76,4482,508],{"class":136},[76,4484,3004],{"class":86},[76,4486,2256],{"class":82},[76,4488,93],{"class":86},[76,4490,4491],{"class":78,"line":1281},[76,4492,1994],{"class":86},[76,4494,4495,4497,4499,4501,4503,4505],{"class":78,"line":1293},[76,4496,3416],{"class":86},[76,4498,1132],{"class":82},[76,4500,4319],{"class":86},[76,4502,1132],{"class":82},[76,4504,4324],{"class":192},[76,4506,1254],{"class":86},[76,4508,4509],{"class":78,"line":1576},[76,4510,2151],{"class":86},[76,4512,4513],{"class":78,"line":1581},[76,4514,4515],{"class":146},"    \u002F\u002F开始冒泡排序\n",[76,4517,4518],{"class":78,"line":1587},[76,4519,4520],{"class":146},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[76,4522,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549],{"class":78,"line":1592},[76,4524,3166],{"class":82},[76,4526,1622],{"class":86},[76,4528,90],{"class":82},[76,4530,2997],{"class":86},[76,4532,133],{"class":82},[76,4534,279],{"class":136},[76,4536,3004],{"class":86},[76,4538,998],{"class":82},[76,4540,508],{"class":136},[76,4542,620],{"class":82},[76,4544,305],{"class":136},[76,4546,3004],{"class":86},[76,4548,2256],{"class":82},[76,4550,93],{"class":86},[76,4552,4553],{"class":78,"line":1606},[76,4554,1994],{"class":86},[76,4556,4557],{"class":78,"line":1611},[76,4558,4559],{"class":146},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[76,4561,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592],{"class":78,"line":1617},[76,4563,3368],{"class":82},[76,4565,1622],{"class":86},[76,4567,90],{"class":82},[76,4569,3375],{"class":86},[76,4571,133],{"class":82},[76,4573,279],{"class":136},[76,4575,3382],{"class":86},[76,4577,998],{"class":82},[76,4579,508],{"class":136},[76,4581,620],{"class":82},[76,4583,529],{"class":86},[76,4585,620],{"class":82},[76,4587,305],{"class":136},[76,4589,3382],{"class":86},[76,4591,2256],{"class":82},[76,4593,93],{"class":86},[76,4595,4596],{"class":78,"line":1638},[76,4597,2475],{"class":86},[76,4599,4600],{"class":78,"line":1643},[76,4601,4602],{"class":146},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[76,4604,4605,4608,4611,4613,4616,4618,4620],{"class":78,"line":1657},[76,4606,4607],{"class":82},"            if",[76,4609,4610],{"class":86},"(arr[j]",[76,4612,1048],{"class":82},[76,4614,4615],{"class":86},"arr[j",[76,4617,569],{"class":82},[76,4619,305],{"class":136},[76,4621,4622],{"class":86},"])\n",[76,4624,4625],{"class":78,"line":1662},[76,4626,4627],{"class":86},"            {\n",[76,4629,4630,4633,4635,4637],{"class":78,"line":1691},[76,4631,4632],{"class":82},"                int",[76,4634,4220],{"class":86},[76,4636,133],{"class":82},[76,4638,4639],{"class":86},"arr[j];\n",[76,4641,4642,4645,4647,4649,4651,4653],{"class":78,"line":1696},[76,4643,4644],{"class":86},"                arr[j]",[76,4646,133],{"class":82},[76,4648,4615],{"class":86},[76,4650,569],{"class":82},[76,4652,305],{"class":136},[76,4654,4655],{"class":86},"];\n",[76,4657,4658,4661,4663,4665,4667,4669],{"class":78,"line":1713},[76,4659,4660],{"class":86},"                arr[j",[76,4662,569],{"class":82},[76,4664,305],{"class":136},[76,4666,1028],{"class":86},[76,4668,133],{"class":82},[76,4670,4245],{"class":86},[76,4672,4673],{"class":78,"line":1718},[76,4674,4675],{"class":86},"            }\n",[76,4677,4678],{"class":78,"line":1723},[76,4679,2494],{"class":86},[76,4681,4682],{"class":78,"line":1728},[76,4683,2151],{"class":86},[76,4685,4686,4688,4690,4693,4695],{"class":78,"line":1742},[76,4687,1515],{"class":86},[76,4689,1132],{"class":82},[76,4691,4692],{"class":192},"\"排序后：\"",[76,4694,1132],{"class":82},[76,4696,1155],{"class":86},[76,4698,4699,4701,4703,4705,4707,4709,4711,4713,4715,4717,4719,4721],{"class":78,"line":1747},[76,4700,3166],{"class":82},[76,4702,1622],{"class":86},[76,4704,90],{"class":82},[76,4706,2997],{"class":86},[76,4708,133],{"class":82},[76,4710,279],{"class":136},[76,4712,3004],{"class":86},[76,4714,998],{"class":82},[76,4716,508],{"class":136},[76,4718,3004],{"class":86},[76,4720,2256],{"class":82},[76,4722,93],{"class":86},[76,4724,4725],{"class":78,"line":2542},[76,4726,1994],{"class":86},[76,4728,4729,4731,4733,4735,4737,4739],{"class":78,"line":2556},[76,4730,3416],{"class":86},[76,4732,1132],{"class":82},[76,4734,4319],{"class":86},[76,4736,1132],{"class":82},[76,4738,4324],{"class":192},[76,4740,1254],{"class":86},[76,4742,4743],{"class":78,"line":2564},[76,4744,2151],{"class":86},[76,4746,4747,4749,4751],{"class":78,"line":2569},[76,4748,4055],{"class":82},[76,4750,4058],{"class":136},[76,4752,1254],{"class":86},[76,4754,4755],{"class":78,"line":2575},[76,4756,1529],{"class":86},[46,4758,4760],{"id":4759},"_172二维数组","1.7.2二维数组",[29,4762,4763],{},[32,4764,4765],{},"二维数组的四种定义方式",[225,4767,4768,4777],{},[228,4769,4770],{},[231,4771,4772,4775],{},[234,4773,4774],{},"序号",[234,4776,3746],{},[272,4778,4779,4789,4798,4807,4816],{},[231,4780,4781,4783],{},[277,4782,305],{},[277,4784,4785,4786,143],{},"数据类型 数组名[行数]",[76,4787,4788],{},"列数",[231,4790,4791,4793],{},[277,4792,165],{},[277,4794,4785,4795,4797],{},[76,4796,4788],{},"={ {数据1,数据2}，{数据3，数据4}... }",[231,4799,4800,4802],{},[277,4801,159],{},[277,4803,4785,4804,4806],{},[76,4805,4788],{},"={数据1,数据2,数据3...}",[231,4808,4809,4811],{},[277,4810,381],{},[277,4812,4813,4814,4806],{},"数据类型 数组名[]",[76,4815,4788],{},[231,4817,4818,4821],{},[277,4819,4820],{},"注意：不能只省略列数",[277,4822],{},[29,4824,4825],{"start":96},[32,4826,4827],{},"二维数组数组名",[1095,4829,4830,4833],{},[32,4831,4832],{},"1.查看二维数组所占内存空间",[32,4834,4835],{},"2.获取二维数组首地址",[21,4837,4838],{},"已知二维数组，求二维数组的行数与列数",[66,4840,4842],{"className":68,"code":4841,"language":70,"meta":71,"style":71},"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",[73,4843,4844,4852,4856,4874,4878,4896,4912,4917,4942,4975],{"__ignoreMap":71},[76,4845,4846,4848,4850],{"class":78,"line":79},[76,4847,90],{"class":82},[76,4849,1937],{"class":1927},[76,4851,1940],{"class":86},[76,4853,4854],{"class":78,"line":96},[76,4855,1510],{"class":86},[76,4857,4858,4860,4862,4864,4867,4869,4871],{"class":78,"line":1143},[76,4859,1949],{"class":82},[76,4861,3927],{"class":86},[76,4863,165],{"class":136},[76,4865,4866],{"class":86},"][",[76,4868,159],{"class":136},[76,4870,1028],{"class":86},[76,4872,4873],{"class":82},"=\n",[76,4875,4876],{"class":78,"line":1158},[76,4877,1994],{"class":86},[76,4879,4880,4883,4885,4887,4889,4891,4893],{"class":78,"line":1164},[76,4881,4882],{"class":86},"        {",[76,4884,305],{"class":136},[76,4886,466],{"class":86},[76,4888,165],{"class":136},[76,4890,466],{"class":86},[76,4892,159],{"class":136},[76,4894,4895],{"class":86},"},\n",[76,4897,4898,4900,4902,4904,4906,4908,4910],{"class":78,"line":1178},[76,4899,4882],{"class":86},[76,4901,381],{"class":136},[76,4903,466],{"class":86},[76,4905,407],{"class":136},[76,4907,466],{"class":86},[76,4909,432],{"class":136},[76,4911,1529],{"class":86},[76,4913,4914],{"class":78,"line":1184},[76,4915,4916],{"class":86},"    };\n",[76,4918,4919,4921,4923,4926,4928,4930,4932,4934,4936,4938,4940],{"class":78,"line":1275},[76,4920,1515],{"class":86},[76,4922,1132],{"class":82},[76,4924,4925],{"class":192},"\"二维数组的行数\"",[76,4927,1336],{"class":82},[76,4929,4171],{"class":86},[76,4931,4174],{"class":82},[76,4933,3816],{"class":86},[76,4935,279],{"class":136},[76,4937,4181],{"class":86},[76,4939,1132],{"class":82},[76,4941,1155],{"class":86},[76,4943,4944,4946,4948,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973],{"class":78,"line":1281},[76,4945,1515],{"class":86},[76,4947,1132],{"class":82},[76,4949,4950],{"class":192},"\"二维数组的列数\"",[76,4952,1336],{"class":82},[76,4954,3816],{"class":86},[76,4956,279],{"class":136},[76,4958,4181],{"class":86},[76,4960,4174],{"class":82},[76,4962,3816],{"class":86},[76,4964,279],{"class":136},[76,4966,4866],{"class":86},[76,4968,279],{"class":136},[76,4970,4181],{"class":86},[76,4972,1132],{"class":82},[76,4974,1155],{"class":86},[76,4976,4977],{"class":78,"line":1293},[76,4978,1529],{"class":86},[21,4980,4981],{},"查看二维数组首地址",[66,4983,4985],{"className":68,"code":4984,"language":70,"meta":71,"style":71},"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",[73,4986,4987,5004,5030,5055],{"__ignoreMap":71},[76,4988,4989,4991,4993,4996,4998,5000,5002],{"class":78,"line":79},[76,4990,1333],{"class":86},[76,4992,1132],{"class":82},[76,4994,4995],{"class":192},"\"二维数组首地址：\"",[76,4997,1132],{"class":82},[76,4999,3845],{"class":86},[76,5001,1132],{"class":82},[76,5003,1155],{"class":86},[76,5005,5006,5008,5010,5013,5015,5017,5019,5022,5024,5026,5028],{"class":78,"line":96},[76,5007,1333],{"class":86},[76,5009,1132],{"class":82},[76,5011,5012],{"class":192},"\"二维数组第一行的首地址：\"",[76,5014,1132],{"class":82},[76,5016,87],{"class":86},[76,5018,90],{"class":82},[76,5020,5021],{"class":86},")arr[",[76,5023,279],{"class":136},[76,5025,1028],{"class":86},[76,5027,1132],{"class":82},[76,5029,1155],{"class":86},[76,5031,5032,5034,5036,5039,5041,5043,5045,5047,5049,5051,5053],{"class":78,"line":1143},[76,5033,1333],{"class":86},[76,5035,1132],{"class":82},[76,5037,5038],{"class":192},"\"二维数组第二行的首地址：\"",[76,5040,1132],{"class":82},[76,5042,87],{"class":86},[76,5044,90],{"class":82},[76,5046,5021],{"class":86},[76,5048,305],{"class":136},[76,5050,1028],{"class":86},[76,5052,1132],{"class":82},[76,5054,1155],{"class":86},[76,5056,5057,5059,5061,5064,5066,5068,5070,5072,5074,5076,5078,5080,5082,5084,5086,5088],{"class":78,"line":1158},[76,5058,1333],{"class":86},[76,5060,1132],{"class":82},[76,5062,5063],{"class":192},"\"二维数组第一个元素的首地址:\"",[76,5065,1132],{"class":82},[76,5067,87],{"class":86},[76,5069,90],{"class":82},[76,5071,517],{"class":86},[76,5073,441],{"class":82},[76,5075,3871],{"class":86},[76,5077,279],{"class":136},[76,5079,4866],{"class":86},[76,5081,279],{"class":136},[76,5083,1028],{"class":86},[76,5085,1132],{"class":82},[76,5087,1202],{"class":86},[76,5089,5090],{"class":146},"\u002F\u002F对于数，要加取址符\n",[5092,5093,5094],"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":71,"searchDepth":96,"depth":96,"links":5096},[5097,5098,5099,5107,5108,5114,5119],{"id":18,"depth":96,"text":19},{"id":26,"depth":96,"text":27},{"id":43,"depth":96,"text":44,"children":5100},[5101,5102,5103,5104,5105,5106],{"id":48,"depth":1143,"text":49},{"id":104,"depth":1143,"text":105},{"id":173,"depth":1143,"text":174},{"id":1113,"depth":1143,"text":1114},{"id":1208,"depth":1143,"text":1209},{"id":1307,"depth":1143,"text":1308},{"id":1349,"depth":96,"text":1350},{"id":1417,"depth":96,"text":1418,"children":5109},[5110,5111,5112,5113],{"id":1421,"depth":1143,"text":1422},{"id":1443,"depth":1143,"text":1444},{"id":1452,"depth":1143,"text":1453},{"id":1461,"depth":1143,"text":1462},{"id":1470,"depth":96,"text":1471,"children":5115},[5116,5117,5118],{"id":1474,"depth":1143,"text":1475},{"id":2169,"depth":1143,"text":2170},{"id":3586,"depth":1143,"text":3587},{"id":3727,"depth":96,"text":3728,"children":5120},[5121,5122],{"id":3731,"depth":1143,"text":3732},{"id":4759,"depth":1143,"text":4760},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":7,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5130,"title":5131,"body":5132,"description":71,"extension":5123,"meta":6232,"navigation":2364,"path":6233,"seo":6234,"stem":6235,"__hash__":6236},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":9,"value":5133,"toc":6224},[5134,5137,5141,5149,5157,5160,5226,5230,5233,5309,5313,5316,5319,5322,5535,5539,5544,5608,5613,5680,5685,5776,5779,5884,5888,5891,5897,6041,6045,6048,6062,6065,6110,6113,6221],[12,5135,5131],{"id":5136},"_2函数",[16,5138,5140],{"id":5139},"_21函数概述","2.1函数概述",[29,5142,5143,5146],{},[32,5144,5145],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[32,5147,5148],{},"语法：",[66,5150,5155],{"className":5151,"code":5153,"language":5154,"meta":71},[5152],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[73,5156,5153],{"__ignoreMap":71},[21,5158,5159],{},"小案例",[66,5161,5163],{"className":68,"code":5162,"language":70,"meta":71,"style":71},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[73,5164,5165,5170,5194,5198,5215,5222],{"__ignoreMap":71},[76,5166,5167],{"class":78,"line":79},[76,5168,5169],{"class":146},"\u002F\u002Fnum1,num2形参\n",[76,5171,5172,5174,5177,5179,5181,5185,5187,5189,5192],{"class":78,"line":96},[76,5173,90],{"class":82},[76,5175,5176],{"class":1927}," add",[76,5178,87],{"class":86},[76,5180,90],{"class":82},[76,5182,5184],{"class":5183},"s4XuR"," num1",[76,5186,466],{"class":86},[76,5188,90],{"class":82},[76,5190,5191],{"class":5183}," num2",[76,5193,93],{"class":86},[76,5195,5196],{"class":78,"line":1143},[76,5197,1510],{"class":86},[76,5199,5200,5202,5205,5207,5210,5212],{"class":78,"line":1158},[76,5201,1949],{"class":82},[76,5203,5204],{"class":86}," sum",[76,5206,133],{"class":82},[76,5208,5209],{"class":86},"num1",[76,5211,569],{"class":82},[76,5213,5214],{"class":86},"num2;\n",[76,5216,5217,5219],{"class":78,"line":1164},[76,5218,4055],{"class":82},[76,5220,5221],{"class":86}," sum;\n",[76,5223,5224],{"class":78,"line":1178},[76,5225,1529],{"class":86},[16,5227,5229],{"id":5228},"_22函数调用","2.2函数调用",[21,5231,5232],{},"调用刚刚写的求和函数",[66,5234,5236],{"className":68,"code":5235,"language":70,"meta":71,"style":71},"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",[73,5237,5238,5246,5250,5255,5267,5279,5288,5293,5305],{"__ignoreMap":71},[76,5239,5240,5242,5244],{"class":78,"line":79},[76,5241,90],{"class":82},[76,5243,1937],{"class":1927},[76,5245,1940],{"class":86},[76,5247,5248],{"class":78,"line":96},[76,5249,1510],{"class":86},[76,5251,5252],{"class":78,"line":1143},[76,5253,5254],{"class":146},"    \u002F\u002Fa,b实参\n",[76,5256,5257,5259,5261,5263,5265],{"class":78,"line":1158},[76,5258,1949],{"class":82},[76,5260,1362],{"class":86},[76,5262,133],{"class":82},[76,5264,279],{"class":136},[76,5266,1254],{"class":86},[76,5268,5269,5271,5273,5275,5277],{"class":78,"line":1164},[76,5270,1949],{"class":82},[76,5272,2798],{"class":86},[76,5274,133],{"class":82},[76,5276,279],{"class":136},[76,5278,1254],{"class":86},[76,5280,5281,5283,5285],{"class":78,"line":1178},[76,5282,1976],{"class":86},[76,5284,1393],{"class":82},[76,5286,5287],{"class":86},"a,b;\n",[76,5289,5290],{"class":78,"line":1184},[76,5291,5292],{"class":146},"    \u002F\u002F调用函数时，实参值传给了形参\n",[76,5294,5295,5297,5299,5302],{"class":78,"line":1275},[76,5296,1515],{"class":86},[76,5298,1132],{"class":82},[76,5300,5301],{"class":1927},"add",[76,5303,5304],{"class":86},"(a,b);\n",[76,5306,5307],{"class":78,"line":1281},[76,5308,1529],{"class":86},[16,5310,5312],{"id":5311},"_23值传递","2.3值传递",[21,5314,5315],{},"值传递就是函数调用时实参将数值传给形参",[21,5317,5318],{},"值传递时，如果形参发生任何改变，不会影响实参",[21,5320,5321],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[66,5323,5325],{"className":68,"code":5324,"language":70,"meta":71,"style":71},"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",[73,5326,5327,5349,5353,5366,5383,5401,5412,5421,5430,5443,5459,5475,5484,5488,5496,5500,5512,5524,5531],{"__ignoreMap":71},[76,5328,5329,5332,5335,5337,5339,5341,5343,5345,5347],{"class":78,"line":79},[76,5330,5331],{"class":82},"void",[76,5333,5334],{"class":1927}," swap",[76,5336,87],{"class":86},[76,5338,90],{"class":82},[76,5340,5184],{"class":5183},[76,5342,466],{"class":86},[76,5344,90],{"class":82},[76,5346,5191],{"class":5183},[76,5348,93],{"class":86},[76,5350,5351],{"class":78,"line":96},[76,5352,1510],{"class":86},[76,5354,5355,5357,5359,5362,5364],{"class":78,"line":1143},[76,5356,1515],{"class":86},[76,5358,1132],{"class":82},[76,5360,5361],{"class":192},"\"交换前：\"",[76,5363,1132],{"class":82},[76,5365,1155],{"class":86},[76,5367,5368,5370,5372,5375,5377,5379,5381],{"class":78,"line":1158},[76,5369,1515],{"class":86},[76,5371,1132],{"class":82},[76,5373,5374],{"class":192},"\"num1=\"",[76,5376,1132],{"class":82},[76,5378,5209],{"class":86},[76,5380,1132],{"class":82},[76,5382,1155],{"class":86},[76,5384,5385,5387,5389,5392,5394,5397,5399],{"class":78,"line":1164},[76,5386,1515],{"class":86},[76,5388,1132],{"class":82},[76,5390,5391],{"class":192},"\"num2=\"",[76,5393,1132],{"class":82},[76,5395,5396],{"class":86},"num2",[76,5398,1132],{"class":82},[76,5400,1155],{"class":86},[76,5402,5403,5405,5407,5409],{"class":78,"line":1178},[76,5404,1949],{"class":82},[76,5406,4220],{"class":86},[76,5408,133],{"class":82},[76,5410,5411],{"class":86},"num1;\n",[76,5413,5414,5417,5419],{"class":78,"line":1184},[76,5415,5416],{"class":86},"    num1",[76,5418,133],{"class":82},[76,5420,5214],{"class":86},[76,5422,5423,5426,5428],{"class":78,"line":1275},[76,5424,5425],{"class":86},"    num2",[76,5427,133],{"class":82},[76,5429,4245],{"class":86},[76,5431,5432,5434,5436,5439,5441],{"class":78,"line":1281},[76,5433,1515],{"class":86},[76,5435,1132],{"class":82},[76,5437,5438],{"class":192},"\"交换后：\"",[76,5440,1132],{"class":82},[76,5442,1155],{"class":86},[76,5444,5445,5447,5449,5451,5453,5455,5457],{"class":78,"line":1293},[76,5446,1515],{"class":86},[76,5448,1132],{"class":82},[76,5450,5374],{"class":192},[76,5452,1132],{"class":82},[76,5454,5209],{"class":86},[76,5456,1132],{"class":82},[76,5458,1155],{"class":86},[76,5460,5461,5463,5465,5467,5469,5471,5473],{"class":78,"line":1576},[76,5462,1515],{"class":86},[76,5464,1132],{"class":82},[76,5466,5391],{"class":192},[76,5468,1132],{"class":82},[76,5470,5396],{"class":86},[76,5472,1132],{"class":82},[76,5474,1155],{"class":86},[76,5476,5477,5479,5481],{"class":78,"line":1581},[76,5478,4055],{"class":82},[76,5480,143],{"class":86},[76,5482,5483],{"class":146},"\u002F\u002F或者不写\n",[76,5485,5486],{"class":78,"line":1587},[76,5487,1529],{"class":86},[76,5489,5490,5492,5494],{"class":78,"line":1592},[76,5491,90],{"class":82},[76,5493,1937],{"class":1927},[76,5495,1940],{"class":86},[76,5497,5498],{"class":78,"line":1606},[76,5499,1510],{"class":86},[76,5501,5502,5504,5506,5508,5510],{"class":78,"line":1611},[76,5503,1949],{"class":82},[76,5505,1362],{"class":86},[76,5507,133],{"class":82},[76,5509,534],{"class":136},[76,5511,1254],{"class":86},[76,5513,5514,5516,5518,5520,5522],{"class":78,"line":1617},[76,5515,1949],{"class":82},[76,5517,2798],{"class":86},[76,5519,133],{"class":82},[76,5521,788],{"class":136},[76,5523,1254],{"class":86},[76,5525,5526,5529],{"class":78,"line":1638},[76,5527,5528],{"class":1927},"    swap",[76,5530,5304],{"class":86},[76,5532,5533],{"class":78,"line":1643},[76,5534,1529],{"class":86},[16,5536,5538],{"id":5537},"_24函数的常见形式","2.4函数的常见形式",[29,5540,5541],{},[32,5542,5543],{},"无参无返",[66,5545,5547],{"className":68,"code":5546,"language":70,"meta":71,"style":71},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[73,5548,5549,5558,5562,5575,5579,5587,5591,5596,5604],{"__ignoreMap":71},[76,5550,5551,5553,5556],{"class":78,"line":79},[76,5552,5331],{"class":82},[76,5554,5555],{"class":1927}," test01",[76,5557,1940],{"class":86},[76,5559,5560],{"class":78,"line":96},[76,5561,1510],{"class":86},[76,5563,5564,5566,5568,5571,5573],{"class":78,"line":1143},[76,5565,1515],{"class":86},[76,5567,1132],{"class":82},[76,5569,5570],{"class":192},"\"你好\"",[76,5572,1132],{"class":82},[76,5574,1155],{"class":86},[76,5576,5577],{"class":78,"line":1158},[76,5578,1529],{"class":86},[76,5580,5581,5583,5585],{"class":78,"line":1164},[76,5582,90],{"class":82},[76,5584,1937],{"class":1927},[76,5586,1940],{"class":86},[76,5588,5589],{"class":78,"line":1178},[76,5590,1510],{"class":86},[76,5592,5593],{"class":78,"line":1184},[76,5594,5595],{"class":146},"    \u002F\u002F函数调用\n",[76,5597,5598,5601],{"class":78,"line":1275},[76,5599,5600],{"class":1927},"    test01",[76,5602,5603],{"class":86},"();\n",[76,5605,5606],{"class":78,"line":1281},[76,5607,1529],{"class":86},[29,5609,5610],{"start":96},[32,5611,5612],{},"有参无返",[66,5614,5616],{"className":68,"code":5615,"language":70,"meta":71,"style":71},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[73,5617,5618,5633,5637,5649,5653,5661,5665,5676],{"__ignoreMap":71},[76,5619,5620,5622,5625,5627,5629,5631],{"class":78,"line":79},[76,5621,5331],{"class":82},[76,5623,5624],{"class":1927}," test02",[76,5626,87],{"class":86},[76,5628,90],{"class":82},[76,5630,1362],{"class":5183},[76,5632,93],{"class":86},[76,5634,5635],{"class":78,"line":96},[76,5636,1510],{"class":86},[76,5638,5639,5641,5643,5645,5647],{"class":78,"line":1143},[76,5640,1515],{"class":86},[76,5642,1132],{"class":82},[76,5644,5570],{"class":192},[76,5646,1132],{"class":82},[76,5648,1155],{"class":86},[76,5650,5651],{"class":78,"line":1158},[76,5652,1529],{"class":86},[76,5654,5655,5657,5659],{"class":78,"line":1164},[76,5656,90],{"class":82},[76,5658,1937],{"class":1927},[76,5660,1940],{"class":86},[76,5662,5663],{"class":78,"line":1178},[76,5664,1510],{"class":86},[76,5666,5667,5670,5672,5674],{"class":78,"line":1184},[76,5668,5669],{"class":1927},"    test02",[76,5671,87],{"class":86},[76,5673,399],{"class":136},[76,5675,2684],{"class":86},[76,5677,5678],{"class":78,"line":1275},[76,5679,1529],{"class":86},[29,5681,5682],{"start":1143},[32,5683,5684],{},"无参有返",[66,5686,5688],{"className":68,"code":5687,"language":70,"meta":71,"style":71},"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",[73,5689,5690,5699,5703,5715,5724,5728,5736,5740,5753,5772],{"__ignoreMap":71},[76,5691,5692,5694,5697],{"class":78,"line":79},[76,5693,90],{"class":82},[76,5695,5696],{"class":1927}," test03",[76,5698,1940],{"class":86},[76,5700,5701],{"class":78,"line":96},[76,5702,1510],{"class":86},[76,5704,5705,5707,5709,5711,5713],{"class":78,"line":1143},[76,5706,1515],{"class":86},[76,5708,1132],{"class":82},[76,5710,5570],{"class":192},[76,5712,1132],{"class":82},[76,5714,1155],{"class":86},[76,5716,5717,5719,5722],{"class":78,"line":1158},[76,5718,4055],{"class":82},[76,5720,5721],{"class":136}," 100",[76,5723,1254],{"class":86},[76,5725,5726],{"class":78,"line":1164},[76,5727,1529],{"class":86},[76,5729,5730,5732,5734],{"class":78,"line":1178},[76,5731,90],{"class":82},[76,5733,1937],{"class":1927},[76,5735,1940],{"class":86},[76,5737,5738],{"class":78,"line":1184},[76,5739,1510],{"class":86},[76,5741,5742,5744,5746,5748,5751],{"class":78,"line":1275},[76,5743,1949],{"class":82},[76,5745,5184],{"class":86},[76,5747,133],{"class":82},[76,5749,5750],{"class":1927},"test03",[76,5752,5603],{"class":86},[76,5754,5755,5757,5759,5761,5763,5765,5767,5769],{"class":78,"line":1281},[76,5756,1515],{"class":86},[76,5758,1132],{"class":82},[76,5760,5374],{"class":192},[76,5762,1132],{"class":82},[76,5764,5209],{"class":86},[76,5766,1132],{"class":82},[76,5768,1202],{"class":86},[76,5770,5771],{"class":146}," \u002F\u002F100\n",[76,5773,5774],{"class":78,"line":1293},[76,5775,1529],{"class":86},[21,5777,5778],{},"4.有参有返",[66,5780,5782],{"className":68,"code":5781,"language":70,"meta":71,"style":71},"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",[73,5783,5784,5799,5803,5816,5822,5826,5835,5839,5851,5865,5880],{"__ignoreMap":71},[76,5785,5786,5788,5791,5793,5795,5797],{"class":78,"line":79},[76,5787,90],{"class":82},[76,5789,5790],{"class":1927}," test04",[76,5792,87],{"class":86},[76,5794,90],{"class":82},[76,5796,1362],{"class":5183},[76,5798,93],{"class":86},[76,5800,5801],{"class":78,"line":96},[76,5802,1510],{"class":86},[76,5804,5805,5807,5809,5812,5814],{"class":78,"line":1143},[76,5806,1515],{"class":86},[76,5808,1132],{"class":82},[76,5810,5811],{"class":192},"\"hello\"",[76,5813,1132],{"class":82},[76,5815,1155],{"class":86},[76,5817,5818,5820],{"class":78,"line":1158},[76,5819,4055],{"class":82},[76,5821,1396],{"class":86},[76,5823,5824],{"class":78,"line":1164},[76,5825,1529],{"class":86},[76,5827,5828,5830,5833],{"class":78,"line":1178},[76,5829,90],{"class":82},[76,5831,5832],{"class":1927}," mian",[76,5834,1940],{"class":86},[76,5836,5837],{"class":78,"line":1184},[76,5838,1510],{"class":86},[76,5840,5841,5843,5845,5847,5849],{"class":78,"line":1275},[76,5842,1949],{"class":82},[76,5844,2798],{"class":86},[76,5846,133],{"class":82},[76,5848,305],{"class":136},[76,5850,1254],{"class":86},[76,5852,5853,5855,5857,5859,5862],{"class":78,"line":1281},[76,5854,1949],{"class":82},[76,5856,2814],{"class":86},[76,5858,133],{"class":82},[76,5860,5861],{"class":1927},"test04",[76,5863,5864],{"class":86},"(b);\n",[76,5866,5867,5869,5871,5873,5875,5877],{"class":78,"line":1293},[76,5868,1515],{"class":86},[76,5870,1132],{"class":82},[76,5872,376],{"class":86},[76,5874,1132],{"class":82},[76,5876,1202],{"class":86},[76,5878,5879],{"class":146}," \u002F\u002F1\n",[76,5881,5882],{"class":78,"line":1576},[76,5883,1529],{"class":86},[16,5885,5887],{"id":5886},"_25函数的声明","2.5函数的声明",[21,5889,5890],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[21,5892,5893,5894],{},"函数的",[237,5895,5896],{},"声明可以多次，但是函数的定义只能有一次",[66,5898,5900],{"className":68,"code":5899,"language":70,"meta":71,"style":71},"\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",[73,5901,5902,5907,5912,5937,5946,5950,5962,5974,5990,5994,6014,6018,6037],{"__ignoreMap":71},[76,5903,5904],{"class":78,"line":79},[76,5905,5906],{"class":146},"\u002F\u002F函数声明\n",[76,5908,5909],{"class":78,"line":96},[76,5910,5911],{"class":146},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[76,5913,5914,5916,5919,5921,5923,5925,5927,5929,5931,5934],{"class":78,"line":1143},[76,5915,90],{"class":82},[76,5917,5918],{"class":1927}," max",[76,5920,87],{"class":86},[76,5922,90],{"class":82},[76,5924,1362],{"class":5183},[76,5926,466],{"class":86},[76,5928,90],{"class":82},[76,5930,2798],{"class":5183},[76,5932,5933],{"class":86},");",[76,5935,5936],{"class":146},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[76,5938,5939,5941,5943],{"class":78,"line":1158},[76,5940,90],{"class":82},[76,5942,1937],{"class":1927},[76,5944,5945],{"class":86},"() \n",[76,5947,5948],{"class":78,"line":1164},[76,5949,1510],{"class":86},[76,5951,5952,5954,5956,5958,5960],{"class":78,"line":1178},[76,5953,1949],{"class":82},[76,5955,1362],{"class":86},[76,5957,133],{"class":82},[76,5959,534],{"class":136},[76,5961,1254],{"class":86},[76,5963,5964,5966,5968,5970,5972],{"class":78,"line":1184},[76,5965,1949],{"class":82},[76,5967,2798],{"class":86},[76,5969,133],{"class":82},[76,5971,788],{"class":136},[76,5973,1254],{"class":86},[76,5975,5976,5978,5980,5983,5986,5988],{"class":78,"line":1275},[76,5977,1515],{"class":86},[76,5979,1132],{"class":82},[76,5981,5982],{"class":1927},"max",[76,5984,5985],{"class":86},"(a,b)",[76,5987,1132],{"class":82},[76,5989,1155],{"class":86},[76,5991,5992],{"class":78,"line":1281},[76,5993,1529],{"class":86},[76,5995,5996,5998,6000,6002,6004,6006,6008,6010,6012],{"class":78,"line":1293},[76,5997,90],{"class":82},[76,5999,5918],{"class":1927},[76,6001,87],{"class":86},[76,6003,90],{"class":82},[76,6005,1362],{"class":5183},[76,6007,466],{"class":86},[76,6009,90],{"class":82},[76,6011,2798],{"class":5183},[76,6013,93],{"class":86},[76,6015,6016],{"class":78,"line":1576},[76,6017,1510],{"class":86},[76,6019,6020,6022,6024,6026,6028,6030,6032,6034],{"class":78,"line":1581},[76,6021,4055],{"class":82},[76,6023,1362],{"class":86},[76,6025,1048],{"class":82},[76,6027,351],{"class":86},[76,6029,1074],{"class":82},[76,6031,326],{"class":86},[76,6033,947],{"class":82},[76,6035,6036],{"class":86},"b;\n",[76,6038,6039],{"class":78,"line":1587},[76,6040,1529],{"class":86},[16,6042,6044],{"id":6043},"_26函数的分文件编写","2.6函数的分文件编写",[21,6046,6047],{},"4个步骤：",[1095,6049,6050,6053,6056,6059],{},[32,6051,6052],{},"1.创建后缀名为.h的头文件",[32,6054,6055],{},"2.创建后缀名为.cpp的源文件",[32,6057,6058],{},"3.在头文件中写函数的定义",[32,6060,6061],{},"4.在源文件中写函数的定义\n示例：",[21,6063,6064],{},"头文件：swap.h",[66,6066,6068],{"className":68,"code":6067,"language":70,"meta":71,"style":71},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[73,6069,6070,6076,6086,6090],{"__ignoreMap":71},[76,6071,6072,6074],{"class":78,"line":79},[76,6073,1913],{"class":82},[76,6075,1916],{"class":192},[76,6077,6078,6080,6082,6084],{"class":78,"line":96},[76,6079,1921],{"class":82},[76,6081,1924],{"class":82},[76,6083,1928],{"class":1927},[76,6085,1254],{"class":86},[76,6087,6088],{"class":78,"line":1143},[76,6089,5906],{"class":146},[76,6091,6092,6094,6096,6098,6100,6102,6104,6106,6108],{"class":78,"line":1158},[76,6093,5331],{"class":82},[76,6095,5334],{"class":1927},[76,6097,87],{"class":86},[76,6099,90],{"class":82},[76,6101,1362],{"class":5183},[76,6103,466],{"class":86},[76,6105,90],{"class":82},[76,6107,2798],{"class":5183},[76,6109,2684],{"class":86},[21,6111,6112],{},"源文件：swap.cpp",[66,6114,6116],{"className":68,"code":6115,"language":70,"meta":71,"style":71},"#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",[73,6117,6118,6125,6130,6150,6154,6165,6174,6183,6200,6217],{"__ignoreMap":71},[76,6119,6120,6122],{"class":78,"line":79},[76,6121,1913],{"class":82},[76,6123,6124],{"class":192}," \"swap.h\"\n",[76,6126,6127],{"class":78,"line":96},[76,6128,6129],{"class":146},"\u002F\u002F函数的定义\n",[76,6131,6132,6134,6136,6138,6140,6142,6144,6146,6148],{"class":78,"line":1143},[76,6133,5331],{"class":82},[76,6135,5334],{"class":1927},[76,6137,87],{"class":86},[76,6139,90],{"class":82},[76,6141,1362],{"class":5183},[76,6143,466],{"class":86},[76,6145,90],{"class":82},[76,6147,2798],{"class":5183},[76,6149,93],{"class":86},[76,6151,6152],{"class":78,"line":1158},[76,6153,1510],{"class":86},[76,6155,6156,6158,6160,6162],{"class":78,"line":1164},[76,6157,1949],{"class":82},[76,6159,4220],{"class":86},[76,6161,133],{"class":82},[76,6163,6164],{"class":86},"a;\n",[76,6166,6167,6170,6172],{"class":78,"line":1178},[76,6168,6169],{"class":86},"    a",[76,6171,133],{"class":82},[76,6173,6036],{"class":86},[76,6175,6176,6179,6181],{"class":78,"line":1184},[76,6177,6178],{"class":86},"    b",[76,6180,133],{"class":82},[76,6182,4245],{"class":86},[76,6184,6185,6187,6189,6192,6194,6196,6198],{"class":78,"line":1275},[76,6186,1515],{"class":86},[76,6188,1132],{"class":82},[76,6190,6191],{"class":192},"\"a=\"",[76,6193,1132],{"class":82},[76,6195,326],{"class":86},[76,6197,1132],{"class":82},[76,6199,1155],{"class":86},[76,6201,6202,6204,6206,6209,6211,6213,6215],{"class":78,"line":1281},[76,6203,1515],{"class":86},[76,6205,1132],{"class":82},[76,6207,6208],{"class":192},"\"b=\"",[76,6210,1132],{"class":82},[76,6212,351],{"class":86},[76,6214,1132],{"class":82},[76,6216,1155],{"class":86},[76,6218,6219],{"class":78,"line":1293},[76,6220,1529],{"class":86},[5092,6222,6223],{},"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":71,"searchDepth":96,"depth":96,"links":6225},[6226,6227,6228,6229,6230,6231],{"id":5139,"depth":96,"text":5140},{"id":5228,"depth":96,"text":5229},{"id":5311,"depth":96,"text":5312},{"id":5537,"depth":96,"text":5538},{"id":5886,"depth":96,"text":5887},{"id":6043,"depth":96,"text":6044},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5131,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6238,"title":6239,"body":6240,"description":6247,"extension":5123,"meta":7652,"navigation":2364,"path":7653,"seo":7654,"stem":7655,"__hash__":7656},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":9,"value":6241,"toc":7642},[6242,6245,6248,6252,6414,6418,6421,6424,6427,6430,6570,6574,6577,6580,6583,6648,6652,6657,6724,6727,6731,6734,6745,6750,6770,6773,6778,6797,6800,6804,6823,6826,6830,7065,7069,7072,7075,7078,7240,7243,7247,7250,7256,7639],[12,6243,6239],{"id":6244},"_3指针",[21,6246,6247],{},"通过指针保存一个地址，指针就是个地址",[16,6249,6251],{"id":6250},"_31定义指针","3.1定义指针",[66,6253,6255],{"className":68,"code":6254,"language":70,"meta":71,"style":71},"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",[73,6256,6257,6265,6269,6274,6286,6291,6299,6309,6327,6347,6351,6356,6361,6366,6380,6396,6410],{"__ignoreMap":71},[76,6258,6259,6261,6263],{"class":78,"line":79},[76,6260,90],{"class":82},[76,6262,1937],{"class":1927},[76,6264,1940],{"class":86},[76,6266,6267],{"class":78,"line":96},[76,6268,1510],{"class":86},[76,6270,6271],{"class":78,"line":1143},[76,6272,6273],{"class":146},"    \u002F\u002F1.定义指针\n",[76,6275,6276,6278,6280,6282,6284],{"class":78,"line":1158},[76,6277,1949],{"class":82},[76,6279,1362],{"class":86},[76,6281,133],{"class":82},[76,6283,534],{"class":136},[76,6285,1254],{"class":86},[76,6287,6288],{"class":78,"line":1164},[76,6289,6290],{"class":146},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[76,6292,6293,6296],{"class":78,"line":1178},[76,6294,6295],{"class":82},"    int*",[76,6297,6298],{"class":86},"p;\n",[76,6300,6301,6304,6307],{"class":78,"line":1184},[76,6302,6303],{"class":86},"    p",[76,6305,6306],{"class":82},"=&",[76,6308,6164],{"class":86},[76,6310,6311,6313,6315,6318,6321,6323,6325],{"class":78,"line":1275},[76,6312,1515],{"class":86},[76,6314,1132],{"class":82},[76,6316,6317],{"class":192},"\"a的地址为：\"",[76,6319,6320],{"class":82},"\u003C\u003C&",[76,6322,326],{"class":86},[76,6324,1132],{"class":82},[76,6326,1155],{"class":86},[76,6328,6329,6331,6333,6336,6338,6340,6342,6344],{"class":78,"line":1281},[76,6330,1515],{"class":86},[76,6332,1132],{"class":82},[76,6334,6335],{"class":192},"\"指针p为：\"",[76,6337,1132],{"class":82},[76,6339,21],{"class":86},[76,6341,1132],{"class":82},[76,6343,1202],{"class":86},[76,6345,6346],{"class":146},"\u002F\u002F指针p表示的就是a的地址\n",[76,6348,6349],{"class":78,"line":1293},[76,6350,2365],{"emptyLinePlaceholder":2364},[76,6352,6353],{"class":78,"line":1576},[76,6354,6355],{"class":146},"    \u002F\u002F2.使用指针\n",[76,6357,6358],{"class":78,"line":1581},[76,6359,6360],{"class":146},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[76,6362,6363],{"class":78,"line":1587},[76,6364,6365],{"class":146},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[76,6367,6368,6371,6373,6375,6378],{"class":78,"line":1592},[76,6369,6370],{"class":82},"    *",[76,6372,21],{"class":86},[76,6374,133],{"class":82},[76,6376,6377],{"class":136},"1000",[76,6379,1254],{"class":86},[76,6381,6382,6384,6387,6389,6391,6393],{"class":78,"line":1606},[76,6383,1515],{"class":86},[76,6385,6386],{"class":82},"\u003C\u003C*",[76,6388,21],{"class":86},[76,6390,1132],{"class":82},[76,6392,1202],{"class":86},[76,6394,6395],{"class":146},"\u002F\u002F1000\n",[76,6397,6398,6400,6402,6404,6406,6408],{"class":78,"line":1611},[76,6399,1515],{"class":86},[76,6401,1132],{"class":82},[76,6403,326],{"class":86},[76,6405,1132],{"class":82},[76,6407,1202],{"class":86},[76,6409,6395],{"class":146},[76,6411,6412],{"class":78,"line":1617},[76,6413,1529],{"class":86},[16,6415,6417],{"id":6416},"_32指针所占的内存空间","3.2指针所占的内存空间",[21,6419,6420],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[21,6422,6423],{},"在32位操作系统下：占用4个字节空间",[21,6425,6426],{},"在64位操作系统下：占用8个字节空间",[21,6428,6429],{},"上方是不管啥数据类型的",[66,6431,6433],{"className":68,"code":6432,"language":70,"meta":71,"style":71},"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",[73,6434,6435,6443,6447,6452,6464,6469,6474,6479,6492,6514,6540,6566],{"__ignoreMap":71},[76,6436,6437,6439,6441],{"class":78,"line":79},[76,6438,90],{"class":82},[76,6440,1937],{"class":1927},[76,6442,1940],{"class":86},[76,6444,6445],{"class":78,"line":96},[76,6446,1510],{"class":86},[76,6448,6449],{"class":78,"line":1143},[76,6450,6451],{"class":146},"    \u002F\u002F指针所占内存空间\n",[76,6453,6454,6456,6458,6460,6462],{"class":78,"line":1158},[76,6455,1949],{"class":82},[76,6457,1362],{"class":86},[76,6459,133],{"class":82},[76,6461,534],{"class":136},[76,6463,1254],{"class":86},[76,6465,6466],{"class":78,"line":1164},[76,6467,6468],{"class":146},"    \u002F\u002Fint *p;\n",[76,6470,6471],{"class":78,"line":1178},[76,6472,6473],{"class":146},"    \u002F\u002Fp=&a;\n",[76,6475,6476],{"class":78,"line":1184},[76,6477,6478],{"class":146},"    \u002F\u002F上述可以写为以下：\n",[76,6480,6481,6483,6486,6488,6490],{"class":78,"line":1275},[76,6482,1949],{"class":82},[76,6484,6485],{"class":82}," *",[76,6487,21],{"class":86},[76,6489,6306],{"class":82},[76,6491,6164],{"class":86},[76,6493,6494,6497,6499,6502,6504,6507,6509,6511],{"class":78,"line":1281},[76,6495,6496],{"class":86},"    cout ",[76,6498,1132],{"class":82},[76,6500,6501],{"class":192},"\"sizeof(int *)\"",[76,6503,1336],{"class":82},[76,6505,6506],{"class":86},"(p)",[76,6508,1132],{"class":82},[76,6510,1202],{"class":86},[76,6512,6513],{"class":146},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[76,6515,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534,6537],{"class":78,"line":1293},[76,6517,6496],{"class":86},[76,6519,1132],{"class":82},[76,6521,6501],{"class":192},[76,6523,1336],{"class":82},[76,6525,87],{"class":86},[76,6527,90],{"class":82},[76,6529,6485],{"class":82},[76,6531,517],{"class":86},[76,6533,1132],{"class":82},[76,6535,6536],{"class":86},"endl",[76,6538,6539],{"class":146},"  \u002F\u002F4字节(32位的话)\n",[76,6541,6542,6544,6546,6549,6551,6553,6555,6557,6559,6561,6563],{"class":78,"line":1576},[76,6543,6496],{"class":86},[76,6545,1132],{"class":82},[76,6547,6548],{"class":192},"\"sizeof(char *)\"",[76,6550,1336],{"class":82},[76,6552,87],{"class":86},[76,6554,184],{"class":82},[76,6556,6485],{"class":82},[76,6558,517],{"class":86},[76,6560,1132],{"class":82},[76,6562,1202],{"class":86},[76,6564,6565],{"class":146}," \u002F\u002F4字节(32位的话)\n",[76,6567,6568],{"class":78,"line":1581},[76,6569,1529],{"class":86},[16,6571,6573],{"id":6572},"_33空指针","3.3空指针",[21,6575,6576],{},"空指针：指针变量指向内存中编号为0的空间",[21,6578,6579],{},"用途：初始化指针变量",[21,6581,6582],{},"注意：空指针指向的内存是不可以访问的",[66,6584,6586],{"className":68,"code":6585,"language":70,"meta":71,"style":71},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[73,6587,6588,6596,6600,6605,6619,6624,6639,6644],{"__ignoreMap":71},[76,6589,6590,6592,6594],{"class":78,"line":79},[76,6591,90],{"class":82},[76,6593,1937],{"class":1927},[76,6595,1940],{"class":86},[76,6597,6598],{"class":78,"line":96},[76,6599,1510],{"class":86},[76,6601,6602],{"class":78,"line":1143},[76,6603,6604],{"class":146},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[76,6606,6607,6609,6611,6613,6615,6617],{"class":78,"line":1158},[76,6608,1949],{"class":82},[76,6610,6485],{"class":82},[76,6612,21],{"class":86},[76,6614,133],{"class":82},[76,6616,2356],{"class":136},[76,6618,1254],{"class":86},[76,6620,6621],{"class":78,"line":1164},[76,6622,6623],{"class":146},"    \u002F\u002F2.空指针不能进行访问\n",[76,6625,6626,6628,6630,6632,6634,6636],{"class":78,"line":1178},[76,6627,6370],{"class":82},[76,6629,21],{"class":86},[76,6631,133],{"class":82},[76,6633,399],{"class":136},[76,6635,143],{"class":86},[76,6637,6638],{"class":146},"\u002F\u002F直接报错，压根不能访问\n",[76,6640,6641],{"class":78,"line":1184},[76,6642,6643],{"class":146},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[76,6645,6646],{"class":78,"line":1275},[76,6647,1529],{"class":86},[16,6649,6651],{"id":6650},"_34野指针","3.4野指针",[21,6653,6654],{},[237,6655,6656],{},"指针变量指向非法的内存空间",[66,6658,6660],{"className":68,"code":6659,"language":70,"meta":71,"style":71},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[73,6661,6662,6670,6674,6703,6708,6720],{"__ignoreMap":71},[76,6663,6664,6666,6668],{"class":78,"line":79},[76,6665,90],{"class":82},[76,6667,1937],{"class":1927},[76,6669,1940],{"class":86},[76,6671,6672],{"class":78,"line":96},[76,6673,1510],{"class":86},[76,6675,6676,6678,6680,6682,6684,6686,6688,6690,6692,6695,6698,6700],{"class":78,"line":1143},[76,6677,1949],{"class":82},[76,6679,6485],{"class":82},[76,6681,21],{"class":86},[76,6683,133],{"class":82},[76,6685,87],{"class":86},[76,6687,90],{"class":82},[76,6689,6485],{"class":82},[76,6691,517],{"class":86},[76,6693,6694],{"class":82},"0x",[76,6696,6697],{"class":136},"1100",[76,6699,143],{"class":86},[76,6701,6702],{"class":146}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[76,6704,6705],{"class":78,"line":1158},[76,6706,6707],{"class":146},"    \u002F\u002F访问野指针报错\n",[76,6709,6710,6712,6714,6716,6718],{"class":78,"line":1164},[76,6711,1515],{"class":86},[76,6713,6386],{"class":82},[76,6715,21],{"class":86},[76,6717,1132],{"class":82},[76,6719,1155],{"class":86},[76,6721,6722],{"class":78,"line":1178},[76,6723,1529],{"class":86},[21,6725,6726],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[16,6728,6730],{"id":6729},"_35const修饰指针","3.5const修饰指针",[21,6732,6733],{},"三种情况：",[1095,6735,6736,6739,6742],{},[32,6737,6738],{},"const修饰指针 常量指针",[32,6740,6741],{},"const修饰常量 指针常量",[32,6743,6744],{},"const即修饰指针，又修饰常量",[29,6746,6747],{},[32,6748,6749],{},"常量指针",[66,6751,6753],{"className":68,"code":6752,"language":70,"meta":71,"style":71},"const int *p=&a;\n",[73,6754,6755],{"__ignoreMap":71},[76,6756,6757,6760,6762,6764,6766,6768],{"class":78,"line":79},[76,6758,6759],{"class":82},"const",[76,6761,2346],{"class":82},[76,6763,6485],{"class":82},[76,6765,21],{"class":86},[76,6767,6306],{"class":82},[76,6769,6164],{"class":86},[21,6771,6772],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[29,6774,6775],{"start":96},[32,6776,6777],{},"指针常量",[66,6779,6781],{"className":68,"code":6780,"language":70,"meta":71,"style":71},"int *const p=&a;\n",[73,6782,6783],{"__ignoreMap":71},[76,6784,6785,6787,6790,6793,6795],{"class":78,"line":79},[76,6786,90],{"class":82},[76,6788,6789],{"class":82}," *const",[76,6791,6792],{"class":86}," p",[76,6794,6306],{"class":82},[76,6796,6164],{"class":86},[21,6798,6799],{},"指针的指向不可以改，指针指向的值可以改",[29,6801,6802],{"start":1143},[32,6803,6744],{},[66,6805,6807],{"className":68,"code":6806,"language":70,"meta":71,"style":71},"const int *const p=&a;\n",[73,6808,6809],{"__ignoreMap":71},[76,6810,6811,6813,6815,6817,6819,6821],{"class":78,"line":79},[76,6812,6759],{"class":82},[76,6814,2346],{"class":82},[76,6816,6789],{"class":82},[76,6818,6792],{"class":86},[76,6820,6306],{"class":82},[76,6822,6164],{"class":86},[21,6824,6825],{},"指针的指向和指针指向的值都不可以改变",[16,6827,6829],{"id":6828},"_36指针和数组","3.6指针和数组",[66,6831,6833],{"className":68,"code":6832,"language":70,"meta":71,"style":71},"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",[73,6834,6835,6843,6847,6852,6906,6927,6943,6959,6970,6987,6992,7006,7032,7036,7048,7057,7061],{"__ignoreMap":71},[76,6836,6837,6839,6841],{"class":78,"line":79},[76,6838,90],{"class":82},[76,6840,1937],{"class":1927},[76,6842,1940],{"class":86},[76,6844,6845],{"class":78,"line":96},[76,6846,1510],{"class":86},[76,6848,6849],{"class":78,"line":1143},[76,6850,6851],{"class":146},"    \u002F\u002F利用指针访问数组中的元素\n",[76,6853,6854,6856,6858,6860,6862,6864,6866,6868,6870,6872,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904],{"class":78,"line":1158},[76,6855,1949],{"class":82},[76,6857,3927],{"class":86},[76,6859,534],{"class":136},[76,6861,1028],{"class":86},[76,6863,133],{"class":82},[76,6865,984],{"class":86},[76,6867,305],{"class":136},[76,6869,466],{"class":86},[76,6871,165],{"class":136},[76,6873,466],{"class":86},[76,6875,159],{"class":136},[76,6877,466],{"class":86},[76,6879,381],{"class":136},[76,6881,466],{"class":86},[76,6883,407],{"class":136},[76,6885,466],{"class":86},[76,6887,432],{"class":136},[76,6889,466],{"class":86},[76,6891,457],{"class":136},[76,6893,466],{"class":86},[76,6895,483],{"class":136},[76,6897,466],{"class":86},[76,6899,508],{"class":136},[76,6901,466],{"class":86},[76,6903,534],{"class":136},[76,6905,3960],{"class":86},[76,6907,6908,6910,6912,6915,6917,6919,6921,6923,6925],{"class":78,"line":1164},[76,6909,1515],{"class":86},[76,6911,1132],{"class":82},[76,6913,6914],{"class":192},"\"数组的第一个元素为：\"",[76,6916,1132],{"class":82},[76,6918,3871],{"class":86},[76,6920,279],{"class":136},[76,6922,1028],{"class":86},[76,6924,1132],{"class":82},[76,6926,1155],{"class":86},[76,6928,6929,6931,6933,6935,6937,6940],{"class":78,"line":1178},[76,6930,1949],{"class":82},[76,6932,6485],{"class":82},[76,6934,21],{"class":86},[76,6936,133],{"class":82},[76,6938,6939],{"class":86},"arr;",[76,6941,6942],{"class":146},"\u002F\u002F注意数才要加取地址符号&\n",[76,6944,6945,6947,6949,6951,6953,6955,6957],{"class":78,"line":1184},[76,6946,1515],{"class":86},[76,6948,1132],{"class":82},[76,6950,6914],{"class":192},[76,6952,6386],{"class":82},[76,6954,21],{"class":86},[76,6956,1132],{"class":82},[76,6958,1155],{"class":86},[76,6960,6961,6963,6965,6967],{"class":78,"line":1275},[76,6962,6303],{"class":86},[76,6964,2256],{"class":82},[76,6966,143],{"class":86},[76,6968,6969],{"class":146}," \u002F\u002F让指针向后偏移4个字节\n",[76,6971,6972,6974,6976,6979,6981,6983,6985],{"class":78,"line":1281},[76,6973,1515],{"class":86},[76,6975,1132],{"class":82},[76,6977,6978],{"class":192},"\"数组的第二个元素为：\"",[76,6980,6386],{"class":82},[76,6982,21],{"class":86},[76,6984,1132],{"class":82},[76,6986,1155],{"class":86},[76,6988,6989],{"class":78,"line":1293},[76,6990,6991],{"class":146},"    \u002F\u002F利用指针遍历数组\n",[76,6993,6994,6996,6998,7001,7003],{"class":78,"line":1576},[76,6995,1949],{"class":82},[76,6997,6485],{"class":82},[76,6999,7000],{"class":86},"p2",[76,7002,133],{"class":82},[76,7004,7005],{"class":86},"arr;\n",[76,7007,7008,7010,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030],{"class":78,"line":1581},[76,7009,3166],{"class":82},[76,7011,1622],{"class":86},[76,7013,90],{"class":82},[76,7015,2997],{"class":86},[76,7017,133],{"class":82},[76,7019,279],{"class":136},[76,7021,3004],{"class":86},[76,7023,998],{"class":82},[76,7025,534],{"class":136},[76,7027,3004],{"class":86},[76,7029,2256],{"class":82},[76,7031,93],{"class":86},[76,7033,7034],{"class":78,"line":1587},[76,7035,1994],{"class":86},[76,7037,7038,7040,7042,7044,7046],{"class":78,"line":1592},[76,7039,3416],{"class":86},[76,7041,6386],{"class":82},[76,7043,7000],{"class":86},[76,7045,1132],{"class":82},[76,7047,1155],{"class":86},[76,7049,7050,7053,7055],{"class":78,"line":1606},[76,7051,7052],{"class":86},"        p2",[76,7054,2256],{"class":82},[76,7056,1254],{"class":86},[76,7058,7059],{"class":78,"line":1611},[76,7060,2151],{"class":86},[76,7062,7063],{"class":78,"line":1617},[76,7064,1529],{"class":86},[16,7066,7068],{"id":7067},"_37指针和函数","3.7指针和函数",[21,7070,7071],{},"利用指针做函数参数，可以修改实参的值",[21,7073,7074],{},"值传递：只改变形参，不改变实参",[21,7076,7077],{},"地址传递：",[66,7079,7081],{"className":68,"code":7080,"language":70,"meta":71,"style":71},"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",[73,7082,7083,7108,7112,7124,7135,7145,7149,7157,7161,7173,7185,7190,7206,7221,7236],{"__ignoreMap":71},[76,7084,7085,7087,7089,7091,7093,7095,7098,7100,7102,7104,7106],{"class":78,"line":79},[76,7086,5331],{"class":82},[76,7088,5334],{"class":1927},[76,7090,87],{"class":86},[76,7092,90],{"class":82},[76,7094,6485],{"class":82},[76,7096,7097],{"class":5183},"p1",[76,7099,466],{"class":86},[76,7101,90],{"class":82},[76,7103,6485],{"class":82},[76,7105,7000],{"class":5183},[76,7107,93],{"class":86},[76,7109,7110],{"class":78,"line":96},[76,7111,1510],{"class":86},[76,7113,7114,7116,7118,7121],{"class":78,"line":1143},[76,7115,1949],{"class":82},[76,7117,4220],{"class":86},[76,7119,7120],{"class":82},"=*",[76,7122,7123],{"class":86},"p1;\n",[76,7125,7126,7128,7130,7132],{"class":78,"line":1158},[76,7127,6370],{"class":82},[76,7129,7097],{"class":86},[76,7131,7120],{"class":82},[76,7133,7134],{"class":86},"p2;\n",[76,7136,7137,7139,7141,7143],{"class":78,"line":1164},[76,7138,6370],{"class":82},[76,7140,7000],{"class":86},[76,7142,133],{"class":82},[76,7144,4245],{"class":86},[76,7146,7147],{"class":78,"line":1178},[76,7148,1529],{"class":86},[76,7150,7151,7153,7155],{"class":78,"line":1184},[76,7152,90],{"class":82},[76,7154,1937],{"class":1927},[76,7156,1940],{"class":86},[76,7158,7159],{"class":78,"line":1275},[76,7160,1510],{"class":86},[76,7162,7163,7165,7167,7169,7171],{"class":78,"line":1281},[76,7164,1949],{"class":82},[76,7166,1362],{"class":86},[76,7168,133],{"class":82},[76,7170,534],{"class":136},[76,7172,1254],{"class":86},[76,7174,7175,7177,7179,7181,7183],{"class":78,"line":1293},[76,7176,1949],{"class":82},[76,7178,2798],{"class":86},[76,7180,133],{"class":82},[76,7182,788],{"class":136},[76,7184,1254],{"class":86},[76,7186,7187],{"class":78,"line":1576},[76,7188,7189],{"class":146},"    \u002F\u002F地址传递\n",[76,7191,7192,7194,7196,7198,7201,7203],{"class":78,"line":1581},[76,7193,5528],{"class":1927},[76,7195,87],{"class":86},[76,7197,441],{"class":82},[76,7199,7200],{"class":86},"a,",[76,7202,441],{"class":82},[76,7204,7205],{"class":86},"b);\n",[76,7207,7208,7210,7212,7214,7216,7218],{"class":78,"line":1587},[76,7209,1515],{"class":86},[76,7211,1132],{"class":82},[76,7213,326],{"class":86},[76,7215,1132],{"class":82},[76,7217,1202],{"class":86},[76,7219,7220],{"class":146},"\u002F\u002F20\n",[76,7222,7223,7225,7227,7229,7231,7233],{"class":78,"line":1592},[76,7224,1515],{"class":86},[76,7226,1132],{"class":82},[76,7228,351],{"class":86},[76,7230,1132],{"class":82},[76,7232,1202],{"class":86},[76,7234,7235],{"class":146},"\u002F\u002F10\n",[76,7237,7238],{"class":78,"line":1606},[76,7239,1529],{"class":86},[21,7241,7242],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[16,7244,7246],{"id":7245},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[21,7248,7249],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[21,7251,7252,7253,7255],{},"例如数组：int arr",[76,7254,534],{},"={4,3,6,9,1,2,10,8,7,5}",[66,7257,7259],{"className":68,"code":7258,"language":70,"meta":71,"style":71},"#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",[73,7260,7261,7267,7277,7301,7305,7336,7340,7374,7378,7396,7400,7411,7426,7441,7445,7449,7453,7457,7461,7469,7473,7478,7532,7544,7556,7561,7569,7573,7578,7603,7607,7622,7631,7635],{"__ignoreMap":71},[76,7262,7263,7265],{"class":78,"line":79},[76,7264,1913],{"class":82},[76,7266,1916],{"class":192},[76,7268,7269,7271,7273,7275],{"class":78,"line":96},[76,7270,1921],{"class":82},[76,7272,1924],{"class":82},[76,7274,1928],{"class":1927},[76,7276,1254],{"class":86},[76,7278,7279,7281,7284,7286,7288,7290,7292,7294,7296,7299],{"class":78,"line":1143},[76,7280,5331],{"class":82},[76,7282,7283],{"class":1927}," bubbleSort",[76,7285,87],{"class":86},[76,7287,90],{"class":82},[76,7289,6485],{"class":82},[76,7291,21],{"class":5183},[76,7293,466],{"class":86},[76,7295,90],{"class":82},[76,7297,7298],{"class":5183}," len",[76,7300,93],{"class":86},[76,7302,7303],{"class":78,"line":1158},[76,7304,1510],{"class":86},[76,7306,7307,7309,7311,7313,7315,7317,7319,7321,7323,7326,7328,7330,7332,7334],{"class":78,"line":1164},[76,7308,3166],{"class":82},[76,7310,87],{"class":86},[76,7312,90],{"class":82},[76,7314,2997],{"class":86},[76,7316,133],{"class":82},[76,7318,279],{"class":136},[76,7320,3004],{"class":86},[76,7322,998],{"class":82},[76,7324,7325],{"class":86},"len",[76,7327,620],{"class":82},[76,7329,305],{"class":136},[76,7331,3004],{"class":86},[76,7333,2256],{"class":82},[76,7335,93],{"class":86},[76,7337,7338],{"class":78,"line":1178},[76,7339,1994],{"class":86},[76,7341,7342,7344,7346,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372],{"class":78,"line":1184},[76,7343,3368],{"class":82},[76,7345,87],{"class":86},[76,7347,90],{"class":82},[76,7349,3375],{"class":86},[76,7351,133],{"class":82},[76,7353,279],{"class":136},[76,7355,3382],{"class":86},[76,7357,998],{"class":82},[76,7359,7325],{"class":86},[76,7361,620],{"class":82},[76,7363,529],{"class":86},[76,7365,620],{"class":82},[76,7367,305],{"class":136},[76,7369,3382],{"class":86},[76,7371,2256],{"class":82},[76,7373,93],{"class":86},[76,7375,7376],{"class":78,"line":1275},[76,7377,2475],{"class":86},[76,7379,7380,7382,7385,7387,7390,7392,7394],{"class":78,"line":1281},[76,7381,4607],{"class":82},[76,7383,7384],{"class":86},"(p[j]",[76,7386,1048],{"class":82},[76,7388,7389],{"class":86},"p[j",[76,7391,569],{"class":82},[76,7393,305],{"class":136},[76,7395,4622],{"class":86},[76,7397,7398],{"class":78,"line":1293},[76,7399,4627],{"class":86},[76,7401,7402,7404,7406,7408],{"class":78,"line":1576},[76,7403,4632],{"class":82},[76,7405,4220],{"class":86},[76,7407,133],{"class":82},[76,7409,7410],{"class":86},"p[j];\n",[76,7412,7413,7416,7418,7420,7422,7424],{"class":78,"line":1581},[76,7414,7415],{"class":86},"                p[j]",[76,7417,133],{"class":82},[76,7419,7389],{"class":86},[76,7421,569],{"class":82},[76,7423,305],{"class":136},[76,7425,4655],{"class":86},[76,7427,7428,7431,7433,7435,7437,7439],{"class":78,"line":1587},[76,7429,7430],{"class":86},"                p[j",[76,7432,569],{"class":82},[76,7434,305],{"class":136},[76,7436,1028],{"class":86},[76,7438,133],{"class":82},[76,7440,4245],{"class":86},[76,7442,7443],{"class":78,"line":1592},[76,7444,4675],{"class":86},[76,7446,7447],{"class":78,"line":1606},[76,7448,2494],{"class":86},[76,7450,7451],{"class":78,"line":1611},[76,7452,2151],{"class":86},[76,7454,7455],{"class":78,"line":1617},[76,7456,1529],{"class":86},[76,7458,7459],{"class":78,"line":1638},[76,7460,2365],{"emptyLinePlaceholder":2364},[76,7462,7463,7465,7467],{"class":78,"line":1643},[76,7464,90],{"class":82},[76,7466,1937],{"class":1927},[76,7468,1940],{"class":86},[76,7470,7471],{"class":78,"line":1657},[76,7472,1510],{"class":86},[76,7474,7475],{"class":78,"line":1662},[76,7476,7477],{"class":146},"    \u002F\u002F 1.创建数组\n",[76,7479,7480,7482,7484,7486,7488,7490,7492,7494,7496,7498,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526,7528,7530],{"class":78,"line":1691},[76,7481,1949],{"class":82},[76,7483,3927],{"class":86},[76,7485,534],{"class":136},[76,7487,1028],{"class":86},[76,7489,133],{"class":82},[76,7491,984],{"class":86},[76,7493,381],{"class":136},[76,7495,466],{"class":86},[76,7497,159],{"class":136},[76,7499,466],{"class":86},[76,7501,432],{"class":136},[76,7503,466],{"class":86},[76,7505,508],{"class":136},[76,7507,466],{"class":86},[76,7509,305],{"class":136},[76,7511,466],{"class":86},[76,7513,165],{"class":136},[76,7515,466],{"class":86},[76,7517,534],{"class":136},[76,7519,466],{"class":86},[76,7521,483],{"class":136},[76,7523,466],{"class":86},[76,7525,457],{"class":136},[76,7527,466],{"class":86},[76,7529,407],{"class":136},[76,7531,3960],{"class":86},[76,7533,7534,7536,7538,7540,7542],{"class":78,"line":1696},[76,7535,1949],{"class":82},[76,7537,7298],{"class":86},[76,7539,133],{"class":82},[76,7541,534],{"class":136},[76,7543,1254],{"class":86},[76,7545,7546,7548,7550,7552,7554],{"class":78,"line":1713},[76,7547,1949],{"class":82},[76,7549,6485],{"class":82},[76,7551,21],{"class":86},[76,7553,133],{"class":82},[76,7555,7005],{"class":86},[76,7557,7558],{"class":78,"line":1718},[76,7559,7560],{"class":146},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[76,7562,7563,7566],{"class":78,"line":1723},[76,7564,7565],{"class":1927},"    bubbleSort",[76,7567,7568],{"class":86},"(p,len);\n",[76,7570,7571],{"class":78,"line":1728},[76,7572,2365],{"emptyLinePlaceholder":2364},[76,7574,7575],{"class":78,"line":1742},[76,7576,7577],{"class":146},"    \u002F\u002F 3.打印排序后的数组\n",[76,7579,7580,7582,7584,7586,7588,7590,7592,7594,7596,7599,7601],{"class":78,"line":1747},[76,7581,3166],{"class":82},[76,7583,1622],{"class":86},[76,7585,90],{"class":82},[76,7587,2997],{"class":86},[76,7589,133],{"class":82},[76,7591,279],{"class":136},[76,7593,3179],{"class":86},[76,7595,998],{"class":82},[76,7597,7598],{"class":86},"len; i",[76,7600,2256],{"class":82},[76,7602,93],{"class":86},[76,7604,7605],{"class":78,"line":2542},[76,7606,1994],{"class":86},[76,7608,7609,7611,7613,7615,7617,7620],{"class":78,"line":2556},[76,7610,3416],{"class":86},[76,7612,6386],{"class":82},[76,7614,21],{"class":86},[76,7616,1132],{"class":82},[76,7618,7619],{"class":192},"\"\"",[76,7621,1254],{"class":86},[76,7623,7624,7627,7629],{"class":78,"line":2564},[76,7625,7626],{"class":86},"        p",[76,7628,2256],{"class":82},[76,7630,1254],{"class":86},[76,7632,7633],{"class":78,"line":2569},[76,7634,2151],{"class":86},[76,7636,7637],{"class":78,"line":2575},[76,7638,1529],{"class":86},[5092,7640,7641],{},"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":71,"searchDepth":96,"depth":96,"links":7643},[7644,7645,7646,7647,7648,7649,7650,7651],{"id":6250,"depth":96,"text":6251},{"id":6416,"depth":96,"text":6417},{"id":6572,"depth":96,"text":6573},{"id":6650,"depth":96,"text":6651},{"id":6729,"depth":96,"text":6730},{"id":6828,"depth":96,"text":6829},{"id":7067,"depth":96,"text":7068},{"id":7245,"depth":96,"text":7246},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6239,"description":6247},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7658,"title":7659,"body":7660,"description":7667,"extension":5123,"meta":10641,"navigation":2364,"path":10642,"seo":10643,"stem":10644,"__hash__":10645},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":9,"value":7661,"toc":10632},[7662,7665,7668,7672,7675,7678,7689,8027,8030,8034,8037,8044,8299,8303,8306,8309,8464,8468,8471,8474,8680,8684,8687,8990,8993,9001,9005,9008,9159,9161,9172,9229,9233,9238,9895,9903,9906,10000,10003,10623,10629],[12,7663,7659],{"id":7664},"_4结构体",[21,7666,7667],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[16,7669,7671],{"id":7670},"_41结构体定义与使用","4.1结构体定义与使用",[21,7673,7674],{},"语法：struct 结构体名 {结构体成员列表}；",[21,7676,7677],{},"通过结构体创建变量的方式：",[1095,7679,7680,7683,7686],{},[32,7681,7682],{},"struct 结构体名 变量名",[32,7684,7685],{},"struct 结构体名 变量名={成员1值，成员2值...}",[32,7687,7688],{},"定义结构体时顺便创建变量",[66,7690,7692],{"className":68,"code":7691,"language":70,"meta":71,"style":71},"#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",[73,7693,7694,7700,7710,7717,7722,7730,7734,7739,7743,7748,7753,7758,7765,7770,7777,7781,7788,7792,7796,7800,7804,7808,7812,7818,7822,7828,7836,7844,7848,7853,7858,7869,7874,7886,7897,7908,7913,7937,7942,7948,7975,7980,7986,7998,8010,8022],{"__ignoreMap":71},[76,7695,7696,7698],{"class":78,"line":79},[76,7697,1913],{"class":82},[76,7699,1916],{"class":192},[76,7701,7702,7704,7706,7708],{"class":78,"line":96},[76,7703,1921],{"class":82},[76,7705,1924],{"class":82},[76,7707,1928],{"class":1927},[76,7709,1254],{"class":86},[76,7711,7712,7714],{"class":78,"line":1143},[76,7713,1913],{"class":82},[76,7715,7716],{"class":192},"\u003Cstring>\n",[76,7718,7719],{"class":78,"line":1158},[76,7720,7721],{"class":146},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[76,7723,7724,7727],{"class":78,"line":1164},[76,7725,7726],{"class":82},"struct",[76,7728,7729],{"class":1927}," Student\n",[76,7731,7732],{"class":78,"line":1178},[76,7733,1510],{"class":86},[76,7735,7736],{"class":78,"line":1184},[76,7737,7738],{"class":146},"    \u002F\u002F成员列表\n",[76,7740,7741],{"class":78,"line":1275},[76,7742,2365],{"emptyLinePlaceholder":2364},[76,7744,7745],{"class":78,"line":1281},[76,7746,7747],{"class":146},"    \u002F\u002F姓名\n",[76,7749,7750],{"class":78,"line":1293},[76,7751,7752],{"class":86},"    string name;\n",[76,7754,7755],{"class":78,"line":1576},[76,7756,7757],{"class":146},"    \u002F\u002F年龄\n",[76,7759,7760,7762],{"class":78,"line":1581},[76,7761,1949],{"class":82},[76,7763,7764],{"class":86}," age;\n",[76,7766,7767],{"class":78,"line":1587},[76,7768,7769],{"class":146},"    \u002F\u002F分数\n",[76,7771,7772,7774],{"class":78,"line":1592},[76,7773,1949],{"class":82},[76,7775,7776],{"class":86}," score;\n",[76,7778,7779],{"class":78,"line":1606},[76,7780,3960],{"class":86},[76,7782,7783,7785],{"class":78,"line":1611},[76,7784,7726],{"class":82},[76,7786,7787],{"class":1927}," School\n",[76,7789,7790],{"class":78,"line":1617},[76,7791,1510],{"class":86},[76,7793,7794],{"class":78,"line":1638},[76,7795,7738],{"class":146},[76,7797,7798],{"class":78,"line":1643},[76,7799,2365],{"emptyLinePlaceholder":2364},[76,7801,7802],{"class":78,"line":1657},[76,7803,7747],{"class":146},[76,7805,7806],{"class":78,"line":1662},[76,7807,7752],{"class":86},[76,7809,7810],{"class":78,"line":1691},[76,7811,7757],{"class":146},[76,7813,7814,7816],{"class":78,"line":1696},[76,7815,1949],{"class":82},[76,7817,7764],{"class":86},[76,7819,7820],{"class":78,"line":1713},[76,7821,7769],{"class":146},[76,7823,7824,7826],{"class":78,"line":1718},[76,7825,1949],{"class":82},[76,7827,7776],{"class":86},[76,7829,7830,7833],{"class":78,"line":1723},[76,7831,7832],{"class":86},"} s3;",[76,7834,7835],{"class":146}," \u002F\u002F创建结构体时就创建了变量\n",[76,7837,7838,7840,7842],{"class":78,"line":1728},[76,7839,90],{"class":82},[76,7841,1937],{"class":1927},[76,7843,1940],{"class":86},[76,7845,7846],{"class":78,"line":1742},[76,7847,1510],{"class":86},[76,7849,7850],{"class":78,"line":1747},[76,7851,7852],{"class":146},"    \u002F\u002F2.通过学生类型创建具体学生\n",[76,7854,7855],{"class":78,"line":2542},[76,7856,7857],{"class":146},"    \u002F\u002F2.1 struct Student s1;\n",[76,7859,7860,7863,7866],{"class":78,"line":2556},[76,7861,7862],{"class":82},"    struct",[76,7864,7865],{"class":1927}," Student",[76,7867,7868],{"class":86}," s1;\n",[76,7870,7871],{"class":78,"line":2564},[76,7872,7873],{"class":146},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[76,7875,7876,7879,7881,7884],{"class":78,"line":2569},[76,7877,7878],{"class":86},"    s1.name",[76,7880,133],{"class":82},[76,7882,7883],{"class":192},"\"张三\"",[76,7885,1254],{"class":86},[76,7887,7888,7891,7893,7895],{"class":78,"line":2575},[76,7889,7890],{"class":86},"    s1.age",[76,7892,133],{"class":82},[76,7894,738],{"class":136},[76,7896,1254],{"class":86},[76,7898,7899,7902,7904,7906],{"class":78,"line":2581},[76,7900,7901],{"class":86},"    s1.score",[76,7903,133],{"class":82},[76,7905,342],{"class":136},[76,7907,1254],{"class":86},[76,7909,7910],{"class":78,"line":2586},[76,7911,7912],{"class":146},"    \u002F\u002F输出结果\n",[76,7914,7916,7918,7920,7923,7925,7928,7930,7933,7935],{"class":78,"line":7915},37,[76,7917,1515],{"class":86},[76,7919,1132],{"class":82},[76,7921,7922],{"class":86},"s1.name",[76,7924,1132],{"class":82},[76,7926,7927],{"class":86},"s1.age",[76,7929,1132],{"class":82},[76,7931,7932],{"class":86},"s1.score",[76,7934,1132],{"class":82},[76,7936,1155],{"class":86},[76,7938,7940],{"class":78,"line":7939},38,[76,7941,2365],{"emptyLinePlaceholder":2364},[76,7943,7945],{"class":78,"line":7944},39,[76,7946,7947],{"class":146},"    \u002F\u002F2.2 struct Student s2={...}\n",[76,7949,7951,7953,7955,7958,7960,7962,7965,7967,7969,7971,7973],{"class":78,"line":7950},40,[76,7952,7862],{"class":82},[76,7954,7865],{"class":1927},[76,7956,7957],{"class":86}," s2",[76,7959,133],{"class":82},[76,7961,984],{"class":86},[76,7963,7964],{"class":192},"\"王五\"",[76,7966,466],{"class":86},[76,7968,738],{"class":136},[76,7970,466],{"class":86},[76,7972,342],{"class":136},[76,7974,3960],{"class":86},[76,7976,7978],{"class":78,"line":7977},41,[76,7979,2365],{"emptyLinePlaceholder":2364},[76,7981,7983],{"class":78,"line":7982},42,[76,7984,7985],{"class":146},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[76,7987,7989,7992,7994,7996],{"class":78,"line":7988},43,[76,7990,7991],{"class":86},"    s3.name",[76,7993,133],{"class":82},[76,7995,3643],{"class":192},[76,7997,1254],{"class":86},[76,7999,8001,8004,8006,8008],{"class":78,"line":8000},44,[76,8002,8003],{"class":86},"    s3.age",[76,8005,133],{"class":82},[76,8007,738],{"class":136},[76,8009,1254],{"class":86},[76,8011,8013,8016,8018,8020],{"class":78,"line":8012},45,[76,8014,8015],{"class":86},"    s3.score",[76,8017,133],{"class":82},[76,8019,788],{"class":136},[76,8021,1254],{"class":86},[76,8023,8025],{"class":78,"line":8024},46,[76,8026,1529],{"class":86},[21,8028,8029],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[16,8031,8033],{"id":8032},"_42结构体数组","4.2结构体数组",[21,8035,8036],{},"将自定义的结构体放入到数组中方便维护",[21,8038,8039,8040,8043],{},"语法：struct 结构体名 数组名",[76,8041,8042],{},"元素个数","={ {}，{},...{} };",[66,8045,8047],{"className":68,"code":8046,"language":70,"meta":71,"style":71},"#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",[73,8048,8049,8055,8065,8071,8076,8082,8086,8090,8096,8102,8106,8110,8118,8122,8127,8142,8146,8162,8178,8182,8187,8203,8218,8233,8238,8264,8268,8291,8295],{"__ignoreMap":71},[76,8050,8051,8053],{"class":78,"line":79},[76,8052,1913],{"class":82},[76,8054,1916],{"class":192},[76,8056,8057,8059,8061,8063],{"class":78,"line":96},[76,8058,1921],{"class":82},[76,8060,1924],{"class":82},[76,8062,1928],{"class":1927},[76,8064,1254],{"class":86},[76,8066,8067,8069],{"class":78,"line":1143},[76,8068,1913],{"class":82},[76,8070,7716],{"class":192},[76,8072,8073],{"class":78,"line":1158},[76,8074,8075],{"class":146},"\u002F\u002F1.定义结构体\n",[76,8077,8078,8080],{"class":78,"line":1164},[76,8079,7726],{"class":82},[76,8081,7729],{"class":1927},[76,8083,8084],{"class":78,"line":1178},[76,8085,1510],{"class":86},[76,8087,8088],{"class":78,"line":1184},[76,8089,7752],{"class":86},[76,8091,8092,8094],{"class":78,"line":1275},[76,8093,1949],{"class":82},[76,8095,7764],{"class":86},[76,8097,8098,8100],{"class":78,"line":1281},[76,8099,1949],{"class":82},[76,8101,7776],{"class":86},[76,8103,8104],{"class":78,"line":1293},[76,8105,2365],{"emptyLinePlaceholder":2364},[76,8107,8108],{"class":78,"line":1576},[76,8109,3960],{"class":86},[76,8111,8112,8114,8116],{"class":78,"line":1581},[76,8113,90],{"class":82},[76,8115,1937],{"class":1927},[76,8117,1940],{"class":86},[76,8119,8120],{"class":78,"line":1587},[76,8121,1510],{"class":86},[76,8123,8124],{"class":78,"line":1592},[76,8125,8126],{"class":146},"    \u002F\u002F2.创建结构体数组\n",[76,8128,8129,8131,8133,8136,8138,8140],{"class":78,"line":1606},[76,8130,7862],{"class":82},[76,8132,7865],{"class":1927},[76,8134,8135],{"class":86}," stuArray[",[76,8137,165],{"class":136},[76,8139,1028],{"class":86},[76,8141,4873],{"class":82},[76,8143,8144],{"class":78,"line":1611},[76,8145,1994],{"class":86},[76,8147,8148,8150,8152,8154,8156,8158,8160],{"class":78,"line":1617},[76,8149,4882],{"class":86},[76,8151,7883],{"class":192},[76,8153,466],{"class":86},[76,8155,738],{"class":136},[76,8157,466],{"class":86},[76,8159,399],{"class":136},[76,8161,4895],{"class":86},[76,8163,8164,8166,8168,8170,8172,8174,8176],{"class":78,"line":1638},[76,8165,4882],{"class":86},[76,8167,3643],{"class":192},[76,8169,466],{"class":86},[76,8171,663],{"class":136},[76,8173,466],{"class":86},[76,8175,663],{"class":136},[76,8177,1529],{"class":86},[76,8179,8180],{"class":78,"line":1643},[76,8181,2151],{"class":86},[76,8183,8184],{"class":78,"line":1657},[76,8185,8186],{"class":146},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[76,8188,8189,8192,8194,8197,8199,8201],{"class":78,"line":1662},[76,8190,8191],{"class":86},"    stuArray[",[76,8193,305],{"class":136},[76,8195,8196],{"class":86},"].name",[76,8198,133],{"class":82},[76,8200,3666],{"class":192},[76,8202,1254],{"class":86},[76,8204,8205,8207,8209,8212,8214,8216],{"class":78,"line":1691},[76,8206,8191],{"class":86},[76,8208,305],{"class":136},[76,8210,8211],{"class":86},"].age",[76,8213,133],{"class":82},[76,8215,165],{"class":136},[76,8217,1254],{"class":86},[76,8219,8220,8222,8224,8227,8229,8231],{"class":78,"line":1696},[76,8221,8191],{"class":86},[76,8223,305],{"class":136},[76,8225,8226],{"class":86},"].score",[76,8228,133],{"class":82},[76,8230,165],{"class":136},[76,8232,1254],{"class":86},[76,8234,8235],{"class":78,"line":1713},[76,8236,8237],{"class":146},"    \u002F\u002F4.遍历结构体数组\n",[76,8239,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262],{"class":78,"line":1718},[76,8241,3166],{"class":82},[76,8243,1622],{"class":86},[76,8245,90],{"class":82},[76,8247,2997],{"class":86},[76,8249,133],{"class":82},[76,8251,279],{"class":136},[76,8253,3004],{"class":86},[76,8255,998],{"class":82},[76,8257,165],{"class":136},[76,8259,3004],{"class":86},[76,8261,2256],{"class":82},[76,8263,93],{"class":86},[76,8265,8266],{"class":78,"line":1723},[76,8267,1994],{"class":86},[76,8269,8270,8272,8274,8277,8279,8282,8284,8287,8289],{"class":78,"line":1728},[76,8271,3416],{"class":86},[76,8273,1132],{"class":82},[76,8275,8276],{"class":86},"stuArray[i].name",[76,8278,1132],{"class":82},[76,8280,8281],{"class":86},"stuArray[i].age",[76,8283,1132],{"class":82},[76,8285,8286],{"class":86},"stuArray[i].score",[76,8288,1132],{"class":82},[76,8290,1155],{"class":86},[76,8292,8293],{"class":78,"line":1742},[76,8294,2151],{"class":86},[76,8296,8297],{"class":78,"line":1747},[76,8298,1529],{"class":86},[16,8300,8302],{"id":8301},"_43结构体指针","4.3结构体指针",[21,8304,8305],{},"作用：通过指针访问结构体中的成员",[21,8307,8308],{},"利用操作符->可以通过结构体指针访问结构体属性",[66,8310,8312],{"className":68,"code":8311,"language":70,"meta":71,"style":71},"#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",[73,8313,8314,8320,8330,8336,8340,8346,8350,8354,8360,8366,8370,8378,8382,8387,8412,8417,8432,8437,8460],{"__ignoreMap":71},[76,8315,8316,8318],{"class":78,"line":79},[76,8317,1913],{"class":82},[76,8319,1916],{"class":192},[76,8321,8322,8324,8326,8328],{"class":78,"line":96},[76,8323,1921],{"class":82},[76,8325,1924],{"class":82},[76,8327,1928],{"class":1927},[76,8329,1254],{"class":86},[76,8331,8332,8334],{"class":78,"line":1143},[76,8333,1913],{"class":82},[76,8335,7716],{"class":192},[76,8337,8338],{"class":78,"line":1158},[76,8339,8075],{"class":146},[76,8341,8342,8344],{"class":78,"line":1164},[76,8343,7726],{"class":82},[76,8345,7729],{"class":1927},[76,8347,8348],{"class":78,"line":1178},[76,8349,1510],{"class":86},[76,8351,8352],{"class":78,"line":1184},[76,8353,7752],{"class":86},[76,8355,8356,8358],{"class":78,"line":1275},[76,8357,1949],{"class":82},[76,8359,7764],{"class":86},[76,8361,8362,8364],{"class":78,"line":1281},[76,8363,1949],{"class":82},[76,8365,7776],{"class":86},[76,8367,8368],{"class":78,"line":1293},[76,8369,3960],{"class":86},[76,8371,8372,8374,8376],{"class":78,"line":1576},[76,8373,90],{"class":82},[76,8375,1937],{"class":1927},[76,8377,1940],{"class":86},[76,8379,8380],{"class":78,"line":1581},[76,8381,1510],{"class":86},[76,8383,8384],{"class":78,"line":1587},[76,8385,8386],{"class":146},"    \u002F\u002F创建学生结构体变量\n",[76,8388,8389,8391,8393,8396,8398,8400,8402,8404,8406,8408,8410],{"class":78,"line":1592},[76,8390,7862],{"class":82},[76,8392,7865],{"class":1927},[76,8394,8395],{"class":86}," s",[76,8397,133],{"class":82},[76,8399,984],{"class":86},[76,8401,7883],{"class":192},[76,8403,466],{"class":86},[76,8405,738],{"class":136},[76,8407,466],{"class":86},[76,8409,1686],{"class":136},[76,8411,3960],{"class":86},[76,8413,8414],{"class":78,"line":1606},[76,8415,8416],{"class":146},"    \u002F\u002F通过指针指向结构体变量\n",[76,8418,8419,8421,8423,8425,8427,8429],{"class":78,"line":1611},[76,8420,7862],{"class":82},[76,8422,7865],{"class":1927},[76,8424,6485],{"class":82},[76,8426,21],{"class":86},[76,8428,6306],{"class":82},[76,8430,8431],{"class":86},"s\n",[76,8433,8434],{"class":78,"line":1617},[76,8435,8436],{"class":146},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[76,8438,8439,8441,8443,8446,8448,8451,8453,8456,8458],{"class":78,"line":1638},[76,8440,1515],{"class":86},[76,8442,1132],{"class":82},[76,8444,8445],{"class":86},"p->name",[76,8447,1132],{"class":82},[76,8449,8450],{"class":86},"p->age",[76,8452,1132],{"class":82},[76,8454,8455],{"class":86},"p->score",[76,8457,1132],{"class":82},[76,8459,1155],{"class":86},[76,8461,8462],{"class":78,"line":1643},[76,8463,1529],{"class":86},[16,8465,8467],{"id":8466},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[21,8469,8470],{},"作用：结构体中的成员可以是另一个结构体",[21,8472,8473],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[66,8475,8477],{"className":68,"code":8476,"language":70,"meta":71,"style":71},"#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",[73,8478,8479,8485,8495,8501,8506,8514,8518,8522,8528,8534,8538,8543,8550,8554,8561,8565,8571,8576,8580,8588,8592,8597,8602,8607,8618,8630,8641,8654,8665,8676],{"__ignoreMap":71},[76,8480,8481,8483],{"class":78,"line":79},[76,8482,1913],{"class":82},[76,8484,1916],{"class":192},[76,8486,8487,8489,8491,8493],{"class":78,"line":96},[76,8488,1921],{"class":82},[76,8490,1924],{"class":82},[76,8492,1928],{"class":1927},[76,8494,1254],{"class":86},[76,8496,8497,8499],{"class":78,"line":1143},[76,8498,1913],{"class":82},[76,8500,7716],{"class":192},[76,8502,8503],{"class":78,"line":1158},[76,8504,8505],{"class":146},"\u002F\u002F定义学生结构体\n",[76,8507,8508,8510,8512],{"class":78,"line":1164},[76,8509,7726],{"class":82},[76,8511,7865],{"class":1927},[76,8513,2639],{"class":86},[76,8515,8516],{"class":78,"line":1178},[76,8517,1510],{"class":86},[76,8519,8520],{"class":78,"line":1184},[76,8521,7752],{"class":86},[76,8523,8524,8526],{"class":78,"line":1275},[76,8525,1949],{"class":82},[76,8527,7764],{"class":86},[76,8529,8530,8532],{"class":78,"line":1281},[76,8531,1949],{"class":82},[76,8533,7776],{"class":86},[76,8535,8536],{"class":78,"line":1293},[76,8537,1529],{"class":86},[76,8539,8540],{"class":78,"line":1576},[76,8541,8542],{"class":146},"\u002F\u002F定义老师结构体\n",[76,8544,8545,8547],{"class":78,"line":1581},[76,8546,7726],{"class":82},[76,8548,8549],{"class":1927}," Teacher\n",[76,8551,8552],{"class":78,"line":1587},[76,8553,1510],{"class":86},[76,8555,8556,8558],{"class":78,"line":1592},[76,8557,1949],{"class":82},[76,8559,8560],{"class":86}," id;\n",[76,8562,8563],{"class":78,"line":1606},[76,8564,7752],{"class":86},[76,8566,8567,8569],{"class":78,"line":1611},[76,8568,1949],{"class":82},[76,8570,7764],{"class":86},[76,8572,8573],{"class":78,"line":1617},[76,8574,8575],{"class":86},"    Student stu;\n",[76,8577,8578],{"class":78,"line":1638},[76,8579,1529],{"class":86},[76,8581,8582,8584,8586],{"class":78,"line":1643},[76,8583,90],{"class":82},[76,8585,1937],{"class":1927},[76,8587,5945],{"class":86},[76,8589,8590],{"class":78,"line":1657},[76,8591,1510],{"class":86},[76,8593,8594],{"class":78,"line":1662},[76,8595,8596],{"class":146},"    \u002F\u002F结构体嵌套结构体\n",[76,8598,8599],{"class":78,"line":1691},[76,8600,8601],{"class":146},"    \u002F\u002F创建老师\n",[76,8603,8604],{"class":78,"line":1696},[76,8605,8606],{"class":86},"    Teacher t;\n",[76,8608,8609,8612,8614,8616],{"class":78,"line":1713},[76,8610,8611],{"class":86},"    t.id",[76,8613,133],{"class":82},[76,8615,399],{"class":136},[76,8617,1254],{"class":86},[76,8619,8620,8623,8625,8628],{"class":78,"line":1718},[76,8621,8622],{"class":86},"    t.name",[76,8624,133],{"class":82},[76,8626,8627],{"class":192},"\"老王\"",[76,8629,1254],{"class":86},[76,8631,8632,8635,8637,8639],{"class":78,"line":1723},[76,8633,8634],{"class":86},"    t.age",[76,8636,133],{"class":82},[76,8638,738],{"class":136},[76,8640,1254],{"class":86},[76,8642,8643,8646,8648,8651],{"class":78,"line":1728},[76,8644,8645],{"class":86},"    t.stu.name",[76,8647,133],{"class":82},[76,8649,8650],{"class":192},"\"小王\"",[76,8652,8653],{"class":86},"；\n",[76,8655,8656,8659,8661,8663],{"class":78,"line":1742},[76,8657,8658],{"class":86},"    t.stu.age",[76,8660,133],{"class":82},[76,8662,788],{"class":136},[76,8664,1254],{"class":86},[76,8666,8667,8670,8672,8674],{"class":78,"line":1747},[76,8668,8669],{"class":86},"    t.stu.score",[76,8671,133],{"class":82},[76,8673,432],{"class":136},[76,8675,1254],{"class":86},[76,8677,8678],{"class":78,"line":2542},[76,8679,1529],{"class":86},[16,8681,8683],{"id":8682},"_45结构体做函数参数","4.5结构体做函数参数",[21,8685,8686],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[66,8688,8690],{"className":68,"code":8689,"language":70,"meta":71,"style":71},"#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",[73,8691,8692,8698,8708,8714,8720,8724,8728,8734,8740,8744,8749,8754,8771,8775,8808,8812,8817,8836,8840,8871,8875,8883,8887,8896,8908,8920,8932,8945,8953,8966,8978,8986],{"__ignoreMap":71},[76,8693,8694,8696],{"class":78,"line":79},[76,8695,1913],{"class":82},[76,8697,1916],{"class":192},[76,8699,8700,8702,8704,8706],{"class":78,"line":96},[76,8701,1921],{"class":82},[76,8703,1924],{"class":82},[76,8705,1928],{"class":1927},[76,8707,1254],{"class":86},[76,8709,8710,8712],{"class":78,"line":1143},[76,8711,1913],{"class":82},[76,8713,7716],{"class":192},[76,8715,8716,8718],{"class":78,"line":1158},[76,8717,7726],{"class":82},[76,8719,7729],{"class":1927},[76,8721,8722],{"class":78,"line":1164},[76,8723,1510],{"class":86},[76,8725,8726],{"class":78,"line":1178},[76,8727,7752],{"class":86},[76,8729,8730,8732],{"class":78,"line":1184},[76,8731,1949],{"class":82},[76,8733,7764],{"class":86},[76,8735,8736,8738],{"class":78,"line":1275},[76,8737,1949],{"class":82},[76,8739,7776],{"class":86},[76,8741,8742],{"class":78,"line":1281},[76,8743,3960],{"class":86},[76,8745,8746],{"class":78,"line":1293},[76,8747,8748],{"class":146},"\u002F\u002F打印学生信息的函数\n",[76,8750,8751],{"class":78,"line":1576},[76,8752,8753],{"class":146},"\u002F\u002F值传递\n",[76,8755,8756,8758,8761,8763,8765,8767,8769],{"class":78,"line":1581},[76,8757,5331],{"class":82},[76,8759,8760],{"class":1927}," printStudent1",[76,8762,87],{"class":86},[76,8764,7726],{"class":82},[76,8766,7865],{"class":1927},[76,8768,8395],{"class":5183},[76,8770,93],{"class":86},[76,8772,8773],{"class":78,"line":1587},[76,8774,1510],{"class":86},[76,8776,8777,8779,8781,8784,8786,8789,8791,8794,8796,8798,8800,8803,8805],{"class":78,"line":1592},[76,8778,6496],{"class":86},[76,8780,1132],{"class":82},[76,8782,8783],{"class":86}," s.name ",[76,8785,1132],{"class":82},[76,8787,8788],{"class":192}," \" \"",[76,8790,1408],{"class":82},[76,8792,8793],{"class":86}," s.age ",[76,8795,1132],{"class":82},[76,8797,8788],{"class":192},[76,8799,1408],{"class":82},[76,8801,8802],{"class":86}," s.score ",[76,8804,1132],{"class":82},[76,8806,8807],{"class":86}," endl;\n",[76,8809,8810],{"class":78,"line":1606},[76,8811,1529],{"class":86},[76,8813,8814],{"class":78,"line":1611},[76,8815,8816],{"class":146},"\u002F\u002F地址传递\n",[76,8818,8819,8821,8824,8826,8828,8830,8832,8834],{"class":78,"line":1617},[76,8820,5331],{"class":82},[76,8822,8823],{"class":1927}," printStudent2",[76,8825,87],{"class":86},[76,8827,7726],{"class":82},[76,8829,7865],{"class":1927},[76,8831,6485],{"class":82},[76,8833,783],{"class":5183},[76,8835,93],{"class":86},[76,8837,8838],{"class":78,"line":1638},[76,8839,1510],{"class":86},[76,8841,8842,8844,8846,8849,8851,8853,8855,8858,8860,8862,8864,8867,8869],{"class":78,"line":1643},[76,8843,6496],{"class":86},[76,8845,1132],{"class":82},[76,8847,8848],{"class":86}," s->name ",[76,8850,1132],{"class":82},[76,8852,8788],{"class":192},[76,8854,1408],{"class":82},[76,8856,8857],{"class":86}," s->age ",[76,8859,1132],{"class":82},[76,8861,8788],{"class":192},[76,8863,1408],{"class":82},[76,8865,8866],{"class":86}," s->score ",[76,8868,1132],{"class":82},[76,8870,8807],{"class":86},[76,8872,8873],{"class":78,"line":1657},[76,8874,1529],{"class":86},[76,8876,8877,8879,8881],{"class":78,"line":1662},[76,8878,90],{"class":82},[76,8880,1937],{"class":1927},[76,8882,1940],{"class":86},[76,8884,8885],{"class":78,"line":1691},[76,8886,1510],{"class":86},[76,8888,8889,8891,8893],{"class":78,"line":1696},[76,8890,7862],{"class":82},[76,8892,7865],{"class":1927},[76,8894,8895],{"class":86}," s;\n",[76,8897,8898,8901,8903,8906],{"class":78,"line":1713},[76,8899,8900],{"class":86},"    s.name ",[76,8902,133],{"class":82},[76,8904,8905],{"class":192}," \"张三\"",[76,8907,1254],{"class":86},[76,8909,8910,8913,8915,8918],{"class":78,"line":1718},[76,8911,8912],{"class":86},"    s.age ",[76,8914,133],{"class":82},[76,8916,8917],{"class":136}," 20",[76,8919,1254],{"class":86},[76,8921,8922,8925,8927,8930],{"class":78,"line":1723},[76,8923,8924],{"class":86},"    s.score ",[76,8926,133],{"class":82},[76,8928,8929],{"class":136}," 85",[76,8931,1254],{"class":86},[76,8933,8934,8936,8938,8941,8943],{"class":78,"line":1728},[76,8935,1515],{"class":86},[76,8937,1132],{"class":82},[76,8939,8940],{"class":192},"\"值传递:\"",[76,8942,1132],{"class":82},[76,8944,1155],{"class":86},[76,8946,8947,8950],{"class":78,"line":1742},[76,8948,8949],{"class":1927},"    printStudent1",[76,8951,8952],{"class":86},"(s);\n",[76,8954,8955,8957,8959,8962,8964],{"class":78,"line":1747},[76,8956,1515],{"class":86},[76,8958,1132],{"class":82},[76,8960,8961],{"class":192},"\"地址传递:\"",[76,8963,1132],{"class":82},[76,8965,1155],{"class":86},[76,8967,8968,8971,8973,8975],{"class":78,"line":2542},[76,8969,8970],{"class":1927},"    printStudent2",[76,8972,87],{"class":86},[76,8974,441],{"class":82},[76,8976,8977],{"class":86},"s); \n",[76,8979,8980,8982,8984],{"class":78,"line":2556},[76,8981,4055],{"class":82},[76,8983,4058],{"class":136},[76,8985,1254],{"class":86},[76,8987,8988],{"class":78,"line":2564},[76,8989,1529],{"class":86},[21,8991,8992],{},"注意：",[1095,8994,8995,8998],{},[32,8996,8997],{},"1.先定义结构体，不要在函数中写结构体的定义",[32,8999,9000],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[16,9002,9004],{"id":9003},"_46结构体中const使用场景","4.6结构体中const使用场景",[21,9006,9007],{},"用const防止误操作",[66,9009,9011],{"className":68,"code":9010,"language":70,"meta":71,"style":71},"#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",[73,9012,9013,9019,9029,9035,9040,9044,9048,9054,9060,9064,9080,9084,9107,9111,9119,9123,9144,9151,9155],{"__ignoreMap":71},[76,9014,9015,9017],{"class":78,"line":79},[76,9016,1913],{"class":82},[76,9018,1916],{"class":192},[76,9020,9021,9023,9025,9027],{"class":78,"line":96},[76,9022,1921],{"class":82},[76,9024,1924],{"class":82},[76,9026,1928],{"class":1927},[76,9028,1254],{"class":86},[76,9030,9031,9033],{"class":78,"line":1143},[76,9032,1913],{"class":82},[76,9034,7716],{"class":192},[76,9036,9037],{"class":78,"line":1158},[76,9038,9039],{"class":86},"sctuct Student\n",[76,9041,9042],{"class":78,"line":1164},[76,9043,1510],{"class":86},[76,9045,9046],{"class":78,"line":1178},[76,9047,7752],{"class":86},[76,9049,9050,9052],{"class":78,"line":1184},[76,9051,1949],{"class":82},[76,9053,7764],{"class":86},[76,9055,9056,9058],{"class":78,"line":1275},[76,9057,1949],{"class":82},[76,9059,7776],{"class":86},[76,9061,9062],{"class":78,"line":1281},[76,9063,3960],{"class":86},[76,9065,9066,9068,9071,9073,9076,9078],{"class":78,"line":1293},[76,9067,5331],{"class":82},[76,9069,9070],{"class":1927}," printStudents",[76,9072,87],{"class":86},[76,9074,9075],{"class":1927},"student",[76,9077,8395],{"class":5183},[76,9079,93],{"class":86},[76,9081,9082],{"class":78,"line":1576},[76,9083,1510],{"class":86},[76,9085,9086,9088,9090,9093,9095,9098,9100,9103,9105],{"class":78,"line":1581},[76,9087,1515],{"class":86},[76,9089,1132],{"class":82},[76,9091,9092],{"class":86},"s.name",[76,9094,1132],{"class":82},[76,9096,9097],{"class":86},"s.age",[76,9099,1132],{"class":82},[76,9101,9102],{"class":86},"s.score",[76,9104,1132],{"class":82},[76,9106,1155],{"class":86},[76,9108,9109],{"class":78,"line":1587},[76,9110,1529],{"class":86},[76,9112,9113,9115,9117],{"class":78,"line":1592},[76,9114,90],{"class":82},[76,9116,1937],{"class":1927},[76,9118,5945],{"class":86},[76,9120,9121],{"class":78,"line":1606},[76,9122,1510],{"class":86},[76,9124,9125,9128,9130,9132,9134,9136,9138,9140,9142],{"class":78,"line":1611},[76,9126,9127],{"class":86},"    Student s",[76,9129,133],{"class":82},[76,9131,984],{"class":86},[76,9133,7883],{"class":192},[76,9135,466],{"class":86},[76,9137,738],{"class":136},[76,9139,466],{"class":86},[76,9141,738],{"class":136},[76,9143,3960],{"class":86},[76,9145,9146,9149],{"class":78,"line":1617},[76,9147,9148],{"class":1927},"    printStudent",[76,9150,8952],{"class":86},[76,9152,9153],{"class":78,"line":1638},[76,9154,2365],{"emptyLinePlaceholder":2364},[76,9156,9157],{"class":78,"line":1643},[76,9158,1529],{"class":86},[21,9160,8992],{},[1095,9162,9163,9166,9169],{},[32,9164,9165],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[32,9167,9168],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[32,9170,9171],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[66,9173,9175],{"className":68,"code":9174,"language":70,"meta":71,"style":71},"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",[73,9176,9177,9196,9200,9205,9225],{"__ignoreMap":71},[76,9178,9179,9181,9183,9185,9187,9190,9192,9194],{"class":78,"line":79},[76,9180,5331],{"class":82},[76,9182,9070],{"class":1927},[76,9184,87],{"class":86},[76,9186,6759],{"class":82},[76,9188,9189],{"class":1927}," student",[76,9191,6485],{"class":82},[76,9193,783],{"class":5183},[76,9195,93],{"class":86},[76,9197,9198],{"class":78,"line":96},[76,9199,1510],{"class":86},[76,9201,9202],{"class":78,"line":1143},[76,9203,9204],{"class":146},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[76,9206,9207,9209,9211,9213,9215,9217,9219,9221,9223],{"class":78,"line":1158},[76,9208,1515],{"class":86},[76,9210,1132],{"class":82},[76,9212,9092],{"class":86},[76,9214,1132],{"class":82},[76,9216,9097],{"class":86},[76,9218,1132],{"class":82},[76,9220,9102],{"class":86},[76,9222,1132],{"class":82},[76,9224,1155],{"class":86},[76,9226,9227],{"class":78,"line":1164},[76,9228,1529],{"class":86},[16,9230,9232],{"id":9231},"_47案例","4.7案例",[29,9234,9235],{},[32,9236,9237],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[66,9239,9241],{"className":68,"code":9240,"language":70,"meta":71,"style":71},"#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",[73,9242,9243,9249,9259,9265,9272,9276,9282,9286,9291,9297,9303,9307,9311,9317,9321,9326,9331,9344,9348,9353,9379,9383,9395,9422,9426,9438,9448,9452,9457,9486,9490,9502,9511,9538,9549,9559,9563,9567,9571,9576,9600,9604,9628,9632,9651,9677,9681,9706,9729,9753,9758,9763,9768,9777,9782,9788,9809,9815,9829,9835,9862,9871,9877,9885,9890],{"__ignoreMap":71},[76,9244,9245,9247],{"class":78,"line":79},[76,9246,1913],{"class":82},[76,9248,1916],{"class":192},[76,9250,9251,9253,9255,9257],{"class":78,"line":96},[76,9252,1921],{"class":82},[76,9254,1924],{"class":82},[76,9256,1928],{"class":1927},[76,9258,1254],{"class":86},[76,9260,9261,9263],{"class":78,"line":1143},[76,9262,1913],{"class":82},[76,9264,7716],{"class":192},[76,9266,9267,9269],{"class":78,"line":1158},[76,9268,1913],{"class":82},[76,9270,9271],{"class":192},"\u003Cctime>\n",[76,9273,9274],{"class":78,"line":1164},[76,9275,8505],{"class":146},[76,9277,9278,9280],{"class":78,"line":1178},[76,9279,7726],{"class":82},[76,9281,7729],{"class":1927},[76,9283,9284],{"class":78,"line":1184},[76,9285,1510],{"class":86},[76,9287,9288],{"class":78,"line":1275},[76,9289,9290],{"class":86},"    string sName;\n",[76,9292,9293,9295],{"class":78,"line":1281},[76,9294,1949],{"class":82},[76,9296,7764],{"class":86},[76,9298,9299,9301],{"class":78,"line":1293},[76,9300,1949],{"class":82},[76,9302,7776],{"class":86},[76,9304,9305],{"class":78,"line":1576},[76,9306,3960],{"class":86},[76,9308,9309],{"class":78,"line":1581},[76,9310,8542],{"class":146},[76,9312,9313,9315],{"class":78,"line":1587},[76,9314,7726],{"class":82},[76,9316,8549],{"class":1927},[76,9318,9319],{"class":78,"line":1592},[76,9320,1510],{"class":86},[76,9322,9323],{"class":78,"line":1606},[76,9324,9325],{"class":86},"    string tName;\n",[76,9327,9328],{"class":78,"line":1611},[76,9329,9330],{"class":146},"    \u002F\u002F学生数组\n",[76,9332,9333,9335,9337,9340,9342],{"class":78,"line":1617},[76,9334,7862],{"class":82},[76,9336,7865],{"class":1927},[76,9338,9339],{"class":86}," sArray[",[76,9341,407],{"class":136},[76,9343,4655],{"class":86},[76,9345,9346],{"class":78,"line":1638},[76,9347,3960],{"class":86},[76,9349,9350],{"class":78,"line":1643},[76,9351,9352],{"class":146},"\u002F\u002F给老师和学生赋值的函数\n",[76,9354,9355,9357,9360,9362,9364,9367,9370,9373,9375,9377],{"class":78,"line":1657},[76,9356,5331],{"class":82},[76,9358,9359],{"class":1927}," allocateSpace",[76,9361,87],{"class":86},[76,9363,7726],{"class":82},[76,9365,9366],{"class":1927}," Teacher",[76,9368,9369],{"class":5183}," tArray",[76,9371,9372],{"class":86},"[],",[76,9374,90],{"class":82},[76,9376,7298],{"class":5183},[76,9378,93],{"class":86},[76,9380,9381],{"class":78,"line":1662},[76,9382,1510],{"class":86},[76,9384,9385,9388,9390,9393],{"class":78,"line":1691},[76,9386,9387],{"class":86},"    string nameSeed",[76,9389,133],{"class":82},[76,9391,9392],{"class":192},"\"ABCDE\"",[76,9394,1254],{"class":86},[76,9396,9397,9399,9401,9403,9406,9408,9410,9413,9415,9418,9420],{"class":78,"line":1696},[76,9398,3166],{"class":82},[76,9400,1622],{"class":86},[76,9402,90],{"class":82},[76,9404,9405],{"class":86}," i ",[76,9407,133],{"class":82},[76,9409,4058],{"class":136},[76,9411,9412],{"class":86},"; i ",[76,9414,998],{"class":82},[76,9416,9417],{"class":86}," len; i",[76,9419,2256],{"class":82},[76,9421,93],{"class":86},[76,9423,9424],{"class":78,"line":1713},[76,9425,1994],{"class":86},[76,9427,9428,9431,9433,9436],{"class":78,"line":1718},[76,9429,9430],{"class":86},"        tArray[i].tName ",[76,9432,133],{"class":82},[76,9434,9435],{"class":192}," \"Teacher_\"",[76,9437,1254],{"class":86},[76,9439,9440,9442,9445],{"class":78,"line":1723},[76,9441,9430],{"class":86},[76,9443,9444],{"class":82},"+=",[76,9446,9447],{"class":86},"nameSeed[i];\n",[76,9449,9450],{"class":78,"line":1728},[76,9451,2365],{"emptyLinePlaceholder":2364},[76,9453,9454],{"class":78,"line":1742},[76,9455,9456],{"class":146},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[76,9458,9459,9461,9463,9465,9468,9470,9472,9475,9477,9479,9482,9484],{"class":78,"line":1747},[76,9460,3368],{"class":82},[76,9462,1622],{"class":86},[76,9464,90],{"class":82},[76,9466,9467],{"class":86}," j ",[76,9469,133],{"class":82},[76,9471,4058],{"class":136},[76,9473,9474],{"class":86},"; j ",[76,9476,998],{"class":82},[76,9478,2112],{"class":136},[76,9480,9481],{"class":86},"; j",[76,9483,2256],{"class":82},[76,9485,93],{"class":86},[76,9487,9488],{"class":78,"line":2542},[76,9489,2475],{"class":86},[76,9491,9492,9495,9497,9500],{"class":78,"line":2556},[76,9493,9494],{"class":86},"            tArray[i].sArray[j].sName ",[76,9496,133],{"class":82},[76,9498,9499],{"class":192}," \"Student_\"",[76,9501,1254],{"class":86},[76,9503,9504,9506,9508],{"class":78,"line":2564},[76,9505,9494],{"class":86},[76,9507,9444],{"class":82},[76,9509,9510],{"class":86}," nameSeed[j];\n",[76,9512,9513,9516,9519,9521,9523,9525,9527,9529,9531,9533,9535],{"class":78,"line":2569},[76,9514,9515],{"class":82},"            int",[76,9517,9518],{"class":86}," random",[76,9520,133],{"class":82},[76,9522,2389],{"class":1927},[76,9524,2392],{"class":86},[76,9526,416],{"class":82},[76,9528,995],{"class":136},[76,9530,569],{"class":82},[76,9532,489],{"class":136},[76,9534,143],{"class":86},[76,9536,9537],{"class":146},"\u002F\u002F40~99\n",[76,9539,9540,9543,9545,9547],{"class":78,"line":2575},[76,9541,9542],{"class":86},"            tArray[i].sArray[j].age ",[76,9544,133],{"class":82},[76,9546,8917],{"class":136},[76,9548,1254],{"class":86},[76,9550,9551,9554,9556],{"class":78,"line":2581},[76,9552,9553],{"class":86},"            tArray[i].sArray[j].score ",[76,9555,133],{"class":82},[76,9557,9558],{"class":86}," random;\n",[76,9560,9561],{"class":78,"line":2586},[76,9562,2494],{"class":86},[76,9564,9565],{"class":78,"line":7915},[76,9566,2151],{"class":86},[76,9568,9569],{"class":78,"line":7939},[76,9570,1529],{"class":86},[76,9572,9573],{"class":78,"line":7944},[76,9574,9575],{"class":146},"\u002F\u002F打印所有信息的函数\n",[76,9577,9578,9580,9583,9585,9587,9589,9591,9594,9596,9598],{"class":78,"line":7950},[76,9579,5331],{"class":82},[76,9581,9582],{"class":1927}," printInfo",[76,9584,87],{"class":86},[76,9586,7726],{"class":82},[76,9588,9366],{"class":1927},[76,9590,9369],{"class":5183},[76,9592,9593],{"class":86},"[], ",[76,9595,90],{"class":82},[76,9597,7298],{"class":5183},[76,9599,93],{"class":86},[76,9601,9602],{"class":78,"line":7977},[76,9603,1510],{"class":86},[76,9605,9606,9608,9610,9612,9614,9616,9618,9620,9622,9624,9626],{"class":78,"line":7982},[76,9607,3166],{"class":82},[76,9609,1622],{"class":86},[76,9611,90],{"class":82},[76,9613,9405],{"class":86},[76,9615,133],{"class":82},[76,9617,4058],{"class":136},[76,9619,9412],{"class":86},[76,9621,998],{"class":82},[76,9623,9417],{"class":86},[76,9625,2256],{"class":82},[76,9627,93],{"class":86},[76,9629,9630],{"class":78,"line":7988},[76,9631,1994],{"class":86},[76,9633,9634,9637,9639,9642,9644,9647,9649],{"class":78,"line":8000},[76,9635,9636],{"class":86},"        cout ",[76,9638,1132],{"class":82},[76,9640,9641],{"class":192}," \"Teacher: \"",[76,9643,1408],{"class":82},[76,9645,9646],{"class":86}," tArray[i].tName ",[76,9648,1132],{"class":82},[76,9650,8807],{"class":86},[76,9652,9653,9655,9657,9659,9661,9663,9665,9667,9669,9671,9673,9675],{"class":78,"line":8012},[76,9654,3368],{"class":82},[76,9656,1622],{"class":86},[76,9658,90],{"class":82},[76,9660,9467],{"class":86},[76,9662,133],{"class":82},[76,9664,4058],{"class":136},[76,9666,9474],{"class":86},[76,9668,998],{"class":82},[76,9670,2112],{"class":136},[76,9672,9481],{"class":86},[76,9674,2256],{"class":82},[76,9676,93],{"class":86},[76,9678,9679],{"class":78,"line":8024},[76,9680,2475],{"class":86},[76,9682,9684,9687,9689,9692,9694,9697,9699,9702,9704],{"class":78,"line":9683},47,[76,9685,9686],{"class":86},"            cout ",[76,9688,1132],{"class":82},[76,9690,9691],{"class":192}," \"",[76,9693,1194],{"class":136},[76,9695,9696],{"class":192},"Student: \"",[76,9698,1408],{"class":82},[76,9700,9701],{"class":86}," tArray[i].sArray[j].sName",[76,9703,1132],{"class":82},[76,9705,1155],{"class":86},[76,9707,9709,9711,9713,9715,9717,9720,9722,9725,9727],{"class":78,"line":9708},48,[76,9710,9686],{"class":86},[76,9712,1132],{"class":82},[76,9714,9691],{"class":192},[76,9716,1194],{"class":136},[76,9718,9719],{"class":192},"Age: \"",[76,9721,1408],{"class":82},[76,9723,9724],{"class":86}," tArray[i].sArray[j].age ",[76,9726,1132],{"class":82},[76,9728,8807],{"class":86},[76,9730,9732,9734,9736,9738,9740,9743,9745,9748,9750],{"class":78,"line":9731},49,[76,9733,9686],{"class":86},[76,9735,1132],{"class":82},[76,9737,9691],{"class":192},[76,9739,1194],{"class":136},[76,9741,9742],{"class":192},"Score: \"",[76,9744,1408],{"class":82},[76,9746,9747],{"class":86}," tArray[i].sArray[j].score ",[76,9749,1132],{"class":82},[76,9751,9752],{"class":86}," endl;   \n",[76,9754,9756],{"class":78,"line":9755},50,[76,9757,2494],{"class":86},[76,9759,9761],{"class":78,"line":9760},51,[76,9762,2151],{"class":86},[76,9764,9766],{"class":78,"line":9765},52,[76,9767,1529],{"class":86},[76,9769,9771,9773,9775],{"class":78,"line":9770},53,[76,9772,90],{"class":82},[76,9774,1937],{"class":1927},[76,9776,1940],{"class":86},[76,9778,9780],{"class":78,"line":9779},54,[76,9781,1510],{"class":86},[76,9783,9785],{"class":78,"line":9784},55,[76,9786,9787],{"class":146},"    \u002F\u002F随机数种子\n",[76,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807],{"class":78,"line":9790},56,[76,9792,2337],{"class":1927},[76,9794,2340],{"class":86},[76,9796,2343],{"class":82},[76,9798,2346],{"class":82},[76,9800,517],{"class":86},[76,9802,2351],{"class":1927},[76,9804,87],{"class":86},[76,9806,2356],{"class":136},[76,9808,2359],{"class":86},[76,9810,9812],{"class":78,"line":9811},57,[76,9813,9814],{"class":146},"    \u002F\u002F1.创建3名老师的数组\n",[76,9816,9818,9820,9822,9825,9827],{"class":78,"line":9817},58,[76,9819,7862],{"class":82},[76,9821,9366],{"class":1927},[76,9823,9824],{"class":86}," tArray[",[76,9826,159],{"class":136},[76,9828,4655],{"class":86},[76,9830,9832],{"class":78,"line":9831},59,[76,9833,9834],{"class":146},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[76,9836,9838,9840,9843,9845,9848,9851,9853,9855,9858,9860],{"class":78,"line":9837},60,[76,9839,1949],{"class":82},[76,9841,9842],{"class":86}," len ",[76,9844,133],{"class":82},[76,9846,9847],{"class":82}," sizeof",[76,9849,9850],{"class":86},"(tArray) ",[76,9852,672],{"class":82},[76,9854,9847],{"class":82},[76,9856,9857],{"class":86},"(tArray[",[76,9859,279],{"class":136},[76,9861,3821],{"class":86},[76,9863,9865,9868],{"class":78,"line":9864},61,[76,9866,9867],{"class":1927},"    allocateSpace",[76,9869,9870],{"class":86},"(tArray, len);\n",[76,9872,9874],{"class":78,"line":9873},62,[76,9875,9876],{"class":146},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[76,9878,9880,9883],{"class":78,"line":9879},63,[76,9881,9882],{"class":1927},"    printInfo",[76,9884,9870],{"class":86},[76,9886,9888],{"class":78,"line":9887},64,[76,9889,2365],{"emptyLinePlaceholder":2364},[76,9891,9893],{"class":78,"line":9892},65,[76,9894,1529],{"class":86},[29,9896,9897],{"start":96},[32,9898,9899,9902],{},[237,9900,9901],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[21,9904,9905],{},"五名英雄信息如下：",[66,9907,9911],{"className":9908,"code":9909,"language":9910,"meta":71,"style":71},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[73,9912,9913,9931,9948,9965,9982],{"__ignoreMap":71},[76,9914,9915,9917,9920,9922,9924,9926,9929],{"class":78,"line":79},[76,9916,4882],{"class":86},[76,9918,9919],{"class":192},"\"刘备\"",[76,9921,466],{"class":86},[76,9923,863],{"class":136},[76,9925,466],{"class":86},[76,9927,9928],{"class":192},"\"男\"",[76,9930,4895],{"class":86},[76,9932,9933,9935,9938,9940,9942,9944,9946],{"class":78,"line":96},[76,9934,4882],{"class":86},[76,9936,9937],{"class":192},"\"关羽\"",[76,9939,466],{"class":86},[76,9941,838],{"class":136},[76,9943,466],{"class":86},[76,9945,9928],{"class":192},[76,9947,4895],{"class":86},[76,9949,9950,9952,9955,9957,9959,9961,9963],{"class":78,"line":1143},[76,9951,4882],{"class":86},[76,9953,9954],{"class":192},"\"张飞\"",[76,9956,466],{"class":86},[76,9958,788],{"class":136},[76,9960,466],{"class":86},[76,9962,9928],{"class":192},[76,9964,4895],{"class":86},[76,9966,9967,9969,9972,9974,9976,9978,9980],{"class":78,"line":1158},[76,9968,4882],{"class":86},[76,9970,9971],{"class":192},"\"赵云\"",[76,9973,466],{"class":86},[76,9975,813],{"class":136},[76,9977,466],{"class":86},[76,9979,9928],{"class":192},[76,9981,4895],{"class":86},[76,9983,9984,9986,9989,9991,9993,9995,9998],{"class":78,"line":1164},[76,9985,4882],{"class":86},[76,9987,9988],{"class":192},"\"貂蝉\"",[76,9990,466],{"class":86},[76,9992,763],{"class":136},[76,9994,466],{"class":86},[76,9996,9997],{"class":192},"\"女\"",[76,9999,4895],{"class":86},[21,10001,10002],{},"代码：",[66,10004,10006],{"className":68,"code":10005,"language":70,"meta":71,"style":71},"#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",[73,10007,10008,10014,10024,10030,10037,10041,10045,10051,10056,10060,10065,10088,10092,10117,10121,10154,10159,10188,10193,10208,10234,10254,10259,10264,10268,10272,10277,10299,10303,10327,10331,10393,10397,10401,10409,10413,10418,10429,10433,10449,10465,10481,10497,10513,10517,10537,10559,10564,10577,10584,10589,10595,10600,10613,10619],{"__ignoreMap":71},[76,10009,10010,10012],{"class":78,"line":79},[76,10011,1913],{"class":82},[76,10013,1916],{"class":192},[76,10015,10016,10018,10020,10022],{"class":78,"line":96},[76,10017,1921],{"class":82},[76,10019,1924],{"class":82},[76,10021,1928],{"class":1927},[76,10023,1254],{"class":86},[76,10025,10026,10028],{"class":78,"line":1143},[76,10027,1913],{"class":82},[76,10029,7716],{"class":192},[76,10031,10032,10034],{"class":78,"line":1158},[76,10033,7726],{"class":82},[76,10035,10036],{"class":1927}," Sanguo\n",[76,10038,10039],{"class":78,"line":1164},[76,10040,1510],{"class":86},[76,10042,10043],{"class":78,"line":1178},[76,10044,7752],{"class":86},[76,10046,10047,10049],{"class":78,"line":1184},[76,10048,1949],{"class":82},[76,10050,7764],{"class":86},[76,10052,10053],{"class":78,"line":1275},[76,10054,10055],{"class":86},"    string gender;\n",[76,10057,10058],{"class":78,"line":1281},[76,10059,3960],{"class":86},[76,10061,10062],{"class":78,"line":1293},[76,10063,10064],{"class":146},"\u002F\u002F定义排序函数\n",[76,10066,10067,10069,10071,10073,10076,10078,10080,10082,10084,10086],{"class":78,"line":1576},[76,10068,5331],{"class":82},[76,10070,7283],{"class":1927},[76,10072,87],{"class":86},[76,10074,10075],{"class":1927},"Sanguo",[76,10077,6485],{"class":82},[76,10079,783],{"class":5183},[76,10081,466],{"class":86},[76,10083,90],{"class":82},[76,10085,7298],{"class":5183},[76,10087,93],{"class":86},[76,10089,10090],{"class":78,"line":1581},[76,10091,1510],{"class":86},[76,10093,10094,10096,10098,10100,10102,10104,10106,10108,10110,10113,10115],{"class":78,"line":1587},[76,10095,3166],{"class":82},[76,10097,87],{"class":86},[76,10099,90],{"class":82},[76,10101,2997],{"class":86},[76,10103,133],{"class":82},[76,10105,279],{"class":136},[76,10107,3004],{"class":86},[76,10109,998],{"class":82},[76,10111,10112],{"class":86},"len;i",[76,10114,2256],{"class":82},[76,10116,93],{"class":86},[76,10118,10119],{"class":78,"line":1592},[76,10120,1994],{"class":86},[76,10122,10123,10126,10128,10130,10132,10134,10136,10138,10140,10142,10144,10146,10148,10150,10152],{"class":78,"line":1606},[76,10124,10125],{"class":82},"     for",[76,10127,1622],{"class":86},[76,10129,90],{"class":82},[76,10131,3375],{"class":86},[76,10133,133],{"class":82},[76,10135,279],{"class":136},[76,10137,3382],{"class":86},[76,10139,998],{"class":82},[76,10141,7325],{"class":86},[76,10143,620],{"class":82},[76,10145,305],{"class":136},[76,10147,620],{"class":82},[76,10149,3515],{"class":86},[76,10151,2256],{"class":82},[76,10153,93],{"class":86},[76,10155,10156],{"class":78,"line":1611},[76,10157,10158],{"class":86},"     {\n",[76,10160,10161,10164,10167,10169,10172,10174,10177,10179,10181,10183,10185],{"class":78,"line":1617},[76,10162,10163],{"class":82},"         if",[76,10165,10166],{"class":86}," ((s",[76,10168,569],{"class":82},[76,10170,10171],{"class":86},"j)->age ",[76,10173,1048],{"class":82},[76,10175,10176],{"class":86}," (s",[76,10178,569],{"class":82},[76,10180,555],{"class":86},[76,10182,569],{"class":82},[76,10184,305],{"class":136},[76,10186,10187],{"class":86},")->age)\n",[76,10189,10190],{"class":78,"line":1638},[76,10191,10192],{"class":86},"         {\n",[76,10194,10195,10198,10200,10203,10205],{"class":78,"line":1643},[76,10196,10197],{"class":86},"             Sanguo temp",[76,10199,7120],{"class":82},[76,10201,10202],{"class":86},"(s",[76,10204,569],{"class":82},[76,10206,10207],{"class":86},"j);\n",[76,10209,10210,10213,10215,10217,10220,10222,10224,10226,10228,10230,10232],{"class":78,"line":1657},[76,10211,10212],{"class":82},"             *",[76,10214,10202],{"class":86},[76,10216,569],{"class":82},[76,10218,10219],{"class":86},"j)",[76,10221,7120],{"class":82},[76,10223,10202],{"class":86},[76,10225,569],{"class":82},[76,10227,555],{"class":86},[76,10229,569],{"class":82},[76,10231,305],{"class":136},[76,10233,2684],{"class":86},[76,10235,10236,10238,10240,10242,10244,10246,10248,10250,10252],{"class":78,"line":1662},[76,10237,10212],{"class":82},[76,10239,10202],{"class":86},[76,10241,569],{"class":82},[76,10243,555],{"class":86},[76,10245,569],{"class":82},[76,10247,305],{"class":136},[76,10249,517],{"class":86},[76,10251,133],{"class":82},[76,10253,4245],{"class":86},[76,10255,10256],{"class":78,"line":1691},[76,10257,10258],{"class":86},"         }\n",[76,10260,10261],{"class":78,"line":1696},[76,10262,10263],{"class":86},"     }\n",[76,10265,10266],{"class":78,"line":1713},[76,10267,2151],{"class":86},[76,10269,10270],{"class":78,"line":1718},[76,10271,1529],{"class":86},[76,10273,10274],{"class":78,"line":1723},[76,10275,10276],{"class":146},"\u002F\u002F定义打印函数\n",[76,10278,10279,10281,10283,10285,10287,10289,10291,10293,10295,10297],{"class":78,"line":1728},[76,10280,5331],{"class":82},[76,10282,9582],{"class":1927},[76,10284,87],{"class":86},[76,10286,10075],{"class":1927},[76,10288,6485],{"class":82},[76,10290,783],{"class":5183},[76,10292,466],{"class":86},[76,10294,90],{"class":82},[76,10296,7298],{"class":5183},[76,10298,93],{"class":86},[76,10300,10301],{"class":78,"line":1742},[76,10302,1510],{"class":86},[76,10304,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323,10325],{"class":78,"line":1747},[76,10306,3166],{"class":82},[76,10308,1622],{"class":86},[76,10310,90],{"class":82},[76,10312,2997],{"class":86},[76,10314,133],{"class":82},[76,10316,279],{"class":136},[76,10318,3004],{"class":86},[76,10320,998],{"class":82},[76,10322,10112],{"class":86},[76,10324,2256],{"class":82},[76,10326,93],{"class":86},[76,10328,10329],{"class":78,"line":2542},[76,10330,1994],{"class":86},[76,10332,10333,10335,10337,10339,10341,10344,10346,10348,10350,10353,10355,10357,10359,10362,10364,10366,10368,10371,10373,10375,10377,10380,10382,10384,10386,10389,10391],{"class":78,"line":2556},[76,10334,3416],{"class":86},[76,10336,1132],{"class":82},[76,10338,339],{"class":192},[76,10340,1194],{"class":136},[76,10342,10343],{"class":192},"姓名：\"",[76,10345,1132],{"class":82},[76,10347,10202],{"class":86},[76,10349,569],{"class":82},[76,10351,10352],{"class":86},"i)->name",[76,10354,1132],{"class":82},[76,10356,339],{"class":192},[76,10358,1194],{"class":136},[76,10360,10361],{"class":192},"年龄：\"",[76,10363,1132],{"class":82},[76,10365,10202],{"class":86},[76,10367,569],{"class":82},[76,10369,10370],{"class":86},"i)->age",[76,10372,1132],{"class":82},[76,10374,339],{"class":192},[76,10376,1194],{"class":136},[76,10378,10379],{"class":192},"性别：\"",[76,10381,1132],{"class":82},[76,10383,10202],{"class":86},[76,10385,569],{"class":82},[76,10387,10388],{"class":86},"i)->gender",[76,10390,1132],{"class":82},[76,10392,1155],{"class":86},[76,10394,10395],{"class":78,"line":2564},[76,10396,2151],{"class":86},[76,10398,10399],{"class":78,"line":2569},[76,10400,1529],{"class":86},[76,10402,10403,10405,10407],{"class":78,"line":2575},[76,10404,90],{"class":82},[76,10406,1937],{"class":1927},[76,10408,1940],{"class":86},[76,10410,10411],{"class":78,"line":2581},[76,10412,1510],{"class":86},[76,10414,10415],{"class":78,"line":2586},[76,10416,10417],{"class":146},"    \u002F\u002F定义结构体变量\n",[76,10419,10420,10423,10425,10427],{"class":78,"line":7915},[76,10421,10422],{"class":86},"    Sanguo s1[",[76,10424,407],{"class":136},[76,10426,1028],{"class":86},[76,10428,4873],{"class":82},[76,10430,10431],{"class":78,"line":7939},[76,10432,1994],{"class":86},[76,10434,10435,10437,10439,10441,10443,10445,10447],{"class":78,"line":7944},[76,10436,4882],{"class":86},[76,10438,9919],{"class":192},[76,10440,466],{"class":86},[76,10442,863],{"class":136},[76,10444,466],{"class":86},[76,10446,9928],{"class":192},[76,10448,4895],{"class":86},[76,10450,10451,10453,10455,10457,10459,10461,10463],{"class":78,"line":7950},[76,10452,4882],{"class":86},[76,10454,9937],{"class":192},[76,10456,466],{"class":86},[76,10458,838],{"class":136},[76,10460,466],{"class":86},[76,10462,9928],{"class":192},[76,10464,4895],{"class":86},[76,10466,10467,10469,10471,10473,10475,10477,10479],{"class":78,"line":7977},[76,10468,4882],{"class":86},[76,10470,9954],{"class":192},[76,10472,466],{"class":86},[76,10474,788],{"class":136},[76,10476,466],{"class":86},[76,10478,9928],{"class":192},[76,10480,4895],{"class":86},[76,10482,10483,10485,10487,10489,10491,10493,10495],{"class":78,"line":7982},[76,10484,4882],{"class":86},[76,10486,9971],{"class":192},[76,10488,466],{"class":86},[76,10490,813],{"class":136},[76,10492,466],{"class":86},[76,10494,9928],{"class":192},[76,10496,4895],{"class":86},[76,10498,10499,10501,10503,10505,10507,10509,10511],{"class":78,"line":7988},[76,10500,4882],{"class":86},[76,10502,9988],{"class":192},[76,10504,466],{"class":86},[76,10506,763],{"class":136},[76,10508,466],{"class":86},[76,10510,9997],{"class":192},[76,10512,4895],{"class":86},[76,10514,10515],{"class":78,"line":8000},[76,10516,4916],{"class":86},[76,10518,10519,10521,10523,10525,10528,10530,10533,10535],{"class":78,"line":8012},[76,10520,1949],{"class":82},[76,10522,7298],{"class":86},[76,10524,4168],{"class":82},[76,10526,10527],{"class":86},"(s1)",[76,10529,4174],{"class":82},[76,10531,10532],{"class":86},"(s1[",[76,10534,279],{"class":136},[76,10536,3821],{"class":86},[76,10538,10539,10542,10544,10547,10549,10552,10555,10557],{"class":78,"line":8024},[76,10540,10541],{"class":86},"    Sanguo ",[76,10543,543],{"class":82},[76,10545,10546],{"class":86},"s ",[76,10548,133],{"class":82},[76,10550,10551],{"class":82}," &",[76,10553,10554],{"class":86},"s1[",[76,10556,279],{"class":136},[76,10558,4655],{"class":86},[76,10560,10561],{"class":78,"line":9683},[76,10562,10563],{"class":146},"    \u002F\u002F排序前：\n",[76,10565,10566,10568,10570,10573,10575],{"class":78,"line":9708},[76,10567,6496],{"class":86},[76,10569,1132],{"class":82},[76,10571,10572],{"class":192}," \"排序前：\"",[76,10574,1408],{"class":82},[76,10576,8807],{"class":86},[76,10578,10579,10581],{"class":78,"line":9731},[76,10580,9882],{"class":1927},[76,10582,10583],{"class":86},"(s,len);\n",[76,10585,10586],{"class":78,"line":9755},[76,10587,10588],{"class":146},"    \u002F\u002F调用排序函数\n",[76,10590,10591,10593],{"class":78,"line":9760},[76,10592,7565],{"class":1927},[76,10594,10583],{"class":86},[76,10596,10597],{"class":78,"line":9765},[76,10598,10599],{"class":146},"    \u002F\u002F排序后\n",[76,10601,10602,10604,10606,10609,10611],{"class":78,"line":9770},[76,10603,6496],{"class":86},[76,10605,1132],{"class":82},[76,10607,10608],{"class":192}," \"排序后：\"",[76,10610,1408],{"class":82},[76,10612,8807],{"class":86},[76,10614,10615,10617],{"class":78,"line":9779},[76,10616,9882],{"class":1927},[76,10618,10583],{"class":86},[76,10620,10621],{"class":78,"line":9784},[76,10622,1529],{"class":86},[21,10624,10625,10626,10628],{},"注意：使用指针时直接用传首地址**&s",[76,10627,279],{},"**",[5092,10630,10631],{},"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":71,"searchDepth":96,"depth":96,"links":10633},[10634,10635,10636,10637,10638,10639,10640],{"id":7670,"depth":96,"text":7671},{"id":8032,"depth":96,"text":8033},{"id":8301,"depth":96,"text":8302},{"id":8466,"depth":96,"text":8467},{"id":8682,"depth":96,"text":8683},{"id":9003,"depth":96,"text":9004},{"id":9231,"depth":96,"text":9232},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7659,"description":7667},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10647,"title":10648,"body":10649,"description":71,"extension":5123,"meta":11992,"navigation":2364,"path":11993,"seo":11994,"stem":11995,"__hash__":11996},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":9,"value":10650,"toc":11986},[10651,10654,10658,10664,10678,10683,10686,10690,10697,10703,10706,10713,10719,10724,10727,10730,10733,11297,11300,11314,11318,11323,11339,11479,11482,11488,11491,11496,11504,11612,11615,11620,11623,11628,11631,11637,11640,11983],[12,10652,10648],{"id":10653},"_5程序内存模型",[16,10655,10657],{"id":10656},"_51内存分区模型","5.1内存分区模型",[21,10659,10660,10661],{},"C++程序在执行时，将内存大方向划分为",[237,10662,10663],{},"4个区域",[1095,10665,10666,10669,10672,10675],{},[32,10667,10668],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[32,10670,10671],{},"全局区：存放全局变量和静态变量以及常量",[32,10673,10674],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[32,10676,10677],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[21,10679,10680],{},[237,10681,10682],{},"内存四区意义：",[21,10684,10685],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[46,10687,10689],{"id":10688},"_511程序运行前","5.1.1程序运行前",[21,10691,10692,10693,10696],{},"​\t在程序编译后，生成了exe可执行程序，",[237,10694,10695],{},"未执行该程序前","分为两个区域",[21,10698,10699,10700],{},"​\t",[237,10701,10702],{},"代码区：",[21,10704,10705],{},"​\t\t存放 CPU 执行的机器指令",[21,10707,10708,10709,10712],{},"​\t\t代码区是",[237,10710,10711],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[21,10714,10708,10715,10718],{},[237,10716,10717],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[21,10720,10699,10721],{},[237,10722,10723],{},"全局区：",[21,10725,10726],{},"​\t\t全局变量和静态变量存放在此.",[21,10728,10729],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[21,10731,10732],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[66,10734,10736],{"className":68,"code":10735,"language":70,"meta":71,"style":71},"\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",[73,10737,10738,10743,10756,10769,10773,10778,10793,10808,10812,10821,10825,10830,10843,10856,10860,10865,10891,10917,10921,10948,10974,10978,10983,10999,11014,11018,11044,11070,11074,11099,11124,11128,11154,11180,11184,11200,11215,11241,11267,11271,11281,11285,11293],{"__ignoreMap":71},[76,10739,10740],{"class":78,"line":79},[76,10741,10742],{"class":146},"\u002F\u002F全局变量\n",[76,10744,10745,10747,10750,10752,10754],{"class":78,"line":96},[76,10746,90],{"class":82},[76,10748,10749],{"class":86}," g_a ",[76,10751,133],{"class":82},[76,10753,2002],{"class":136},[76,10755,1254],{"class":86},[76,10757,10758,10760,10763,10765,10767],{"class":78,"line":1143},[76,10759,90],{"class":82},[76,10761,10762],{"class":86}," g_b ",[76,10764,133],{"class":82},[76,10766,2002],{"class":136},[76,10768,1254],{"class":86},[76,10770,10771],{"class":78,"line":1158},[76,10772,2365],{"emptyLinePlaceholder":2364},[76,10774,10775],{"class":78,"line":1164},[76,10776,10777],{"class":146},"\u002F\u002F全局常量\n",[76,10779,10780,10782,10784,10787,10789,10791],{"class":78,"line":1178},[76,10781,6759],{"class":82},[76,10783,2346],{"class":82},[76,10785,10786],{"class":86}," c_g_a ",[76,10788,133],{"class":82},[76,10790,2002],{"class":136},[76,10792,1254],{"class":86},[76,10794,10795,10797,10799,10802,10804,10806],{"class":78,"line":1184},[76,10796,6759],{"class":82},[76,10798,2346],{"class":82},[76,10800,10801],{"class":86}," c_g_b ",[76,10803,133],{"class":82},[76,10805,2002],{"class":136},[76,10807,1254],{"class":86},[76,10809,10810],{"class":78,"line":1275},[76,10811,2365],{"emptyLinePlaceholder":2364},[76,10813,10814,10816,10818],{"class":78,"line":1281},[76,10815,90],{"class":82},[76,10817,1937],{"class":1927},[76,10819,10820],{"class":86},"() {\n",[76,10822,10823],{"class":78,"line":1293},[76,10824,2365],{"emptyLinePlaceholder":2364},[76,10826,10827],{"class":78,"line":1576},[76,10828,10829],{"class":146},"    \u002F\u002F局部变量\n",[76,10831,10832,10834,10837,10839,10841],{"class":78,"line":1581},[76,10833,1949],{"class":82},[76,10835,10836],{"class":86}," a ",[76,10838,133],{"class":82},[76,10840,2002],{"class":136},[76,10842,1254],{"class":86},[76,10844,10845,10847,10850,10852,10854],{"class":78,"line":1587},[76,10846,1949],{"class":82},[76,10848,10849],{"class":86}," b ",[76,10851,133],{"class":82},[76,10853,2002],{"class":136},[76,10855,1254],{"class":86},[76,10857,10858],{"class":78,"line":1592},[76,10859,2365],{"emptyLinePlaceholder":2364},[76,10861,10862],{"class":78,"line":1606},[76,10863,10864],{"class":146},"    \u002F\u002F打印地址\n",[76,10866,10867,10869,10871,10874,10876,10878,10880,10882,10884,10887,10889],{"class":78,"line":1611},[76,10868,6496],{"class":86},[76,10870,1132],{"class":82},[76,10872,10873],{"class":192}," \"局部变量a地址为： \"",[76,10875,1408],{"class":82},[76,10877,1622],{"class":86},[76,10879,90],{"class":82},[76,10881,517],{"class":86},[76,10883,441],{"class":82},[76,10885,10886],{"class":86},"a ",[76,10888,1132],{"class":82},[76,10890,8807],{"class":86},[76,10892,10893,10895,10897,10900,10902,10904,10906,10908,10910,10913,10915],{"class":78,"line":1617},[76,10894,6496],{"class":86},[76,10896,1132],{"class":82},[76,10898,10899],{"class":192}," \"局部变量b地址为： \"",[76,10901,1408],{"class":82},[76,10903,1622],{"class":86},[76,10905,90],{"class":82},[76,10907,517],{"class":86},[76,10909,441],{"class":82},[76,10911,10912],{"class":86},"b ",[76,10914,1132],{"class":82},[76,10916,8807],{"class":86},[76,10918,10919],{"class":78,"line":1638},[76,10920,2365],{"emptyLinePlaceholder":2364},[76,10922,10923,10925,10927,10930,10932,10935,10937,10939,10941,10944,10946],{"class":78,"line":1643},[76,10924,6496],{"class":86},[76,10926,1132],{"class":82},[76,10928,10929],{"class":192}," \"全局变量g_a地址为： \"",[76,10931,1408],{"class":82},[76,10933,10934],{"class":86},"  (",[76,10936,90],{"class":82},[76,10938,517],{"class":86},[76,10940,441],{"class":82},[76,10942,10943],{"class":86},"g_a ",[76,10945,1132],{"class":82},[76,10947,8807],{"class":86},[76,10949,10950,10952,10954,10957,10959,10961,10963,10965,10967,10970,10972],{"class":78,"line":1657},[76,10951,6496],{"class":86},[76,10953,1132],{"class":82},[76,10955,10956],{"class":192}," \"全局变量g_b地址为： \"",[76,10958,1408],{"class":82},[76,10960,10934],{"class":86},[76,10962,90],{"class":82},[76,10964,517],{"class":86},[76,10966,441],{"class":82},[76,10968,10969],{"class":86},"g_b ",[76,10971,1132],{"class":82},[76,10973,8807],{"class":86},[76,10975,10976],{"class":78,"line":1662},[76,10977,2365],{"emptyLinePlaceholder":2364},[76,10979,10980],{"class":78,"line":1691},[76,10981,10982],{"class":146},"    \u002F\u002F静态变量\n",[76,10984,10985,10988,10990,10993,10995,10997],{"class":78,"line":1696},[76,10986,10987],{"class":82},"    static",[76,10989,2346],{"class":82},[76,10991,10992],{"class":86}," s_a ",[76,10994,133],{"class":82},[76,10996,2002],{"class":136},[76,10998,1254],{"class":86},[76,11000,11001,11003,11005,11008,11010,11012],{"class":78,"line":1713},[76,11002,10987],{"class":82},[76,11004,2346],{"class":82},[76,11006,11007],{"class":86}," s_b ",[76,11009,133],{"class":82},[76,11011,2002],{"class":136},[76,11013,1254],{"class":86},[76,11015,11016],{"class":78,"line":1718},[76,11017,2365],{"emptyLinePlaceholder":2364},[76,11019,11020,11022,11024,11027,11029,11031,11033,11035,11037,11040,11042],{"class":78,"line":1723},[76,11021,6496],{"class":86},[76,11023,1132],{"class":82},[76,11025,11026],{"class":192}," \"静态变量s_a地址为： \"",[76,11028,1408],{"class":82},[76,11030,1622],{"class":86},[76,11032,90],{"class":82},[76,11034,517],{"class":86},[76,11036,441],{"class":82},[76,11038,11039],{"class":86},"s_a ",[76,11041,1132],{"class":82},[76,11043,8807],{"class":86},[76,11045,11046,11048,11050,11053,11055,11057,11059,11061,11063,11066,11068],{"class":78,"line":1728},[76,11047,6496],{"class":86},[76,11049,1132],{"class":82},[76,11051,11052],{"class":192}," \"静态变量s_b地址为： \"",[76,11054,1408],{"class":82},[76,11056,1622],{"class":86},[76,11058,90],{"class":82},[76,11060,517],{"class":86},[76,11062,441],{"class":82},[76,11064,11065],{"class":86},"s_b ",[76,11067,1132],{"class":82},[76,11069,8807],{"class":86},[76,11071,11072],{"class":78,"line":1742},[76,11073,2365],{"emptyLinePlaceholder":2364},[76,11075,11076,11078,11080,11083,11085,11087,11089,11091,11093,11095,11097],{"class":78,"line":1747},[76,11077,6496],{"class":86},[76,11079,1132],{"class":82},[76,11081,11082],{"class":192}," \"字符串常量地址为： \"",[76,11084,1408],{"class":82},[76,11086,1622],{"class":86},[76,11088,90],{"class":82},[76,11090,517],{"class":86},[76,11092,441],{"class":82},[76,11094,1150],{"class":192},[76,11096,1408],{"class":82},[76,11098,8807],{"class":86},[76,11100,11101,11103,11105,11107,11109,11111,11113,11115,11117,11120,11122],{"class":78,"line":2542},[76,11102,6496],{"class":86},[76,11104,1132],{"class":82},[76,11106,11082],{"class":192},[76,11108,1408],{"class":82},[76,11110,1622],{"class":86},[76,11112,90],{"class":82},[76,11114,517],{"class":86},[76,11116,441],{"class":82},[76,11118,11119],{"class":192},"\"hello world1\"",[76,11121,1408],{"class":82},[76,11123,8807],{"class":86},[76,11125,11126],{"class":78,"line":2556},[76,11127,2365],{"emptyLinePlaceholder":2364},[76,11129,11130,11132,11134,11137,11139,11141,11143,11145,11147,11150,11152],{"class":78,"line":2564},[76,11131,6496],{"class":86},[76,11133,1132],{"class":82},[76,11135,11136],{"class":192}," \"全局常量c_g_a地址为： \"",[76,11138,1408],{"class":82},[76,11140,1622],{"class":86},[76,11142,90],{"class":82},[76,11144,517],{"class":86},[76,11146,441],{"class":82},[76,11148,11149],{"class":86},"c_g_a ",[76,11151,1132],{"class":82},[76,11153,8807],{"class":86},[76,11155,11156,11158,11160,11163,11165,11167,11169,11171,11173,11176,11178],{"class":78,"line":2569},[76,11157,6496],{"class":86},[76,11159,1132],{"class":82},[76,11161,11162],{"class":192}," \"全局常量c_g_b地址为： \"",[76,11164,1408],{"class":82},[76,11166,1622],{"class":86},[76,11168,90],{"class":82},[76,11170,517],{"class":86},[76,11172,441],{"class":82},[76,11174,11175],{"class":86},"c_g_b ",[76,11177,1132],{"class":82},[76,11179,8807],{"class":86},[76,11181,11182],{"class":78,"line":2575},[76,11183,2365],{"emptyLinePlaceholder":2364},[76,11185,11186,11189,11191,11194,11196,11198],{"class":78,"line":2581},[76,11187,11188],{"class":82},"    const",[76,11190,2346],{"class":82},[76,11192,11193],{"class":86}," c_l_a ",[76,11195,133],{"class":82},[76,11197,2002],{"class":136},[76,11199,1254],{"class":86},[76,11201,11202,11204,11206,11209,11211,11213],{"class":78,"line":2586},[76,11203,11188],{"class":82},[76,11205,2346],{"class":82},[76,11207,11208],{"class":86}," c_l_b ",[76,11210,133],{"class":82},[76,11212,2002],{"class":136},[76,11214,1254],{"class":86},[76,11216,11217,11219,11221,11224,11226,11228,11230,11232,11234,11237,11239],{"class":78,"line":7915},[76,11218,6496],{"class":86},[76,11220,1132],{"class":82},[76,11222,11223],{"class":192}," \"局部常量c_l_a地址为： \"",[76,11225,1408],{"class":82},[76,11227,1622],{"class":86},[76,11229,90],{"class":82},[76,11231,517],{"class":86},[76,11233,441],{"class":82},[76,11235,11236],{"class":86},"c_l_a ",[76,11238,1132],{"class":82},[76,11240,8807],{"class":86},[76,11242,11243,11245,11247,11250,11252,11254,11256,11258,11260,11263,11265],{"class":78,"line":7939},[76,11244,6496],{"class":86},[76,11246,1132],{"class":82},[76,11248,11249],{"class":192}," \"局部常量c_l_b地址为： \"",[76,11251,1408],{"class":82},[76,11253,1622],{"class":86},[76,11255,90],{"class":82},[76,11257,517],{"class":86},[76,11259,441],{"class":82},[76,11261,11262],{"class":86},"c_l_b ",[76,11264,1132],{"class":82},[76,11266,8807],{"class":86},[76,11268,11269],{"class":78,"line":7944},[76,11270,2365],{"emptyLinePlaceholder":2364},[76,11272,11273,11275,11277,11279],{"class":78,"line":7950},[76,11274,2267],{"class":1927},[76,11276,87],{"class":86},[76,11278,2272],{"class":192},[76,11280,2684],{"class":86},[76,11282,11283],{"class":78,"line":7977},[76,11284,2365],{"emptyLinePlaceholder":2364},[76,11286,11287,11289,11291],{"class":78,"line":7982},[76,11288,4055],{"class":82},[76,11290,4058],{"class":136},[76,11292,1254],{"class":86},[76,11294,11295],{"class":78,"line":7988},[76,11296,1529],{"class":86},[21,11298,11299],{},"总结：",[1095,11301,11302,11305,11308,11311],{},[32,11303,11304],{},"c++中程序运行前分为全局区和代码区",[32,11306,11307],{},"代码区特点是共享和只读",[32,11309,11310],{},"全局区中存放全局变量、静态变量、常量",[32,11312,11313],{},"常量区中存放const修饰的全局常量和字符串常量",[46,11315,11317],{"id":11316},"_512程序运行后","5.1.2程序运行后",[29,11319,11320],{},[32,11321,11322],{},"栈区：",[1095,11324,11325,11332],{},[32,11326,11327,11328,11331],{},"由编译器自动分配释放, 存放",[237,11329,11330],{},"函数的参数值,局部变量","等",[32,11333,11334,11335,11338],{},"注意事项：",[237,11336,11337],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[66,11340,11342],{"className":68,"code":11341,"language":70,"meta":71,"style":71},"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",[73,11343,11344,11355,11359,11374,11386,11390,11394,11402,11407,11422,11440,11457,11467,11475],{"__ignoreMap":71},[76,11345,11346,11348,11350,11353],{"class":78,"line":79},[76,11347,90],{"class":82},[76,11349,6485],{"class":82},[76,11351,11352],{"class":1927}," func",[76,11354,1940],{"class":86},[76,11356,11357],{"class":78,"line":96},[76,11358,1510],{"class":86},[76,11360,11361,11363,11365,11367,11369,11371],{"class":78,"line":1143},[76,11362,1949],{"class":82},[76,11364,10836],{"class":86},[76,11366,133],{"class":82},[76,11368,2002],{"class":136},[76,11370,143],{"class":86},[76,11372,11373],{"class":146}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[76,11375,11376,11378,11380,11383],{"class":78,"line":1158},[76,11377,4055],{"class":82},[76,11379,10551],{"class":82},[76,11381,11382],{"class":86},"a;",[76,11384,11385],{"class":146}," \u002F\u002F放回局部变量的地址\n",[76,11387,11388],{"class":78,"line":1164},[76,11389,1529],{"class":86},[76,11391,11392],{"class":78,"line":1178},[76,11393,2365],{"emptyLinePlaceholder":2364},[76,11395,11396,11398,11400],{"class":78,"line":1184},[76,11397,90],{"class":82},[76,11399,1937],{"class":1927},[76,11401,10820],{"class":86},[76,11403,11404],{"class":78,"line":1275},[76,11405,11406],{"class":146},"    \u002F\u002F接受func的返回值\n",[76,11408,11409,11411,11413,11416,11418,11420],{"class":78,"line":1281},[76,11410,1949],{"class":82},[76,11412,6485],{"class":82},[76,11414,11415],{"class":86},"p ",[76,11417,133],{"class":82},[76,11419,11352],{"class":1927},[76,11421,5603],{"class":86},[76,11423,11424,11426,11428,11430,11432,11434,11437],{"class":78,"line":1293},[76,11425,6496],{"class":86},[76,11427,1132],{"class":82},[76,11429,6485],{"class":82},[76,11431,11415],{"class":86},[76,11433,1132],{"class":82},[76,11435,11436],{"class":86}," endl;",[76,11438,11439],{"class":146}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[76,11441,11442,11444,11446,11448,11450,11452,11454],{"class":78,"line":1576},[76,11443,6496],{"class":86},[76,11445,1132],{"class":82},[76,11447,6485],{"class":82},[76,11449,11415],{"class":86},[76,11451,1132],{"class":82},[76,11453,11436],{"class":86},[76,11455,11456],{"class":146}," \u002F\u002F第二次这个数据不再保留\n",[76,11458,11459,11461,11463,11465],{"class":78,"line":1581},[76,11460,2267],{"class":1927},[76,11462,87],{"class":86},[76,11464,2272],{"class":192},[76,11466,2684],{"class":86},[76,11468,11469,11471,11473],{"class":78,"line":1587},[76,11470,4055],{"class":82},[76,11472,4058],{"class":136},[76,11474,1254],{"class":86},[76,11476,11477],{"class":78,"line":1592},[76,11478,1529],{"class":86},[21,11480,11481],{},"输出结果：",[21,11483,11484],{},[1426,11485],{"alt":11486,"src":11487},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[21,11489,11490],{},"总结：不要返回局部变量的地址",[29,11492,11493],{"start":96},[32,11494,11495],{},"堆区",[1095,11497,11498,11501],{},[32,11499,11500],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[32,11502,11503],{},"在c++中主要利用new在堆区开辟内存",[66,11505,11507],{"className":68,"code":11506,"language":70,"meta":71,"style":71},"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",[73,11508,11509,11524,11528,11533,11554,11561,11565,11573,11577,11582,11596,11608],{"__ignoreMap":71},[76,11510,11511,11513,11516,11519,11521],{"class":78,"line":79},[76,11512,90],{"class":82},[76,11514,11515],{"class":82},"  *",[76,11517,11518],{"class":1927},"func",[76,11520,2392],{"class":86},[76,11522,11523],{"class":146},"  \u002F\u002F函数返回指针\n",[76,11525,11526],{"class":78,"line":96},[76,11527,1510],{"class":86},[76,11529,11530],{"class":78,"line":1143},[76,11531,11532],{"class":146},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[76,11534,11535,11537,11539,11541,11543,11546,11548,11550,11552],{"class":78,"line":1158},[76,11536,4112],{"class":82},[76,11538,6485],{"class":82},[76,11540,21],{"class":86},[76,11542,133],{"class":82},[76,11544,11545],{"class":82}," new",[76,11547,2346],{"class":82},[76,11549,87],{"class":86},[76,11551,534],{"class":136},[76,11553,2684],{"class":86},[76,11555,11556,11558],{"class":78,"line":1164},[76,11557,4346],{"class":82},[76,11559,11560],{"class":86}," p;\n",[76,11562,11563],{"class":78,"line":1178},[76,11564,1529],{"class":86},[76,11566,11567,11569,11571],{"class":78,"line":1184},[76,11568,90],{"class":82},[76,11570,1937],{"class":1927},[76,11572,1940],{"class":86},[76,11574,11575],{"class":78,"line":1275},[76,11576,1510],{"class":86},[76,11578,11579],{"class":78,"line":1281},[76,11580,11581],{"class":146},"    \u002F\u002F在堆区开辟数据\n",[76,11583,11584,11586,11588,11590,11592,11594],{"class":78,"line":1293},[76,11585,1949],{"class":82},[76,11587,6485],{"class":82},[76,11589,21],{"class":86},[76,11591,133],{"class":82},[76,11593,11518],{"class":1927},[76,11595,5603],{"class":86},[76,11597,11598,11600,11602,11604,11606],{"class":78,"line":1576},[76,11599,1515],{"class":86},[76,11601,6386],{"class":82},[76,11603,21],{"class":86},[76,11605,1132],{"class":82},[76,11607,1155],{"class":86},[76,11609,11610],{"class":78,"line":1581},[76,11611,1529],{"class":86},[21,11613,11614],{},"图片展示：",[21,11616,11617],{},[1426,11618],{"alt":11486,"src":11619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[21,11621,11622],{},"堆区内存由程序员管生死！！！",[29,11624,11625],{"start":1143},[32,11626,11627],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[21,11629,11630],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[21,11632,11633,11634],{},"​语法：",[73,11635,11636],{}," new 数据类型",[21,11638,11639],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[66,11641,11643],{"className":68,"code":11642,"language":70,"meta":71,"style":71},"\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",[73,11644,11645,11650,11660,11664,11669,11674,11696,11700,11708,11712,11726,11738,11750,11762,11767,11772,11783,11787,11792,11800,11804,11809,11831,11857,11861,11879,11883,11909,11913,11925,11929,11934,11939,11947,11951,11955,11963,11967,11973,11979],{"__ignoreMap":71},[76,11646,11647],{"class":78,"line":79},[76,11648,11649],{"class":146},"\u002F\u002F1.new的基本语法\n",[76,11651,11652,11654,11656,11658],{"class":78,"line":96},[76,11653,90],{"class":82},[76,11655,6485],{"class":82},[76,11657,11518],{"class":1927},[76,11659,1940],{"class":86},[76,11661,11662],{"class":78,"line":1143},[76,11663,1510],{"class":86},[76,11665,11666],{"class":78,"line":1158},[76,11667,11668],{"class":146},"    \u002F\u002F在堆区创建整型数据\n",[76,11670,11671],{"class":78,"line":1164},[76,11672,11673],{"class":146},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[76,11675,11676,11678,11680,11682,11685,11687,11689,11691,11693],{"class":78,"line":1178},[76,11677,1949],{"class":82},[76,11679,6485],{"class":82},[76,11681,21],{"class":86},[76,11683,11684],{"class":82},"=new",[76,11686,2346],{"class":82},[76,11688,87],{"class":86},[76,11690,534],{"class":136},[76,11692,5933],{"class":86},[76,11694,11695],{"class":146},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[76,11697,11698],{"class":78,"line":1184},[76,11699,1529],{"class":86},[76,11701,11702,11704,11706],{"class":78,"line":1275},[76,11703,5331],{"class":82},[76,11705,5555],{"class":1927},[76,11707,1940],{"class":86},[76,11709,11710],{"class":78,"line":1281},[76,11711,1510],{"class":86},[76,11713,11714,11716,11718,11720,11722,11724],{"class":78,"line":1293},[76,11715,1949],{"class":82},[76,11717,6485],{"class":82},[76,11719,21],{"class":86},[76,11721,133],{"class":82},[76,11723,11518],{"class":1927},[76,11725,5603],{"class":86},[76,11727,11728,11730,11732,11734,11736],{"class":78,"line":1576},[76,11729,1515],{"class":86},[76,11731,6386],{"class":82},[76,11733,21],{"class":86},[76,11735,1132],{"class":82},[76,11737,1155],{"class":86},[76,11739,11740,11742,11744,11746,11748],{"class":78,"line":1581},[76,11741,1515],{"class":86},[76,11743,6386],{"class":82},[76,11745,21],{"class":86},[76,11747,1132],{"class":82},[76,11749,1155],{"class":86},[76,11751,11752,11754,11756,11758,11760],{"class":78,"line":1587},[76,11753,1515],{"class":86},[76,11755,6386],{"class":82},[76,11757,21],{"class":86},[76,11759,1132],{"class":82},[76,11761,1155],{"class":86},[76,11763,11764],{"class":78,"line":1592},[76,11765,11766],{"class":146},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[76,11768,11769],{"class":78,"line":1606},[76,11770,11771],{"class":146},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[76,11773,11774,11777,11780],{"class":78,"line":1611},[76,11775,11776],{"class":82},"    delete",[76,11778,11779],{"class":86}," p;",[76,11781,11782],{"class":146},"\u002F\u002F删除这块地址\n",[76,11784,11785],{"class":78,"line":1617},[76,11786,1529],{"class":86},[76,11788,11789],{"class":78,"line":1638},[76,11790,11791],{"class":146},"\u002F\u002F2.在堆区利用new开辟数组\n",[76,11793,11794,11796,11798],{"class":78,"line":1643},[76,11795,5331],{"class":82},[76,11797,5624],{"class":1927},[76,11799,1940],{"class":86},[76,11801,11802],{"class":78,"line":1657},[76,11803,1510],{"class":86},[76,11805,11806],{"class":78,"line":1662},[76,11807,11808],{"class":146},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[76,11810,11811,11813,11815,11817,11819,11821,11823,11825,11828],{"class":78,"line":1691},[76,11812,1949],{"class":82},[76,11814,6485],{"class":82},[76,11816,3845],{"class":86},[76,11818,11684],{"class":82},[76,11820,2346],{"class":82},[76,11822,978],{"class":86},[76,11824,534],{"class":136},[76,11826,11827],{"class":86},"];",[76,11829,11830],{"class":146},"\u002F\u002F10代表数组有10个元素\n",[76,11832,11833,11835,11837,11839,11841,11843,11845,11847,11849,11851,11853,11855],{"class":78,"line":1696},[76,11834,3166],{"class":82},[76,11836,1622],{"class":86},[76,11838,90],{"class":82},[76,11840,2997],{"class":86},[76,11842,133],{"class":82},[76,11844,279],{"class":136},[76,11846,3004],{"class":86},[76,11848,998],{"class":82},[76,11850,534],{"class":136},[76,11852,3004],{"class":86},[76,11854,2256],{"class":82},[76,11856,93],{"class":86},[76,11858,11859],{"class":78,"line":1713},[76,11860,1994],{"class":86},[76,11862,11863,11866,11868,11870,11872,11874,11876],{"class":78,"line":1718},[76,11864,11865],{"class":86},"        arr[i]",[76,11867,133],{"class":82},[76,11869,529],{"class":86},[76,11871,569],{"class":82},[76,11873,399],{"class":136},[76,11875,143],{"class":86},[76,11877,11878],{"class":146},"\u002F\u002F给10个元素赋值100～109\n",[76,11880,11881],{"class":78,"line":1723},[76,11882,2151],{"class":86},[76,11884,11885,11887,11889,11891,11893,11895,11897,11899,11901,11903,11905,11907],{"class":78,"line":1728},[76,11886,3166],{"class":82},[76,11888,1622],{"class":86},[76,11890,90],{"class":82},[76,11892,2997],{"class":86},[76,11894,133],{"class":82},[76,11896,279],{"class":136},[76,11898,3004],{"class":86},[76,11900,998],{"class":82},[76,11902,534],{"class":136},[76,11904,3004],{"class":86},[76,11906,2256],{"class":82},[76,11908,93],{"class":86},[76,11910,11911],{"class":78,"line":1742},[76,11912,1994],{"class":86},[76,11914,11915,11917,11919,11921,11923],{"class":78,"line":1747},[76,11916,3416],{"class":86},[76,11918,1132],{"class":82},[76,11920,4319],{"class":86},[76,11922,1132],{"class":82},[76,11924,1155],{"class":86},[76,11926,11927],{"class":78,"line":2542},[76,11928,2151],{"class":86},[76,11930,11931],{"class":78,"line":2556},[76,11932,11933],{"class":146},"    \u002F\u002F释放堆区数组\n",[76,11935,11936],{"class":78,"line":2564},[76,11937,11938],{"class":146},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[76,11940,11941,11944],{"class":78,"line":2569},[76,11942,11943],{"class":82},"    delete[]",[76,11945,11946],{"class":86}," arr;\n",[76,11948,11949],{"class":78,"line":2575},[76,11950,1529],{"class":86},[76,11952,11953],{"class":78,"line":2581},[76,11954,2365],{"emptyLinePlaceholder":2364},[76,11956,11957,11959,11961],{"class":78,"line":2586},[76,11958,90],{"class":82},[76,11960,1937],{"class":1927},[76,11962,1940],{"class":86},[76,11964,11965],{"class":78,"line":7915},[76,11966,1510],{"class":86},[76,11968,11969,11971],{"class":78,"line":7939},[76,11970,5600],{"class":1927},[76,11972,5603],{"class":86},[76,11974,11975,11977],{"class":78,"line":7944},[76,11976,5669],{"class":1927},[76,11978,5603],{"class":86},[76,11980,11981],{"class":78,"line":7950},[76,11982,1529],{"class":86},[5092,11984,11985],{},"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":71,"searchDepth":96,"depth":96,"links":11987},[11988],{"id":10656,"depth":96,"text":10657,"children":11989},[11990,11991],{"id":10688,"depth":1143,"text":10689},{"id":11316,"depth":1143,"text":11317},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10648,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":11998,"title":11999,"body":12000,"description":71,"extension":5123,"meta":13481,"navigation":2364,"path":13482,"seo":13483,"stem":13484,"__hash__":13485},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":9,"value":12001,"toc":13473},[12002,12005,12009,12012,12015,12184,12188,12193,12210,12215,12367,12371,12374,12377,12771,12775,12778,12783,12786,13098,13102,13108,13268,13270,13278,13282,13285,13292,13470],[12,12003,11999],{"id":12004},"_6引用",[16,12006,12008],{"id":12007},"_61引用基本用法","6.1引用基本用法",[21,12010,12011],{},"引用的本质：给变量起别名",[21,12013,12014],{},"语法：数据类型 &别名=原名",[66,12016,12018],{"className":68,"code":12017,"language":70,"meta":71,"style":71},"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",[73,12019,12020,12028,12032,12044,12056,12060,12079,12098,12102,12113,12117,12136,12154,12158,12168,12172,12180],{"__ignoreMap":71},[76,12021,12022,12024,12026],{"class":78,"line":79},[76,12023,90],{"class":82},[76,12025,1937],{"class":1927},[76,12027,10820],{"class":86},[76,12029,12030],{"class":78,"line":96},[76,12031,2365],{"emptyLinePlaceholder":2364},[76,12033,12034,12036,12038,12040,12042],{"class":78,"line":1143},[76,12035,1949],{"class":82},[76,12037,10836],{"class":86},[76,12039,133],{"class":82},[76,12041,2002],{"class":136},[76,12043,1254],{"class":86},[76,12045,12046,12048,12050,12052,12054],{"class":78,"line":1158},[76,12047,1949],{"class":82},[76,12049,10551],{"class":82},[76,12051,10912],{"class":86},[76,12053,133],{"class":82},[76,12055,1396],{"class":86},[76,12057,12058],{"class":78,"line":1164},[76,12059,2365],{"emptyLinePlaceholder":2364},[76,12061,12062,12064,12066,12069,12071,12073,12075,12077],{"class":78,"line":1178},[76,12063,6496],{"class":86},[76,12065,1132],{"class":82},[76,12067,12068],{"class":192}," \"a = \"",[76,12070,1408],{"class":82},[76,12072,10836],{"class":86},[76,12074,1132],{"class":82},[76,12076,11436],{"class":86},[76,12078,7235],{"class":146},[76,12080,12081,12083,12085,12088,12090,12092,12094,12096],{"class":78,"line":1184},[76,12082,6496],{"class":86},[76,12084,1132],{"class":82},[76,12086,12087],{"class":192}," \"b = \"",[76,12089,1408],{"class":82},[76,12091,10849],{"class":86},[76,12093,1132],{"class":82},[76,12095,11436],{"class":86},[76,12097,7235],{"class":146},[76,12099,12100],{"class":78,"line":1275},[76,12101,2365],{"emptyLinePlaceholder":2364},[76,12103,12104,12107,12109,12111],{"class":78,"line":1281},[76,12105,12106],{"class":86},"    b ",[76,12108,133],{"class":82},[76,12110,5721],{"class":136},[76,12112,1254],{"class":86},[76,12114,12115],{"class":78,"line":1293},[76,12116,2365],{"emptyLinePlaceholder":2364},[76,12118,12119,12121,12123,12125,12127,12129,12131,12133],{"class":78,"line":1576},[76,12120,6496],{"class":86},[76,12122,1132],{"class":82},[76,12124,12068],{"class":192},[76,12126,1408],{"class":82},[76,12128,10836],{"class":86},[76,12130,1132],{"class":82},[76,12132,11436],{"class":86},[76,12134,12135],{"class":146},"\u002F\u002F100\n",[76,12137,12138,12140,12142,12144,12146,12148,12150,12152],{"class":78,"line":1581},[76,12139,6496],{"class":86},[76,12141,1132],{"class":82},[76,12143,12087],{"class":192},[76,12145,1408],{"class":82},[76,12147,10849],{"class":86},[76,12149,1132],{"class":82},[76,12151,11436],{"class":86},[76,12153,12135],{"class":146},[76,12155,12156],{"class":78,"line":1587},[76,12157,2365],{"emptyLinePlaceholder":2364},[76,12159,12160,12162,12164,12166],{"class":78,"line":1592},[76,12161,2267],{"class":1927},[76,12163,87],{"class":86},[76,12165,2272],{"class":192},[76,12167,2684],{"class":86},[76,12169,12170],{"class":78,"line":1606},[76,12171,2365],{"emptyLinePlaceholder":2364},[76,12173,12174,12176,12178],{"class":78,"line":1611},[76,12175,4055],{"class":82},[76,12177,4058],{"class":136},[76,12179,1254],{"class":86},[76,12181,12182],{"class":78,"line":1617},[76,12183,1529],{"class":86},[16,12185,12187],{"id":12186},"_62引用的注意事项","6.2引用的注意事项",[29,12189,12190],{},[32,12191,12192],{},"引用必须要初始化",[66,12194,12196],{"className":68,"code":12195,"language":70,"meta":71,"style":71},"int &b;\u002F\u002F非常错误！\n",[73,12197,12198],{"__ignoreMap":71},[76,12199,12200,12202,12204,12207],{"class":78,"line":79},[76,12201,90],{"class":82},[76,12203,10551],{"class":82},[76,12205,12206],{"class":86},"b;",[76,12208,12209],{"class":146},"\u002F\u002F非常错误！\n",[29,12211,12212],{"start":96},[32,12213,12214],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[66,12216,12218],{"className":68,"code":12217,"language":70,"meta":71,"style":71},"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",[73,12219,12220,12228,12240,12252,12260,12276,12289,12307,12325,12345,12355,12363],{"__ignoreMap":71},[76,12221,12222,12224,12226],{"class":78,"line":79},[76,12223,90],{"class":82},[76,12225,1937],{"class":1927},[76,12227,10820],{"class":86},[76,12229,12230,12232,12234,12236,12238],{"class":78,"line":96},[76,12231,1949],{"class":82},[76,12233,10836],{"class":86},[76,12235,133],{"class":82},[76,12237,2002],{"class":136},[76,12239,1254],{"class":86},[76,12241,12242,12244,12246,12248,12250],{"class":78,"line":1143},[76,12243,1949],{"class":82},[76,12245,10849],{"class":86},[76,12247,133],{"class":82},[76,12249,8917],{"class":136},[76,12251,1254],{"class":86},[76,12253,12254,12257],{"class":78,"line":1158},[76,12255,12256],{"class":146},"    \u002F\u002Fint &c;",[76,12258,12259],{"class":146}," \u002F\u002F错误，引用必须初始化\n",[76,12261,12262,12264,12266,12268,12270,12273],{"class":78,"line":1164},[76,12263,1949],{"class":82},[76,12265,10551],{"class":82},[76,12267,2911],{"class":86},[76,12269,133],{"class":82},[76,12271,12272],{"class":86}," a;",[76,12274,12275],{"class":146}," \u002F\u002F一旦初始化后，就不可以更改\n",[76,12277,12278,12281,12283,12286],{"class":78,"line":1178},[76,12279,12280],{"class":86},"    c ",[76,12282,133],{"class":82},[76,12284,12285],{"class":86}," b;",[76,12287,12288],{"class":146}," \u002F\u002F这是赋值操作，不是更改引用\n",[76,12290,12291,12293,12295,12297,12299,12301,12303,12305],{"class":78,"line":1184},[76,12292,6496],{"class":86},[76,12294,1132],{"class":82},[76,12296,12068],{"class":192},[76,12298,1408],{"class":82},[76,12300,10836],{"class":86},[76,12302,1132],{"class":82},[76,12304,11436],{"class":86},[76,12306,7220],{"class":146},[76,12308,12309,12311,12313,12315,12317,12319,12321,12323],{"class":78,"line":1275},[76,12310,6496],{"class":86},[76,12312,1132],{"class":82},[76,12314,12087],{"class":192},[76,12316,1408],{"class":82},[76,12318,10849],{"class":86},[76,12320,1132],{"class":82},[76,12322,11436],{"class":86},[76,12324,7220],{"class":146},[76,12326,12327,12329,12331,12334,12336,12339,12341,12343],{"class":78,"line":1281},[76,12328,6496],{"class":86},[76,12330,1132],{"class":82},[76,12332,12333],{"class":192}," \"c = \"",[76,12335,1408],{"class":82},[76,12337,12338],{"class":86}," c ",[76,12340,1132],{"class":82},[76,12342,11436],{"class":86},[76,12344,7220],{"class":146},[76,12346,12347,12349,12351,12353],{"class":78,"line":1293},[76,12348,2267],{"class":1927},[76,12350,87],{"class":86},[76,12352,2272],{"class":192},[76,12354,2684],{"class":86},[76,12356,12357,12359,12361],{"class":78,"line":1576},[76,12358,4055],{"class":82},[76,12360,4058],{"class":136},[76,12362,1254],{"class":86},[76,12364,12365],{"class":78,"line":1581},[76,12366,1529],{"class":86},[16,12368,12370],{"id":12369},"_63引用做函数参数","6.3引用做函数参数",[21,12372,12373],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[21,12375,12376],{},"优点：可以简化指针修改实参",[66,12378,12380],{"className":68,"code":12379,"language":70,"meta":71,"style":71},"\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",[73,12381,12382,12387,12410,12421,12431,12440,12444,12448,12453,12475,12487,12499,12509,12513,12517,12522,12544,12554,12562,12570,12574,12578,12586,12590,12602,12614,12618,12629,12655,12659,12679,12703,12707,12717,12741,12745,12755,12759,12767],{"__ignoreMap":71},[76,12383,12384],{"class":78,"line":79},[76,12385,12386],{"class":146},"\u002F\u002F1. 值传递\n",[76,12388,12389,12391,12394,12396,12398,12400,12403,12405,12407],{"class":78,"line":96},[76,12390,5331],{"class":82},[76,12392,12393],{"class":1927}," mySwap01",[76,12395,87],{"class":86},[76,12397,90],{"class":82},[76,12399,1362],{"class":5183},[76,12401,12402],{"class":86},", ",[76,12404,90],{"class":82},[76,12406,2798],{"class":5183},[76,12408,12409],{"class":86},") {\n",[76,12411,12412,12414,12417,12419],{"class":78,"line":1143},[76,12413,1949],{"class":82},[76,12415,12416],{"class":86}," temp ",[76,12418,133],{"class":82},[76,12420,1396],{"class":86},[76,12422,12423,12426,12428],{"class":78,"line":1158},[76,12424,12425],{"class":86},"    a ",[76,12427,133],{"class":82},[76,12429,12430],{"class":86}," b;\n",[76,12432,12433,12435,12437],{"class":78,"line":1164},[76,12434,12106],{"class":86},[76,12436,133],{"class":82},[76,12438,12439],{"class":86}," temp;\n",[76,12441,12442],{"class":78,"line":1178},[76,12443,1529],{"class":86},[76,12445,12446],{"class":78,"line":1184},[76,12447,2365],{"emptyLinePlaceholder":2364},[76,12449,12450],{"class":78,"line":1275},[76,12451,12452],{"class":146},"\u002F\u002F2. 地址传递\n",[76,12454,12455,12457,12460,12462,12465,12467,12469,12471,12473],{"class":78,"line":1281},[76,12456,5331],{"class":82},[76,12458,12459],{"class":1927}," mySwap02",[76,12461,87],{"class":86},[76,12463,12464],{"class":82},"int*",[76,12466,1362],{"class":5183},[76,12468,12402],{"class":86},[76,12470,12464],{"class":82},[76,12472,2798],{"class":5183},[76,12474,12409],{"class":86},[76,12476,12477,12479,12481,12483,12485],{"class":78,"line":1293},[76,12478,1949],{"class":82},[76,12480,12416],{"class":86},[76,12482,133],{"class":82},[76,12484,6485],{"class":82},[76,12486,6164],{"class":86},[76,12488,12489,12491,12493,12495,12497],{"class":78,"line":1576},[76,12490,6370],{"class":82},[76,12492,10886],{"class":86},[76,12494,133],{"class":82},[76,12496,6485],{"class":82},[76,12498,6036],{"class":86},[76,12500,12501,12503,12505,12507],{"class":78,"line":1581},[76,12502,6370],{"class":82},[76,12504,10912],{"class":86},[76,12506,133],{"class":82},[76,12508,12439],{"class":86},[76,12510,12511],{"class":78,"line":1587},[76,12512,1529],{"class":86},[76,12514,12515],{"class":78,"line":1592},[76,12516,2365],{"emptyLinePlaceholder":2364},[76,12518,12519],{"class":78,"line":1606},[76,12520,12521],{"class":146},"\u002F\u002F3. 引用传递\n",[76,12523,12524,12526,12529,12531,12534,12536,12538,12540,12542],{"class":78,"line":1611},[76,12525,5331],{"class":82},[76,12527,12528],{"class":1927}," mySwap03",[76,12530,87],{"class":86},[76,12532,12533],{"class":82},"int&",[76,12535,1362],{"class":5183},[76,12537,12402],{"class":86},[76,12539,12533],{"class":82},[76,12541,2798],{"class":5183},[76,12543,12409],{"class":86},[76,12545,12546,12548,12550,12552],{"class":78,"line":1617},[76,12547,1949],{"class":82},[76,12549,12416],{"class":86},[76,12551,133],{"class":82},[76,12553,1396],{"class":86},[76,12555,12556,12558,12560],{"class":78,"line":1638},[76,12557,12425],{"class":86},[76,12559,133],{"class":82},[76,12561,12430],{"class":86},[76,12563,12564,12566,12568],{"class":78,"line":1643},[76,12565,12106],{"class":86},[76,12567,133],{"class":82},[76,12569,12439],{"class":86},[76,12571,12572],{"class":78,"line":1657},[76,12573,1529],{"class":86},[76,12575,12576],{"class":78,"line":1662},[76,12577,2365],{"emptyLinePlaceholder":2364},[76,12579,12580,12582,12584],{"class":78,"line":1691},[76,12581,90],{"class":82},[76,12583,1937],{"class":1927},[76,12585,10820],{"class":86},[76,12587,12588],{"class":78,"line":1696},[76,12589,2365],{"emptyLinePlaceholder":2364},[76,12591,12592,12594,12596,12598,12600],{"class":78,"line":1713},[76,12593,1949],{"class":82},[76,12595,10836],{"class":86},[76,12597,133],{"class":82},[76,12599,2002],{"class":136},[76,12601,1254],{"class":86},[76,12603,12604,12606,12608,12610,12612],{"class":78,"line":1718},[76,12605,1949],{"class":82},[76,12607,10849],{"class":86},[76,12609,133],{"class":82},[76,12611,8917],{"class":136},[76,12613,1254],{"class":86},[76,12615,12616],{"class":78,"line":1723},[76,12617,2365],{"emptyLinePlaceholder":2364},[76,12619,12620,12623,12626],{"class":78,"line":1728},[76,12621,12622],{"class":1927},"    mySwap01",[76,12624,12625],{"class":86},"(a, b);",[76,12627,12628],{"class":146},"\u002F\u002F值传递，形参不会修饰实参\n",[76,12630,12631,12633,12635,12638,12640,12642,12644,12647,12649,12651,12653],{"class":78,"line":1742},[76,12632,6496],{"class":86},[76,12634,1132],{"class":82},[76,12636,12637],{"class":192}," \"a:\"",[76,12639,1408],{"class":82},[76,12641,10836],{"class":86},[76,12643,1132],{"class":82},[76,12645,12646],{"class":192}," \" b:\"",[76,12648,1408],{"class":82},[76,12650,10849],{"class":86},[76,12652,1132],{"class":82},[76,12654,8807],{"class":86},[76,12656,12657],{"class":78,"line":1747},[76,12658,2365],{"emptyLinePlaceholder":2364},[76,12660,12661,12664,12666,12668,12671,12673,12676],{"class":78,"line":2542},[76,12662,12663],{"class":1927},"    mySwap02",[76,12665,87],{"class":86},[76,12667,441],{"class":82},[76,12669,12670],{"class":86},"a, ",[76,12672,441],{"class":82},[76,12674,12675],{"class":86},"b);",[76,12677,12678],{"class":146},"\u002F\u002F地址传递，形参会修饰实参\n",[76,12680,12681,12683,12685,12687,12689,12691,12693,12695,12697,12699,12701],{"class":78,"line":2556},[76,12682,6496],{"class":86},[76,12684,1132],{"class":82},[76,12686,12637],{"class":192},[76,12688,1408],{"class":82},[76,12690,10836],{"class":86},[76,12692,1132],{"class":82},[76,12694,12646],{"class":192},[76,12696,1408],{"class":82},[76,12698,10849],{"class":86},[76,12700,1132],{"class":82},[76,12702,8807],{"class":86},[76,12704,12705],{"class":78,"line":2564},[76,12706,2365],{"emptyLinePlaceholder":2364},[76,12708,12709,12712,12714],{"class":78,"line":2569},[76,12710,12711],{"class":1927},"    mySwap03",[76,12713,12625],{"class":86},[76,12715,12716],{"class":146},"\u002F\u002F引用传递，形参会修饰实参\n",[76,12718,12719,12721,12723,12725,12727,12729,12731,12733,12735,12737,12739],{"class":78,"line":2575},[76,12720,6496],{"class":86},[76,12722,1132],{"class":82},[76,12724,12637],{"class":192},[76,12726,1408],{"class":82},[76,12728,10836],{"class":86},[76,12730,1132],{"class":82},[76,12732,12646],{"class":192},[76,12734,1408],{"class":82},[76,12736,10849],{"class":86},[76,12738,1132],{"class":82},[76,12740,8807],{"class":86},[76,12742,12743],{"class":78,"line":2581},[76,12744,2365],{"emptyLinePlaceholder":2364},[76,12746,12747,12749,12751,12753],{"class":78,"line":2586},[76,12748,2267],{"class":1927},[76,12750,87],{"class":86},[76,12752,2272],{"class":192},[76,12754,2684],{"class":86},[76,12756,12757],{"class":78,"line":7915},[76,12758,2365],{"emptyLinePlaceholder":2364},[76,12760,12761,12763,12765],{"class":78,"line":7939},[76,12762,4055],{"class":82},[76,12764,4058],{"class":136},[76,12766,1254],{"class":86},[76,12768,12769],{"class":78,"line":7944},[76,12770,1529],{"class":86},[16,12772,12774],{"id":12773},"_64引用做函数的返回值","6.4引用做函数的返回值",[21,12776,12777],{},"作用：引用是可以作为函数的返回值存在的",[21,12779,8992,12780],{},[237,12781,12782],{},"不要返回局部变量引用",[21,12784,12785],{},"用法：函数调用作为左值",[66,12787,12789],{"className":9908,"code":12788,"language":9910,"meta":71,"style":71},"\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",[73,12790,12791,12796,12804,12819,12825,12829,12833,12838,12846,12863,12869,12873,12877,12885,12889,12894,12908,12928,12947,12951,12956,12969,12989,13007,13011,13027,13031,13050,13068,13072,13082,13086,13094],{"__ignoreMap":71},[76,12792,12793],{"class":78,"line":79},[76,12794,12795],{"class":146},"\u002F\u002F返回局部变量引用\n",[76,12797,12798,12800,12802],{"class":78,"line":96},[76,12799,12533],{"class":82},[76,12801,5555],{"class":1927},[76,12803,10820],{"class":86},[76,12805,12806,12808,12810,12812,12814,12816],{"class":78,"line":1143},[76,12807,1949],{"class":82},[76,12809,10836],{"class":86},[76,12811,133],{"class":82},[76,12813,2002],{"class":136},[76,12815,143],{"class":86},[76,12817,12818],{"class":146}," \u002F\u002F局部变量\n",[76,12820,12821,12823],{"class":78,"line":1158},[76,12822,4055],{"class":82},[76,12824,1396],{"class":86},[76,12826,12827],{"class":78,"line":1164},[76,12828,1529],{"class":86},[76,12830,12831],{"class":78,"line":1178},[76,12832,2365],{"emptyLinePlaceholder":2364},[76,12834,12835],{"class":78,"line":1184},[76,12836,12837],{"class":146},"\u002F\u002F返回静态变量引用\n",[76,12839,12840,12842,12844],{"class":78,"line":1275},[76,12841,12533],{"class":82},[76,12843,5624],{"class":1927},[76,12845,10820],{"class":86},[76,12847,12848,12850,12852,12854,12856,12858,12860],{"class":78,"line":1281},[76,12849,10987],{"class":82},[76,12851,2346],{"class":82},[76,12853,10836],{"class":86},[76,12855,133],{"class":82},[76,12857,8917],{"class":136},[76,12859,143],{"class":86},[76,12861,12862],{"class":146},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[76,12864,12865,12867],{"class":78,"line":1293},[76,12866,4055],{"class":82},[76,12868,1396],{"class":86},[76,12870,12871],{"class":78,"line":1576},[76,12872,1529],{"class":86},[76,12874,12875],{"class":78,"line":1581},[76,12876,2365],{"emptyLinePlaceholder":2364},[76,12878,12879,12881,12883],{"class":78,"line":1587},[76,12880,90],{"class":82},[76,12882,1937],{"class":1927},[76,12884,10820],{"class":86},[76,12886,12887],{"class":78,"line":1592},[76,12888,2365],{"emptyLinePlaceholder":2364},[76,12890,12891],{"class":78,"line":1606},[76,12892,12893],{"class":146},"    \u002F\u002F不能返回局部变量的引用\n",[76,12895,12896,12899,12902,12904,12906],{"class":78,"line":1611},[76,12897,12898],{"class":82},"    int&",[76,12900,12901],{"class":86}," ref ",[76,12903,133],{"class":82},[76,12905,5555],{"class":1927},[76,12907,5603],{"class":86},[76,12909,12910,12912,12914,12917,12919,12921,12923,12925],{"class":78,"line":1617},[76,12911,6496],{"class":86},[76,12913,1132],{"class":82},[76,12915,12916],{"class":192}," \"ref = \"",[76,12918,1408],{"class":82},[76,12920,12901],{"class":86},[76,12922,1132],{"class":82},[76,12924,11436],{"class":86},[76,12926,12927],{"class":146},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[76,12929,12930,12932,12934,12936,12938,12940,12942,12944],{"class":78,"line":1638},[76,12931,6496],{"class":86},[76,12933,1132],{"class":82},[76,12935,12916],{"class":192},[76,12937,1408],{"class":82},[76,12939,12901],{"class":86},[76,12941,1132],{"class":82},[76,12943,11436],{"class":86},[76,12945,12946],{"class":146},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[76,12948,12949],{"class":78,"line":1643},[76,12950,2365],{"emptyLinePlaceholder":2364},[76,12952,12953],{"class":78,"line":1657},[76,12954,12955],{"class":146},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[76,12957,12958,12960,12963,12965,12967],{"class":78,"line":1662},[76,12959,12898],{"class":82},[76,12961,12962],{"class":86}," ref2 ",[76,12964,133],{"class":82},[76,12966,5624],{"class":1927},[76,12968,5603],{"class":86},[76,12970,12971,12973,12975,12978,12980,12982,12984,12986],{"class":78,"line":1691},[76,12972,6496],{"class":86},[76,12974,1132],{"class":82},[76,12976,12977],{"class":192}," \"ref2 = \"",[76,12979,1408],{"class":82},[76,12981,12962],{"class":86},[76,12983,1132],{"class":82},[76,12985,11436],{"class":86},[76,12987,12988],{"class":146}," \u002F\u002F20\n",[76,12990,12991,12993,12995,12997,12999,13001,13003,13005],{"class":78,"line":1696},[76,12992,6496],{"class":86},[76,12994,1132],{"class":82},[76,12996,12977],{"class":192},[76,12998,1408],{"class":82},[76,13000,12962],{"class":86},[76,13002,1132],{"class":82},[76,13004,11436],{"class":86},[76,13006,12988],{"class":146},[76,13008,13009],{"class":78,"line":1713},[76,13010,2365],{"emptyLinePlaceholder":2364},[76,13012,13013,13015,13018,13020,13022,13024],{"class":78,"line":1718},[76,13014,5669],{"class":1927},[76,13016,13017],{"class":86},"() ",[76,13019,133],{"class":82},[76,13021,2964],{"class":136},[76,13023,143],{"class":86},[76,13025,13026],{"class":146},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[76,13028,13029],{"class":78,"line":1723},[76,13030,2365],{"emptyLinePlaceholder":2364},[76,13032,13033,13035,13037,13039,13041,13043,13045,13047],{"class":78,"line":1728},[76,13034,6496],{"class":86},[76,13036,1132],{"class":82},[76,13038,12977],{"class":192},[76,13040,1408],{"class":82},[76,13042,12962],{"class":86},[76,13044,1132],{"class":82},[76,13046,11436],{"class":86},[76,13048,13049],{"class":146}," \u002F\u002F1000\n",[76,13051,13052,13054,13056,13058,13060,13062,13064,13066],{"class":78,"line":1742},[76,13053,6496],{"class":86},[76,13055,1132],{"class":82},[76,13057,12977],{"class":192},[76,13059,1408],{"class":82},[76,13061,12962],{"class":86},[76,13063,1132],{"class":82},[76,13065,11436],{"class":86},[76,13067,13049],{"class":146},[76,13069,13070],{"class":78,"line":1747},[76,13071,2365],{"emptyLinePlaceholder":2364},[76,13073,13074,13076,13078,13080],{"class":78,"line":2542},[76,13075,2267],{"class":1927},[76,13077,87],{"class":86},[76,13079,2272],{"class":192},[76,13081,2684],{"class":86},[76,13083,13084],{"class":78,"line":2556},[76,13085,2365],{"emptyLinePlaceholder":2364},[76,13087,13088,13090,13092],{"class":78,"line":2564},[76,13089,4055],{"class":82},[76,13091,4058],{"class":136},[76,13093,1254],{"class":86},[76,13095,13096],{"class":78,"line":2569},[76,13097,1529],{"class":86},[16,13099,13101],{"id":13100},"_65引用的本质","6.5引用的本质",[21,13103,13104,13105],{},"本质：",[237,13106,13107],{},"引用的本质在c++内部实现是一个指针常量.",[66,13109,13111],{"className":68,"code":13110,"language":70,"meta":71,"style":71},"\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",[73,13112,13113,13118,13134,13148,13152,13161,13173,13178,13183,13194,13207,13211,13227,13244,13248,13256,13264],{"__ignoreMap":71},[76,13114,13115],{"class":78,"line":79},[76,13116,13117],{"class":146},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[76,13119,13120,13122,13124,13126,13128,13131],{"class":78,"line":96},[76,13121,5331],{"class":82},[76,13123,11352],{"class":1927},[76,13125,87],{"class":86},[76,13127,12533],{"class":82},[76,13129,13130],{"class":5183}," ref",[76,13132,13133],{"class":86},"){\n",[76,13135,13136,13139,13141,13143,13145],{"class":78,"line":1143},[76,13137,13138],{"class":86},"    ref ",[76,13140,133],{"class":82},[76,13142,5721],{"class":136},[76,13144,143],{"class":86},[76,13146,13147],{"class":146}," \u002F\u002F ref是引用，转换为*ref = 100\n",[76,13149,13150],{"class":78,"line":1158},[76,13151,1529],{"class":86},[76,13153,13154,13156,13158],{"class":78,"line":1164},[76,13155,90],{"class":82},[76,13157,1937],{"class":1927},[76,13159,13160],{"class":86},"(){\n",[76,13162,13163,13165,13167,13169,13171],{"class":78,"line":1178},[76,13164,1949],{"class":82},[76,13166,10836],{"class":86},[76,13168,133],{"class":82},[76,13170,2002],{"class":136},[76,13172,1254],{"class":86},[76,13174,13175],{"class":78,"line":1184},[76,13176,13177],{"class":86},"    \n",[76,13179,13180],{"class":78,"line":1275},[76,13181,13182],{"class":146},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[76,13184,13185,13187,13189,13191],{"class":78,"line":1281},[76,13186,12898],{"class":82},[76,13188,12901],{"class":86},[76,13190,133],{"class":82},[76,13192,13193],{"class":86}," a; \n",[76,13195,13196,13198,13200,13202,13204],{"class":78,"line":1293},[76,13197,13138],{"class":86},[76,13199,133],{"class":82},[76,13201,8917],{"class":136},[76,13203,143],{"class":86},[76,13205,13206],{"class":146}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[76,13208,13209],{"class":78,"line":1576},[76,13210,13177],{"class":86},[76,13212,13213,13215,13217,13219,13221,13223,13225],{"class":78,"line":1581},[76,13214,6496],{"class":86},[76,13216,1132],{"class":82},[76,13218,12637],{"class":192},[76,13220,1408],{"class":82},[76,13222,10836],{"class":86},[76,13224,1132],{"class":82},[76,13226,8807],{"class":86},[76,13228,13229,13231,13233,13236,13238,13240,13242],{"class":78,"line":1587},[76,13230,6496],{"class":86},[76,13232,1132],{"class":82},[76,13234,13235],{"class":192}," \"ref:\"",[76,13237,1408],{"class":82},[76,13239,12901],{"class":86},[76,13241,1132],{"class":82},[76,13243,8807],{"class":86},[76,13245,13246],{"class":78,"line":1592},[76,13247,13177],{"class":86},[76,13249,13250,13253],{"class":78,"line":1606},[76,13251,13252],{"class":1927},"    func",[76,13254,13255],{"class":86},"(a);\n",[76,13257,13258,13260,13262],{"class":78,"line":1611},[76,13259,4055],{"class":82},[76,13261,4058],{"class":136},[76,13263,1254],{"class":86},[76,13265,13266],{"class":78,"line":1617},[76,13267,1529],{"class":86},[21,13269,11299],{},[29,13271,13272,13275],{},[32,13273,13274],{},"引用的本质，就是一个指针常量",[32,13276,13277],{},"引用一旦初始化，就不可以发生改变",[16,13279,13281],{"id":13280},"_66常量引用","6.6常量引用",[21,13283,13284],{},"作用：常量引用主要用来修饰形参",[21,13286,13287,13288,13291],{},"在函数形参列表中，可以加",[237,13289,13290],{},"const修饰形参","，防止形参改变实参",[66,13293,13295],{"className":68,"code":13294,"language":70,"meta":71,"style":71},"\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",[73,13296,13297,13302,13307,13326,13331,13344,13348,13352,13360,13364,13369,13374,13388,13392,13400,13412,13416,13421,13433,13440,13444,13454,13458,13466],{"__ignoreMap":71},[76,13298,13299],{"class":78,"line":79},[76,13300,13301],{"class":146},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[76,13303,13304],{"class":78,"line":96},[76,13305,13306],{"class":146},"\u002F\u002F加上const就不能修改实参的\n",[76,13308,13309,13311,13314,13316,13318,13321,13324],{"class":78,"line":1143},[76,13310,5331],{"class":82},[76,13312,13313],{"class":1927}," showValue",[76,13315,87],{"class":86},[76,13317,6759],{"class":82},[76,13319,13320],{"class":82}," int&",[76,13322,13323],{"class":5183}," v",[76,13325,12409],{"class":86},[76,13327,13328],{"class":78,"line":1158},[76,13329,13330],{"class":146},"    \u002F\u002Fv += 100;\n",[76,13332,13333,13335,13337,13340,13342],{"class":78,"line":1164},[76,13334,6496],{"class":86},[76,13336,1132],{"class":82},[76,13338,13339],{"class":86}," v ",[76,13341,1132],{"class":82},[76,13343,8807],{"class":86},[76,13345,13346],{"class":78,"line":1178},[76,13347,1529],{"class":86},[76,13349,13350],{"class":78,"line":1184},[76,13351,2365],{"emptyLinePlaceholder":2364},[76,13353,13354,13356,13358],{"class":78,"line":1275},[76,13355,90],{"class":82},[76,13357,1937],{"class":1927},[76,13359,10820],{"class":86},[76,13361,13362],{"class":78,"line":1281},[76,13363,2365],{"emptyLinePlaceholder":2364},[76,13365,13366],{"class":78,"line":1293},[76,13367,13368],{"class":146},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[76,13370,13371],{"class":78,"line":1576},[76,13372,13373],{"class":146},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[76,13375,13376,13378,13380,13382,13384,13386],{"class":78,"line":1581},[76,13377,11188],{"class":82},[76,13379,13320],{"class":82},[76,13381,12901],{"class":86},[76,13383,133],{"class":82},[76,13385,2002],{"class":136},[76,13387,1254],{"class":86},[76,13389,13390],{"class":78,"line":1587},[76,13391,2365],{"emptyLinePlaceholder":2364},[76,13393,13394,13397],{"class":78,"line":1592},[76,13395,13396],{"class":146},"    \u002F\u002Fref = 100;",[76,13398,13399],{"class":146},"  \u002F\u002F加入const后不可以修改变量\n",[76,13401,13402,13404,13406,13408,13410],{"class":78,"line":1606},[76,13403,6496],{"class":86},[76,13405,1132],{"class":82},[76,13407,12901],{"class":86},[76,13409,1132],{"class":82},[76,13411,8807],{"class":86},[76,13413,13414],{"class":78,"line":1611},[76,13415,2365],{"emptyLinePlaceholder":2364},[76,13417,13418],{"class":78,"line":1617},[76,13419,13420],{"class":146},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[76,13422,13423,13425,13427,13429,13431],{"class":78,"line":1638},[76,13424,1949],{"class":82},[76,13426,10836],{"class":86},[76,13428,133],{"class":82},[76,13430,2002],{"class":136},[76,13432,1254],{"class":86},[76,13434,13435,13438],{"class":78,"line":1643},[76,13436,13437],{"class":1927},"    showValue",[76,13439,13255],{"class":86},[76,13441,13442],{"class":78,"line":1657},[76,13443,2365],{"emptyLinePlaceholder":2364},[76,13445,13446,13448,13450,13452],{"class":78,"line":1662},[76,13447,2267],{"class":1927},[76,13449,87],{"class":86},[76,13451,2272],{"class":192},[76,13453,2684],{"class":86},[76,13455,13456],{"class":78,"line":1691},[76,13457,2365],{"emptyLinePlaceholder":2364},[76,13459,13460,13462,13464],{"class":78,"line":1696},[76,13461,4055],{"class":82},[76,13463,4058],{"class":136},[76,13465,1254],{"class":86},[76,13467,13468],{"class":78,"line":1713},[76,13469,1529],{"class":86},[5092,13471,13472],{},"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":71,"searchDepth":96,"depth":96,"links":13474},[13475,13476,13477,13478,13479,13480],{"id":12007,"depth":96,"text":12008},{"id":12186,"depth":96,"text":12187},{"id":12369,"depth":96,"text":12370},{"id":12773,"depth":96,"text":12774},{"id":13100,"depth":96,"text":13101},{"id":13280,"depth":96,"text":13281},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":11999,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13487,"title":13488,"body":13489,"description":71,"extension":5123,"meta":14570,"navigation":2364,"path":14571,"seo":14572,"stem":14573,"__hash__":14574},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":9,"value":13490,"toc":14562},[13491,13494,13498,13501,13506,13738,13740,13751,13755,13758,13766,13870,13873,13877,13880,13884,13887,13892,13914,13920,14247,14250,14254,14262,14559],[12,13492,13488],{"id":13493},"_7函数高级部分",[16,13495,13497],{"id":13496},"_71函数默认参数","7.1函数默认参数",[21,13499,13500],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[21,13502,5148,13503],{},[73,13504,13505],{}," 返回值类型  函数名 （参数= 默认值）{}",[66,13507,13509],{"className":68,"code":13508,"language":70,"meta":71,"style":71},"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",[73,13510,13511,13546,13561,13565,13569,13574,13579,13608,13628,13638,13642,13646,13654,13658,13686,13708,13712,13722,13726,13734],{"__ignoreMap":71},[76,13512,13513,13515,13517,13519,13521,13523,13525,13527,13529,13532,13534,13536,13538,13540,13542,13544],{"class":78,"line":79},[76,13514,90],{"class":82},[76,13516,11352],{"class":1927},[76,13518,87],{"class":86},[76,13520,90],{"class":82},[76,13522,1362],{"class":5183},[76,13524,12402],{"class":86},[76,13526,90],{"class":82},[76,13528,2798],{"class":5183},[76,13530,13531],{"class":82}," =",[76,13533,2002],{"class":136},[76,13535,12402],{"class":86},[76,13537,90],{"class":82},[76,13539,2814],{"class":5183},[76,13541,13531],{"class":82},[76,13543,2002],{"class":136},[76,13545,12409],{"class":86},[76,13547,13548,13550,13552,13554,13556,13558],{"class":78,"line":96},[76,13549,4055],{"class":82},[76,13551,10836],{"class":86},[76,13553,569],{"class":82},[76,13555,10849],{"class":86},[76,13557,569],{"class":82},[76,13559,13560],{"class":86}," c;\n",[76,13562,13563],{"class":78,"line":1143},[76,13564,1529],{"class":86},[76,13566,13567],{"class":78,"line":1158},[76,13568,2365],{"emptyLinePlaceholder":2364},[76,13570,13571],{"class":78,"line":1164},[76,13572,13573],{"class":146},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[76,13575,13576],{"class":78,"line":1178},[76,13577,13578],{"class":146},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[76,13580,13581,13583,13586,13588,13590,13592,13594,13596,13598,13600,13602,13604,13606],{"class":78,"line":1184},[76,13582,90],{"class":82},[76,13584,13585],{"class":1927}," func2",[76,13587,87],{"class":86},[76,13589,90],{"class":82},[76,13591,1362],{"class":5183},[76,13593,13531],{"class":82},[76,13595,2002],{"class":136},[76,13597,12402],{"class":86},[76,13599,90],{"class":82},[76,13601,2798],{"class":5183},[76,13603,13531],{"class":82},[76,13605,2002],{"class":136},[76,13607,2684],{"class":86},[76,13609,13610,13612,13614,13616,13618,13620,13622,13624,13626],{"class":78,"line":1275},[76,13611,90],{"class":82},[76,13613,13585],{"class":1927},[76,13615,87],{"class":86},[76,13617,90],{"class":82},[76,13619,1362],{"class":5183},[76,13621,12402],{"class":86},[76,13623,90],{"class":82},[76,13625,2798],{"class":5183},[76,13627,12409],{"class":86},[76,13629,13630,13632,13634,13636],{"class":78,"line":1281},[76,13631,4055],{"class":82},[76,13633,10836],{"class":86},[76,13635,569],{"class":82},[76,13637,12430],{"class":86},[76,13639,13640],{"class":78,"line":1293},[76,13641,1529],{"class":86},[76,13643,13644],{"class":78,"line":1576},[76,13645,2365],{"emptyLinePlaceholder":2364},[76,13647,13648,13650,13652],{"class":78,"line":1581},[76,13649,90],{"class":82},[76,13651,1937],{"class":1927},[76,13653,10820],{"class":86},[76,13655,13656],{"class":78,"line":1587},[76,13657,2365],{"emptyLinePlaceholder":2364},[76,13659,13660,13662,13664,13667,13669,13671,13673,13675,13677,13679,13682,13684],{"class":78,"line":1592},[76,13661,6496],{"class":86},[76,13663,1132],{"class":82},[76,13665,13666],{"class":192}," \"ret = \"",[76,13668,1408],{"class":82},[76,13670,11352],{"class":1927},[76,13672,87],{"class":86},[76,13674,788],{"class":136},[76,13676,12402],{"class":86},[76,13678,788],{"class":136},[76,13680,13681],{"class":86},") ",[76,13683,1132],{"class":82},[76,13685,8807],{"class":86},[76,13687,13688,13690,13692,13694,13696,13698,13700,13702,13704,13706],{"class":78,"line":1606},[76,13689,6496],{"class":86},[76,13691,1132],{"class":82},[76,13693,13666],{"class":192},[76,13695,1408],{"class":82},[76,13697,11352],{"class":1927},[76,13699,87],{"class":86},[76,13701,399],{"class":136},[76,13703,13681],{"class":86},[76,13705,1132],{"class":82},[76,13707,8807],{"class":86},[76,13709,13710],{"class":78,"line":1611},[76,13711,2365],{"emptyLinePlaceholder":2364},[76,13713,13714,13716,13718,13720],{"class":78,"line":1617},[76,13715,2267],{"class":1927},[76,13717,87],{"class":86},[76,13719,2272],{"class":192},[76,13721,2684],{"class":86},[76,13723,13724],{"class":78,"line":1638},[76,13725,2365],{"emptyLinePlaceholder":2364},[76,13727,13728,13730,13732],{"class":78,"line":1643},[76,13729,4055],{"class":82},[76,13731,4058],{"class":136},[76,13733,1254],{"class":86},[76,13735,13736],{"class":78,"line":1657},[76,13737,1529],{"class":86},[21,13739,11299],{},[29,13741,13742,13745,13748],{},[32,13743,13744],{},"我传就用我；没传就用你",[32,13746,13747],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[32,13749,13750],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[16,13752,13754],{"id":13753},"_72函数的占位参数","7.2函数的占位参数",[21,13756,13757],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[21,13759,13760,13762,13763],{},[237,13761,5148],{}," ",[73,13764,13765],{},"返回值类型 函数名 (数据类型){}",[66,13767,13769],{"className":68,"code":13768,"language":70,"meta":71,"style":71},"\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",[73,13770,13771,13776,13794,13807,13811,13819,13823,13840,13844,13854,13858,13866],{"__ignoreMap":71},[76,13772,13773],{"class":78,"line":79},[76,13774,13775],{"class":146},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[76,13777,13778,13780,13782,13784,13786,13788,13790,13792],{"class":78,"line":96},[76,13779,5331],{"class":82},[76,13781,11352],{"class":1927},[76,13783,87],{"class":86},[76,13785,90],{"class":82},[76,13787,1362],{"class":5183},[76,13789,12402],{"class":86},[76,13791,90],{"class":82},[76,13793,12409],{"class":86},[76,13795,13796,13798,13800,13803,13805],{"class":78,"line":1143},[76,13797,6496],{"class":86},[76,13799,1132],{"class":82},[76,13801,13802],{"class":192}," \"this is func\"",[76,13804,1408],{"class":82},[76,13806,8807],{"class":86},[76,13808,13809],{"class":78,"line":1158},[76,13810,1529],{"class":86},[76,13812,13813,13815,13817],{"class":78,"line":1164},[76,13814,90],{"class":82},[76,13816,1937],{"class":1927},[76,13818,10820],{"class":86},[76,13820,13821],{"class":78,"line":1178},[76,13822,2365],{"emptyLinePlaceholder":2364},[76,13824,13825,13827,13829,13831,13833,13835,13837],{"class":78,"line":1184},[76,13826,13252],{"class":1927},[76,13828,87],{"class":86},[76,13830,534],{"class":136},[76,13832,466],{"class":86},[76,13834,534],{"class":136},[76,13836,5933],{"class":86},[76,13838,13839],{"class":146}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[76,13841,13842],{"class":78,"line":1275},[76,13843,2365],{"emptyLinePlaceholder":2364},[76,13845,13846,13848,13850,13852],{"class":78,"line":1281},[76,13847,2267],{"class":1927},[76,13849,87],{"class":86},[76,13851,2272],{"class":192},[76,13853,2684],{"class":86},[76,13855,13856],{"class":78,"line":1293},[76,13857,2365],{"emptyLinePlaceholder":2364},[76,13859,13860,13862,13864],{"class":78,"line":1576},[76,13861,4055],{"class":82},[76,13863,4058],{"class":136},[76,13865,1254],{"class":86},[76,13867,13868],{"class":78,"line":1581},[76,13869,1529],{"class":86},[21,13871,13872],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[16,13874,13876],{"id":13875},"_73函数重载","7.3函数重载",[21,13878,13879],{},"意思是函数名是可以相同的",[46,13881,13883],{"id":13882},"_731基本语法","7.3.1基本语法",[21,13885,13886],{},"作用：函数名可以相同，提高复用性",[21,13888,13889],{},[237,13890,13891],{},"函数重载满足条件：",[1095,13893,13894,13897,13900],{},[32,13895,13896],{},"同一个作用域下",[32,13898,13899],{},"函数名称相同",[32,13901,13902,13903,13906,13907,13910,13911],{},"函数参数",[237,13904,13905],{},"类型不同","  或者 ",[237,13908,13909],{},"个数不同"," 或者 ",[237,13912,13913],{},"顺序不同",[21,13915,13916,13919],{},[237,13917,13918],{},"注意:","  函数的返回值不可以作为函数重载的条件",[66,13921,13923],{"className":9908,"code":13922,"language":9910,"meta":71,"style":71},"\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",[73,13924,13925,13930,13938,13942,13955,13959,13973,13977,13990,13994,14009,14013,14026,14030,14051,14055,14068,14072,14092,14096,14109,14113,14117,14122,14127,14132,14137,14142,14146,14150,14158,14162,14168,14178,14188,14202,14217,14221,14231,14235,14243],{"__ignoreMap":71},[76,13926,13927],{"class":78,"line":79},[76,13928,13929],{"class":146},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[76,13931,13932,13934,13936],{"class":78,"line":96},[76,13933,5331],{"class":82},[76,13935,11352],{"class":1927},[76,13937,1940],{"class":86},[76,13939,13940],{"class":78,"line":1143},[76,13941,1510],{"class":86},[76,13943,13944,13946,13948,13951,13953],{"class":78,"line":1158},[76,13945,6496],{"class":86},[76,13947,1132],{"class":82},[76,13949,13950],{"class":192}," \"func 的调用！\"",[76,13952,1408],{"class":82},[76,13954,8807],{"class":86},[76,13956,13957],{"class":78,"line":1164},[76,13958,1529],{"class":86},[76,13960,13961,13963,13965,13967,13969,13971],{"class":78,"line":1178},[76,13962,5331],{"class":82},[76,13964,11352],{"class":1927},[76,13966,87],{"class":86},[76,13968,90],{"class":82},[76,13970,1362],{"class":5183},[76,13972,93],{"class":86},[76,13974,13975],{"class":78,"line":1184},[76,13976,1510],{"class":86},[76,13978,13979,13981,13983,13986,13988],{"class":78,"line":1275},[76,13980,6496],{"class":86},[76,13982,1132],{"class":82},[76,13984,13985],{"class":192}," \"func (int a) 的调用！\"",[76,13987,1408],{"class":82},[76,13989,8807],{"class":86},[76,13991,13992],{"class":78,"line":1281},[76,13993,1529],{"class":86},[76,13995,13996,13998,14000,14002,14005,14007],{"class":78,"line":1293},[76,13997,5331],{"class":82},[76,13999,11352],{"class":1927},[76,14001,87],{"class":86},[76,14003,14004],{"class":82},"double",[76,14006,1362],{"class":5183},[76,14008,93],{"class":86},[76,14010,14011],{"class":78,"line":1576},[76,14012,1510],{"class":86},[76,14014,14015,14017,14019,14022,14024],{"class":78,"line":1581},[76,14016,6496],{"class":86},[76,14018,1132],{"class":82},[76,14020,14021],{"class":192}," \"func (double a)的调用！\"",[76,14023,1408],{"class":82},[76,14025,8807],{"class":86},[76,14027,14028],{"class":78,"line":1587},[76,14029,1529],{"class":86},[76,14031,14032,14034,14036,14038,14040,14042,14045,14047,14049],{"class":78,"line":1592},[76,14033,5331],{"class":82},[76,14035,11352],{"class":1927},[76,14037,87],{"class":86},[76,14039,90],{"class":82},[76,14041,1362],{"class":5183},[76,14043,14044],{"class":86}," ,",[76,14046,14004],{"class":82},[76,14048,2798],{"class":5183},[76,14050,93],{"class":86},[76,14052,14053],{"class":78,"line":1606},[76,14054,1510],{"class":86},[76,14056,14057,14059,14061,14064,14066],{"class":78,"line":1611},[76,14058,6496],{"class":86},[76,14060,1132],{"class":82},[76,14062,14063],{"class":192}," \"func (int a ,double b) 的调用！\"",[76,14065,1408],{"class":82},[76,14067,8807],{"class":86},[76,14069,14070],{"class":78,"line":1617},[76,14071,1529],{"class":86},[76,14073,14074,14076,14078,14080,14082,14084,14086,14088,14090],{"class":78,"line":1638},[76,14075,5331],{"class":82},[76,14077,11352],{"class":1927},[76,14079,87],{"class":86},[76,14081,14004],{"class":82},[76,14083,1362],{"class":5183},[76,14085,14044],{"class":86},[76,14087,90],{"class":82},[76,14089,2798],{"class":5183},[76,14091,93],{"class":86},[76,14093,14094],{"class":78,"line":1643},[76,14095,1510],{"class":86},[76,14097,14098,14100,14102,14105,14107],{"class":78,"line":1657},[76,14099,6496],{"class":86},[76,14101,1132],{"class":82},[76,14103,14104],{"class":192}," \"func (double a ,int b)的调用！\"",[76,14106,1408],{"class":82},[76,14108,8807],{"class":86},[76,14110,14111],{"class":78,"line":1662},[76,14112,1529],{"class":86},[76,14114,14115],{"class":78,"line":1691},[76,14116,2365],{"emptyLinePlaceholder":2364},[76,14118,14119],{"class":78,"line":1696},[76,14120,14121],{"class":146},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[76,14123,14124],{"class":78,"line":1713},[76,14125,14126],{"class":146},"\u002F\u002Fint func(double a, int b)\n",[76,14128,14129],{"class":78,"line":1718},[76,14130,14131],{"class":146},"\u002F\u002F{\n",[76,14133,14134],{"class":78,"line":1723},[76,14135,14136],{"class":146},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[76,14138,14139],{"class":78,"line":1728},[76,14140,14141],{"class":146},"\u002F\u002F}\n",[76,14143,14144],{"class":78,"line":1742},[76,14145,2365],{"emptyLinePlaceholder":2364},[76,14147,14148],{"class":78,"line":1747},[76,14149,2365],{"emptyLinePlaceholder":2364},[76,14151,14152,14154,14156],{"class":78,"line":2542},[76,14153,90],{"class":82},[76,14155,1937],{"class":1927},[76,14157,10820],{"class":86},[76,14159,14160],{"class":78,"line":2556},[76,14161,2365],{"emptyLinePlaceholder":2364},[76,14163,14164,14166],{"class":78,"line":2564},[76,14165,13252],{"class":1927},[76,14167,5603],{"class":86},[76,14169,14170,14172,14174,14176],{"class":78,"line":2569},[76,14171,13252],{"class":1927},[76,14173,87],{"class":86},[76,14175,534],{"class":136},[76,14177,2684],{"class":86},[76,14179,14180,14182,14184,14186],{"class":78,"line":2575},[76,14181,13252],{"class":1927},[76,14183,87],{"class":86},[76,14185,137],{"class":136},[76,14187,2684],{"class":86},[76,14189,14190,14192,14194,14196,14198,14200],{"class":78,"line":2581},[76,14191,13252],{"class":1927},[76,14193,87],{"class":86},[76,14195,534],{"class":136},[76,14197,466],{"class":86},[76,14199,137],{"class":136},[76,14201,2684],{"class":86},[76,14203,14204,14206,14208,14210,14213,14215],{"class":78,"line":2586},[76,14205,13252],{"class":1927},[76,14207,87],{"class":86},[76,14209,137],{"class":136},[76,14211,14212],{"class":86}," , ",[76,14214,534],{"class":136},[76,14216,2684],{"class":86},[76,14218,14219],{"class":78,"line":7915},[76,14220,13177],{"class":86},[76,14222,14223,14225,14227,14229],{"class":78,"line":7939},[76,14224,2267],{"class":1927},[76,14226,87],{"class":86},[76,14228,2272],{"class":192},[76,14230,2684],{"class":86},[76,14232,14233],{"class":78,"line":7944},[76,14234,2365],{"emptyLinePlaceholder":2364},[76,14236,14237,14239,14241],{"class":78,"line":7950},[76,14238,4055],{"class":82},[76,14240,4058],{"class":136},[76,14242,1254],{"class":86},[76,14244,14245],{"class":78,"line":7977},[76,14246,1529],{"class":86},[21,14248,14249],{},"重点：函数返回值不可以作为函数重载条件！",[46,14251,14253],{"id":14252},"_732注意事项","7.3.2注意事项",[1095,14255,14256,14259],{},[32,14257,14258],{},"引用作为重载条件!!!",[32,14260,14261],{},"函数重载碰到函数默认参数",[66,14263,14265],{"className":68,"code":14264,"language":70,"meta":71,"style":71},"\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",[73,14266,14267,14272,14277,14281,14297,14301,14314,14318,14322,14340,14344,14357,14361,14365,14369,14374,14378,14402,14406,14419,14423,14427,14441,14445,14458,14462,14466,14474,14478,14490,14500,14513,14517,14521,14529,14533,14543,14547,14555],{"__ignoreMap":71},[76,14268,14269],{"class":78,"line":79},[76,14270,14271],{"class":146},"\u002F\u002F函数重载注意事项\n",[76,14273,14274],{"class":78,"line":96},[76,14275,14276],{"class":146},"\u002F\u002F1、引用作为重载条件\n",[76,14278,14279],{"class":78,"line":1143},[76,14280,2365],{"emptyLinePlaceholder":2364},[76,14282,14283,14285,14287,14289,14291,14293,14295],{"class":78,"line":1158},[76,14284,5331],{"class":82},[76,14286,11352],{"class":1927},[76,14288,87],{"class":86},[76,14290,90],{"class":82},[76,14292,10551],{"class":82},[76,14294,326],{"class":5183},[76,14296,93],{"class":86},[76,14298,14299],{"class":78,"line":1164},[76,14300,1510],{"class":86},[76,14302,14303,14305,14307,14310,14312],{"class":78,"line":1178},[76,14304,6496],{"class":86},[76,14306,1132],{"class":82},[76,14308,14309],{"class":192}," \"func (int &a) 调用 \"",[76,14311,1408],{"class":82},[76,14313,8807],{"class":86},[76,14315,14316],{"class":78,"line":1184},[76,14317,1529],{"class":86},[76,14319,14320],{"class":78,"line":1275},[76,14321,2365],{"emptyLinePlaceholder":2364},[76,14323,14324,14326,14328,14330,14332,14334,14336,14338],{"class":78,"line":1281},[76,14325,5331],{"class":82},[76,14327,11352],{"class":1927},[76,14329,87],{"class":86},[76,14331,6759],{"class":82},[76,14333,2346],{"class":82},[76,14335,10551],{"class":82},[76,14337,326],{"class":5183},[76,14339,93],{"class":86},[76,14341,14342],{"class":78,"line":1293},[76,14343,1510],{"class":86},[76,14345,14346,14348,14350,14353,14355],{"class":78,"line":1576},[76,14347,6496],{"class":86},[76,14349,1132],{"class":82},[76,14351,14352],{"class":192}," \"func (const int &a) 调用 \"",[76,14354,1408],{"class":82},[76,14356,8807],{"class":86},[76,14358,14359],{"class":78,"line":1581},[76,14360,1529],{"class":86},[76,14362,14363],{"class":78,"line":1587},[76,14364,2365],{"emptyLinePlaceholder":2364},[76,14366,14367],{"class":78,"line":1592},[76,14368,2365],{"emptyLinePlaceholder":2364},[76,14370,14371],{"class":78,"line":1606},[76,14372,14373],{"class":146},"\u002F\u002F2、函数重载碰到函数默认参数\n",[76,14375,14376],{"class":78,"line":1611},[76,14377,2365],{"emptyLinePlaceholder":2364},[76,14379,14380,14382,14384,14386,14388,14390,14392,14394,14396,14398,14400],{"class":78,"line":1617},[76,14381,5331],{"class":82},[76,14383,13585],{"class":1927},[76,14385,87],{"class":86},[76,14387,90],{"class":82},[76,14389,1362],{"class":5183},[76,14391,12402],{"class":86},[76,14393,90],{"class":82},[76,14395,2798],{"class":5183},[76,14397,13531],{"class":82},[76,14399,2002],{"class":136},[76,14401,93],{"class":86},[76,14403,14404],{"class":78,"line":1638},[76,14405,1510],{"class":86},[76,14407,14408,14410,14412,14415,14417],{"class":78,"line":1643},[76,14409,6496],{"class":86},[76,14411,1132],{"class":82},[76,14413,14414],{"class":192}," \"func2(int a, int b = 10) 调用\"",[76,14416,1408],{"class":82},[76,14418,8807],{"class":86},[76,14420,14421],{"class":78,"line":1657},[76,14422,1529],{"class":86},[76,14424,14425],{"class":78,"line":1662},[76,14426,2365],{"emptyLinePlaceholder":2364},[76,14428,14429,14431,14433,14435,14437,14439],{"class":78,"line":1691},[76,14430,5331],{"class":82},[76,14432,13585],{"class":1927},[76,14434,87],{"class":86},[76,14436,90],{"class":82},[76,14438,1362],{"class":5183},[76,14440,93],{"class":86},[76,14442,14443],{"class":78,"line":1696},[76,14444,1510],{"class":86},[76,14446,14447,14449,14451,14454,14456],{"class":78,"line":1713},[76,14448,6496],{"class":86},[76,14450,1132],{"class":82},[76,14452,14453],{"class":192}," \"func2(int a) 调用\"",[76,14455,1408],{"class":82},[76,14457,8807],{"class":86},[76,14459,14460],{"class":78,"line":1718},[76,14461,1529],{"class":86},[76,14463,14464],{"class":78,"line":1723},[76,14465,2365],{"emptyLinePlaceholder":2364},[76,14467,14468,14470,14472],{"class":78,"line":1728},[76,14469,90],{"class":82},[76,14471,1937],{"class":1927},[76,14473,10820],{"class":86},[76,14475,14476],{"class":78,"line":1742},[76,14477,13177],{"class":86},[76,14479,14480,14482,14484,14486,14488],{"class":78,"line":1747},[76,14481,1949],{"class":82},[76,14483,10836],{"class":86},[76,14485,133],{"class":82},[76,14487,2002],{"class":136},[76,14489,1254],{"class":86},[76,14491,14492,14494,14497],{"class":78,"line":2542},[76,14493,13252],{"class":1927},[76,14495,14496],{"class":86},"(a);",[76,14498,14499],{"class":146}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[76,14501,14502,14504,14506,14508,14510],{"class":78,"line":2556},[76,14503,13252],{"class":1927},[76,14505,87],{"class":86},[76,14507,534],{"class":136},[76,14509,5933],{"class":86},[76,14511,14512],{"class":146},"\u002F\u002F调用有const   10是个常量\n",[76,14514,14515],{"class":78,"line":2564},[76,14516,2365],{"emptyLinePlaceholder":2364},[76,14518,14519],{"class":78,"line":2569},[76,14520,2365],{"emptyLinePlaceholder":2364},[76,14522,14523,14526],{"class":78,"line":2575},[76,14524,14525],{"class":146},"    \u002F\u002Ffunc2(10);",[76,14527,14528],{"class":146}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[76,14530,14531],{"class":78,"line":2581},[76,14532,2365],{"emptyLinePlaceholder":2364},[76,14534,14535,14537,14539,14541],{"class":78,"line":2586},[76,14536,2267],{"class":1927},[76,14538,87],{"class":86},[76,14540,2272],{"class":192},[76,14542,2684],{"class":86},[76,14544,14545],{"class":78,"line":7915},[76,14546,2365],{"emptyLinePlaceholder":2364},[76,14548,14549,14551,14553],{"class":78,"line":7939},[76,14550,4055],{"class":82},[76,14552,4058],{"class":136},[76,14554,1254],{"class":86},[76,14556,14557],{"class":78,"line":7944},[76,14558,1529],{"class":86},[5092,14560,14561],{},"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":71,"searchDepth":96,"depth":96,"links":14563},[14564,14565,14566],{"id":13496,"depth":96,"text":13497},{"id":13753,"depth":96,"text":13754},{"id":13875,"depth":96,"text":13876,"children":14567},[14568,14569],{"id":13882,"depth":1143,"text":13883},{"id":14252,"depth":1143,"text":14253},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13488,"description":71},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14576,"title":14577,"body":14578,"description":23332,"extension":5123,"meta":23333,"navigation":2364,"path":23334,"seo":23335,"stem":23336,"__hash__":23337},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":9,"value":14579,"toc":23313},[14580,14583,14589,14596,14601,14604,14607,14610,14614,14618,14621,14624,14632,14637,14640,14647,14652,14811,14814,15067,15070,15073,15076,15081,15084,15087,15098,15103,15339,15343,15353,15356,15364,15511,15515,15518,15521,15525,15970,15974,15982,15990,16902,16909,16914,17542,17545,17548,17551,17670,17673,17760,17763,17889,17892,17986,17989,18342,18346,18354,18358,18365,18368,18371,18382,18388,18393,18405,18413,18433,18441,18458,18644,18647,18651,18654,18657,18660,18663,18666,18669,18672,19132,19138,19142,19145,19156,19743,19746,20235,20239,20242,20245,20248,20251,20254,20262,20658,20662,20665,20668,21115,21118,21121,21126,21129,21134,21137,21141,21144,21146,21152,21155,21461,21471,21512,21516,21519,21521,21554,21557,21864,21866,21881,21884,21907,21916,21922,21925,21929,21932,21935,21940,21951,21956,21964,21969,22099,22102,22105,22280,22285,22497,22501,22504,22618,22623,22862,22866,22870,22873,22876,22881,22986,22989,22992,22995,22999,23110,23113,23116,23121,23173,23176,23179,23184,23230,23233,23238,23306,23308,23311],[12,14581,14577],{"id":14582},"_8类和对象",[21,14584,14585,14586],{},"C++面向对象的三大特性为",[237,14587,14588],{},"封装、继承、多态",[21,14590,14591,14592,14595],{},"C++认为",[237,14593,14594],{},"万事万物都皆为对象","，对象上有其属性和行为",[21,14597,14598],{},[237,14599,14600],{},"例如：",[21,14602,14603],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[21,14605,14606],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[21,14608,14609],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[16,14611,14613],{"id":14612},"_81封装","8.1封装",[46,14615,14617],{"id":14616},"_811封装的意义","8.1.1封装的意义",[21,14619,14620],{},"封装是C++面向对象三大特性之一",[21,14622,14623],{},"封装的意义：",[1095,14625,14626,14629],{},[32,14627,14628],{},"将属性和行为作为一个整体，表现生活中的事物",[32,14630,14631],{},"将属性和行为加以权限控制",[21,14633,14634],{},[237,14635,14636],{},"封装意义一：",[21,14638,14639],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[21,14641,14642,13762,14644],{},[237,14643,5148],{},[73,14645,14646],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[29,14648,14649],{},[32,14650,14651],{},"**示例1：**设计一个圆类，求圆的周长",[66,14653,14655],{"className":68,"code":14654,"language":70,"meta":71,"style":71},"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",[73,14656,14657,14665,14669,14674,14679,14684,14689,14696,14701,14711,14715,14733,14737,14741,14749,14753,14758,14763,14768,14773,14784,14807],{"__ignoreMap":71},[76,14658,14659,14662],{"class":78,"line":79},[76,14660,14661],{"class":82},"class",[76,14663,14664],{"class":1927}," Circle\n",[76,14666,14667],{"class":78,"line":96},[76,14668,1510],{"class":86},[76,14670,14671],{"class":78,"line":1143},[76,14672,14673],{"class":146},"    \u002F\u002F访问权限\n",[76,14675,14676],{"class":78,"line":1158},[76,14677,14678],{"class":146},"    \u002F\u002F公共权限\n",[76,14680,14681],{"class":78,"line":1164},[76,14682,14683],{"class":82},"public:\n",[76,14685,14686],{"class":78,"line":1178},[76,14687,14688],{"class":146},"    \u002F\u002F属性\n",[76,14690,14691,14693],{"class":78,"line":1184},[76,14692,1949],{"class":82},[76,14694,14695],{"class":86}," m_r;\n",[76,14697,14698],{"class":78,"line":1275},[76,14699,14700],{"class":146},"    \u002F\u002F行为\n",[76,14702,14703,14706,14709],{"class":78,"line":1281},[76,14704,14705],{"class":82},"    double",[76,14707,14708],{"class":1927}," calculateZC",[76,14710,1940],{"class":86},[76,14712,14713],{"class":78,"line":1293},[76,14714,1994],{"class":86},[76,14716,14717,14720,14723,14725,14728,14730],{"class":78,"line":1576},[76,14718,14719],{"class":82},"        return",[76,14721,14722],{"class":136}," 2",[76,14724,543],{"class":82},[76,14726,14727],{"class":86},"PI",[76,14729,543],{"class":82},[76,14731,14732],{"class":86},"m_r;\n",[76,14734,14735],{"class":78,"line":1581},[76,14736,2151],{"class":86},[76,14738,14739],{"class":78,"line":1587},[76,14740,3960],{"class":86},[76,14742,14743,14745,14747],{"class":78,"line":1592},[76,14744,90],{"class":82},[76,14746,1937],{"class":1927},[76,14748,1940],{"class":86},[76,14750,14751],{"class":78,"line":1606},[76,14752,1510],{"class":86},[76,14754,14755],{"class":78,"line":1611},[76,14756,14757],{"class":146},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[76,14759,14760],{"class":78,"line":1617},[76,14761,14762],{"class":146},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[76,14764,14765],{"class":78,"line":1638},[76,14766,14767],{"class":86},"    Circle c1;\n",[76,14769,14770],{"class":78,"line":1643},[76,14771,14772],{"class":146},"    \u002F\u002F给圆对象 的属性进行赋值\n",[76,14774,14775,14778,14780,14782],{"class":78,"line":1657},[76,14776,14777],{"class":86},"    c1.m_r",[76,14779,133],{"class":82},[76,14781,534],{"class":136},[76,14783,1254],{"class":86},[76,14785,14786,14788,14790,14793,14795,14798,14801,14803,14805],{"class":78,"line":1662},[76,14787,1515],{"class":86},[76,14789,1132],{"class":82},[76,14791,14792],{"class":192},"\"圆的周长\"",[76,14794,1132],{"class":82},[76,14796,14797],{"class":86},"c1.",[76,14799,14800],{"class":1927},"calculateZC",[76,14802,2392],{"class":86},[76,14804,1132],{"class":82},[76,14806,1155],{"class":86},[76,14808,14809],{"class":78,"line":1691},[76,14810,1529],{"class":86},[21,14812,14813],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[66,14815,14817],{"className":68,"code":14816,"language":70,"meta":71,"style":71},"#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",[73,14818,14819,14825,14835,14841,14847,14851,14855,14860,14867,14872,14890,14894,14904,14908,14913,14929,14933,14943,14947,14952,14960,14964,14996,15000,15004,15012,15016,15021,15026,15040,15054,15063],{"__ignoreMap":71},[76,14820,14821,14823],{"class":78,"line":79},[76,14822,1913],{"class":82},[76,14824,1916],{"class":192},[76,14826,14827,14829,14831,14833],{"class":78,"line":96},[76,14828,1921],{"class":82},[76,14830,1924],{"class":82},[76,14832,1928],{"class":1927},[76,14834,1254],{"class":86},[76,14836,14837,14839],{"class":78,"line":1143},[76,14838,1913],{"class":82},[76,14840,7716],{"class":192},[76,14842,14843,14845],{"class":78,"line":1158},[76,14844,14661],{"class":82},[76,14846,7729],{"class":1927},[76,14848,14849],{"class":78,"line":1164},[76,14850,1510],{"class":86},[76,14852,14853],{"class":78,"line":1178},[76,14854,14683],{"class":82},[76,14856,14857],{"class":78,"line":1184},[76,14858,14859],{"class":86},"    string m_name;\n",[76,14861,14862,14864],{"class":78,"line":1275},[76,14863,1949],{"class":82},[76,14865,14866],{"class":86}," m_id;\n",[76,14868,14869],{"class":78,"line":1281},[76,14870,14871],{"class":146},"    \u002F\u002F赋值姓名\n",[76,14873,14874,14877,14880,14882,14885,14888],{"class":78,"line":1293},[76,14875,14876],{"class":82},"    void",[76,14878,14879],{"class":1927}," setName",[76,14881,87],{"class":86},[76,14883,14884],{"class":1927},"string",[76,14886,14887],{"class":5183}," name",[76,14889,93],{"class":86},[76,14891,14892],{"class":78,"line":1576},[76,14893,1994],{"class":86},[76,14895,14896,14899,14901],{"class":78,"line":1581},[76,14897,14898],{"class":86},"        m_name",[76,14900,133],{"class":82},[76,14902,14903],{"class":86},"name;\n",[76,14905,14906],{"class":78,"line":1587},[76,14907,2151],{"class":86},[76,14909,14910],{"class":78,"line":1592},[76,14911,14912],{"class":146},"    \u002F\u002F赋值学号\n",[76,14914,14915,14917,14920,14922,14924,14927],{"class":78,"line":1606},[76,14916,14876],{"class":82},[76,14918,14919],{"class":1927}," setId",[76,14921,87],{"class":86},[76,14923,90],{"class":82},[76,14925,14926],{"class":5183}," id",[76,14928,93],{"class":86},[76,14930,14931],{"class":78,"line":1611},[76,14932,1994],{"class":86},[76,14934,14935,14938,14940],{"class":78,"line":1617},[76,14936,14937],{"class":86},"        m_id",[76,14939,133],{"class":82},[76,14941,14942],{"class":86},"id;\n",[76,14944,14945],{"class":78,"line":1638},[76,14946,2151],{"class":86},[76,14948,14949],{"class":78,"line":1643},[76,14950,14951],{"class":146},"    \u002F\u002F打印学生信息\n",[76,14953,14954,14956,14958],{"class":78,"line":1657},[76,14955,14876],{"class":82},[76,14957,9582],{"class":1927},[76,14959,1940],{"class":86},[76,14961,14962],{"class":78,"line":1662},[76,14963,1994],{"class":86},[76,14965,14966,14968,14970,14973,14975,14978,14980,14982,14984,14987,14989,14992,14994],{"class":78,"line":1691},[76,14967,3416],{"class":86},[76,14969,1132],{"class":82},[76,14971,14972],{"class":192},"\"姓名：\"",[76,14974,1132],{"class":82},[76,14976,14977],{"class":86},"m_name",[76,14979,1132],{"class":82},[76,14981,4324],{"class":192},[76,14983,1132],{"class":82},[76,14985,14986],{"class":192},"\"学号：\"",[76,14988,1132],{"class":82},[76,14990,14991],{"class":86},"m_id",[76,14993,1132],{"class":82},[76,14995,1155],{"class":86},[76,14997,14998],{"class":78,"line":1696},[76,14999,2151],{"class":86},[76,15001,15002],{"class":78,"line":1713},[76,15003,3960],{"class":86},[76,15005,15006,15008,15010],{"class":78,"line":1718},[76,15007,90],{"class":82},[76,15009,1937],{"class":1927},[76,15011,1940],{"class":86},[76,15013,15014],{"class":78,"line":1723},[76,15015,1510],{"class":86},[76,15017,15018],{"class":78,"line":1728},[76,15019,15020],{"class":146},"    \u002F\u002F实例化\n",[76,15022,15023],{"class":78,"line":1742},[76,15024,15025],{"class":86},"    Student s1;\n",[76,15027,15028,15031,15034,15036,15038],{"class":78,"line":1747},[76,15029,15030],{"class":86},"    s1.",[76,15032,15033],{"class":1927},"setName",[76,15035,87],{"class":86},[76,15037,7883],{"class":192},[76,15039,2684],{"class":86},[76,15041,15042,15044,15047,15049,15052],{"class":78,"line":2542},[76,15043,15030],{"class":86},[76,15045,15046],{"class":1927},"setId",[76,15048,87],{"class":86},[76,15050,15051],{"class":136},"123456",[76,15053,2684],{"class":86},[76,15055,15056,15058,15061],{"class":78,"line":2556},[76,15057,15030],{"class":86},[76,15059,15060],{"class":1927},"printInfo",[76,15062,5603],{"class":86},[76,15064,15065],{"class":78,"line":2564},[76,15066,1529],{"class":86},[21,15068,15069],{},"类中的属性和行为统称为成员",[21,15071,15072],{},"属性：成员属性(成员变量)",[21,15074,15075],{},"方法：成员函数(成员方法)",[21,15077,15078],{},[237,15079,15080],{},"封装意义二：",[21,15082,15083],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[21,15085,15086],{},"访问权限有三种：",[29,15088,15089,15092,15095],{},[32,15090,15091],{},"public        公共权限",[32,15093,15094],{},"protected 保护权限",[32,15096,15097],{},"private      私有权限",[21,15099,15100],{},[237,15101,15102],{},"示例：",[66,15104,15106],{"className":9908,"code":15105,"language":9910,"meta":71,"style":71},"\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",[73,15107,15108,15113,15118,15123,15128,15132,15139,15143,15148,15152,15157,15161,15166,15171,15176,15180,15185,15190,15197,15201,15205,15213,15217,15228,15240,15252,15256,15260,15264,15272,15276,15281,15293,15301,15309,15313,15323,15327,15335],{"__ignoreMap":71},[76,15109,15110],{"class":78,"line":79},[76,15111,15112],{"class":146},"\u002F\u002F三种权限\n",[76,15114,15115],{"class":78,"line":96},[76,15116,15117],{"class":146},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[76,15119,15120],{"class":78,"line":1143},[76,15121,15122],{"class":146},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[76,15124,15125],{"class":78,"line":1158},[76,15126,15127],{"class":146},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[76,15129,15130],{"class":78,"line":1164},[76,15131,2365],{"emptyLinePlaceholder":2364},[76,15133,15134,15136],{"class":78,"line":1178},[76,15135,14661],{"class":82},[76,15137,15138],{"class":1927}," Person\n",[76,15140,15141],{"class":78,"line":1184},[76,15142,1510],{"class":86},[76,15144,15145],{"class":78,"line":1275},[76,15146,15147],{"class":146},"    \u002F\u002F姓名  公共权限\n",[76,15149,15150],{"class":78,"line":1281},[76,15151,14683],{"class":82},[76,15153,15154],{"class":78,"line":1293},[76,15155,15156],{"class":86},"    string m_Name;\n",[76,15158,15159],{"class":78,"line":1576},[76,15160,2365],{"emptyLinePlaceholder":2364},[76,15162,15163],{"class":78,"line":1581},[76,15164,15165],{"class":146},"    \u002F\u002F汽车  保护权限\n",[76,15167,15168],{"class":78,"line":1587},[76,15169,15170],{"class":82},"protected:\n",[76,15172,15173],{"class":78,"line":1592},[76,15174,15175],{"class":86},"    string m_Car;\n",[76,15177,15178],{"class":78,"line":1606},[76,15179,2365],{"emptyLinePlaceholder":2364},[76,15181,15182],{"class":78,"line":1611},[76,15183,15184],{"class":146},"    \u002F\u002F银行卡密码  私有权限\n",[76,15186,15187],{"class":78,"line":1617},[76,15188,15189],{"class":82},"private:\n",[76,15191,15192,15194],{"class":78,"line":1638},[76,15193,1949],{"class":82},[76,15195,15196],{"class":86}," m_Password;\n",[76,15198,15199],{"class":78,"line":1643},[76,15200,2365],{"emptyLinePlaceholder":2364},[76,15202,15203],{"class":78,"line":1657},[76,15204,14683],{"class":82},[76,15206,15207,15209,15211],{"class":78,"line":1662},[76,15208,14876],{"class":82},[76,15210,11352],{"class":1927},[76,15212,1940],{"class":86},[76,15214,15215],{"class":78,"line":1691},[76,15216,1994],{"class":86},[76,15218,15219,15222,15224,15226],{"class":78,"line":1696},[76,15220,15221],{"class":86},"        m_Name ",[76,15223,133],{"class":82},[76,15225,8905],{"class":192},[76,15227,1254],{"class":86},[76,15229,15230,15233,15235,15238],{"class":78,"line":1713},[76,15231,15232],{"class":86},"        m_Car ",[76,15234,133],{"class":82},[76,15236,15237],{"class":192}," \"拖拉机\"",[76,15239,1254],{"class":86},[76,15241,15242,15245,15247,15250],{"class":78,"line":1718},[76,15243,15244],{"class":86},"        m_Password ",[76,15246,133],{"class":82},[76,15248,15249],{"class":136}," 123456",[76,15251,1254],{"class":86},[76,15253,15254],{"class":78,"line":1723},[76,15255,2151],{"class":86},[76,15257,15258],{"class":78,"line":1728},[76,15259,3960],{"class":86},[76,15261,15262],{"class":78,"line":1742},[76,15263,2365],{"emptyLinePlaceholder":2364},[76,15265,15266,15268,15270],{"class":78,"line":1747},[76,15267,90],{"class":82},[76,15269,1937],{"class":1927},[76,15271,10820],{"class":86},[76,15273,15274],{"class":78,"line":2542},[76,15275,2365],{"emptyLinePlaceholder":2364},[76,15277,15278],{"class":78,"line":2556},[76,15279,15280],{"class":86},"    Person p;\n",[76,15282,15283,15286,15288,15291],{"class":78,"line":2564},[76,15284,15285],{"class":86},"    p.m_Name ",[76,15287,133],{"class":82},[76,15289,15290],{"class":192}," \"李四\"",[76,15292,1254],{"class":86},[76,15294,15295,15298],{"class":78,"line":2569},[76,15296,15297],{"class":146},"    \u002F\u002Fp.m_Car = \"奔驰\";",[76,15299,15300],{"class":146},"  \u002F\u002F保护权限类外访问不到\n",[76,15302,15303,15306],{"class":78,"line":2575},[76,15304,15305],{"class":146},"    \u002F\u002Fp.m_Password = 123;",[76,15307,15308],{"class":146}," \u002F\u002F私有权限类外访问不到\n",[76,15310,15311],{"class":78,"line":2581},[76,15312,2365],{"emptyLinePlaceholder":2364},[76,15314,15315,15317,15319,15321],{"class":78,"line":2586},[76,15316,2267],{"class":1927},[76,15318,87],{"class":86},[76,15320,2272],{"class":192},[76,15322,2684],{"class":86},[76,15324,15325],{"class":78,"line":7915},[76,15326,2365],{"emptyLinePlaceholder":2364},[76,15328,15329,15331,15333],{"class":78,"line":7939},[76,15330,4055],{"class":82},[76,15332,4058],{"class":136},[76,15334,1254],{"class":86},[76,15336,15337],{"class":78,"line":7944},[76,15338,1529],{"class":86},[46,15340,15342],{"id":15341},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[21,15344,15345,15346,15349,15350],{},"在C++中 struct和class唯一的",[237,15347,15348],{},"区别","就在于 ",[237,15351,15352],{},"默认的访问权限不同",[21,15354,15355],{},"区别：",[1095,15357,15358,15361],{},[32,15359,15360],{},"struct 默认权限为公共",[32,15362,15363],{},"class   默认权限为私有",[66,15365,15367],{"className":9908,"code":15366,"language":9910,"meta":71,"style":71},"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",[73,15368,15369,15376,15380,15390,15394,15398,15405,15409,15419,15423,15427,15435,15439,15444,15458,15462,15467,15481,15485,15495,15499,15507],{"__ignoreMap":71},[76,15370,15371,15373],{"class":78,"line":79},[76,15372,14661],{"class":82},[76,15374,15375],{"class":1927}," C1\n",[76,15377,15378],{"class":78,"line":96},[76,15379,1510],{"class":86},[76,15381,15382,15384,15387],{"class":78,"line":1143},[76,15383,1949],{"class":82},[76,15385,15386],{"class":86},"  m_A;",[76,15388,15389],{"class":146}," \u002F\u002F默认是私有权限\n",[76,15391,15392],{"class":78,"line":1158},[76,15393,3960],{"class":86},[76,15395,15396],{"class":78,"line":1164},[76,15397,2365],{"emptyLinePlaceholder":2364},[76,15399,15400,15402],{"class":78,"line":1178},[76,15401,7726],{"class":82},[76,15403,15404],{"class":1927}," C2\n",[76,15406,15407],{"class":78,"line":1184},[76,15408,1510],{"class":86},[76,15410,15411,15413,15416],{"class":78,"line":1275},[76,15412,1949],{"class":82},[76,15414,15415],{"class":86}," m_A;",[76,15417,15418],{"class":146},"  \u002F\u002F默认是公共权限\n",[76,15420,15421],{"class":78,"line":1281},[76,15422,3960],{"class":86},[76,15424,15425],{"class":78,"line":1293},[76,15426,2365],{"emptyLinePlaceholder":2364},[76,15428,15429,15431,15433],{"class":78,"line":1576},[76,15430,90],{"class":82},[76,15432,1937],{"class":1927},[76,15434,10820],{"class":86},[76,15436,15437],{"class":78,"line":1581},[76,15438,2365],{"emptyLinePlaceholder":2364},[76,15440,15441],{"class":78,"line":1587},[76,15442,15443],{"class":86},"    C1 c1;\n",[76,15445,15446,15449,15451,15453,15455],{"class":78,"line":1592},[76,15447,15448],{"class":86},"    c1.m_A ",[76,15450,133],{"class":82},[76,15452,2002],{"class":136},[76,15454,143],{"class":86},[76,15456,15457],{"class":146}," \u002F\u002F错误，访问权限是私有\n",[76,15459,15460],{"class":78,"line":1606},[76,15461,2365],{"emptyLinePlaceholder":2364},[76,15463,15464],{"class":78,"line":1611},[76,15465,15466],{"class":86},"    C2 c2;\n",[76,15468,15469,15472,15474,15476,15478],{"class":78,"line":1617},[76,15470,15471],{"class":86},"    c2.m_A ",[76,15473,133],{"class":82},[76,15475,2002],{"class":136},[76,15477,143],{"class":86},[76,15479,15480],{"class":146}," \u002F\u002F正确，访问权限是公共\n",[76,15482,15483],{"class":78,"line":1638},[76,15484,2365],{"emptyLinePlaceholder":2364},[76,15486,15487,15489,15491,15493],{"class":78,"line":1643},[76,15488,2267],{"class":1927},[76,15490,87],{"class":86},[76,15492,2272],{"class":192},[76,15494,2684],{"class":86},[76,15496,15497],{"class":78,"line":1657},[76,15498,2365],{"emptyLinePlaceholder":2364},[76,15500,15501,15503,15505],{"class":78,"line":1662},[76,15502,4055],{"class":82},[76,15504,4058],{"class":136},[76,15506,1254],{"class":86},[76,15508,15509],{"class":78,"line":1691},[76,15510,1529],{"class":86},[46,15512,15514],{"id":15513},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[21,15516,15517],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[21,15519,15520],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[21,15522,15523],{},[237,15524,15102],{},[66,15526,15528],{"className":9908,"code":15527,"language":9910,"meta":71,"style":71},"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",[73,15529,15530,15540,15544,15548,15553,15567,15576,15580,15590,15594,15601,15605,15609,15613,15618,15627,15634,15638,15643,15659,15682,15695,15702,15706,15715,15719,15723,15728,15744,15754,15758,15762,15766,15774,15778,15788,15792,15800,15804,15808,15816,15820,15824,15829,15842,15865,15869,15874,15887,15909,15913,15918,15932,15940,15944,15954,15958,15966],{"__ignoreMap":71},[76,15531,15532,15534,15537],{"class":78,"line":79},[76,15533,14661],{"class":82},[76,15535,15536],{"class":1927}," Person",[76,15538,15539],{"class":86}," {\n",[76,15541,15542],{"class":78,"line":96},[76,15543,14683],{"class":82},[76,15545,15546],{"class":78,"line":1143},[76,15547,2365],{"emptyLinePlaceholder":2364},[76,15549,15550],{"class":78,"line":1158},[76,15551,15552],{"class":146},"    \u002F\u002F姓名设置可读可写\n",[76,15554,15555,15557,15559,15561,15563,15565],{"class":78,"line":1164},[76,15556,14876],{"class":82},[76,15558,14879],{"class":1927},[76,15560,87],{"class":86},[76,15562,14884],{"class":1927},[76,15564,14887],{"class":5183},[76,15566,12409],{"class":86},[76,15568,15569,15571,15573],{"class":78,"line":1178},[76,15570,15221],{"class":86},[76,15572,133],{"class":82},[76,15574,15575],{"class":86}," name;\n",[76,15577,15578],{"class":78,"line":1184},[76,15579,2151],{"class":86},[76,15581,15582,15585,15588],{"class":78,"line":1275},[76,15583,15584],{"class":1927},"    string",[76,15586,15587],{"class":1927}," getName",[76,15589,1940],{"class":86},[76,15591,15592],{"class":78,"line":1281},[76,15593,1994],{"class":86},[76,15595,15596,15598],{"class":78,"line":1293},[76,15597,14719],{"class":82},[76,15599,15600],{"class":86}," m_Name;\n",[76,15602,15603],{"class":78,"line":1576},[76,15604,2151],{"class":86},[76,15606,15607],{"class":78,"line":1581},[76,15608,2365],{"emptyLinePlaceholder":2364},[76,15610,15611],{"class":78,"line":1587},[76,15612,2365],{"emptyLinePlaceholder":2364},[76,15614,15615],{"class":78,"line":1592},[76,15616,15617],{"class":146},"    \u002F\u002F获取年龄 \n",[76,15619,15620,15622,15625],{"class":78,"line":1606},[76,15621,1949],{"class":82},[76,15623,15624],{"class":1927}," getAge",[76,15626,10820],{"class":86},[76,15628,15629,15631],{"class":78,"line":1611},[76,15630,14719],{"class":82},[76,15632,15633],{"class":86}," m_Age;\n",[76,15635,15636],{"class":78,"line":1617},[76,15637,2151],{"class":86},[76,15639,15640],{"class":78,"line":1638},[76,15641,15642],{"class":146},"    \u002F\u002F设置年龄\n",[76,15644,15645,15647,15650,15652,15654,15657],{"class":78,"line":1643},[76,15646,14876],{"class":82},[76,15648,15649],{"class":1927}," setAge",[76,15651,87],{"class":86},[76,15653,90],{"class":82},[76,15655,15656],{"class":5183}," age",[76,15658,12409],{"class":86},[76,15660,15661,15663,15666,15668,15670,15672,15675,15677,15680],{"class":78,"line":1657},[76,15662,2462],{"class":82},[76,15664,15665],{"class":86}," (age ",[76,15667,998],{"class":82},[76,15669,4058],{"class":136},[76,15671,3220],{"class":82},[76,15673,15674],{"class":86}," age ",[76,15676,1048],{"class":82},[76,15678,15679],{"class":136}," 150",[76,15681,12409],{"class":86},[76,15683,15684,15686,15688,15691,15693],{"class":78,"line":1662},[76,15685,9686],{"class":86},[76,15687,1132],{"class":82},[76,15689,15690],{"class":192}," \"你个老妖精!\"",[76,15692,1408],{"class":82},[76,15694,8807],{"class":86},[76,15696,15697,15700],{"class":78,"line":1691},[76,15698,15699],{"class":82},"            return",[76,15701,1254],{"class":86},[76,15703,15704],{"class":78,"line":1696},[76,15705,2494],{"class":86},[76,15707,15708,15711,15713],{"class":78,"line":1713},[76,15709,15710],{"class":86},"        m_Age ",[76,15712,133],{"class":82},[76,15714,7764],{"class":86},[76,15716,15717],{"class":78,"line":1718},[76,15718,2151],{"class":86},[76,15720,15721],{"class":78,"line":1723},[76,15722,2365],{"emptyLinePlaceholder":2364},[76,15724,15725],{"class":78,"line":1728},[76,15726,15727],{"class":146},"    \u002F\u002F情人设置为只写\n",[76,15729,15730,15732,15735,15737,15739,15742],{"class":78,"line":1742},[76,15731,14876],{"class":82},[76,15733,15734],{"class":1927}," setLover",[76,15736,87],{"class":86},[76,15738,14884],{"class":1927},[76,15740,15741],{"class":5183}," lover",[76,15743,12409],{"class":86},[76,15745,15746,15749,15751],{"class":78,"line":1747},[76,15747,15748],{"class":86},"        m_Lover ",[76,15750,133],{"class":82},[76,15752,15753],{"class":86}," lover;\n",[76,15755,15756],{"class":78,"line":2542},[76,15757,2151],{"class":86},[76,15759,15760],{"class":78,"line":2556},[76,15761,2365],{"emptyLinePlaceholder":2364},[76,15763,15764],{"class":78,"line":2564},[76,15765,15189],{"class":82},[76,15767,15768,15771],{"class":78,"line":2569},[76,15769,15770],{"class":86},"    string m_Name;",[76,15772,15773],{"class":146}," \u002F\u002F可读可写  姓名\n",[76,15775,15776],{"class":78,"line":2575},[76,15777,13177],{"class":86},[76,15779,15780,15782,15785],{"class":78,"line":2581},[76,15781,1949],{"class":82},[76,15783,15784],{"class":86}," m_Age;",[76,15786,15787],{"class":146}," \u002F\u002F只读  年龄\n",[76,15789,15790],{"class":78,"line":2586},[76,15791,2365],{"emptyLinePlaceholder":2364},[76,15793,15794,15797],{"class":78,"line":7915},[76,15795,15796],{"class":86},"    string m_Lover;",[76,15798,15799],{"class":146}," \u002F\u002F只写  情人\n",[76,15801,15802],{"class":78,"line":7939},[76,15803,3960],{"class":86},[76,15805,15806],{"class":78,"line":7944},[76,15807,2365],{"emptyLinePlaceholder":2364},[76,15809,15810,15812,15814],{"class":78,"line":7950},[76,15811,90],{"class":82},[76,15813,1937],{"class":1927},[76,15815,10820],{"class":86},[76,15817,15818],{"class":78,"line":7977},[76,15819,2365],{"emptyLinePlaceholder":2364},[76,15821,15822],{"class":78,"line":7982},[76,15823,15280],{"class":86},[76,15825,15826],{"class":78,"line":7988},[76,15827,15828],{"class":146},"    \u002F\u002F姓名设置\n",[76,15830,15831,15834,15836,15838,15840],{"class":78,"line":8000},[76,15832,15833],{"class":86},"    p.",[76,15835,15033],{"class":1927},[76,15837,87],{"class":86},[76,15839,7883],{"class":192},[76,15841,2684],{"class":86},[76,15843,15844,15846,15848,15851,15853,15856,15859,15861,15863],{"class":78,"line":8012},[76,15845,6496],{"class":86},[76,15847,1132],{"class":82},[76,15849,15850],{"class":192}," \"姓名： \"",[76,15852,1408],{"class":82},[76,15854,15855],{"class":86}," p.",[76,15857,15858],{"class":1927},"getName",[76,15860,13017],{"class":86},[76,15862,1132],{"class":82},[76,15864,8807],{"class":86},[76,15866,15867],{"class":78,"line":8024},[76,15868,2365],{"emptyLinePlaceholder":2364},[76,15870,15871],{"class":78,"line":9683},[76,15872,15873],{"class":146},"    \u002F\u002F年龄设置\n",[76,15875,15876,15878,15881,15883,15885],{"class":78,"line":9708},[76,15877,15833],{"class":86},[76,15879,15880],{"class":1927},"setAge",[76,15882,87],{"class":86},[76,15884,744],{"class":136},[76,15886,2684],{"class":86},[76,15888,15889,15891,15893,15896,15898,15900,15903,15905,15907],{"class":78,"line":9731},[76,15890,6496],{"class":86},[76,15892,1132],{"class":82},[76,15894,15895],{"class":192}," \"年龄： \"",[76,15897,1408],{"class":82},[76,15899,15855],{"class":86},[76,15901,15902],{"class":1927},"getAge",[76,15904,13017],{"class":86},[76,15906,1132],{"class":82},[76,15908,8807],{"class":86},[76,15910,15911],{"class":78,"line":9755},[76,15912,2365],{"emptyLinePlaceholder":2364},[76,15914,15915],{"class":78,"line":9760},[76,15916,15917],{"class":146},"    \u002F\u002F情人设置\n",[76,15919,15920,15922,15925,15927,15930],{"class":78,"line":9765},[76,15921,15833],{"class":86},[76,15923,15924],{"class":1927},"setLover",[76,15926,87],{"class":86},[76,15928,15929],{"class":192},"\"苍井\"",[76,15931,2684],{"class":86},[76,15933,15934,15937],{"class":78,"line":9770},[76,15935,15936],{"class":146},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[76,15938,15939],{"class":146},"  \u002F\u002F只写属性，不可以读取\n",[76,15941,15942],{"class":78,"line":9779},[76,15943,2365],{"emptyLinePlaceholder":2364},[76,15945,15946,15948,15950,15952],{"class":78,"line":9784},[76,15947,2267],{"class":1927},[76,15949,87],{"class":86},[76,15951,2272],{"class":192},[76,15953,2684],{"class":86},[76,15955,15956],{"class":78,"line":9790},[76,15957,2365],{"emptyLinePlaceholder":2364},[76,15959,15960,15962,15964],{"class":78,"line":9811},[76,15961,4055],{"class":82},[76,15963,4058],{"class":136},[76,15965,1254],{"class":86},[76,15967,15968],{"class":78,"line":9817},[76,15969,1529],{"class":86},[46,15971,15973],{"id":15972},"_814封装案例","8.1.4封装案例",[29,15975,15976],{},[32,15977,15978,15981],{},[237,15979,15980],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1095,15983,15984,15987],{},[32,15985,15986],{},"求出立方体的面积和体积",[32,15988,15989],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[66,15991,15993],{"className":68,"code":15992,"language":70,"meta":71,"style":71},"#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",[73,15994,15995,16001,16011,16018,16022,16026,16031,16061,16065,16075,16085,16095,16099,16108,16112,16148,16152,16161,16165,16181,16185,16190,16199,16203,16210,16214,16223,16227,16234,16238,16247,16251,16258,16262,16267,16284,16288,16334,16338,16347,16351,16355,16359,16368,16372,16376,16381,16385,16391,16397,16403,16407,16411,16416,16438,16442,16496,16500,16508,16512,16517,16522,16535,16542,16558,16569,16575,16598,16604,16627,16641,16661,16667,16678,16701,16723,16728,16734,16748,16761,16766,16780,16785,16791,16796,16810,16815,16820,16834,16846,16851,16864,16869,16874,16879,16892,16897],{"__ignoreMap":71},[76,15996,15997,15999],{"class":78,"line":79},[76,15998,1913],{"class":82},[76,16000,1916],{"class":192},[76,16002,16003,16005,16007,16009],{"class":78,"line":96},[76,16004,1921],{"class":82},[76,16006,1924],{"class":82},[76,16008,1928],{"class":1927},[76,16010,1254],{"class":86},[76,16012,16013,16015],{"class":78,"line":1143},[76,16014,14661],{"class":82},[76,16016,16017],{"class":1927}," Cube\n",[76,16019,16020],{"class":78,"line":1158},[76,16021,1510],{"class":86},[76,16023,16024],{"class":78,"line":1164},[76,16025,14683],{"class":82},[76,16027,16028],{"class":78,"line":1178},[76,16029,16030],{"class":146},"    \u002F\u002F输入长宽高\n",[76,16032,16033,16035,16038,16040,16042,16045,16047,16049,16052,16054,16056,16059],{"class":78,"line":1184},[76,16034,14876],{"class":82},[76,16036,16037],{"class":1927}," setLwh",[76,16039,87],{"class":86},[76,16041,90],{"class":82},[76,16043,16044],{"class":5183}," l",[76,16046,466],{"class":86},[76,16048,90],{"class":82},[76,16050,16051],{"class":5183}," w",[76,16053,466],{"class":86},[76,16055,90],{"class":82},[76,16057,16058],{"class":5183}," h",[76,16060,93],{"class":86},[76,16062,16063],{"class":78,"line":1275},[76,16064,1994],{"class":86},[76,16066,16067,16070,16072],{"class":78,"line":1281},[76,16068,16069],{"class":86},"        m_L",[76,16071,133],{"class":82},[76,16073,16074],{"class":86},"l;\n",[76,16076,16077,16080,16082],{"class":78,"line":1293},[76,16078,16079],{"class":86},"        m_W",[76,16081,133],{"class":82},[76,16083,16084],{"class":86},"w;\n",[76,16086,16087,16090,16092],{"class":78,"line":1576},[76,16088,16089],{"class":86},"        m_H",[76,16091,133],{"class":82},[76,16093,16094],{"class":86},"h;\n",[76,16096,16097],{"class":78,"line":1581},[76,16098,2151],{"class":86},[76,16100,16101,16103,16106],{"class":78,"line":1587},[76,16102,1949],{"class":82},[76,16104,16105],{"class":1927}," mianji",[76,16107,1940],{"class":86},[76,16109,16110],{"class":78,"line":1592},[76,16111,1994],{"class":86},[76,16113,16114,16116,16118,16120,16123,16125,16128,16130,16133,16135,16138,16140,16143,16145],{"class":78,"line":1606},[76,16115,14719],{"class":82},[76,16117,14722],{"class":136},[76,16119,543],{"class":82},[76,16121,16122],{"class":86},"(m_L",[76,16124,543],{"class":82},[76,16126,16127],{"class":86},"m_W ",[76,16129,569],{"class":82},[76,16131,16132],{"class":86}," m_L",[76,16134,543],{"class":82},[76,16136,16137],{"class":86},"m_H ",[76,16139,569],{"class":82},[76,16141,16142],{"class":86}," m_W",[76,16144,543],{"class":82},[76,16146,16147],{"class":86},"m_H);\n",[76,16149,16150],{"class":78,"line":1611},[76,16151,2151],{"class":86},[76,16153,16154,16156,16159],{"class":78,"line":1617},[76,16155,1949],{"class":82},[76,16157,16158],{"class":1927}," tiji",[76,16160,1940],{"class":86},[76,16162,16163],{"class":78,"line":1638},[76,16164,1994],{"class":86},[76,16166,16167,16169,16171,16173,16176,16178],{"class":78,"line":1643},[76,16168,14719],{"class":82},[76,16170,16132],{"class":86},[76,16172,543],{"class":82},[76,16174,16175],{"class":86},"m_W",[76,16177,543],{"class":82},[76,16179,16180],{"class":86},"m_H;\n",[76,16182,16183],{"class":78,"line":1657},[76,16184,2151],{"class":86},[76,16186,16187],{"class":78,"line":1662},[76,16188,16189],{"class":146},"    \u002F\u002F获取长宽高\n",[76,16191,16192,16194,16197],{"class":78,"line":1691},[76,16193,1949],{"class":82},[76,16195,16196],{"class":1927}," getLength",[76,16198,1940],{"class":86},[76,16200,16201],{"class":78,"line":1696},[76,16202,1994],{"class":86},[76,16204,16205,16207],{"class":78,"line":1713},[76,16206,14719],{"class":82},[76,16208,16209],{"class":86}," m_L;\n",[76,16211,16212],{"class":78,"line":1718},[76,16213,2151],{"class":86},[76,16215,16216,16218,16221],{"class":78,"line":1723},[76,16217,1949],{"class":82},[76,16219,16220],{"class":1927}," getWidth",[76,16222,1940],{"class":86},[76,16224,16225],{"class":78,"line":1728},[76,16226,1994],{"class":86},[76,16228,16229,16231],{"class":78,"line":1742},[76,16230,14719],{"class":82},[76,16232,16233],{"class":86}," m_W;\n",[76,16235,16236],{"class":78,"line":1747},[76,16237,2151],{"class":86},[76,16239,16240,16242,16245],{"class":78,"line":2542},[76,16241,1949],{"class":82},[76,16243,16244],{"class":1927}," getHeight",[76,16246,1940],{"class":86},[76,16248,16249],{"class":78,"line":2556},[76,16250,1994],{"class":86},[76,16252,16253,16255],{"class":78,"line":2564},[76,16254,14719],{"class":82},[76,16256,16257],{"class":86}," m_H;\n",[76,16259,16260],{"class":78,"line":2569},[76,16261,2151],{"class":86},[76,16263,16264],{"class":78,"line":2575},[76,16265,16266],{"class":146},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[76,16268,16269,16272,16275,16277,16280,16282],{"class":78,"line":2581},[76,16270,16271],{"class":82},"    bool",[76,16273,16274],{"class":1927}," isEqual",[76,16276,87],{"class":86},[76,16278,16279],{"class":1927},"Cube",[76,16281,2814],{"class":5183},[76,16283,93],{"class":86},[76,16285,16286],{"class":78,"line":2586},[76,16287,1994],{"class":86},[76,16289,16290,16292,16295,16298,16300,16302,16305,16307,16310,16313,16315,16317,16320,16322,16324,16327,16329,16331],{"class":78,"line":7915},[76,16291,2462],{"class":82},[76,16293,16294],{"class":86}," (c.",[76,16296,16297],{"class":1927},"getLength",[76,16299,13017],{"class":86},[76,16301,2914],{"class":82},[76,16303,16304],{"class":86}," m_L ",[76,16306,1679],{"class":82},[76,16308,16309],{"class":86}," c.",[76,16311,16312],{"class":1927},"getWidth",[76,16314,13017],{"class":86},[76,16316,2914],{"class":82},[76,16318,16319],{"class":86}," m_W ",[76,16321,1679],{"class":82},[76,16323,16309],{"class":86},[76,16325,16326],{"class":1927},"getHeight",[76,16328,13017],{"class":86},[76,16330,2914],{"class":82},[76,16332,16333],{"class":86}," m_H)\n",[76,16335,16336],{"class":78,"line":7939},[76,16337,2475],{"class":86},[76,16339,16340,16342,16345],{"class":78,"line":7944},[76,16341,15699],{"class":82},[76,16343,16344],{"class":136}," true",[76,16346,1254],{"class":86},[76,16348,16349],{"class":78,"line":7950},[76,16350,2494],{"class":86},[76,16352,16353],{"class":78,"line":7977},[76,16354,2535],{"class":82},[76,16356,16357],{"class":78,"line":7982},[76,16358,2475],{"class":86},[76,16360,16361,16363,16366],{"class":78,"line":7988},[76,16362,15699],{"class":82},[76,16364,16365],{"class":136}," false",[76,16367,1254],{"class":86},[76,16369,16370],{"class":78,"line":8000},[76,16371,2494],{"class":86},[76,16373,16374],{"class":78,"line":8012},[76,16375,2151],{"class":86},[76,16377,16378],{"class":78,"line":8024},[76,16379,16380],{"class":146},"    \u002F\u002F私有属性\n",[76,16382,16383],{"class":78,"line":9683},[76,16384,15189],{"class":82},[76,16386,16387,16389],{"class":78,"line":9708},[76,16388,1949],{"class":82},[76,16390,16209],{"class":86},[76,16392,16393,16395],{"class":78,"line":9731},[76,16394,1949],{"class":82},[76,16396,16233],{"class":86},[76,16398,16399,16401],{"class":78,"line":9755},[76,16400,1949],{"class":82},[76,16402,16257],{"class":86},[76,16404,16405],{"class":78,"line":9760},[76,16406,2365],{"emptyLinePlaceholder":2364},[76,16408,16409],{"class":78,"line":9765},[76,16410,3960],{"class":86},[76,16412,16413],{"class":78,"line":9770},[76,16414,16415],{"class":146},"\u002F\u002F全局函数判断两个立方体是否相等\n",[76,16417,16418,16420,16422,16424,16426,16429,16431,16433,16436],{"class":78,"line":9779},[76,16419,1318],{"class":82},[76,16421,16274],{"class":1927},[76,16423,87],{"class":86},[76,16425,16279],{"class":1927},[76,16427,16428],{"class":5183}," c1",[76,16430,466],{"class":86},[76,16432,16279],{"class":1927},[76,16434,16435],{"class":5183}," c2",[76,16437,93],{"class":86},[76,16439,16440],{"class":78,"line":9784},[76,16441,1510],{"class":86},[76,16443,16444,16446,16449,16451,16453,16455,16458,16460,16463,16465,16467,16469,16471,16473,16475,16477,16479,16481,16483,16485,16487,16489,16491,16493],{"class":78,"line":9790},[76,16445,4055],{"class":82},[76,16447,16448],{"class":86}," (c1.",[76,16450,16297],{"class":1927},[76,16452,13017],{"class":86},[76,16454,2914],{"class":82},[76,16456,16457],{"class":86}," c2.",[76,16459,16297],{"class":1927},[76,16461,16462],{"class":86},"()) ",[76,16464,1679],{"class":82},[76,16466,16448],{"class":86},[76,16468,16312],{"class":1927},[76,16470,13017],{"class":86},[76,16472,2914],{"class":82},[76,16474,16457],{"class":86},[76,16476,16312],{"class":1927},[76,16478,16462],{"class":86},[76,16480,1679],{"class":82},[76,16482,16448],{"class":86},[76,16484,16326],{"class":1927},[76,16486,13017],{"class":86},[76,16488,2914],{"class":82},[76,16490,16457],{"class":86},[76,16492,16326],{"class":1927},[76,16494,16495],{"class":86},"());\n",[76,16497,16498],{"class":78,"line":9811},[76,16499,1529],{"class":86},[76,16501,16502,16504,16506],{"class":78,"line":9817},[76,16503,90],{"class":82},[76,16505,1937],{"class":1927},[76,16507,1940],{"class":86},[76,16509,16510],{"class":78,"line":9831},[76,16511,1510],{"class":86},[76,16513,16514],{"class":78,"line":9837},[76,16515,16516],{"class":86},"    Cube c1;\n",[76,16518,16519],{"class":78,"line":9864},[76,16520,16521],{"class":146},"    \u002F\u002F输入立方体的长宽高\n",[76,16523,16524,16526,16528,16531,16533],{"class":78,"line":9873},[76,16525,1515],{"class":86},[76,16527,1132],{"class":82},[76,16529,16530],{"class":192},"\"请输入第一个立方体的长、宽、高：\"",[76,16532,1132],{"class":82},[76,16534,1155],{"class":86},[76,16536,16537,16539],{"class":78,"line":9879},[76,16538,1949],{"class":82},[76,16540,16541],{"class":86}," l,w,h,l1,w1,h1;\n",[76,16543,16544,16546,16548,16550,16552,16554,16556],{"class":78,"line":9887},[76,16545,1976],{"class":86},[76,16547,1393],{"class":82},[76,16549,606],{"class":86},[76,16551,1393],{"class":82},[76,16553,883],{"class":86},[76,16555,1393],{"class":82},[76,16557,16094],{"class":86},[76,16559,16560,16563,16566],{"class":78,"line":9892},[76,16561,16562],{"class":86},"    c1.",[76,16564,16565],{"class":1927},"setLwh",[76,16567,16568],{"class":86},"(l,w,h);\n",[76,16570,16572],{"class":78,"line":16571},66,[76,16573,16574],{"class":146},"    \u002F\u002F面积\n",[76,16576,16578,16580,16582,16585,16587,16589,16592,16594,16596],{"class":78,"line":16577},67,[76,16579,1515],{"class":86},[76,16581,1132],{"class":82},[76,16583,16584],{"class":192},"\"立方体的表面积为：\"",[76,16586,1132],{"class":82},[76,16588,14797],{"class":86},[76,16590,16591],{"class":1927},"mianji",[76,16593,2392],{"class":86},[76,16595,1132],{"class":82},[76,16597,1155],{"class":86},[76,16599,16601],{"class":78,"line":16600},68,[76,16602,16603],{"class":146},"    \u002F\u002F体积\n",[76,16605,16607,16609,16611,16614,16616,16618,16621,16623,16625],{"class":78,"line":16606},69,[76,16608,1515],{"class":86},[76,16610,1132],{"class":82},[76,16612,16613],{"class":192},"\"立方体的体积为：\"",[76,16615,1132],{"class":82},[76,16617,14797],{"class":86},[76,16619,16620],{"class":1927},"tiji",[76,16622,2392],{"class":86},[76,16624,1132],{"class":82},[76,16626,1155],{"class":86},[76,16628,16630,16632,16634,16637,16639],{"class":78,"line":16629},70,[76,16631,1515],{"class":86},[76,16633,1132],{"class":82},[76,16635,16636],{"class":192},"\"请输入第二个立方体的长、宽、高：\"",[76,16638,1132],{"class":82},[76,16640,1155],{"class":86},[76,16642,16644,16646,16648,16651,16653,16656,16658],{"class":78,"line":16643},71,[76,16645,1976],{"class":86},[76,16647,1393],{"class":82},[76,16649,16650],{"class":86},"l1",[76,16652,1393],{"class":82},[76,16654,16655],{"class":86},"w1",[76,16657,1393],{"class":82},[76,16659,16660],{"class":86},"h1;\n",[76,16662,16664],{"class":78,"line":16663},72,[76,16665,16666],{"class":86},"    Cube c2;\n",[76,16668,16670,16673,16675],{"class":78,"line":16669},73,[76,16671,16672],{"class":86},"    c2.",[76,16674,16565],{"class":1927},[76,16676,16677],{"class":86},"(l1,w1,h1);\n",[76,16679,16681,16683,16685,16688,16690,16693,16695,16697,16699],{"class":78,"line":16680},74,[76,16682,1515],{"class":86},[76,16684,1132],{"class":82},[76,16686,16687],{"class":192},"\"第二个立方体的表面积为：\"",[76,16689,1132],{"class":82},[76,16691,16692],{"class":86},"c2.",[76,16694,16591],{"class":1927},[76,16696,2392],{"class":86},[76,16698,1132],{"class":82},[76,16700,1155],{"class":86},[76,16702,16704,16706,16708,16711,16713,16715,16717,16719,16721],{"class":78,"line":16703},75,[76,16705,1515],{"class":86},[76,16707,1132],{"class":82},[76,16709,16710],{"class":192},"\"第二个立方体的体积为：\"",[76,16712,1132],{"class":82},[76,16714,16692],{"class":86},[76,16716,16620],{"class":1927},[76,16718,2392],{"class":86},[76,16720,1132],{"class":82},[76,16722,1155],{"class":86},[76,16724,16726],{"class":78,"line":16725},76,[76,16727,2365],{"emptyLinePlaceholder":2364},[76,16729,16731],{"class":78,"line":16730},77,[76,16732,16733],{"class":146},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[76,16735,16737,16739,16741,16744,16746],{"class":78,"line":16736},78,[76,16738,1515],{"class":86},[76,16740,1132],{"class":82},[76,16742,16743],{"class":192},"\"内部函数判断结果：\"",[76,16745,1132],{"class":82},[76,16747,1155],{"class":86},[76,16749,16751,16753,16755,16758],{"class":78,"line":16750},79,[76,16752,3066],{"class":82},[76,16754,16448],{"class":86},[76,16756,16757],{"class":1927},"isEqual",[76,16759,16760],{"class":86},"(c2))\n",[76,16762,16764],{"class":78,"line":16763},80,[76,16765,1994],{"class":86},[76,16767,16769,16771,16773,16776,16778],{"class":78,"line":16768},81,[76,16770,3416],{"class":86},[76,16772,1132],{"class":82},[76,16774,16775],{"class":192},"\"两个立方体相等\"",[76,16777,1132],{"class":82},[76,16779,1155],{"class":86},[76,16781,16783],{"class":78,"line":16782},82,[76,16784,2151],{"class":86},[76,16786,16788],{"class":78,"line":16787},83,[76,16789,16790],{"class":82},"    else\n",[76,16792,16794],{"class":78,"line":16793},84,[76,16795,1994],{"class":86},[76,16797,16799,16801,16803,16806,16808],{"class":78,"line":16798},85,[76,16800,3416],{"class":86},[76,16802,1132],{"class":82},[76,16804,16805],{"class":192},"\"两个立方体不相等\"",[76,16807,1132],{"class":82},[76,16809,1155],{"class":86},[76,16811,16813],{"class":78,"line":16812},86,[76,16814,2151],{"class":86},[76,16816,16818],{"class":78,"line":16817},87,[76,16819,2365],{"emptyLinePlaceholder":2364},[76,16821,16823,16825,16827,16830,16832],{"class":78,"line":16822},88,[76,16824,1515],{"class":86},[76,16826,1132],{"class":82},[76,16828,16829],{"class":192},"\"全局函数判断结果：\"",[76,16831,1132],{"class":82},[76,16833,1155],{"class":86},[76,16835,16837,16839,16841,16843],{"class":78,"line":16836},89,[76,16838,3066],{"class":82},[76,16840,1622],{"class":86},[76,16842,16757],{"class":1927},[76,16844,16845],{"class":86},"(c1, c2))\n",[76,16847,16849],{"class":78,"line":16848},90,[76,16850,1994],{"class":86},[76,16852,16854,16856,16858,16860,16862],{"class":78,"line":16853},91,[76,16855,3416],{"class":86},[76,16857,1132],{"class":82},[76,16859,16775],{"class":192},[76,16861,1132],{"class":82},[76,16863,1155],{"class":86},[76,16865,16867],{"class":78,"line":16866},92,[76,16868,2151],{"class":86},[76,16870,16872],{"class":78,"line":16871},93,[76,16873,16790],{"class":82},[76,16875,16877],{"class":78,"line":16876},94,[76,16878,1994],{"class":86},[76,16880,16882,16884,16886,16888,16890],{"class":78,"line":16881},95,[76,16883,3416],{"class":86},[76,16885,1132],{"class":82},[76,16887,16805],{"class":192},[76,16889,1132],{"class":82},[76,16891,1155],{"class":86},[76,16893,16895],{"class":78,"line":16894},96,[76,16896,2151],{"class":86},[76,16898,16900],{"class":78,"line":16899},97,[76,16901,1529],{"class":86},[29,16903,16904],{"start":96},[32,16905,16906],{},[237,16907,16908],{},"练习案例2：点和圆的关系",[1095,16910,16911],{},[32,16912,16913],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[66,16915,16917],{"className":68,"code":16916,"language":70,"meta":71,"style":71},"#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",[73,16918,16919,16925,16935,16942,16949,16953,16957,16962,16996,17001,17017,17031,17035,17039,17046,17053,17057,17063,17067,17071,17075,17097,17120,17125,17139,17154,17158,17162,17168,17173,17178,17182,17208,17212,17242,17270,17298,17315,17319,17332,17336,17340,17344,17357,17361,17365,17373,17377,17381,17385,17390,17394,17405,17412,17421,17431,17442,17449,17462,17473,17483,17494,17501,17515,17520,17530,17538],{"__ignoreMap":71},[76,16920,16921,16923],{"class":78,"line":79},[76,16922,1913],{"class":82},[76,16924,1916],{"class":192},[76,16926,16927,16929,16931,16933],{"class":78,"line":96},[76,16928,1921],{"class":82},[76,16930,1924],{"class":82},[76,16932,1928],{"class":1927},[76,16934,1254],{"class":86},[76,16936,16937,16939],{"class":78,"line":1143},[76,16938,1913],{"class":82},[76,16940,16941],{"class":192},"\u003Ccmath>\n",[76,16943,16944,16946],{"class":78,"line":1158},[76,16945,14661],{"class":82},[76,16947,16948],{"class":1927}," Point\n",[76,16950,16951],{"class":78,"line":1164},[76,16952,1510],{"class":86},[76,16954,16955],{"class":78,"line":1178},[76,16956,14683],{"class":82},[76,16958,16959],{"class":78,"line":1184},[76,16960,16961],{"class":146},"    \u002F\u002F赋值\n",[76,16963,16964,16966,16969,16971,16973,16976,16978,16980,16983,16986,16988,16991,16993],{"class":78,"line":1275},[76,16965,14876],{"class":82},[76,16967,16968],{"class":1927}," setPoint",[76,16970,87],{"class":86},[76,16972,14004],{"class":82},[76,16974,16975],{"class":5183}," x",[76,16977,12402],{"class":86},[76,16979,14004],{"class":82},[76,16981,16982],{"class":5183}," y",[76,16984,16985],{"class":86},") { m_x ",[76,16987,133],{"class":82},[76,16989,16990],{"class":86}," x; m_y ",[76,16992,133],{"class":82},[76,16994,16995],{"class":86}," y; }\n",[76,16997,16998],{"class":78,"line":1281},[76,16999,17000],{"class":146},"    \u002F\u002F获取坐标\n",[76,17002,17003,17005,17008,17011,17014],{"class":78,"line":1293},[76,17004,14705],{"class":82},[76,17006,17007],{"class":1927}," getX",[76,17009,17010],{"class":86},"() { ",[76,17012,17013],{"class":82},"return",[76,17015,17016],{"class":86}," m_x; }\n",[76,17018,17019,17021,17024,17026,17028],{"class":78,"line":1576},[76,17020,14705],{"class":82},[76,17022,17023],{"class":1927}," getY",[76,17025,17010],{"class":86},[76,17027,17013],{"class":82},[76,17029,17030],{"class":86}," m_y; }\n",[76,17032,17033],{"class":78,"line":1581},[76,17034,2365],{"emptyLinePlaceholder":2364},[76,17036,17037],{"class":78,"line":1587},[76,17038,15189],{"class":82},[76,17040,17041,17043],{"class":78,"line":1592},[76,17042,14705],{"class":82},[76,17044,17045],{"class":86}," m_x;\n",[76,17047,17048,17050],{"class":78,"line":1606},[76,17049,14705],{"class":82},[76,17051,17052],{"class":86}," m_y;\n",[76,17054,17055],{"class":78,"line":1611},[76,17056,3960],{"class":86},[76,17058,17059,17061],{"class":78,"line":1617},[76,17060,14661],{"class":82},[76,17062,14664],{"class":1927},[76,17064,17065],{"class":78,"line":1638},[76,17066,1510],{"class":86},[76,17068,17069],{"class":78,"line":1643},[76,17070,14683],{"class":82},[76,17072,17073],{"class":78,"line":1657},[76,17074,16961],{"class":146},[76,17076,17077,17079,17082,17084,17086,17089,17092,17094],{"class":78,"line":1662},[76,17078,14876],{"class":82},[76,17080,17081],{"class":1927}," setRadius",[76,17083,87],{"class":86},[76,17085,14004],{"class":82},[76,17087,17088],{"class":5183}," r",[76,17090,17091],{"class":86},") { m_r ",[76,17093,133],{"class":82},[76,17095,17096],{"class":86}," r; }\n",[76,17098,17099,17101,17104,17106,17109,17112,17115,17117],{"class":78,"line":1691},[76,17100,14876],{"class":82},[76,17102,17103],{"class":1927}," setCenter",[76,17105,87],{"class":86},[76,17107,17108],{"class":1927},"Point",[76,17110,17111],{"class":5183}," center",[76,17113,17114],{"class":86},") { m_center ",[76,17116,133],{"class":82},[76,17118,17119],{"class":86}," center; }\n",[76,17121,17122],{"class":78,"line":1696},[76,17123,17124],{"class":146},"    \u002F\u002F获取属性\n",[76,17126,17127,17129,17132,17134,17136],{"class":78,"line":1713},[76,17128,14705],{"class":82},[76,17130,17131],{"class":1927}," getRadius",[76,17133,17010],{"class":86},[76,17135,17013],{"class":82},[76,17137,17138],{"class":86}," m_r; }\n",[76,17140,17141,17144,17147,17149,17151],{"class":78,"line":1718},[76,17142,17143],{"class":1927},"    Point",[76,17145,17146],{"class":1927}," getCenter",[76,17148,17010],{"class":86},[76,17150,17013],{"class":82},[76,17152,17153],{"class":86}," m_center; }\n",[76,17155,17156],{"class":78,"line":1723},[76,17157,2365],{"emptyLinePlaceholder":2364},[76,17159,17160],{"class":78,"line":1728},[76,17161,15189],{"class":82},[76,17163,17164,17166],{"class":78,"line":1742},[76,17165,14705],{"class":82},[76,17167,14695],{"class":86},[76,17169,17170],{"class":78,"line":1747},[76,17171,17172],{"class":146},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[76,17174,17175],{"class":78,"line":2542},[76,17176,17177],{"class":86},"    Point m_center;\n",[76,17179,17180],{"class":78,"line":2556},[76,17181,3960],{"class":86},[76,17183,17184,17186,17189,17191,17194,17196,17198,17200,17202,17204,17206],{"class":78,"line":2564},[76,17185,5331],{"class":82},[76,17187,17188],{"class":1927}," isInCircle",[76,17190,87],{"class":86},[76,17192,17193],{"class":1927},"Circle",[76,17195,10551],{"class":82},[76,17197,376],{"class":5183},[76,17199,466],{"class":86},[76,17201,17108],{"class":1927},[76,17203,10551],{"class":82},[76,17205,21],{"class":5183},[76,17207,93],{"class":86},[76,17209,17210],{"class":78,"line":2569},[76,17211,1510],{"class":86},[76,17213,17214,17216,17219,17221,17223,17226,17229,17232,17234,17236,17238,17240],{"class":78,"line":2575},[76,17215,14705],{"class":82},[76,17217,17218],{"class":86}," dx ",[76,17220,133],{"class":82},[76,17222,16309],{"class":86},[76,17224,17225],{"class":1927},"getCenter",[76,17227,17228],{"class":86},"().",[76,17230,17231],{"class":1927},"getX",[76,17233,13017],{"class":86},[76,17235,620],{"class":82},[76,17237,15855],{"class":86},[76,17239,17231],{"class":1927},[76,17241,5603],{"class":86},[76,17243,17244,17246,17249,17251,17253,17255,17257,17260,17262,17264,17266,17268],{"class":78,"line":2581},[76,17245,14705],{"class":82},[76,17247,17248],{"class":86}," dy ",[76,17250,133],{"class":82},[76,17252,16309],{"class":86},[76,17254,17225],{"class":1927},[76,17256,17228],{"class":86},[76,17258,17259],{"class":1927},"getY",[76,17261,13017],{"class":86},[76,17263,620],{"class":82},[76,17265,15855],{"class":86},[76,17267,17259],{"class":1927},[76,17269,5603],{"class":86},[76,17271,17272,17274,17277,17279,17282,17285,17287,17289,17291,17293,17295],{"class":78,"line":2586},[76,17273,14705],{"class":82},[76,17275,17276],{"class":86}," distance ",[76,17278,133],{"class":82},[76,17280,17281],{"class":1927}," sqrt",[76,17283,17284],{"class":86},"(dx ",[76,17286,543],{"class":82},[76,17288,17218],{"class":86},[76,17290,569],{"class":82},[76,17292,17248],{"class":86},[76,17294,543],{"class":82},[76,17296,17297],{"class":86}," dy);\n",[76,17299,17300,17302,17305,17307,17309,17312],{"class":78,"line":7915},[76,17301,3066],{"class":82},[76,17303,17304],{"class":86}," (distance ",[76,17306,998],{"class":82},[76,17308,16309],{"class":86},[76,17310,17311],{"class":1927},"getRadius",[76,17313,17314],{"class":86},"())\n",[76,17316,17317],{"class":78,"line":7939},[76,17318,1994],{"class":86},[76,17320,17321,17323,17325,17328,17330],{"class":78,"line":7944},[76,17322,9636],{"class":86},[76,17324,1132],{"class":82},[76,17326,17327],{"class":192}," \"点在圆内\"",[76,17329,1408],{"class":82},[76,17331,8807],{"class":86},[76,17333,17334],{"class":78,"line":7950},[76,17335,2151],{"class":86},[76,17337,17338],{"class":78,"line":7977},[76,17339,16790],{"class":82},[76,17341,17342],{"class":78,"line":7982},[76,17343,1994],{"class":86},[76,17345,17346,17348,17350,17353,17355],{"class":78,"line":7988},[76,17347,9636],{"class":86},[76,17349,1132],{"class":82},[76,17351,17352],{"class":192}," \"点在圆外\"",[76,17354,1408],{"class":82},[76,17356,8807],{"class":86},[76,17358,17359],{"class":78,"line":8000},[76,17360,2151],{"class":86},[76,17362,17363],{"class":78,"line":8012},[76,17364,1529],{"class":86},[76,17366,17367,17369,17371],{"class":78,"line":8024},[76,17368,90],{"class":82},[76,17370,1937],{"class":1927},[76,17372,1940],{"class":86},[76,17374,17375],{"class":78,"line":9683},[76,17376,1510],{"class":86},[76,17378,17379],{"class":78,"line":9708},[76,17380,15020],{"class":146},[76,17382,17383],{"class":78,"line":9731},[76,17384,14767],{"class":86},[76,17386,17387],{"class":78,"line":9755},[76,17388,17389],{"class":86},"    Point p1;\n",[76,17391,17392],{"class":78,"line":9760},[76,17393,16961],{"class":146},[76,17395,17396,17398,17400,17403],{"class":78,"line":9765},[76,17397,1515],{"class":86},[76,17399,1132],{"class":82},[76,17401,17402],{"class":192},"\"请输入圆的半径：\"",[76,17404,1254],{"class":86},[76,17406,17407,17409],{"class":78,"line":9770},[76,17408,14705],{"class":82},[76,17410,17411],{"class":86}," r;\n",[76,17413,17414,17416,17418],{"class":78,"line":9779},[76,17415,1976],{"class":86},[76,17417,1393],{"class":82},[76,17419,17420],{"class":86},"r;\n",[76,17422,17423,17425,17428],{"class":78,"line":9784},[76,17424,16562],{"class":86},[76,17426,17427],{"class":1927},"setRadius",[76,17429,17430],{"class":86},"(r);\n",[76,17432,17433,17435,17437,17440],{"class":78,"line":9790},[76,17434,1515],{"class":86},[76,17436,1132],{"class":82},[76,17438,17439],{"class":192},"\"请输入圆心坐标：\"",[76,17441,1254],{"class":86},[76,17443,17444,17446],{"class":78,"line":9811},[76,17445,14705],{"class":82},[76,17447,17448],{"class":86}," x, y;\n",[76,17450,17451,17453,17455,17457,17459],{"class":78,"line":9817},[76,17452,1976],{"class":86},[76,17454,1393],{"class":82},[76,17456,908],{"class":86},[76,17458,1393],{"class":82},[76,17460,17461],{"class":86},"y;\n",[76,17463,17464,17467,17470],{"class":78,"line":9831},[76,17465,17466],{"class":86},"    p1.",[76,17468,17469],{"class":1927},"setPoint",[76,17471,17472],{"class":86},"(x, y);\n",[76,17474,17475,17477,17480],{"class":78,"line":9837},[76,17476,16562],{"class":86},[76,17478,17479],{"class":1927},"setCenter",[76,17481,17482],{"class":86},"(p1);\n",[76,17484,17485,17487,17489,17492],{"class":78,"line":9864},[76,17486,1515],{"class":86},[76,17488,1132],{"class":82},[76,17490,17491],{"class":192},"\"请输入测试点坐标：\"",[76,17493,1254],{"class":86},[76,17495,17496,17498],{"class":78,"line":9873},[76,17497,14705],{"class":82},[76,17499,17500],{"class":86}," x1, y1;\n",[76,17502,17503,17505,17507,17510,17512],{"class":78,"line":9879},[76,17504,1976],{"class":86},[76,17506,1393],{"class":82},[76,17508,17509],{"class":86},"x1",[76,17511,1393],{"class":82},[76,17513,17514],{"class":86},"y1;\n",[76,17516,17517],{"class":78,"line":9887},[76,17518,17519],{"class":86},"    Point p2;\n",[76,17521,17522,17525,17527],{"class":78,"line":9892},[76,17523,17524],{"class":86},"    p2.",[76,17526,17469],{"class":1927},[76,17528,17529],{"class":86},"(x1, y1);\n",[76,17531,17532,17535],{"class":78,"line":16571},[76,17533,17534],{"class":1927},"    isInCircle",[76,17536,17537],{"class":86},"(c1, p2);\n",[76,17539,17540],{"class":78,"line":16577},[76,17541,1529],{"class":86},[21,17543,17544],{},"在类中可以让另一个类作为本来的成员",[21,17546,17547],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[21,17549,17550],{},"创建point.h",[66,17552,17554],{"className":68,"code":17553,"language":70,"meta":71,"style":71},"#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",[73,17555,17556,17567,17573,17583,17589,17593,17598,17602,17606,17626,17630,17638,17646,17650,17654,17660,17666],{"__ignoreMap":71},[76,17557,17558,17561,17564],{"class":78,"line":79},[76,17559,17560],{"class":82},"#pragma",[76,17562,17563],{"class":1927}," once",[76,17565,17566],{"class":146}," \u002F\u002F防止头文件重复包含\n",[76,17568,17569,17571],{"class":78,"line":96},[76,17570,1913],{"class":82},[76,17572,1916],{"class":192},[76,17574,17575,17577,17579,17581],{"class":78,"line":1143},[76,17576,1921],{"class":82},[76,17578,1924],{"class":82},[76,17580,1928],{"class":1927},[76,17582,1254],{"class":86},[76,17584,17585,17587],{"class":78,"line":1158},[76,17586,14661],{"class":82},[76,17588,16948],{"class":1927},[76,17590,17591],{"class":78,"line":1164},[76,17592,1510],{"class":86},[76,17594,17595],{"class":78,"line":1178},[76,17596,17597],{"class":146},"\u002F\u002F做好声明与变量定义就可以\n",[76,17599,17600],{"class":78,"line":1184},[76,17601,14683],{"class":82},[76,17603,17604],{"class":78,"line":1275},[76,17605,16961],{"class":146},[76,17607,17608,17610,17612,17614,17616,17618,17620,17622,17624],{"class":78,"line":1281},[76,17609,14876],{"class":82},[76,17611,16968],{"class":1927},[76,17613,87],{"class":86},[76,17615,14004],{"class":82},[76,17617,16975],{"class":5183},[76,17619,12402],{"class":86},[76,17621,14004],{"class":82},[76,17623,16982],{"class":5183},[76,17625,2684],{"class":86},[76,17627,17628],{"class":78,"line":1293},[76,17629,17000],{"class":146},[76,17631,17632,17634,17636],{"class":78,"line":1576},[76,17633,14705],{"class":82},[76,17635,17007],{"class":1927},[76,17637,5603],{"class":86},[76,17639,17640,17642,17644],{"class":78,"line":1581},[76,17641,14705],{"class":82},[76,17643,17023],{"class":1927},[76,17645,5603],{"class":86},[76,17647,17648],{"class":78,"line":1587},[76,17649,2365],{"emptyLinePlaceholder":2364},[76,17651,17652],{"class":78,"line":1592},[76,17653,15189],{"class":82},[76,17655,17656,17658],{"class":78,"line":1606},[76,17657,14705],{"class":82},[76,17659,17045],{"class":86},[76,17661,17662,17664],{"class":78,"line":1611},[76,17663,14705],{"class":82},[76,17665,17052],{"class":86},[76,17667,17668],{"class":78,"line":1617},[76,17669,3960],{"class":86},[21,17671,17672],{},"创建point.cpp",[66,17674,17676],{"className":68,"code":17675,"language":70,"meta":71,"style":71},"#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",[73,17677,17678,17685,17690,17724,17728,17744],{"__ignoreMap":71},[76,17679,17680,17682],{"class":78,"line":79},[76,17681,1913],{"class":82},[76,17683,17684],{"class":192},"\u003Cpoint.h>\n",[76,17686,17687],{"class":78,"line":96},[76,17688,17689],{"class":146},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[76,17691,17692,17694,17697,17700,17702,17704,17706,17708,17710,17712,17714,17716,17718,17720,17722],{"class":78,"line":1143},[76,17693,14876],{"class":82},[76,17695,17696],{"class":1927}," Point",[76,17698,17699],{"class":86},"::",[76,17701,17469],{"class":1927},[76,17703,87],{"class":86},[76,17705,14004],{"class":82},[76,17707,16975],{"class":5183},[76,17709,12402],{"class":86},[76,17711,14004],{"class":82},[76,17713,16982],{"class":5183},[76,17715,16985],{"class":86},[76,17717,133],{"class":82},[76,17719,16990],{"class":86},[76,17721,133],{"class":82},[76,17723,16995],{"class":86},[76,17725,17726],{"class":78,"line":1158},[76,17727,17000],{"class":146},[76,17729,17730,17732,17734,17736,17738,17740,17742],{"class":78,"line":1164},[76,17731,14705],{"class":82},[76,17733,17696],{"class":1927},[76,17735,17699],{"class":86},[76,17737,17231],{"class":1927},[76,17739,17010],{"class":86},[76,17741,17013],{"class":82},[76,17743,17016],{"class":86},[76,17745,17746,17748,17750,17752,17754,17756,17758],{"class":78,"line":1178},[76,17747,14705],{"class":82},[76,17749,17696],{"class":1927},[76,17751,17699],{"class":86},[76,17753,17259],{"class":1927},[76,17755,17010],{"class":86},[76,17757,17013],{"class":82},[76,17759,17030],{"class":86},[21,17761,17762],{},"创建circle.h",[66,17764,17766],{"className":68,"code":17765,"language":70,"meta":71,"style":71},"#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",[73,17767,17768,17775,17781,17791,17797,17803,17807,17811,17815,17829,17843,17847,17855,17863,17867,17871,17877,17881,17885],{"__ignoreMap":71},[76,17769,17770,17772],{"class":78,"line":79},[76,17771,17560],{"class":82},[76,17773,17774],{"class":1927}," once\n",[76,17776,17777,17779],{"class":78,"line":96},[76,17778,1913],{"class":82},[76,17780,1916],{"class":192},[76,17782,17783,17785,17787,17789],{"class":78,"line":1143},[76,17784,1921],{"class":82},[76,17786,1924],{"class":82},[76,17788,1928],{"class":1927},[76,17790,1254],{"class":86},[76,17792,17793,17795],{"class":78,"line":1158},[76,17794,1913],{"class":82},[76,17796,17684],{"class":192},[76,17798,17799,17801],{"class":78,"line":1164},[76,17800,14661],{"class":82},[76,17802,14664],{"class":1927},[76,17804,17805],{"class":78,"line":1178},[76,17806,1510],{"class":86},[76,17808,17809],{"class":78,"line":1184},[76,17810,14683],{"class":82},[76,17812,17813],{"class":78,"line":1275},[76,17814,16961],{"class":146},[76,17816,17817,17819,17821,17823,17825,17827],{"class":78,"line":1281},[76,17818,14876],{"class":82},[76,17820,17081],{"class":1927},[76,17822,87],{"class":86},[76,17824,14004],{"class":82},[76,17826,17088],{"class":5183},[76,17828,2684],{"class":86},[76,17830,17831,17833,17835,17837,17839,17841],{"class":78,"line":1293},[76,17832,14876],{"class":82},[76,17834,17103],{"class":1927},[76,17836,87],{"class":86},[76,17838,17108],{"class":1927},[76,17840,17111],{"class":5183},[76,17842,2684],{"class":86},[76,17844,17845],{"class":78,"line":1576},[76,17846,17124],{"class":146},[76,17848,17849,17851,17853],{"class":78,"line":1581},[76,17850,14705],{"class":82},[76,17852,17131],{"class":1927},[76,17854,5603],{"class":86},[76,17856,17857,17859,17861],{"class":78,"line":1587},[76,17858,17143],{"class":1927},[76,17860,17146],{"class":1927},[76,17862,5603],{"class":86},[76,17864,17865],{"class":78,"line":1592},[76,17866,2365],{"emptyLinePlaceholder":2364},[76,17868,17869],{"class":78,"line":1606},[76,17870,15189],{"class":82},[76,17872,17873,17875],{"class":78,"line":1611},[76,17874,14705],{"class":82},[76,17876,14695],{"class":86},[76,17878,17879],{"class":78,"line":1617},[76,17880,17172],{"class":146},[76,17882,17883],{"class":78,"line":1638},[76,17884,17177],{"class":86},[76,17886,17887],{"class":78,"line":1643},[76,17888,3960],{"class":86},[21,17890,17891],{},"创建circle.cpp",[66,17893,17895],{"className":68,"code":17894,"language":70,"meta":71,"style":71},"#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",[73,17896,17897,17904,17927,17949,17954,17970],{"__ignoreMap":71},[76,17898,17899,17901],{"class":78,"line":79},[76,17900,1913],{"class":82},[76,17902,17903],{"class":192},"\u003Ccircle.h>\n",[76,17905,17906,17908,17911,17913,17915,17917,17919,17921,17923,17925],{"class":78,"line":96},[76,17907,5331],{"class":82},[76,17909,17910],{"class":1927}," Circle",[76,17912,17699],{"class":86},[76,17914,17427],{"class":1927},[76,17916,87],{"class":86},[76,17918,14004],{"class":82},[76,17920,17088],{"class":5183},[76,17922,17091],{"class":86},[76,17924,133],{"class":82},[76,17926,17096],{"class":86},[76,17928,17929,17931,17933,17935,17937,17939,17941,17943,17945,17947],{"class":78,"line":1143},[76,17930,5331],{"class":82},[76,17932,17910],{"class":1927},[76,17934,17699],{"class":86},[76,17936,17479],{"class":1927},[76,17938,87],{"class":86},[76,17940,17108],{"class":1927},[76,17942,17111],{"class":5183},[76,17944,17114],{"class":86},[76,17946,133],{"class":82},[76,17948,17119],{"class":86},[76,17950,17951],{"class":78,"line":1158},[76,17952,17953],{"class":146},"\u002F\u002F获取属性\n",[76,17955,17956,17958,17960,17962,17964,17966,17968],{"class":78,"line":1164},[76,17957,14004],{"class":82},[76,17959,17910],{"class":1927},[76,17961,17699],{"class":86},[76,17963,17311],{"class":1927},[76,17965,17010],{"class":86},[76,17967,17013],{"class":82},[76,17969,17138],{"class":86},[76,17971,17972,17974,17976,17978,17980,17982,17984],{"class":78,"line":1178},[76,17973,17108],{"class":1927},[76,17975,17910],{"class":1927},[76,17977,17699],{"class":86},[76,17979,17225],{"class":1927},[76,17981,17010],{"class":86},[76,17983,17013],{"class":82},[76,17985,17153],{"class":86},[21,17987,17988],{},"使用封装的类",[66,17990,17992],{"className":68,"code":17991,"language":70,"meta":71,"style":71},"#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",[73,17993,17994,18000,18010,18016,18022,18046,18050,18076,18102,18126,18140,18144,18156,18160,18164,18168,18180,18184,18188,18196,18200,18204,18208,18212,18216,18226,18232,18240,18248,18258,18264,18276,18284,18292,18302,18308,18320,18324,18332,18338],{"__ignoreMap":71},[76,17995,17996,17998],{"class":78,"line":79},[76,17997,1913],{"class":82},[76,17999,1916],{"class":192},[76,18001,18002,18004,18006,18008],{"class":78,"line":96},[76,18003,1921],{"class":82},[76,18005,1924],{"class":82},[76,18007,1928],{"class":1927},[76,18009,1254],{"class":86},[76,18011,18012,18014],{"class":78,"line":1143},[76,18013,1913],{"class":82},[76,18015,17903],{"class":192},[76,18017,18018,18020],{"class":78,"line":1158},[76,18019,1913],{"class":82},[76,18021,17684],{"class":192},[76,18023,18024,18026,18028,18030,18032,18034,18036,18038,18040,18042,18044],{"class":78,"line":1164},[76,18025,5331],{"class":82},[76,18027,17188],{"class":1927},[76,18029,87],{"class":86},[76,18031,17193],{"class":1927},[76,18033,10551],{"class":82},[76,18035,376],{"class":5183},[76,18037,466],{"class":86},[76,18039,17108],{"class":1927},[76,18041,10551],{"class":82},[76,18043,21],{"class":5183},[76,18045,93],{"class":86},[76,18047,18048],{"class":78,"line":1178},[76,18049,1510],{"class":86},[76,18051,18052,18054,18056,18058,18060,18062,18064,18066,18068,18070,18072,18074],{"class":78,"line":1184},[76,18053,14705],{"class":82},[76,18055,17218],{"class":86},[76,18057,133],{"class":82},[76,18059,16309],{"class":86},[76,18061,17225],{"class":1927},[76,18063,17228],{"class":86},[76,18065,17231],{"class":1927},[76,18067,13017],{"class":86},[76,18069,620],{"class":82},[76,18071,15855],{"class":86},[76,18073,17231],{"class":1927},[76,18075,5603],{"class":86},[76,18077,18078,18080,18082,18084,18086,18088,18090,18092,18094,18096,18098,18100],{"class":78,"line":1275},[76,18079,14705],{"class":82},[76,18081,17248],{"class":86},[76,18083,133],{"class":82},[76,18085,16309],{"class":86},[76,18087,17225],{"class":1927},[76,18089,17228],{"class":86},[76,18091,17259],{"class":1927},[76,18093,13017],{"class":86},[76,18095,620],{"class":82},[76,18097,15855],{"class":86},[76,18099,17259],{"class":1927},[76,18101,5603],{"class":86},[76,18103,18104,18106,18108,18110,18112,18114,18116,18118,18120,18122,18124],{"class":78,"line":1281},[76,18105,14705],{"class":82},[76,18107,17276],{"class":86},[76,18109,133],{"class":82},[76,18111,17281],{"class":1927},[76,18113,17284],{"class":86},[76,18115,543],{"class":82},[76,18117,17218],{"class":86},[76,18119,569],{"class":82},[76,18121,17248],{"class":86},[76,18123,543],{"class":82},[76,18125,17297],{"class":86},[76,18127,18128,18130,18132,18134,18136,18138],{"class":78,"line":1293},[76,18129,3066],{"class":82},[76,18131,17304],{"class":86},[76,18133,998],{"class":82},[76,18135,16309],{"class":86},[76,18137,17311],{"class":1927},[76,18139,17314],{"class":86},[76,18141,18142],{"class":78,"line":1576},[76,18143,1994],{"class":86},[76,18145,18146,18148,18150,18152,18154],{"class":78,"line":1581},[76,18147,9636],{"class":86},[76,18149,1132],{"class":82},[76,18151,17327],{"class":192},[76,18153,1408],{"class":82},[76,18155,8807],{"class":86},[76,18157,18158],{"class":78,"line":1587},[76,18159,2151],{"class":86},[76,18161,18162],{"class":78,"line":1592},[76,18163,16790],{"class":82},[76,18165,18166],{"class":78,"line":1606},[76,18167,1994],{"class":86},[76,18169,18170,18172,18174,18176,18178],{"class":78,"line":1611},[76,18171,9636],{"class":86},[76,18173,1132],{"class":82},[76,18175,17352],{"class":192},[76,18177,1408],{"class":82},[76,18179,8807],{"class":86},[76,18181,18182],{"class":78,"line":1617},[76,18183,2151],{"class":86},[76,18185,18186],{"class":78,"line":1638},[76,18187,1529],{"class":86},[76,18189,18190,18192,18194],{"class":78,"line":1643},[76,18191,90],{"class":82},[76,18193,1937],{"class":1927},[76,18195,1940],{"class":86},[76,18197,18198],{"class":78,"line":1657},[76,18199,1510],{"class":86},[76,18201,18202],{"class":78,"line":1662},[76,18203,15020],{"class":146},[76,18205,18206],{"class":78,"line":1691},[76,18207,14767],{"class":86},[76,18209,18210],{"class":78,"line":1696},[76,18211,17389],{"class":86},[76,18213,18214],{"class":78,"line":1713},[76,18215,16961],{"class":146},[76,18217,18218,18220,18222,18224],{"class":78,"line":1718},[76,18219,1515],{"class":86},[76,18221,1132],{"class":82},[76,18223,17402],{"class":192},[76,18225,1254],{"class":86},[76,18227,18228,18230],{"class":78,"line":1723},[76,18229,14705],{"class":82},[76,18231,17411],{"class":86},[76,18233,18234,18236,18238],{"class":78,"line":1728},[76,18235,1976],{"class":86},[76,18237,1393],{"class":82},[76,18239,17420],{"class":86},[76,18241,18242,18244,18246],{"class":78,"line":1742},[76,18243,16562],{"class":86},[76,18245,17427],{"class":1927},[76,18247,17430],{"class":86},[76,18249,18250,18252,18254,18256],{"class":78,"line":1747},[76,18251,1515],{"class":86},[76,18253,1132],{"class":82},[76,18255,17439],{"class":192},[76,18257,1254],{"class":86},[76,18259,18260,18262],{"class":78,"line":2542},[76,18261,14705],{"class":82},[76,18263,17448],{"class":86},[76,18265,18266,18268,18270,18272,18274],{"class":78,"line":2556},[76,18267,1976],{"class":86},[76,18269,1393],{"class":82},[76,18271,908],{"class":86},[76,18273,1393],{"class":82},[76,18275,17461],{"class":86},[76,18277,18278,18280,18282],{"class":78,"line":2564},[76,18279,17466],{"class":86},[76,18281,17469],{"class":1927},[76,18283,17472],{"class":86},[76,18285,18286,18288,18290],{"class":78,"line":2569},[76,18287,16562],{"class":86},[76,18289,17479],{"class":1927},[76,18291,17482],{"class":86},[76,18293,18294,18296,18298,18300],{"class":78,"line":2575},[76,18295,1515],{"class":86},[76,18297,1132],{"class":82},[76,18299,17491],{"class":192},[76,18301,1254],{"class":86},[76,18303,18304,18306],{"class":78,"line":2581},[76,18305,14705],{"class":82},[76,18307,17500],{"class":86},[76,18309,18310,18312,18314,18316,18318],{"class":78,"line":2586},[76,18311,1976],{"class":86},[76,18313,1393],{"class":82},[76,18315,17509],{"class":86},[76,18317,1393],{"class":82},[76,18319,17514],{"class":86},[76,18321,18322],{"class":78,"line":7915},[76,18323,17519],{"class":86},[76,18325,18326,18328,18330],{"class":78,"line":7939},[76,18327,17524],{"class":86},[76,18329,17469],{"class":1927},[76,18331,17529],{"class":86},[76,18333,18334,18336],{"class":78,"line":7944},[76,18335,17534],{"class":1927},[76,18337,17537],{"class":86},[76,18339,18340],{"class":78,"line":7950},[76,18341,1529],{"class":86},[16,18343,18345],{"id":18344},"_82对象的初始化清理","8.2对象的初始化清理",[1095,18347,18348,18351],{},[32,18349,18350],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[32,18352,18353],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[46,18355,18357],{"id":18356},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[21,18359,18360,18361,18364],{},"对象的",[237,18362,18363],{},"初始化和清理","也是两个非常重要的安全问题",[21,18366,18367],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[21,18369,18370],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[21,18372,18373,18374,18377,18378,18381],{},"c++利用了",[237,18375,18376],{},"构造函数","和",[237,18379,18380],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[21,18383,18384,18385],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[237,18386,18387],{},"我们不提供构造和析构，编译器会提供",[21,18389,18390],{},[237,18391,18392],{},"编译器提供的构造函数和析构函数是空实现。",[1095,18394,18395,18398],{},[32,18396,18397],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[32,18399,18400,18401,18404],{},"析构函数：主要作用在于对象",[237,18402,18403],{},"销毁前","系统自动调用，执行一些清理工作。",[21,18406,18407,18410],{},[237,18408,18409],{},"构造函数语法：",[73,18411,18412],{},"类名(){}",[29,18414,18415,18418,18421,18424,18427],{},[32,18416,18417],{},"构造函数，没有返回值也不写void",[32,18419,18420],{},"函数名称与类名相同",[32,18422,18423],{},"构造函数可以有参数，因此可以发生重载",[32,18425,18426],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[32,18428,18429,18430,517],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[73,18431,18432],{},"Person(){}",[21,18434,18435,13762,18438],{},[237,18436,18437],{},"析构函数语法：",[73,18439,18440],{},"~类名(){}",[29,18442,18443,18446,18449,18455],{},[32,18444,18445],{},"析构函数，没有返回值也不写void",[32,18447,18448],{},"函数名称与类名相同,在名称前加上符号  ~",[32,18450,18451,18452],{},"析构函数不可以有参数，因此",[237,18453,18454],{},"不可以发生重载",[32,18456,18457],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[66,18459,18461],{"className":68,"code":18460,"language":70,"meta":71,"style":71},"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",[73,18462,18463,18469,18473,18477,18482,18489,18493,18506,18510,18515,18522,18526,18539,18543,18547,18551,18555,18563,18567,18575,18579,18583,18591,18595,18600,18604,18611,18615,18628,18632,18640],{"__ignoreMap":71},[76,18464,18465,18467],{"class":78,"line":79},[76,18466,14661],{"class":82},[76,18468,15138],{"class":1927},[76,18470,18471],{"class":78,"line":96},[76,18472,1510],{"class":86},[76,18474,18475],{"class":78,"line":1143},[76,18476,14683],{"class":82},[76,18478,18479],{"class":78,"line":1158},[76,18480,18481],{"class":146},"    \u002F\u002F构造函数\n",[76,18483,18484,18487],{"class":78,"line":1164},[76,18485,18486],{"class":1927},"    Person",[76,18488,1940],{"class":86},[76,18490,18491],{"class":78,"line":1178},[76,18492,1994],{"class":86},[76,18494,18495,18497,18499,18502,18504],{"class":78,"line":1184},[76,18496,9636],{"class":86},[76,18498,1132],{"class":82},[76,18500,18501],{"class":192}," \"Person的构造函数调用\"",[76,18503,1408],{"class":82},[76,18505,8807],{"class":86},[76,18507,18508],{"class":78,"line":1275},[76,18509,2151],{"class":86},[76,18511,18512],{"class":78,"line":1281},[76,18513,18514],{"class":146},"    \u002F\u002F析构函数\n",[76,18516,18517,18520],{"class":78,"line":1293},[76,18518,18519],{"class":1927},"    ~Person",[76,18521,1940],{"class":86},[76,18523,18524],{"class":78,"line":1576},[76,18525,1994],{"class":86},[76,18527,18528,18530,18532,18535,18537],{"class":78,"line":1581},[76,18529,9636],{"class":86},[76,18531,1132],{"class":82},[76,18533,18534],{"class":192}," \"Person的析构函数调用\"",[76,18536,1408],{"class":82},[76,18538,8807],{"class":86},[76,18540,18541],{"class":78,"line":1587},[76,18542,2151],{"class":86},[76,18544,18545],{"class":78,"line":1592},[76,18546,2365],{"emptyLinePlaceholder":2364},[76,18548,18549],{"class":78,"line":1606},[76,18550,3960],{"class":86},[76,18552,18553],{"class":78,"line":1611},[76,18554,2365],{"emptyLinePlaceholder":2364},[76,18556,18557,18559,18561],{"class":78,"line":1617},[76,18558,5331],{"class":82},[76,18560,5555],{"class":1927},[76,18562,1940],{"class":86},[76,18564,18565],{"class":78,"line":1638},[76,18566,1510],{"class":86},[76,18568,18569,18572],{"class":78,"line":1643},[76,18570,18571],{"class":86},"    Person p;",[76,18573,18574],{"class":146},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[76,18576,18577],{"class":78,"line":1657},[76,18578,1529],{"class":86},[76,18580,18581],{"class":78,"line":1662},[76,18582,2365],{"emptyLinePlaceholder":2364},[76,18584,18585,18587,18589],{"class":78,"line":1691},[76,18586,90],{"class":82},[76,18588,1937],{"class":1927},[76,18590,10820],{"class":86},[76,18592,18593],{"class":78,"line":1696},[76,18594,13177],{"class":86},[76,18596,18597],{"class":78,"line":1713},[76,18598,18599],{"class":146},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[76,18601,18602],{"class":78,"line":1718},[76,18603,2365],{"emptyLinePlaceholder":2364},[76,18605,18606,18608],{"class":78,"line":1723},[76,18607,18571],{"class":86},[76,18609,18610],{"class":146},"\u002F\u002F只有构造函数\n",[76,18612,18613],{"class":78,"line":1728},[76,18614,2365],{"emptyLinePlaceholder":2364},[76,18616,18617,18619,18621,18623,18625],{"class":78,"line":1742},[76,18618,2267],{"class":1927},[76,18620,87],{"class":86},[76,18622,2272],{"class":192},[76,18624,5933],{"class":86},[76,18626,18627],{"class":146},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[76,18629,18630],{"class":78,"line":1747},[76,18631,2365],{"emptyLinePlaceholder":2364},[76,18633,18634,18636,18638],{"class":78,"line":2542},[76,18635,4055],{"class":82},[76,18637,4058],{"class":136},[76,18639,1254],{"class":86},[76,18641,18642],{"class":78,"line":2556},[76,18643,1529],{"class":86},[21,18645,18646],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[46,18648,18650],{"id":18649},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[21,18652,18653],{},"两种分类方式：",[21,18655,18656],{},"​\t按参数分为： 有参构造和无参构造",[21,18658,18659],{},"​\t按类型分为： 普通构造和拷贝构造",[21,18661,18662],{},"三种调用方式：",[21,18664,18665],{},"​\t括号法",[21,18667,18668],{},"​\t显示法",[21,18670,18671],{},"​\t隐式转换法",[66,18673,18675],{"className":68,"code":18674,"language":70,"meta":71,"style":71},"#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",[73,18676,18677,18683,18693,18698,18703,18708,18713,18717,18725,18729,18733,18737,18743,18747,18760,18764,18776,18780,18789,18802,18806,18810,18816,18820,18833,18837,18842,18858,18862,18867,18876,18889,18893,18899,18903,18908,18916,18920,18925,18929,18937,18941,18946,18951,18956,18961,18966,18970,18975,18980,18985,18990,18994,18999,19004,19020,19032,19037,19041,19046,19051,19056,19060,19065,19079,19092,19096,19104,19108,19114,19120,19128],{"__ignoreMap":71},[76,18678,18679,18681],{"class":78,"line":79},[76,18680,1913],{"class":82},[76,18682,1916],{"class":192},[76,18684,18685,18687,18689,18691],{"class":78,"line":96},[76,18686,1921],{"class":82},[76,18688,1924],{"class":82},[76,18690,1928],{"class":1927},[76,18692,1254],{"class":86},[76,18694,18695],{"class":78,"line":1143},[76,18696,18697],{"class":146},"\u002F\u002F1.构造函数的分类及调用\n",[76,18699,18700],{"class":78,"line":1158},[76,18701,18702],{"class":146},"\u002F\u002F分类\n",[76,18704,18705],{"class":78,"line":1164},[76,18706,18707],{"class":146},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[76,18709,18710],{"class":78,"line":1178},[76,18711,18712],{"class":146},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[76,18714,18715],{"class":78,"line":1184},[76,18716,2365],{"emptyLinePlaceholder":2364},[76,18718,18719,18721,18723],{"class":78,"line":1275},[76,18720,14661],{"class":82},[76,18722,15536],{"class":1927},[76,18724,2639],{"class":86},[76,18726,18727],{"class":78,"line":1281},[76,18728,1510],{"class":86},[76,18730,18731],{"class":78,"line":1293},[76,18732,14683],{"class":82},[76,18734,18735],{"class":78,"line":1576},[76,18736,18481],{"class":146},[76,18738,18739,18741],{"class":78,"line":1581},[76,18740,18486],{"class":1927},[76,18742,1940],{"class":86},[76,18744,18745],{"class":78,"line":1587},[76,18746,1994],{"class":86},[76,18748,18749,18751,18753,18756,18758],{"class":78,"line":1592},[76,18750,3416],{"class":86},[76,18752,1132],{"class":82},[76,18754,18755],{"class":192},"\"Person构造函数无参构造\"",[76,18757,1132],{"class":82},[76,18759,1155],{"class":86},[76,18761,18762],{"class":78,"line":1606},[76,18763,2151],{"class":86},[76,18765,18766,18768,18770,18772,18774],{"class":78,"line":1611},[76,18767,18486],{"class":1927},[76,18769,87],{"class":86},[76,18771,90],{"class":82},[76,18773,1362],{"class":5183},[76,18775,93],{"class":86},[76,18777,18778],{"class":78,"line":1617},[76,18779,1994],{"class":86},[76,18781,18782,18785,18787],{"class":78,"line":1638},[76,18783,18784],{"class":86},"        age",[76,18786,133],{"class":82},[76,18788,6164],{"class":86},[76,18790,18791,18793,18795,18798,18800],{"class":78,"line":1643},[76,18792,3416],{"class":86},[76,18794,1132],{"class":82},[76,18796,18797],{"class":192},"\"Person构造函数有参构造\"",[76,18799,1132],{"class":82},[76,18801,1155],{"class":86},[76,18803,18804],{"class":78,"line":1657},[76,18805,2151],{"class":86},[76,18807,18808],{"class":78,"line":1662},[76,18809,18514],{"class":146},[76,18811,18812,18814],{"class":78,"line":1691},[76,18813,18519],{"class":1927},[76,18815,1940],{"class":86},[76,18817,18818],{"class":78,"line":1696},[76,18819,1994],{"class":86},[76,18821,18822,18824,18826,18829,18831],{"class":78,"line":1713},[76,18823,3416],{"class":86},[76,18825,1132],{"class":82},[76,18827,18828],{"class":192},"\"Person析构函数被调用\"",[76,18830,1132],{"class":82},[76,18832,1155],{"class":86},[76,18834,18835],{"class":78,"line":1718},[76,18836,2151],{"class":86},[76,18838,18839],{"class":78,"line":1723},[76,18840,18841],{"class":146},"    \u002F\u002F拷贝构造函数\n",[76,18843,18844,18846,18848,18850,18852,18854,18856],{"class":78,"line":1728},[76,18845,18486],{"class":1927},[76,18847,87],{"class":86},[76,18849,6759],{"class":82},[76,18851,15536],{"class":1927},[76,18853,10551],{"class":82},[76,18855,21],{"class":5183},[76,18857,93],{"class":86},[76,18859,18860],{"class":78,"line":1742},[76,18861,1994],{"class":86},[76,18863,18864],{"class":78,"line":1747},[76,18865,18866],{"class":146},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[76,18868,18869,18871,18873],{"class":78,"line":2542},[76,18870,18784],{"class":86},[76,18872,133],{"class":82},[76,18874,18875],{"class":86},"p.age;\n",[76,18877,18878,18880,18882,18885,18887],{"class":78,"line":2556},[76,18879,3416],{"class":86},[76,18881,1132],{"class":82},[76,18883,18884],{"class":192},"\"Person拷贝构造函数被调用\"",[76,18886,1132],{"class":82},[76,18888,1155],{"class":86},[76,18890,18891],{"class":78,"line":2564},[76,18892,2151],{"class":86},[76,18894,18895,18897],{"class":78,"line":2569},[76,18896,1949],{"class":82},[76,18898,7764],{"class":86},[76,18900,18901],{"class":78,"line":2575},[76,18902,3960],{"class":86},[76,18904,18905],{"class":78,"line":2581},[76,18906,18907],{"class":146},"\u002F\u002F调用\n",[76,18909,18910,18912,18914],{"class":78,"line":2586},[76,18911,5331],{"class":82},[76,18913,5555],{"class":1927},[76,18915,1940],{"class":86},[76,18917,18918],{"class":78,"line":7915},[76,18919,1510],{"class":86},[76,18921,18922],{"class":78,"line":7939},[76,18923,18924],{"class":146},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[76,18926,18927],{"class":78,"line":7944},[76,18928,1529],{"class":86},[76,18930,18931,18933,18935],{"class":78,"line":7950},[76,18932,5331],{"class":82},[76,18934,5624],{"class":1927},[76,18936,1940],{"class":86},[76,18938,18939],{"class":78,"line":7977},[76,18940,1510],{"class":86},[76,18942,18943],{"class":78,"line":7982},[76,18944,18945],{"class":146},"    \u002F\u002F1.括号法\n",[76,18947,18948],{"class":78,"line":7988},[76,18949,18950],{"class":146},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[76,18952,18953],{"class":78,"line":8000},[76,18954,18955],{"class":146},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[76,18957,18958],{"class":78,"line":8012},[76,18959,18960],{"class":146},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[76,18962,18963],{"class":78,"line":8024},[76,18964,18965],{"class":146},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[76,18967,18968],{"class":78,"line":9683},[76,18969,2365],{"emptyLinePlaceholder":2364},[76,18971,18972],{"class":78,"line":9708},[76,18973,18974],{"class":146},"    \u002F\u002F注意事项\n",[76,18976,18977],{"class":78,"line":9731},[76,18978,18979],{"class":146},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[76,18981,18982],{"class":78,"line":9755},[76,18983,18984],{"class":146},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[76,18986,18987],{"class":78,"line":9760},[76,18988,18989],{"class":146},"    \u002F\u002F Person p4();\n",[76,18991,18992],{"class":78,"line":9765},[76,18993,2365],{"emptyLinePlaceholder":2364},[76,18995,18996],{"class":78,"line":9770},[76,18997,18998],{"class":146},"    \u002F\u002F2.显示法\n",[76,19000,19001],{"class":78,"line":9779},[76,19002,19003],{"class":86},"    Person p1;\n",[76,19005,19006,19009,19011,19014,19016,19018],{"class":78,"line":9784},[76,19007,19008],{"class":86},"    Person p2",[76,19010,133],{"class":82},[76,19012,19013],{"class":1927},"Person",[76,19015,87],{"class":86},[76,19017,534],{"class":136},[76,19019,2684],{"class":86},[76,19021,19022,19025,19027,19029],{"class":78,"line":9790},[76,19023,19024],{"class":86},"    Person p3",[76,19026,133],{"class":82},[76,19028,19013],{"class":1927},[76,19030,19031],{"class":86},"(p2);\n",[76,19033,19034],{"class":78,"line":9811},[76,19035,19036],{"class":146},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[76,19038,19039],{"class":78,"line":9817},[76,19040,2365],{"emptyLinePlaceholder":2364},[76,19042,19043],{"class":78,"line":9831},[76,19044,19045],{"class":146},"    \u002F\u002F 注意事项2\n",[76,19047,19048],{"class":78,"line":9837},[76,19049,19050],{"class":146},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[76,19052,19053],{"class":78,"line":9864},[76,19054,19055],{"class":146},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[76,19057,19058],{"class":78,"line":9873},[76,19059,2365],{"emptyLinePlaceholder":2364},[76,19061,19062],{"class":78,"line":9879},[76,19063,19064],{"class":146},"    \u002F\u002F3.隐士转换法\n",[76,19066,19067,19070,19072,19074,19076],{"class":78,"line":9887},[76,19068,19069],{"class":86},"    Person p4",[76,19071,133],{"class":82},[76,19073,534],{"class":136},[76,19075,143],{"class":86},[76,19077,19078],{"class":146},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[76,19080,19081,19084,19086,19089],{"class":78,"line":9892},[76,19082,19083],{"class":86},"    Person p5",[76,19085,133],{"class":82},[76,19087,19088],{"class":86},"p4;",[76,19090,19091],{"class":146}," \u002F\u002F 这里会调用拷贝构造函数\n",[76,19093,19094],{"class":78,"line":16571},[76,19095,1529],{"class":86},[76,19097,19098,19100,19102],{"class":78,"line":16577},[76,19099,90],{"class":82},[76,19101,1937],{"class":1927},[76,19103,1940],{"class":86},[76,19105,19106],{"class":78,"line":16600},[76,19107,1510],{"class":86},[76,19109,19110,19112],{"class":78,"line":16606},[76,19111,5600],{"class":1927},[76,19113,5603],{"class":86},[76,19115,19116,19118],{"class":78,"line":16629},[76,19117,5669],{"class":1927},[76,19119,5603],{"class":86},[76,19121,19122,19124,19126],{"class":78,"line":16643},[76,19123,4055],{"class":82},[76,19125,4058],{"class":136},[76,19127,1254],{"class":86},[76,19129,19130],{"class":78,"line":16663},[76,19131,1529],{"class":86},[21,19133,19134,19137],{},[237,19135,19136],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[46,19139,19141],{"id":19140},"_823拷贝构造函数","8.2.3拷贝构造函数",[21,19143,19144],{},"C++中拷贝构造函数调用时机通常有三种情况",[1095,19146,19147,19150,19153],{},[32,19148,19149],{},"使用一个已经创建完毕的对象来初始化一个新对象",[32,19151,19152],{},"值传递的方式给函数参数传值",[32,19154,19155],{},"以值方式返回局部对象",[66,19157,19159],{"className":68,"code":19158,"language":70,"meta":71,"style":71},"#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",[73,19160,19161,19167,19177,19181,19186,19190,19195,19200,19205,19211,19215,19219,19225,19229,19242,19246,19251,19263,19267,19275,19288,19292,19296,19312,19316,19325,19338,19342,19348,19352,19364,19368,19374,19378,19382,19390,19394,19407,19415,19433,19437,19442,19447,19462,19466,19479,19483,19491,19495,19499,19507,19511,19516,19525,19529,19533,19558,19568,19572,19580,19584,19595,19620,19624,19628,19632,19640,19644,19649,19654,19661,19666,19671,19676,19681,19685,19690,19694,19699,19703,19708,19713,19717,19721,19726,19731,19739],{"__ignoreMap":71},[76,19162,19163,19165],{"class":78,"line":79},[76,19164,1913],{"class":82},[76,19166,1916],{"class":192},[76,19168,19169,19171,19173,19175],{"class":78,"line":96},[76,19170,1921],{"class":82},[76,19172,1924],{"class":82},[76,19174,1928],{"class":1927},[76,19176,1254],{"class":86},[76,19178,19179],{"class":78,"line":1143},[76,19180,2365],{"emptyLinePlaceholder":2364},[76,19182,19183],{"class":78,"line":1158},[76,19184,19185],{"class":146},"\u002F\u002F拷贝构造函数调用时机\n",[76,19187,19188],{"class":78,"line":1164},[76,19189,2365],{"emptyLinePlaceholder":2364},[76,19191,19192],{"class":78,"line":1178},[76,19193,19194],{"class":146},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[76,19196,19197],{"class":78,"line":1184},[76,19198,19199],{"class":146},"\u002F\u002F2.值传递的方式给函数参数传值\n",[76,19201,19202],{"class":78,"line":1275},[76,19203,19204],{"class":146},"\u002F\u002F3.以值方式返回局部对象\n",[76,19206,19207,19209],{"class":78,"line":1281},[76,19208,14661],{"class":82},[76,19210,15138],{"class":1927},[76,19212,19213],{"class":78,"line":1293},[76,19214,1510],{"class":86},[76,19216,19217],{"class":78,"line":1576},[76,19218,14683],{"class":82},[76,19220,19221,19223],{"class":78,"line":1581},[76,19222,18486],{"class":1927},[76,19224,1940],{"class":86},[76,19226,19227],{"class":78,"line":1587},[76,19228,1994],{"class":86},[76,19230,19231,19233,19235,19238,19240],{"class":78,"line":1592},[76,19232,9636],{"class":86},[76,19234,1132],{"class":82},[76,19236,19237],{"class":192}," \"Person的默认构造函数调用\"",[76,19239,1408],{"class":82},[76,19241,8807],{"class":86},[76,19243,19244],{"class":78,"line":1606},[76,19245,2151],{"class":86},[76,19247,19248],{"class":78,"line":1611},[76,19249,19250],{"class":146},"    \u002F\u002F有参构造\n",[76,19252,19253,19255,19257,19259,19261],{"class":78,"line":1617},[76,19254,18486],{"class":1927},[76,19256,87],{"class":86},[76,19258,90],{"class":82},[76,19260,15656],{"class":5183},[76,19262,93],{"class":86},[76,19264,19265],{"class":78,"line":1638},[76,19266,1994],{"class":86},[76,19268,19269,19271,19273],{"class":78,"line":1643},[76,19270,15710],{"class":86},[76,19272,133],{"class":82},[76,19274,7764],{"class":86},[76,19276,19277,19279,19281,19284,19286],{"class":78,"line":1657},[76,19278,9636],{"class":86},[76,19280,1132],{"class":82},[76,19282,19283],{"class":192}," \"Person的有参构造函数调用\"",[76,19285,1408],{"class":82},[76,19287,8807],{"class":86},[76,19289,19290],{"class":78,"line":1662},[76,19291,2151],{"class":86},[76,19293,19294],{"class":78,"line":1691},[76,19295,18841],{"class":146},[76,19297,19298,19300,19302,19304,19306,19308,19310],{"class":78,"line":1696},[76,19299,18486],{"class":1927},[76,19301,87],{"class":86},[76,19303,6759],{"class":82},[76,19305,15536],{"class":1927},[76,19307,10551],{"class":82},[76,19309,21],{"class":5183},[76,19311,93],{"class":86},[76,19313,19314],{"class":78,"line":1713},[76,19315,1994],{"class":86},[76,19317,19318,19320,19322],{"class":78,"line":1718},[76,19319,15710],{"class":86},[76,19321,133],{"class":82},[76,19323,19324],{"class":86}," p.m_Age;\n",[76,19326,19327,19329,19331,19334,19336],{"class":78,"line":1723},[76,19328,9636],{"class":86},[76,19330,1132],{"class":82},[76,19332,19333],{"class":192}," \"Person的拷贝构造函数调用\"",[76,19335,1408],{"class":82},[76,19337,8807],{"class":86},[76,19339,19340],{"class":78,"line":1728},[76,19341,2151],{"class":86},[76,19343,19344,19346],{"class":78,"line":1742},[76,19345,18519],{"class":1927},[76,19347,1940],{"class":86},[76,19349,19350],{"class":78,"line":1747},[76,19351,1994],{"class":86},[76,19353,19354,19356,19358,19360,19362],{"class":78,"line":2542},[76,19355,9636],{"class":86},[76,19357,1132],{"class":82},[76,19359,18534],{"class":192},[76,19361,1408],{"class":82},[76,19363,8807],{"class":86},[76,19365,19366],{"class":78,"line":2556},[76,19367,2151],{"class":86},[76,19369,19370,19372],{"class":78,"line":2564},[76,19371,1949],{"class":82},[76,19373,15633],{"class":86},[76,19375,19376],{"class":78,"line":2569},[76,19377,3960],{"class":86},[76,19379,19380],{"class":78,"line":2575},[76,19381,19194],{"class":146},[76,19383,19384,19386,19388],{"class":78,"line":2581},[76,19385,5331],{"class":82},[76,19387,5555],{"class":1927},[76,19389,1940],{"class":86},[76,19391,19392],{"class":78,"line":2586},[76,19393,1510],{"class":86},[76,19395,19396,19399,19401,19403,19405],{"class":78,"line":7915},[76,19397,19398],{"class":86},"    Person ",[76,19400,7097],{"class":1927},[76,19402,87],{"class":86},[76,19404,788],{"class":136},[76,19406,2684],{"class":86},[76,19408,19409,19411,19413],{"class":78,"line":7939},[76,19410,19398],{"class":86},[76,19412,7000],{"class":1927},[76,19414,17482],{"class":86},[76,19416,19417,19419,19421,19424,19426,19429,19431],{"class":78,"line":7944},[76,19418,1515],{"class":86},[76,19420,1132],{"class":82},[76,19422,19423],{"class":192},"\"P2的年龄为：\"",[76,19425,1132],{"class":82},[76,19427,19428],{"class":86},"p2.m_Age",[76,19430,1132],{"class":82},[76,19432,1155],{"class":86},[76,19434,19435],{"class":78,"line":7950},[76,19436,1529],{"class":86},[76,19438,19439],{"class":78,"line":7977},[76,19440,19441],{"class":146},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[76,19443,19444],{"class":78,"line":7982},[76,19445,19446],{"class":146},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[76,19448,19449,19451,19454,19456,19458,19460],{"class":78,"line":7988},[76,19450,5331],{"class":82},[76,19452,19453],{"class":1927}," doWork",[76,19455,87],{"class":86},[76,19457,19013],{"class":1927},[76,19459,6792],{"class":5183},[76,19461,93],{"class":86},[76,19463,19464],{"class":78,"line":8000},[76,19465,1510],{"class":86},[76,19467,19468,19470,19472,19475,19477],{"class":78,"line":8012},[76,19469,6496],{"class":86},[76,19471,1132],{"class":82},[76,19473,19474],{"class":192}," \"doWork函数调用\"",[76,19476,1408],{"class":82},[76,19478,8807],{"class":86},[76,19480,19481],{"class":78,"line":8024},[76,19482,1529],{"class":86},[76,19484,19485,19487,19489],{"class":78,"line":9683},[76,19486,5331],{"class":82},[76,19488,5624],{"class":1927},[76,19490,1940],{"class":86},[76,19492,19493],{"class":78,"line":9708},[76,19494,1510],{"class":86},[76,19496,19497],{"class":78,"line":9731},[76,19498,15280],{"class":86},[76,19500,19501,19504],{"class":78,"line":9755},[76,19502,19503],{"class":1927},"    doWork",[76,19505,19506],{"class":86},"(p);\n",[76,19508,19509],{"class":78,"line":9760},[76,19510,1529],{"class":86},[76,19512,19513],{"class":78,"line":9765},[76,19514,19515],{"class":146},"\u002F\u002F 3.以值方式返回局部对象\n",[76,19517,19518,19520,19523],{"class":78,"line":9770},[76,19519,19013],{"class":1927},[76,19521,19522],{"class":1927}," doWork2",[76,19524,1940],{"class":86},[76,19526,19527],{"class":78,"line":9779},[76,19528,1510],{"class":86},[76,19530,19531],{"class":78,"line":9784},[76,19532,19003],{"class":86},[76,19534,19535,19537,19539,19541,19543,19545,19547,19549,19551,19553,19555],{"class":78,"line":9790},[76,19536,1515],{"class":86},[76,19538,1132],{"class":82},[76,19540,87],{"class":86},[76,19542,90],{"class":82},[76,19544,6485],{"class":82},[76,19546,517],{"class":86},[76,19548,441],{"class":82},[76,19550,7097],{"class":86},[76,19552,1132],{"class":82},[76,19554,1202],{"class":86},[76,19556,19557],{"class":146},"\u002F\u002F打印p1的地址\n",[76,19559,19560,19562,19565],{"class":78,"line":9811},[76,19561,4055],{"class":82},[76,19563,19564],{"class":86}," p1;",[76,19566,19567],{"class":146},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[76,19569,19570],{"class":78,"line":9817},[76,19571,1529],{"class":86},[76,19573,19574,19576,19578],{"class":78,"line":9831},[76,19575,5331],{"class":82},[76,19577,5696],{"class":1927},[76,19579,1940],{"class":86},[76,19581,19582],{"class":78,"line":9837},[76,19583,1510],{"class":86},[76,19585,19586,19589,19591,19593],{"class":78,"line":9864},[76,19587,19588],{"class":86},"    Person p ",[76,19590,133],{"class":82},[76,19592,19522],{"class":1927},[76,19594,5603],{"class":86},[76,19596,19597,19599,19601,19603,19605,19607,19609,19611,19613,19615,19617],{"class":78,"line":9873},[76,19598,1515],{"class":86},[76,19600,1132],{"class":82},[76,19602,87],{"class":86},[76,19604,90],{"class":82},[76,19606,6485],{"class":82},[76,19608,517],{"class":86},[76,19610,441],{"class":82},[76,19612,21],{"class":86},[76,19614,1132],{"class":82},[76,19616,1202],{"class":86},[76,19618,19619],{"class":146},"\u002F\u002F打印p的地址\n",[76,19621,19622],{"class":78,"line":9879},[76,19623,1529],{"class":86},[76,19625,19626],{"class":78,"line":9887},[76,19627,2365],{"emptyLinePlaceholder":2364},[76,19629,19630],{"class":78,"line":9892},[76,19631,2365],{"emptyLinePlaceholder":2364},[76,19633,19634,19636,19638],{"class":78,"line":16571},[76,19635,90],{"class":82},[76,19637,1937],{"class":1927},[76,19639,1940],{"class":86},[76,19641,19642],{"class":78,"line":16577},[76,19643,1510],{"class":86},[76,19645,19646],{"class":78,"line":16600},[76,19647,19648],{"class":146},"    \u002F\u002F test01();\n",[76,19650,19651],{"class":78,"line":16606},[76,19652,19653],{"class":146},"    \u002F\u002F test02();\n",[76,19655,19656,19659],{"class":78,"line":16629},[76,19657,19658],{"class":1927},"    test03",[76,19660,5603],{"class":86},[76,19662,19663],{"class":78,"line":16643},[76,19664,19665],{"class":146},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[76,19667,19668],{"class":78,"line":16663},[76,19669,19670],{"class":146},"\u002F\u002F 输出结果如下：\n",[76,19672,19673],{"class":78,"line":16669},[76,19674,19675],{"class":146},"\u002F\u002F Person的默认构造函数调用\n",[76,19677,19678],{"class":78,"line":16680},[76,19679,19680],{"class":146},"\u002F\u002F 0x7fffffffceec\n",[76,19682,19683],{"class":78,"line":16703},[76,19684,19680],{"class":146},[76,19686,19687],{"class":78,"line":16725},[76,19688,19689],{"class":146},"\u002F\u002F Person的析构函数调用\n",[76,19691,19692],{"class":78,"line":16730},[76,19693,2365],{"emptyLinePlaceholder":2364},[76,19695,19696],{"class":78,"line":16736},[76,19697,19698],{"class":146},"\u002F\u002F 之前的输出结果如下：\n",[76,19700,19701],{"class":78,"line":16750},[76,19702,19675],{"class":146},[76,19704,19705],{"class":78,"line":16763},[76,19706,19707],{"class":146},"\u002F\u002F 地址\n",[76,19709,19710],{"class":78,"line":16768},[76,19711,19712],{"class":146},"\u002F\u002F Person的拷贝构造函数调用\n",[76,19714,19715],{"class":78,"line":16782},[76,19716,19689],{"class":146},[76,19718,19719],{"class":78,"line":16787},[76,19720,19707],{"class":146},[76,19722,19723],{"class":78,"line":16793},[76,19724,19725],{"class":146},"\u002F\u002F (这两次输出的地址也是不同的) \n",[76,19727,19728],{"class":78,"line":16798},[76,19729,19730],{"class":146},"\u002F\u002F Person的析构函数调用     \n",[76,19732,19733,19735,19737],{"class":78,"line":16812},[76,19734,4055],{"class":82},[76,19736,4058],{"class":136},[76,19738,1254],{"class":86},[76,19740,19741],{"class":78,"line":16817},[76,19742,1529],{"class":86},[21,19744,19745],{},"简化版理解",[66,19747,19749],{"className":68,"code":19748,"language":70,"meta":71,"style":71},"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",[73,19750,19751,19759,19763,19769,19782,19793,19797,19809,19822,19830,19834,19850,19863,19872,19876,19881,19887,19900,19904,19908,19915,19919,19923,19928,19936,19940,19956,19969,19982,19986,19991,19999,20003,20007,20012,20017,20033,20041,20048,20054,20058,20062,20067,20075,20079,20083,20106,20113,20117,20121,20129,20133,20143,20165,20169,20173,20177,20185,20189,20194,20199,20205,20209,20219,20223,20231],{"__ignoreMap":71},[76,19752,19753,19755,19757],{"class":78,"line":79},[76,19754,14661],{"class":82},[76,19756,15536],{"class":1927},[76,19758,15539],{"class":86},[76,19760,19761],{"class":78,"line":96},[76,19762,14683],{"class":82},[76,19764,19765,19767],{"class":78,"line":1143},[76,19766,18486],{"class":1927},[76,19768,10820],{"class":86},[76,19770,19771,19773,19775,19778,19780],{"class":78,"line":1158},[76,19772,9636],{"class":86},[76,19774,1132],{"class":82},[76,19776,19777],{"class":192}," \"无参构造函数!\"",[76,19779,1408],{"class":82},[76,19781,8807],{"class":86},[76,19783,19784,19787,19789,19791],{"class":78,"line":1164},[76,19785,19786],{"class":86},"        mAge ",[76,19788,133],{"class":82},[76,19790,4058],{"class":136},[76,19792,1254],{"class":86},[76,19794,19795],{"class":78,"line":1178},[76,19796,2151],{"class":86},[76,19798,19799,19801,19803,19805,19807],{"class":78,"line":1184},[76,19800,18486],{"class":1927},[76,19802,87],{"class":86},[76,19804,90],{"class":82},[76,19806,15656],{"class":5183},[76,19808,12409],{"class":86},[76,19810,19811,19813,19815,19818,19820],{"class":78,"line":1275},[76,19812,9636],{"class":86},[76,19814,1132],{"class":82},[76,19816,19817],{"class":192}," \"有参构造函数!\"",[76,19819,1408],{"class":82},[76,19821,8807],{"class":86},[76,19823,19824,19826,19828],{"class":78,"line":1281},[76,19825,19786],{"class":86},[76,19827,133],{"class":82},[76,19829,7764],{"class":86},[76,19831,19832],{"class":78,"line":1293},[76,19833,2151],{"class":86},[76,19835,19836,19838,19840,19842,19844,19846,19848],{"class":78,"line":1576},[76,19837,18486],{"class":1927},[76,19839,87],{"class":86},[76,19841,6759],{"class":82},[76,19843,15536],{"class":1927},[76,19845,441],{"class":82},[76,19847,6792],{"class":5183},[76,19849,12409],{"class":86},[76,19851,19852,19854,19856,19859,19861],{"class":78,"line":1581},[76,19853,9636],{"class":86},[76,19855,1132],{"class":82},[76,19857,19858],{"class":192}," \"拷贝构造函数!\"",[76,19860,1408],{"class":82},[76,19862,8807],{"class":86},[76,19864,19865,19867,19869],{"class":78,"line":1587},[76,19866,19786],{"class":86},[76,19868,133],{"class":82},[76,19870,19871],{"class":86}," p.mAge;\n",[76,19873,19874],{"class":78,"line":1592},[76,19875,2151],{"class":86},[76,19877,19878],{"class":78,"line":1606},[76,19879,19880],{"class":146},"    \u002F\u002F析构函数在释放内存之前调用\n",[76,19882,19883,19885],{"class":78,"line":1611},[76,19884,18519],{"class":1927},[76,19886,10820],{"class":86},[76,19888,19889,19891,19893,19896,19898],{"class":78,"line":1617},[76,19890,9636],{"class":86},[76,19892,1132],{"class":82},[76,19894,19895],{"class":192}," \"析构函数!\"",[76,19897,1408],{"class":82},[76,19899,8807],{"class":86},[76,19901,19902],{"class":78,"line":1638},[76,19903,2151],{"class":86},[76,19905,19906],{"class":78,"line":1643},[76,19907,14683],{"class":82},[76,19909,19910,19912],{"class":78,"line":1657},[76,19911,1949],{"class":82},[76,19913,19914],{"class":86}," mAge;\n",[76,19916,19917],{"class":78,"line":1662},[76,19918,3960],{"class":86},[76,19920,19921],{"class":78,"line":1691},[76,19922,2365],{"emptyLinePlaceholder":2364},[76,19924,19925],{"class":78,"line":1696},[76,19926,19927],{"class":146},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[76,19929,19930,19932,19934],{"class":78,"line":1713},[76,19931,5331],{"class":82},[76,19933,5555],{"class":1927},[76,19935,10820],{"class":86},[76,19937,19938],{"class":78,"line":1718},[76,19939,2365],{"emptyLinePlaceholder":2364},[76,19941,19942,19944,19947,19949,19951,19953],{"class":78,"line":1723},[76,19943,19398],{"class":86},[76,19945,19946],{"class":1927},"man",[76,19948,87],{"class":86},[76,19950,399],{"class":136},[76,19952,5933],{"class":86},[76,19954,19955],{"class":146}," \u002F\u002Fp对象已经创建完毕\n",[76,19957,19958,19960,19963,19966],{"class":78,"line":1728},[76,19959,19398],{"class":86},[76,19961,19962],{"class":1927},"newman",[76,19964,19965],{"class":86},"(man);",[76,19967,19968],{"class":146}," \u002F\u002F调用拷贝构造函数\n",[76,19970,19971,19974,19976,19979],{"class":78,"line":1742},[76,19972,19973],{"class":86},"    Person newman2 ",[76,19975,133],{"class":82},[76,19977,19978],{"class":86}," man;",[76,19980,19981],{"class":146}," \u002F\u002F拷贝构造\n",[76,19983,19984],{"class":78,"line":1747},[76,19985,2365],{"emptyLinePlaceholder":2364},[76,19987,19988],{"class":78,"line":2542},[76,19989,19990],{"class":146},"    \u002F\u002FPerson newman3;\n",[76,19992,19993,19996],{"class":78,"line":2556},[76,19994,19995],{"class":146},"    \u002F\u002Fnewman3 = man;",[76,19997,19998],{"class":146}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[76,20000,20001],{"class":78,"line":2564},[76,20002,1529],{"class":86},[76,20004,20005],{"class":78,"line":2569},[76,20006,2365],{"emptyLinePlaceholder":2364},[76,20008,20009],{"class":78,"line":2575},[76,20010,20011],{"class":146},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[76,20013,20014],{"class":78,"line":2581},[76,20015,20016],{"class":146},"\u002F\u002F相当于Person p1 = p;\n",[76,20018,20019,20021,20023,20025,20027,20030],{"class":78,"line":2586},[76,20020,5331],{"class":82},[76,20022,19453],{"class":1927},[76,20024,87],{"class":86},[76,20026,19013],{"class":1927},[76,20028,20029],{"class":5183}," p1",[76,20031,20032],{"class":86},") {}\n",[76,20034,20035,20037,20039],{"class":78,"line":7915},[76,20036,5331],{"class":82},[76,20038,5624],{"class":1927},[76,20040,10820],{"class":86},[76,20042,20043,20045],{"class":78,"line":7939},[76,20044,18571],{"class":86},[76,20046,20047],{"class":146}," \u002F\u002F无参构造函数\n",[76,20049,20050,20052],{"class":78,"line":7944},[76,20051,19503],{"class":1927},[76,20053,19506],{"class":86},[76,20055,20056],{"class":78,"line":7950},[76,20057,1529],{"class":86},[76,20059,20060],{"class":78,"line":7977},[76,20061,2365],{"emptyLinePlaceholder":2364},[76,20063,20064],{"class":78,"line":7982},[76,20065,20066],{"class":146},"\u002F\u002F3. 以值方式返回局部对象\n",[76,20068,20069,20071,20073],{"class":78,"line":7988},[76,20070,19013],{"class":1927},[76,20072,19522],{"class":1927},[76,20074,1940],{"class":86},[76,20076,20077],{"class":78,"line":8000},[76,20078,1510],{"class":86},[76,20080,20081],{"class":78,"line":8012},[76,20082,19003],{"class":86},[76,20084,20085,20087,20089,20091,20093,20095,20097,20099,20102,20104],{"class":78,"line":8024},[76,20086,6496],{"class":86},[76,20088,1132],{"class":82},[76,20090,1622],{"class":86},[76,20092,90],{"class":82},[76,20094,6485],{"class":82},[76,20096,517],{"class":86},[76,20098,441],{"class":82},[76,20100,20101],{"class":86},"p1 ",[76,20103,1132],{"class":82},[76,20105,8807],{"class":86},[76,20107,20108,20110],{"class":78,"line":9683},[76,20109,4055],{"class":82},[76,20111,20112],{"class":86}," p1;\n",[76,20114,20115],{"class":78,"line":9708},[76,20116,1529],{"class":86},[76,20118,20119],{"class":78,"line":9731},[76,20120,2365],{"emptyLinePlaceholder":2364},[76,20122,20123,20125,20127],{"class":78,"line":9755},[76,20124,5331],{"class":82},[76,20126,5696],{"class":1927},[76,20128,1940],{"class":86},[76,20130,20131],{"class":78,"line":9760},[76,20132,1510],{"class":86},[76,20134,20135,20137,20139,20141],{"class":78,"line":9765},[76,20136,19588],{"class":86},[76,20138,133],{"class":82},[76,20140,19522],{"class":1927},[76,20142,5603],{"class":86},[76,20144,20145,20147,20149,20151,20153,20155,20157,20159,20161,20163],{"class":78,"line":9770},[76,20146,6496],{"class":86},[76,20148,1132],{"class":82},[76,20150,1622],{"class":86},[76,20152,90],{"class":82},[76,20154,6485],{"class":82},[76,20156,517],{"class":86},[76,20158,441],{"class":82},[76,20160,11415],{"class":86},[76,20162,1132],{"class":82},[76,20164,8807],{"class":86},[76,20166,20167],{"class":78,"line":9779},[76,20168,1529],{"class":86},[76,20170,20171],{"class":78,"line":9784},[76,20172,2365],{"emptyLinePlaceholder":2364},[76,20174,20175],{"class":78,"line":9790},[76,20176,2365],{"emptyLinePlaceholder":2364},[76,20178,20179,20181,20183],{"class":78,"line":9811},[76,20180,90],{"class":82},[76,20182,1937],{"class":1927},[76,20184,10820],{"class":86},[76,20186,20187],{"class":78,"line":9817},[76,20188,2365],{"emptyLinePlaceholder":2364},[76,20190,20191],{"class":78,"line":9831},[76,20192,20193],{"class":146},"    \u002F\u002Ftest01();\n",[76,20195,20196],{"class":78,"line":9837},[76,20197,20198],{"class":146},"    \u002F\u002Ftest02();\n",[76,20200,20201,20203],{"class":78,"line":9864},[76,20202,19658],{"class":1927},[76,20204,5603],{"class":86},[76,20206,20207],{"class":78,"line":9873},[76,20208,2365],{"emptyLinePlaceholder":2364},[76,20210,20211,20213,20215,20217],{"class":78,"line":9879},[76,20212,2267],{"class":1927},[76,20214,87],{"class":86},[76,20216,2272],{"class":192},[76,20218,2684],{"class":86},[76,20220,20221],{"class":78,"line":9887},[76,20222,2365],{"emptyLinePlaceholder":2364},[76,20224,20225,20227,20229],{"class":78,"line":9892},[76,20226,4055],{"class":82},[76,20228,4058],{"class":136},[76,20230,1254],{"class":86},[76,20232,20233],{"class":78,"line":16571},[76,20234,1529],{"class":86},[46,20236,20238],{"id":20237},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[21,20240,20241],{},"默认情况下，c++编译器至少给一个类添加3个函数",[21,20243,20244],{},"1．默认构造函数(无参，函数体为空)",[21,20246,20247],{},"2．默认析构函数(无参，函数体为空)",[21,20249,20250],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[21,20252,20253],{},"构造函数调用规则如下：",[1095,20255,20256,20259],{},[32,20257,20258],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[32,20260,20261],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[66,20263,20265],{"className":68,"code":20264,"language":70,"meta":71,"style":71},"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",[73,20266,20267,20275,20279,20284,20290,20302,20306,20311,20323,20332,20344,20348,20352,20368,20377,20389,20393,20397,20403,20415,20419,20423,20429,20433,20437,20445,20449,20461,20466,20474,20478,20496,20500,20504,20512,20516,20521,20529,20544,20557,20561,20566,20573,20589,20602,20606,20610,20618,20622,20628,20632,20642,20646,20654],{"__ignoreMap":71},[76,20268,20269,20271,20273],{"class":78,"line":79},[76,20270,14661],{"class":82},[76,20272,15536],{"class":1927},[76,20274,15539],{"class":86},[76,20276,20277],{"class":78,"line":96},[76,20278,14683],{"class":82},[76,20280,20281],{"class":78,"line":1143},[76,20282,20283],{"class":146},"    \u002F\u002F无参（默认）构造函数\n",[76,20285,20286,20288],{"class":78,"line":1158},[76,20287,18486],{"class":1927},[76,20289,10820],{"class":86},[76,20291,20292,20294,20296,20298,20300],{"class":78,"line":1164},[76,20293,9636],{"class":86},[76,20295,1132],{"class":82},[76,20297,19777],{"class":192},[76,20299,1408],{"class":82},[76,20301,8807],{"class":86},[76,20303,20304],{"class":78,"line":1178},[76,20305,2151],{"class":86},[76,20307,20308],{"class":78,"line":1184},[76,20309,20310],{"class":146},"    \u002F\u002F有参构造函数\n",[76,20312,20313,20315,20317,20319,20321],{"class":78,"line":1275},[76,20314,18486],{"class":1927},[76,20316,87],{"class":86},[76,20318,90],{"class":82},[76,20320,1362],{"class":5183},[76,20322,12409],{"class":86},[76,20324,20325,20328,20330],{"class":78,"line":1281},[76,20326,20327],{"class":86},"        age ",[76,20329,133],{"class":82},[76,20331,1396],{"class":86},[76,20333,20334,20336,20338,20340,20342],{"class":78,"line":1293},[76,20335,9636],{"class":86},[76,20337,1132],{"class":82},[76,20339,19817],{"class":192},[76,20341,1408],{"class":82},[76,20343,8807],{"class":86},[76,20345,20346],{"class":78,"line":1576},[76,20347,2151],{"class":86},[76,20349,20350],{"class":78,"line":1581},[76,20351,18841],{"class":146},[76,20353,20354,20356,20358,20360,20362,20364,20366],{"class":78,"line":1587},[76,20355,18486],{"class":1927},[76,20357,87],{"class":86},[76,20359,6759],{"class":82},[76,20361,15536],{"class":1927},[76,20363,441],{"class":82},[76,20365,6792],{"class":5183},[76,20367,12409],{"class":86},[76,20369,20370,20372,20374],{"class":78,"line":1592},[76,20371,20327],{"class":86},[76,20373,133],{"class":82},[76,20375,20376],{"class":86}," p.age;\n",[76,20378,20379,20381,20383,20385,20387],{"class":78,"line":1606},[76,20380,9636],{"class":86},[76,20382,1132],{"class":82},[76,20384,19858],{"class":192},[76,20386,1408],{"class":82},[76,20388,8807],{"class":86},[76,20390,20391],{"class":78,"line":1611},[76,20392,2151],{"class":86},[76,20394,20395],{"class":78,"line":1617},[76,20396,18514],{"class":146},[76,20398,20399,20401],{"class":78,"line":1638},[76,20400,18519],{"class":1927},[76,20402,10820],{"class":86},[76,20404,20405,20407,20409,20411,20413],{"class":78,"line":1643},[76,20406,9636],{"class":86},[76,20408,1132],{"class":82},[76,20410,19895],{"class":192},[76,20412,1408],{"class":82},[76,20414,8807],{"class":86},[76,20416,20417],{"class":78,"line":1657},[76,20418,2151],{"class":86},[76,20420,20421],{"class":78,"line":1662},[76,20422,14683],{"class":82},[76,20424,20425,20427],{"class":78,"line":1691},[76,20426,1949],{"class":82},[76,20428,7764],{"class":86},[76,20430,20431],{"class":78,"line":1696},[76,20432,3960],{"class":86},[76,20434,20435],{"class":78,"line":1713},[76,20436,2365],{"emptyLinePlaceholder":2364},[76,20438,20439,20441,20443],{"class":78,"line":1718},[76,20440,5331],{"class":82},[76,20442,5555],{"class":1927},[76,20444,1940],{"class":86},[76,20446,20447],{"class":78,"line":1723},[76,20448,1510],{"class":86},[76,20450,20451,20453,20455,20457,20459],{"class":78,"line":1728},[76,20452,19398],{"class":86},[76,20454,7097],{"class":1927},[76,20456,87],{"class":86},[76,20458,738],{"class":136},[76,20460,2684],{"class":86},[76,20462,20463],{"class":78,"line":1742},[76,20464,20465],{"class":146},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[76,20467,20468,20470,20472],{"class":78,"line":1747},[76,20469,19398],{"class":86},[76,20471,7000],{"class":1927},[76,20473,17482],{"class":86},[76,20475,20476],{"class":78,"line":2542},[76,20477,2365],{"emptyLinePlaceholder":2364},[76,20479,20480,20482,20484,20487,20489,20492,20494],{"class":78,"line":2556},[76,20481,6496],{"class":86},[76,20483,1132],{"class":82},[76,20485,20486],{"class":192}," \"p2的年龄为： \"",[76,20488,1408],{"class":82},[76,20490,20491],{"class":86}," p2.age ",[76,20493,1132],{"class":82},[76,20495,8807],{"class":86},[76,20497,20498],{"class":78,"line":2564},[76,20499,1529],{"class":86},[76,20501,20502],{"class":78,"line":2569},[76,20503,2365],{"emptyLinePlaceholder":2364},[76,20505,20506,20508,20510],{"class":78,"line":2575},[76,20507,5331],{"class":82},[76,20509,5624],{"class":1927},[76,20511,1940],{"class":86},[76,20513,20514],{"class":78,"line":2581},[76,20515,1510],{"class":86},[76,20517,20518],{"class":78,"line":2586},[76,20519,20520],{"class":146},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[76,20522,20523,20526],{"class":78,"line":7915},[76,20524,20525],{"class":86},"    Person p1;",[76,20527,20528],{"class":146}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[76,20530,20531,20533,20535,20537,20539,20541],{"class":78,"line":7939},[76,20532,19398],{"class":86},[76,20534,7000],{"class":1927},[76,20536,87],{"class":86},[76,20538,534],{"class":136},[76,20540,5933],{"class":86},[76,20542,20543],{"class":146}," \u002F\u002F用户提供的有参\n",[76,20545,20546,20548,20551,20554],{"class":78,"line":7944},[76,20547,19398],{"class":86},[76,20549,20550],{"class":1927},"p3",[76,20552,20553],{"class":86},"(p2);",[76,20555,20556],{"class":146}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[76,20558,20559],{"class":78,"line":7950},[76,20560,2365],{"emptyLinePlaceholder":2364},[76,20562,20563],{"class":78,"line":7977},[76,20564,20565],{"class":146},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[76,20567,20568,20571],{"class":78,"line":7982},[76,20569,20570],{"class":86},"    Person p4;",[76,20572,20528],{"class":146},[76,20574,20575,20577,20580,20582,20584,20586],{"class":78,"line":7988},[76,20576,19398],{"class":86},[76,20578,20579],{"class":1927},"p5",[76,20581,87],{"class":86},[76,20583,534],{"class":136},[76,20585,5933],{"class":86},[76,20587,20588],{"class":146}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[76,20590,20591,20593,20596,20599],{"class":78,"line":8000},[76,20592,19398],{"class":86},[76,20594,20595],{"class":1927},"p6",[76,20597,20598],{"class":86},"(p5);",[76,20600,20601],{"class":146}," \u002F\u002F用户自己提供拷贝构造\n",[76,20603,20604],{"class":78,"line":8012},[76,20605,1529],{"class":86},[76,20607,20608],{"class":78,"line":8024},[76,20609,2365],{"emptyLinePlaceholder":2364},[76,20611,20612,20614,20616],{"class":78,"line":9683},[76,20613,90],{"class":82},[76,20615,1937],{"class":1927},[76,20617,10820],{"class":86},[76,20619,20620],{"class":78,"line":9708},[76,20621,2365],{"emptyLinePlaceholder":2364},[76,20623,20624,20626],{"class":78,"line":9731},[76,20625,5600],{"class":1927},[76,20627,5603],{"class":86},[76,20629,20630],{"class":78,"line":9755},[76,20631,2365],{"emptyLinePlaceholder":2364},[76,20633,20634,20636,20638,20640],{"class":78,"line":9760},[76,20635,2267],{"class":1927},[76,20637,87],{"class":86},[76,20639,2272],{"class":192},[76,20641,2684],{"class":86},[76,20643,20644],{"class":78,"line":9765},[76,20645,2365],{"emptyLinePlaceholder":2364},[76,20647,20648,20650,20652],{"class":78,"line":9770},[76,20649,4055],{"class":82},[76,20651,4058],{"class":136},[76,20653,1254],{"class":86},[76,20655,20656],{"class":78,"line":9779},[76,20657,1529],{"class":86},[46,20659,20661],{"id":20660},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[21,20663,20664],{},"浅拷贝：简单的赋值拷贝操作",[21,20666,20667],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[66,20669,20671],{"className":68,"code":20670,"language":70,"meta":71,"style":71},"#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",[73,20672,20673,20679,20689,20695,20699,20703,20708,20714,20718,20731,20735,20739,20746,20750,20760,20775,20788,20792,20797,20802,20818,20822,20835,20840,20845,20850,20859,20864,20879,20883,20887,20891,20897,20901,20906,20921,20925,20936,20950,20954,20963,20967,20973,20985,20989,20997,21001,21018,21049,21057,21085,21089,21093,21101,21105,21111],{"__ignoreMap":71},[76,20674,20675,20677],{"class":78,"line":79},[76,20676,1913],{"class":82},[76,20678,1916],{"class":192},[76,20680,20681,20683,20685,20687],{"class":78,"line":96},[76,20682,1921],{"class":82},[76,20684,1924],{"class":82},[76,20686,1928],{"class":1927},[76,20688,1254],{"class":86},[76,20690,20691,20693],{"class":78,"line":1143},[76,20692,14661],{"class":82},[76,20694,15138],{"class":1927},[76,20696,20697],{"class":78,"line":1158},[76,20698,1510],{"class":86},[76,20700,20701],{"class":78,"line":1164},[76,20702,14683],{"class":82},[76,20704,20705],{"class":78,"line":1178},[76,20706,20707],{"class":146},"    \u002F\u002F默认构造函数\n",[76,20709,20710,20712],{"class":78,"line":1184},[76,20711,18486],{"class":1927},[76,20713,1940],{"class":86},[76,20715,20716],{"class":78,"line":1275},[76,20717,1994],{"class":86},[76,20719,20720,20722,20724,20727,20729],{"class":78,"line":1281},[76,20721,3416],{"class":86},[76,20723,1132],{"class":82},[76,20725,20726],{"class":192},"\"默认构造函数\"",[76,20728,1132],{"class":82},[76,20730,1155],{"class":86},[76,20732,20733],{"class":78,"line":1293},[76,20734,2151],{"class":86},[76,20736,20737],{"class":78,"line":1576},[76,20738,20310],{"class":146},[76,20740,20741,20743],{"class":78,"line":1581},[76,20742,18519],{"class":1927},[76,20744,20745],{"class":86},"(int age,int height)\n",[76,20747,20748],{"class":78,"line":1587},[76,20749,1994],{"class":86},[76,20751,20752,20755,20757],{"class":78,"line":1592},[76,20753,20754],{"class":86},"        m_Age",[76,20756,133],{"class":82},[76,20758,20759],{"class":86},"age;\n",[76,20761,20762,20765,20767,20769,20772],{"class":78,"line":1606},[76,20763,20764],{"class":86},"        m_Height",[76,20766,11684],{"class":82},[76,20768,2346],{"class":82},[76,20770,20771],{"class":86},"(height);",[76,20773,20774],{"class":146},"\u002F\u002F放到堆区\n",[76,20776,20777,20779,20781,20784,20786],{"class":78,"line":1611},[76,20778,3416],{"class":86},[76,20780,1132],{"class":82},[76,20782,20783],{"class":192},"\"有参构造函数\"",[76,20785,1132],{"class":82},[76,20787,1155],{"class":86},[76,20789,20790],{"class":78,"line":1617},[76,20791,2151],{"class":86},[76,20793,20794],{"class":78,"line":1638},[76,20795,20796],{"class":146},"    \u002F\u002F深拷贝解决上述问题\n",[76,20798,20799],{"class":78,"line":1643},[76,20800,20801],{"class":146},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[76,20803,20804,20806,20808,20810,20812,20814,20816],{"class":78,"line":1657},[76,20805,18486],{"class":1927},[76,20807,87],{"class":86},[76,20809,6759],{"class":82},[76,20811,15536],{"class":1927},[76,20813,10551],{"class":82},[76,20815,21],{"class":5183},[76,20817,93],{"class":86},[76,20819,20820],{"class":78,"line":1662},[76,20821,1994],{"class":86},[76,20823,20824,20826,20828,20831,20833],{"class":78,"line":1691},[76,20825,3416],{"class":86},[76,20827,1132],{"class":82},[76,20829,20830],{"class":192},"\"拷贝构造函数\"",[76,20832,1132],{"class":82},[76,20834,1155],{"class":86},[76,20836,20837],{"class":78,"line":1696},[76,20838,20839],{"class":146},"        \u002F\u002F编译器默认的写如下注释部分\n",[76,20841,20842],{"class":78,"line":1713},[76,20843,20844],{"class":146},"        \u002F\u002Fm_Age=p.m_Age;\n",[76,20846,20847],{"class":78,"line":1718},[76,20848,20849],{"class":146},"        \u002F\u002Fm_Height=p.m_Height;\n",[76,20851,20852,20854,20856],{"class":78,"line":1723},[76,20853,20754],{"class":86},[76,20855,133],{"class":82},[76,20857,20858],{"class":86},"p.m_Age;\n",[76,20860,20861],{"class":78,"line":1728},[76,20862,20863],{"class":146},"        \u002F\u002F深拷贝操作\n",[76,20865,20866,20868,20870,20872,20874,20876],{"class":78,"line":1742},[76,20867,20764],{"class":86},[76,20869,11684],{"class":82},[76,20871,2346],{"class":82},[76,20873,87],{"class":86},[76,20875,543],{"class":82},[76,20877,20878],{"class":86},"p.m_Height);\n",[76,20880,20881],{"class":78,"line":1747},[76,20882,2151],{"class":86},[76,20884,20885],{"class":78,"line":2542},[76,20886,2365],{"emptyLinePlaceholder":2364},[76,20888,20889],{"class":78,"line":2556},[76,20890,18514],{"class":146},[76,20892,20893,20895],{"class":78,"line":2564},[76,20894,18519],{"class":1927},[76,20896,1940],{"class":86},[76,20898,20899],{"class":78,"line":2569},[76,20900,1994],{"class":86},[76,20902,20903],{"class":78,"line":2575},[76,20904,20905],{"class":146},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[76,20907,20908,20910,20913,20916,20919],{"class":78,"line":2581},[76,20909,2462],{"class":82},[76,20911,20912],{"class":86},"(m_Height ",[76,20914,20915],{"class":82},"!=",[76,20917,20918],{"class":136}," NULL",[76,20920,93],{"class":86},[76,20922,20923],{"class":78,"line":2586},[76,20924,2475],{"class":86},[76,20926,20927,20930,20933],{"class":78,"line":7915},[76,20928,20929],{"class":82},"            delete",[76,20931,20932],{"class":86}," m_Height;",[76,20934,20935],{"class":146}," \u002F\u002F释放堆区内存\n",[76,20937,20938,20941,20943,20945,20947],{"class":78,"line":7939},[76,20939,20940],{"class":86},"            m_Height",[76,20942,133],{"class":82},[76,20944,2356],{"class":136},[76,20946,143],{"class":86},[76,20948,20949],{"class":146}," \u002F\u002F防止野指针\n",[76,20951,20952],{"class":78,"line":7944},[76,20953,2494],{"class":86},[76,20955,20956,20958,20960],{"class":78,"line":7950},[76,20957,3416],{"class":86},[76,20959,1132],{"class":82},[76,20961,20962],{"class":192},"\"Person的析构函数调用\"\n",[76,20964,20965],{"class":78,"line":7977},[76,20966,2151],{"class":86},[76,20968,20969,20971],{"class":78,"line":7982},[76,20970,1949],{"class":82},[76,20972,15633],{"class":86},[76,20974,20975,20977,20979,20982],{"class":78,"line":7988},[76,20976,1949],{"class":82},[76,20978,6485],{"class":82},[76,20980,20981],{"class":86},"m_Height;",[76,20983,20984],{"class":146}," \u002F\u002F定义一个指针，指向身高\n",[76,20986,20987],{"class":78,"line":8000},[76,20988,3960],{"class":86},[76,20990,20991,20993,20995],{"class":78,"line":8012},[76,20992,5331],{"class":82},[76,20994,5555],{"class":1927},[76,20996,1940],{"class":86},[76,20998,20999],{"class":78,"line":8024},[76,21000,1510],{"class":86},[76,21002,21003,21005,21007,21009,21011,21013,21016],{"class":78,"line":9683},[76,21004,19398],{"class":86},[76,21006,7097],{"class":1927},[76,21008,87],{"class":86},[76,21010,738],{"class":136},[76,21012,466],{"class":86},[76,21014,21015],{"class":136},"160",[76,21017,2684],{"class":86},[76,21019,21020,21022,21024,21027,21029,21032,21034,21037,21039,21042,21044,21046],{"class":78,"line":9708},[76,21021,1515],{"class":86},[76,21023,1132],{"class":82},[76,21025,21026],{"class":192},"\"p1的年龄为:\"",[76,21028,1132],{"class":82},[76,21030,21031],{"class":86},"p1.m_Age",[76,21033,1132],{"class":82},[76,21035,21036],{"class":192},"\"身高为：\"",[76,21038,6386],{"class":82},[76,21040,21041],{"class":86},"p1.m_Height",[76,21043,1132],{"class":82},[76,21045,1202],{"class":86},[76,21047,21048],{"class":146},"  \u002F\u002F18\n",[76,21050,21051,21053,21055],{"class":78,"line":9731},[76,21052,19398],{"class":86},[76,21054,7000],{"class":1927},[76,21056,17482],{"class":86},[76,21058,21059,21061,21063,21066,21068,21070,21072,21074,21076,21079,21081,21083],{"class":78,"line":9755},[76,21060,1515],{"class":86},[76,21062,1132],{"class":82},[76,21064,21065],{"class":192},"\"p2的年龄为：\"",[76,21067,1132],{"class":82},[76,21069,19428],{"class":86},[76,21071,1132],{"class":82},[76,21073,21036],{"class":192},[76,21075,6386],{"class":82},[76,21077,21078],{"class":86},"p2.m_Height",[76,21080,1132],{"class":82},[76,21082,1202],{"class":86},[76,21084,21048],{"class":146},[76,21086,21087],{"class":78,"line":9760},[76,21088,13177],{"class":86},[76,21090,21091],{"class":78,"line":9765},[76,21092,1529],{"class":86},[76,21094,21095,21097,21099],{"class":78,"line":9770},[76,21096,90],{"class":82},[76,21098,1937],{"class":1927},[76,21100,1940],{"class":86},[76,21102,21103],{"class":78,"line":9779},[76,21104,1510],{"class":86},[76,21106,21107,21109],{"class":78,"line":9784},[76,21108,5600],{"class":1927},[76,21110,5603],{"class":86},[76,21112,21113],{"class":78,"line":9790},[76,21114,1529],{"class":86},[21,21116,21117],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[21,21119,21120],{},"浅拷贝带来的问题是堆区的内存重复释放",[21,21122,21123],{},[1426,21124],{"alt":71,"src":21125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[21,21127,21128],{},"浅拷贝问题要使用深拷贝来解决",[21,21130,21131],{},[1426,21132],{"alt":71,"src":21133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[21,21135,21136],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[46,21138,21140],{"id":21139},"_826初始化列表","8.2.6初始化列表",[21,21142,21143],{},"作用：初始化属性",[21,21145,5148],{},[66,21147,21150],{"className":21148,"code":21149,"language":5154},[5152],"构造函数():属性1(值1),属性2(值2).....{}\n",[73,21151,21149],{"__ignoreMap":71},[21,21153,21154],{},"例子",[66,21156,21158],{"className":68,"code":21157,"language":70,"meta":71,"style":71},"#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",[73,21159,21160,21166,21176,21182,21186,21191,21195,21200,21205,21210,21215,21220,21225,21229,21234,21239,21282,21291,21309,21327,21345,21349,21353,21360,21367,21374,21378,21382,21390,21394,21398,21418,21427,21431,21435,21445,21449,21457],{"__ignoreMap":71},[76,21161,21162,21164],{"class":78,"line":79},[76,21163,1913],{"class":82},[76,21165,1916],{"class":192},[76,21167,21168,21170,21172,21174],{"class":78,"line":96},[76,21169,1921],{"class":82},[76,21171,1924],{"class":82},[76,21173,1928],{"class":1927},[76,21175,1254],{"class":86},[76,21177,21178,21180],{"class":78,"line":1143},[76,21179,14661],{"class":82},[76,21181,15138],{"class":1927},[76,21183,21184],{"class":78,"line":1158},[76,21185,1510],{"class":86},[76,21187,21188],{"class":78,"line":1164},[76,21189,21190],{"class":82},"    public:\n",[76,21192,21193],{"class":78,"line":1178},[76,21194,2365],{"emptyLinePlaceholder":2364},[76,21196,21197],{"class":78,"line":1184},[76,21198,21199],{"class":146},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[76,21201,21202],{"class":78,"line":1275},[76,21203,21204],{"class":146},"    \u002F\u002FPerson(int a, int b, int c) {\n",[76,21206,21207],{"class":78,"line":1281},[76,21208,21209],{"class":146},"    \u002F\u002F  m_A = a;\n",[76,21211,21212],{"class":78,"line":1293},[76,21213,21214],{"class":146},"    \u002F\u002F  m_B = b;\n",[76,21216,21217],{"class":78,"line":1576},[76,21218,21219],{"class":146},"    \u002F\u002F  m_C = c;\n",[76,21221,21222],{"class":78,"line":1581},[76,21223,21224],{"class":146},"    \u002F\u002F}\n",[76,21226,21227],{"class":78,"line":1587},[76,21228,2365],{"emptyLinePlaceholder":2364},[76,21230,21231],{"class":78,"line":1592},[76,21232,21233],{"class":146},"    \u002F\u002F初始化列表方式初始化\n",[76,21235,21236],{"class":78,"line":1606},[76,21237,21238],{"class":146},"    \u002F\u002F使用有参构造函数\n",[76,21240,21241,21243,21245,21247,21249,21251,21253,21255,21257,21259,21261,21264,21267,21270,21273,21276,21279],{"class":78,"line":1611},[76,21242,18486],{"class":1927},[76,21244,87],{"class":86},[76,21246,90],{"class":82},[76,21248,1362],{"class":5183},[76,21250,12402],{"class":86},[76,21252,90],{"class":82},[76,21254,2798],{"class":5183},[76,21256,12402],{"class":86},[76,21258,90],{"class":82},[76,21260,2814],{"class":5183},[76,21262,21263],{"class":86},") :",[76,21265,21266],{"class":1927},"m_A",[76,21268,21269],{"class":86},"(a), ",[76,21271,21272],{"class":1927},"m_B",[76,21274,21275],{"class":86},"(b), ",[76,21277,21278],{"class":1927},"m_C",[76,21280,21281],{"class":86},"(c) {}\n",[76,21283,21284,21286,21289],{"class":78,"line":1617},[76,21285,14876],{"class":82},[76,21287,21288],{"class":1927}," PrintPerson",[76,21290,10820],{"class":86},[76,21292,21293,21295,21297,21300,21302,21305,21307],{"class":78,"line":1638},[76,21294,9636],{"class":86},[76,21296,1132],{"class":82},[76,21298,21299],{"class":192}," \"mA:\"",[76,21301,1408],{"class":82},[76,21303,21304],{"class":86}," m_A ",[76,21306,1132],{"class":82},[76,21308,8807],{"class":86},[76,21310,21311,21313,21315,21318,21320,21323,21325],{"class":78,"line":1643},[76,21312,9636],{"class":86},[76,21314,1132],{"class":82},[76,21316,21317],{"class":192}," \"mB:\"",[76,21319,1408],{"class":82},[76,21321,21322],{"class":86}," m_B ",[76,21324,1132],{"class":82},[76,21326,8807],{"class":86},[76,21328,21329,21331,21333,21336,21338,21341,21343],{"class":78,"line":1657},[76,21330,9636],{"class":86},[76,21332,1132],{"class":82},[76,21334,21335],{"class":192}," \"mC:\"",[76,21337,1408],{"class":82},[76,21339,21340],{"class":86}," m_C ",[76,21342,1132],{"class":82},[76,21344,8807],{"class":86},[76,21346,21347],{"class":78,"line":1662},[76,21348,2151],{"class":86},[76,21350,21351],{"class":78,"line":1691},[76,21352,15189],{"class":82},[76,21354,21355,21357],{"class":78,"line":1696},[76,21356,1949],{"class":82},[76,21358,21359],{"class":86}," m_A;\n",[76,21361,21362,21364],{"class":78,"line":1713},[76,21363,1949],{"class":82},[76,21365,21366],{"class":86}," m_B;\n",[76,21368,21369,21371],{"class":78,"line":1718},[76,21370,1949],{"class":82},[76,21372,21373],{"class":86}," m_C;\n",[76,21375,21376],{"class":78,"line":1723},[76,21377,3960],{"class":86},[76,21379,21380],{"class":78,"line":1728},[76,21381,2365],{"emptyLinePlaceholder":2364},[76,21383,21384,21386,21388],{"class":78,"line":1742},[76,21385,90],{"class":82},[76,21387,1937],{"class":1927},[76,21389,5945],{"class":86},[76,21391,21392],{"class":78,"line":1747},[76,21393,1510],{"class":86},[76,21395,21396],{"class":78,"line":2542},[76,21397,2365],{"emptyLinePlaceholder":2364},[76,21399,21400,21402,21404,21406,21408,21410,21412,21414,21416],{"class":78,"line":2556},[76,21401,19398],{"class":86},[76,21403,21],{"class":1927},[76,21405,87],{"class":86},[76,21407,305],{"class":136},[76,21409,12402],{"class":86},[76,21411,165],{"class":136},[76,21413,12402],{"class":86},[76,21415,159],{"class":136},[76,21417,2684],{"class":86},[76,21419,21420,21422,21425],{"class":78,"line":2564},[76,21421,15833],{"class":86},[76,21423,21424],{"class":1927},"PrintPerson",[76,21426,5603],{"class":86},[76,21428,21429],{"class":78,"line":2569},[76,21430,2365],{"emptyLinePlaceholder":2364},[76,21432,21433],{"class":78,"line":2575},[76,21434,2365],{"emptyLinePlaceholder":2364},[76,21436,21437,21439,21441,21443],{"class":78,"line":2581},[76,21438,2267],{"class":1927},[76,21440,87],{"class":86},[76,21442,2272],{"class":192},[76,21444,2684],{"class":86},[76,21446,21447],{"class":78,"line":2586},[76,21448,2365],{"emptyLinePlaceholder":2364},[76,21450,21451,21453,21455],{"class":78,"line":7915},[76,21452,4055],{"class":82},[76,21454,4058],{"class":136},[76,21456,1254],{"class":86},[76,21458,21459],{"class":78,"line":7939},[76,21460,1529],{"class":86},[21,21462,21463,21464,21467,21468],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[237,21465,21466],{},"参数名就是定义的对象属性","，",[237,21469,21470],{},"属性后面的值为有参构造函数的形参",[66,21472,21474],{"className":68,"code":21473,"language":70,"meta":71,"style":71},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[73,21475,21476],{"__ignoreMap":71},[76,21477,21478,21480,21482,21484,21487,21489,21492,21494,21497,21499,21502,21504,21507,21509],{"class":78,"line":79},[76,21479,19013],{"class":1927},[76,21481,87],{"class":86},[76,21483,90],{"class":82},[76,21485,21486],{"class":86}," a.",[76,21488,90],{"class":82},[76,21490,21491],{"class":86}," b,",[76,21493,90],{"class":82},[76,21495,21496],{"class":86}," b):",[76,21498,21266],{"class":1927},[76,21500,21501],{"class":86},"(a),",[76,21503,21272],{"class":1927},[76,21505,21506],{"class":86},"(c),",[76,21508,21278],{"class":1927},[76,21510,21511],{"class":86},"(b) {}\n",[46,21513,21515],{"id":21514},"_827类对象作为类成员","8.2.7类对象作为类成员",[21,21517,21518],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[21,21520,14600],{},[66,21522,21524],{"className":68,"code":21523,"language":70,"meta":71,"style":71},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[73,21525,21526,21531,21536,21540,21545,21549],{"__ignoreMap":71},[76,21527,21528],{"class":78,"line":79},[76,21529,21530],{"class":86},"A{};\n",[76,21532,21533],{"class":78,"line":96},[76,21534,21535],{"class":86},"B\n",[76,21537,21538],{"class":78,"line":1143},[76,21539,1510],{"class":86},[76,21541,21542],{"class":78,"line":1158},[76,21543,21544],{"class":86},"    A a;\n",[76,21546,21547],{"class":78,"line":1164},[76,21548,1529],{"class":86},[76,21550,21551],{"class":78,"line":1178},[76,21552,21553],{"class":146},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[21,21555,21556],{},"案例",[66,21558,21560],{"className":68,"code":21559,"language":70,"meta":71,"style":71},"\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",[73,21561,21562,21567,21574,21578,21583,21588,21602,21606,21616,21627,21631,21638,21642,21655,21659,21664,21669,21673,21679,21683,21687,21691,21722,21726,21737,21741,21747,21751,21764,21768,21772,21776,21781,21786,21790,21798,21802,21819,21838,21842,21850,21854,21860],{"__ignoreMap":71},[76,21563,21564],{"class":78,"line":79},[76,21565,21566],{"class":146},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[76,21568,21569,21571],{"class":78,"line":96},[76,21570,14661],{"class":82},[76,21572,21573],{"class":1927}," Phone\n",[76,21575,21576],{"class":78,"line":1143},[76,21577,1510],{"class":86},[76,21579,21580],{"class":78,"line":1158},[76,21581,21582],{"class":86},"public：\n",[76,21584,21585],{"class":78,"line":1164},[76,21586,21587],{"class":146},"    \u002F\u002F 赋值(构造函数)\n",[76,21589,21590,21593,21595,21597,21600],{"class":78,"line":1178},[76,21591,21592],{"class":1927},"    Phone",[76,21594,87],{"class":86},[76,21596,14884],{"class":1927},[76,21598,21599],{"class":5183}," pName",[76,21601,93],{"class":86},[76,21603,21604],{"class":78,"line":1184},[76,21605,1994],{"class":86},[76,21607,21608,21611,21613],{"class":78,"line":1275},[76,21609,21610],{"class":86},"        m_pName",[76,21612,133],{"class":82},[76,21614,21615],{"class":86},"pName;\n",[76,21617,21618,21620,21622,21625],{"class":78,"line":1281},[76,21619,3416],{"class":86},[76,21621,1132],{"class":82},[76,21623,21624],{"class":192},"\"Phone的构造函数调用\"",[76,21626,1254],{"class":86},[76,21628,21629],{"class":78,"line":1293},[76,21630,2151],{"class":86},[76,21632,21633,21636],{"class":78,"line":1576},[76,21634,21635],{"class":1927},"    ~Phone",[76,21637,1940],{"class":86},[76,21639,21640],{"class":78,"line":1581},[76,21641,1994],{"class":86},[76,21643,21644,21646,21648,21651,21653],{"class":78,"line":1587},[76,21645,3416],{"class":86},[76,21647,1132],{"class":82},[76,21649,21650],{"class":192},"\"Phone析构函数调用\"",[76,21652,1132],{"class":82},[76,21654,1155],{"class":86},[76,21656,21657],{"class":78,"line":1592},[76,21658,2151],{"class":86},[76,21660,21661],{"class":78,"line":1606},[76,21662,21663],{"class":146},"    \u002F\u002F\n",[76,21665,21666],{"class":78,"line":1611},[76,21667,21668],{"class":86},"    string m_PName;\n",[76,21670,21671],{"class":78,"line":1617},[76,21672,3960],{"class":86},[76,21674,21675,21677],{"class":78,"line":1638},[76,21676,14661],{"class":82},[76,21678,15138],{"class":1927},[76,21680,21681],{"class":78,"line":1643},[76,21682,1510],{"class":86},[76,21684,21685],{"class":78,"line":1657},[76,21686,14683],{"class":82},[76,21688,21689],{"class":78,"line":1662},[76,21690,16961],{"class":146},[76,21692,21693,21695,21697,21699,21701,21703,21705,21708,21711,21713,21716,21719],{"class":78,"line":1691},[76,21694,18486],{"class":1927},[76,21696,87],{"class":86},[76,21698,14884],{"class":1927},[76,21700,14887],{"class":5183},[76,21702,466],{"class":86},[76,21704,14884],{"class":1927},[76,21706,21707],{"class":5183}," pname",[76,21709,21710],{"class":86},"):",[76,21712,14977],{"class":1927},[76,21714,21715],{"class":86},"(name),m_phone.",[76,21717,21718],{"class":1927},"m_PName",[76,21720,21721],{"class":86},"(pname) \n",[76,21723,21724],{"class":78,"line":1696},[76,21725,1994],{"class":86},[76,21727,21728,21730,21732,21735],{"class":78,"line":1713},[76,21729,3416],{"class":86},[76,21731,1132],{"class":82},[76,21733,21734],{"class":192},"\"Person的构造函数调用\"",[76,21736,1254],{"class":86},[76,21738,21739],{"class":78,"line":1718},[76,21740,2151],{"class":86},[76,21742,21743,21745],{"class":78,"line":1723},[76,21744,18519],{"class":1927},[76,21746,1940],{"class":86},[76,21748,21749],{"class":78,"line":1728},[76,21750,1994],{"class":86},[76,21752,21753,21755,21757,21760,21762],{"class":78,"line":1742},[76,21754,3416],{"class":86},[76,21756,1132],{"class":82},[76,21758,21759],{"class":192},"\"Person析构函数调用\"",[76,21761,1132],{"class":82},[76,21763,1155],{"class":86},[76,21765,21766],{"class":78,"line":1747},[76,21767,2151],{"class":86},[76,21769,21770],{"class":78,"line":2542},[76,21771,7747],{"class":146},[76,21773,21774],{"class":78,"line":2556},[76,21775,14859],{"class":86},[76,21777,21778],{"class":78,"line":2564},[76,21779,21780],{"class":146},"    \u002F\u002F手机\n",[76,21782,21783],{"class":78,"line":2569},[76,21784,21785],{"class":86},"    Phone m_Phone;\n",[76,21787,21788],{"class":78,"line":2575},[76,21789,3960],{"class":86},[76,21791,21792,21794,21796],{"class":78,"line":2581},[76,21793,5331],{"class":82},[76,21795,5555],{"class":1927},[76,21797,1940],{"class":86},[76,21799,21800],{"class":78,"line":2586},[76,21801,1510],{"class":86},[76,21803,21804,21806,21808,21810,21812,21814,21817],{"class":78,"line":7915},[76,21805,19398],{"class":86},[76,21807,21],{"class":1927},[76,21809,87],{"class":86},[76,21811,7883],{"class":192},[76,21813,466],{"class":86},[76,21815,21816],{"class":192},"\"安卓\"",[76,21818,2684],{"class":86},[76,21820,21821,21823,21825,21828,21830,21833,21835],{"class":78,"line":7939},[76,21822,1515],{"class":86},[76,21824,1132],{"class":82},[76,21826,21827],{"class":86},"p.Name",[76,21829,1132],{"class":82},[76,21831,21832],{"class":192},"\"拿着：\"",[76,21834,1132],{"class":82},[76,21836,21837],{"class":86},"p.m_phone.m_PName;\n",[76,21839,21840],{"class":78,"line":7944},[76,21841,1529],{"class":86},[76,21843,21844,21846,21848],{"class":78,"line":7950},[76,21845,90],{"class":82},[76,21847,1937],{"class":1927},[76,21849,1940],{"class":86},[76,21851,21852],{"class":78,"line":7977},[76,21853,1510],{"class":86},[76,21855,21856,21858],{"class":78,"line":7982},[76,21857,5600],{"class":1927},[76,21859,5603],{"class":86},[76,21861,21862],{"class":78,"line":7988},[76,21863,1529],{"class":86},[21,21865,8992],{},[66,21867,21869],{"className":68,"code":21868,"language":70,"meta":71,"style":71},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[73,21870,21871,21876],{"__ignoreMap":71},[76,21872,21873],{"class":78,"line":79},[76,21874,21875],{"class":146},"    \u002F\u002F不需要写这个：\n",[76,21877,21878],{"class":78,"line":96},[76,21879,21880],{"class":146},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[21,21882,21883],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[66,21885,21887],{"className":68,"code":21886,"language":70,"meta":71,"style":71},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[73,21888,21889],{"__ignoreMap":71},[76,21890,21891,21893,21896,21898,21901,21904],{"class":78,"line":79},[76,21892,19013],{"class":1927},[76,21894,21895],{"class":86},"(string name.string pname):",[76,21897,14977],{"class":1927},[76,21899,21900],{"class":86},"(name),",[76,21902,21903],{"class":1927},"m_phone",[76,21905,21906],{"class":86},"(pname) {}\n",[21,21908,21909,21910,133,21913],{},"采用的是隐式转换法，实际为如下：\n",[73,21911,21912],{},"m_phone(pname)",[73,21914,21915],{},"Phone m_phone=pname",[21,21917,21918,21921],{},[237,21919,21920],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[21,21923,21924],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[46,21926,21928],{"id":21927},"_828静态对象","8.2.8静态对象",[21,21930,21931],{},"静态对象在成员对象前static，称为静态对象",[21,21933,21934],{},"静态对象分为两类：",[29,21936,21937],{},[32,21938,21939],{},"静态成员变量",[1095,21941,21942,21945,21948],{},[32,21943,21944],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[32,21946,21947],{},"②在编译阶段分配内存",[32,21949,21950],{},"③类内声明，类外初始化",[29,21952,21953],{"start":96},[32,21954,21955],{},"静态成员函数",[1095,21957,21958,21961],{},[32,21959,21960],{},"①所有对象共享同一个函数",[32,21962,21963],{},"②静态成员函数只能访问静态成员变量",[21965,21966,21968],"h4",{"id":21967},"_8281静态成员变量","8.2.8.1静态成员变量",[66,21970,21972],{"className":68,"code":21971,"language":70,"meta":71,"style":71},"#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",[73,21973,21974,21980,21990,21996,22000,22004,22009,22014,22019,22027,22031,22035,22039,22047,22051,22055,22060,22073,22077,22085,22089,22095],{"__ignoreMap":71},[76,21975,21976,21978],{"class":78,"line":79},[76,21977,1913],{"class":82},[76,21979,1916],{"class":192},[76,21981,21982,21984,21986,21988],{"class":78,"line":96},[76,21983,1921],{"class":82},[76,21985,1924],{"class":82},[76,21987,1928],{"class":1927},[76,21989,1254],{"class":86},[76,21991,21992,21994],{"class":78,"line":1143},[76,21993,14661],{"class":82},[76,21995,15138],{"class":1927},[76,21997,21998],{"class":78,"line":1158},[76,21999,1510],{"class":86},[76,22001,22002],{"class":78,"line":1164},[76,22003,14683],{"class":82},[76,22005,22006],{"class":78,"line":1178},[76,22007,22008],{"class":146},"    \u002F\u002F非静态成员变量\n",[76,22010,22011],{"class":78,"line":1184},[76,22012,22013],{"class":146},"    \u002F\u002F int m_A;\n",[76,22015,22016],{"class":78,"line":1275},[76,22017,22018],{"class":146},"    \u002F\u002F定义静态成员变量\n",[76,22020,22021,22023,22025],{"class":78,"line":1281},[76,22022,10987],{"class":82},[76,22024,2346],{"class":82},[76,22026,21359],{"class":86},[76,22028,22029],{"class":78,"line":1293},[76,22030,2365],{"emptyLinePlaceholder":2364},[76,22032,22033],{"class":78,"line":1576},[76,22034,2365],{"emptyLinePlaceholder":2364},[76,22036,22037],{"class":78,"line":1581},[76,22038,3960],{"class":86},[76,22040,22041,22043,22045],{"class":78,"line":1587},[76,22042,5331],{"class":82},[76,22044,5555],{"class":1927},[76,22046,1940],{"class":86},[76,22048,22049],{"class":78,"line":1592},[76,22050,1510],{"class":86},[76,22052,22053],{"class":78,"line":1606},[76,22054,15280],{"class":86},[76,22056,22057],{"class":78,"line":1611},[76,22058,22059],{"class":146},"    \u002F\u002F输出类成员变量这块内存\n",[76,22061,22062,22064,22066,22069,22071],{"class":78,"line":1617},[76,22063,1515],{"class":86},[76,22065,1132],{"class":82},[76,22067,22068],{"class":86},"p.m_A",[76,22070,1132],{"class":82},[76,22072,1155],{"class":86},[76,22074,22075],{"class":78,"line":1638},[76,22076,1529],{"class":86},[76,22078,22079,22081,22083],{"class":78,"line":1643},[76,22080,90],{"class":82},[76,22082,1937],{"class":1927},[76,22084,1940],{"class":86},[76,22086,22087],{"class":78,"line":1657},[76,22088,1510],{"class":86},[76,22090,22091,22093],{"class":78,"line":1662},[76,22092,5600],{"class":1927},[76,22094,1940],{"class":86},[76,22096,22097],{"class":78,"line":1691},[76,22098,1529],{"class":86},[21,22100,22101],{},"此时输出是报错的：无法解析外部命令",[21,22103,22104],{},"解决这一问题：必须用到类内声明，类外初始化操作",[66,22106,22108],{"className":68,"code":22107,"language":70,"meta":71,"style":71},"#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",[73,22109,22110,22116,22126,22132,22136,22140,22145,22153,22157,22162,22177,22185,22189,22193,22198,22203,22215,22220,22231,22236,22241,22254,22258,22266,22270,22276],{"__ignoreMap":71},[76,22111,22112,22114],{"class":78,"line":79},[76,22113,1913],{"class":82},[76,22115,1916],{"class":192},[76,22117,22118,22120,22122,22124],{"class":78,"line":96},[76,22119,1921],{"class":82},[76,22121,1924],{"class":82},[76,22123,1928],{"class":1927},[76,22125,1254],{"class":86},[76,22127,22128,22130],{"class":78,"line":1143},[76,22129,14661],{"class":82},[76,22131,15138],{"class":1927},[76,22133,22134],{"class":78,"line":1158},[76,22135,1510],{"class":86},[76,22137,22138],{"class":78,"line":1164},[76,22139,14683],{"class":82},[76,22141,22142],{"class":78,"line":1178},[76,22143,22144],{"class":146},"    \u002F\u002F类内声明\n",[76,22146,22147,22149,22151],{"class":78,"line":1184},[76,22148,10987],{"class":82},[76,22150,2346],{"class":82},[76,22152,21359],{"class":86},[76,22154,22155],{"class":78,"line":1275},[76,22156,3960],{"class":86},[76,22158,22159],{"class":78,"line":1281},[76,22160,22161],{"class":146},"\u002F\u002F类外初始化\n",[76,22163,22164,22166,22168,22171,22173,22175],{"class":78,"line":1293},[76,22165,90],{"class":82},[76,22167,15536],{"class":1927},[76,22169,22170],{"class":86},"::m_A",[76,22172,133],{"class":82},[76,22174,534],{"class":136},[76,22176,1254],{"class":86},[76,22178,22179,22181,22183],{"class":78,"line":1576},[76,22180,5331],{"class":82},[76,22182,5555],{"class":1927},[76,22184,1940],{"class":86},[76,22186,22187],{"class":78,"line":1581},[76,22188,1510],{"class":86},[76,22190,22191],{"class":78,"line":1587},[76,22192,15280],{"class":86},[76,22194,22195],{"class":78,"line":1592},[76,22196,22197],{"class":146},"    \u002F\u002F访问变量的原内存空间\n",[76,22199,22200],{"class":78,"line":1606},[76,22201,22202],{"class":146},"    \u002F\u002F100\n",[76,22204,22205,22207,22209,22211,22213],{"class":78,"line":1611},[76,22206,1515],{"class":86},[76,22208,1132],{"class":82},[76,22210,22068],{"class":86},[76,22212,1132],{"class":82},[76,22214,1155],{"class":86},[76,22216,22217],{"class":78,"line":1617},[76,22218,22219],{"class":86},"    Person p2;\n",[76,22221,22222,22225,22227,22229],{"class":78,"line":1638},[76,22223,22224],{"class":86},"    p2.m_A",[76,22226,133],{"class":82},[76,22228,1686],{"class":136},[76,22230,1254],{"class":86},[76,22232,22233],{"class":78,"line":1643},[76,22234,22235],{"class":146},"    \u002F\u002F继续访问这片空间\n",[76,22237,22238],{"class":78,"line":1657},[76,22239,22240],{"class":146},"    \u002F\u002F200\n",[76,22242,22243,22245,22247,22250,22252],{"class":78,"line":1662},[76,22244,1515],{"class":86},[76,22246,1132],{"class":82},[76,22248,22249],{"class":86},"p2.m_A",[76,22251,1132],{"class":82},[76,22253,1155],{"class":86},[76,22255,22256],{"class":78,"line":1691},[76,22257,1529],{"class":86},[76,22259,22260,22262,22264],{"class":78,"line":1696},[76,22261,90],{"class":82},[76,22263,1937],{"class":1927},[76,22265,1940],{"class":86},[76,22267,22268],{"class":78,"line":1713},[76,22269,1510],{"class":86},[76,22271,22272,22274],{"class":78,"line":1718},[76,22273,5600],{"class":1927},[76,22275,5603],{"class":86},[76,22277,22278],{"class":78,"line":1723},[76,22279,1529],{"class":86},[21,22281,22282],{},[237,22283,22284],{},"静态变量的访问",[66,22286,22288],{"className":68,"code":22287,"language":70,"meta":71,"style":71},"#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",[73,22289,22290,22296,22306,22312,22316,22320,22324,22332,22336,22341,22349,22353,22357,22371,22386,22394,22398,22403,22408,22413,22418,22430,22435,22440,22454,22471,22475,22483,22487,22493],{"__ignoreMap":71},[76,22291,22292,22294],{"class":78,"line":79},[76,22293,1913],{"class":82},[76,22295,1916],{"class":192},[76,22297,22298,22300,22302,22304],{"class":78,"line":96},[76,22299,1921],{"class":82},[76,22301,1924],{"class":82},[76,22303,1928],{"class":1927},[76,22305,1254],{"class":86},[76,22307,22308,22310],{"class":78,"line":1143},[76,22309,14661],{"class":82},[76,22311,15138],{"class":1927},[76,22313,22314],{"class":78,"line":1158},[76,22315,1510],{"class":86},[76,22317,22318],{"class":78,"line":1164},[76,22319,14683],{"class":82},[76,22321,22322],{"class":78,"line":1178},[76,22323,22144],{"class":146},[76,22325,22326,22328,22330],{"class":78,"line":1184},[76,22327,10987],{"class":82},[76,22329,2346],{"class":82},[76,22331,21359],{"class":86},[76,22333,22334],{"class":78,"line":1275},[76,22335,15189],{"class":82},[76,22337,22338],{"class":78,"line":1281},[76,22339,22340],{"class":146},"    \u002F\u002F静态成员变量也是有访问权限的\n",[76,22342,22343,22345,22347],{"class":78,"line":1293},[76,22344,10987],{"class":82},[76,22346,2346],{"class":82},[76,22348,21366],{"class":86},[76,22350,22351],{"class":78,"line":1576},[76,22352,3960],{"class":86},[76,22354,22355],{"class":78,"line":1581},[76,22356,22161],{"class":146},[76,22358,22359,22361,22363,22365,22367,22369],{"class":78,"line":1587},[76,22360,90],{"class":82},[76,22362,15536],{"class":1927},[76,22364,22170],{"class":86},[76,22366,133],{"class":82},[76,22368,534],{"class":136},[76,22370,1254],{"class":86},[76,22372,22373,22375,22377,22380,22382,22384],{"class":78,"line":1592},[76,22374,90],{"class":82},[76,22376,15536],{"class":1927},[76,22378,22379],{"class":86},"::m_B",[76,22381,133],{"class":82},[76,22383,788],{"class":136},[76,22385,1254],{"class":86},[76,22387,22388,22390,22392],{"class":78,"line":1606},[76,22389,5331],{"class":82},[76,22391,5624],{"class":1927},[76,22393,1940],{"class":86},[76,22395,22396],{"class":78,"line":1611},[76,22397,1510],{"class":86},[76,22399,22400],{"class":78,"line":1617},[76,22401,22402],{"class":146},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[76,22404,22405],{"class":78,"line":1638},[76,22406,22407],{"class":146},"    \u002F\u002F静态成员变量有两种访问方式：\n",[76,22409,22410],{"class":78,"line":1643},[76,22411,22412],{"class":146},"    \u002F\u002F1.通过对象进行访问\n",[76,22414,22415],{"class":78,"line":1657},[76,22416,22417],{"class":86},"    Person p;  \n",[76,22419,22420,22422,22424,22426,22428],{"class":78,"line":1662},[76,22421,1515],{"class":86},[76,22423,1132],{"class":82},[76,22425,22068],{"class":86},[76,22427,1132],{"class":82},[76,22429,1155],{"class":86},[76,22431,22432],{"class":78,"line":1691},[76,22433,22434],{"class":146},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[76,22436,22437],{"class":78,"line":1696},[76,22438,22439],{"class":146},"    \u002F\u002F2.通过类名进行访问\n",[76,22441,22442,22444,22446,22448,22450,22452],{"class":78,"line":1713},[76,22443,1515],{"class":86},[76,22445,1132],{"class":82},[76,22447,19013],{"class":1927},[76,22449,22170],{"class":86},[76,22451,1132],{"class":82},[76,22453,1155],{"class":86},[76,22455,22456,22458,22460,22462,22464,22466,22468],{"class":78,"line":1718},[76,22457,1515],{"class":86},[76,22459,1132],{"class":82},[76,22461,19013],{"class":1927},[76,22463,22379],{"class":86},[76,22465,1132],{"class":82},[76,22467,1202],{"class":86},[76,22469,22470],{"class":146}," \u002F\u002F没有访问权限，报错\n",[76,22472,22473],{"class":78,"line":1723},[76,22474,1529],{"class":86},[76,22476,22477,22479,22481],{"class":78,"line":1728},[76,22478,90],{"class":82},[76,22480,1937],{"class":1927},[76,22482,1940],{"class":86},[76,22484,22485],{"class":78,"line":1742},[76,22486,1510],{"class":86},[76,22488,22489,22491],{"class":78,"line":1747},[76,22490,5669],{"class":1927},[76,22492,5603],{"class":86},[76,22494,22495],{"class":78,"line":2542},[76,22496,1529],{"class":86},[21965,22498,22500],{"id":22499},"_8282静态成员函数","8.2.8.2静态成员函数",[21,22502,22503],{},"1.静态成员函数定义与访问",[66,22505,22507],{"className":68,"code":22506,"language":70,"meta":71,"style":71},"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",[73,22508,22509,22515,22519,22523,22528,22539,22543,22557,22561,22565,22573,22577,22582,22587,22591,22599,22604,22614],{"__ignoreMap":71},[76,22510,22511,22513],{"class":78,"line":79},[76,22512,14661],{"class":82},[76,22514,15138],{"class":1927},[76,22516,22517],{"class":78,"line":96},[76,22518,1510],{"class":86},[76,22520,22521],{"class":78,"line":1143},[76,22522,14683],{"class":82},[76,22524,22525],{"class":78,"line":1158},[76,22526,22527],{"class":146},"    \u002F\u002F在公共权限下定义静态成员函数\n",[76,22529,22530,22532,22535,22537],{"class":78,"line":1164},[76,22531,10987],{"class":82},[76,22533,22534],{"class":82}," void",[76,22536,11352],{"class":1927},[76,22538,1940],{"class":86},[76,22540,22541],{"class":78,"line":1178},[76,22542,1994],{"class":86},[76,22544,22545,22548,22550,22553,22555],{"class":78,"line":1184},[76,22546,22547],{"class":86},"        coout",[76,22549,1132],{"class":82},[76,22551,22552],{"class":192},"\"静态成员函数的调用\"",[76,22554,1132],{"class":82},[76,22556,1155],{"class":86},[76,22558,22559],{"class":78,"line":1275},[76,22560,2151],{"class":86},[76,22562,22563],{"class":78,"line":1281},[76,22564,3960],{"class":86},[76,22566,22567,22569,22571],{"class":78,"line":1293},[76,22568,5331],{"class":82},[76,22570,5555],{"class":1927},[76,22572,1940],{"class":86},[76,22574,22575],{"class":78,"line":1576},[76,22576,1510],{"class":86},[76,22578,22579],{"class":78,"line":1581},[76,22580,22581],{"class":146},"    \u002F\u002F静态成员函数的调用方式:\n",[76,22583,22584],{"class":78,"line":1587},[76,22585,22586],{"class":146},"    \u002F\u002F1.通过对象访问\n",[76,22588,22589],{"class":78,"line":1592},[76,22590,15280],{"class":86},[76,22592,22593,22595,22597],{"class":78,"line":1606},[76,22594,15833],{"class":86},[76,22596,11518],{"class":1927},[76,22598,5603],{"class":86},[76,22600,22601],{"class":78,"line":1611},[76,22602,22603],{"class":146},"    \u002F\u002F2.通过类名访问\n",[76,22605,22606,22608,22610,22612],{"class":78,"line":1617},[76,22607,18486],{"class":1927},[76,22609,17699],{"class":86},[76,22611,11518],{"class":1927},[76,22613,5603],{"class":86},[76,22615,22616],{"class":78,"line":1638},[76,22617,1529],{"class":86},[29,22619,22620],{"start":96},[32,22621,22622],{},"静态成员函数只能访问静态成员变量",[66,22624,22626],{"className":68,"code":22625,"language":70,"meta":71,"style":71},"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",[73,22627,22628,22634,22638,22642,22646,22656,22660,22674,22679,22691,22695,22706,22716,22720,22724,22728,22738,22742,22755,22759,22763,22767,22771,22785,22793,22797,22801,22805,22809,22817,22821,22831,22836,22840,22848,22852,22858],{"__ignoreMap":71},[76,22629,22630,22632],{"class":78,"line":79},[76,22631,14661],{"class":82},[76,22633,15138],{"class":1927},[76,22635,22636],{"class":78,"line":96},[76,22637,1510],{"class":86},[76,22639,22640],{"class":78,"line":1143},[76,22641,14683],{"class":82},[76,22643,22644],{"class":78,"line":1158},[76,22645,22527],{"class":146},[76,22647,22648,22650,22652,22654],{"class":78,"line":1164},[76,22649,10987],{"class":82},[76,22651,22534],{"class":82},[76,22653,11352],{"class":1927},[76,22655,1940],{"class":86},[76,22657,22658],{"class":78,"line":1178},[76,22659,1994],{"class":86},[76,22661,22662,22665,22667,22669,22671],{"class":78,"line":1184},[76,22663,22664],{"class":86},"        m_A",[76,22666,133],{"class":82},[76,22668,399],{"class":136},[76,22670,143],{"class":86},[76,22672,22673],{"class":146}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[76,22675,22676],{"class":78,"line":1275},[76,22677,22678],{"class":146},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[76,22680,22681,22683,22685,22687,22689],{"class":78,"line":1281},[76,22682,22547],{"class":86},[76,22684,1132],{"class":82},[76,22686,22552],{"class":192},[76,22688,1132],{"class":82},[76,22690,1155],{"class":86},[76,22692,22693],{"class":78,"line":1293},[76,22694,2151],{"class":86},[76,22696,22697,22699,22701,22703],{"class":78,"line":1576},[76,22698,10987],{"class":82},[76,22700,2346],{"class":82},[76,22702,15415],{"class":86},[76,22704,22705],{"class":146}," \u002F\u002F静态成员变量\n",[76,22707,22708,22710,22713],{"class":78,"line":1581},[76,22709,1949],{"class":82},[76,22711,22712],{"class":86}," m_B;",[76,22714,22715],{"class":146}," \u002F\u002F非静态成员变量\n",[76,22717,22718],{"class":78,"line":1587},[76,22719,2365],{"emptyLinePlaceholder":2364},[76,22721,22722],{"class":78,"line":1592},[76,22723,15189],{"class":82},[76,22725,22726],{"class":78,"line":1606},[76,22727,22340],{"class":146},[76,22729,22730,22732,22734,22736],{"class":78,"line":1611},[76,22731,10987],{"class":82},[76,22733,22534],{"class":82},[76,22735,13585],{"class":1927},[76,22737,1940],{"class":86},[76,22739,22740],{"class":78,"line":1617},[76,22741,1994],{"class":86},[76,22743,22744,22746,22748,22751,22753],{"class":78,"line":1638},[76,22745,3416],{"class":86},[76,22747,1132],{"class":82},[76,22749,22750],{"class":192},"\"这是私有权限下的静态函数调用\"",[76,22752,1132],{"class":82},[76,22754,1155],{"class":86},[76,22756,22757],{"class":78,"line":1643},[76,22758,2151],{"class":86},[76,22760,22761],{"class":78,"line":1657},[76,22762,2365],{"emptyLinePlaceholder":2364},[76,22764,22765],{"class":78,"line":1662},[76,22766,2365],{"emptyLinePlaceholder":2364},[76,22768,22769],{"class":78,"line":1691},[76,22770,3960],{"class":86},[76,22772,22773,22775,22777,22779,22781,22783],{"class":78,"line":1696},[76,22774,90],{"class":82},[76,22776,15536],{"class":1927},[76,22778,22170],{"class":86},[76,22780,133],{"class":82},[76,22782,279],{"class":136},[76,22784,1254],{"class":86},[76,22786,22787,22789,22791],{"class":78,"line":1713},[76,22788,5331],{"class":82},[76,22790,5555],{"class":1927},[76,22792,1940],{"class":86},[76,22794,22795],{"class":78,"line":1718},[76,22796,1510],{"class":86},[76,22798,22799],{"class":78,"line":1723},[76,22800,22581],{"class":146},[76,22802,22803],{"class":78,"line":1728},[76,22804,22586],{"class":146},[76,22806,22807],{"class":78,"line":1742},[76,22808,15280],{"class":86},[76,22810,22811,22813,22815],{"class":78,"line":1747},[76,22812,15833],{"class":86},[76,22814,11518],{"class":1927},[76,22816,5603],{"class":86},[76,22818,22819],{"class":78,"line":2542},[76,22820,22603],{"class":146},[76,22822,22823,22825,22827,22829],{"class":78,"line":2556},[76,22824,18486],{"class":1927},[76,22826,17699],{"class":86},[76,22828,11518],{"class":1927},[76,22830,5603],{"class":86},[76,22832,22833],{"class":78,"line":2564},[76,22834,22835],{"class":146},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[76,22837,22838],{"class":78,"line":2569},[76,22839,1529],{"class":86},[76,22841,22842,22844,22846],{"class":78,"line":2575},[76,22843,90],{"class":82},[76,22845,1937],{"class":1927},[76,22847,1940],{"class":86},[76,22849,22850],{"class":78,"line":2581},[76,22851,1510],{"class":86},[76,22853,22854,22856],{"class":78,"line":2586},[76,22855,5600],{"class":1927},[76,22857,5603],{"class":86},[76,22859,22860],{"class":78,"line":7915},[76,22861,1529],{"class":86},[46,22863,22865],{"id":22864},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21965,22867,22869],{"id":22868},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[21,22871,22872],{},"在c++中，类内的成员变量和成员函数分开存储",[21,22874,22875],{},"只有非静态成员变量才属于类的对象上",[22877,22878,22880],"h5",{"id":22879},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[66,22882,22884],{"className":68,"code":22883,"language":70,"meta":71,"style":71},"#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",[73,22885,22886,22893,22903,22909,22913,22917,22921,22929,22933,22937,22960,22964,22972,22976,22982],{"__ignoreMap":71},[76,22887,22888,22890],{"class":78,"line":79},[76,22889,1913],{"class":82},[76,22891,22892],{"class":192},"\u003Ciostraem>\n",[76,22894,22895,22897,22899,22901],{"class":78,"line":96},[76,22896,1921],{"class":82},[76,22898,1924],{"class":82},[76,22900,1928],{"class":1927},[76,22902,1254],{"class":86},[76,22904,22905,22907],{"class":78,"line":1143},[76,22906,14661],{"class":82},[76,22908,15138],{"class":1927},[76,22910,22911],{"class":78,"line":1158},[76,22912,1510],{"class":86},[76,22914,22915],{"class":78,"line":1164},[76,22916,2365],{"emptyLinePlaceholder":2364},[76,22918,22919],{"class":78,"line":1178},[76,22920,3960],{"class":86},[76,22922,22923,22925,22927],{"class":78,"line":1184},[76,22924,5331],{"class":82},[76,22926,5555],{"class":1927},[76,22928,1940],{"class":86},[76,22930,22931],{"class":78,"line":1275},[76,22932,1510],{"class":86},[76,22934,22935],{"class":78,"line":1281},[76,22936,15280],{"class":86},[76,22938,22939,22941,22943,22946,22948,22951,22953,22955,22957],{"class":78,"line":1293},[76,22940,1515],{"class":86},[76,22942,1132],{"class":82},[76,22944,22945],{"class":192},"\"size of p=\"",[76,22947,1132],{"class":82},[76,22949,22950],{"class":1927},"sizeoif",[76,22952,6506],{"class":86},[76,22954,1132],{"class":82},[76,22956,1202],{"class":86},[76,22958,22959],{"class":146}," \u002F\u002F查看这个空类的占用的内存空间\n",[76,22961,22962],{"class":78,"line":1576},[76,22963,1529],{"class":86},[76,22965,22966,22968,22970],{"class":78,"line":1581},[76,22967,90],{"class":82},[76,22969,1937],{"class":1927},[76,22971,1940],{"class":86},[76,22973,22974],{"class":78,"line":1587},[76,22975,1510],{"class":86},[76,22977,22978,22980],{"class":78,"line":1592},[76,22979,5600],{"class":1927},[76,22981,5603],{"class":86},[76,22983,22984],{"class":78,"line":1606},[76,22985,1529],{"class":86},[21,22987,22988],{},"输出结果为：size of p=1",[21,22990,22991],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[21,22993,22994],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22877,22996,22998],{"id":22997},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[66,23000,23002],{"className":68,"code":23001,"language":70,"meta":71,"style":71},"#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",[73,23003,23004,23010,23020,23028,23032,23041,23045,23053,23057,23061,23080,23084,23088,23096,23100,23106],{"__ignoreMap":71},[76,23005,23006,23008],{"class":78,"line":79},[76,23007,1913],{"class":82},[76,23009,1916],{"class":192},[76,23011,23012,23014,23016,23018],{"class":78,"line":96},[76,23013,1921],{"class":82},[76,23015,1924],{"class":82},[76,23017,1928],{"class":1927},[76,23019,1254],{"class":86},[76,23021,23022,23024,23026],{"class":78,"line":1143},[76,23023,14661],{"class":82},[76,23025,15536],{"class":1927},[76,23027,2639],{"class":86},[76,23029,23030],{"class":78,"line":1158},[76,23031,1510],{"class":86},[76,23033,23034,23036,23038],{"class":78,"line":1164},[76,23035,1949],{"class":82},[76,23037,15415],{"class":86},[76,23039,23040],{"class":146},"\u002F\u002F非静态成员变量\n",[76,23042,23043],{"class":78,"line":1178},[76,23044,3960],{"class":86},[76,23046,23047,23049,23051],{"class":78,"line":1184},[76,23048,5331],{"class":82},[76,23050,5555],{"class":1927},[76,23052,1940],{"class":86},[76,23054,23055],{"class":78,"line":1275},[76,23056,1510],{"class":86},[76,23058,23059],{"class":78,"line":1281},[76,23060,15280],{"class":86},[76,23062,23063,23065,23067,23069,23071,23073,23075,23077],{"class":78,"line":1293},[76,23064,1515],{"class":86},[76,23066,1132],{"class":82},[76,23068,22945],{"class":192},[76,23070,1336],{"class":82},[76,23072,6506],{"class":86},[76,23074,1132],{"class":82},[76,23076,1202],{"class":86},[76,23078,23079],{"class":146}," \u002F\u002F查看不是空对象时占用多少内存\n",[76,23081,23082],{"class":78,"line":1576},[76,23083,2365],{"emptyLinePlaceholder":2364},[76,23085,23086],{"class":78,"line":1581},[76,23087,1529],{"class":86},[76,23089,23090,23092,23094],{"class":78,"line":1587},[76,23091,90],{"class":82},[76,23093,1937],{"class":1927},[76,23095,1940],{"class":86},[76,23097,23098],{"class":78,"line":1592},[76,23099,1510],{"class":86},[76,23101,23102,23104],{"class":78,"line":1606},[76,23103,5600],{"class":1927},[76,23105,5603],{"class":86},[76,23107,23108],{"class":78,"line":1611},[76,23109,1529],{"class":86},[21,23111,23112],{},"输出结果：size of p=4",[21,23114,23115],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[29,23117,23118],{},[32,23119,23120],{},"如果加上非静态成员变量，Person类修改如下",[66,23122,23124],{"className":68,"code":23123,"language":70,"meta":71,"style":71},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[73,23125,23126,23132,23136,23142,23150,23154,23159],{"__ignoreMap":71},[76,23127,23128,23130],{"class":78,"line":79},[76,23129,14661],{"class":82},[76,23131,15138],{"class":1927},[76,23133,23134],{"class":78,"line":96},[76,23135,1510],{"class":86},[76,23137,23138,23140],{"class":78,"line":1143},[76,23139,1949],{"class":82},[76,23141,21359],{"class":86},[76,23143,23144,23146,23148],{"class":78,"line":1158},[76,23145,10987],{"class":82},[76,23147,2346],{"class":82},[76,23149,21366],{"class":86},[76,23151,23152],{"class":78,"line":1164},[76,23153,3960],{"class":86},[76,23155,23156],{"class":78,"line":1178},[76,23157,23158],{"class":146},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[76,23160,23161,23163,23165,23167,23169,23171],{"class":78,"line":1184},[76,23162,90],{"class":82},[76,23164,15536],{"class":1927},[76,23166,22379],{"class":86},[76,23168,133],{"class":82},[76,23170,279],{"class":136},[76,23172,1254],{"class":86},[21,23174,23175],{},"输出结果：4",[21,23177,23178],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[29,23180,23181],{"start":96},[32,23182,23183],{},"加上非静态成员函数",[66,23185,23187],{"className":68,"code":23186,"language":70,"meta":71,"style":71},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[73,23188,23189,23196,23200,23206,23214,23218,23222,23226],{"__ignoreMap":71},[76,23190,23191,23193],{"class":78,"line":79},[76,23192,14661],{"class":82},[76,23194,23195],{"class":1927},"  Person\n",[76,23197,23198],{"class":78,"line":96},[76,23199,1510],{"class":86},[76,23201,23202,23204],{"class":78,"line":1143},[76,23203,1949],{"class":82},[76,23205,21359],{"class":86},[76,23207,23208,23210,23212],{"class":78,"line":1158},[76,23209,14876],{"class":82},[76,23211,11352],{"class":1927},[76,23213,1940],{"class":86},[76,23215,23216],{"class":78,"line":1164},[76,23217,1994],{"class":86},[76,23219,23220],{"class":78,"line":1178},[76,23221,2365],{"emptyLinePlaceholder":2364},[76,23223,23224],{"class":78,"line":1184},[76,23225,2151],{"class":86},[76,23227,23228],{"class":78,"line":1275},[76,23229,3960],{"class":86},[21,23231,23232],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[29,23234,23235],{"start":1143},[32,23236,23237],{},"加上静态成员函数",[66,23239,23241],{"className":68,"code":23240,"language":70,"meta":71,"style":71},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[73,23242,23243,23249,23253,23259,23267,23271,23275,23279,23290,23294,23298,23302],{"__ignoreMap":71},[76,23244,23245,23247],{"class":78,"line":79},[76,23246,14661],{"class":82},[76,23248,23195],{"class":1927},[76,23250,23251],{"class":78,"line":96},[76,23252,1510],{"class":86},[76,23254,23255,23257],{"class":78,"line":1143},[76,23256,1949],{"class":82},[76,23258,21359],{"class":86},[76,23260,23261,23263,23265],{"class":78,"line":1158},[76,23262,14876],{"class":82},[76,23264,11352],{"class":1927},[76,23266,1940],{"class":86},[76,23268,23269],{"class":78,"line":1164},[76,23270,1994],{"class":86},[76,23272,23273],{"class":78,"line":1178},[76,23274,2365],{"emptyLinePlaceholder":2364},[76,23276,23277],{"class":78,"line":1184},[76,23278,2151],{"class":86},[76,23280,23281,23283,23285,23288],{"class":78,"line":1275},[76,23282,10987],{"class":82},[76,23284,22534],{"class":82},[76,23286,23287],{"class":1927}," func1",[76,23289,1940],{"class":86},[76,23291,23292],{"class":78,"line":1281},[76,23293,1994],{"class":86},[76,23295,23296],{"class":78,"line":1293},[76,23297,2365],{"emptyLinePlaceholder":2364},[76,23299,23300],{"class":78,"line":1576},[76,23301,2151],{"class":86},[76,23303,23304],{"class":78,"line":1581},[76,23305,3960],{"class":86},[21,23307,23175],{},[21,23309,23310],{},"解释：静态成员函数也不属于类上",[5092,23312,7641],{},{"title":71,"searchDepth":96,"depth":96,"links":23314},[23315,23321],{"id":14612,"depth":96,"text":14613,"children":23316},[23317,23318,23319,23320],{"id":14616,"depth":1143,"text":14617},{"id":15341,"depth":1143,"text":15342},{"id":15513,"depth":1143,"text":15514},{"id":15972,"depth":1143,"text":15973},{"id":18344,"depth":96,"text":18345,"children":23322},[23323,23324,23325,23326,23327,23328,23329,23330,23331],{"id":18356,"depth":1143,"text":18357},{"id":18649,"depth":1143,"text":18650},{"id":19140,"depth":1143,"text":19141},{"id":20237,"depth":1143,"text":20238},{"id":20660,"depth":1143,"text":20661},{"id":21139,"depth":1143,"text":21140},{"id":21514,"depth":1143,"text":21515},{"id":21927,"depth":1143,"text":21928},{"id":22864,"depth":1143,"text":22865},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14577,"description":23332},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23339,"title":70,"body":23340,"description":23344,"extension":5123,"meta":23345,"navigation":2364,"path":23347,"seo":23348,"stem":23349,"__hash__":23350},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":9,"value":23341,"toc":23342},[],{"title":71,"searchDepth":96,"depth":96,"links":23343},[],null,{"category":23346},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":70,"description":23344},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23352,"title":23353,"body":23354,"description":71,"extension":5123,"meta":23945,"navigation":2364,"path":23946,"seo":23947,"stem":23948,"__hash__":23949},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":9,"value":23355,"toc":23927},[23356,23359,23363,23366,23369,23372,23390,23395,23398,23401,23404,23407,23412,23415,23420,23423,23426,23430,23433,23436,23442,23445,23463,23467,23471,23474,23479,23482,23486,23489,23502,23505,23509,23512,23515,23518,23543,23546,23555,23566,23581,23613,23617,23624,23632,23636,23639,23642,23647,23651,23654,23657,23662,23665,23669,23672,23675,23680,23683,23687,23692,23696,23763,23767,23770,23773,23776,23779,23782,23788,23809,23812,23826,23835,23839,23842,23845,23850,23853,23858,23863,23866,23869,23874,23879,23882,23887,23892,23895,23900,23905,23908,23911,23916,23919,23924],[12,23357,23353],{"id":23358},"_1强化学习基本认识",[16,23360,23362],{"id":23361},"_11什么是强化学习","1.1.什么是强化学习",[21,23364,23365],{},"强化学习有两部分组成：智能体和环境；",[21,23367,23368],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[21,23370,23371],{},"强化学习与监督学习的区别:",[29,23373,23374,23377,23380,23383],{},[32,23375,23376],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[32,23378,23379],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[32,23381,23382],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[32,23384,23385,23386,23389],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[237,23387,23388],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[21,23391,23392],{},[1426,23393],{"alt":71,"src":23394},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[21,23396,23397],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[21,23399,23400],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[21,23402,23403],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[21,23405,23406],{},"获取奖励",[21,23408,23409],{},[1426,23410],{"alt":71,"src":23411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[21,23413,23414],{},"强化学习可以分成标准强化学习和深度强化学习",[21,23416,23417],{},[1426,23418],{"alt":71,"src":23419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[21,23421,23422],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[21,23424,23425],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[16,23427,23429],{"id":23428},"_12强化学习应用场景","1.2.强化学习应用场景",[21,23431,23432],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[21,23434,23435],{},"具身智能中的应用",[21,23437,23438,23441],{},[237,23439,23440],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[21,23443,23444],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[21,23446,23447,23448,23451,23452,23455,23456,23459,23460],{},"机器人是",[237,23449,23450],{},"躯体","，深度学习是",[237,23453,23454],{},"神经元****网络","，VLA是",[237,23457,23458],{},"通用的行为逻辑","，而强化学习是",[237,23461,23462],{},"教练",[16,23464,23466],{"id":23465},"_13序列决策","1.3.序列决策",[46,23468,23470],{"id":23469},"_131智能体与环境","1.3.1.智能体与环境",[21,23472,23473],{},"强化学习研究的问题是智能体agent与环境交互的问题",[21,23475,23476],{},[1426,23477],{"alt":71,"src":23478},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[21,23480,23481],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[46,23483,23485],{"id":23484},"_132奖励","1.3.2.奖励",[21,23487,23488],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[21,23490,23491,23492,23501],{},"取某个策略的表现如何。强化学习的目的就是",[237,23493,23494,23495,23500],{},"最大化",[237,23496,23497],{},[237,23498,23499],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[21,23503,23504],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[46,23506,23508],{"id":23507},"_133序列决策","1.3.3.序列决策",[21,23510,23511],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[21,23513,23514],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[21,23516,23517],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[21,23519,23520,23524,23525,23527,23528,23530,23531,23533,23534,13762,23537,13762,23540],{},[23521,23522,23523],"em",{},"Ht"," = ",[23521,23526,684],{},"1*, a",[23521,23529,305],{},", r",[23521,23532,305],{},", . . . ,* ",[23521,23535,23536],{},"ot",[23521,23538,23539],{},", at ,",[23521,23541,23542],{},"rt",[21,23544,23545],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[21,23547,23548,23524,23551,1622,23553,517],{},[23521,23549,23550],{},"st",[23521,23552,140],{},[23521,23554,23523],{},[21,23556,23557,23558,23561,23562,23565],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[237,23559,23560],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[237,23563,23564],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[21,23567,23568,23569,23572,23573,23576,23577,23580],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[237,23570,23571],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[237,23574,23575],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23521,23578,23579],{},"S, A, T, R, Ω, O, γ",")。",[21,23582,23583,23584,23586,23587,23589,23590,87,23592,23595,23596,23598,23599,87,23602,23605,23606,23608,23609,23612],{},"其中 ",[23521,23585,777],{}," 表示状态空间，为隐变量，",[23521,23588,320],{}," 为动作空间，",[23521,23591,802],{},[23521,23593,23594],{},"s ′ |s, a",") 为状态转移概率，",[23521,23597,752],{}," 为奖励函数，",[23521,23600,23601],{},"Ω",[23521,23603,23604],{},"o|s, a",") 为观测概率，",[23521,23607,678],{}," 为观测空间，",[23521,23610,23611],{},"γ"," 为折扣因子。",[16,23614,23616],{"id":23615},"_14动作空间","1.4.动作空间",[21,23618,23619,23620,23623],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[237,23621,23622],{},"动作空间"," ，动作空间分为:",[29,23625,23626,23629],{},[32,23627,23628],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[32,23630,23631],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[16,23633,23635],{"id":23634},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[21,23637,23638],{},"由策略、价值函数、模型三部分组成",[21,23640,23641],{},"这三者组成马尔可夫决策过程",[21,23643,23644],{},[1426,23645],{"alt":71,"src":23646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[46,23648,23650],{"id":23649},"_151策略","1.5.1.策略",[21,23652,23653],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[21,23655,23656],{},"策略可分为两种：",[21,23658,23659],{},[1426,23660],{"alt":71,"src":23661},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[21,23663,23664],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[46,23666,23668],{"id":23667},"_152价值函数","1.5.2.价值函数",[21,23670,23671],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[21,23673,23674],{},"价值函数中有一个折扣因子，类似于存款利息",[21,23676,23677],{},[1426,23678],{"alt":71,"src":23679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[21,23681,23682],{},"进入某个状态采取的最优动作可以通过Q函数得到",[46,23684,23686],{"id":23685},"_153模型","1.5.3.模型",[21,23688,23689],{},[1426,23690],{"alt":71,"src":23691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[16,23693,23695],{"id":23694},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[225,23697,23698,23709],{},[228,23699,23700],{},[231,23701,23702,23706],{},[234,23703,23705],{"align":23704},"left","类型",[234,23707,23708],{"align":23704},"特点",[272,23710,23711,23721,23731,23741,23753],{},[231,23712,23713,23718],{},[277,23714,23715],{"align":23704},[237,23716,23717],{},"基于价值的智能体",[277,23719,23720],{"align":23704},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[231,23722,23723,23728],{},[277,23724,23725],{"align":23704},[237,23726,23727],{},"基于策略的智能体",[277,23729,23730],{"align":23704},"直接学习策略，没有学习价值函数",[231,23732,23733,23738],{},[277,23734,23735],{"align":23704},[237,23736,23737],{},"演员-评论员智能体",[277,23739,23740],{"align":23704},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[231,23742,23743,23748],{},[277,23744,23745],{"align":23704},[237,23746,23747],{},"有模型强化学习智能体",[277,23749,23750],{"align":23704},[1426,23751],{"alt":71,"src":23752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[231,23754,23755,23760],{},[277,23756,23757],{"align":23704},[237,23758,23759],{},"免模型强化学习智能体",[277,23761,23762],{"align":23704},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[16,23764,23766],{"id":23765},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[21,23768,23769],{},"学习和规划是序列决策的两个基本问题",[21,23771,23772],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[21,23774,23775],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[21,23777,23778],{},"强化学习用到的库：Gym",[21,23780,23781],{},"Gym可以检验强化学习算法的优劣",[21,23783,23784,23787],{},[237,23785,23786],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[66,23789,23793],{"className":23790,"code":23791,"language":23792,"meta":71,"style":71},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[73,23794,23795],{"__ignoreMap":71},[76,23796,23797,23800,23803,23806],{"class":78,"line":79},[76,23798,23799],{"class":1927},"pip",[76,23801,23802],{"class":192}," install",[76,23804,23805],{"class":192}," gym==",[76,23807,23808],{"class":136},"0.25.2\n",[21,23810,23811],{},"显示图形界面需要",[66,23813,23815],{"className":23790,"code":23814,"language":23792,"meta":71,"style":71},"pip install pygame\n",[73,23816,23817],{"__ignoreMap":71},[76,23818,23819,23821,23823],{"class":78,"line":79},[76,23820,23799],{"class":1927},[76,23822,23802],{"class":192},[76,23824,23825],{"class":192}," pygame\n",[21,23827,23828,23829],{},"有关Gym库的相关文档介绍：",[326,23830,23834],{"href":23831,"rel":23832},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23833],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[16,23836,23838],{"id":23837},"_18一些补充基础概念","1.8.一些补充基础概念",[21,23840,23841],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[21,23843,23844],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[21,23846,23847],{},[1426,23848],{"alt":71,"src":23849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[21,23851,23852],{},"折扣率需要自己来设定",[21,23854,23855],{},[1426,23856],{"alt":71,"src":23857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[29,23859,23860],{},[32,23861,23862],{},"状态转移函数：",[21,23864,23865],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[21,23867,23868],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[21,23870,23871],{},[1426,23872],{"alt":71,"src":23873},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[29,23875,23876],{"start":96},[32,23877,23878],{},"动作价值函数：",[21,23880,23881],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[21,23883,23884],{},[1426,23885],{"alt":71,"src":23886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[29,23888,23889],{"start":1143},[32,23890,23891],{},"最优动作价值函数：",[21,23893,23894],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[21,23896,23897],{},[1426,23898],{"alt":71,"src":23899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[29,23901,23902],{"start":1158},[32,23903,23904],{},"状态价值函数:",[21,23906,23907],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[21,23909,23910],{},"它衡量的是“一个具体动作”的长期价值",[21,23912,23913],{},[1426,23914],{"alt":71,"src":23915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[21,23917,23918],{},"几个价值函数之间的比较：",[21,23920,23921],{},[1426,23922],{"alt":71,"src":23923},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5092,23925,23926],{},"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":71,"searchDepth":96,"depth":96,"links":23928},[23929,23930,23931,23936,23937,23942,23943,23944],{"id":23361,"depth":96,"text":23362},{"id":23428,"depth":96,"text":23429},{"id":23465,"depth":96,"text":23466,"children":23932},[23933,23934,23935],{"id":23469,"depth":1143,"text":23470},{"id":23484,"depth":1143,"text":23485},{"id":23507,"depth":1143,"text":23508},{"id":23615,"depth":96,"text":23616},{"id":23634,"depth":96,"text":23635,"children":23938},[23939,23940,23941],{"id":23649,"depth":1143,"text":23650},{"id":23667,"depth":1143,"text":23668},{"id":23685,"depth":1143,"text":23686},{"id":23694,"depth":96,"text":23695},{"id":23765,"depth":96,"text":23766},{"id":23837,"depth":96,"text":23838},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23353,"description":71},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23951,"title":23952,"body":23953,"description":23960,"extension":5123,"meta":23971,"navigation":2364,"path":23972,"seo":23973,"stem":23974,"__hash__":23975},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":9,"value":23954,"toc":23969},[23955,23958,23961,23966],[12,23956,23952],{"id":23957},"_2马尔可夫决策过程",[21,23959,23960],{},"这是强化学习的基本框架",[21,23962,23963],{},[1426,23964],{"alt":71,"src":23965},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[21,23967,23968],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":71,"searchDepth":96,"depth":96,"links":23970},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23952,"description":23960},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23977,"title":23978,"body":23979,"description":71,"extension":5123,"meta":24095,"navigation":2364,"path":24096,"seo":24097,"stem":24098,"__hash__":24099},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":9,"value":23980,"toc":24090},[23981,23984,23988,23991,23996,24001,24004,24009,24012,24017,24020,24024,24029,24032,24037,24042,24047,24050,24054,24059,24062,24067,24072,24077,24082,24085],[12,23982,23978],{"id":23983},"_3动作价值函数",[16,23985,23987],{"id":23986},"_31dqn","3.1.DQN",[21,23989,23990],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[21,23992,23993],{},[1426,23994],{"alt":71,"src":23995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[21,23997,23998],{},[1426,23999],{"alt":71,"src":24000},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[21,24002,24003],{},"DQN算法的描述：",[21,24005,24006],{},[1426,24007],{"alt":71,"src":24008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[21,24010,24011],{},"这里的Dense指的是全连接层",[21,24013,24014],{},[1426,24015],{"alt":71,"src":24016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[21,24018,24019],{},"当前观测的状态为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算法",[16,24021,24023],{"id":24022},"_32dqn的举例","3.2.DQN的举例",[21,24025,24026],{},[1426,24027],{"alt":71,"src":24028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[21,24030,24031],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[21,24033,24034],{},[1426,24035],{"alt":71,"src":24036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[21,24038,24039],{},[1426,24040],{"alt":71,"src":24041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[21,24043,24044],{},[1426,24045],{"alt":71,"src":24046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[21,24048,24049],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[16,24051,24053],{"id":24052},"_33td算法","3.3.TD算法",[21,24055,24056],{},[1426,24057],{"alt":71,"src":24058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[21,24060,24061],{},"强化学习TD算法公式的粗略解释：",[21,24063,24064],{},[1426,24065],{"alt":71,"src":24066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[21,24068,24069],{},[1426,24070],{"alt":71,"src":24071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[21,24073,24074],{},[1426,24075],{"alt":71,"src":24076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[21,24078,24079],{},[1426,24080],{"alt":71,"src":24081},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[21,24083,24084],{},"TD算法总结：",[21,24086,24087],{},[1426,24088],{"alt":71,"src":24089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":71,"searchDepth":96,"depth":96,"links":24091},[24092,24093,24094],{"id":23986,"depth":96,"text":23987},{"id":24022,"depth":96,"text":24023},{"id":24052,"depth":96,"text":24053},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23978,"description":71},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24101,"title":24102,"body":24103,"description":71,"extension":5123,"meta":24336,"navigation":2364,"path":24337,"seo":24338,"stem":24339,"__hash__":24340},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":9,"value":24104,"toc":24332},[24105,24108,24112,24115,24118,24123,24128,24131,24136,24141,24144,24149,24152,24157,24160,24165,24168,24173,24176,24181,24186,24189,24194,24197,24200,24205,24208,24213,24218,24222,24225,24228,24233,24238,24241,24246,24251,24254,24259,24262,24265,24270,24273,24278,24281,24286,24291,24294,24299,24304,24307,24312,24315,24320,24323],[12,24106,24102],{"id":24107},"_4策略学习",[16,24109,24111],{"id":24110},"_41概念描述","4.1.概念描述",[21,24113,24114],{},"用神经网络（策略网络）近似策略函数",[21,24116,24117],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[21,24119,24120],{},[1426,24121],{"alt":71,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[21,24124,24125],{},[1426,24126],{"alt":71,"src":24127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[21,24129,24130],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[21,24132,24133],{},[1426,24134],{"alt":71,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[21,24137,24138],{},[1426,24139],{"alt":71,"src":24140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[21,24142,24143],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[21,24145,24146],{},[1426,24147],{"alt":71,"src":24148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[21,24150,24151],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[21,24153,24154],{},[1426,24155],{"alt":71,"src":24156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[21,24158,24159],{},"改进theta要用到策略梯度算法",[21,24161,24162],{},[1426,24163],{"alt":71,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[21,24166,24167],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[21,24169,24170],{},[1426,24171],{"alt":71,"src":24172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[21,24174,24175],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[21,24177,24178],{},[1426,24179],{"alt":71,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[21,24182,24183],{},[1426,24184],{"alt":71,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[21,24187,24188],{},"梯度公式总结：",[21,24190,24191],{},[1426,24192],{"alt":71,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[21,24195,24196],{},"两个公式的分别应用场景：",[21,24198,24199],{},"对于离散的动作：",[21,24201,24202],{},[1426,24203],{"alt":71,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[21,24206,24207],{},"对于连续的动作：",[21,24209,24210],{},[1426,24211],{"alt":71,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[21,24214,24215],{},[1426,24216],{"alt":71,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[16,24219,24221],{"id":24220},"_42概率梯度算法总结","4.2.概率梯度算法总结",[21,24223,24224],{},"使用蒙特卡洛来近似计算策略梯度",[21,24226,24227],{},"蒙特卡洛法的解释如下：",[21,24229,24230],{},[1426,24231],{"alt":71,"src":24232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[21,24234,24235],{},[1426,24236],{"alt":71,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[21,24239,24240],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[29,24242,24243],{},[32,24244,24245],{},"方法一：reinforce算法",[21,24247,24248],{},[1426,24249],{"alt":71,"src":24250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[21,24252,24253],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[29,24255,24256],{"start":96},[32,24257,24258],{},"方法二：actor-critic算法",[21,24260,24261],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[21,24263,24264],{},"两个网络的构建：",[21,24266,24267],{},[1426,24268],{"alt":71,"src":24269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[21,24271,24272],{},"actor网路：",[21,24274,24275],{},[1426,24276],{"alt":71,"src":24277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[21,24279,24280],{},"critic网络",[21,24282,24283],{},[1426,24284],{"alt":71,"src":24285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[29,24287,24288],{"start":1143},[32,24289,24290],{},"网络的训练",[21,24292,24293],{},"网络描述",[21,24295,24296],{},[1426,24297],{"alt":71,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[21,24300,24301],{},[1426,24302],{"alt":71,"src":24303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[21,24305,24306],{},"TD算法更新梯度：",[21,24308,24309],{},[1426,24310],{"alt":71,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[21,24313,24314],{},"策略网络更新梯度：",[21,24316,24317],{},[1426,24318],{"alt":71,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[21,24321,24322],{},"训练整个流程的具体描述：",[21,24324,24325,24328,24329],{},[1426,24326],{"alt":71,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1426,24330],{"alt":71,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":71,"searchDepth":96,"depth":96,"links":24333},[24334,24335],{"id":24110,"depth":96,"text":24111},{"id":24220,"depth":96,"text":24221},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24102,"description":71},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24342,"title":24343,"body":24344,"description":24351,"extension":5123,"meta":24401,"navigation":2364,"path":24402,"seo":24403,"stem":24404,"__hash__":24405},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":9,"value":24345,"toc":24397},[24346,24349,24352,24356,24359,24364,24368,24371,24376,24379,24384,24389,24392],[12,24347,24343],{"id":24348},"_5alphago算法",[21,24350,24351],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[16,24353,24355],{"id":24354},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[21,24357,24358],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[21,24360,24361],{},[1426,24362],{"alt":71,"src":24363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[16,24365,24367],{"id":24366},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[21,24369,24370],{},"采用强化学习的方式训练策略网络",[21,24372,24373],{},[1426,24374],{"alt":71,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[21,24377,24378],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[21,24380,24381],{},[1426,24382],{"alt":71,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[21,24385,24386],{},[1426,24387],{"alt":71,"src":24388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[21,24390,24391],{},"强化学习训练策略网络的总结：",[21,24393,24394],{},[1426,24395],{"alt":71,"src":24396},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":71,"searchDepth":96,"depth":96,"links":24398},[24399,24400],{"id":24354,"depth":96,"text":24355},{"id":24366,"depth":96,"text":24367},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24343,"description":24351},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24407,"title":24408,"body":24409,"description":24416,"extension":5123,"meta":24419,"navigation":2364,"path":24420,"seo":24421,"stem":24422,"__hash__":24423},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":9,"value":24410,"toc":24417},[24411,24414],[12,24412,24408],{"id":24413},"_6价值网络",[21,24415,24416],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":71,"searchDepth":96,"depth":96,"links":24418},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24408,"description":24416},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24425,"title":24426,"body":24427,"description":24431,"extension":5123,"meta":24432,"navigation":2364,"path":24433,"seo":24434,"stem":24435,"__hash__":24436},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":9,"value":24428,"toc":24429},[],{"title":71,"searchDepth":96,"depth":96,"links":24430},[],"记录自己的强化学习笔记。",{"category":23346},"\u002Fwiki\u002F2025-12-04",{"title":24426,"description":24431},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24438,"title":24439,"body":24440,"description":23344,"extension":5123,"meta":24479,"navigation":2364,"path":24480,"seo":24481,"stem":24482,"__hash__":24483},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":9,"value":24441,"toc":24477},[24442,24445,24448,24454,24457,24463,24466,24471,24474],[12,24443,24439],{"id":24444},"_1-项目概览与官方资源",[21,24446,24447],{},"官方文档：",[21,24449,24450],{},[326,24451,24452],{"href":24452,"rel":24453},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23833],[21,24455,24456],{},"官方代码仓库：",[21,24458,24459],{},[326,24460,24461],{"href":24461,"rel":24462},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23833],[21,24464,24465],{},"复现大体流程：",[21,24467,24468],{},[1426,24469],{"alt":71,"src":24470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[21,24472,24473],{},"本教程的目标是打通这条链路：",[21,24475,24476],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":71,"searchDepth":96,"depth":96,"links":24478},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24439,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24485,"title":24486,"body":24487,"description":23344,"extension":5123,"meta":24603,"navigation":2364,"path":24604,"seo":24605,"stem":24606,"__hash__":24607},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":9,"value":24488,"toc":24598},[24489,24492,24496,24499,24506,24510,24513,24522,24532,24536,24566,24569,24595],[12,24490,24486],{"id":24491},"_2-环境准备与设备连接",[16,24493,24495],{"id":24494},"_21-系统与环境","2.1 系统与环境",[21,24497,24498],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[21,24500,24501,24502,24505],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[73,24503,24504],{},"lerobot"," 依赖。",[16,24507,24509],{"id":24508},"_22-机械臂串口识别","2.2 机械臂串口识别",[21,24511,24512],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[66,24514,24516],{"className":23790,"code":24515,"language":23792,"meta":71,"style":71},"lerobot-find-out\n",[73,24517,24518],{"__ignoreMap":71},[76,24519,24520],{"class":78,"line":79},[76,24521,24515],{"class":1927},[21,24523,24524,24525,300,24528,24531],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[73,24526,24527],{},"\u002Fdev\u002FttyACM0",[73,24529,24530],{},"\u002Fdev\u002FttyACM1","）。",[16,24533,24535],{"id":24534},"_23-串口授权","2.3 串口授权",[66,24537,24539],{"className":23790,"code":24538,"language":23792,"meta":71,"style":71},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[73,24540,24541,24555],{"__ignoreMap":71},[76,24542,24543,24546,24549,24552],{"class":78,"line":79},[76,24544,24545],{"class":1927},"sudo",[76,24547,24548],{"class":192}," chmod",[76,24550,24551],{"class":136}," 666",[76,24553,24554],{"class":192}," \u002Fdev\u002FttyACM0\n",[76,24556,24557,24559,24561,24563],{"class":78,"line":96},[76,24558,24545],{"class":1927},[76,24560,24548],{"class":192},[76,24562,24551],{"class":136},[76,24564,24565],{"class":192}," \u002Fdev\u002FttyACM1\n",[21,24567,24568],{},"说明：",[1095,24570,24571,24576,24582,24592],{},[32,24572,24573,24575],{},[73,24574,24545],{},"：以 root 权限执行命令。",[32,24577,24578,24581],{},[73,24579,24580],{},"chmod","：修改设备节点权限。",[32,24583,24584,24587,24588,24591],{},[73,24585,24586],{},"666","：",[73,24589,24590],{},"rw-rw-rw-","，所有用户可读写。",[32,24593,24594],{},"串口号必须替换为你机器上的真实端口。",[5092,24596,24597],{},"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":71,"searchDepth":96,"depth":96,"links":24599},[24600,24601,24602],{"id":24494,"depth":96,"text":24495},{"id":24508,"depth":96,"text":24509},{"id":24534,"depth":96,"text":24535},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24486,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24609,"title":24610,"body":24611,"description":23344,"extension":5123,"meta":24772,"navigation":2364,"path":24773,"seo":24774,"stem":24775,"__hash__":24776},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":9,"value":24612,"toc":24768},[24613,24617,24621,24627,24630,24687,24690,24694,24697,24765],[12,24614,24616],{"id":24615},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[16,24618,24620],{"id":24619},"_31-配置电机-id","3.1 配置电机 ID",[21,24622,24623,24624,24626],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[73,24625,305],{},"，需要改成机械臂链路里不冲突的编号。",[21,24628,24629],{},"方式一：用 LeRobot 命令逐步写入。",[66,24631,24633],{"className":23790,"code":24632,"language":23792,"meta":71,"style":71},"# 主臂舵机配置 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",[73,24634,24635,24640,24648,24655,24660,24664,24669,24675,24682],{"__ignoreMap":71},[76,24636,24637],{"class":78,"line":79},[76,24638,24639],{"class":146},"# 主臂舵机配置 ID\n",[76,24641,24642,24645],{"class":78,"line":96},[76,24643,24644],{"class":1927},"lerobot-setup-motors",[76,24646,24647],{"class":136}," \\\n",[76,24649,24650,24653],{"class":78,"line":1143},[76,24651,24652],{"class":136},"  --teleop.type=so101_leader",[76,24654,24647],{"class":136},[76,24656,24657],{"class":78,"line":1158},[76,24658,24659],{"class":136},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[76,24661,24662],{"class":78,"line":1164},[76,24663,2365],{"emptyLinePlaceholder":2364},[76,24665,24666],{"class":78,"line":1178},[76,24667,24668],{"class":146},"# 从臂舵机配置 ID\n",[76,24670,24671,24673],{"class":78,"line":1184},[76,24672,24644],{"class":1927},[76,24674,24647],{"class":136},[76,24676,24677,24680],{"class":78,"line":1275},[76,24678,24679],{"class":136},"  --robot.type=so101_follower",[76,24681,24647],{"class":136},[76,24683,24684],{"class":78,"line":1281},[76,24685,24686],{"class":136},"  --robot.port=\u002Fdev\u002FttyACM1\n",[21,24688,24689],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[16,24691,24693],{"id":24692},"_32-机械臂校准","3.2 机械臂校准",[21,24695,24696],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[66,24698,24700],{"className":23790,"code":24699,"language":23792,"meta":71,"style":71},"# 主臂校准\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",[73,24701,24702,24707,24714,24720,24727,24732,24736,24741,24747,24753,24760],{"__ignoreMap":71},[76,24703,24704],{"class":78,"line":79},[76,24705,24706],{"class":146},"# 主臂校准\n",[76,24708,24709,24712],{"class":78,"line":96},[76,24710,24711],{"class":1927},"lerobot-calibrate",[76,24713,24647],{"class":136},[76,24715,24716,24718],{"class":78,"line":1143},[76,24717,24652],{"class":136},[76,24719,24647],{"class":136},[76,24721,24722,24725],{"class":78,"line":1158},[76,24723,24724],{"class":136},"  --teleop.port=\u002Fdev\u002FttyACM0",[76,24726,24647],{"class":136},[76,24728,24729],{"class":78,"line":1164},[76,24730,24731],{"class":136},"  --teleop.id=my_awesome_leader_arm\n",[76,24733,24734],{"class":78,"line":1178},[76,24735,2365],{"emptyLinePlaceholder":2364},[76,24737,24738],{"class":78,"line":1184},[76,24739,24740],{"class":146},"# 从臂校准\n",[76,24742,24743,24745],{"class":78,"line":1275},[76,24744,24711],{"class":1927},[76,24746,24647],{"class":136},[76,24748,24749,24751],{"class":78,"line":1281},[76,24750,24679],{"class":136},[76,24752,24647],{"class":136},[76,24754,24755,24758],{"class":78,"line":1293},[76,24756,24757],{"class":136},"  --robot.port=\u002Fdev\u002FttyACM1",[76,24759,24647],{"class":136},[76,24761,24762],{"class":78,"line":1576},[76,24763,24764],{"class":136},"  --robot.id=my_awesome_follower_arm\n",[5092,24766,24767],{},"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":71,"searchDepth":96,"depth":96,"links":24769},[24770,24771],{"id":24619,"depth":96,"text":24620},{"id":24692,"depth":96,"text":24693},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24610,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24778,"title":24779,"body":24780,"description":23344,"extension":5123,"meta":24971,"navigation":2364,"path":24972,"seo":24973,"stem":24974,"__hash__":24975},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":9,"value":24781,"toc":24967},[24782,24785,24789,24836,24840,24853,24916,24919,24964],[12,24783,24779],{"id":24784},"_4-遥操与相机接入",[16,24786,24788],{"id":24787},"_41-不带相机遥操","4.1 不带相机遥操",[66,24790,24792],{"className":23790,"code":24791,"language":23792,"meta":71,"style":71},"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",[73,24793,24794,24801,24807,24813,24820,24826,24832],{"__ignoreMap":71},[76,24795,24796,24799],{"class":78,"line":79},[76,24797,24798],{"class":1927},"lerobot-teleoperate",[76,24800,24647],{"class":136},[76,24802,24803,24805],{"class":78,"line":96},[76,24804,24679],{"class":136},[76,24806,24647],{"class":136},[76,24808,24809,24811],{"class":78,"line":1143},[76,24810,24757],{"class":136},[76,24812,24647],{"class":136},[76,24814,24815,24818],{"class":78,"line":1158},[76,24816,24817],{"class":136},"  --robot.id=my_awesome_follower_arm",[76,24819,24647],{"class":136},[76,24821,24822,24824],{"class":78,"line":1164},[76,24823,24652],{"class":136},[76,24825,24647],{"class":136},[76,24827,24828,24830],{"class":78,"line":1178},[76,24829,24724],{"class":136},[76,24831,24647],{"class":136},[76,24833,24834],{"class":78,"line":1184},[76,24835,24731],{"class":136},[16,24837,24839],{"id":24838},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[66,24841,24843],{"className":23790,"code":24842,"language":23792,"meta":71,"style":71},"lerobot-find-cameras opencv\n",[73,24844,24845],{"__ignoreMap":71},[76,24846,24847,24850],{"class":78,"line":79},[76,24848,24849],{"class":1927},"lerobot-find-cameras",[76,24851,24852],{"class":192}," opencv\n",[66,24854,24856],{"className":23790,"code":24855,"language":23792,"meta":71,"style":71},"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",[73,24857,24858,24864,24870,24876,24882,24892,24898,24904,24911],{"__ignoreMap":71},[76,24859,24860,24862],{"class":78,"line":79},[76,24861,24798],{"class":1927},[76,24863,24647],{"class":136},[76,24865,24866,24868],{"class":78,"line":96},[76,24867,24679],{"class":136},[76,24869,24647],{"class":136},[76,24871,24872,24874],{"class":78,"line":1143},[76,24873,24757],{"class":136},[76,24875,24647],{"class":136},[76,24877,24878,24880],{"class":78,"line":1158},[76,24879,24817],{"class":136},[76,24881,24647],{"class":136},[76,24883,24884,24887,24890],{"class":78,"line":1164},[76,24885,24886],{"class":136},"  --robot.cameras=",[76,24888,24889],{"class":192},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[76,24891,24647],{"class":136},[76,24893,24894,24896],{"class":78,"line":1178},[76,24895,24652],{"class":136},[76,24897,24647],{"class":136},[76,24899,24900,24902],{"class":78,"line":1184},[76,24901,24724],{"class":136},[76,24903,24647],{"class":136},[76,24905,24906,24909],{"class":78,"line":1275},[76,24907,24908],{"class":136},"  --teleop.id=my_awesome_leader_arm",[76,24910,24647],{"class":136},[76,24912,24913],{"class":78,"line":1281},[76,24914,24915],{"class":136},"  --display_data=true\n",[21,24917,24918],{},"相机参数说明：",[1095,24920,24921,24927,24933,24942,24952,24958],{},[32,24922,24923,24926],{},[73,24924,24925],{},"front","：相机名称。",[32,24928,24929,24932],{},[73,24930,24931],{},"type: opencv","：相机驱动类型。",[32,24934,24935,24938,24939,24531],{},[73,24936,24937],{},"index_or_path","：设备编号或设备路径（如 ",[73,24940,24941],{},"\u002Fdev\u002Fvideo4",[32,24943,24944,24947,24948,24951],{},[73,24945,24946],{},"width"," \u002F ",[73,24949,24950],{},"height","：图像分辨率。",[32,24953,24954,24957],{},[73,24955,24956],{},"fps","：采样帧率。",[32,24959,24960,24963],{},[73,24961,24962],{},"--display_data=true","：启用实时可视化。",[5092,24965,24966],{},"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":71,"searchDepth":96,"depth":96,"links":24968},[24969,24970],{"id":24787,"depth":96,"text":24788},{"id":24838,"depth":96,"text":24839},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24779,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24977,"title":24978,"body":24979,"description":23344,"extension":5123,"meta":25151,"navigation":2364,"path":25152,"seo":25153,"stem":25154,"__hash__":25155},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":9,"value":24980,"toc":25146},[24981,24985,24989,24994,24999,25002,25044,25050,25054,25103,25108,25112,25115,25123,25128,25133,25138,25143],[12,24982,24984],{"id":24983},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[16,24986,24988],{"id":24987},"_51-生成访问令牌","5.1 生成访问令牌",[21,24990,24991],{},[1426,24992],{"alt":71,"src":24993},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[21,24995,24996],{},[1426,24997],{"alt":71,"src":24998},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[21,25000,25001],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[66,25003,25005],{"className":23790,"code":25004,"language":23792,"meta":71,"style":71},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[73,25006,25007,25020],{"__ignoreMap":71},[76,25008,25009,25012,25015,25017],{"class":78,"line":79},[76,25010,25011],{"class":82},"export",[76,25013,25014],{"class":86}," HF_TOKEN",[76,25016,133],{"class":82},[76,25018,25019],{"class":192},"\"your_huggingface_token\"\n",[76,25021,25022,25025,25028,25031,25034,25036,25039,25041],{"class":78,"line":96},[76,25023,25024],{"class":1927},"hf",[76,25026,25027],{"class":192}," auth",[76,25029,25030],{"class":192}," login",[76,25032,25033],{"class":136}," --token",[76,25035,9691],{"class":192},[76,25037,25038],{"class":86},"$HF_TOKEN",[76,25040,339],{"class":192},[76,25042,25043],{"class":136}," --add-to-git-credential\n",[21,25045,25046,25049],{},[73,25047,25048],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[16,25051,25053],{"id":25052},"_52-验证登录","5.2 验证登录",[66,25055,25057],{"className":23790,"code":25056,"language":23792,"meta":71,"style":71},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[73,25058,25059,25090],{"__ignoreMap":71},[76,25060,25061,25064,25066,25069,25071,25073,25076,25079,25082,25085,25088],{"class":78,"line":79},[76,25062,25063],{"class":86},"HF_USER",[76,25065,133],{"class":82},[76,25067,25068],{"class":86},"$(",[76,25070,25024],{"class":1927},[76,25072,25027],{"class":192},[76,25074,25075],{"class":192}," whoami",[76,25077,25078],{"class":82}," |",[76,25080,25081],{"class":1927}," head",[76,25083,25084],{"class":136}," -n",[76,25086,25087],{"class":136}," 1",[76,25089,93],{"class":86},[76,25091,25092,25095,25097,25100],{"class":78,"line":96},[76,25093,25094],{"class":136},"echo",[76,25096,9691],{"class":192},[76,25098,25099],{"class":86},"$HF_USER",[76,25101,25102],{"class":192},"\"\n",[21,25104,25105],{},[1426,25106],{"alt":71,"src":25107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[16,25109,25111],{"id":25110},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[21,25113,25114],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1095,25116,25117,25120],{},[32,25118,25119],{},"Dataset Repo（用于上传演示数据）",[32,25121,25122],{},"Model Repo（用于上传训练后的 ACT 权重）",[21,25124,25125],{},[1426,25126],{"alt":71,"src":25127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[21,25129,25130],{},[1426,25131],{"alt":71,"src":25132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[21,25134,25135],{},[1426,25136],{"alt":71,"src":25137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[21,25139,25140],{},[1426,25141],{"alt":71,"src":25142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5092,25144,25145],{},"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":71,"searchDepth":96,"depth":96,"links":25147},[25148,25149,25150],{"id":24987,"depth":96,"text":24988},{"id":25052,"depth":96,"text":25053},{"id":25110,"depth":96,"text":25111},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24978,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25157,"title":25158,"body":25159,"description":23344,"extension":5123,"meta":25356,"navigation":2364,"path":25357,"seo":25358,"stem":25359,"__hash__":25360},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":9,"value":25160,"toc":25351},[25161,25165,25169,25265,25273,25278,25282,25298,25301,25305,25348],[12,25162,25164],{"id":25163},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[16,25166,25168],{"id":25167},"_61-录制示教数据","6.1 录制示教数据",[66,25170,25172],{"className":23790,"code":25171,"language":23792,"meta":71,"style":71},"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",[73,25173,25174,25181,25187,25193,25199,25208,25214,25220,25226,25233,25243,25250,25260],{"__ignoreMap":71},[76,25175,25176,25179],{"class":78,"line":79},[76,25177,25178],{"class":1927},"lerobot-record",[76,25180,24647],{"class":136},[76,25182,25183,25185],{"class":78,"line":96},[76,25184,24679],{"class":136},[76,25186,24647],{"class":136},[76,25188,25189,25191],{"class":78,"line":1143},[76,25190,24757],{"class":136},[76,25192,24647],{"class":136},[76,25194,25195,25197],{"class":78,"line":1158},[76,25196,24817],{"class":136},[76,25198,24647],{"class":136},[76,25200,25201,25203,25206],{"class":78,"line":1164},[76,25202,24886],{"class":136},[76,25204,25205],{"class":192},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[76,25207,24647],{"class":136},[76,25209,25210,25212],{"class":78,"line":1178},[76,25211,24652],{"class":136},[76,25213,24647],{"class":136},[76,25215,25216,25218],{"class":78,"line":1184},[76,25217,24724],{"class":136},[76,25219,24647],{"class":136},[76,25221,25222,25224],{"class":78,"line":1275},[76,25223,24908],{"class":136},[76,25225,24647],{"class":136},[76,25227,25228,25231],{"class":78,"line":1281},[76,25229,25230],{"class":136},"  --display_data=true",[76,25232,24647],{"class":136},[76,25234,25235,25238,25241],{"class":78,"line":1293},[76,25236,25237],{"class":136},"  --dataset.repo_id=",[76,25239,25240],{"class":192},"\"Embodied-AI-6\u002Fso101_test\"",[76,25242,24647],{"class":136},[76,25244,25245,25248],{"class":78,"line":1576},[76,25246,25247],{"class":136},"  --dataset.num_episodes=10",[76,25249,24647],{"class":136},[76,25251,25252,25255,25258],{"class":78,"line":1581},[76,25253,25254],{"class":136},"  --dataset.single_task=",[76,25256,25257],{"class":192},"\"Grab the green cube\"",[76,25259,24647],{"class":136},[76,25261,25262],{"class":78,"line":1587},[76,25263,25264],{"class":136},"  --resume=true\n",[1095,25266,25267],{},[32,25268,25269,25272],{},[73,25270,25271],{},"--resume=true","：已有同一数据集时继续追加 episode。",[21,25274,25275],{},[1426,25276],{"alt":71,"src":25277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[16,25279,25281],{"id":25280},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[66,25283,25285],{"className":23790,"code":25284,"language":23792,"meta":71,"style":71},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[73,25286,25287],{"__ignoreMap":71},[76,25288,25289,25292,25295],{"class":78,"line":79},[76,25290,25291],{"class":1927},"rm",[76,25293,25294],{"class":136}," -rf",[76,25296,25297],{"class":192}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[21,25299,25300],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[16,25302,25304],{"id":25303},"_63-回放指定-episode","6.3 回放指定 episode",[66,25306,25308],{"className":23790,"code":25307,"language":23792,"meta":71,"style":71},"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",[73,25309,25310,25317,25323,25329,25335,25343],{"__ignoreMap":71},[76,25311,25312,25315],{"class":78,"line":79},[76,25313,25314],{"class":1927},"lerobot-replay",[76,25316,24647],{"class":136},[76,25318,25319,25321],{"class":78,"line":96},[76,25320,24679],{"class":136},[76,25322,24647],{"class":136},[76,25324,25325,25327],{"class":78,"line":1143},[76,25326,24757],{"class":136},[76,25328,24647],{"class":136},[76,25330,25331,25333],{"class":78,"line":1158},[76,25332,24817],{"class":136},[76,25334,24647],{"class":136},[76,25336,25337,25339,25341],{"class":78,"line":1164},[76,25338,25237],{"class":136},[76,25340,25240],{"class":192},[76,25342,24647],{"class":136},[76,25344,25345],{"class":78,"line":1178},[76,25346,25347],{"class":136},"  --dataset.episode=0\n",[5092,25349,25350],{},"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":71,"searchDepth":96,"depth":96,"links":25352},[25353,25354,25355],{"id":25167,"depth":96,"text":25168},{"id":25280,"depth":96,"text":25281},{"id":25303,"depth":96,"text":25304},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25158,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25362,"title":25363,"body":25364,"description":23344,"extension":5123,"meta":25492,"navigation":2364,"path":25493,"seo":25494,"stem":25495,"__hash__":25496},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":9,"value":25365,"toc":25490},[25366,25370,25433,25436,25483,25488],[12,25367,25369],{"id":25368},"_7-act-模型训练","7. ACT 模型训练",[66,25371,25373],{"className":23790,"code":25372,"language":23792,"meta":71,"style":71},"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",[73,25374,25375,25382,25390,25397,25404,25411,25418,25425],{"__ignoreMap":71},[76,25376,25377,25380],{"class":78,"line":79},[76,25378,25379],{"class":1927},"lerobot-train",[76,25381,24647],{"class":136},[76,25383,25384,25386,25388],{"class":78,"line":96},[76,25385,25237],{"class":136},[76,25387,25240],{"class":192},[76,25389,24647],{"class":136},[76,25391,25392,25395],{"class":78,"line":1143},[76,25393,25394],{"class":136},"  --policy.type=act",[76,25396,24647],{"class":136},[76,25398,25399,25402],{"class":78,"line":1158},[76,25400,25401],{"class":136},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[76,25403,24647],{"class":136},[76,25405,25406,25409],{"class":78,"line":1164},[76,25407,25408],{"class":136},"  --job_name=act_so101_test",[76,25410,24647],{"class":136},[76,25412,25413,25416],{"class":78,"line":1178},[76,25414,25415],{"class":136},"  --policy.device=cuda",[76,25417,24647],{"class":136},[76,25419,25420,25423],{"class":78,"line":1184},[76,25421,25422],{"class":136},"  --wandb.enable=false",[76,25424,24647],{"class":136},[76,25426,25427,25430],{"class":78,"line":1275},[76,25428,25429],{"class":136},"  --policy.repo_id=",[76,25431,25432],{"class":192},"\"Embodied-AI-6\u002Flerobot_new\"\n",[21,25434,25435],{},"参数说明：",[1095,25437,25438,25444,25450,25456,25462,25471,25477],{},[32,25439,25440,25443],{},[73,25441,25442],{},"--dataset.repo_id","：训练数据集仓库。",[32,25445,25446,25449],{},[73,25447,25448],{},"--policy.type=act","：策略模型类型为 ACT。",[32,25451,25452,25455],{},[73,25453,25454],{},"--output_dir","：本地训练输出目录。",[32,25457,25458,25461],{},[73,25459,25460],{},"--job_name","：训练任务名称。",[32,25463,25464,25467,25468,24531],{},[73,25465,25466],{},"--policy.device","：训练设备（如 ",[73,25469,25470],{},"cuda",[32,25472,25473,25476],{},[73,25474,25475],{},"--wandb.enable","：是否启用 WandB 可视化。",[32,25478,25479,25482],{},[73,25480,25481],{},"--policy.repo_id","：训练后模型推送目标仓库。",[21,25484,25485],{},[1426,25486],{"alt":71,"src":25487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5092,25489,25350],{},{"title":71,"searchDepth":96,"depth":96,"links":25491},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25363,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25498,"title":25499,"body":25500,"description":23344,"extension":5123,"meta":25587,"navigation":2364,"path":25588,"seo":25589,"stem":25590,"__hash__":25591},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":9,"value":25501,"toc":25585},[25502,25505,25508,25575,25583],[12,25503,25499],{"id":25504},"_8-策略部署与自动采集",[21,25506,25507],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[66,25509,25511],{"className":23790,"code":25510,"language":23792,"meta":71,"style":71},"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",[73,25512,25513,25519,25525,25531,25539,25545,25552,25560,25568],{"__ignoreMap":71},[76,25514,25515,25517],{"class":78,"line":79},[76,25516,25178],{"class":1927},[76,25518,24647],{"class":136},[76,25520,25521,25523],{"class":78,"line":96},[76,25522,24679],{"class":136},[76,25524,24647],{"class":136},[76,25526,25527,25529],{"class":78,"line":1143},[76,25528,24757],{"class":136},[76,25530,24647],{"class":136},[76,25532,25533,25535,25537],{"class":78,"line":1158},[76,25534,24886],{"class":136},[76,25536,25205],{"class":192},[76,25538,24647],{"class":136},[76,25540,25541,25543],{"class":78,"line":1164},[76,25542,24817],{"class":136},[76,25544,24647],{"class":136},[76,25546,25547,25550],{"class":78,"line":1178},[76,25548,25549],{"class":136},"  --display_data=false",[76,25551,24647],{"class":136},[76,25553,25554,25556,25558],{"class":78,"line":1184},[76,25555,25237],{"class":136},[76,25557,25240],{"class":192},[76,25559,24647],{"class":136},[76,25561,25562,25564,25566],{"class":78,"line":1275},[76,25563,25254],{"class":136},[76,25565,25257],{"class":192},[76,25567,24647],{"class":136},[76,25569,25570,25573],{"class":78,"line":1281},[76,25571,25572],{"class":136},"  --policy.path=",[76,25574,25432],{"class":192},[1095,25576,25577],{},[32,25578,25579,25582],{},[73,25580,25581],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5092,25584,25350],{},{"title":71,"searchDepth":96,"depth":96,"links":25586},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25499,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25593,"title":25594,"body":25595,"description":23344,"extension":5123,"meta":25624,"navigation":2364,"path":25625,"seo":25626,"stem":25627,"__hash__":25628},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":9,"value":25596,"toc":25622},[25597,25601,25604,25610,25613,25619],[12,25598,25600],{"id":25599},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[21,25602,25603],{},"项目地址：",[21,25605,25606],{},[326,25607,25608],{"href":25608,"rel":25609},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23833],[21,25611,25612],{},"参考教程：",[21,25614,25615],{},[326,25616,25617],{"href":25617,"rel":25618},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23833],[21,25620,25621],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":71,"searchDepth":96,"depth":96,"links":25623},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25594,"description":23344},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25630,"title":25631,"body":25632,"description":25636,"extension":5123,"meta":25637,"navigation":2364,"path":25638,"seo":25639,"stem":25640,"__hash__":25641},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":9,"value":25633,"toc":25634},[],{"title":71,"searchDepth":96,"depth":96,"links":25635},[],"act复现",{"category":23346},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25631,"description":25636},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25643,"title":25644,"body":25645,"description":71,"extension":5123,"meta":25947,"navigation":2364,"path":25948,"seo":25949,"stem":25950,"__hash__":25951},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":9,"value":25646,"toc":25939},[25647,25650,25654,25664,25671,25678,25681,25688,25691,25694,25698,25710,25714,25760,25763,25766,25769,25772,25775,25779,25817,25823,25827,25881,25886,25889,25892,25897,25900,25905,25908,25911,25915,25918,25921,25925],[12,25648,25644],{"id":25649},"_1简介",[46,25651,25653],{"id":25652},"_11什么是-docker","1.1什么是 Docker？",[21,25655,25656,25657,25660,25661],{},"Docker 是一个开源的 ",[237,25658,25659],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[237,25662,25663],{},"一次构建，到处运行。",[21,25665,25666,25667,25670],{},"“ ",[237,25668,25669],{},"一次构建，到处运行"," ”也就是说：",[29,25672,25673],{},[32,25674,25675],{},[237,25676,25677],{},"之前：",[21,25679,25680],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[29,25682,25683],{},[32,25684,25685],{},[237,25686,25687],{},"使用docker后：",[21,25689,25690],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[21,25692,25693],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[46,25695,25697],{"id":25696},"_12它是怎么工作的","1.2.它是怎么工作的？",[1095,25699,25700,25703],{},[32,25701,25702],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[32,25704,25705,25706,25709],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[237,25707,25708],{},"无论在哪运行都一样稳定"," 。",[46,25711,25713],{"id":25712},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[225,25715,25716,25726],{},[228,25717,25718],{},[231,25719,25720,25723],{},[234,25721,25722],{"align":23704},"概念",[234,25724,25725],{"align":23704},"解释",[272,25727,25728,25736,25744,25752],{},[231,25729,25730,25733],{},[277,25731,25732],{"align":23704},"镜像",[277,25734,25735],{"align":23704},"Image，运行容器的模板，像是一个应用快照",[231,25737,25738,25741],{},[277,25739,25740],{"align":23704},"容器",[277,25742,25743],{"align":23704},"Container，运行中的镜像实例，有自己的文件系统、网络等",[231,25745,25746,25749],{},[277,25747,25748],{"align":23704},"Dockerfile",[277,25750,25751],{"align":23704},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[231,25753,25754,25757],{},[277,25755,25756],{"align":23704},"仓库",[277,25758,25759],{"align":23704},"Registry，存放镜像的地方，比如 Docker Hub",[21,25761,25762],{},"抽象化理解:",[21,25764,25765],{},"Docker镜像≈C++类",[21,25767,25768],{},"Docker容器≈C++类实例(即对象)",[21,25770,25771],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[21,25773,25774],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[46,25776,25778],{"id":25777},"_14类比理解","1.4.类比理解",[225,25780,25781,25791],{},[228,25782,25783],{},[231,25784,25785,25788],{},[234,25786,25787],{"align":23704},"传统部署",[234,25789,25790],{"align":23704},"Docker部署",[272,25792,25793,25801,25809],{},[231,25794,25795,25798],{},[277,25796,25797],{"align":23704},"手动安装依赖、调试版本不一致问题",[277,25799,25800],{"align":23704},"一次打包环境和代码",[231,25802,25803,25806],{},[277,25804,25805],{"align":23704},"程序“裸奔”跑在系统上",[277,25807,25808],{"align":23704},"程序“穿着容器”隔离运行",[231,25810,25811,25814],{},[277,25812,25813],{"align":23704},"容易“在我电脑上能跑”",[277,25815,25816],{"align":23704},"保证“无论在哪都能跑”",[21,25818,25819,25820],{},"就像快递包裹： ",[237,25821,25822],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[46,25824,25826],{"id":25825},"_15docker-的核心优势","1.5.Docker 的核心优势",[225,25828,25829,25839],{},[228,25830,25831],{},[231,25832,25833,25836],{},[234,25834,25835],{"align":23704},"优势",[234,25837,25838],{"align":23704},"说明",[272,25840,25841,25849,25857,25865,25873],{},[231,25842,25843,25846],{},[277,25844,25845],{"align":23704},"轻量级",[277,25847,25848],{"align":23704},"基于系统内核共享，启动速度快，占资源少",[231,25850,25851,25854],{},[277,25852,25853],{"align":23704},"跨平台",[277,25855,25856],{"align":23704},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[231,25858,25859,25862],{},[277,25860,25861],{"align":23704},"易于迁移部署",[277,25863,25864],{"align":23704},"应用和环境一起封装，不怕依赖不一致",[231,25866,25867,25870],{},[277,25868,25869],{"align":23704},"易于版本控制",[277,25871,25872],{"align":23704},"镜像版本可控，支持回滚",[231,25874,25875,25878],{},[277,25876,25877],{"align":23704},"生态丰富",[277,25879,25880],{"align":23704},"Docker Hub 上有成千上万的现成镜像可用",[29,25882,25883],{},[32,25884,25885],{},"在Linux上可以几乎实现无性能损失。",[21,25887,25888],{},"docker里的发行版和本机共用Linux内核。",[21,25890,25891],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[29,25893,25894],{},[32,25895,25896],{},"可以快速部署在绝大多数Linux发行版",[21,25898,25899],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[29,25901,25902],{},[32,25903,25904],{},"配置环境简单",[21,25906,25907],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[21,25909,25910],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[29,25912,25913],{},[32,25914,25877],{},[21,25916,25917],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[21,25919,25920],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[46,25922,25924],{"id":25923},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1095,25926,25927,25930,25933,25936],{},[32,25928,25929],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[32,25931,25932],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[32,25934,25935],{},"微服务架构：每个服务一个容器，灵活组合",[32,25937,25938],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":71,"searchDepth":96,"depth":96,"links":25940},[25941,25942,25943,25944,25945,25946],{"id":25652,"depth":1143,"text":25653},{"id":25696,"depth":1143,"text":25697},{"id":25712,"depth":1143,"text":25713},{"id":25777,"depth":1143,"text":25778},{"id":25825,"depth":1143,"text":25826},{"id":25923,"depth":1143,"text":25924},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25644,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25953,"title":25954,"body":25955,"description":71,"extension":5123,"meta":26688,"navigation":2364,"path":26689,"seo":26690,"stem":26691,"__hash__":26692},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":9,"value":25956,"toc":26683},[25957,25960,25964,25967,25970,25976,25982,25986,25995,25998,26055,26058,26109,26112,26195,26198,26235,26239,26250,26263,26270,26273,26353,26356,26406,26409,26432,26436,26443,26446,26462,26468,26471,26487,26493,26496,26512,26526,26532,26552,26558,26561,26573,26579,26582,26596,26602,26605,26625,26630,26633,26636,26640,26643,26646,26649,26656,26659,26662,26665,26670,26675,26680],[12,25958,25954],{"id":25959},"_2安装docker",[46,25961,25963],{"id":25962},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[21,25965,25966],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[21,25968,25969],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[21,25971,25972],{},[326,25973,25974],{"href":25974,"rel":25975},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23833],[21,25977,25978],{},[326,25979,25980],{"href":25980,"rel":25981},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23833],[21965,25983,25985],{"id":25984},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[21,25987,25988,25989,25994],{},"以下内容根据 ",[326,25990,25993],{"href":25991,"rel":25992},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23833],"官方文档"," 修改而来。",[21,25996,25997],{},"如果你过去安装过 docker，先删掉：",[66,25999,26001],{"className":23790,"code":26000,"language":23792,"meta":71,"style":71},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[73,26002,26003],{"__ignoreMap":71},[76,26004,26005,26007,26010,26013,26016,26019,26022,26025,26028,26031,26034,26037,26040,26043,26046,26049,26052],{"class":78,"line":79},[76,26006,2990],{"class":82},[76,26008,26009],{"class":86}," pkg ",[76,26011,26012],{"class":82},"in",[76,26014,26015],{"class":192}," docker.io",[76,26017,26018],{"class":192}," docker-doc",[76,26020,26021],{"class":192}," docker-compose",[76,26023,26024],{"class":192}," docker-compose-v2",[76,26026,26027],{"class":192}," podman-docker",[76,26029,26030],{"class":192}," containerd",[76,26032,26033],{"class":192}," runc",[76,26035,26036],{"class":86},"; ",[76,26038,26039],{"class":82},"do",[76,26041,26042],{"class":1927}," sudo",[76,26044,26045],{"class":192}," apt-get",[76,26047,26048],{"class":192}," remove",[76,26050,26051],{"class":86}," $pkg; ",[76,26053,26054],{"class":82},"done\n",[21,26056,26057],{},"首先安装依赖和GPG：",[66,26059,26063],{"className":26060,"code":26061,"language":26062,"meta":71,"style":71},"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",[73,26064,26065,26070,26075,26080,26085,26090,26095,26099,26104],{"__ignoreMap":71},[76,26066,26067],{"class":78,"line":79},[76,26068,26069],{},"# Add Docker's official GPG key:\n",[76,26071,26072],{"class":78,"line":96},[76,26073,26074],{},"sudo apt-get update\n",[76,26076,26077],{"class":78,"line":1143},[76,26078,26079],{},"sudo apt-get install ca-certificates curl\n",[76,26081,26082],{"class":78,"line":1158},[76,26083,26084],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[76,26086,26087],{"class":78,"line":1164},[76,26088,26089],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[76,26091,26092],{"class":78,"line":1178},[76,26093,26094],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[76,26096,26097],{"class":78,"line":1184},[76,26098,2365],{"emptyLinePlaceholder":2364},[76,26100,26101],{"class":78,"line":1275},[76,26102,26103],{},"# 如果上面这行报错就弄下面这行\n",[76,26105,26106],{"class":78,"line":1281},[76,26107,26108],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[21,26110,26111],{},"信任 Docker 的 GPG 公钥并添加仓库：",[66,26113,26115],{"className":23790,"code":26114,"language":23792,"meta":71,"style":71},"# 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",[73,26116,26117,26122,26128,26145,26178],{"__ignoreMap":71},[76,26118,26119],{"class":78,"line":79},[76,26120,26121],{"class":146},"# Add the repository to Apt sources:\n",[76,26123,26124,26126],{"class":78,"line":96},[76,26125,25094],{"class":136},[76,26127,24647],{"class":136},[76,26129,26130,26133,26136,26139,26142],{"class":78,"line":1143},[76,26131,26132],{"class":192},"  \"deb [arch=$(",[76,26134,26135],{"class":1927},"dpkg",[76,26137,26138],{"class":136}," --print-architecture",[76,26140,26141],{"class":192},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[76,26143,26144],{"class":136},"\\\n",[76,26146,26147,26150,26152,26154,26157,26160,26162,26164,26167,26169,26171,26174,26176],{"class":78,"line":1158},[76,26148,26149],{"class":192},"  \"",[76,26151,25068],{"class":86},[76,26153,646],{"class":136},[76,26155,26156],{"class":192}," \u002Fetc\u002Fos-release",[76,26158,26159],{"class":86}," && ",[76,26161,25094],{"class":136},[76,26163,9691],{"class":192},[76,26165,26166],{"class":86},"$VERSION_CODENAME",[76,26168,339],{"class":192},[76,26170,517],{"class":86},[76,26172,26173],{"class":192},"\" stable\"",[76,26175,25078],{"class":82},[76,26177,24647],{"class":136},[76,26179,26180,26183,26186,26189,26192],{"class":78,"line":1164},[76,26181,26182],{"class":1927},"  sudo",[76,26184,26185],{"class":192}," tee",[76,26187,26188],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[76,26190,26191],{"class":82}," >",[76,26193,26194],{"class":192}," \u002Fdev\u002Fnull\n",[21,26196,26197],{},"最后安装",[66,26199,26201],{"className":23790,"code":26200,"language":23792,"meta":71,"style":71},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[73,26202,26203,26212],{"__ignoreMap":71},[76,26204,26205,26207,26209],{"class":78,"line":79},[76,26206,24545],{"class":1927},[76,26208,26045],{"class":192},[76,26210,26211],{"class":192}," update\n",[76,26213,26214,26216,26218,26220,26223,26226,26229,26232],{"class":78,"line":96},[76,26215,24545],{"class":1927},[76,26217,26045],{"class":192},[76,26219,23802],{"class":192},[76,26221,26222],{"class":192}," docker-ce",[76,26224,26225],{"class":192}," docker-ce-cli",[76,26227,26228],{"class":192}," containerd.io",[76,26230,26231],{"class":192}," docker-buildx-plugin",[76,26233,26234],{"class":192}," docker-compose-plugin\n",[21965,26236,26238],{"id":26237},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[21,26240,26241,26242,26245,26246,26249],{},"查看自己自己包管理工具版本（dnf是 ",[237,26243,26244],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[237,26247,26248],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[66,26251,26253],{"className":23790,"code":26252,"language":23792,"meta":71,"style":71},"dnf --version\n",[73,26254,26255],{"__ignoreMap":71},[76,26256,26257,26260],{"class":78,"line":79},[76,26258,26259],{"class":1927},"dnf",[76,26261,26262],{"class":136}," --version\n",[21,26264,25988,26265,26269],{},[326,26266,25993],{"href":26267,"rel":26268},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23833]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[21,26271,26272],{},"如果你之前安装过 docker，请先删掉",[66,26274,26276],{"className":23790,"code":26275,"language":23792,"meta":71,"style":71},"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",[73,26277,26278,26292,26299,26306,26313,26320,26327,26334,26341,26348],{"__ignoreMap":71},[76,26279,26280,26282,26285,26287,26290],{"class":78,"line":79},[76,26281,24545],{"class":1927},[76,26283,26284],{"class":192}," dnf",[76,26286,26048],{"class":192},[76,26288,26289],{"class":192}," docker",[76,26291,24647],{"class":136},[76,26293,26294,26297],{"class":78,"line":96},[76,26295,26296],{"class":192},"                  docker-client",[76,26298,24647],{"class":136},[76,26300,26301,26304],{"class":78,"line":1143},[76,26302,26303],{"class":192},"                  docker-client-latest",[76,26305,24647],{"class":136},[76,26307,26308,26311],{"class":78,"line":1158},[76,26309,26310],{"class":192},"                  docker-common",[76,26312,24647],{"class":136},[76,26314,26315,26318],{"class":78,"line":1164},[76,26316,26317],{"class":192},"                  docker-latest",[76,26319,24647],{"class":136},[76,26321,26322,26325],{"class":78,"line":1178},[76,26323,26324],{"class":192},"                  docker-latest-logrotate",[76,26326,24647],{"class":136},[76,26328,26329,26332],{"class":78,"line":1184},[76,26330,26331],{"class":192},"                  docker-logrotate",[76,26333,24647],{"class":136},[76,26335,26336,26339],{"class":78,"line":1275},[76,26337,26338],{"class":192},"                  docker-selinux",[76,26340,24647],{"class":136},[76,26342,26343,26346],{"class":78,"line":1281},[76,26344,26345],{"class":192},"                  docker-engine-selinux",[76,26347,24647],{"class":136},[76,26349,26350],{"class":78,"line":1293},[76,26351,26352],{"class":192},"                  docker-engine\n",[21,26354,26355],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[66,26357,26359],{"className":23790,"code":26358,"language":23792,"meta":71,"style":71},"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",[73,26360,26361,26375,26390],{"__ignoreMap":71},[76,26362,26363,26365,26367,26370,26372],{"class":78,"line":79},[76,26364,24545],{"class":1927},[76,26366,26284],{"class":192},[76,26368,26369],{"class":136}," -y",[76,26371,23802],{"class":192},[76,26373,26374],{"class":192}," dnf-plugins-core\n",[76,26376,26377,26379,26381,26384,26387],{"class":78,"line":96},[76,26378,24545],{"class":1927},[76,26380,26284],{"class":192},[76,26382,26383],{"class":192}," config-manager",[76,26385,26386],{"class":192}," addrepo",[76,26388,26389],{"class":136}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[76,26391,26392,26394,26397,26400,26403],{"class":78,"line":1143},[76,26393,24545],{"class":1927},[76,26395,26396],{"class":192}," sed",[76,26398,26399],{"class":136}," -i",[76,26401,26402],{"class":192}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[76,26404,26405],{"class":192}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[21,26407,26408],{},"最后安装：",[66,26410,26412],{"className":23790,"code":26411,"language":23792,"meta":71,"style":71},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[73,26413,26414],{"__ignoreMap":71},[76,26415,26416,26418,26420,26422,26424,26426,26428,26430],{"class":78,"line":79},[76,26417,24545],{"class":1927},[76,26419,26284],{"class":192},[76,26421,23802],{"class":192},[76,26423,26222],{"class":192},[76,26425,26225],{"class":192},[76,26427,26228],{"class":192},[76,26429,26231],{"class":192},[76,26431,26234],{"class":192},[46,26433,26435],{"id":26434},"_22配置环境","2.2.配置环境",[21965,26437,26439,26442],{"id":26438},"_221检查-docker-服务状态",[237,26440,26441],{},"2.2.1.检查 Docker 服务状态"," ：",[21,26444,26445],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[66,26447,26449],{"className":23790,"code":26448,"language":23792,"meta":71,"style":71},"systemctl status docker\n",[73,26450,26451],{"__ignoreMap":71},[76,26452,26453,26456,26459],{"class":78,"line":79},[76,26454,26455],{"class":1927},"systemctl",[76,26457,26458],{"class":192}," status",[76,26460,26461],{"class":192}," docker\n",[21965,26463,26465,26442],{"id":26464},"_222启动-docker-服务",[237,26466,26467],{},"2.2.2.启动 Docker 服务",[21,26469,26470],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[66,26472,26474],{"className":23790,"code":26473,"language":23792,"meta":71,"style":71},"sudo systemctl start docker\n",[73,26475,26476],{"__ignoreMap":71},[76,26477,26478,26480,26483,26485],{"class":78,"line":79},[76,26479,24545],{"class":1927},[76,26481,26482],{"class":192}," systemctl",[76,26484,4149],{"class":192},[76,26486,26461],{"class":192},[21965,26488,26490,26442],{"id":26489},"_223设置-docker-开机自启",[237,26491,26492],{},"2.2.3.设置 Docker 开机自启",[21,26494,26495],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[66,26497,26499],{"className":23790,"code":26498,"language":23792,"meta":71,"style":71},"sudo systemctl enable docker\n",[73,26500,26501],{"__ignoreMap":71},[76,26502,26503,26505,26507,26510],{"class":78,"line":79},[76,26504,24545],{"class":1927},[76,26506,26482],{"class":192},[76,26508,26509],{"class":192}," enable",[76,26511,26461],{"class":192},[21965,26513,26515,13762,26518,13762,26523,26442],{"id":26514},"_224将用户添加到-docker-组",[237,26516,26517],{},"2.2.4.将用户添加到",[237,26519,26520],{},[73,26521,26522],{},"docker",[237,26524,26525],{},"组",[21,26527,26528,26529,26531],{},"使用以下命令将当前用户添加到 ",[73,26530,26522],{}," 组：",[66,26533,26535],{"className":23790,"code":26534,"language":23792,"meta":71,"style":71},"sudo usermod -aG docker $USER\n",[73,26536,26537],{"__ignoreMap":71},[76,26538,26539,26541,26544,26547,26549],{"class":78,"line":79},[76,26540,24545],{"class":1927},[76,26542,26543],{"class":192}," usermod",[76,26545,26546],{"class":136}," -aG",[76,26548,26289],{"class":192},[76,26550,26551],{"class":86}," $USER\n",[21965,26553,26555,26442],{"id":26554},"_225退出并重新登录",[237,26556,26557],{},"2.2.5.退出并重新登录",[21,26559,26560],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[66,26562,26564],{"className":23790,"code":26563,"language":23792,"meta":71,"style":71},"newgrp docker\n",[73,26565,26566],{"__ignoreMap":71},[76,26567,26568,26571],{"class":78,"line":79},[76,26569,26570],{"class":1927},"newgrp",[76,26572,26461],{"class":192},[21965,26574,26576,26442],{"id":26575},"_226重新启动-docker-服务如果需要",[237,26577,26578],{},"2.2.6.重新启动 Docker 服务（如果需要）",[21,26580,26581],{},"确保 Docker 服务正在运行，可以使用以下命令：",[66,26583,26584],{"className":23790,"code":26473,"language":23792,"meta":71,"style":71},[73,26585,26586],{"__ignoreMap":71},[76,26587,26588,26590,26592,26594],{"class":78,"line":79},[76,26589,24545],{"class":1927},[76,26591,26482],{"class":192},[76,26593,4149],{"class":192},[76,26595,26461],{"class":192},[21965,26597,26599,26442],{"id":26598},"_227重启电脑后检查-docker-服务状态",[237,26600,26601],{},"2.2.7.重启电脑后检查 Docker 服务状态",[21,26603,26604],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[66,26606,26608],{"className":23790,"code":26607,"language":23792,"meta":71,"style":71},"sudo reboot\nsystemctl status docker\n",[73,26609,26610,26617],{"__ignoreMap":71},[76,26611,26612,26614],{"class":78,"line":79},[76,26613,24545],{"class":1927},[76,26615,26616],{"class":192}," reboot\n",[76,26618,26619,26621,26623],{"class":78,"line":96},[76,26620,26455],{"class":1927},[76,26622,26458],{"class":192},[76,26624,26461],{"class":192},[21,26626,26627],{},[1426,26628],{"alt":71,"src":26629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[21,26631,26632],{},"第三行显示enabled说明开机自启动成功",[21,26634,26635],{},"按q退出",[46,26637,26639],{"id":26638},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[21,26641,26642],{},"优先使用linux来使用docker是比较好的",[21,26644,26645],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[21,26647,26648],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[21,26650,26651,26652],{},"官方下载安装:",[326,26653,26654],{"href":26654,"rel":26655},"https:\u002F\u002Fwww.docker.com\u002F",[23833],[21,26657,26658],{},"Windows的Docker显卡直通与USB直通:",[21,26660,26661],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[21,26663,26664],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[21,26666,26667],{},[1426,26668],{"alt":71,"src":26669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[21,26671,26672],{},[1426,26673],{"alt":71,"src":26674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[21,26676,26677],{},[1426,26678],{"alt":71,"src":26679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5092,26681,26682],{},"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":71,"searchDepth":96,"depth":96,"links":26684},[26685,26686,26687],{"id":25962,"depth":1143,"text":25963},{"id":26434,"depth":1143,"text":26435},{"id":26638,"depth":1143,"text":26639},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25954,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26694,"title":26695,"body":26696,"description":26703,"extension":5123,"meta":27396,"navigation":2364,"path":27397,"seo":27398,"stem":27399,"__hash__":27400},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":9,"value":26697,"toc":27390},[26698,26701,26704,26708,26713,26718,26721,26749,26754,26763,26766,26771,26775,26782,26787,26793,26797,26800,26804,26809,26901,26906,26924,26929,26950,26955,26971,26975,26980,27009,27014,27060,27065,27109,27117,27134,27139,27155,27160,27174,27177,27180,27183,27186,27215,27218,27223,27227,27230,27233,27239,27242,27245,27248,27310,27317,27322,27325,27343,27347,27350,27367,27370,27373,27387],[12,26699,26695],{"id":26700},"_3docker直通",[21,26702,26703],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[46,26705,26707],{"id":26706},"_31usb直通","3.1.USB直通",[21,26709,26710],{},[1426,26711],{"alt":71,"src":26712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[29,26714,26715],{},[32,26716,26717],{},"方法一(不是很推荐新手)：",[21,26719,26720],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[66,26722,26724],{"className":23790,"code":26723,"language":23792,"meta":71,"style":71},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[73,26725,26726,26734,26739],{"__ignoreMap":71},[76,26727,26728,26731],{"class":78,"line":79},[76,26729,26730],{"class":1927},"ls",[76,26732,26733],{"class":192}," \u002Fdev\n",[76,26735,26736],{"class":78,"line":96},[76,26737,26738],{"class":146},"#例如\n",[76,26740,26741,26744,26746],{"class":78,"line":1143},[76,26742,26743],{"class":86},"--device",[76,26745,133],{"class":82},[76,26747,26748],{"class":192},"\u002Fdev\u002Ftty_USB0\n",[29,26750,26751],{"start":96},[32,26752,26753],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[66,26755,26757],{"className":23790,"code":26756,"language":23792,"meta":71,"style":71},"--privileged\n",[73,26758,26759],{"__ignoreMap":71},[76,26760,26761],{"class":78,"line":79},[76,26762,26756],{"class":1927},[21,26764,26765],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[21,26767,26768],{},[1426,26769],{"alt":71,"src":26770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[46,26772,26774],{"id":26773},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[21,26776,26777,26778,26781],{},"NVIDIA Container Toolkit使用户 ",[237,26779,26780],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[21,26783,26784],{},[1426,26785],{"alt":71,"src":26786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[21,26788,26789],{},[326,26790,26791],{"href":26791,"rel":26792},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23833],[21965,26794,26796],{"id":26795},"_321安装","3.2.1.安装",[21,26798,26799],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22877,26801,26803],{"id":26802},"_3211ubuntu","3.2.1.1.Ubuntu",[29,26805,26806],{},[32,26807,26808],{},"配置存储库 并更新",[66,26810,26812],{"className":23790,"code":26811,"language":23792,"meta":71,"style":71},"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",[73,26813,26814,26843,26863,26875,26887,26893],{"__ignoreMap":71},[76,26815,26816,26819,26822,26825,26827,26829,26832,26835,26838,26841],{"class":78,"line":79},[76,26817,26818],{"class":1927},"curl",[76,26820,26821],{"class":136}," -fsSL",[76,26823,26824],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[76,26826,25078],{"class":82},[76,26828,26042],{"class":1927},[76,26830,26831],{"class":192}," gpg",[76,26833,26834],{"class":136}," --dearmor",[76,26836,26837],{"class":136}," -o",[76,26839,26840],{"class":192}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[76,26842,24647],{"class":136},[76,26844,26845,26848,26850,26853,26856,26859,26861],{"class":78,"line":96},[76,26846,26847],{"class":86},"  && ",[76,26849,26818],{"class":1927},[76,26851,26852],{"class":136}," -s",[76,26854,26855],{"class":136}," -L",[76,26857,26858],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[76,26860,25078],{"class":82},[76,26862,24647],{"class":136},[76,26864,26865,26868,26871,26873],{"class":78,"line":1143},[76,26866,26867],{"class":1927},"    sed",[76,26869,26870],{"class":192}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[76,26872,25078],{"class":82},[76,26874,24647],{"class":136},[76,26876,26877,26880,26882,26885],{"class":78,"line":1158},[76,26878,26879],{"class":1927},"    sudo",[76,26881,26185],{"class":192},[76,26883,26884],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[76,26886,24647],{"class":136},[76,26888,26889,26891],{"class":78,"line":1164},[76,26890,26847],{"class":86},[76,26892,26144],{"class":136},[76,26894,26895,26897,26899],{"class":78,"line":1178},[76,26896,26879],{"class":1927},[76,26898,26045],{"class":192},[76,26900,26211],{"class":192},[29,26902,26903],{"start":96},[32,26904,26905],{},"安装nvidia-docker2",[66,26907,26909],{"className":23790,"code":26908,"language":23792,"meta":71,"style":71},"sudo apt-get install -y nvidia-docker2\n",[73,26910,26911],{"__ignoreMap":71},[76,26912,26913,26915,26917,26919,26921],{"class":78,"line":79},[76,26914,24545],{"class":1927},[76,26916,26045],{"class":192},[76,26918,23802],{"class":192},[76,26920,26369],{"class":136},[76,26922,26923],{"class":192}," nvidia-docker2\n",[29,26925,26926],{"start":1143},[32,26927,26928],{},"使用nvidia-ctk命令配置container runtime",[66,26930,26932],{"className":23790,"code":26931,"language":23792,"meta":71,"style":71},"sudo nvidia-ctk runtime configure --runtime=docker\n",[73,26933,26934],{"__ignoreMap":71},[76,26935,26936,26938,26941,26944,26947],{"class":78,"line":79},[76,26937,24545],{"class":1927},[76,26939,26940],{"class":192}," nvidia-ctk",[76,26942,26943],{"class":192}," runtime",[76,26945,26946],{"class":192}," configure",[76,26948,26949],{"class":136}," --runtime=docker\n",[29,26951,26952],{"start":1158},[32,26953,26954],{},"重启docker服务:",[66,26956,26958],{"className":23790,"code":26957,"language":23792,"meta":71,"style":71},"sudo systemctl restart docker\n",[73,26959,26960],{"__ignoreMap":71},[76,26961,26962,26964,26966,26969],{"class":78,"line":79},[76,26963,24545],{"class":1927},[76,26965,26482],{"class":192},[76,26967,26968],{"class":192}," restart",[76,26970,26461],{"class":192},[22877,26972,26974],{"id":26973},"_3212fedora","3.2.1.2.Fedora",[29,26976,26977],{},[32,26978,26979],{},"配置存储库",[66,26981,26983],{"className":23790,"code":26982,"language":23792,"meta":71,"style":71},"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",[73,26984,26985,27000],{"__ignoreMap":71},[76,26986,26987,26989,26991,26993,26996,26998],{"class":78,"line":79},[76,26988,26818],{"class":1927},[76,26990,26852],{"class":136},[76,26992,26855],{"class":136},[76,26994,26995],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[76,26997,25078],{"class":82},[76,26999,24647],{"class":136},[76,27001,27002,27004,27006],{"class":78,"line":96},[76,27003,24545],{"class":1927},[76,27005,26185],{"class":192},[76,27007,27008],{"class":192}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[29,27010,27011],{"start":96},[32,27012,27013],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[66,27015,27017],{"className":23790,"code":27016,"language":23792,"meta":71,"style":71},"# 如果是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",[73,27018,27019,27024,27038,27042,27047],{"__ignoreMap":71},[76,27020,27021],{"class":78,"line":79},[76,27022,27023],{"class":146},"# 如果是RHEL或者Rocky（DNF4）\n",[76,27025,27026,27028,27030,27032,27035],{"class":78,"line":96},[76,27027,24545],{"class":1927},[76,27029,26284],{"class":192},[76,27031,26383],{"class":192},[76,27033,27034],{"class":136}," --add-repo",[76,27036,27037],{"class":192}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[76,27039,27040],{"class":78,"line":1143},[76,27041,2365],{"emptyLinePlaceholder":2364},[76,27043,27044],{"class":78,"line":1158},[76,27045,27046],{"class":146},"# 如果是Feodra41+（DNF5）\n",[76,27048,27049,27051,27053,27055,27057],{"class":78,"line":1164},[76,27050,24545],{"class":1927},[76,27052,26284],{"class":192},[76,27054,26383],{"class":192},[76,27056,26386],{"class":192},[76,27058,27059],{"class":136}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[29,27061,27062],{"start":1143},[32,27063,27064],{},"安装NVIDIA Container Toolki包",[66,27066,27068],{"className":23790,"code":27067,"language":23792,"meta":71,"style":71},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[73,27069,27070,27075,27088,27092,27097],{"__ignoreMap":71},[76,27071,27072],{"class":78,"line":79},[76,27073,27074],{"class":146},"# 如果是RHEL或者Rocky\n",[76,27076,27077,27079,27081,27083,27085],{"class":78,"line":96},[76,27078,24545],{"class":1927},[76,27080,26284],{"class":192},[76,27082,23802],{"class":192},[76,27084,26369],{"class":136},[76,27086,27087],{"class":192}," nvidia-container-toolkit\n",[76,27089,27090],{"class":78,"line":1143},[76,27091,2365],{"emptyLinePlaceholder":2364},[76,27093,27094],{"class":78,"line":1158},[76,27095,27096],{"class":146},"# 如果是Fedora\n",[76,27098,27099,27101,27103,27105,27107],{"class":78,"line":1164},[76,27100,24545],{"class":1927},[76,27102,26284],{"class":192},[76,27104,23802],{"class":192},[76,27106,26369],{"class":136},[76,27108,27087],{"class":192},[29,27110,27111],{"start":1158},[32,27112,27113,27114,27116],{},"安装nvidia-docker2 ： 在Fedora上使用",[73,27115,26259],{},"进行安装",[66,27118,27120],{"className":23790,"code":27119,"language":23792,"meta":71,"style":71},"sudo dnf install -y nvidia-docker2\n",[73,27121,27122],{"__ignoreMap":71},[76,27123,27124,27126,27128,27130,27132],{"class":78,"line":79},[76,27125,24545],{"class":1927},[76,27127,26284],{"class":192},[76,27129,23802],{"class":192},[76,27131,26369],{"class":136},[76,27133,26923],{"class":192},[29,27135,27136],{"start":1164},[32,27137,27138],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[66,27140,27141],{"className":23790,"code":26931,"language":23792,"meta":71,"style":71},[73,27142,27143],{"__ignoreMap":71},[76,27144,27145,27147,27149,27151,27153],{"class":78,"line":79},[76,27146,24545],{"class":1927},[76,27148,26940],{"class":192},[76,27150,26943],{"class":192},[76,27152,26946],{"class":192},[76,27154,26949],{"class":136},[29,27156,27157],{"start":1178},[32,27158,27159],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[66,27161,27162],{"className":23790,"code":26957,"language":23792,"meta":71,"style":71},[73,27163,27164],{"__ignoreMap":71},[76,27165,27166,27168,27170,27172],{"class":78,"line":79},[76,27167,24545],{"class":1927},[76,27169,26482],{"class":192},[76,27171,26968],{"class":192},[76,27173,26461],{"class":192},[21,27175,27176],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[21,27178,27179],{},"方法：",[21,27181,27182],{},"1️⃣nvidia-smi",[21,27184,27185],{},"2️⃣运行nvidia cuda 容器进行测试",[66,27187,27189],{"className":23790,"code":27188,"language":23792,"meta":71,"style":71},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[73,27190,27191],{"__ignoreMap":71},[76,27192,27193,27195,27197,27200,27203,27206,27209,27212],{"class":78,"line":79},[76,27194,24545],{"class":1927},[76,27196,26289],{"class":192},[76,27198,27199],{"class":192}," run",[76,27201,27202],{"class":136}," --rm",[76,27204,27205],{"class":136}," --gpus",[76,27207,27208],{"class":192}," all",[76,27210,27211],{"class":192}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[76,27213,27214],{"class":192}," nvidia-smi\n",[21,27216,27217],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[21,27219,27220],{},[1426,27221],{"alt":71,"src":27222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[46,27224,27226],{"id":27225},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[21,27228,27229],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[21,27231,27232],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[21,27234,27235],{},[326,27236,27237],{"href":27237,"rel":27238},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23833],[21,27240,27241],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[21,27243,27244],{},"我们只需要找到对应的Docker镜像当底包即可。",[21,27246,27247],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[225,27249,27250,27266],{},[228,27251,27252],{},[231,27253,27254,27257,27260,27263],{},[234,27255,27256],{"align":23704},"镜像类型",[234,27258,27259],{"align":23704},"适用场景",[234,27261,27262],{"align":23704},"示例标签",[234,27264,27265],{"align":23704},"大小",[272,27267,27268,27282,27296],{},[231,27269,27270,27273,27276,27279],{},[277,27271,27272],{"align":23704},"base",[277,27274,27275],{"align":23704},"仅需 CUDA 运行时库",[277,27277,27278],{"align":23704},"12.4.0-base-ubuntu22.04",[277,27280,27281],{"align":23704},"~240MB",[231,27283,27284,27287,27290,27293],{},[277,27285,27286],{"align":23704},"runtime",[277,27288,27289],{"align":23704},"部署编译后的应用（含数学库）",[277,27291,27292],{"align":23704},"12.4.0-runtime-ubuntu22.04",[277,27294,27295],{"align":23704},"~2GB",[231,27297,27298,27301,27304,27307],{},[277,27299,27300],{"align":23704},"devel",[277,27302,27303],{"align":23704},"开发环境（含编译工具）",[277,27305,27306],{"align":23704},"12.4.0-devel-ubuntu22.04",[277,27308,27309],{"align":23704},"~3GB",[21,27311,27312,27313,27316],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[73,27314,27315],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[21,27318,27319],{},[1426,27320],{"alt":71,"src":27321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[21,27323,27324],{},"在dockerfile里就可以开头这么写：",[66,27326,27328],{"className":23790,"code":27327,"language":23792,"meta":71,"style":71},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[73,27329,27330,27335],{"__ignoreMap":71},[76,27331,27332],{"class":78,"line":79},[76,27333,27334],{"class":146},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[76,27336,27337,27340],{"class":78,"line":96},[76,27338,27339],{"class":1927},"FROM",[76,27341,27342],{"class":192}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[46,27344,27346],{"id":27345},"_34配置以太网","3.4.配置以太网",[21,27348,27349],{},"指定网络模式",[66,27351,27353],{"className":23790,"code":27352,"language":23792,"meta":71,"style":71},"--net=host \\\n",[73,27354,27355],{"__ignoreMap":71},[76,27356,27357,27360,27362,27365],{"class":78,"line":79},[76,27358,27359],{"class":86},"--net",[76,27361,133],{"class":82},[76,27363,27364],{"class":192},"host",[76,27366,24647],{"class":1927},[21,27368,27369],{},"启动参数里加上这行即可。具体在下方",[21,27371,27372],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1095,27374,27375,27378,27381,27384],{},[32,27376,27377],{},"--net=bridge:默认选项，表示连接到默认的网桥",[32,27379,27380],{},"--net=host:容器使用宿主机的网络",[32,27382,27383],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[32,27385,27386],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5092,27388,27389],{},"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":71,"searchDepth":96,"depth":96,"links":27391},[27392,27393,27394,27395],{"id":26706,"depth":1143,"text":26707},{"id":26773,"depth":1143,"text":26774},{"id":27225,"depth":1143,"text":27226},{"id":27345,"depth":1143,"text":27346},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26695,"description":26703},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27402,"title":27403,"body":27404,"description":27411,"extension":5123,"meta":27417,"navigation":2364,"path":27418,"seo":27419,"stem":27420,"__hash__":27421},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":9,"value":27405,"toc":27415},[27406,27409,27412],[12,27407,27403],{"id":27408},"_4dockerhub换源",[21,27410,27411],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[21,27413,27414],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":71,"searchDepth":96,"depth":96,"links":27416},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27403,"description":27411},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27423,"title":27424,"body":27425,"description":71,"extension":5123,"meta":28437,"navigation":2364,"path":28438,"seo":28439,"stem":28440,"__hash__":28441},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":9,"value":27426,"toc":28432},[27427,27430,27434,27440,27444,27447,27787,27790,27793,27796,27801,27806,27809,27812,27815,27818,27837,27840,27851,27857,28039,28049,28065,28328,28330,28355,28370,28379,28429],[12,27428,27424],{"id":27429},"_5docker命令学习",[46,27431,27433],{"id":27432},"_51参考文档","5.1.参考文档",[21,27435,27436],{},[326,27437,27438],{"href":27438,"rel":27439},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23833],[46,27441,27443],{"id":27442},"_52常用命令","5.2.常用命令",[21,27445,27446],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[225,27448,27449,27462],{},[228,27450,27451],{},[231,27452,27453,27456,27459],{},[234,27454,27455],{"align":23704},"命令",[234,27457,27458],{"align":23704},"描述",[234,27460,27461],{"align":23704},"示例",[272,27463,27464,27475,27486,27497,27508,27519,27530,27541,27551,27562,27573,27584,27594,27605,27616,27627,27637,27647,27657,27667,27678,27689,27700,27711,27722,27733,27743,27754,27765,27776],{},[231,27465,27466,27469,27472],{},[277,27467,27468],{"align":23704},"docker run",[277,27470,27471],{"align":23704},"创建并启动一个新的容器。",[277,27473,27474],{"align":23704},"docker run -it ubuntu bash",[231,27476,27477,27480,27483],{},[277,27478,27479],{"align":23704},"docker build",[277,27481,27482],{"align":23704},"通过指定的 Dockerfile 创建一个新的镜像。",[277,27484,27485],{"align":23704},"docker build -t myimage .",[231,27487,27488,27491,27494],{},[277,27489,27490],{"align":23704},"docker pull",[277,27492,27493],{"align":23704},"从 Docker 仓库拉取镜像。",[277,27495,27496],{"align":23704},"docker pull ubuntu",[231,27498,27499,27502,27505],{},[277,27500,27501],{"align":23704},"docker push",[277,27503,27504],{"align":23704},"将本地镜像推送到 Docker 仓库。",[277,27506,27507],{"align":23704},"docker push myimage",[231,27509,27510,27513,27516],{},[277,27511,27512],{"align":23704},"docker stop",[277,27514,27515],{"align":23704},"停止一个正在运行的容器。",[277,27517,27518],{"align":23704},"docker stop container_id",[231,27520,27521,27524,27527],{},[277,27522,27523],{"align":23704},"docker start",[277,27525,27526],{"align":23704},"启动一个已经存在的容器。",[277,27528,27529],{"align":23704},"docker start container_id",[231,27531,27532,27535,27538],{},[277,27533,27534],{"align":23704},"docker restart",[277,27536,27537],{"align":23704},"重新启动容器。",[277,27539,27540],{"align":23704},"docker restart container_id",[231,27542,27543,27546,27549],{},[277,27544,27545],{"align":23704},"docker ps",[277,27547,27548],{"align":23704},"列出当前正在运行的容器。",[277,27550,27545],{"align":23704},[231,27552,27553,27556,27559],{},[277,27554,27555],{"align":23704},"docker rm",[277,27557,27558],{"align":23704},"删除一个或多个停止的容器。",[277,27560,27561],{"align":23704},"docker rm container_id",[231,27563,27564,27567,27570],{},[277,27565,27566],{"align":23704},"docker exec",[277,27568,27569],{"align":23704},"在一个正在运行的容器中执行命令。",[277,27571,27572],{"align":23704},"docker exec -it container_id bash",[231,27574,27575,27578,27581],{},[277,27576,27577],{"align":23704},"docker logs",[277,27579,27580],{"align":23704},"查看容器的日志输出。",[277,27582,27583],{"align":23704},"docker logs container_id",[231,27585,27586,27589,27592],{},[277,27587,27588],{"align":23704},"docker images",[277,27590,27591],{"align":23704},"列出本地所有镜像。",[277,27593,27588],{"align":23704},[231,27595,27596,27599,27602],{},[277,27597,27598],{"align":23704},"docker rmi",[277,27600,27601],{"align":23704},"删除一个或多个镜像。",[277,27603,27604],{"align":23704},"docker rmi myimage",[231,27606,27607,27610,27613],{},[277,27608,27609],{"align":23704},"docker network",[277,27611,27612],{"align":23704},"管理 Docker 网络。",[277,27614,27615],{"align":23704},"docker network ls",[231,27617,27618,27621,27624],{},[277,27619,27620],{"align":23704},"docker volume",[277,27622,27623],{"align":23704},"管理 Docker 数据卷。",[277,27625,27626],{"align":23704},"docker volume ls",[231,27628,27629,27632,27635],{},[277,27630,27631],{"align":23704},"docker-compose up",[277,27633,27634],{"align":23704},"启动 docker-compose.yml 中定义的所有服务。",[277,27636,27631],{"align":23704},[231,27638,27639,27642,27645],{},[277,27640,27641],{"align":23704},"docker-compose down",[277,27643,27644],{"align":23704},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[277,27646,27641],{"align":23704},[231,27648,27649,27652,27655],{},[277,27650,27651],{"align":23704},"docker info",[277,27653,27654],{"align":23704},"显示 Docker 系统的详细信息。",[277,27656,27651],{"align":23704},[231,27658,27659,27662,27665],{},[277,27660,27661],{"align":23704},"docker stats",[277,27663,27664],{"align":23704},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[277,27666,27661],{"align":23704},[231,27668,27669,27672,27675],{},[277,27670,27671],{"align":23704},"docker inspect",[277,27673,27674],{"align":23704},"查看容器或镜像的详细信息（JSON 格式）。",[277,27676,27677],{"align":23704},"docker inspect container_id",[231,27679,27680,27683,27686],{},[277,27681,27682],{"align":23704},"docker save",[277,27684,27685],{"align":23704},"将一个镜像保存为 tar 文件。",[277,27687,27688],{"align":23704},"docker save -o myimage.tar myimage",[231,27690,27691,27694,27697],{},[277,27692,27693],{"align":23704},"docker load",[277,27695,27696],{"align":23704},"从 tar 文件中加载镜像。",[277,27698,27699],{"align":23704},"docker load -i myimage.tar",[231,27701,27702,27705,27708],{},[277,27703,27704],{"align":23704},"docker tag",[277,27706,27707],{"align":23704},"为镜像添加标签（tag）。",[277,27709,27710],{"align":23704},"docker tag myimage myimage:v1",[231,27712,27713,27716,27719],{},[277,27714,27715],{"align":23704},"docker buildx build",[277,27717,27718],{"align":23704},"使用 Buildx 构建多架构镜像。",[277,27720,27721],{"align":23704},"docker buildx build -t myimage .",[231,27723,27724,27727,27730],{},[277,27725,27726],{"align":23704},"docker buildx create",[277,27728,27729],{"align":23704},"创建一个新的 Buildx 构建实例。",[277,27731,27732],{"align":23704},"docker buildx create –use",[231,27734,27735,27738,27741],{},[277,27736,27737],{"align":23704},"docker buildx ls",[277,27739,27740],{"align":23704},"列出所有可用的 Buildx 构建实例。",[277,27742,27737],{"align":23704},[231,27744,27745,27748,27751],{},[277,27746,27747],{"align":23704},"docker buildx use",[277,27749,27750],{"align":23704},"设置当前的 Buildx 构建实例。",[277,27752,27753],{"align":23704},"docker buildx use mybuilder",[231,27755,27756,27759,27762],{},[277,27757,27758],{"align":23704},"docker buildx bake",[277,27760,27761],{"align":23704},"使用 Bake 文件批量构建镜像。",[277,27763,27764],{"align":23704},"docker buildx bake -f bake.hcl",[231,27766,27767,27770,27773],{},[277,27768,27769],{"align":23704},"docker buildx build –push",[277,27771,27772],{"align":23704},"构建镜像并推送到镜像仓库。",[277,27774,27775],{"align":23704},"docker buildx build –push -t myimage .",[231,27777,27778,27781,27784],{},[277,27779,27780],{"align":23704},"docker buildx build –platform",[277,27782,27783],{"align":23704},"构建镜像并为多个平台生成支持。",[277,27785,27786],{"align":23704},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[21,27788,27789],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[21,27791,27792],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[21,27794,27795],{},"docker images 可以查看已经下载的镜像",[21,27797,27798],{},[1426,27799],{"alt":71,"src":27800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[21,27802,27803],{},[237,27804,27805],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[21,27807,27808],{},"docker rmi $(docker images -q) 删除所有的镜像",[21,27810,27811],{},"docker container logs 查看容器日志",[21,27813,27814],{},"docker top 查看容器里的进程",[21,27816,27817],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[66,27819,27821],{"className":23790,"code":27820,"language":23792,"meta":71,"style":71},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[73,27822,27823],{"__ignoreMap":71},[76,27824,27825,27828,27831,27834],{"class":78,"line":79},[76,27826,27827],{"class":1927},"如：docker",[76,27829,27830],{"class":192}," cp",[76,27832,27833],{"class":192}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[76,27835,27836],{"class":192}," \u002Fmydata\u002Fnginx\n",[21,27838,27839],{},"docker run时在启动容器的时候会有几个常用的选项：",[1095,27841,27842,27845,27848],{},[32,27843,27844],{},"-d选项：表示后台运行",[32,27846,27847],{},"-P选项：随机端口映射",[32,27849,27850],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[46,27852,27854],{"id":27853},"_53run命令的参数非常重要",[237,27855,27856],{},"5.3.run命令的参数（非常重要）",[225,27858,27859,27872],{},[228,27860,27861],{},[231,27862,27863,27866,27869],{},[234,27864,27865],{"align":23704},"参数\u002F配置",[234,27867,27868],{"align":23704},"功能说明",[234,27870,27871],{"align":23704},"重要性与参考依据",[272,27873,27874,27885,27896,27907,27918,27929,27940,27951,27962,27973,27984,27995,28006,28017,28028],{},[231,27875,27876,27879,27882],{},[277,27877,27878],{"align":23704},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[277,27880,27881],{"align":23704},"指定容器名称，便于后续管理",[277,27883,27884],{"align":23704},"替代随机生成的容器名。",[231,27886,27887,27890,27893],{},[277,27888,27889],{"align":23704},"–gpus all",[277,27891,27892],{"align":23704},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[277,27894,27895],{"align":23704},"用于CUDA加速等GPU依赖任务。",[231,27897,27898,27901,27904],{},[277,27899,27900],{"align":23704},"-e NVIDIA_DRIVER_CAPABILITIES=all",[277,27902,27903],{"align":23704},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[277,27905,27906],{"align":23704},"确保容器内GPU功能完整67。",[231,27908,27909,27912,27915],{},[277,27910,27911],{"align":23704},"-dit",[277,27913,27914],{"align":23704},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[277,27916,27917],{"align":23704},"允许容器在后台运行并支持交互操作。",[231,27919,27920,27923,27926],{},[277,27921,27922],{"align":23704},"–privileged",[277,27924,27925],{"align":23704},"赋予容器完全主机权限（可访问设备、内核模块等）",[277,27927,27928],{"align":23704},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[231,27930,27931,27934,27937],{},[277,27932,27933],{"align":23704},"–net=host",[277,27935,27936],{"align":23704},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[277,27938,27939],{"align":23704},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[231,27941,27942,27945,27948],{},[277,27943,27944],{"align":23704},"–group-add audio–group-add video–group-add dialout",[277,27946,27947],{"align":23704},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[277,27949,27950],{"align":23704},"避免权限问题（如避免无法调用摄像头、麦克风）。",[231,27952,27953,27956,27959],{},[277,27954,27955],{"align":23704},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[277,27957,27958],{"align":23704},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[277,27960,27961],{"align":23704},"支持容器内运行图形界面应用（如OpenCV可视化）。",[231,27963,27964,27967,27970],{},[277,27965,27966],{"align":23704},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[277,27968,27969],{"align":23704},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[277,27971,27972],{"align":23704},"实现容器内图形显示。",[231,27974,27975,27978,27981],{},[277,27976,27977],{"align":23704},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[277,27979,27980],{"align":23704},"挂载X11认证文件（只读）",[277,27982,27983],{"align":23704},"确保容器有权连接宿主机显示服务。",[231,27985,27986,27989,27992],{},[277,27987,27988],{"align":23704},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[277,27990,27991],{"align":23704},"挂载Wayland显示协议相关目录",[277,27993,27994],{"align":23704},"支持Wayland协议的图形显示。",[231,27996,27997,28000,28003],{},[277,27998,27999],{"align":23704},"–ulimit nofile=1024:524288",[277,28001,28002],{"align":23704},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[277,28004,28005],{"align":23704},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[231,28007,28008,28011,28014],{},[277,28009,28010],{"align":23704},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[277,28012,28013],{"align":23704},"挂载宿主机用户目录到容器内同名路径",[277,28015,28016],{"align":23704},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[231,28018,28019,28022,28025],{},[277,28020,28021],{"align":23704},"-w \u002Fhome\u002Ftungchiahui",[277,28023,28024],{"align":23704},"设置容器启动后的默认工作目录",[277,28026,28027],{"align":23704},"直接进入项目路径，方便执行命令2324。",[231,28029,28030,28033,28036],{},[277,28031,28032],{"align":23704},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[277,28034,28035],{"align":23704},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[277,28037,28038],{"align":23704},"提供预配置的深度学习与机器人开发环境。",[21,28040,28041,28042,28044,28045,28048],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[73,28043,24545],{},"加不加",[73,28046,28047],{},"sudo -E","都无所谓。",[21,28050,28051,28052,28054,28055,28057,28058,28061,28062,28064],{},"用户已经被加到docker组了，不用",[73,28053,24545],{},"也行跑，其次，",[73,28056,24545],{},"运行的话，你的",[73,28059,28060],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[73,28063,28060],{},"更不可能变了。",[66,28066,28068],{"className":23790,"code":28067,"language":23792,"meta":71,"style":71},"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",[73,28069,28070,28083,28093,28103,28115,28122,28129,28136,28146,28155,28164,28178,28190,28202,28211,28221,28230,28245,28278,28305,28316,28323],{"__ignoreMap":71},[76,28071,28072,28074,28076,28078,28081],{"class":78,"line":79},[76,28073,24545],{"class":1927},[76,28075,26289],{"class":192},[76,28077,27199],{"class":192},[76,28079,28080],{"class":136}," --name=ros_opencv_cuda",[76,28082,24647],{"class":136},[76,28084,28085,28088,28091],{"class":78,"line":96},[76,28086,28087],{"class":86},"--gpus ",[76,28089,28090],{"class":192},"all",[76,28092,24647],{"class":136},[76,28094,28095,28098,28101],{"class":78,"line":1143},[76,28096,28097],{"class":86},"-e ",[76,28099,28100],{"class":192},"NVIDIA_DRIVER_CAPABILITIES=all",[76,28102,24647],{"class":136},[76,28104,28105,28107,28110,28113],{"class":78,"line":1158},[76,28106,28097],{"class":86},[76,28108,28109],{"class":192},"DISPLAY=",[76,28111,28112],{"class":86},"$DISPLAY ",[76,28114,26144],{"class":136},[76,28116,28117,28120],{"class":78,"line":1164},[76,28118,28119],{"class":86},"-dit ",[76,28121,26144],{"class":136},[76,28123,28124,28127],{"class":78,"line":1178},[76,28125,28126],{"class":86},"--privileged ",[76,28128,26144],{"class":136},[76,28130,28131,28134],{"class":78,"line":1184},[76,28132,28133],{"class":86},"--net=host ",[76,28135,26144],{"class":136},[76,28137,28138,28141,28144],{"class":78,"line":1275},[76,28139,28140],{"class":86},"--group-add ",[76,28142,28143],{"class":192},"audio",[76,28145,24647],{"class":136},[76,28147,28148,28150,28153],{"class":78,"line":1281},[76,28149,28140],{"class":86},[76,28151,28152],{"class":192},"video",[76,28154,24647],{"class":136},[76,28156,28157,28159,28162],{"class":78,"line":1293},[76,28158,28140],{"class":86},[76,28160,28161],{"class":192},"dialout",[76,28163,24647],{"class":136},[76,28165,28166,28168,28171,28173,28176],{"class":78,"line":1576},[76,28167,28097],{"class":86},[76,28169,28170],{"class":192},"XAUTHORITY=",[76,28172,28060],{"class":86},[76,28174,28175],{"class":192},"\u002F.Xauthority",[76,28177,24647],{"class":136},[76,28179,28180,28182,28185,28188],{"class":78,"line":1581},[76,28181,28097],{"class":86},[76,28183,28184],{"class":192},"WAYLAND_DISPLAY=",[76,28186,28187],{"class":86},"$WAYLAND_DISPLAY ",[76,28189,26144],{"class":136},[76,28191,28192,28194,28197,28200],{"class":78,"line":1587},[76,28193,28097],{"class":86},[76,28195,28196],{"class":192},"XDG_RUNTIME_DIR=",[76,28198,28199],{"class":86},"$XDG_RUNTIME_DIR ",[76,28201,26144],{"class":136},[76,28203,28204,28206,28209],{"class":78,"line":1592},[76,28205,28097],{"class":86},[76,28207,28208],{"class":192},"QT_QPA_PLATFORM=xcb",[76,28210,24647],{"class":136},[76,28212,28213,28216,28219],{"class":78,"line":1606},[76,28214,28215],{"class":86},"-v ",[76,28217,28218],{"class":192},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[76,28220,24647],{"class":136},[76,28222,28223,28225,28228],{"class":78,"line":1611},[76,28224,28215],{"class":86},[76,28226,28227],{"class":192},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[76,28229,24647],{"class":136},[76,28231,28232,28235,28238,28240,28243],{"class":78,"line":1617},[76,28233,28234],{"class":86},"-v $HOME",[76,28236,28237],{"class":192},"\u002F.Xauthority:",[76,28239,28060],{"class":86},[76,28241,28242],{"class":192},"\u002F.Xauthority:ro",[76,28244,24647],{"class":136},[76,28246,28247,28249,28252,28254,28257,28260,28262,28265,28267,28269,28271,28273,28276],{"class":78,"line":1638},[76,28248,28215],{"class":86},[76,28250,28251],{"class":192},"\u002Frun\u002Fuser\u002F",[76,28253,25068],{"class":86},[76,28255,28256],{"class":1927},"id",[76,28258,28259],{"class":136}," -u",[76,28261,517],{"class":86},[76,28263,28264],{"class":192},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[76,28266,25068],{"class":86},[76,28268,28256],{"class":1927},[76,28270,28259],{"class":136},[76,28272,517],{"class":86},[76,28274,28275],{"class":192},"\u002Fwayland-0",[76,28277,24647],{"class":136},[76,28279,28280,28282,28284,28286,28288,28290,28292,28295,28297,28299,28301,28303],{"class":78,"line":1643},[76,28281,28215],{"class":86},[76,28283,28251],{"class":192},[76,28285,25068],{"class":86},[76,28287,28256],{"class":1927},[76,28289,28259],{"class":136},[76,28291,517],{"class":86},[76,28293,28294],{"class":192},":\u002Frun\u002Fuser\u002F",[76,28296,25068],{"class":86},[76,28298,28256],{"class":1927},[76,28300,28259],{"class":136},[76,28302,13681],{"class":86},[76,28304,26144],{"class":136},[76,28306,28307,28309,28311,28314],{"class":78,"line":1657},[76,28308,28234],{"class":86},[76,28310,947],{"class":192},[76,28312,28313],{"class":86},"$HOME ",[76,28315,26144],{"class":136},[76,28317,28318,28321],{"class":78,"line":1662},[76,28319,28320],{"class":86},"-w $HOME ",[76,28322,26144],{"class":136},[76,28324,28325],{"class":78,"line":1691},[76,28326,28327],{"class":86},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[21,28329,8992],{},[29,28331,28332,28340,28343,28346],{},[32,28333,28334,13762,28336,28339],{},[73,28335,28100],{},[73,28337,28338],{},"--gpus all","没有英伟达显卡请注释。",[32,28341,28342],{},"--name后面请自己为容器起名。",[32,28344,28345],{},"最后一行仓库名称请你自己找对应的镜像填上。",[32,28347,28348,28349,28354],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23521,28350,28351],{},[237,28352,28353],{},"请不要加","。",[66,28356,28358],{"className":23790,"code":28357,"language":23792,"meta":71,"style":71},"--ulimit nofile=1024:524288 \\\n",[73,28359,28360],{"__ignoreMap":71},[76,28361,28362,28365,28368],{"class":78,"line":79},[76,28363,28364],{"class":1927},"--ulimit",[76,28366,28367],{"class":192}," nofile=1024:524288",[76,28369,24647],{"class":136},[21,28371,28372,28373,28378],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23521,28374,28375],{},[237,28376,28377],{},"不建议","**.**",[66,28380,28382],{"className":23790,"code":28381,"language":23792,"meta":71,"style":71},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[73,28383,28384,28411,28420],{"__ignoreMap":71},[76,28385,28386,28389,28392,28394,28396,28398,28400,28402,28404,28407,28409],{"class":78,"line":79},[76,28387,28388],{"class":1927},"--user",[76,28390,28391],{"class":86}," $(",[76,28393,28256],{"class":1927},[76,28395,28259],{"class":136},[76,28397,517],{"class":86},[76,28399,947],{"class":192},[76,28401,25068],{"class":86},[76,28403,28256],{"class":1927},[76,28405,28406],{"class":136}," -g",[76,28408,13681],{"class":86},[76,28410,26144],{"class":136},[76,28412,28413,28415,28418],{"class":78,"line":96},[76,28414,28215],{"class":86},[76,28416,28417],{"class":192},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[76,28419,24647],{"class":136},[76,28421,28422,28424,28427],{"class":78,"line":1143},[76,28423,28215],{"class":86},[76,28425,28426],{"class":192},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[76,28428,24647],{"class":136},[5092,28430,28431],{},"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":71,"searchDepth":96,"depth":96,"links":28433},[28434,28435,28436],{"id":27432,"depth":1143,"text":27433},{"id":27442,"depth":1143,"text":27443},{"id":27853,"depth":1143,"text":27856},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27424,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28443,"title":28444,"body":28445,"description":71,"extension":5123,"meta":30068,"navigation":2364,"path":30069,"seo":30070,"stem":30071,"__hash__":30072},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":9,"value":28446,"toc":30063},[28447,28450,28454,28457,28679,28683,28687,28690,28796,28801,28804,28809,28812,28817,28820,28825,28828,28840,28843,28848,28855,28883,28890,28966,28971,28974,28997,28999,29074,29079,29082,29086,29094,29099,29104,29108,29119,29125,29128,29131,29155,29158,29161,29189,29192,29195,29660,29663,29668,29673,29677,29700,29705,29709,29713,29716,29719,29722,29749,29752,29755,29773,29776,29779,29801,29809,29814,29819,29823,29826,29829,29832,29835,29880,29883,29901,29904,29909,29912,29933,29936,29992,29995,30000,30004,30007,30014,30017,30020,30025,30028,30044,30047,30060],[12,28448,28444],{"id":28449},"_6手动创建docker镜像",[46,28451,28453],{"id":28452},"_61dockerfile","6.1.DockerFile",[21,28455,28456],{},"常用命令：",[225,28458,28459,28470],{},[228,28460,28461],{},[231,28462,28463,28466,28468],{},[234,28464,28465],{"align":23704},"指令",[234,28467,25838],{"align":23704},[234,28469,27461],{"align":23704},[272,28471,28472,28482,28498,28509,28520,28531,28542,28553,28564,28578,28592,28603,28617,28628,28639,28653,28668],{},[231,28473,28474,28476,28479],{},[277,28475,27339],{"align":23704},[277,28477,28478],{"align":23704},"指定基础镜像，是 Dockerfile 的起点",[277,28480,28481],{"align":23704},"FROM ubuntu:22.04",[231,28483,28484,28487,28490],{},[277,28485,28486],{"align":23704},"LABEL",[277,28488,28489],{"align":23704},"添加元数据（如作者、版本等）",[277,28491,28492,28493,28497],{"align":23704},"LABEL maintainer=”",[326,28494,28496],{"href":28495},"mailto:you@example.com","you@example.com","”",[231,28499,28500,28503,28506],{},[277,28501,28502],{"align":23704},"ENV",[277,28504,28505],{"align":23704},"设置环境变量",[277,28507,28508],{"align":23704},"ENV PORT=8080",[231,28510,28511,28514,28517],{},[277,28512,28513],{"align":23704},"ARG",[277,28515,28516],{"align":23704},"构建参数，只在构建期间可用",[277,28518,28519],{"align":23704},"ARG VERSION=1.0",[231,28521,28522,28525,28528],{},[277,28523,28524],{"align":23704},"RUN",[277,28526,28527],{"align":23704},"构建镜像时运行命令",[277,28529,28530],{"align":23704},"RUN apt-get update && apt-get install -y curl",[231,28532,28533,28536,28539],{},[277,28534,28535],{"align":23704},"COPY",[277,28537,28538],{"align":23704},"复制文件到镜像中",[277,28540,28541],{"align":23704},"COPY . \u002Fapp",[231,28543,28544,28547,28550],{},[277,28545,28546],{"align":23704},"ADD",[277,28548,28549],{"align":23704},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[277,28551,28552],{"align":23704},"ADD archive.tar.gz \u002Fdata\u002F",[231,28554,28555,28558,28561],{},[277,28556,28557],{"align":23704},"WORKDIR",[277,28559,28560],{"align":23704},"设置工作目录",[277,28562,28563],{"align":23704},"WORKDIR \u002Fopt",[231,28565,28566,28569,28572],{},[277,28567,28568],{"align":23704},"CMD",[277,28570,28571],{"align":23704},"设置容器启动时默认命令（可被 docker run 覆盖）",[277,28573,28574,28575],{"align":23704},"CMD ",[76,28576,28577],{},"“node”, “index.js”",[231,28579,28580,28583,28586],{},[277,28581,28582],{"align":23704},"ENTRYPOINT",[277,28584,28585],{"align":23704},"设置容器启动时固定命令（通常用于 CLI 工具等）",[277,28587,28588,28589],{"align":23704},"ENTRYPOINT ",[76,28590,28591],{},"“python3”",[231,28593,28594,28597,28600],{},[277,28595,28596],{"align":23704},"EXPOSE",[277,28598,28599],{"align":23704},"声明镜像内服务监听的端口（不会自动映射）",[277,28601,28602],{"align":23704},"EXPOSE 80",[231,28604,28605,28608,28611],{},[277,28606,28607],{"align":23704},"VOLUME",[277,28609,28610],{"align":23704},"声明数据卷挂载点",[277,28612,28613,28614],{"align":23704},"VOLUME ",[76,28615,28616],{},"“\u002Fdata”",[231,28618,28619,28622,28625],{},[277,28620,28621],{"align":23704},"USER",[277,28623,28624],{"align":23704},"设置后续命令执行的用户",[277,28626,28627],{"align":23704},"USER appuser",[231,28629,28630,28633,28636],{},[277,28631,28632],{"align":23704},"ONBUILD",[277,28634,28635],{"align":23704},"当镜像作为其他镜像基础镜像时触发的构建指令",[277,28637,28638],{"align":23704},"ONBUILD COPY . \u002Fsrc",[231,28640,28641,28644,28647],{},[277,28642,28643],{"align":23704},"SHELL",[277,28645,28646],{"align":23704},"更改默认 shell，比如将 sh -c 改为 bash -c",[277,28648,28649,28650],{"align":23704},"SHELL ",[76,28651,28652],{},"“\u002Fbin\u002Fbash”, “-c”",[231,28654,28655,28658,28661],{},[277,28656,28657],{"align":23704},"HEALTHCHECK",[277,28659,28660],{"align":23704},"定义容器运行时的健康检查命令",[277,28662,28663,28664],{"align":23704},"`HEALTHCHECK CMD curl –fail ",[326,28665,28666],{"href":28666,"rel":28667},"http:\u002F\u002Flocalhost:8080",[23833],[231,28669,28670,28673,28676],{},[277,28671,28672],{"align":23704},"STOPSIGNAL",[277,28674,28675],{"align":23704},"容器停止时发送的信号",[277,28677,28678],{"align":23704},"STOPSIGNAL SIGKILL",[46,28680,28682],{"id":28681},"_62自己创建容器","6.2.自己创建容器",[21965,28684,28686],{"id":28685},"_621手动创建","6.2.1.手动创建",[21,28688,28689],{},"在x86电脑上编译x86的：",[66,28691,28693],{"className":23790,"code":28692,"language":23792,"meta":71,"style":71},"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",[73,28694,28695,28711,28715,28728,28732,28745,28749,28762,28766,28779,28783],{"__ignoreMap":71},[76,28696,28697,28699,28702,28705,28708],{"class":78,"line":79},[76,28698,26522],{"class":1927},[76,28700,28701],{"class":192}," build",[76,28703,28704],{"class":136}," -t",[76,28706,28707],{"class":192}," ros-melodic-cuda118-cudnn8-bionic:latest",[76,28709,28710],{"class":192}," .\n",[76,28712,28713],{"class":78,"line":96},[76,28714,2365],{"emptyLinePlaceholder":2364},[76,28716,28717,28719,28721,28723,28726],{"class":78,"line":1143},[76,28718,26522],{"class":1927},[76,28720,28701],{"class":192},[76,28722,28704],{"class":136},[76,28724,28725],{"class":192}," ros-noetic-focal:latest",[76,28727,28710],{"class":192},[76,28729,28730],{"class":78,"line":1158},[76,28731,2365],{"emptyLinePlaceholder":2364},[76,28733,28734,28736,28738,28740,28743],{"class":78,"line":1164},[76,28735,26522],{"class":1927},[76,28737,28701],{"class":192},[76,28739,28704],{"class":136},[76,28741,28742],{"class":192}," ros-humble-jammy:latest",[76,28744,28710],{"class":192},[76,28746,28747],{"class":78,"line":1178},[76,28748,2365],{"emptyLinePlaceholder":2364},[76,28750,28751,28753,28755,28757,28760],{"class":78,"line":1184},[76,28752,26522],{"class":1927},[76,28754,28701],{"class":192},[76,28756,28704],{"class":136},[76,28758,28759],{"class":192}," ros-jazzy-noble:latest",[76,28761,28710],{"class":192},[76,28763,28764],{"class":78,"line":1275},[76,28765,2365],{"emptyLinePlaceholder":2364},[76,28767,28768,28770,28772,28774,28777],{"class":78,"line":1281},[76,28769,26522],{"class":1927},[76,28771,28701],{"class":192},[76,28773,28704],{"class":136},[76,28775,28776],{"class":192}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[76,28778,28710],{"class":192},[76,28780,28781],{"class":78,"line":1293},[76,28782,2365],{"emptyLinePlaceholder":2364},[76,28784,28785,28787,28789,28791,28794],{"class":78,"line":1576},[76,28786,26522],{"class":1927},[76,28788,28701],{"class":192},[76,28790,28704],{"class":136},[76,28792,28793],{"class":192}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[76,28795,28710],{"class":192},[21,28797,28798],{},[1426,28799],{"alt":71,"src":28800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[21,28802,28803],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[21,28805,28806],{},[1426,28807],{"alt":71,"src":28808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[21,28810,28811],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[29,28813,28814],{},[32,28815,28816],{},"创建 Docker Hub 账户",[21,28818,28819],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[29,28821,28822],{"start":96},[32,28823,28824],{},"登录 Docker Hub",[21,28826,28827],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[66,28829,28831],{"className":23790,"code":28830,"language":23792,"meta":71,"style":71},"docker login\n",[73,28832,28833],{"__ignoreMap":71},[76,28834,28835,28837],{"class":78,"line":79},[76,28836,26522],{"class":1927},[76,28838,28839],{"class":192}," login\n",[21,28841,28842],{},"输入你的 Docker Hub 用户名和密码进行验证。",[29,28844,28845],{},[32,28846,28847],{},"为你的镜像打标签",[21,28849,28850,28851,28854],{},"Docker Hub 使用 ",[73,28852,28853],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[66,28856,28858],{"className":23790,"code":28857,"language":23792,"meta":71,"style":71},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[73,28859,28860],{"__ignoreMap":71},[76,28861,28862,28864,28867,28869,28872,28875,28878,28880],{"class":78,"line":79},[76,28863,26522],{"class":1927},[76,28865,28866],{"class":192}," tag",[76,28868,28759],{"class":192},[76,28870,28871],{"class":82}," \u003C",[76,28873,28874],{"class":192},"你的用户",[76,28876,28877],{"class":86},"名",[76,28879,1048],{"class":82},[76,28881,28882],{"class":192},"\u002Fros-jazzy-noble:latest\n",[21,28884,28885,28886,28889],{},"例如，如果你的 Docker Hub 用户名是 ",[73,28887,28888],{},"tungchiahui","，你应该执行：",[66,28891,28893],{"className":23790,"code":28892,"language":23792,"meta":71,"style":71},"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",[73,28894,28895,28906,28910,28921,28925,28936,28940,28951,28955],{"__ignoreMap":71},[76,28896,28897,28899,28901,28903],{"class":78,"line":79},[76,28898,26522],{"class":1927},[76,28900,28866],{"class":192},[76,28902,28725],{"class":192},[76,28904,28905],{"class":192}," tungchiahui\u002Fros-noetic-focal:latest\n",[76,28907,28908],{"class":78,"line":96},[76,28909,2365],{"emptyLinePlaceholder":2364},[76,28911,28912,28914,28916,28918],{"class":78,"line":1143},[76,28913,26522],{"class":1927},[76,28915,28866],{"class":192},[76,28917,28742],{"class":192},[76,28919,28920],{"class":192}," tungchiahui\u002Fros-humble-jammy:latest\n",[76,28922,28923],{"class":78,"line":1158},[76,28924,2365],{"emptyLinePlaceholder":2364},[76,28926,28927,28929,28931,28933],{"class":78,"line":1164},[76,28928,26522],{"class":1927},[76,28930,28866],{"class":192},[76,28932,28759],{"class":192},[76,28934,28935],{"class":192}," tungchiahui\u002Fros-jazzy-noble:latest\n",[76,28937,28938],{"class":78,"line":1178},[76,28939,2365],{"emptyLinePlaceholder":2364},[76,28941,28942,28944,28946,28948],{"class":78,"line":1184},[76,28943,26522],{"class":1927},[76,28945,28866],{"class":192},[76,28947,28776],{"class":192},[76,28949,28950],{"class":192}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[76,28952,28953],{"class":78,"line":1275},[76,28954,2365],{"emptyLinePlaceholder":2364},[76,28956,28957,28959,28961,28963],{"class":78,"line":1281},[76,28958,26522],{"class":1927},[76,28960,28866],{"class":192},[76,28962,28793],{"class":192},[76,28964,28965],{"class":192}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[29,28967,28968],{"start":96},[32,28969,28970],{},"推送镜像到 Docker Hub",[21,28972,28973],{},"使用以下命令将镜像推送到 Docker Hub：",[66,28975,28977],{"className":23790,"code":28976,"language":23792,"meta":71,"style":71},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[73,28978,28979],{"__ignoreMap":71},[76,28980,28981,28983,28986,28988,28990,28992,28994],{"class":78,"line":79},[76,28982,26522],{"class":1927},[76,28984,28985],{"class":192}," push",[76,28987,28871],{"class":82},[76,28989,28874],{"class":192},[76,28991,28877],{"class":86},[76,28993,1048],{"class":82},[76,28995,28996],{"class":192},"\u002Fros-noetic-jazzy-noble:latest\n",[21,28998,14600],{},[66,29000,29002],{"className":23790,"code":29001,"language":23792,"meta":71,"style":71},"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",[73,29003,29004,29012,29016,29024,29028,29036,29040,29049,29053,29061,29065],{"__ignoreMap":71},[76,29005,29006,29008,29010],{"class":78,"line":79},[76,29007,26522],{"class":1927},[76,29009,28985],{"class":192},[76,29011,28905],{"class":192},[76,29013,29014],{"class":78,"line":96},[76,29015,2365],{"emptyLinePlaceholder":2364},[76,29017,29018,29020,29022],{"class":78,"line":1143},[76,29019,26522],{"class":1927},[76,29021,28985],{"class":192},[76,29023,28920],{"class":192},[76,29025,29026],{"class":78,"line":1158},[76,29027,2365],{"emptyLinePlaceholder":2364},[76,29029,29030,29032,29034],{"class":78,"line":1164},[76,29031,26522],{"class":1927},[76,29033,28985],{"class":192},[76,29035,28935],{"class":192},[76,29037,29038],{"class":78,"line":1178},[76,29039,2365],{"emptyLinePlaceholder":2364},[76,29041,29042,29044,29046],{"class":78,"line":1184},[76,29043,26522],{"class":1927},[76,29045,28985],{"class":192},[76,29047,29048],{"class":192}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[76,29050,29051],{"class":78,"line":1275},[76,29052,2365],{"emptyLinePlaceholder":2364},[76,29054,29055,29057,29059],{"class":78,"line":1281},[76,29056,26522],{"class":1927},[76,29058,28985],{"class":192},[76,29060,28965],{"class":192},[76,29062,29063],{"class":78,"line":1293},[76,29064,2365],{"emptyLinePlaceholder":2364},[76,29066,29067,29069,29071],{"class":78,"line":1576},[76,29068,26522],{"class":1927},[76,29070,28985],{"class":192},[76,29072,29073],{"class":192}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[29,29075,29076],{"start":1143},[32,29077,29078],{},"验证推送成功",[21,29080,29081],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[21,29083,29084],{},[237,29085,3749],{},[1095,29087,29088,29091],{},[32,29089,29090],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[32,29092,29093],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[21,29095,29096],{},[1426,29097],{"alt":71,"src":29098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[21,29100,29101],{},[1426,29102],{"alt":71,"src":29103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21965,29105,29107],{"id":29106},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[21,29109,29110,29111,29114,29115,29118],{},"如果您想在 ",[237,29112,29113],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[237,29116,29117],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[21,29120,29121,29122],{},"1. ",[237,29123,29124],{},"启用 Docker 跨平台构建",[21,29126,29127],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[21,29129,29130],{},"第一步：启用 buildx（只需执行一次）",[66,29132,29134],{"className":23790,"code":29133,"language":23792,"meta":71,"style":71},"docker buildx create --name multiarch_builder --use\n",[73,29135,29136],{"__ignoreMap":71},[76,29137,29138,29140,29143,29146,29149,29152],{"class":78,"line":79},[76,29139,26522],{"class":1927},[76,29141,29142],{"class":192}," buildx",[76,29144,29145],{"class":192}," create",[76,29147,29148],{"class":136}," --name",[76,29150,29151],{"class":192}," multiarch_builder",[76,29153,29154],{"class":136}," --use\n",[21,29156,29157],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[21,29159,29160],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[66,29162,29164],{"className":23790,"code":29163,"language":23792,"meta":71,"style":71},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[73,29165,29166],{"__ignoreMap":71},[76,29167,29168,29170,29172,29174,29177,29180,29183,29186],{"class":78,"line":79},[76,29169,26522],{"class":1927},[76,29171,27199],{"class":192},[76,29173,27202],{"class":136},[76,29175,29176],{"class":136}," --privileged",[76,29178,29179],{"class":192}," multiarch\u002Fqemu-user-static",[76,29181,29182],{"class":136}," --reset",[76,29184,29185],{"class":136}," -p",[76,29187,29188],{"class":192}," yes\n",[21,29190,29191],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[21,29193,29194],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[66,29196,29198],{"className":23790,"code":29197,"language":23792,"meta":71,"style":71},"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",[73,29199,29200,29242,29246,29251,29261,29271,29280,29286,29290,29294,29304,29312,29321,29327,29331,29335,29345,29353,29362,29368,29372,29376,29386,29394,29403,29409,29413,29417,29427,29435,29444,29450,29454,29458,29468,29476,29485,29491,29495,29499,29509,29517,29526,29532,29536,29540,29550,29558,29567,29573,29577,29581,29591,29599,29608,29614,29618,29622,29633,29641,29650,29656],{"__ignoreMap":71},[76,29201,29202,29204,29206,29208,29211,29214,29216,29218,29221,29223,29225,29227,29229,29232,29235,29237,29240],{"class":78,"line":79},[76,29203,26522],{"class":1927},[76,29205,29142],{"class":192},[76,29207,28701],{"class":192},[76,29209,29210],{"class":136}," --platform",[76,29212,29213],{"class":192}," linux\u002Famd64,linux\u002Farm64",[76,29215,28704],{"class":136},[76,29217,28871],{"class":82},[76,29219,29220],{"class":192},"你的镜像",[76,29222,28877],{"class":86},[76,29224,1048],{"class":82},[76,29226,947],{"class":192},[76,29228,998],{"class":82},[76,29230,29231],{"class":192},"标",[76,29233,29234],{"class":86},"签",[76,29236,1048],{"class":82},[76,29238,29239],{"class":136}," --push",[76,29241,28710],{"class":192},[76,29243,29244],{"class":78,"line":96},[76,29245,2365],{"emptyLinePlaceholder":2364},[76,29247,29248],{"class":78,"line":1143},[76,29249,29250],{"class":146},"# 例子：\n",[76,29252,29253,29255,29257,29259],{"class":78,"line":1158},[76,29254,26522],{"class":1927},[76,29256,29142],{"class":192},[76,29258,28701],{"class":192},[76,29260,24647],{"class":136},[76,29262,29263,29266,29269],{"class":78,"line":1164},[76,29264,29265],{"class":86},"--platform ",[76,29267,29268],{"class":192},"linux\u002Famd64,linux\u002Farm64",[76,29270,24647],{"class":136},[76,29272,29273,29275,29278],{"class":78,"line":1178},[76,29274,28704],{"class":136},[76,29276,29277],{"class":192}," tungchiahui\u002Fros:noetic-focal",[76,29279,24647],{"class":136},[76,29281,29282,29284],{"class":78,"line":1184},[76,29283,29239],{"class":136},[76,29285,24647],{"class":136},[76,29287,29288],{"class":78,"line":1275},[76,29289,28710],{"class":192},[76,29291,29292],{"class":78,"line":1281},[76,29293,2365],{"emptyLinePlaceholder":2364},[76,29295,29296,29298,29300,29302],{"class":78,"line":1293},[76,29297,26522],{"class":1927},[76,29299,29142],{"class":192},[76,29301,28701],{"class":192},[76,29303,24647],{"class":136},[76,29305,29306,29308,29310],{"class":78,"line":1576},[76,29307,29265],{"class":86},[76,29309,29268],{"class":192},[76,29311,24647],{"class":136},[76,29313,29314,29316,29319],{"class":78,"line":1581},[76,29315,28704],{"class":136},[76,29317,29318],{"class":192}," tungchiahui\u002Fros:humble-jammy",[76,29320,24647],{"class":136},[76,29322,29323,29325],{"class":78,"line":1587},[76,29324,29239],{"class":136},[76,29326,24647],{"class":136},[76,29328,29329],{"class":78,"line":1592},[76,29330,28710],{"class":192},[76,29332,29333],{"class":78,"line":1606},[76,29334,2365],{"emptyLinePlaceholder":2364},[76,29336,29337,29339,29341,29343],{"class":78,"line":1611},[76,29338,26522],{"class":1927},[76,29340,29142],{"class":192},[76,29342,28701],{"class":192},[76,29344,24647],{"class":136},[76,29346,29347,29349,29351],{"class":78,"line":1617},[76,29348,29265],{"class":86},[76,29350,29268],{"class":192},[76,29352,24647],{"class":136},[76,29354,29355,29357,29360],{"class":78,"line":1638},[76,29356,28704],{"class":136},[76,29358,29359],{"class":192}," tungchiahui\u002Fros:jazzy-noble",[76,29361,24647],{"class":136},[76,29363,29364,29366],{"class":78,"line":1643},[76,29365,29239],{"class":136},[76,29367,24647],{"class":136},[76,29369,29370],{"class":78,"line":1657},[76,29371,28710],{"class":192},[76,29373,29374],{"class":78,"line":1662},[76,29375,2365],{"emptyLinePlaceholder":2364},[76,29377,29378,29380,29382,29384],{"class":78,"line":1691},[76,29379,26289],{"class":1927},[76,29381,29142],{"class":192},[76,29383,28701],{"class":192},[76,29385,24647],{"class":136},[76,29387,29388,29390,29392],{"class":78,"line":1696},[76,29389,29265],{"class":86},[76,29391,29268],{"class":192},[76,29393,24647],{"class":136},[76,29395,29396,29398,29401],{"class":78,"line":1713},[76,29397,28704],{"class":136},[76,29399,29400],{"class":192}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[76,29402,24647],{"class":136},[76,29404,29405,29407],{"class":78,"line":1718},[76,29406,29239],{"class":136},[76,29408,24647],{"class":136},[76,29410,29411],{"class":78,"line":1723},[76,29412,28710],{"class":192},[76,29414,29415],{"class":78,"line":1728},[76,29416,2365],{"emptyLinePlaceholder":2364},[76,29418,29419,29421,29423,29425],{"class":78,"line":1742},[76,29420,26522],{"class":1927},[76,29422,29142],{"class":192},[76,29424,28701],{"class":192},[76,29426,24647],{"class":136},[76,29428,29429,29431,29433],{"class":78,"line":1747},[76,29430,29265],{"class":86},[76,29432,29268],{"class":192},[76,29434,24647],{"class":136},[76,29436,29437,29439,29442],{"class":78,"line":2542},[76,29438,28704],{"class":136},[76,29440,29441],{"class":192}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[76,29443,24647],{"class":136},[76,29445,29446,29448],{"class":78,"line":2556},[76,29447,29239],{"class":136},[76,29449,24647],{"class":136},[76,29451,29452],{"class":78,"line":2564},[76,29453,28710],{"class":192},[76,29455,29456],{"class":78,"line":2569},[76,29457,2365],{"emptyLinePlaceholder":2364},[76,29459,29460,29462,29464,29466],{"class":78,"line":2575},[76,29461,26289],{"class":1927},[76,29463,29142],{"class":192},[76,29465,28701],{"class":192},[76,29467,24647],{"class":136},[76,29469,29470,29472,29474],{"class":78,"line":2581},[76,29471,29265],{"class":86},[76,29473,29268],{"class":192},[76,29475,24647],{"class":136},[76,29477,29478,29480,29483],{"class":78,"line":2586},[76,29479,28704],{"class":136},[76,29481,29482],{"class":192}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[76,29484,24647],{"class":136},[76,29486,29487,29489],{"class":78,"line":7915},[76,29488,29239],{"class":136},[76,29490,24647],{"class":136},[76,29492,29493],{"class":78,"line":7939},[76,29494,28710],{"class":192},[76,29496,29497],{"class":78,"line":7944},[76,29498,2365],{"emptyLinePlaceholder":2364},[76,29500,29501,29503,29505,29507],{"class":78,"line":7950},[76,29502,26522],{"class":1927},[76,29504,29142],{"class":192},[76,29506,28701],{"class":192},[76,29508,24647],{"class":136},[76,29510,29511,29513,29515],{"class":78,"line":7977},[76,29512,29265],{"class":86},[76,29514,29268],{"class":192},[76,29516,24647],{"class":136},[76,29518,29519,29521,29524],{"class":78,"line":7982},[76,29520,28704],{"class":136},[76,29522,29523],{"class":192}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[76,29525,24647],{"class":136},[76,29527,29528,29530],{"class":78,"line":7988},[76,29529,29239],{"class":136},[76,29531,24647],{"class":136},[76,29533,29534],{"class":78,"line":8000},[76,29535,28710],{"class":192},[76,29537,29538],{"class":78,"line":8012},[76,29539,2365],{"emptyLinePlaceholder":2364},[76,29541,29542,29544,29546,29548],{"class":78,"line":8024},[76,29543,26522],{"class":1927},[76,29545,29142],{"class":192},[76,29547,28701],{"class":192},[76,29549,24647],{"class":136},[76,29551,29552,29554,29556],{"class":78,"line":9683},[76,29553,29265],{"class":86},[76,29555,29268],{"class":192},[76,29557,24647],{"class":136},[76,29559,29560,29562,29565],{"class":78,"line":9708},[76,29561,28704],{"class":136},[76,29563,29564],{"class":192}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[76,29566,24647],{"class":136},[76,29568,29569,29571],{"class":78,"line":9731},[76,29570,29239],{"class":136},[76,29572,24647],{"class":136},[76,29574,29575],{"class":78,"line":9755},[76,29576,28710],{"class":192},[76,29578,29579],{"class":78,"line":9760},[76,29580,2365],{"emptyLinePlaceholder":2364},[76,29582,29583,29585,29587,29589],{"class":78,"line":9765},[76,29584,26289],{"class":1927},[76,29586,29142],{"class":192},[76,29588,28701],{"class":192},[76,29590,24647],{"class":136},[76,29592,29593,29595,29597],{"class":78,"line":9770},[76,29594,29265],{"class":86},[76,29596,29268],{"class":192},[76,29598,24647],{"class":136},[76,29600,29601,29603,29606],{"class":78,"line":9779},[76,29602,28704],{"class":136},[76,29604,29605],{"class":192}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[76,29607,24647],{"class":136},[76,29609,29610,29612],{"class":78,"line":9784},[76,29611,29239],{"class":136},[76,29613,24647],{"class":136},[76,29615,29616],{"class":78,"line":9790},[76,29617,28710],{"class":192},[76,29619,29620],{"class":78,"line":9811},[76,29621,2365],{"emptyLinePlaceholder":2364},[76,29623,29624,29627,29629,29631],{"class":78,"line":9817},[76,29625,29626],{"class":1927},"  docker",[76,29628,29142],{"class":192},[76,29630,28701],{"class":192},[76,29632,24647],{"class":136},[76,29634,29635,29637,29639],{"class":78,"line":9831},[76,29636,29265],{"class":86},[76,29638,29268],{"class":192},[76,29640,24647],{"class":136},[76,29642,29643,29645,29648],{"class":78,"line":9837},[76,29644,28704],{"class":136},[76,29646,29647],{"class":192}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[76,29649,24647],{"class":136},[76,29651,29652,29654],{"class":78,"line":9864},[76,29653,29239],{"class":136},[76,29655,24647],{"class":136},[76,29657,29658],{"class":78,"line":9873},[76,29659,28710],{"class":192},[21,29661,29662],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[21,29664,29665],{},[1426,29666],{"alt":71,"src":29667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[21,29669,29670],{},[1426,29671],{"alt":71,"src":29672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21965,29674,29676],{"id":29675},"_623清除构建缓存","6.2.3.清除构建缓存",[66,29678,29680],{"className":23790,"code":29679,"language":23792,"meta":71,"style":71},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[73,29681,29682,29687],{"__ignoreMap":71},[76,29683,29684],{"class":78,"line":79},[76,29685,29686],{"class":146},"# 清理BuildKit构建缓存\n",[76,29688,29689,29691,29694,29697],{"class":78,"line":96},[76,29690,26522],{"class":1927},[76,29692,29693],{"class":192}," builder",[76,29695,29696],{"class":192}," prune",[76,29698,29699],{"class":136}," -f\n",[21,29701,29702],{},[1426,29703],{"alt":71,"src":29704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[46,29706,29708],{"id":29707},"_63补充","6.3.补充",[21965,29710,29712],{"id":29711},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[21,29714,29715],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[21,29717,29718],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[21,29720,29721],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[66,29723,29725],{"className":23790,"code":29724,"language":23792,"meta":71,"style":71},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[73,29726,29727,29734],{"__ignoreMap":71},[76,29728,29729,29731],{"class":78,"line":79},[76,29730,27339],{"class":1927},[76,29732,29733],{"class":192}," nginx\n",[76,29735,29736,29738,29741,29744,29746],{"class":78,"line":96},[76,29737,28524],{"class":1927},[76,29739,29740],{"class":192}," echo",[76,29742,29743],{"class":192}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[76,29745,26191],{"class":82},[76,29747,29748],{"class":192}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[21,29750,29751],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[21,29753,29754],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[66,29756,29758],{"className":23790,"code":29757,"language":23792,"meta":71,"style":71},"docker build -t nginx:tuling .\n",[73,29759,29760],{"__ignoreMap":71},[76,29761,29762,29764,29766,29768,29771],{"class":78,"line":79},[76,29763,26522],{"class":1927},[76,29765,28701],{"class":192},[76,29767,28704],{"class":136},[76,29769,29770],{"class":192}," nginx:tuling",[76,29772,28710],{"class":192},[21,29774,29775],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[21,29777,29778],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[66,29780,29782],{"className":23790,"code":29781,"language":23792,"meta":71,"style":71},"docker run -d -p 92:80 nginx:tuling\n",[73,29783,29784],{"__ignoreMap":71},[76,29785,29786,29788,29790,29793,29795,29798],{"class":78,"line":79},[76,29787,26522],{"class":1927},[76,29789,27199],{"class":192},[76,29791,29792],{"class":136}," -d",[76,29794,29185],{"class":136},[76,29796,29797],{"class":192}," 92:80",[76,29799,29800],{"class":192}," nginx:tuling\n",[21,29802,29803,29804],{},"4、访问 ",[326,29805,29808],{"href":29806,"rel":29807},"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",[23833],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[21,29810,29811],{},[1426,29812],{"alt":71,"src":29813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[21,29815,29816],{},[1426,29817],{"alt":71,"src":29818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21965,29820,29822],{"id":29821},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[21,29824,29825],{},"只需要知道大体流程即可",[21,29827,29828],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[21,29830,29831],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[21,29833,29834],{},"2、在Dockerfile中添加以下内容",[66,29836,29838],{"className":26060,"code":29837,"language":26062,"meta":71,"style":71},"# 基于哪个镜像\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",[73,29839,29840,29845,29850,29855,29860,29865,29870,29875],{"__ignoreMap":71},[76,29841,29842],{"class":78,"line":79},[76,29843,29844],{},"# 基于哪个镜像\n",[76,29846,29847],{"class":78,"line":96},[76,29848,29849],{},"From java:8\n",[76,29851,29852],{"class":78,"line":1143},[76,29853,29854],{},"# 复制文件到容器\n",[76,29856,29857],{"class":78,"line":1158},[76,29858,29859],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[76,29861,29862],{"class":78,"line":1164},[76,29863,29864],{},"# 声明需要暴露的端口\n",[76,29866,29867],{"class":78,"line":1178},[76,29868,29869],{},"EXPOSE 8877\n",[76,29871,29872],{"class":78,"line":1184},[76,29873,29874],{},"# 配置容器启动后执行的命令\n",[76,29876,29877],{"class":78,"line":1275},[76,29878,29879],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[21,29881,29882],{},"3、使用docker build命令构建镜像",[66,29884,29886],{"className":23790,"code":29885,"language":23792,"meta":71,"style":71},"docker build -t tulingmall-member:0.0.5 .\n",[73,29887,29888],{"__ignoreMap":71},[76,29889,29890,29892,29894,29896,29899],{"class":78,"line":79},[76,29891,26522],{"class":1927},[76,29893,28701],{"class":192},[76,29895,28704],{"class":136},[76,29897,29898],{"class":192}," tulingmall-member:0.0.5",[76,29900,28710],{"class":192},[21,29902,29903],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[21,29905,29906],{},[1426,29907],{"alt":71,"src":29908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[21,29910,29911],{},"4、启动镜像，加-d可在后台启动",[66,29913,29915],{"className":23790,"code":29914,"language":23792,"meta":71,"style":71},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[73,29916,29917],{"__ignoreMap":71},[76,29918,29919,29921,29923,29925,29927,29930],{"class":78,"line":79},[76,29920,26522],{"class":1927},[76,29922,27199],{"class":192},[76,29924,29792],{"class":136},[76,29926,29185],{"class":136},[76,29928,29929],{"class":192}," 8877:8877",[76,29931,29932],{"class":192}," tulingmall-member:0.0.5\n",[21,29934,29935],{},"加上JVM参数：",[66,29937,29939],{"className":23790,"code":29938,"language":23792,"meta":71,"style":71},"# --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",[73,29940,29941,29946,29961,29971,29980,29987],{"__ignoreMap":71},[76,29942,29943],{"class":78,"line":79},[76,29944,29945],{"class":146},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[76,29947,29948,29950,29952,29955,29957,29959],{"class":78,"line":96},[76,29949,26522],{"class":1927},[76,29951,27199],{"class":192},[76,29953,29954],{"class":136},"  -d",[76,29956,29185],{"class":136},[76,29958,29929],{"class":192},[76,29960,24647],{"class":136},[76,29962,29963,29965,29968],{"class":78,"line":1143},[76,29964,28097],{"class":86},[76,29966,29967],{"class":192},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[76,29969,29970],{"class":136},"  \\\n",[76,29972,29973,29975,29978],{"class":78,"line":1158},[76,29974,28097],{"class":86},[76,29976,29977],{"class":192},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[76,29979,29970],{"class":136},[76,29981,29982,29985],{"class":78,"line":1164},[76,29983,29984],{"class":86},"--cap-add=SYS_PTRACE  ",[76,29986,26144],{"class":136},[76,29988,29989],{"class":78,"line":1178},[76,29990,29991],{"class":86},"tulingmall-member:0.0.5\n",[21,29993,29994],{},"5、访问会员服务接口",[21,29996,29997],{},[1426,29998],{"alt":71,"src":29999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21965,30001,30003],{"id":30002},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[21,30005,30006],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[21,30008,30009,30010],{},"阿里云docker镜像仓库：",[326,30011,30012],{"href":30012,"rel":30013},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23833],[21,30015,30016],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[21,30018,30019],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[21,30021,30022],{},[1426,30023],{"alt":71,"src":30024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[21,30026,30027],{},"要把镜像推送到镜像仓库",[66,30029,30031],{"className":23790,"code":30030,"language":23792,"meta":71,"style":71},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[73,30032,30033],{"__ignoreMap":71},[76,30034,30035,30037,30039,30041],{"class":78,"line":79},[76,30036,26522],{"class":1927},[76,30038,28866],{"class":192},[76,30040,29898],{"class":192},[76,30042,30043],{"class":192}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[21,30045,30046],{},"最后将镜像推送到远程仓库",[66,30048,30050],{"className":23790,"code":30049,"language":23792,"meta":71,"style":71},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[73,30051,30052],{"__ignoreMap":71},[76,30053,30054,30056,30058],{"class":78,"line":79},[76,30055,26522],{"class":1927},[76,30057,28985],{"class":192},[76,30059,30043],{"class":192},[5092,30061,30062],{},"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":71,"searchDepth":96,"depth":96,"links":30064},[30065,30066,30067],{"id":28452,"depth":1143,"text":28453},{"id":28681,"depth":1143,"text":28682},{"id":29707,"depth":1143,"text":29708},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28444,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30074,"title":30075,"body":30076,"description":71,"extension":5123,"meta":30219,"navigation":2364,"path":30220,"seo":30221,"stem":30222,"__hash__":30223},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":9,"value":30077,"toc":30217},[30078,30081,30086,30091,30094,30099,30104,30107,30112,30117,30120,30125,30128,30131,30134,30137,30140,30143,30163,30185,30188,30191,30211,30214],[12,30079,30075],{"id":30080},"_7vscode远程开发",[29,30082,30083],{},[32,30084,30085],{},"插件1：微软Docker工具",[21,30087,30088],{},[1426,30089],{"alt":71,"src":30090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[21,30092,30093],{},"docker扩展插件已经进化为container tools了，请安装container tools",[21,30095,30096],{},[1426,30097],{"alt":71,"src":30098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[29,30100,30101],{"start":96},[32,30102,30103],{},"插件2：微软Docker远程开发工具",[21,30105,30106],{},"下面这是远程开发的插件。",[21,30108,30109],{},[1426,30110],{"alt":71,"src":30111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[21,30113,30114],{},[1426,30115],{"alt":71,"src":30116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[21,30118,30119],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[21,30121,30122],{},[1426,30123],{"alt":71,"src":30124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[21,30126,30127],{},"安装完拓展之后，vscode进行链接：",[21,30129,30130],{},"1.按ctrl+shift+p",[21,30132,30133],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[21,30135,30136],{},"3.选择目前运行的容器",[21,30138,30139],{},"4.VS Code 会在新窗口中打开并连接到容器",[21,30141,30142],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[66,30144,30146],{"className":23790,"code":30145,"language":23792,"meta":71,"style":71},"docker run -v 主机目录:容器目录 image-name\n",[73,30147,30148],{"__ignoreMap":71},[76,30149,30150,30152,30154,30157,30160],{"class":78,"line":79},[76,30151,26522],{"class":1927},[76,30153,27199],{"class":192},[76,30155,30156],{"class":136}," -v",[76,30158,30159],{"class":192}," 主机目录:容器目录",[76,30161,30162],{"class":192}," image-name\n",[66,30164,30166],{"className":23790,"code":30165,"language":23792,"meta":71,"style":71},"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",[73,30167,30168],{"__ignoreMap":71},[76,30169,30170,30172,30174,30177,30179,30182],{"class":78,"line":79},[76,30171,26522],{"class":1927},[76,30173,27199],{"class":192},[76,30175,30176],{"class":136}," -it",[76,30178,30156],{"class":136},[76,30180,30181],{"class":192}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[76,30183,30184],{"class":192}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[21,30186,30187],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[21,30189,30190],{},"查看挂载情况：",[66,30192,30194],{"className":23790,"code":30193,"language":23792,"meta":71,"style":71},"mount | grep -i project\n",[73,30195,30196],{"__ignoreMap":71},[76,30197,30198,30201,30203,30206,30208],{"class":78,"line":79},[76,30199,30200],{"class":1927},"mount",[76,30202,25078],{"class":82},[76,30204,30205],{"class":1927}," grep",[76,30207,26399],{"class":136},[76,30209,30210],{"class":192}," project\n",[21,30212,30213],{},"也可以通过ls来进行查看",[5092,30215,30216],{},"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":71,"searchDepth":96,"depth":96,"links":30218},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30075,"description":71},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30225,"title":30226,"body":30227,"description":23344,"extension":5123,"meta":30231,"navigation":2364,"path":30233,"seo":30234,"stem":30235,"__hash__":30236},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":9,"value":30228,"toc":30229},[],{"title":71,"searchDepth":96,"depth":96,"links":30230},[],{"category":30232},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30226,"description":23344},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30238,"title":30239,"body":30240,"description":23344,"extension":5123,"meta":30244,"navigation":2364,"path":30245,"seo":30246,"stem":30247,"__hash__":30248},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":9,"value":30241,"toc":30242},[],{"title":71,"searchDepth":96,"depth":96,"links":30243},[],{"category":30232},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30239,"description":23344},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30250,"title":30251,"body":30252,"description":23344,"extension":5123,"meta":30545,"navigation":2364,"path":30546,"seo":30547,"stem":30548,"__hash__":30549},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":9,"value":30253,"toc":30543},[30254,30257,30265,30280,30285,30336,30339,30345,30532,30537,30540],[12,30255,30251],{"id":30256},"_1验证深度学习环境",[21,30258,30259,30260],{},"关于环境的安装，看",[326,30261,30264],{"href":30262,"rel":30263},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23833],"Pytorch-->深度学习",[21,30266,30267,30268,30271,30272,30275,30276,30279],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[73,30269,30270],{},"pytorch-cuda=12.4"," 是一个“ ",[237,30273,30274],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[237,30277,30278],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[21,30281,30282],{},[1426,30283],{"alt":71,"src":30284},"\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",[66,30286,30288],{"className":23790,"code":30287,"language":23792,"meta":71,"style":71},"# 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",[73,30289,30290,30295],{"__ignoreMap":71},[76,30291,30292],{"class":78,"line":79},[76,30293,30294],{"class":146},"# CUDA 12.4\n",[76,30296,30297,30300,30302,30305,30308,30311,30314,30317,30319,30322,30325,30328,30331,30333],{"class":78,"line":96},[76,30298,30299],{"class":1927},"conda",[76,30301,23802],{"class":192},[76,30303,30304],{"class":192}," pytorch==",[76,30306,30307],{"class":136},"2.5.1",[76,30309,30310],{"class":192}," torchvision==",[76,30312,30313],{"class":136},"0.20.1",[76,30315,30316],{"class":192}," torchaudio==",[76,30318,30307],{"class":136},[76,30320,30321],{"class":192}," pytorch-cuda=",[76,30323,30324],{"class":136},"12.4",[76,30326,30327],{"class":136}," -c",[76,30329,30330],{"class":192}," pytorch",[76,30332,30327],{"class":136},[76,30334,30335],{"class":192}," nvidia\n",[21,30337,30338],{},"）：",[21,30340,30341],{},[326,30342,30343],{"href":30343,"rel":30344},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23833],[66,30346,30350],{"className":30347,"code":30348,"language":30349,"meta":71,"style":71},"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",[73,30351,30352,30357,30365,30370,30380,30396,30401,30411,30448,30455,30467,30483,30488,30498,30510,30520],{"__ignoreMap":71},[76,30353,30354],{"class":78,"line":79},[76,30355,30356],{"class":146},"# 对深度学习环境进行测试\n",[76,30358,30359,30362],{"class":78,"line":96},[76,30360,30361],{"class":82},"import",[76,30363,30364],{"class":86}," torch\n",[76,30366,30367],{"class":78,"line":1143},[76,30368,30369],{"class":146},"# 查看cuda是否被激活\n",[76,30371,30372,30375,30377],{"class":78,"line":1158},[76,30373,30374],{"class":86},"flag",[76,30376,133],{"class":82},[76,30378,30379],{"class":86},"torch.cuda.is_available()\n",[76,30381,30382,30385,30387,30390,30393],{"class":78,"line":1164},[76,30383,30384],{"class":136},"print",[76,30386,87],{"class":86},[76,30388,30389],{"class":192},"\"cuda:\"",[76,30391,30392],{"class":86},", flag)   ",[76,30394,30395],{"class":146},"#返回true的话说明被激活\n",[76,30397,30398],{"class":78,"line":1178},[76,30399,30400],{"class":146},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[76,30402,30403,30406,30408],{"class":78,"line":1184},[76,30404,30405],{"class":86},"ngpu",[76,30407,133],{"class":82},[76,30409,30410],{"class":136},"1\n",[76,30412,30413,30416,30418,30421,30424,30426,30429,30432,30435,30437,30439,30441,30443,30446],{"class":78,"line":1275},[76,30414,30415],{"class":86},"device",[76,30417,133],{"class":82},[76,30419,30420],{"class":86},"torch.device(",[76,30422,30423],{"class":192},"\"cuda:0\"",[76,30425,1668],{"class":82},[76,30427,30428],{"class":86},"(torch.cuda.is_available() ",[76,30430,30431],{"class":82},"and",[76,30433,30434],{"class":86}," ngpu",[76,30436,1048],{"class":82},[76,30438,279],{"class":136},[76,30440,13681],{"class":86},[76,30442,1665],{"class":82},[76,30444,30445],{"class":192}," \"cpu\"",[76,30447,93],{"class":86},[76,30449,30450,30452],{"class":78,"line":1281},[76,30451,30384],{"class":136},[76,30453,30454],{"class":86},"(device)\n",[76,30456,30457,30459,30462,30464],{"class":78,"line":1293},[76,30458,30384],{"class":136},[76,30460,30461],{"class":86},"(torch.cuda.get_device_name(",[76,30463,279],{"class":136},[76,30465,30466],{"class":86},"))\n",[76,30468,30469,30471,30474,30476,30478,30480],{"class":78,"line":1576},[76,30470,30384],{"class":136},[76,30472,30473],{"class":86},"(torch.rand(",[76,30475,159],{"class":136},[76,30477,466],{"class":86},[76,30479,159],{"class":136},[76,30481,30482],{"class":86},").cuda())\n",[76,30484,30485],{"class":78,"line":1581},[76,30486,30487],{"class":146},"# 查看cuda和cudnn的版本\n",[76,30489,30490,30493,30495],{"class":78,"line":1587},[76,30491,30492],{"class":86},"cuda_version",[76,30494,133],{"class":82},[76,30496,30497],{"class":86},"torch.version.cuda\n",[76,30499,30500,30502,30504,30507],{"class":78,"line":1592},[76,30501,30384],{"class":136},[76,30503,87],{"class":86},[76,30505,30506],{"class":192},"\"cuda version\"",[76,30508,30509],{"class":86},",cuda_version)\n",[76,30511,30512,30515,30517],{"class":78,"line":1606},[76,30513,30514],{"class":86},"cudnn_version",[76,30516,133],{"class":82},[76,30518,30519],{"class":86},"torch.backends.cudnn.version()\n",[76,30521,30522,30524,30526,30529],{"class":78,"line":1611},[76,30523,30384],{"class":136},[76,30525,87],{"class":86},[76,30527,30528],{"class":192},"\"cudnn version\"",[76,30530,30531],{"class":86},",cudnn_version)\n",[21,30533,30534],{},[1426,30535],{"alt":71,"src":30536},"\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",[21,30538,30539],{},"cuda:0 指的是一块显卡",[5092,30541,30542],{},"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":71,"searchDepth":96,"depth":96,"links":30544},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30251,"description":23344},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30551,"title":30552,"body":30553,"description":23344,"extension":5123,"meta":50357,"navigation":2364,"path":50358,"seo":50359,"stem":50360,"__hash__":50361},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":9,"value":30554,"toc":50351},[30555,30558,30562,30566,30569,30574,30579,30582,30587,30592,30597,30600,30604,30609,30613,30618,30621,30626,30629,30632,30635,30638,30643,30646,30651,30656,30661,30666,30669,30673,30676,30681,31285,31290,31293,31298,31301,31304,31768,31771,31774,31777,31780,33831,33834,33839,33844,34639,34642,34647,35425,35429,37088,37092,37806,37810,37814,37819,37824,37829,37832,37837,37842,37847,37852,37857,37861,37866,39148,39153,39156,39159,39162,39317,39320,39323,40539,40544,41239,41243,41247,41252,41257,41260,41265,41270,41275,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,41414,41418,41421,42899,42903,44550,44554,45248,45252,45255,45258,45802,45805,45809,45812,47209,47213,47216,47794,49581,49585,49588,50348],[12,30556,30552],{"id":30557},"_2经典神经网络",[46,30559,30561],{"id":30560},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21965,30563,30565],{"id":30564},"_211原理介绍","2.1.1.原理介绍",[21,30567,30568],{},"LeNet-5",[29,30570,30571],{},[32,30572,30573],{},"原理",[21,30575,30576],{},[1426,30577],{"alt":71,"src":30578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[21,30580,30581],{},"B是batch批次；C是channel通道",[29,30583,30584],{"start":96},[32,30585,30586],{},"网络参数详细",[21,30588,30589],{},[1426,30590],{"alt":71,"src":30591},"\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",[21,30593,30594],{},[1426,30595],{"alt":71,"src":30596},"\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",[21,30598,30599],{},"AlexNet",[29,30601,30602],{},[32,30603,30573],{},[21,30605,30606],{},[1426,30607],{"alt":71,"src":30608},"\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",[29,30610,30611],{"start":96},[32,30612,30586],{},[21,30614,30615],{},[1426,30616],{"alt":71,"src":30617},"\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",[21,30619,30620],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[21,30622,30623],{},[1426,30624],{"alt":71,"src":30625},"\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",[21,30627,30628],{},"数据处理中的图像增强操作:",[21,30630,30631],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[21,30633,30634],{},"①增加数据量，保证训练数据充足；②防止过拟合",[21,30636,30637],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[21,30639,30640],{},[1426,30641],{"alt":71,"src":30642},"\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",[21,30644,30645],{},"提升网络精确度的方法：LRN正则化",[21,30647,30648],{},[1426,30649],{"alt":71,"src":30650},"\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",[21,30652,30653],{},[1426,30654],{"alt":71,"src":30655},"\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",[29,30657,30658],{"start":1143},[32,30659,30660],{},"AlexNet的总结",[21,30662,30663],{},[1426,30664],{"alt":71,"src":30665},"\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",[21,30667,30668],{},"比LeNet模型要深一丢丢",[21965,30670,30672],{"id":30671},"_212代码实现","2.1.2.代码实现",[21,30674,30675],{},"（1）LeNet",[29,30677,30678],{},[32,30679,30680],{},"模型搭建",[66,30682,30684],{"className":30347,"code":30683,"language":30349,"meta":71,"style":71},"# 导入库\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",[73,30685,30686,30691,30697,30702,30715,30720,30732,30736,30756,30761,30766,30777,30782,30801,30805,30810,30859,30871,30876,30905,30940,30967,30972,30984,30989,31009,31028,31047,31051,31056,31066,31083,31094,31109,31120,31131,31146,31161,31172,31179,31183,31197,31202,31225,31230,31235,31240,31244,31249,31254,31264],{"__ignoreMap":71},[76,30687,30688],{"class":78,"line":79},[76,30689,30690],{"class":146},"# 导入库\n",[76,30692,30693,30695],{"class":78,"line":96},[76,30694,30361],{"class":82},[76,30696,30364],{"class":86},[76,30698,30699],{"class":78,"line":1143},[76,30700,30701],{"class":146},"# 导入神经网络层\n",[76,30703,30704,30707,30710,30712],{"class":78,"line":1158},[76,30705,30706],{"class":82},"from",[76,30708,30709],{"class":86}," torch ",[76,30711,30361],{"class":82},[76,30713,30714],{"class":86}," nn\n",[76,30716,30717],{"class":78,"line":1164},[76,30718,30719],{"class":146},"# 导入展示神经网络参数的包\n",[76,30721,30722,30724,30727,30729],{"class":78,"line":1178},[76,30723,30706],{"class":82},[76,30725,30726],{"class":86}," torchsummary ",[76,30728,30361],{"class":82},[76,30730,30731],{"class":86}," summary\n",[76,30733,30734],{"class":78,"line":1184},[76,30735,2365],{"emptyLinePlaceholder":2364},[76,30737,30738,30740,30743,30745,30748,30750,30753],{"class":78,"line":1275},[76,30739,14661],{"class":82},[76,30741,30742],{"class":1927}," LeNet",[76,30744,87],{"class":86},[76,30746,30747],{"class":1927},"nn",[76,30749,646],{"class":86},[76,30751,30752],{"class":1927},"Module",[76,30754,30755],{"class":86},"):\n",[76,30757,30758],{"class":78,"line":1281},[76,30759,30760],{"class":146},"    # 模型初始化:\n",[76,30762,30763],{"class":78,"line":1293},[76,30764,30765],{"class":146},"    # 定义一些网络层和激活函数\n",[76,30767,30768,30771,30774],{"class":78,"line":1576},[76,30769,30770],{"class":82},"    def",[76,30772,30773],{"class":136}," __init__",[76,30775,30776],{"class":86},"(self):\n",[76,30778,30779],{"class":78,"line":1581},[76,30780,30781],{"class":146},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[76,30783,30784,30787,30790,30793,30796,30799],{"class":78,"line":1587},[76,30785,30786],{"class":136},"        super",[76,30788,30789],{"class":86},"(LeNet,",[76,30791,30792],{"class":136},"self",[76,30794,30795],{"class":86},").",[76,30797,30798],{"class":136},"__init__",[76,30800,1940],{"class":86},[76,30802,30803],{"class":78,"line":1592},[76,30804,2365],{"emptyLinePlaceholder":2364},[76,30806,30807],{"class":78,"line":1606},[76,30808,30809],{"class":146},"        # 定义网络层\n",[76,30811,30812,30815,30818,30820,30823,30826,30828,30830,30832,30835,30837,30839,30841,30844,30846,30848,30850,30853,30855,30857],{"class":78,"line":1611},[76,30813,30814],{"class":136},"        self",[76,30816,30817],{"class":86},".c1",[76,30819,133],{"class":82},[76,30821,30822],{"class":86},"nn.Conv2d(",[76,30824,30825],{"class":5183},"in_channels",[76,30827,133],{"class":82},[76,30829,305],{"class":136},[76,30831,466],{"class":86},[76,30833,30834],{"class":5183},"out_channels",[76,30836,133],{"class":82},[76,30838,432],{"class":136},[76,30840,466],{"class":86},[76,30842,30843],{"class":5183},"kernel_size",[76,30845,133],{"class":82},[76,30847,407],{"class":136},[76,30849,466],{"class":86},[76,30851,30852],{"class":5183},"padding",[76,30854,133],{"class":82},[76,30856,165],{"class":136},[76,30858,93],{"class":86},[76,30860,30861,30863,30866,30868],{"class":78,"line":1617},[76,30862,30814],{"class":136},[76,30864,30865],{"class":86},".sig",[76,30867,133],{"class":82},[76,30869,30870],{"class":86},"nn.Sigmoid()\n",[76,30872,30873],{"class":78,"line":1638},[76,30874,30875],{"class":146},"        # 定义池化\n",[76,30877,30878,30880,30883,30885,30888,30890,30892,30894,30896,30899,30901,30903],{"class":78,"line":1643},[76,30879,30814],{"class":136},[76,30881,30882],{"class":86},".s2",[76,30884,133],{"class":82},[76,30886,30887],{"class":86},"nn.AvgPool2d(",[76,30889,30843],{"class":5183},[76,30891,133],{"class":82},[76,30893,165],{"class":136},[76,30895,466],{"class":86},[76,30897,30898],{"class":5183},"stride",[76,30900,133],{"class":82},[76,30902,165],{"class":136},[76,30904,93],{"class":86},[76,30906,30907,30909,30912,30914,30916,30918,30920,30922,30924,30926,30928,30930,30932,30934,30936,30938],{"class":78,"line":1657},[76,30908,30814],{"class":136},[76,30910,30911],{"class":86},".c3",[76,30913,133],{"class":82},[76,30915,30822],{"class":86},[76,30917,30825],{"class":5183},[76,30919,133],{"class":82},[76,30921,432],{"class":136},[76,30923,466],{"class":86},[76,30925,30834],{"class":5183},[76,30927,133],{"class":82},[76,30929,689],{"class":136},[76,30931,466],{"class":86},[76,30933,30843],{"class":5183},[76,30935,133],{"class":82},[76,30937,407],{"class":136},[76,30939,93],{"class":86},[76,30941,30942,30944,30947,30949,30951,30953,30955,30957,30959,30961,30963,30965],{"class":78,"line":1662},[76,30943,30814],{"class":136},[76,30945,30946],{"class":86},".s4",[76,30948,133],{"class":82},[76,30950,30887],{"class":86},[76,30952,30843],{"class":5183},[76,30954,133],{"class":82},[76,30956,165],{"class":136},[76,30958,466],{"class":86},[76,30960,30898],{"class":5183},[76,30962,133],{"class":82},[76,30964,165],{"class":136},[76,30966,93],{"class":86},[76,30968,30969],{"class":78,"line":1691},[76,30970,30971],{"class":146},"        # 定义平展层\n",[76,30973,30974,30976,30979,30981],{"class":78,"line":1696},[76,30975,30814],{"class":136},[76,30977,30978],{"class":86},".flatten",[76,30980,133],{"class":82},[76,30982,30983],{"class":86},"nn.Flatten()\n",[76,30985,30986],{"class":78,"line":1713},[76,30987,30988],{"class":146},"        # 定义全连接层\n",[76,30990,30991,30993,30996,30998,31001,31003,31005,31007],{"class":78,"line":1718},[76,30992,30814],{"class":136},[76,30994,30995],{"class":86},".f5",[76,30997,133],{"class":82},[76,30999,31000],{"class":86},"nn.Linear(",[76,31002,3952],{"class":136},[76,31004,466],{"class":86},[76,31006,905],{"class":136},[76,31008,93],{"class":86},[76,31010,31011,31013,31016,31018,31020,31022,31024,31026],{"class":78,"line":1723},[76,31012,30814],{"class":136},[76,31014,31015],{"class":86},".f6",[76,31017,133],{"class":82},[76,31019,31000],{"class":86},[76,31021,905],{"class":136},[76,31023,466],{"class":86},[76,31025,799],{"class":136},[76,31027,93],{"class":86},[76,31029,31030,31032,31035,31037,31039,31041,31043,31045],{"class":78,"line":1728},[76,31031,30814],{"class":136},[76,31033,31034],{"class":86},".f7",[76,31036,133],{"class":82},[76,31038,31000],{"class":86},[76,31040,799],{"class":136},[76,31042,466],{"class":86},[76,31044,534],{"class":136},[76,31046,93],{"class":86},[76,31048,31049],{"class":78,"line":1742},[76,31050,2365],{"emptyLinePlaceholder":2364},[76,31052,31053],{"class":78,"line":1747},[76,31054,31055],{"class":146},"    # 写工具->写前向传播\n",[76,31057,31058,31060,31063],{"class":78,"line":2542},[76,31059,30770],{"class":82},[76,31061,31062],{"class":1927}," forward",[76,31064,31065],{"class":86},"(self,x):\n",[76,31067,31068,31071,31073,31075,31078,31080],{"class":78,"line":2556},[76,31069,31070],{"class":86},"        x",[76,31072,133],{"class":82},[76,31074,30792],{"class":136},[76,31076,31077],{"class":86},".sig(",[76,31079,30792],{"class":136},[76,31081,31082],{"class":86},".c1(x))\n",[76,31084,31085,31087,31089,31091],{"class":78,"line":2564},[76,31086,31070],{"class":86},[76,31088,133],{"class":82},[76,31090,30792],{"class":136},[76,31092,31093],{"class":86},".s2(x)\n",[76,31095,31096,31098,31100,31102,31104,31106],{"class":78,"line":2569},[76,31097,31070],{"class":86},[76,31099,133],{"class":82},[76,31101,30792],{"class":136},[76,31103,31077],{"class":86},[76,31105,30792],{"class":136},[76,31107,31108],{"class":86},".c3(x))\n",[76,31110,31111,31113,31115,31117],{"class":78,"line":2575},[76,31112,31070],{"class":86},[76,31114,133],{"class":82},[76,31116,30792],{"class":136},[76,31118,31119],{"class":86},".s4(x)\n",[76,31121,31122,31124,31126,31128],{"class":78,"line":2581},[76,31123,31070],{"class":86},[76,31125,133],{"class":82},[76,31127,30792],{"class":136},[76,31129,31130],{"class":86},".flatten(x)\n",[76,31132,31133,31135,31137,31139,31141,31143],{"class":78,"line":2586},[76,31134,31070],{"class":86},[76,31136,133],{"class":82},[76,31138,30792],{"class":136},[76,31140,31077],{"class":86},[76,31142,30792],{"class":136},[76,31144,31145],{"class":86},".f5(x))\n",[76,31147,31148,31150,31152,31154,31156,31158],{"class":78,"line":7915},[76,31149,31070],{"class":86},[76,31151,133],{"class":82},[76,31153,30792],{"class":136},[76,31155,31077],{"class":86},[76,31157,30792],{"class":136},[76,31159,31160],{"class":86},".f6(x))\n",[76,31162,31163,31165,31167,31169],{"class":78,"line":7939},[76,31164,31070],{"class":86},[76,31166,133],{"class":82},[76,31168,30792],{"class":136},[76,31170,31171],{"class":86},".f7(x)\n",[76,31173,31174,31176],{"class":78,"line":7944},[76,31175,14719],{"class":82},[76,31177,31178],{"class":86}," x\n",[76,31180,31181],{"class":78,"line":7950},[76,31182,2365],{"emptyLinePlaceholder":2364},[76,31184,31185,31187,31190,31192,31195],{"class":78,"line":7977},[76,31186,1495],{"class":82},[76,31188,31189],{"class":136}," __name__",[76,31191,2914],{"class":82},[76,31193,31194],{"class":192},"\"__main__\"",[76,31196,3704],{"class":86},[76,31198,31199],{"class":78,"line":7982},[76,31200,31201],{"class":146},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[76,31203,31204,31207,31209,31211,31214,31216,31219,31221,31223],{"class":78,"line":7988},[76,31205,31206],{"class":86},"    device",[76,31208,133],{"class":82},[76,31210,30420],{"class":86},[76,31212,31213],{"class":192},"\"cuda\"",[76,31215,1668],{"class":82},[76,31217,31218],{"class":86}," torch.cuda.is_available() ",[76,31220,1665],{"class":82},[76,31222,30445],{"class":192},[76,31224,93],{"class":86},[76,31226,31227],{"class":78,"line":8000},[76,31228,31229],{"class":146},"    # 如果就是想指定用cpu用下方代码:\n",[76,31231,31232],{"class":78,"line":8012},[76,31233,31234],{"class":146},"    # device=\"cpu\"\n",[76,31236,31237],{"class":78,"line":8024},[76,31238,31239],{"class":146},"    # print(device)\n",[76,31241,31242],{"class":78,"line":9683},[76,31243,2365],{"emptyLinePlaceholder":2364},[76,31245,31246],{"class":78,"line":9708},[76,31247,31248],{"class":146},"    # 实例化模型\n",[76,31250,31251],{"class":78,"line":9731},[76,31252,31253],{"class":146},"    # 将模型放到设备中去运行\n",[76,31255,31256,31259,31261],{"class":78,"line":9755},[76,31257,31258],{"class":86},"    model",[76,31260,133],{"class":82},[76,31262,31263],{"class":86},"LeNet().to(device)\n",[76,31265,31266,31269,31272,31274,31276,31278,31280,31282],{"class":78,"line":9760},[76,31267,31268],{"class":136},"    print",[76,31270,31271],{"class":86},"(summary(model,(",[76,31273,305],{"class":136},[76,31275,466],{"class":86},[76,31277,989],{"class":136},[76,31279,466],{"class":86},[76,31281,989],{"class":136},[76,31283,31284],{"class":86},")))\n",[21,31286,31287],{},[1426,31288],{"alt":71,"src":31289},"\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",[21,31291,31292],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[29,31294,31295],{"start":96},[32,31296,31297],{},"训练",[21,31299,31300],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[21,31302,31303],{},"在训练之前可以将数据展示看一下",[66,31305,31307],{"className":30347,"code":31306,"language":30349,"meta":71,"style":71},"# 建立画图的函数，用于展示数据\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",[73,31308,31309,31314,31319,31331,31343,31356,31361,31373,31378,31390,31395,31407,31411,31415,31436,31448,31453,31474,31485,31489,31494,31512,31523,31528,31539,31544,31555,31559,31564,31579,31592,31597,31602,31615,31628,31641,31646,31650,31655,31675,31692,31712,31725,31738,31748,31763],{"__ignoreMap":71},[76,31310,31311],{"class":78,"line":79},[76,31312,31313],{"class":146},"# 建立画图的函数，用于展示数据\n",[76,31315,31316],{"class":78,"line":96},[76,31317,31318],{"class":146},"# torchvision中包含很多内置的数据集\n",[76,31320,31321,31323,31326,31328],{"class":78,"line":1143},[76,31322,30706],{"class":82},[76,31324,31325],{"class":86}," sklearn.externals.array_api_compat.torch ",[76,31327,30361],{"class":82},[76,31329,31330],{"class":86}," squeeze\n",[76,31332,31333,31335,31338,31340],{"class":78,"line":1158},[76,31334,30706],{"class":82},[76,31336,31337],{"class":86}," torchvision.datasets ",[76,31339,30361],{"class":82},[76,31341,31342],{"class":86}," FashionMNIST\n",[76,31344,31345,31347,31350,31353],{"class":78,"line":1164},[76,31346,30361],{"class":82},[76,31348,31349],{"class":86}," numpy ",[76,31351,31352],{"class":82},"as",[76,31354,31355],{"class":86}," np\n",[76,31357,31358],{"class":78,"line":1178},[76,31359,31360],{"class":146},"# 引入处理数据集的包\n",[76,31362,31363,31365,31368,31370],{"class":78,"line":1184},[76,31364,30706],{"class":82},[76,31366,31367],{"class":86}," torchvision ",[76,31369,30361],{"class":82},[76,31371,31372],{"class":86}," transforms\n",[76,31374,31375],{"class":78,"line":1275},[76,31376,31377],{"class":146},"# 从torch库中引入数据处理的包\n",[76,31379,31380,31382,31385,31387],{"class":78,"line":1281},[76,31381,30361],{"class":82},[76,31383,31384],{"class":86}," torch.utils.data ",[76,31386,31352],{"class":82},[76,31388,31389],{"class":86}," Data\n",[76,31391,31392],{"class":78,"line":1293},[76,31393,31394],{"class":146},"# 导入画图的库\n",[76,31396,31397,31399,31402,31404],{"class":78,"line":1576},[76,31398,30361],{"class":82},[76,31400,31401],{"class":86}," matplotlib.pyplot ",[76,31403,31352],{"class":82},[76,31405,31406],{"class":86}," plt\n",[76,31408,31409],{"class":78,"line":1581},[76,31410,2365],{"emptyLinePlaceholder":2364},[76,31412,31413],{"class":78,"line":1587},[76,31414,2365],{"emptyLinePlaceholder":2364},[76,31416,31417,31420,31422,31425,31428,31430,31433],{"class":78,"line":1592},[76,31418,31419],{"class":86},"train_data",[76,31421,133],{"class":82},[76,31423,31424],{"class":86},"FashionMNIST(",[76,31426,31427],{"class":5183},"root",[76,31429,133],{"class":82},[76,31431,31432],{"class":192},"'.\u002Fdata'",[76,31434,31435],{"class":86},",\n",[76,31437,31438,31441,31443,31446],{"class":78,"line":1606},[76,31439,31440],{"class":5183},"                        train",[76,31442,133],{"class":82},[76,31444,31445],{"class":136},"True",[76,31447,31435],{"class":86},[76,31449,31450],{"class":78,"line":1611},[76,31451,31452],{"class":146},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[76,31454,31455,31458,31460,31463,31466,31468,31471],{"class":78,"line":1617},[76,31456,31457],{"class":5183},"                        transform",[76,31459,133],{"class":82},[76,31461,31462],{"class":86},"transforms.Compose([transforms.Resize(",[76,31464,31465],{"class":5183},"size",[76,31467,133],{"class":82},[76,31469,31470],{"class":136},"224",[76,31472,31473],{"class":86},"),transforms.ToTensor()]),\n",[76,31475,31476,31479,31481,31483],{"class":78,"line":1638},[76,31477,31478],{"class":5183},"                        download",[76,31480,133],{"class":82},[76,31482,31445],{"class":136},[76,31484,93],{"class":86},[76,31486,31487],{"class":78,"line":1643},[76,31488,2365],{"emptyLinePlaceholder":2364},[76,31490,31491],{"class":78,"line":1657},[76,31492,31493],{"class":146},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[76,31495,31496,31499,31501,31504,31507,31509],{"class":78,"line":1662},[76,31497,31498],{"class":86},"train_loader",[76,31500,133],{"class":82},[76,31502,31503],{"class":86},"Data.DataLoader(",[76,31505,31506],{"class":5183},"dataset",[76,31508,133],{"class":82},[76,31510,31511],{"class":86},"train_data,\n",[76,31513,31514,31517,31519,31521],{"class":78,"line":1691},[76,31515,31516],{"class":5183},"                             batch_size",[76,31518,133],{"class":82},[76,31520,291],{"class":136},[76,31522,31435],{"class":86},[76,31524,31525],{"class":78,"line":1696},[76,31526,31527],{"class":146},"                             # 数据是否打乱\n",[76,31529,31530,31533,31535,31537],{"class":78,"line":1713},[76,31531,31532],{"class":5183},"                             shuffle",[76,31534,133],{"class":82},[76,31536,31445],{"class":136},[76,31538,31435],{"class":86},[76,31540,31541],{"class":78,"line":1718},[76,31542,31543],{"class":146},"                             # 规定加载数据的进程\n",[76,31545,31546,31549,31551,31553],{"class":78,"line":1723},[76,31547,31548],{"class":5183},"                             num_workers",[76,31550,133],{"class":82},[76,31552,279],{"class":136},[76,31554,93],{"class":86},[76,31556,31557],{"class":78,"line":1728},[76,31558,2365],{"emptyLinePlaceholder":2364},[76,31560,31561],{"class":78,"line":1742},[76,31562,31563],{"class":146},"# 获得一个batch的数据\n",[76,31565,31566,31568,31571,31573,31576],{"class":78,"line":1747},[76,31567,2990],{"class":82},[76,31569,31570],{"class":86}," step,(b_x,b_y) ",[76,31572,26012],{"class":82},[76,31574,31575],{"class":136}," enumerate",[76,31577,31578],{"class":86},"(train_loader):\n",[76,31580,31581,31583,31586,31588,31590],{"class":78,"line":2542},[76,31582,3066],{"class":82},[76,31584,31585],{"class":86}," step ",[76,31587,1048],{"class":82},[76,31589,4058],{"class":136},[76,31591,3704],{"class":86},[76,31593,31594],{"class":78,"line":2556},[76,31595,31596],{"class":82},"        break\n",[76,31598,31599],{"class":78,"line":2564},[76,31600,31601],{"class":146},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[76,31603,31604,31607,31609,31612],{"class":78,"line":2569},[76,31605,31606],{"class":86},"batch_x",[76,31608,133],{"class":82},[76,31610,31611],{"class":86},"b_x.squeeze().numpy()  ",[76,31613,31614],{"class":146},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[76,31616,31617,31620,31622,31625],{"class":78,"line":2575},[76,31618,31619],{"class":86},"batch_y",[76,31621,133],{"class":82},[76,31623,31624],{"class":86},"b_y.numpy()   ",[76,31626,31627],{"class":146},"#将张量转换成功numpy数组\n",[76,31629,31630,31633,31635,31638],{"class":78,"line":2581},[76,31631,31632],{"class":86},"class_label",[76,31634,133],{"class":82},[76,31636,31637],{"class":86},"train_data.classes  ",[76,31639,31640],{"class":146},"#训练集标签\n",[76,31642,31643],{"class":78,"line":2586},[76,31644,31645],{"class":146},"# print(class_label)\n",[76,31647,31648],{"class":78,"line":7915},[76,31649,2365],{"emptyLinePlaceholder":2364},[76,31651,31652],{"class":78,"line":7939},[76,31653,31654],{"class":146},"# 可视化一个batch的图像\n",[76,31656,31657,31660,31663,31665,31667,31669,31671,31673],{"class":78,"line":7944},[76,31658,31659],{"class":86},"plt.figure(",[76,31661,31662],{"class":5183},"figsize",[76,31664,133],{"class":82},[76,31666,87],{"class":86},[76,31668,586],{"class":136},[76,31670,466],{"class":86},[76,31672,407],{"class":136},[76,31674,30466],{"class":86},[76,31676,31677,31679,31682,31684,31687,31689],{"class":78,"line":7950},[76,31678,2990],{"class":82},[76,31680,31681],{"class":86}," ii ",[76,31683,26012],{"class":82},[76,31685,31686],{"class":86}," np.arange(",[76,31688,7325],{"class":136},[76,31690,31691],{"class":86},"(batch_y)):\n",[76,31693,31694,31697,31699,31701,31703,31706,31708,31710],{"class":78,"line":7977},[76,31695,31696],{"class":86},"    plt.subplot(",[76,31698,381],{"class":136},[76,31700,466],{"class":86},[76,31702,689],{"class":136},[76,31704,31705],{"class":86},",ii ",[76,31707,569],{"class":82},[76,31709,25087],{"class":136},[76,31711,93],{"class":86},[76,31713,31714,31717,31720,31722],{"class":78,"line":7982},[76,31715,31716],{"class":86},"    plt.imshow(batch_x[ii,:,:],",[76,31718,31719],{"class":5183},"cmap",[76,31721,133],{"class":82},[76,31723,31724],{"class":86},"plt.cm.gray)\n",[76,31726,31727,31730,31732,31734,31736],{"class":78,"line":7988},[76,31728,31729],{"class":86},"    plt.title(class_label[batch_y[ii]],",[76,31731,31465],{"class":5183},[76,31733,133],{"class":82},[76,31735,534],{"class":136},[76,31737,93],{"class":86},[76,31739,31740,31743,31746],{"class":78,"line":8000},[76,31741,31742],{"class":86},"    plt.axis(",[76,31744,31745],{"class":192},"\"off\"",[76,31747,93],{"class":86},[76,31749,31750,31753,31756,31758,31761],{"class":78,"line":8012},[76,31751,31752],{"class":86},"    plt.subplots_adjust(",[76,31754,31755],{"class":5183},"wspace",[76,31757,133],{"class":82},[76,31759,31760],{"class":136},"0.05",[76,31762,93],{"class":86},[76,31764,31765],{"class":78,"line":8024},[76,31766,31767],{"class":86},"plt.show()\n",[21,31769,31770],{},"用matplotlib进行展示的过程可以后续再补",[21,31772,31773],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[21,31775,31776],{},"训练次数就是按照批次过整个训练集数据的次数",[21,31778,31779],{},"模型训练：",[66,31781,31783],{"className":30347,"code":31782,"language":30349,"meta":71,"style":71},"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",[73,31784,31785,31792,31799,31803,31815,31821,31832,31842,31852,31862,31872,31877,31889,31899,31903,31907,31912,31923,31936,31947,31964,31975,32014,32030,32042,32053,32058,32069,32085,32096,32107,32118,32125,32129,32134,32139,32143,32148,32158,32179,32183,32187,32192,32197,32202,32222,32226,32231,32241,32245,32250,32259,32264,32269,32274,32284,32288,32292,32297,32302,32312,32317,32327,32332,32341,32346,32355,32360,32369,32373,32378,32388,32392,32396,32401,32416,32444,32459,32463,32468,32473,32482,32487,32496,32501,32510,32515,32524,32529,32538,32543,32552,32557,32570,32575,32585,32590,32600,32606,32612,32618,32624,32635,32641,32661,32667,32678,32684,32690,32696,32702,32708,32714,32720,32740,32746,32762,32768,32782,32788,32803,32809,32818,32824,32833,32839,32845,32854,32860,32871,32877,32896,32902,32913,32919,32939,32955,32961,32975,32981,32987,32998,33004,33010,33020,33026,33037,33043,33053,33058,33064,33113,33160,33165,33171,33190,33196,33216,33222,33228,33238,33243,33249,33265,33310,33316,33322,33328,33339,33345,33351,33357,33375,33389,33398,33407,33416,33425,33431,33437,33445,33450,33456,33467,33473,33493,33499,33505,33511,33528,33534,33540,33546,33552,33558,33585,33609,33615,33621,33627,33638,33649,33655,33672,33695,33718,33724,33729,33738,33748,33754,33759,33765,33778,33784,33795,33806,33825],{"__ignoreMap":71},[76,31786,31787,31789],{"class":78,"line":79},[76,31788,30361],{"class":82},[76,31790,31791],{"class":86}," copy\n",[76,31793,31794,31796],{"class":78,"line":96},[76,31795,30361],{"class":82},[76,31797,31798],{"class":86}," time\n",[76,31800,31801],{"class":78,"line":1143},[76,31802,2365],{"emptyLinePlaceholder":2364},[76,31804,31805,31807,31810,31812],{"class":78,"line":1158},[76,31806,30361],{"class":82},[76,31808,31809],{"class":86}," pandas ",[76,31811,31352],{"class":82},[76,31813,31814],{"class":86}," pd\n",[76,31816,31817,31819],{"class":78,"line":1164},[76,31818,30361],{"class":82},[76,31820,30364],{"class":86},[76,31822,31823,31825,31827,31829],{"class":78,"line":1178},[76,31824,30706],{"class":82},[76,31826,31384],{"class":86},[76,31828,30361],{"class":82},[76,31830,31831],{"class":86}," Dataset\n",[76,31833,31834,31836,31838,31840],{"class":78,"line":1184},[76,31835,30706],{"class":82},[76,31837,31337],{"class":86},[76,31839,30361],{"class":82},[76,31841,31342],{"class":86},[76,31843,31844,31846,31848,31850],{"class":78,"line":1275},[76,31845,30706],{"class":82},[76,31847,31367],{"class":86},[76,31849,30361],{"class":82},[76,31851,31372],{"class":86},[76,31853,31854,31856,31858,31860],{"class":78,"line":1281},[76,31855,30361],{"class":82},[76,31857,31384],{"class":86},[76,31859,31352],{"class":82},[76,31861,31389],{"class":86},[76,31863,31864,31866,31868,31870],{"class":78,"line":1293},[76,31865,30361],{"class":82},[76,31867,31401],{"class":86},[76,31869,31352],{"class":82},[76,31871,31406],{"class":86},[76,31873,31874],{"class":78,"line":1576},[76,31875,31876],{"class":146},"# 导入模型\n",[76,31878,31879,31881,31884,31886],{"class":78,"line":1581},[76,31880,30706],{"class":82},[76,31882,31883],{"class":86}," model ",[76,31885,30361],{"class":82},[76,31887,31888],{"class":86}," LeNet\n",[76,31890,31891,31893,31895,31897],{"class":78,"line":1587},[76,31892,30706],{"class":82},[76,31894,30709],{"class":86},[76,31896,30361],{"class":82},[76,31898,30714],{"class":86},[76,31900,31901],{"class":78,"line":1592},[76,31902,2365],{"emptyLinePlaceholder":2364},[76,31904,31905],{"class":78,"line":1606},[76,31906,2365],{"emptyLinePlaceholder":2364},[76,31908,31909],{"class":78,"line":1611},[76,31910,31911],{"class":146},"# 处理训练集与验证集函数--->划分数据集\n",[76,31913,31914,31917,31920],{"class":78,"line":1617},[76,31915,31916],{"class":82},"def",[76,31918,31919],{"class":1927}," train_val_data_process",[76,31921,31922],{"class":86},"():\n",[76,31924,31925,31928,31930,31932,31934],{"class":78,"line":1638},[76,31926,31927],{"class":86},"    train_data",[76,31929,133],{"class":82},[76,31931,31424],{"class":86},[76,31933,31432],{"class":192},[76,31935,31435],{"class":86},[76,31937,31938,31941,31943,31945],{"class":78,"line":1643},[76,31939,31940],{"class":5183},"                            train",[76,31942,133],{"class":82},[76,31944,31445],{"class":136},[76,31946,31435],{"class":86},[76,31948,31949,31952,31954,31956,31958,31960,31962],{"class":78,"line":1657},[76,31950,31951],{"class":5183},"                            transform",[76,31953,133],{"class":82},[76,31955,31462],{"class":86},[76,31957,31465],{"class":5183},[76,31959,133],{"class":82},[76,31961,989],{"class":136},[76,31963,31473],{"class":86},[76,31965,31966,31969,31971,31973],{"class":78,"line":1662},[76,31967,31968],{"class":5183},"                            download",[76,31970,133],{"class":82},[76,31972,31445],{"class":136},[76,31974,93],{"class":86},[76,31976,31977,31980,31982,31985,31988,31990,31993,31995,31997,32000,32002,32004,32007,32009,32011],{"class":78,"line":1691},[76,31978,31979],{"class":86},"    train_data,val_data",[76,31981,133],{"class":82},[76,31983,31984],{"class":86},"Data.random_split(train_data,[",[76,31986,31987],{"class":136},"round",[76,31989,87],{"class":86},[76,31991,31992],{"class":136},"0.8",[76,31994,543],{"class":82},[76,31996,7325],{"class":136},[76,31998,31999],{"class":86},"(train_data)),",[76,32001,31987],{"class":136},[76,32003,87],{"class":86},[76,32005,32006],{"class":136},"0.2",[76,32008,543],{"class":82},[76,32010,7325],{"class":136},[76,32012,32013],{"class":86},"(train_data))])\n",[76,32015,32016,32019,32021,32024,32026,32028],{"class":78,"line":1696},[76,32017,32018],{"class":86},"    train_dataloader ",[76,32020,133],{"class":82},[76,32022,32023],{"class":86}," Data.DataLoader(",[76,32025,31506],{"class":5183},[76,32027,133],{"class":82},[76,32029,31511],{"class":86},[76,32031,32032,32035,32037,32040],{"class":78,"line":1713},[76,32033,32034],{"class":5183},"                                       batch_size",[76,32036,133],{"class":82},[76,32038,32039],{"class":136},"128",[76,32041,31435],{"class":86},[76,32043,32044,32047,32049,32051],{"class":78,"line":1718},[76,32045,32046],{"class":5183},"                                       shuffle",[76,32048,133],{"class":82},[76,32050,31445],{"class":136},[76,32052,31435],{"class":86},[76,32054,32055],{"class":78,"line":1723},[76,32056,32057],{"class":146},"                                       # 规定8个进程\n",[76,32059,32060,32063,32065,32067],{"class":78,"line":1728},[76,32061,32062],{"class":5183},"                                       num_workers",[76,32064,133],{"class":82},[76,32066,483],{"class":136},[76,32068,93],{"class":86},[76,32070,32071,32074,32076,32078,32080,32082],{"class":78,"line":1742},[76,32072,32073],{"class":86},"    val_dataloader",[76,32075,133],{"class":82},[76,32077,31503],{"class":86},[76,32079,31506],{"class":5183},[76,32081,133],{"class":82},[76,32083,32084],{"class":86},"val_data,\n",[76,32086,32087,32090,32092,32094],{"class":78,"line":1747},[76,32088,32089],{"class":5183},"                                   batch_size",[76,32091,133],{"class":82},[76,32093,32039],{"class":136},[76,32095,31435],{"class":86},[76,32097,32098,32101,32103,32105],{"class":78,"line":2542},[76,32099,32100],{"class":5183},"                                   shuffle",[76,32102,133],{"class":82},[76,32104,31445],{"class":136},[76,32106,31435],{"class":86},[76,32108,32109,32112,32114,32116],{"class":78,"line":2556},[76,32110,32111],{"class":5183},"                                   num_workers",[76,32113,133],{"class":82},[76,32115,483],{"class":136},[76,32117,93],{"class":86},[76,32119,32120,32122],{"class":78,"line":2564},[76,32121,4055],{"class":82},[76,32123,32124],{"class":86}," train_dataloader,val_dataloader\n",[76,32126,32127],{"class":78,"line":2569},[76,32128,2365],{"emptyLinePlaceholder":2364},[76,32130,32131],{"class":78,"line":2575},[76,32132,32133],{"class":146},"# 验证是否出错\n",[76,32135,32136],{"class":78,"line":2581},[76,32137,32138],{"class":146},"# train_val_data_process()\n",[76,32140,32141],{"class":78,"line":2586},[76,32142,2365],{"emptyLinePlaceholder":2364},[76,32144,32145],{"class":78,"line":7915},[76,32146,32147],{"class":146},"# 定义模型训练函数\n",[76,32149,32150,32152,32155],{"class":78,"line":7939},[76,32151,31916],{"class":82},[76,32153,32154],{"class":1927}," train_model_process",[76,32156,32157],{"class":86},"(model,train_dataloader,val_dataloader,num_epochs):\n",[76,32159,32160,32162,32164,32166,32168,32170,32172,32174,32177],{"class":78,"line":7944},[76,32161,31206],{"class":86},[76,32163,133],{"class":82},[76,32165,30420],{"class":86},[76,32167,31213],{"class":192},[76,32169,1668],{"class":82},[76,32171,31218],{"class":86},[76,32173,1665],{"class":82},[76,32175,32176],{"class":192}," 'cpu'",[76,32178,93],{"class":86},[76,32180,32181],{"class":78,"line":7950},[76,32182,2365],{"emptyLinePlaceholder":2364},[76,32184,32185],{"class":78,"line":7977},[76,32186,2365],{"emptyLinePlaceholder":2364},[76,32188,32189],{"class":78,"line":7982},[76,32190,32191],{"class":146},"    # 定义优化器\n",[76,32193,32194],{"class":78,"line":7988},[76,32195,32196],{"class":146},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[76,32198,32199],{"class":78,"line":8000},[76,32200,32201],{"class":146},"    # lr为学习率\n",[76,32203,32204,32207,32209,32212,32215,32217,32220],{"class":78,"line":8012},[76,32205,32206],{"class":86},"    optimizer",[76,32208,133],{"class":82},[76,32210,32211],{"class":86},"torch.optim.Adam(model.parameters(),",[76,32213,32214],{"class":5183},"lr",[76,32216,133],{"class":82},[76,32218,32219],{"class":136},"0.001",[76,32221,93],{"class":86},[76,32223,32224],{"class":78,"line":8024},[76,32225,2365],{"emptyLinePlaceholder":2364},[76,32227,32228],{"class":78,"line":9683},[76,32229,32230],{"class":146},"    # 定义损失函数使用交叉熵损失函数\n",[76,32232,32233,32236,32238],{"class":78,"line":9708},[76,32234,32235],{"class":86},"    criterion",[76,32237,133],{"class":82},[76,32239,32240],{"class":86},"nn.CrossEntropyLoss()\n",[76,32242,32243],{"class":78,"line":9731},[76,32244,2365],{"emptyLinePlaceholder":2364},[76,32246,32247],{"class":78,"line":9755},[76,32248,32249],{"class":146},"    # 将模型放到GPU中进行训练\n",[76,32251,32252,32254,32256],{"class":78,"line":9760},[76,32253,31258],{"class":86},[76,32255,133],{"class":82},[76,32257,32258],{"class":86},"model.to(device)\n",[76,32260,32261],{"class":78,"line":9765},[76,32262,32263],{"class":146},"    # 复制当前模型的参数\n",[76,32265,32266],{"class":78,"line":9770},[76,32267,32268],{"class":146},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[76,32270,32271],{"class":78,"line":9779},[76,32272,32273],{"class":146},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[76,32275,32276,32279,32281],{"class":78,"line":9784},[76,32277,32278],{"class":86},"    best_model_wts",[76,32280,133],{"class":82},[76,32282,32283],{"class":86},"copy.deepcopy(model.state_dict())\n",[76,32285,32286],{"class":78,"line":9790},[76,32287,2365],{"emptyLinePlaceholder":2364},[76,32289,32290],{"class":78,"line":9811},[76,32291,2365],{"emptyLinePlaceholder":2364},[76,32293,32294],{"class":78,"line":9817},[76,32295,32296],{"class":146},"    # 初始化参数\n",[76,32298,32299],{"class":78,"line":9831},[76,32300,32301],{"class":146},"    # 最高准确度\n",[76,32303,32304,32307,32309],{"class":78,"line":9837},[76,32305,32306],{"class":86},"    best_acc",[76,32308,133],{"class":82},[76,32310,32311],{"class":136},"0.0\n",[76,32313,32314],{"class":78,"line":9864},[76,32315,32316],{"class":146},"    # 训练集损失列表\n",[76,32318,32319,32322,32324],{"class":78,"line":9873},[76,32320,32321],{"class":86},"    train_loss_all",[76,32323,133],{"class":82},[76,32325,32326],{"class":86},"[]\n",[76,32328,32329],{"class":78,"line":9879},[76,32330,32331],{"class":146},"    # 验证集函数列表\n",[76,32333,32334,32337,32339],{"class":78,"line":9887},[76,32335,32336],{"class":86},"    val_loss_all",[76,32338,133],{"class":82},[76,32340,32326],{"class":86},[76,32342,32343],{"class":78,"line":9892},[76,32344,32345],{"class":146},"    # 训练集准确度列表\n",[76,32347,32348,32351,32353],{"class":78,"line":16571},[76,32349,32350],{"class":86},"    train_acc_all",[76,32352,133],{"class":82},[76,32354,32326],{"class":86},[76,32356,32357],{"class":78,"line":16577},[76,32358,32359],{"class":146},"    # 验证集准确度列表\n",[76,32361,32362,32365,32367],{"class":78,"line":16600},[76,32363,32364],{"class":86},"    val_acc_all",[76,32366,133],{"class":82},[76,32368,32326],{"class":86},[76,32370,32371],{"class":78,"line":16606},[76,32372,2365],{"emptyLinePlaceholder":2364},[76,32374,32375],{"class":78,"line":16629},[76,32376,32377],{"class":146},"    # 保存当前时间--->方便看每轮训练的时间\n",[76,32379,32380,32383,32385],{"class":78,"line":16643},[76,32381,32382],{"class":86},"    since",[76,32384,133],{"class":82},[76,32386,32387],{"class":86},"time.time()\n",[76,32389,32390],{"class":78,"line":16663},[76,32391,2365],{"emptyLinePlaceholder":2364},[76,32393,32394],{"class":78,"line":16669},[76,32395,2365],{"emptyLinePlaceholder":2364},[76,32397,32398],{"class":78,"line":16680},[76,32399,32400],{"class":146},"    # 准备工作完成--->开始训练模型\n",[76,32402,32403,32405,32408,32410,32413],{"class":78,"line":16703},[76,32404,3166],{"class":82},[76,32406,32407],{"class":86}," epoch ",[76,32409,26012],{"class":82},[76,32411,32412],{"class":136}," range",[76,32414,32415],{"class":86},"(num_epochs):\n",[76,32417,32418,32421,32423,32426,32429,32431,32433,32435,32438,32440,32442],{"class":78,"line":16725},[76,32419,32420],{"class":136},"        print",[76,32422,87],{"class":86},[76,32424,32425],{"class":192},"\"Epoch ",[76,32427,32428],{"class":136},"{}",[76,32430,672],{"class":192},[76,32432,32428],{"class":136},[76,32434,339],{"class":192},[76,32436,32437],{"class":86},".format(epoch,num_epochs",[76,32439,620],{"class":82},[76,32441,305],{"class":136},[76,32443,30466],{"class":86},[76,32445,32446,32448,32450,32453,32455,32457],{"class":78,"line":16730},[76,32447,32420],{"class":136},[76,32449,87],{"class":86},[76,32451,32452],{"class":192},"\"-\"",[76,32454,543],{"class":82},[76,32456,534],{"class":136},[76,32458,93],{"class":86},[76,32460,32461],{"class":78,"line":16736},[76,32462,2365],{"emptyLinePlaceholder":2364},[76,32464,32465],{"class":78,"line":16750},[76,32466,32467],{"class":146},"        # 初始化参数\n",[76,32469,32470],{"class":78,"line":16763},[76,32471,32472],{"class":146},"        # 训练集损失函数\n",[76,32474,32475,32478,32480],{"class":78,"line":16768},[76,32476,32477],{"class":86},"        train_loss",[76,32479,133],{"class":82},[76,32481,32311],{"class":136},[76,32483,32484],{"class":78,"line":16782},[76,32485,32486],{"class":146},"        # 训练集准确度\n",[76,32488,32489,32492,32494],{"class":78,"line":16787},[76,32490,32491],{"class":86},"        train_corrects",[76,32493,133],{"class":82},[76,32495,3050],{"class":136},[76,32497,32498],{"class":78,"line":16793},[76,32499,32500],{"class":146},"        # 验证集损失函数\n",[76,32502,32503,32506,32508],{"class":78,"line":16798},[76,32504,32505],{"class":86},"        val_loss",[76,32507,133],{"class":82},[76,32509,32311],{"class":136},[76,32511,32512],{"class":78,"line":16812},[76,32513,32514],{"class":146},"        # 验证集准确度\n",[76,32516,32517,32520,32522],{"class":78,"line":16817},[76,32518,32519],{"class":86},"        val_corrects",[76,32521,133],{"class":82},[76,32523,3050],{"class":136},[76,32525,32526],{"class":78,"line":16822},[76,32527,32528],{"class":146},"        # 训练集样本数量\n",[76,32530,32531,32534,32536],{"class":78,"line":16836},[76,32532,32533],{"class":86},"        train_num",[76,32535,133],{"class":82},[76,32537,3050],{"class":136},[76,32539,32540],{"class":78,"line":16848},[76,32541,32542],{"class":146},"        # 验证集样本数量\n",[76,32544,32545,32548,32550],{"class":78,"line":16853},[76,32546,32547],{"class":86},"        val_num",[76,32549,133],{"class":82},[76,32551,3050],{"class":136},[76,32553,32554],{"class":78,"line":16866},[76,32555,32556],{"class":146},"        # 将数据放到设备,并开始训练\n",[76,32558,32559,32561,32563,32565,32567],{"class":78,"line":16871},[76,32560,3368],{"class":82},[76,32562,31570],{"class":86},[76,32564,26012],{"class":82},[76,32566,31575],{"class":136},[76,32568,32569],{"class":86},"(train_dataloader):\n",[76,32571,32572],{"class":78,"line":16876},[76,32573,32574],{"class":146},"            # 将特征放入到训练设备\n",[76,32576,32577,32580,32582],{"class":78,"line":16881},[76,32578,32579],{"class":86},"            b_x",[76,32581,133],{"class":82},[76,32583,32584],{"class":86},"b_x.to(device)\n",[76,32586,32587],{"class":78,"line":16894},[76,32588,32589],{"class":146},"            # 将标签放入到训练设备当中\n",[76,32591,32592,32595,32597],{"class":78,"line":16899},[76,32593,32594],{"class":86},"            b_y",[76,32596,133],{"class":82},[76,32598,32599],{"class":86},"b_y.to(device)\n",[76,32601,32603],{"class":78,"line":32602},98,[76,32604,32605],{"class":146},"            # 设置模型为训练模式\n",[76,32607,32609],{"class":78,"line":32608},99,[76,32610,32611],{"class":86},"            model.train()\n",[76,32613,32615],{"class":78,"line":32614},100,[76,32616,32617],{"class":146},"            # 将数据放到模型当中,开始前向传播\n",[76,32619,32621],{"class":78,"line":32620},101,[76,32622,32623],{"class":146},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[76,32625,32627,32630,32632],{"class":78,"line":32626},102,[76,32628,32629],{"class":86},"            output",[76,32631,133],{"class":82},[76,32633,32634],{"class":86},"model(b_x)\n",[76,32636,32638],{"class":78,"line":32637},103,[76,32639,32640],{"class":146},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[76,32642,32644,32647,32649,32652,32655,32657,32659],{"class":78,"line":32643},104,[76,32645,32646],{"class":86},"            pre_lab",[76,32648,133],{"class":82},[76,32650,32651],{"class":86},"torch.argmax(output,",[76,32653,32654],{"class":5183},"dim",[76,32656,133],{"class":82},[76,32658,305],{"class":136},[76,32660,93],{"class":86},[76,32662,32664],{"class":78,"line":32663},105,[76,32665,32666],{"class":146},"            # 计算每一个batch的损失函数\n",[76,32668,32670,32673,32675],{"class":78,"line":32669},106,[76,32671,32672],{"class":86},"            loss",[76,32674,133],{"class":82},[76,32676,32677],{"class":86},"criterion(output,b_y)\n",[76,32679,32681],{"class":78,"line":32680},107,[76,32682,32683],{"class":146},"            # 将梯度初始化为0\n",[76,32685,32687],{"class":78,"line":32686},108,[76,32688,32689],{"class":86},"            optimizer.zero_grad()\n",[76,32691,32693],{"class":78,"line":32692},109,[76,32694,32695],{"class":146},"            # 梯度置为0后再进行反向传播\n",[76,32697,32699],{"class":78,"line":32698},110,[76,32700,32701],{"class":86},"            loss.backward()\n",[76,32703,32705],{"class":78,"line":32704},111,[76,32706,32707],{"class":146},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[76,32709,32711],{"class":78,"line":32710},112,[76,32712,32713],{"class":86},"            optimizer.step()\n",[76,32715,32717],{"class":78,"line":32716},113,[76,32718,32719],{"class":146},"            # loss.item()指的是batch的平均损失\n",[76,32721,32723,32726,32728,32731,32733,32736,32738],{"class":78,"line":32722},114,[76,32724,32725],{"class":86},"            train_loss",[76,32727,9444],{"class":82},[76,32729,32730],{"class":86},"loss.item()",[76,32732,543],{"class":82},[76,32734,32735],{"class":86},"b_x.size(",[76,32737,279],{"class":136},[76,32739,93],{"class":86},[76,32741,32743],{"class":78,"line":32742},115,[76,32744,32745],{"class":146},"            # 计算每个批次中正确预测的数量\n",[76,32747,32749,32752,32754,32757,32759],{"class":78,"line":32748},116,[76,32750,32751],{"class":86},"            train_corrects",[76,32753,9444],{"class":82},[76,32755,32756],{"class":86},"torch.sum(pre_lab",[76,32758,2914],{"class":82},[76,32760,32761],{"class":86},"b_y.data)\n",[76,32763,32765],{"class":78,"line":32764},117,[76,32766,32767],{"class":146},"            # 计算目前为止一共处理了多少样本\n",[76,32769,32771,32774,32776,32778,32780],{"class":78,"line":32770},118,[76,32772,32773],{"class":86},"            train_num",[76,32775,9444],{"class":82},[76,32777,32735],{"class":86},[76,32779,279],{"class":136},[76,32781,93],{"class":86},[76,32783,32785],{"class":78,"line":32784},119,[76,32786,32787],{"class":146},"        # 验证数据\n",[76,32789,32791,32793,32796,32798,32800],{"class":78,"line":32790},120,[76,32792,3368],{"class":82},[76,32794,32795],{"class":86}," step ,(b_x,b_y) ",[76,32797,26012],{"class":82},[76,32799,31575],{"class":136},[76,32801,32802],{"class":86},"(val_dataloader):\n",[76,32804,32806],{"class":78,"line":32805},121,[76,32807,32808],{"class":146},"            # 将特征放到验证设备当中\n",[76,32810,32812,32814,32816],{"class":78,"line":32811},122,[76,32813,32579],{"class":86},[76,32815,133],{"class":82},[76,32817,32584],{"class":86},[76,32819,32821],{"class":78,"line":32820},123,[76,32822,32823],{"class":146},"            # 将标签放到放到训练设备当中\n",[76,32825,32827,32829,32831],{"class":78,"line":32826},124,[76,32828,32594],{"class":86},[76,32830,133],{"class":82},[76,32832,32599],{"class":86},[76,32834,32836],{"class":78,"line":32835},125,[76,32837,32838],{"class":146},"            # 开启验证模式，设置模型为评估模式\n",[76,32840,32842],{"class":78,"line":32841},126,[76,32843,32844],{"class":86},"            model.eval()\n",[76,32846,32848,32851],{"class":78,"line":32847},127,[76,32849,32850],{"class":82},"            with",[76,32852,32853],{"class":86}," torch.no_grad():\n",[76,32855,32857],{"class":78,"line":32856},128,[76,32858,32859],{"class":146},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[76,32861,32863,32866,32868],{"class":78,"line":32862},129,[76,32864,32865],{"class":86},"                output ",[76,32867,133],{"class":82},[76,32869,32870],{"class":86}," model(b_x)\n",[76,32872,32874],{"class":78,"line":32873},130,[76,32875,32876],{"class":146},"                # 查找每一行中最大值对应的下标\n",[76,32878,32880,32883,32885,32888,32890,32892,32894],{"class":78,"line":32879},131,[76,32881,32882],{"class":86},"                pre_lab ",[76,32884,133],{"class":82},[76,32886,32887],{"class":86}," torch.argmax(output, ",[76,32889,32654],{"class":5183},[76,32891,133],{"class":82},[76,32893,305],{"class":136},[76,32895,93],{"class":86},[76,32897,32899],{"class":78,"line":32898},132,[76,32900,32901],{"class":146},"                # 计算验证集上的当前 batch 损失\n",[76,32903,32905,32908,32910],{"class":78,"line":32904},133,[76,32906,32907],{"class":86},"                val_batch_loss ",[76,32909,133],{"class":82},[76,32911,32912],{"class":86}," criterion(output, b_y)\n",[76,32914,32916],{"class":78,"line":32915},134,[76,32917,32918],{"class":146},"                # 对损失函数进行累加（按样本数加权）\n",[76,32920,32922,32925,32927,32930,32932,32935,32937],{"class":78,"line":32921},135,[76,32923,32924],{"class":86},"                val_loss ",[76,32926,9444],{"class":82},[76,32928,32929],{"class":86}," val_batch_loss.item() ",[76,32931,543],{"class":82},[76,32933,32934],{"class":86}," b_x.size(",[76,32936,279],{"class":136},[76,32938,93],{"class":86},[76,32940,32942,32945,32947,32950,32952],{"class":78,"line":32941},136,[76,32943,32944],{"class":86},"                val_corrects ",[76,32946,9444],{"class":82},[76,32948,32949],{"class":86}," torch.sum(pre_lab ",[76,32951,2914],{"class":82},[76,32953,32954],{"class":86}," b_y.data)\n",[76,32956,32958],{"class":78,"line":32957},137,[76,32959,32960],{"class":146},"                # 当前用于验证的样本数量\n",[76,32962,32964,32967,32969,32971,32973],{"class":78,"line":32963},138,[76,32965,32966],{"class":86},"            val_num ",[76,32968,9444],{"class":82},[76,32970,32934],{"class":86},[76,32972,279],{"class":136},[76,32974,93],{"class":86},[76,32976,32978],{"class":78,"line":32977},139,[76,32979,32980],{"class":146},"        # 计算并保存每一次迭代的loss值和准确率\n",[76,32982,32984],{"class":78,"line":32983},140,[76,32985,32986],{"class":146},"        # 计算并保存训练集的loss值\n",[76,32988,32990,32993,32995],{"class":78,"line":32989},141,[76,32991,32992],{"class":86},"        train_loss_all.append(train_loss",[76,32994,672],{"class":82},[76,32996,32997],{"class":86},"train_num)\n",[76,32999,33001],{"class":78,"line":33000},142,[76,33002,33003],{"class":146},"        # 取双精度\n",[76,33005,33007],{"class":78,"line":33006},143,[76,33008,33009],{"class":146},"        # 计算并保存训练集的准确率\n",[76,33011,33013,33016,33018],{"class":78,"line":33012},144,[76,33014,33015],{"class":86},"        train_acc_all.append(train_corrects.double().item()",[76,33017,672],{"class":82},[76,33019,32997],{"class":86},[76,33021,33023],{"class":78,"line":33022},145,[76,33024,33025],{"class":146},"        # 计算并保存验证集的loss值\n",[76,33027,33029,33032,33034],{"class":78,"line":33028},146,[76,33030,33031],{"class":86},"        val_loss_all.append(val_loss",[76,33033,672],{"class":82},[76,33035,33036],{"class":86},"val_num)\n",[76,33038,33040],{"class":78,"line":33039},147,[76,33041,33042],{"class":146},"        # 计算并保存验证集的准确率\n",[76,33044,33046,33049,33051],{"class":78,"line":33045},148,[76,33047,33048],{"class":86},"        val_acc_all.append(val_corrects.double().item()",[76,33050,672],{"class":82},[76,33052,33036],{"class":86},[76,33054,33056],{"class":78,"line":33055},149,[76,33057,2365],{"emptyLinePlaceholder":2364},[76,33059,33061],{"class":78,"line":33060},150,[76,33062,33063],{"class":146},"        # 打印训练一轮的loss值和准确率\n",[76,33065,33067,33069,33071,33073,33075,33078,33080,33083,33085,33088,33090,33092,33094,33096,33099,33101,33103,33106,33108,33110],{"class":78,"line":33066},151,[76,33068,32420],{"class":136},[76,33070,87],{"class":86},[76,33072,3557],{"class":192},[76,33074,32428],{"class":136},[76,33076,33077],{"class":192},"train loss:",[76,33079,984],{"class":136},[76,33081,33082],{"class":82},":.4f",[76,33084,1034],{"class":136},[76,33086,33087],{"class":192}," train acc:",[76,33089,984],{"class":136},[76,33091,33082],{"class":82},[76,33093,1034],{"class":136},[76,33095,3557],{"class":192},[76,33097,33098],{"class":86},".format(epoch,train_loss_all[",[76,33100,620],{"class":82},[76,33102,305],{"class":136},[76,33104,33105],{"class":86},"],train_acc_all[",[76,33107,620],{"class":82},[76,33109,305],{"class":136},[76,33111,33112],{"class":86},"]))\n",[76,33114,33116,33118,33120,33122,33124,33127,33129,33131,33133,33136,33138,33140,33142,33144,33147,33149,33151,33154,33156,33158],{"class":78,"line":33115},152,[76,33117,32420],{"class":136},[76,33119,87],{"class":86},[76,33121,3557],{"class":192},[76,33123,32428],{"class":136},[76,33125,33126],{"class":192},"val loss:",[76,33128,984],{"class":136},[76,33130,33082],{"class":82},[76,33132,1034],{"class":136},[76,33134,33135],{"class":192}," val acc:",[76,33137,984],{"class":136},[76,33139,33082],{"class":82},[76,33141,1034],{"class":136},[76,33143,3557],{"class":192},[76,33145,33146],{"class":86},".format(epoch,val_loss_all[",[76,33148,620],{"class":82},[76,33150,305],{"class":136},[76,33152,33153],{"class":86},"],val_acc_all[",[76,33155,620],{"class":82},[76,33157,305],{"class":136},[76,33159,33112],{"class":86},[76,33161,33163],{"class":78,"line":33162},153,[76,33164,2365],{"emptyLinePlaceholder":2364},[76,33166,33168],{"class":78,"line":33167},154,[76,33169,33170],{"class":146},"        # 判断准确度--->保存最优模型\n",[76,33172,33174,33176,33179,33181,33183,33185,33187],{"class":78,"line":33173},155,[76,33175,2462],{"class":82},[76,33177,33178],{"class":86}," val_acc_all[",[76,33180,620],{"class":82},[76,33182,305],{"class":136},[76,33184,1028],{"class":86},[76,33186,1048],{"class":82},[76,33188,33189],{"class":86},"best_acc:\n",[76,33191,33193],{"class":78,"line":33192},156,[76,33194,33195],{"class":146},"            # 保存当前模型准确度\n",[76,33197,33199,33202,33204,33206,33209,33211,33213],{"class":78,"line":33198},157,[76,33200,33201],{"class":86},"            best_acc:",[76,33203,127],{"class":136},[76,33205,133],{"class":82},[76,33207,33208],{"class":86},"val_acc_all[",[76,33210,620],{"class":82},[76,33212,305],{"class":136},[76,33214,33215],{"class":86},"]\n",[76,33217,33219],{"class":78,"line":33218},158,[76,33220,33221],{"class":146},"            # 保存当前的准确度\n",[76,33223,33225],{"class":78,"line":33224},159,[76,33226,33227],{"class":146},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[76,33229,33231,33234,33236],{"class":78,"line":33230},160,[76,33232,33233],{"class":86},"            best_model_wts",[76,33235,133],{"class":82},[76,33237,32283],{"class":86},[76,33239,33241],{"class":78,"line":33240},161,[76,33242,2365],{"emptyLinePlaceholder":2364},[76,33244,33246],{"class":78,"line":33245},162,[76,33247,33248],{"class":146},"        # 计算耗时\n",[76,33250,33252,33255,33257,33260,33262],{"class":78,"line":33251},163,[76,33253,33254],{"class":86},"        time_use",[76,33256,133],{"class":82},[76,33258,33259],{"class":86},"time.time()",[76,33261,620],{"class":82},[76,33263,33264],{"class":86},"since\n",[76,33266,33268,33270,33272,33275,33277,33280,33282,33284,33286,33288,33290,33293,33296,33299,33301,33304,33306,33308],{"class":78,"line":33267},164,[76,33269,32420],{"class":136},[76,33271,87],{"class":86},[76,33273,33274],{"class":192},"'训练和验证耗费的时间",[76,33276,984],{"class":136},[76,33278,33279],{"class":82},":.0f",[76,33281,1034],{"class":136},[76,33283,632],{"class":192},[76,33285,984],{"class":136},[76,33287,33279],{"class":82},[76,33289,1034],{"class":136},[76,33291,33292],{"class":192},"s'",[76,33294,33295],{"class":86},".format(time_use",[76,33297,33298],{"class":82},"\u002F\u002F",[76,33300,995],{"class":136},[76,33302,33303],{"class":86},",time_use",[76,33305,416],{"class":82},[76,33307,995],{"class":136},[76,33309,30466],{"class":86},[76,33311,33313],{"class":78,"line":33312},165,[76,33314,33315],{"class":146},"    # 选择最优参数\n",[76,33317,33319],{"class":78,"line":33318},166,[76,33320,33321],{"class":146},"    # 加载最高准确率下的模型参数\n",[76,33323,33325],{"class":78,"line":33324},167,[76,33326,33327],{"class":146},"    # model.load_state_dict(best_model_wts)\n",[76,33329,33331,33334,33337],{"class":78,"line":33330},168,[76,33332,33333],{"class":86},"    torch.save(model.state_dict(best_model_wts), ",[76,33335,33336],{"class":192},"'.\u002Fbest_model.pth'",[76,33338,93],{"class":86},[76,33340,33342],{"class":78,"line":33341},169,[76,33343,33344],{"class":146},"    # 或者写成\n",[76,33346,33348],{"class":78,"line":33347},170,[76,33349,33350],{"class":146},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[76,33352,33354],{"class":78,"line":33353},171,[76,33355,33356],{"class":146},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[76,33358,33360,33363,33365,33368,33371,33373],{"class":78,"line":33359},172,[76,33361,33362],{"class":86},"    train_process",[76,33364,133],{"class":82},[76,33366,33367],{"class":86},"pd.DataFrame(",[76,33369,33370],{"class":5183},"data",[76,33372,133],{"class":82},[76,33374,1510],{"class":86},[76,33376,33378,33381,33383,33386],{"class":78,"line":33377},173,[76,33379,33380],{"class":192},"        \"epoch\"",[76,33382,947],{"class":86},[76,33384,33385],{"class":136},"range",[76,33387,33388],{"class":86},"(num_epochs),\n",[76,33390,33392,33395],{"class":78,"line":33391},174,[76,33393,33394],{"class":192},"        \"train_loss_all\"",[76,33396,33397],{"class":86},":train_loss_all,\n",[76,33399,33401,33404],{"class":78,"line":33400},175,[76,33402,33403],{"class":192},"        \"val_loss_all\"",[76,33405,33406],{"class":86},":val_loss_all,\n",[76,33408,33410,33413],{"class":78,"line":33409},176,[76,33411,33412],{"class":192},"        \"train_acc_all\"",[76,33414,33415],{"class":86},":train_acc_all,\n",[76,33417,33419,33422],{"class":78,"line":33418},177,[76,33420,33421],{"class":192},"        \"val_acc_all\"",[76,33423,33424],{"class":86},":val_acc_all\n",[76,33426,33428],{"class":78,"line":33427},178,[76,33429,33430],{"class":86},"    })\n",[76,33432,33434],{"class":78,"line":33433},179,[76,33435,33436],{"class":146},"    # 返回训练保存的过程\n",[76,33438,33440,33442],{"class":78,"line":33439},180,[76,33441,4055],{"class":82},[76,33443,33444],{"class":86}," train_process\n",[76,33446,33448],{"class":78,"line":33447},181,[76,33449,2365],{"emptyLinePlaceholder":2364},[76,33451,33453],{"class":78,"line":33452},182,[76,33454,33455],{"class":146},"# 将loss值和精度按照图片的形式展示出来\n",[76,33457,33459,33461,33464],{"class":78,"line":33458},183,[76,33460,31916],{"class":82},[76,33462,33463],{"class":1927}," matplot_acc_loss",[76,33465,33466],{"class":86},"(train_process):\n",[76,33468,33470],{"class":78,"line":33469},184,[76,33471,33472],{"class":146},"    # 设置图的大小\n",[76,33474,33476,33479,33481,33483,33485,33487,33489,33491],{"class":78,"line":33475},185,[76,33477,33478],{"class":86},"    plt.figure(",[76,33480,31662],{"class":5183},[76,33482,133],{"class":82},[76,33484,87],{"class":86},[76,33486,586],{"class":136},[76,33488,466],{"class":86},[76,33490,381],{"class":136},[76,33492,30466],{"class":86},[76,33494,33496],{"class":78,"line":33495},186,[76,33497,33498],{"class":146},"    # 设置图中有几张图\n",[76,33500,33502],{"class":78,"line":33501},187,[76,33503,33504],{"class":146},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[76,33506,33508],{"class":78,"line":33507},188,[76,33509,33510],{"class":146},"    # ①loss图\n",[76,33512,33514,33516,33518,33520,33522,33524,33526],{"class":78,"line":33513},189,[76,33515,31696],{"class":86},[76,33517,305],{"class":136},[76,33519,466],{"class":86},[76,33521,165],{"class":136},[76,33523,466],{"class":86},[76,33525,305],{"class":136},[76,33527,93],{"class":86},[76,33529,33531],{"class":78,"line":33530},190,[76,33532,33533],{"class":146},"    # 补充:\n",[76,33535,33537],{"class":78,"line":33536},191,[76,33538,33539],{"class":146},"    # plt.subplot(nrows, ncols, index)\n",[76,33541,33543],{"class":78,"line":33542},192,[76,33544,33545],{"class":146},"    # nrows：行数\n",[76,33547,33549],{"class":78,"line":33548},193,[76,33550,33551],{"class":146},"    # ncols：列数\n",[76,33553,33555],{"class":78,"line":33554},194,[76,33556,33557],{"class":146},"    # index：目前选中第几个子图（从1开始）\n",[76,33559,33561,33564,33567,33570,33573,33575,33578,33580,33583],{"class":78,"line":33560},195,[76,33562,33563],{"class":86},"    plt.plot(train_process[",[76,33565,33566],{"class":192},"\"epoch\"",[76,33568,33569],{"class":86},"],train_process.train_loss_all,",[76,33571,33572],{"class":192},"'ro-'",[76,33574,466],{"class":86},[76,33576,33577],{"class":5183},"label",[76,33579,133],{"class":82},[76,33581,33582],{"class":192},"'train loss'",[76,33584,93],{"class":86},[76,33586,33588,33590,33592,33595,33598,33600,33602,33604,33607],{"class":78,"line":33587},196,[76,33589,33563],{"class":86},[76,33591,33566],{"class":192},[76,33593,33594],{"class":86},"],train_process.val_loss_all,",[76,33596,33597],{"class":192},"'bs--'",[76,33599,466],{"class":86},[76,33601,33577],{"class":5183},[76,33603,133],{"class":82},[76,33605,33606],{"class":192},"'val loss'",[76,33608,93],{"class":86},[76,33610,33612],{"class":78,"line":33611},197,[76,33613,33614],{"class":146},"    # 添加一个图例\n",[76,33616,33618],{"class":78,"line":33617},198,[76,33619,33620],{"class":86},"    plt.legend()\n",[76,33622,33624],{"class":78,"line":33623},199,[76,33625,33626],{"class":146},"    # 给轴添加标签\n",[76,33628,33630,33633,33636],{"class":78,"line":33629},200,[76,33631,33632],{"class":86},"    plt.xlabel(",[76,33634,33635],{"class":192},"'epoch'",[76,33637,93],{"class":86},[76,33639,33641,33644,33647],{"class":78,"line":33640},201,[76,33642,33643],{"class":86},"    plt.ylabel(",[76,33645,33646],{"class":192},"'loss'",[76,33648,93],{"class":86},[76,33650,33652],{"class":78,"line":33651},202,[76,33653,33654],{"class":146},"    # ②准确度图\n",[76,33656,33658,33660,33662,33664,33666,33668,33670],{"class":78,"line":33657},203,[76,33659,31696],{"class":86},[76,33661,305],{"class":136},[76,33663,466],{"class":86},[76,33665,165],{"class":136},[76,33667,466],{"class":86},[76,33669,165],{"class":136},[76,33671,93],{"class":86},[76,33673,33675,33677,33679,33682,33684,33686,33688,33690,33693],{"class":78,"line":33674},204,[76,33676,33563],{"class":86},[76,33678,33566],{"class":192},[76,33680,33681],{"class":86},"],train_process.train_acc_all,",[76,33683,33572],{"class":192},[76,33685,466],{"class":86},[76,33687,33577],{"class":5183},[76,33689,133],{"class":82},[76,33691,33692],{"class":192},"'train acc'",[76,33694,93],{"class":86},[76,33696,33698,33700,33702,33705,33707,33709,33711,33713,33716],{"class":78,"line":33697},205,[76,33699,33563],{"class":86},[76,33701,33566],{"class":192},[76,33703,33704],{"class":86},"],train_process.val_acc_all,",[76,33706,33597],{"class":192},[76,33708,466],{"class":86},[76,33710,33577],{"class":5183},[76,33712,133],{"class":82},[76,33714,33715],{"class":192},"'val acc'",[76,33717,93],{"class":86},[76,33719,33721],{"class":78,"line":33720},206,[76,33722,33723],{"class":146},"    # 添加图例\n",[76,33725,33727],{"class":78,"line":33726},207,[76,33728,33620],{"class":86},[76,33730,33732,33734,33736],{"class":78,"line":33731},208,[76,33733,33632],{"class":86},[76,33735,33566],{"class":192},[76,33737,93],{"class":86},[76,33739,33741,33743,33746],{"class":78,"line":33740},209,[76,33742,33643],{"class":86},[76,33744,33745],{"class":192},"\"acc\"",[76,33747,93],{"class":86},[76,33749,33751],{"class":78,"line":33750},210,[76,33752,33753],{"class":86},"    plt.show()\n",[76,33755,33757],{"class":78,"line":33756},211,[76,33758,2365],{"emptyLinePlaceholder":2364},[76,33760,33762],{"class":78,"line":33761},212,[76,33763,33764],{"class":146},"# 正式开始训练:\n",[76,33766,33768,33770,33772,33774,33776],{"class":78,"line":33767},213,[76,33769,1495],{"class":82},[76,33771,31189],{"class":136},[76,33773,2914],{"class":82},[76,33775,31194],{"class":192},[76,33777,3704],{"class":86},[76,33779,33781],{"class":78,"line":33780},214,[76,33782,33783],{"class":146},"    # 将模型实例化\n",[76,33785,33787,33790,33792],{"class":78,"line":33786},215,[76,33788,33789],{"class":86},"    LeNet",[76,33791,133],{"class":82},[76,33793,33794],{"class":86},"LeNet()\n",[76,33796,33798,33801,33803],{"class":78,"line":33797},216,[76,33799,33800],{"class":86},"    train_dataloader,val_dataloader",[76,33802,133],{"class":82},[76,33804,33805],{"class":86},"train_val_data_process()\n",[76,33807,33809,33811,33813,33816,33819,33821,33823],{"class":78,"line":33808},217,[76,33810,33362],{"class":86},[76,33812,133],{"class":82},[76,33814,33815],{"class":86},"train_model_process(LeNet,train_dataloader,val_dataloader,",[76,33817,33818],{"class":5183},"num_epochs",[76,33820,133],{"class":82},[76,33822,788],{"class":136},[76,33824,93],{"class":86},[76,33826,33828],{"class":78,"line":33827},218,[76,33829,33830],{"class":86},"    matplot_acc_loss(train_process)\n",[21,33832,33833],{},"画图的补充点学习：",[21,33835,33836],{},[1426,33837],{"alt":71,"src":33838},"\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",[29,33840,33841],{"start":1143},[32,33842,33843],{},"测试",[66,33845,33847],{"className":30347,"code":33846,"language":30349,"meta":71,"style":71},"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",[73,33848,33849,33855,33865,33877,33887,33892,33902,33912,33916,33921,33930,33947,33959,33976,33987,34003,34008,34019,34030,34041,34048,34052,34057,34067,34072,34089,34097,34101,34106,34115,34124,34128,34133,34138,34143,34150,34155,34167,34177,34187,34192,34196,34201,34210,34215,34231,34236,34241,34246,34260,34265,34279,34283,34288,34303,34308,34320,34324,34329,34341,34346,34354,34359,34364,34374,34379,34388,34393,34398,34402,34407,34412,34428,34436,34441,34446,34505,34511,34516,34527,34535,34543,34547,34552,34556,34561,34569,34574,34590,34595,34605,34615],{"__ignoreMap":71},[76,33850,33851,33853],{"class":78,"line":79},[76,33852,30361],{"class":82},[76,33854,30364],{"class":86},[76,33856,33857,33859,33861,33863],{"class":78,"line":96},[76,33858,30361],{"class":82},[76,33860,31384],{"class":86},[76,33862,31352],{"class":82},[76,33864,31389],{"class":86},[76,33866,33867,33869,33872,33874],{"class":78,"line":1143},[76,33868,30706],{"class":82},[76,33870,33871],{"class":86}," jupyter_client.consoleapp ",[76,33873,30361],{"class":82},[76,33875,33876],{"class":86}," classes\n",[76,33878,33879,33881,33883,33885],{"class":78,"line":1158},[76,33880,30706],{"class":82},[76,33882,31367],{"class":86},[76,33884,30361],{"class":82},[76,33886,31372],{"class":86},[76,33888,33889],{"class":78,"line":1164},[76,33890,33891],{"class":146},"# 导入数据集\n",[76,33893,33894,33896,33898,33900],{"class":78,"line":1178},[76,33895,30706],{"class":82},[76,33897,31337],{"class":86},[76,33899,30361],{"class":82},[76,33901,31342],{"class":86},[76,33903,33904,33906,33908,33910],{"class":78,"line":1184},[76,33905,30706],{"class":82},[76,33907,31883],{"class":86},[76,33909,30361],{"class":82},[76,33911,31888],{"class":86},[76,33913,33914],{"class":78,"line":1275},[76,33915,2365],{"emptyLinePlaceholder":2364},[76,33917,33918],{"class":78,"line":1281},[76,33919,33920],{"class":146},"# 测试数据处理\n",[76,33922,33923,33925,33928],{"class":78,"line":1293},[76,33924,31916],{"class":82},[76,33926,33927],{"class":1927}," test_data_process",[76,33929,31922],{"class":86},[76,33931,33932,33935,33937,33939,33941,33943,33945],{"class":78,"line":1576},[76,33933,33934],{"class":86},"    test_data",[76,33936,133],{"class":82},[76,33938,31424],{"class":86},[76,33940,31427],{"class":5183},[76,33942,133],{"class":82},[76,33944,31432],{"class":192},[76,33946,31435],{"class":86},[76,33948,33949,33952,33954,33957],{"class":78,"line":1581},[76,33950,33951],{"class":5183},"                           train",[76,33953,133],{"class":82},[76,33955,33956],{"class":136},"False",[76,33958,31435],{"class":86},[76,33960,33961,33964,33966,33968,33970,33972,33974],{"class":78,"line":1587},[76,33962,33963],{"class":5183},"                           transform",[76,33965,133],{"class":82},[76,33967,31462],{"class":86},[76,33969,31465],{"class":5183},[76,33971,133],{"class":82},[76,33973,989],{"class":136},[76,33975,31473],{"class":86},[76,33977,33978,33981,33983,33985],{"class":78,"line":1592},[76,33979,33980],{"class":5183},"                           download",[76,33982,133],{"class":82},[76,33984,31445],{"class":136},[76,33986,93],{"class":86},[76,33988,33989,33992,33994,33996,33998,34000],{"class":78,"line":1606},[76,33990,33991],{"class":86},"    test_dataloader",[76,33993,133],{"class":82},[76,33995,31503],{"class":86},[76,33997,31506],{"class":5183},[76,33999,133],{"class":82},[76,34001,34002],{"class":86},"test_data,\n",[76,34004,34005],{"class":78,"line":1611},[76,34006,34007],{"class":146},"                                    # 这里是一张一张进行测试\n",[76,34009,34010,34013,34015,34017],{"class":78,"line":1617},[76,34011,34012],{"class":5183},"                                    batch_size",[76,34014,133],{"class":82},[76,34016,305],{"class":136},[76,34018,31435],{"class":86},[76,34020,34021,34024,34026,34028],{"class":78,"line":1638},[76,34022,34023],{"class":5183},"                                    shuffle",[76,34025,133],{"class":82},[76,34027,31445],{"class":136},[76,34029,31435],{"class":86},[76,34031,34032,34035,34037,34039],{"class":78,"line":1643},[76,34033,34034],{"class":5183},"                                    num_workers",[76,34036,133],{"class":82},[76,34038,279],{"class":136},[76,34040,93],{"class":86},[76,34042,34043,34045],{"class":78,"line":1657},[76,34044,4055],{"class":82},[76,34046,34047],{"class":86}," test_dataloader\n",[76,34049,34050],{"class":78,"line":1662},[76,34051,2365],{"emptyLinePlaceholder":2364},[76,34053,34054],{"class":78,"line":1691},[76,34055,34056],{"class":146},"# 定义模型测试函数\n",[76,34058,34059,34061,34064],{"class":78,"line":1696},[76,34060,31916],{"class":82},[76,34062,34063],{"class":1927}," test_model_process",[76,34065,34066],{"class":86},"(model,test_dataloader):\n",[76,34068,34069],{"class":78,"line":1713},[76,34070,34071],{"class":146},"    # 将模型放到设备当中，先进行判断\n",[76,34073,34074,34076,34078,34080,34082,34084,34086],{"class":78,"line":1718},[76,34075,31206],{"class":86},[76,34077,133],{"class":82},[76,34079,31213],{"class":192},[76,34081,1668],{"class":82},[76,34083,31218],{"class":86},[76,34085,1665],{"class":82},[76,34087,34088],{"class":192}," \"cpu\"\n",[76,34090,34091,34093,34095],{"class":78,"line":1723},[76,34092,31258],{"class":86},[76,34094,133],{"class":82},[76,34096,32258],{"class":86},[76,34098,34099],{"class":78,"line":1728},[76,34100,2365],{"emptyLinePlaceholder":2364},[76,34102,34103],{"class":78,"line":1742},[76,34104,34105],{"class":146},"    # 设置初始化参数\n",[76,34107,34108,34111,34113],{"class":78,"line":1747},[76,34109,34110],{"class":86},"    test_corrects",[76,34112,133],{"class":82},[76,34114,32311],{"class":136},[76,34116,34117,34120,34122],{"class":78,"line":2542},[76,34118,34119],{"class":86},"    test_num",[76,34121,133],{"class":82},[76,34123,3050],{"class":136},[76,34125,34126],{"class":78,"line":2556},[76,34127,2365],{"emptyLinePlaceholder":2364},[76,34129,34130],{"class":78,"line":2564},[76,34131,34132],{"class":146},"    # 进行模型测试\n",[76,34134,34135],{"class":78,"line":2569},[76,34136,34137],{"class":146},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[76,34139,34140],{"class":78,"line":2575},[76,34141,34142],{"class":146},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[76,34144,34145,34148],{"class":78,"line":2581},[76,34146,34147],{"class":82},"    with",[76,34149,32853],{"class":86},[76,34151,34152],{"class":78,"line":2586},[76,34153,34154],{"class":146},"        # 从数据中进行\n",[76,34156,34157,34159,34162,34164],{"class":78,"line":7915},[76,34158,3368],{"class":82},[76,34160,34161],{"class":86}," test_data_x,test_data_y ",[76,34163,26012],{"class":82},[76,34165,34166],{"class":86}," test_dataloader:\n",[76,34168,34169,34172,34174],{"class":78,"line":7939},[76,34170,34171],{"class":86},"            test_data_x",[76,34173,133],{"class":82},[76,34175,34176],{"class":86},"test_data_x.to(device)\n",[76,34178,34179,34182,34184],{"class":78,"line":7944},[76,34180,34181],{"class":86},"            test_data_y",[76,34183,133],{"class":82},[76,34185,34186],{"class":86},"test_data_y.to(device)\n",[76,34188,34189],{"class":78,"line":7950},[76,34190,34191],{"class":146},"            # 设置为验证模式\n",[76,34193,34194],{"class":78,"line":7977},[76,34195,32844],{"class":86},[76,34197,34198],{"class":78,"line":7982},[76,34199,34200],{"class":146},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[76,34202,34203,34205,34207],{"class":78,"line":7988},[76,34204,32629],{"class":86},[76,34206,133],{"class":82},[76,34208,34209],{"class":86},"model(test_data_x)\n",[76,34211,34212],{"class":78,"line":8000},[76,34213,34214],{"class":146},"            # 查找每一行中最大值对应的下标\n",[76,34216,34217,34219,34221,34223,34225,34227,34229],{"class":78,"line":8012},[76,34218,32646],{"class":86},[76,34220,133],{"class":82},[76,34222,32651],{"class":86},[76,34224,32654],{"class":5183},[76,34226,133],{"class":82},[76,34228,305],{"class":136},[76,34230,93],{"class":86},[76,34232,34233],{"class":78,"line":8024},[76,34234,34235],{"class":146},"            # 计算正确率\n",[76,34237,34238],{"class":78,"line":9683},[76,34239,34240],{"class":146},"            # .data表示是一个不带梯度信息的tensor\n",[76,34242,34243],{"class":78,"line":9708},[76,34244,34245],{"class":146},"            # 如果预测正确，则准确度test_corrects加1\n",[76,34247,34248,34251,34253,34255,34257],{"class":78,"line":9731},[76,34249,34250],{"class":86},"            test_corrects",[76,34252,9444],{"class":82},[76,34254,32756],{"class":86},[76,34256,2914],{"class":82},[76,34258,34259],{"class":86},"test_data_y.data)\n",[76,34261,34262],{"class":78,"line":9755},[76,34263,34264],{"class":146},"            # 将所有的测试样本进行累计\n",[76,34266,34267,34270,34272,34275,34277],{"class":78,"line":9760},[76,34268,34269],{"class":86},"            test_num",[76,34271,9444],{"class":82},[76,34273,34274],{"class":86},"test_data_x.size(",[76,34276,279],{"class":136},[76,34278,93],{"class":86},[76,34280,34281],{"class":78,"line":9765},[76,34282,2365],{"emptyLinePlaceholder":2364},[76,34284,34285],{"class":78,"line":9770},[76,34286,34287],{"class":146},"        # 计算准确度\n",[76,34289,34290,34293,34295,34298,34300],{"class":78,"line":9779},[76,34291,34292],{"class":86},"        test_acc",[76,34294,133],{"class":82},[76,34296,34297],{"class":86},"test_corrects.double().item()",[76,34299,672],{"class":82},[76,34301,34302],{"class":86},"test_num\n",[76,34304,34305],{"class":78,"line":9784},[76,34306,34307],{"class":146},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[76,34309,34310,34312,34314,34317],{"class":78,"line":9790},[76,34311,32420],{"class":136},[76,34313,87],{"class":86},[76,34315,34316],{"class":192},"\"测试的准确率：\"",[76,34318,34319],{"class":86},",test_acc)\n",[76,34321,34322],{"class":78,"line":9811},[76,34323,2365],{"emptyLinePlaceholder":2364},[76,34325,34326],{"class":78,"line":9817},[76,34327,34328],{"class":146},"# 实现模型的测试功能\n",[76,34330,34331,34333,34335,34337,34339],{"class":78,"line":9831},[76,34332,1495],{"class":82},[76,34334,31189],{"class":136},[76,34336,2914],{"class":82},[76,34338,31194],{"class":192},[76,34340,3704],{"class":86},[76,34342,34343],{"class":78,"line":9837},[76,34344,34345],{"class":146},"    # 加载模型\n",[76,34347,34348,34350,34352],{"class":78,"line":9864},[76,34349,31258],{"class":86},[76,34351,133],{"class":82},[76,34353,33794],{"class":86},[76,34355,34356],{"class":78,"line":9873},[76,34357,34358],{"class":146},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[76,34360,34361],{"class":78,"line":9879},[76,34362,34363],{"class":146},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[76,34365,34366,34369,34372],{"class":78,"line":9887},[76,34367,34368],{"class":86},"    model.load_state_dict(torch.load(",[76,34370,34371],{"class":192},"'best_model.pth'",[76,34373,30466],{"class":86},[76,34375,34376],{"class":78,"line":9892},[76,34377,34378],{"class":146},"    # 数据加载\n",[76,34380,34381,34383,34385],{"class":78,"line":16571},[76,34382,33991],{"class":86},[76,34384,133],{"class":82},[76,34386,34387],{"class":86},"test_data_process()\n",[76,34389,34390],{"class":78,"line":16577},[76,34391,34392],{"class":146},"    # 加载模型测试的函数\n",[76,34394,34395],{"class":78,"line":16600},[76,34396,34397],{"class":86},"    test_model_process(model,test_dataloader)\n",[76,34399,34400],{"class":78,"line":16606},[76,34401,2365],{"emptyLinePlaceholder":2364},[76,34403,34404],{"class":78,"line":16629},[76,34405,34406],{"class":146},"    # 验证集推理实现：\n",[76,34408,34409],{"class":78,"line":16643},[76,34410,34411],{"class":146},"    # 加载数据加载的更详细一些\n",[76,34413,34414,34416,34418,34420,34422,34424,34426],{"class":78,"line":16663},[76,34415,31206],{"class":86},[76,34417,133],{"class":82},[76,34419,31213],{"class":192},[76,34421,1668],{"class":82},[76,34423,31218],{"class":86},[76,34425,1665],{"class":82},[76,34427,34088],{"class":192},[76,34429,34430,34432,34434],{"class":78,"line":16669},[76,34431,31258],{"class":86},[76,34433,133],{"class":82},[76,34435,32258],{"class":86},[76,34437,34438],{"class":78,"line":16680},[76,34439,34440],{"class":146},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[76,34442,34443],{"class":78,"line":16703},[76,34444,34445],{"class":146},"    # 顺序不可改变\n",[76,34447,34448,34451,34453,34455,34458,34460,34463,34465,34468,34470,34473,34475,34478,34480,34483,34485,34488,34490,34493,34495,34498,34500,34503],{"class":78,"line":16725},[76,34449,34450],{"class":86},"    classes",[76,34452,133],{"class":82},[76,34454,978],{"class":86},[76,34456,34457],{"class":192},"'T-shirt\u002Ftop'",[76,34459,466],{"class":86},[76,34461,34462],{"class":192},"'Trouser'",[76,34464,466],{"class":86},[76,34466,34467],{"class":192},"'Pullover'",[76,34469,466],{"class":86},[76,34471,34472],{"class":192},"'Dress'",[76,34474,466],{"class":86},[76,34476,34477],{"class":192},"'Coat'",[76,34479,466],{"class":86},[76,34481,34482],{"class":192},"'Sandal'",[76,34484,466],{"class":86},[76,34486,34487],{"class":192},"'Shirt'",[76,34489,466],{"class":86},[76,34491,34492],{"class":192},"'Sneaker'",[76,34494,466],{"class":86},[76,34496,34497],{"class":192},"'Bag'",[76,34499,466],{"class":86},[76,34501,34502],{"class":192},"'Ankle boot'",[76,34504,33215],{"class":86},[76,34506,34507,34509],{"class":78,"line":16730},[76,34508,34147],{"class":82},[76,34510,32853],{"class":86},[76,34512,34513],{"class":78,"line":16736},[76,34514,34515],{"class":146},"        # 将数据和标签都放到设备当中\n",[76,34517,34518,34520,34523,34525],{"class":78,"line":16750},[76,34519,3368],{"class":82},[76,34521,34522],{"class":86}," b_x,b_y ",[76,34524,26012],{"class":82},[76,34526,34166],{"class":86},[76,34528,34529,34531,34533],{"class":78,"line":16763},[76,34530,32579],{"class":86},[76,34532,133],{"class":82},[76,34534,32584],{"class":86},[76,34536,34537,34539,34541],{"class":78,"line":16768},[76,34538,32594],{"class":86},[76,34540,133],{"class":82},[76,34542,32599],{"class":86},[76,34544,34545],{"class":78,"line":16782},[76,34546,2365],{"emptyLinePlaceholder":2364},[76,34548,34549],{"class":78,"line":16787},[76,34550,34551],{"class":146},"            # 设置模型为验证模式\n",[76,34553,34554],{"class":78,"line":16793},[76,34555,32844],{"class":86},[76,34557,34558],{"class":78,"line":16798},[76,34559,34560],{"class":146},"            # 模型推理结果\n",[76,34562,34563,34565,34567],{"class":78,"line":16812},[76,34564,32629],{"class":86},[76,34566,133],{"class":82},[76,34568,32634],{"class":86},[76,34570,34571],{"class":78,"line":16817},[76,34572,34573],{"class":146},"            # 获取最大下标，最大下标就是类别号\n",[76,34575,34576,34578,34580,34582,34584,34586,34588],{"class":78,"line":16822},[76,34577,32646],{"class":86},[76,34579,133],{"class":82},[76,34581,32651],{"class":86},[76,34583,32654],{"class":5183},[76,34585,133],{"class":82},[76,34587,305],{"class":136},[76,34589,93],{"class":86},[76,34591,34592],{"class":78,"line":16836},[76,34593,34594],{"class":146},"            # 取出张量中的数值\n",[76,34596,34597,34600,34602],{"class":78,"line":16848},[76,34598,34599],{"class":86},"            result",[76,34601,133],{"class":82},[76,34603,34604],{"class":86},"pre_lab.item()\n",[76,34606,34607,34610,34612],{"class":78,"line":16853},[76,34608,34609],{"class":86},"            label",[76,34611,133],{"class":82},[76,34613,34614],{"class":86},"b_y.item()\n",[76,34616,34617,34620,34622,34625,34628,34631,34633,34636],{"class":78,"line":16866},[76,34618,34619],{"class":136},"            print",[76,34621,87],{"class":86},[76,34623,34624],{"class":192},"\"预测值：\"",[76,34626,34627],{"class":86},",classes[result],",[76,34629,34630],{"class":192},"\"------\"",[76,34632,466],{"class":86},[76,34634,34635],{"class":192},"\"真实值：\"",[76,34637,34638],{"class":86},",classes[label])\n",[21,34640,34641],{},"（2）AlexNet",[29,34643,34644],{},[32,34645,34646],{},"神经网络构建",[66,34648,34650],{"className":30347,"code":34649,"language":30349,"meta":71,"style":71},"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",[73,34651,34652,34658,34668,34678,34690,34694,34711,34719,34734,34746,34788,34815,34858,34884,34928,34971,35014,35041,35045,35055,35060,35088,35107,35126,35130,35135,35143,35158,35168,35182,35192,35207,35222,35237,35248,35252,35257,35267,35282,35287,35301,35316,35328,35333,35344,35349,35355,35360,35372,35392,35397,35406],{"__ignoreMap":71},[76,34653,34654,34656],{"class":78,"line":79},[76,34655,30361],{"class":82},[76,34657,30364],{"class":86},[76,34659,34660,34662,34664,34666],{"class":78,"line":96},[76,34661,30706],{"class":82},[76,34663,30709],{"class":86},[76,34665,30361],{"class":82},[76,34667,30714],{"class":86},[76,34669,34670,34672,34674,34676],{"class":78,"line":1143},[76,34671,30706],{"class":82},[76,34673,30726],{"class":86},[76,34675,30361],{"class":82},[76,34677,30731],{"class":86},[76,34679,34680,34682,34685,34687],{"class":78,"line":1158},[76,34681,30361],{"class":82},[76,34683,34684],{"class":86}," torch.nn.functional ",[76,34686,31352],{"class":82},[76,34688,34689],{"class":86}," F\n",[76,34691,34692],{"class":78,"line":1164},[76,34693,2365],{"emptyLinePlaceholder":2364},[76,34695,34696,34698,34701,34703,34705,34707,34709],{"class":78,"line":1178},[76,34697,14661],{"class":82},[76,34699,34700],{"class":1927}," AlexNet",[76,34702,87],{"class":86},[76,34704,30747],{"class":1927},[76,34706,646],{"class":86},[76,34708,30752],{"class":1927},[76,34710,30755],{"class":86},[76,34712,34713,34715,34717],{"class":78,"line":1184},[76,34714,30770],{"class":82},[76,34716,30773],{"class":136},[76,34718,30776],{"class":86},[76,34720,34721,34723,34726,34728,34730,34732],{"class":78,"line":1275},[76,34722,30786],{"class":136},[76,34724,34725],{"class":86},"(AlexNet,",[76,34727,30792],{"class":136},[76,34729,30795],{"class":86},[76,34731,30798],{"class":136},[76,34733,1940],{"class":86},[76,34735,34736,34738,34741,34743],{"class":78,"line":1281},[76,34737,30814],{"class":136},[76,34739,34740],{"class":86},".ReLu",[76,34742,133],{"class":82},[76,34744,34745],{"class":86},"nn.ReLU()\n",[76,34747,34748,34750,34752,34754,34756,34758,34760,34762,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786],{"class":78,"line":1293},[76,34749,30814],{"class":136},[76,34751,30817],{"class":86},[76,34753,133],{"class":82},[76,34755,30822],{"class":86},[76,34757,30825],{"class":5183},[76,34759,133],{"class":82},[76,34761,305],{"class":136},[76,34763,466],{"class":86},[76,34765,30834],{"class":5183},[76,34767,133],{"class":82},[76,34769,297],{"class":136},[76,34771,466],{"class":86},[76,34773,30843],{"class":5183},[76,34775,133],{"class":82},[76,34777,560],{"class":136},[76,34779,466],{"class":86},[76,34781,30898],{"class":5183},[76,34783,133],{"class":82},[76,34785,381],{"class":136},[76,34787,93],{"class":86},[76,34789,34790,34792,34794,34796,34799,34801,34803,34805,34807,34809,34811,34813],{"class":78,"line":1576},[76,34791,30814],{"class":136},[76,34793,30882],{"class":86},[76,34795,133],{"class":82},[76,34797,34798],{"class":86},"nn.MaxPool2d(",[76,34800,30843],{"class":5183},[76,34802,133],{"class":82},[76,34804,159],{"class":136},[76,34806,466],{"class":86},[76,34808,30898],{"class":5183},[76,34810,133],{"class":82},[76,34812,165],{"class":136},[76,34814,93],{"class":86},[76,34816,34817,34819,34821,34823,34825,34827,34829,34831,34833,34835,34837,34840,34842,34844,34846,34848,34850,34852,34854,34856],{"class":78,"line":1581},[76,34818,30814],{"class":136},[76,34820,30911],{"class":86},[76,34822,133],{"class":82},[76,34824,30822],{"class":86},[76,34826,30825],{"class":5183},[76,34828,133],{"class":82},[76,34830,297],{"class":136},[76,34832,466],{"class":86},[76,34834,30834],{"class":5183},[76,34836,133],{"class":82},[76,34838,34839],{"class":136},"256",[76,34841,466],{"class":86},[76,34843,30843],{"class":5183},[76,34845,133],{"class":82},[76,34847,407],{"class":136},[76,34849,466],{"class":86},[76,34851,30852],{"class":5183},[76,34853,133],{"class":82},[76,34855,165],{"class":136},[76,34857,93],{"class":86},[76,34859,34860,34862,34864,34866,34868,34870,34872,34874,34876,34878,34880,34882],{"class":78,"line":1587},[76,34861,30814],{"class":136},[76,34863,30946],{"class":86},[76,34865,133],{"class":82},[76,34867,34798],{"class":86},[76,34869,30843],{"class":5183},[76,34871,133],{"class":82},[76,34873,159],{"class":136},[76,34875,466],{"class":86},[76,34877,30898],{"class":5183},[76,34879,133],{"class":82},[76,34881,165],{"class":136},[76,34883,93],{"class":86},[76,34885,34886,34888,34891,34893,34895,34897,34899,34901,34903,34905,34907,34910,34912,34914,34916,34918,34920,34922,34924,34926],{"class":78,"line":1592},[76,34887,30814],{"class":136},[76,34889,34890],{"class":86},".c5",[76,34892,133],{"class":82},[76,34894,30822],{"class":86},[76,34896,30825],{"class":5183},[76,34898,133],{"class":82},[76,34900,34839],{"class":136},[76,34902,466],{"class":86},[76,34904,30834],{"class":5183},[76,34906,133],{"class":82},[76,34908,34909],{"class":136},"384",[76,34911,466],{"class":86},[76,34913,30843],{"class":5183},[76,34915,133],{"class":82},[76,34917,159],{"class":136},[76,34919,466],{"class":86},[76,34921,30852],{"class":5183},[76,34923,133],{"class":82},[76,34925,305],{"class":136},[76,34927,93],{"class":86},[76,34929,34930,34932,34935,34937,34939,34941,34943,34945,34947,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969],{"class":78,"line":1606},[76,34931,30814],{"class":136},[76,34933,34934],{"class":86},".c6",[76,34936,133],{"class":82},[76,34938,30822],{"class":86},[76,34940,30825],{"class":5183},[76,34942,133],{"class":82},[76,34944,34909],{"class":136},[76,34946,466],{"class":86},[76,34948,30834],{"class":5183},[76,34950,133],{"class":82},[76,34952,34909],{"class":136},[76,34954,466],{"class":86},[76,34956,30843],{"class":5183},[76,34958,133],{"class":82},[76,34960,159],{"class":136},[76,34962,466],{"class":86},[76,34964,30852],{"class":5183},[76,34966,133],{"class":82},[76,34968,305],{"class":136},[76,34970,93],{"class":86},[76,34972,34973,34975,34978,34980,34982,34984,34986,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012],{"class":78,"line":1611},[76,34974,30814],{"class":136},[76,34976,34977],{"class":86},".c7",[76,34979,133],{"class":82},[76,34981,30822],{"class":86},[76,34983,30825],{"class":5183},[76,34985,133],{"class":82},[76,34987,34909],{"class":136},[76,34989,466],{"class":86},[76,34991,30834],{"class":5183},[76,34993,133],{"class":82},[76,34995,34839],{"class":136},[76,34997,466],{"class":86},[76,34999,30843],{"class":5183},[76,35001,133],{"class":82},[76,35003,159],{"class":136},[76,35005,466],{"class":86},[76,35007,30852],{"class":5183},[76,35009,133],{"class":82},[76,35011,305],{"class":136},[76,35013,93],{"class":86},[76,35015,35016,35018,35021,35023,35025,35027,35029,35031,35033,35035,35037,35039],{"class":78,"line":1617},[76,35017,30814],{"class":136},[76,35019,35020],{"class":86},".s8",[76,35022,133],{"class":82},[76,35024,34798],{"class":86},[76,35026,30843],{"class":5183},[76,35028,133],{"class":82},[76,35030,159],{"class":136},[76,35032,466],{"class":86},[76,35034,30898],{"class":5183},[76,35036,133],{"class":82},[76,35038,165],{"class":136},[76,35040,93],{"class":86},[76,35042,35043],{"class":78,"line":1638},[76,35044,30971],{"class":146},[76,35046,35047,35049,35051,35053],{"class":78,"line":1643},[76,35048,30814],{"class":136},[76,35050,30978],{"class":86},[76,35052,133],{"class":82},[76,35054,30983],{"class":86},[76,35056,35057],{"class":78,"line":1657},[76,35058,35059],{"class":146},"       # 定义全连接层\n",[76,35061,35062,35064,35067,35069,35071,35073,35075,35077,35079,35081,35083,35086],{"class":78,"line":1662},[76,35063,30814],{"class":136},[76,35065,35066],{"class":86},".f1",[76,35068,133],{"class":82},[76,35070,31000],{"class":86},[76,35072,432],{"class":136},[76,35074,543],{"class":82},[76,35076,432],{"class":136},[76,35078,543],{"class":82},[76,35080,34839],{"class":136},[76,35082,466],{"class":86},[76,35084,35085],{"class":136},"4096",[76,35087,93],{"class":86},[76,35089,35090,35092,35095,35097,35099,35101,35103,35105],{"class":78,"line":1691},[76,35091,30814],{"class":136},[76,35093,35094],{"class":86},".f2",[76,35096,133],{"class":82},[76,35098,31000],{"class":86},[76,35100,35085],{"class":136},[76,35102,466],{"class":86},[76,35104,35085],{"class":136},[76,35106,93],{"class":86},[76,35108,35109,35111,35114,35116,35118,35120,35122,35124],{"class":78,"line":1696},[76,35110,30814],{"class":136},[76,35112,35113],{"class":86},".f3",[76,35115,133],{"class":82},[76,35117,31000],{"class":86},[76,35119,35085],{"class":136},[76,35121,466],{"class":86},[76,35123,534],{"class":136},[76,35125,93],{"class":86},[76,35127,35128],{"class":78,"line":1713},[76,35129,2365],{"emptyLinePlaceholder":2364},[76,35131,35132],{"class":78,"line":1718},[76,35133,35134],{"class":146},"    # 定义前向传播\n",[76,35136,35137,35139,35141],{"class":78,"line":1723},[76,35138,30770],{"class":82},[76,35140,31062],{"class":1927},[76,35142,31065],{"class":86},[76,35144,35145,35147,35149,35151,35154,35156],{"class":78,"line":1728},[76,35146,31070],{"class":86},[76,35148,133],{"class":82},[76,35150,30792],{"class":136},[76,35152,35153],{"class":86},".ReLu(",[76,35155,30792],{"class":136},[76,35157,31082],{"class":86},[76,35159,35160,35162,35164,35166],{"class":78,"line":1742},[76,35161,31070],{"class":86},[76,35163,133],{"class":82},[76,35165,30792],{"class":136},[76,35167,31093],{"class":86},[76,35169,35170,35172,35174,35176,35178,35180],{"class":78,"line":1747},[76,35171,31070],{"class":86},[76,35173,133],{"class":82},[76,35175,30792],{"class":136},[76,35177,35153],{"class":86},[76,35179,30792],{"class":136},[76,35181,31108],{"class":86},[76,35183,35184,35186,35188,35190],{"class":78,"line":2542},[76,35185,31070],{"class":86},[76,35187,133],{"class":82},[76,35189,30792],{"class":136},[76,35191,31119],{"class":86},[76,35193,35194,35196,35198,35200,35202,35204],{"class":78,"line":2556},[76,35195,31070],{"class":86},[76,35197,133],{"class":82},[76,35199,30792],{"class":136},[76,35201,35153],{"class":86},[76,35203,30792],{"class":136},[76,35205,35206],{"class":86},".c5(x))\n",[76,35208,35209,35211,35213,35215,35217,35219],{"class":78,"line":2564},[76,35210,31070],{"class":86},[76,35212,133],{"class":82},[76,35214,30792],{"class":136},[76,35216,35153],{"class":86},[76,35218,30792],{"class":136},[76,35220,35221],{"class":86},".c6(x))\n",[76,35223,35224,35226,35228,35230,35232,35234],{"class":78,"line":2569},[76,35225,31070],{"class":86},[76,35227,133],{"class":82},[76,35229,30792],{"class":136},[76,35231,35153],{"class":86},[76,35233,30792],{"class":136},[76,35235,35236],{"class":86},".c7(x))\n",[76,35238,35239,35241,35243,35245],{"class":78,"line":2575},[76,35240,31070],{"class":86},[76,35242,133],{"class":82},[76,35244,30792],{"class":136},[76,35246,35247],{"class":86},".s8(x)\n",[76,35249,35250],{"class":78,"line":2581},[76,35251,2365],{"emptyLinePlaceholder":2364},[76,35253,35254],{"class":78,"line":2586},[76,35255,35256],{"class":146},"        # 展平加线性全连接层\n",[76,35258,35259,35261,35263,35265],{"class":78,"line":7915},[76,35260,31070],{"class":86},[76,35262,133],{"class":82},[76,35264,30792],{"class":136},[76,35266,31130],{"class":86},[76,35268,35269,35271,35273,35275,35277,35279],{"class":78,"line":7939},[76,35270,31070],{"class":86},[76,35272,133],{"class":82},[76,35274,30792],{"class":136},[76,35276,35153],{"class":86},[76,35278,30792],{"class":136},[76,35280,35281],{"class":86},".f1(x))\n",[76,35283,35284],{"class":78,"line":7944},[76,35285,35286],{"class":146},"        # 还需要dropout对神经元随机进行失活\n",[76,35288,35289,35291,35293,35296,35299],{"class":78,"line":7950},[76,35290,31070],{"class":86},[76,35292,133],{"class":82},[76,35294,35295],{"class":86},"F.dropout(x,",[76,35297,35298],{"class":136},"0.5",[76,35300,93],{"class":86},[76,35302,35303,35305,35307,35309,35311,35313],{"class":78,"line":7977},[76,35304,31070],{"class":86},[76,35306,133],{"class":82},[76,35308,30792],{"class":136},[76,35310,35153],{"class":86},[76,35312,30792],{"class":136},[76,35314,35315],{"class":86},".f2(x))\n",[76,35317,35318,35320,35322,35324,35326],{"class":78,"line":7982},[76,35319,31070],{"class":86},[76,35321,133],{"class":82},[76,35323,35295],{"class":86},[76,35325,35298],{"class":136},[76,35327,93],{"class":86},[76,35329,35330],{"class":78,"line":7988},[76,35331,35332],{"class":146},"        # 直接输出\n",[76,35334,35335,35337,35339,35341],{"class":78,"line":8000},[76,35336,31070],{"class":86},[76,35338,133],{"class":82},[76,35340,30792],{"class":136},[76,35342,35343],{"class":86},".f3(x)\n",[76,35345,35346],{"class":78,"line":8012},[76,35347,35348],{"class":146},"        # 前向传播输出\n",[76,35350,35351,35353],{"class":78,"line":8024},[76,35352,14719],{"class":82},[76,35354,31178],{"class":86},[76,35356,35357],{"class":78,"line":9683},[76,35358,35359],{"class":146},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[76,35361,35362,35364,35366,35368,35370],{"class":78,"line":9708},[76,35363,1495],{"class":82},[76,35365,31189],{"class":136},[76,35367,2914],{"class":82},[76,35369,31194],{"class":192},[76,35371,3704],{"class":86},[76,35373,35374,35376,35378,35380,35382,35384,35386,35388,35390],{"class":78,"line":9731},[76,35375,31206],{"class":86},[76,35377,133],{"class":82},[76,35379,30420],{"class":86},[76,35381,31213],{"class":192},[76,35383,1668],{"class":82},[76,35385,31218],{"class":86},[76,35387,1665],{"class":82},[76,35389,30445],{"class":192},[76,35391,93],{"class":86},[76,35393,35394],{"class":78,"line":9755},[76,35395,35396],{"class":146},"    # 模型实例化，然后将实例化的模型放到设备中\n",[76,35398,35399,35401,35403],{"class":78,"line":9760},[76,35400,31258],{"class":86},[76,35402,133],{"class":82},[76,35404,35405],{"class":86},"AlexNet().to(device)\n",[76,35407,35408,35410,35412,35414,35416,35419,35421,35423],{"class":78,"line":9765},[76,35409,31268],{"class":136},[76,35411,31271],{"class":86},[76,35413,305],{"class":136},[76,35415,466],{"class":86},[76,35417,35418],{"class":136},"227",[76,35420,466],{"class":86},[76,35422,35418],{"class":136},[76,35424,31284],{"class":86},[29,35426,35427],{"start":96},[32,35428,31297],{},[66,35430,35432],{"className":30347,"code":35431,"language":30349,"meta":71,"style":71},"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",[73,35433,35434,35440,35446,35456,35462,35472,35482,35492,35502,35512,35516,35527,35537,35541,35545,35549,35557,35569,35579,35595,35605,35637,35651,35661,35671,35675,35685,35699,35709,35719,35729,35735,35739,35743,35747,35751,35755,35763,35783,35787,35791,35795,35799,35803,35819,35823,35827,35835,35839,35843,35851,35855,35859,35863,35871,35875,35879,35883,35887,35895,35899,35907,35911,35919,35923,35931,35935,35943,35947,35951,35959,35963,35967,35971,35983,36007,36021,36025,36029,36033,36041,36045,36053,36057,36065,36069,36077,36081,36089,36093,36101,36105,36117,36121,36129,36133,36141,36145,36149,36153,36157,36165,36169,36185,36189,36197,36201,36205,36209,36213,36217,36221,36225,36241,36245,36257,36261,36273,36277,36289,36293,36301,36305,36313,36317,36321,36326,36332,36336,36345,36349,36366,36370,36379,36383,36401,36414,36419,36432,36436,36440,36448,36452,36456,36464,36468,36476,36480,36488,36492,36496,36538,36580,36584,36588,36604,36608,36624,36628,36632,36640,36644,36648,36660,36698,36703,36708,36717,36721,36735,36745,36751,36757,36763,36769,36773,36777,36783,36787,36791,36799,36803,36821,36825,36829,36833,36849,36853,36857,36861,36865,36869,36889,36909,36913,36917,36921,36929,36937,36941,36957,36977,36997,37001,37005,37013,37021,37025,37029,37033,37045,37049,37059,37067,37084],{"__ignoreMap":71},[76,35435,35436,35438],{"class":78,"line":79},[76,35437,30361],{"class":82},[76,35439,31791],{"class":86},[76,35441,35442,35444],{"class":78,"line":96},[76,35443,30361],{"class":82},[76,35445,31798],{"class":86},[76,35447,35448,35450,35452,35454],{"class":78,"line":1143},[76,35449,30361],{"class":82},[76,35451,31809],{"class":86},[76,35453,31352],{"class":82},[76,35455,31814],{"class":86},[76,35457,35458,35460],{"class":78,"line":1158},[76,35459,30361],{"class":82},[76,35461,30364],{"class":86},[76,35463,35464,35466,35468,35470],{"class":78,"line":1164},[76,35465,30706],{"class":82},[76,35467,31384],{"class":86},[76,35469,30361],{"class":82},[76,35471,31831],{"class":86},[76,35473,35474,35476,35478,35480],{"class":78,"line":1178},[76,35475,30706],{"class":82},[76,35477,31337],{"class":86},[76,35479,30361],{"class":82},[76,35481,31342],{"class":86},[76,35483,35484,35486,35488,35490],{"class":78,"line":1184},[76,35485,30706],{"class":82},[76,35487,31367],{"class":86},[76,35489,30361],{"class":82},[76,35491,31372],{"class":86},[76,35493,35494,35496,35498,35500],{"class":78,"line":1275},[76,35495,30361],{"class":82},[76,35497,31384],{"class":86},[76,35499,31352],{"class":82},[76,35501,31389],{"class":86},[76,35503,35504,35506,35508,35510],{"class":78,"line":1281},[76,35505,30361],{"class":82},[76,35507,31401],{"class":86},[76,35509,31352],{"class":82},[76,35511,31406],{"class":86},[76,35513,35514],{"class":78,"line":1293},[76,35515,31876],{"class":146},[76,35517,35518,35520,35522,35524],{"class":78,"line":1576},[76,35519,30706],{"class":82},[76,35521,31883],{"class":86},[76,35523,30361],{"class":82},[76,35525,35526],{"class":86}," AlexNet\n",[76,35528,35529,35531,35533,35535],{"class":78,"line":1581},[76,35530,30706],{"class":82},[76,35532,30709],{"class":86},[76,35534,30361],{"class":82},[76,35536,30714],{"class":86},[76,35538,35539],{"class":78,"line":1587},[76,35540,2365],{"emptyLinePlaceholder":2364},[76,35542,35543],{"class":78,"line":1592},[76,35544,2365],{"emptyLinePlaceholder":2364},[76,35546,35547],{"class":78,"line":1606},[76,35548,31911],{"class":146},[76,35550,35551,35553,35555],{"class":78,"line":1611},[76,35552,31916],{"class":82},[76,35554,31919],{"class":1927},[76,35556,31922],{"class":86},[76,35558,35559,35561,35563,35565,35567],{"class":78,"line":1617},[76,35560,31927],{"class":86},[76,35562,133],{"class":82},[76,35564,31424],{"class":86},[76,35566,31432],{"class":192},[76,35568,31435],{"class":86},[76,35570,35571,35573,35575,35577],{"class":78,"line":1638},[76,35572,31940],{"class":5183},[76,35574,133],{"class":82},[76,35576,31445],{"class":136},[76,35578,31435],{"class":86},[76,35580,35581,35583,35585,35587,35589,35591,35593],{"class":78,"line":1643},[76,35582,31951],{"class":5183},[76,35584,133],{"class":82},[76,35586,31462],{"class":86},[76,35588,31465],{"class":5183},[76,35590,133],{"class":82},[76,35592,35418],{"class":136},[76,35594,31473],{"class":86},[76,35596,35597,35599,35601,35603],{"class":78,"line":1657},[76,35598,31968],{"class":5183},[76,35600,133],{"class":82},[76,35602,31445],{"class":136},[76,35604,93],{"class":86},[76,35606,35607,35609,35611,35613,35615,35617,35619,35621,35623,35625,35627,35629,35631,35633,35635],{"class":78,"line":1662},[76,35608,31979],{"class":86},[76,35610,133],{"class":82},[76,35612,31984],{"class":86},[76,35614,31987],{"class":136},[76,35616,87],{"class":86},[76,35618,31992],{"class":136},[76,35620,543],{"class":82},[76,35622,7325],{"class":136},[76,35624,31999],{"class":86},[76,35626,31987],{"class":136},[76,35628,87],{"class":86},[76,35630,32006],{"class":136},[76,35632,543],{"class":82},[76,35634,7325],{"class":136},[76,35636,32013],{"class":86},[76,35638,35639,35641,35643,35645,35647,35649],{"class":78,"line":1691},[76,35640,32018],{"class":86},[76,35642,133],{"class":82},[76,35644,32023],{"class":86},[76,35646,31506],{"class":5183},[76,35648,133],{"class":82},[76,35650,31511],{"class":86},[76,35652,35653,35655,35657,35659],{"class":78,"line":1696},[76,35654,32034],{"class":5183},[76,35656,133],{"class":82},[76,35658,32039],{"class":136},[76,35660,31435],{"class":86},[76,35662,35663,35665,35667,35669],{"class":78,"line":1713},[76,35664,32046],{"class":5183},[76,35666,133],{"class":82},[76,35668,31445],{"class":136},[76,35670,31435],{"class":86},[76,35672,35673],{"class":78,"line":1718},[76,35674,32057],{"class":146},[76,35676,35677,35679,35681,35683],{"class":78,"line":1723},[76,35678,32062],{"class":5183},[76,35680,133],{"class":82},[76,35682,483],{"class":136},[76,35684,93],{"class":86},[76,35686,35687,35689,35691,35693,35695,35697],{"class":78,"line":1728},[76,35688,32073],{"class":86},[76,35690,133],{"class":82},[76,35692,31503],{"class":86},[76,35694,31506],{"class":5183},[76,35696,133],{"class":82},[76,35698,32084],{"class":86},[76,35700,35701,35703,35705,35707],{"class":78,"line":1742},[76,35702,32089],{"class":5183},[76,35704,133],{"class":82},[76,35706,32039],{"class":136},[76,35708,31435],{"class":86},[76,35710,35711,35713,35715,35717],{"class":78,"line":1747},[76,35712,32100],{"class":5183},[76,35714,133],{"class":82},[76,35716,31445],{"class":136},[76,35718,31435],{"class":86},[76,35720,35721,35723,35725,35727],{"class":78,"line":2542},[76,35722,32111],{"class":5183},[76,35724,133],{"class":82},[76,35726,483],{"class":136},[76,35728,93],{"class":86},[76,35730,35731,35733],{"class":78,"line":2556},[76,35732,4055],{"class":82},[76,35734,32124],{"class":86},[76,35736,35737],{"class":78,"line":2564},[76,35738,2365],{"emptyLinePlaceholder":2364},[76,35740,35741],{"class":78,"line":2569},[76,35742,32133],{"class":146},[76,35744,35745],{"class":78,"line":2575},[76,35746,32138],{"class":146},[76,35748,35749],{"class":78,"line":2581},[76,35750,2365],{"emptyLinePlaceholder":2364},[76,35752,35753],{"class":78,"line":2586},[76,35754,32147],{"class":146},[76,35756,35757,35759,35761],{"class":78,"line":7915},[76,35758,31916],{"class":82},[76,35760,32154],{"class":1927},[76,35762,32157],{"class":86},[76,35764,35765,35767,35769,35771,35773,35775,35777,35779,35781],{"class":78,"line":7939},[76,35766,31206],{"class":86},[76,35768,133],{"class":82},[76,35770,30420],{"class":86},[76,35772,31213],{"class":192},[76,35774,1668],{"class":82},[76,35776,31218],{"class":86},[76,35778,1665],{"class":82},[76,35780,32176],{"class":192},[76,35782,93],{"class":86},[76,35784,35785],{"class":78,"line":7944},[76,35786,2365],{"emptyLinePlaceholder":2364},[76,35788,35789],{"class":78,"line":7950},[76,35790,2365],{"emptyLinePlaceholder":2364},[76,35792,35793],{"class":78,"line":7977},[76,35794,32191],{"class":146},[76,35796,35797],{"class":78,"line":7982},[76,35798,32196],{"class":146},[76,35800,35801],{"class":78,"line":7988},[76,35802,32201],{"class":146},[76,35804,35805,35807,35809,35811,35813,35815,35817],{"class":78,"line":8000},[76,35806,32206],{"class":86},[76,35808,133],{"class":82},[76,35810,32211],{"class":86},[76,35812,32214],{"class":5183},[76,35814,133],{"class":82},[76,35816,32219],{"class":136},[76,35818,93],{"class":86},[76,35820,35821],{"class":78,"line":8012},[76,35822,2365],{"emptyLinePlaceholder":2364},[76,35824,35825],{"class":78,"line":8024},[76,35826,32230],{"class":146},[76,35828,35829,35831,35833],{"class":78,"line":9683},[76,35830,32235],{"class":86},[76,35832,133],{"class":82},[76,35834,32240],{"class":86},[76,35836,35837],{"class":78,"line":9708},[76,35838,2365],{"emptyLinePlaceholder":2364},[76,35840,35841],{"class":78,"line":9731},[76,35842,32249],{"class":146},[76,35844,35845,35847,35849],{"class":78,"line":9755},[76,35846,31258],{"class":86},[76,35848,133],{"class":82},[76,35850,32258],{"class":86},[76,35852,35853],{"class":78,"line":9760},[76,35854,32263],{"class":146},[76,35856,35857],{"class":78,"line":9765},[76,35858,32268],{"class":146},[76,35860,35861],{"class":78,"line":9770},[76,35862,32273],{"class":146},[76,35864,35865,35867,35869],{"class":78,"line":9779},[76,35866,32278],{"class":86},[76,35868,133],{"class":82},[76,35870,32283],{"class":86},[76,35872,35873],{"class":78,"line":9784},[76,35874,2365],{"emptyLinePlaceholder":2364},[76,35876,35877],{"class":78,"line":9790},[76,35878,2365],{"emptyLinePlaceholder":2364},[76,35880,35881],{"class":78,"line":9811},[76,35882,32296],{"class":146},[76,35884,35885],{"class":78,"line":9817},[76,35886,32301],{"class":146},[76,35888,35889,35891,35893],{"class":78,"line":9831},[76,35890,32306],{"class":86},[76,35892,133],{"class":82},[76,35894,32311],{"class":136},[76,35896,35897],{"class":78,"line":9837},[76,35898,32316],{"class":146},[76,35900,35901,35903,35905],{"class":78,"line":9864},[76,35902,32321],{"class":86},[76,35904,133],{"class":82},[76,35906,32326],{"class":86},[76,35908,35909],{"class":78,"line":9873},[76,35910,32331],{"class":146},[76,35912,35913,35915,35917],{"class":78,"line":9879},[76,35914,32336],{"class":86},[76,35916,133],{"class":82},[76,35918,32326],{"class":86},[76,35920,35921],{"class":78,"line":9887},[76,35922,32345],{"class":146},[76,35924,35925,35927,35929],{"class":78,"line":9892},[76,35926,32350],{"class":86},[76,35928,133],{"class":82},[76,35930,32326],{"class":86},[76,35932,35933],{"class":78,"line":16571},[76,35934,32359],{"class":146},[76,35936,35937,35939,35941],{"class":78,"line":16577},[76,35938,32364],{"class":86},[76,35940,133],{"class":82},[76,35942,32326],{"class":86},[76,35944,35945],{"class":78,"line":16600},[76,35946,2365],{"emptyLinePlaceholder":2364},[76,35948,35949],{"class":78,"line":16606},[76,35950,32377],{"class":146},[76,35952,35953,35955,35957],{"class":78,"line":16629},[76,35954,32382],{"class":86},[76,35956,133],{"class":82},[76,35958,32387],{"class":86},[76,35960,35961],{"class":78,"line":16643},[76,35962,2365],{"emptyLinePlaceholder":2364},[76,35964,35965],{"class":78,"line":16663},[76,35966,2365],{"emptyLinePlaceholder":2364},[76,35968,35969],{"class":78,"line":16669},[76,35970,32400],{"class":146},[76,35972,35973,35975,35977,35979,35981],{"class":78,"line":16680},[76,35974,3166],{"class":82},[76,35976,32407],{"class":86},[76,35978,26012],{"class":82},[76,35980,32412],{"class":136},[76,35982,32415],{"class":86},[76,35984,35985,35987,35989,35991,35993,35995,35997,35999,36001,36003,36005],{"class":78,"line":16703},[76,35986,32420],{"class":136},[76,35988,87],{"class":86},[76,35990,32425],{"class":192},[76,35992,32428],{"class":136},[76,35994,672],{"class":192},[76,35996,32428],{"class":136},[76,35998,339],{"class":192},[76,36000,32437],{"class":86},[76,36002,620],{"class":82},[76,36004,305],{"class":136},[76,36006,30466],{"class":86},[76,36008,36009,36011,36013,36015,36017,36019],{"class":78,"line":16725},[76,36010,32420],{"class":136},[76,36012,87],{"class":86},[76,36014,32452],{"class":192},[76,36016,543],{"class":82},[76,36018,534],{"class":136},[76,36020,93],{"class":86},[76,36022,36023],{"class":78,"line":16730},[76,36024,2365],{"emptyLinePlaceholder":2364},[76,36026,36027],{"class":78,"line":16736},[76,36028,32467],{"class":146},[76,36030,36031],{"class":78,"line":16750},[76,36032,32472],{"class":146},[76,36034,36035,36037,36039],{"class":78,"line":16763},[76,36036,32477],{"class":86},[76,36038,133],{"class":82},[76,36040,32311],{"class":136},[76,36042,36043],{"class":78,"line":16768},[76,36044,32486],{"class":146},[76,36046,36047,36049,36051],{"class":78,"line":16782},[76,36048,32491],{"class":86},[76,36050,133],{"class":82},[76,36052,3050],{"class":136},[76,36054,36055],{"class":78,"line":16787},[76,36056,32500],{"class":146},[76,36058,36059,36061,36063],{"class":78,"line":16793},[76,36060,32505],{"class":86},[76,36062,133],{"class":82},[76,36064,32311],{"class":136},[76,36066,36067],{"class":78,"line":16798},[76,36068,32514],{"class":146},[76,36070,36071,36073,36075],{"class":78,"line":16812},[76,36072,32519],{"class":86},[76,36074,133],{"class":82},[76,36076,3050],{"class":136},[76,36078,36079],{"class":78,"line":16817},[76,36080,32528],{"class":146},[76,36082,36083,36085,36087],{"class":78,"line":16822},[76,36084,32533],{"class":86},[76,36086,133],{"class":82},[76,36088,3050],{"class":136},[76,36090,36091],{"class":78,"line":16836},[76,36092,32542],{"class":146},[76,36094,36095,36097,36099],{"class":78,"line":16848},[76,36096,32547],{"class":86},[76,36098,133],{"class":82},[76,36100,3050],{"class":136},[76,36102,36103],{"class":78,"line":16853},[76,36104,32556],{"class":146},[76,36106,36107,36109,36111,36113,36115],{"class":78,"line":16866},[76,36108,3368],{"class":82},[76,36110,31570],{"class":86},[76,36112,26012],{"class":82},[76,36114,31575],{"class":136},[76,36116,32569],{"class":86},[76,36118,36119],{"class":78,"line":16871},[76,36120,32574],{"class":146},[76,36122,36123,36125,36127],{"class":78,"line":16876},[76,36124,32579],{"class":86},[76,36126,133],{"class":82},[76,36128,32584],{"class":86},[76,36130,36131],{"class":78,"line":16881},[76,36132,32589],{"class":146},[76,36134,36135,36137,36139],{"class":78,"line":16894},[76,36136,32594],{"class":86},[76,36138,133],{"class":82},[76,36140,32599],{"class":86},[76,36142,36143],{"class":78,"line":16899},[76,36144,32605],{"class":146},[76,36146,36147],{"class":78,"line":32602},[76,36148,32611],{"class":86},[76,36150,36151],{"class":78,"line":32608},[76,36152,32617],{"class":146},[76,36154,36155],{"class":78,"line":32614},[76,36156,32623],{"class":146},[76,36158,36159,36161,36163],{"class":78,"line":32620},[76,36160,32629],{"class":86},[76,36162,133],{"class":82},[76,36164,32634],{"class":86},[76,36166,36167],{"class":78,"line":32626},[76,36168,32640],{"class":146},[76,36170,36171,36173,36175,36177,36179,36181,36183],{"class":78,"line":32637},[76,36172,32646],{"class":86},[76,36174,133],{"class":82},[76,36176,32651],{"class":86},[76,36178,32654],{"class":5183},[76,36180,133],{"class":82},[76,36182,305],{"class":136},[76,36184,93],{"class":86},[76,36186,36187],{"class":78,"line":32643},[76,36188,32666],{"class":146},[76,36190,36191,36193,36195],{"class":78,"line":32663},[76,36192,32672],{"class":86},[76,36194,133],{"class":82},[76,36196,32677],{"class":86},[76,36198,36199],{"class":78,"line":32669},[76,36200,32683],{"class":146},[76,36202,36203],{"class":78,"line":32680},[76,36204,32689],{"class":86},[76,36206,36207],{"class":78,"line":32686},[76,36208,32695],{"class":146},[76,36210,36211],{"class":78,"line":32692},[76,36212,32701],{"class":86},[76,36214,36215],{"class":78,"line":32698},[76,36216,32707],{"class":146},[76,36218,36219],{"class":78,"line":32704},[76,36220,32713],{"class":86},[76,36222,36223],{"class":78,"line":32710},[76,36224,32719],{"class":146},[76,36226,36227,36229,36231,36233,36235,36237,36239],{"class":78,"line":32716},[76,36228,32725],{"class":86},[76,36230,9444],{"class":82},[76,36232,32730],{"class":86},[76,36234,543],{"class":82},[76,36236,32735],{"class":86},[76,36238,279],{"class":136},[76,36240,93],{"class":86},[76,36242,36243],{"class":78,"line":32722},[76,36244,32745],{"class":146},[76,36246,36247,36249,36251,36253,36255],{"class":78,"line":32742},[76,36248,32751],{"class":86},[76,36250,9444],{"class":82},[76,36252,32756],{"class":86},[76,36254,2914],{"class":82},[76,36256,32761],{"class":86},[76,36258,36259],{"class":78,"line":32748},[76,36260,32767],{"class":146},[76,36262,36263,36265,36267,36269,36271],{"class":78,"line":32764},[76,36264,32773],{"class":86},[76,36266,9444],{"class":82},[76,36268,32735],{"class":86},[76,36270,279],{"class":136},[76,36272,93],{"class":86},[76,36274,36275],{"class":78,"line":32770},[76,36276,32787],{"class":146},[76,36278,36279,36281,36283,36285,36287],{"class":78,"line":32784},[76,36280,3368],{"class":82},[76,36282,32795],{"class":86},[76,36284,26012],{"class":82},[76,36286,31575],{"class":136},[76,36288,32802],{"class":86},[76,36290,36291],{"class":78,"line":32790},[76,36292,32808],{"class":146},[76,36294,36295,36297,36299],{"class":78,"line":32805},[76,36296,32579],{"class":86},[76,36298,133],{"class":82},[76,36300,32584],{"class":86},[76,36302,36303],{"class":78,"line":32811},[76,36304,32823],{"class":146},[76,36306,36307,36309,36311],{"class":78,"line":32820},[76,36308,32594],{"class":86},[76,36310,133],{"class":82},[76,36312,32599],{"class":86},[76,36314,36315],{"class":78,"line":32826},[76,36316,32838],{"class":146},[76,36318,36319],{"class":78,"line":32835},[76,36320,32844],{"class":86},[76,36322,36323],{"class":78,"line":32841},[76,36324,36325],{"class":146},"            # 验证时不计算梯度以节省内存\u002F计算\n",[76,36327,36328,36330],{"class":78,"line":32847},[76,36329,32850],{"class":82},[76,36331,32853],{"class":86},[76,36333,36334],{"class":78,"line":32856},[76,36335,32859],{"class":146},[76,36337,36338,36341,36343],{"class":78,"line":32862},[76,36339,36340],{"class":86},"                output",[76,36342,133],{"class":82},[76,36344,32634],{"class":86},[76,36346,36347],{"class":78,"line":32873},[76,36348,32876],{"class":146},[76,36350,36351,36354,36356,36358,36360,36362,36364],{"class":78,"line":32879},[76,36352,36353],{"class":86},"                pre_lab",[76,36355,133],{"class":82},[76,36357,32651],{"class":86},[76,36359,32654],{"class":5183},[76,36361,133],{"class":82},[76,36363,305],{"class":136},[76,36365,93],{"class":86},[76,36367,36368],{"class":78,"line":32898},[76,36369,32901],{"class":146},[76,36371,36372,36375,36377],{"class":78,"line":32904},[76,36373,36374],{"class":86},"                val_batch_loss",[76,36376,133],{"class":82},[76,36378,32677],{"class":86},[76,36380,36381],{"class":78,"line":32915},[76,36382,32918],{"class":146},[76,36384,36385,36388,36390,36393,36395,36397,36399],{"class":78,"line":32921},[76,36386,36387],{"class":86},"                val_loss",[76,36389,9444],{"class":82},[76,36391,36392],{"class":86},"val_batch_loss.item()",[76,36394,543],{"class":82},[76,36396,32735],{"class":86},[76,36398,279],{"class":136},[76,36400,93],{"class":86},[76,36402,36403,36406,36408,36410,36412],{"class":78,"line":32941},[76,36404,36405],{"class":86},"                val_corrects",[76,36407,9444],{"class":82},[76,36409,32756],{"class":86},[76,36411,2914],{"class":82},[76,36413,32761],{"class":86},[76,36415,36416],{"class":78,"line":32957},[76,36417,36418],{"class":146},"            # 当前用于验证的样本数量\n",[76,36420,36421,36424,36426,36428,36430],{"class":78,"line":32963},[76,36422,36423],{"class":86},"            val_num",[76,36425,9444],{"class":82},[76,36427,32735],{"class":86},[76,36429,279],{"class":136},[76,36431,93],{"class":86},[76,36433,36434],{"class":78,"line":32977},[76,36435,32980],{"class":146},[76,36437,36438],{"class":78,"line":32983},[76,36439,32986],{"class":146},[76,36441,36442,36444,36446],{"class":78,"line":32989},[76,36443,32992],{"class":86},[76,36445,672],{"class":82},[76,36447,32997],{"class":86},[76,36449,36450],{"class":78,"line":33000},[76,36451,33003],{"class":146},[76,36453,36454],{"class":78,"line":33006},[76,36455,33009],{"class":146},[76,36457,36458,36460,36462],{"class":78,"line":33012},[76,36459,33015],{"class":86},[76,36461,672],{"class":82},[76,36463,32997],{"class":86},[76,36465,36466],{"class":78,"line":33022},[76,36467,33025],{"class":146},[76,36469,36470,36472,36474],{"class":78,"line":33028},[76,36471,33031],{"class":86},[76,36473,672],{"class":82},[76,36475,33036],{"class":86},[76,36477,36478],{"class":78,"line":33039},[76,36479,33042],{"class":146},[76,36481,36482,36484,36486],{"class":78,"line":33045},[76,36483,33048],{"class":86},[76,36485,672],{"class":82},[76,36487,33036],{"class":86},[76,36489,36490],{"class":78,"line":33055},[76,36491,2365],{"emptyLinePlaceholder":2364},[76,36493,36494],{"class":78,"line":33060},[76,36495,33063],{"class":146},[76,36497,36498,36500,36502,36504,36506,36508,36510,36512,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536],{"class":78,"line":33066},[76,36499,32420],{"class":136},[76,36501,87],{"class":86},[76,36503,3557],{"class":192},[76,36505,32428],{"class":136},[76,36507,33077],{"class":192},[76,36509,984],{"class":136},[76,36511,33082],{"class":82},[76,36513,1034],{"class":136},[76,36515,33087],{"class":192},[76,36517,984],{"class":136},[76,36519,33082],{"class":82},[76,36521,1034],{"class":136},[76,36523,3557],{"class":192},[76,36525,33098],{"class":86},[76,36527,620],{"class":82},[76,36529,305],{"class":136},[76,36531,33105],{"class":86},[76,36533,620],{"class":82},[76,36535,305],{"class":136},[76,36537,33112],{"class":86},[76,36539,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578],{"class":78,"line":33115},[76,36541,32420],{"class":136},[76,36543,87],{"class":86},[76,36545,3557],{"class":192},[76,36547,32428],{"class":136},[76,36549,33126],{"class":192},[76,36551,984],{"class":136},[76,36553,33082],{"class":82},[76,36555,1034],{"class":136},[76,36557,33135],{"class":192},[76,36559,984],{"class":136},[76,36561,33082],{"class":82},[76,36563,1034],{"class":136},[76,36565,3557],{"class":192},[76,36567,33146],{"class":86},[76,36569,620],{"class":82},[76,36571,305],{"class":136},[76,36573,33153],{"class":86},[76,36575,620],{"class":82},[76,36577,305],{"class":136},[76,36579,33112],{"class":86},[76,36581,36582],{"class":78,"line":33162},[76,36583,2365],{"emptyLinePlaceholder":2364},[76,36585,36586],{"class":78,"line":33167},[76,36587,33170],{"class":146},[76,36589,36590,36592,36594,36596,36598,36600,36602],{"class":78,"line":33173},[76,36591,2462],{"class":82},[76,36593,33178],{"class":86},[76,36595,620],{"class":82},[76,36597,305],{"class":136},[76,36599,1028],{"class":86},[76,36601,1048],{"class":82},[76,36603,33189],{"class":86},[76,36605,36606],{"class":78,"line":33192},[76,36607,33195],{"class":146},[76,36609,36610,36612,36614,36616,36618,36620,36622],{"class":78,"line":33198},[76,36611,33201],{"class":86},[76,36613,127],{"class":136},[76,36615,133],{"class":82},[76,36617,33208],{"class":86},[76,36619,620],{"class":82},[76,36621,305],{"class":136},[76,36623,33215],{"class":86},[76,36625,36626],{"class":78,"line":33218},[76,36627,33221],{"class":146},[76,36629,36630],{"class":78,"line":33224},[76,36631,33227],{"class":146},[76,36633,36634,36636,36638],{"class":78,"line":33230},[76,36635,33233],{"class":86},[76,36637,133],{"class":82},[76,36639,32283],{"class":86},[76,36641,36642],{"class":78,"line":33240},[76,36643,2365],{"emptyLinePlaceholder":2364},[76,36645,36646],{"class":78,"line":33245},[76,36647,33248],{"class":146},[76,36649,36650,36652,36654,36656,36658],{"class":78,"line":33251},[76,36651,33254],{"class":86},[76,36653,133],{"class":82},[76,36655,33259],{"class":86},[76,36657,620],{"class":82},[76,36659,33264],{"class":86},[76,36661,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696],{"class":78,"line":33267},[76,36663,32420],{"class":136},[76,36665,87],{"class":86},[76,36667,33274],{"class":192},[76,36669,984],{"class":136},[76,36671,33279],{"class":82},[76,36673,1034],{"class":136},[76,36675,632],{"class":192},[76,36677,984],{"class":136},[76,36679,33279],{"class":82},[76,36681,1034],{"class":136},[76,36683,33292],{"class":192},[76,36685,33295],{"class":86},[76,36687,33298],{"class":82},[76,36689,995],{"class":136},[76,36691,33303],{"class":86},[76,36693,416],{"class":82},[76,36695,995],{"class":136},[76,36697,30466],{"class":86},[76,36699,36700],{"class":78,"line":33312},[76,36701,36702],{"class":146},"    # 选择最优参数并保存\n",[76,36704,36705],{"class":78,"line":33318},[76,36706,36707],{"class":146},"    # 保存最佳模型权重字典\n",[76,36709,36710,36713,36715],{"class":78,"line":33324},[76,36711,36712],{"class":86},"    torch.save(best_model_wts,",[76,36714,33336],{"class":192},[76,36716,93],{"class":86},[76,36718,36719],{"class":78,"line":33330},[76,36720,33356],{"class":146},[76,36722,36723,36725,36727,36729,36731,36733],{"class":78,"line":33341},[76,36724,33362],{"class":86},[76,36726,133],{"class":82},[76,36728,33367],{"class":86},[76,36730,33370],{"class":5183},[76,36732,133],{"class":82},[76,36734,1510],{"class":86},[76,36736,36737,36739,36741,36743],{"class":78,"line":33347},[76,36738,33380],{"class":192},[76,36740,947],{"class":86},[76,36742,33385],{"class":136},[76,36744,33388],{"class":86},[76,36746,36747,36749],{"class":78,"line":33353},[76,36748,33394],{"class":192},[76,36750,33397],{"class":86},[76,36752,36753,36755],{"class":78,"line":33359},[76,36754,33403],{"class":192},[76,36756,33406],{"class":86},[76,36758,36759,36761],{"class":78,"line":33377},[76,36760,33412],{"class":192},[76,36762,33415],{"class":86},[76,36764,36765,36767],{"class":78,"line":33391},[76,36766,33421],{"class":192},[76,36768,33424],{"class":86},[76,36770,36771],{"class":78,"line":33400},[76,36772,33430],{"class":86},[76,36774,36775],{"class":78,"line":33409},[76,36776,33436],{"class":146},[76,36778,36779,36781],{"class":78,"line":33418},[76,36780,4055],{"class":82},[76,36782,33444],{"class":86},[76,36784,36785],{"class":78,"line":33427},[76,36786,2365],{"emptyLinePlaceholder":2364},[76,36788,36789],{"class":78,"line":33433},[76,36790,33455],{"class":146},[76,36792,36793,36795,36797],{"class":78,"line":33439},[76,36794,31916],{"class":82},[76,36796,33463],{"class":1927},[76,36798,33466],{"class":86},[76,36800,36801],{"class":78,"line":33447},[76,36802,33472],{"class":146},[76,36804,36805,36807,36809,36811,36813,36815,36817,36819],{"class":78,"line":33452},[76,36806,33478],{"class":86},[76,36808,31662],{"class":5183},[76,36810,133],{"class":82},[76,36812,87],{"class":86},[76,36814,586],{"class":136},[76,36816,466],{"class":86},[76,36818,381],{"class":136},[76,36820,30466],{"class":86},[76,36822,36823],{"class":78,"line":33458},[76,36824,33498],{"class":146},[76,36826,36827],{"class":78,"line":33469},[76,36828,33504],{"class":146},[76,36830,36831],{"class":78,"line":33475},[76,36832,33510],{"class":146},[76,36834,36835,36837,36839,36841,36843,36845,36847],{"class":78,"line":33495},[76,36836,31696],{"class":86},[76,36838,305],{"class":136},[76,36840,466],{"class":86},[76,36842,165],{"class":136},[76,36844,466],{"class":86},[76,36846,305],{"class":136},[76,36848,93],{"class":86},[76,36850,36851],{"class":78,"line":33501},[76,36852,33533],{"class":146},[76,36854,36855],{"class":78,"line":33507},[76,36856,33539],{"class":146},[76,36858,36859],{"class":78,"line":33513},[76,36860,33545],{"class":146},[76,36862,36863],{"class":78,"line":33530},[76,36864,33551],{"class":146},[76,36866,36867],{"class":78,"line":33536},[76,36868,33557],{"class":146},[76,36870,36871,36873,36875,36877,36879,36881,36883,36885,36887],{"class":78,"line":33542},[76,36872,33563],{"class":86},[76,36874,33566],{"class":192},[76,36876,33569],{"class":86},[76,36878,33572],{"class":192},[76,36880,466],{"class":86},[76,36882,33577],{"class":5183},[76,36884,133],{"class":82},[76,36886,33582],{"class":192},[76,36888,93],{"class":86},[76,36890,36891,36893,36895,36897,36899,36901,36903,36905,36907],{"class":78,"line":33548},[76,36892,33563],{"class":86},[76,36894,33566],{"class":192},[76,36896,33594],{"class":86},[76,36898,33597],{"class":192},[76,36900,466],{"class":86},[76,36902,33577],{"class":5183},[76,36904,133],{"class":82},[76,36906,33606],{"class":192},[76,36908,93],{"class":86},[76,36910,36911],{"class":78,"line":33554},[76,36912,33614],{"class":146},[76,36914,36915],{"class":78,"line":33560},[76,36916,33620],{"class":86},[76,36918,36919],{"class":78,"line":33587},[76,36920,33626],{"class":146},[76,36922,36923,36925,36927],{"class":78,"line":33611},[76,36924,33632],{"class":86},[76,36926,33635],{"class":192},[76,36928,93],{"class":86},[76,36930,36931,36933,36935],{"class":78,"line":33617},[76,36932,33643],{"class":86},[76,36934,33646],{"class":192},[76,36936,93],{"class":86},[76,36938,36939],{"class":78,"line":33623},[76,36940,33654],{"class":146},[76,36942,36943,36945,36947,36949,36951,36953,36955],{"class":78,"line":33629},[76,36944,31696],{"class":86},[76,36946,305],{"class":136},[76,36948,466],{"class":86},[76,36950,165],{"class":136},[76,36952,466],{"class":86},[76,36954,165],{"class":136},[76,36956,93],{"class":86},[76,36958,36959,36961,36963,36965,36967,36969,36971,36973,36975],{"class":78,"line":33640},[76,36960,33563],{"class":86},[76,36962,33566],{"class":192},[76,36964,33681],{"class":86},[76,36966,33572],{"class":192},[76,36968,466],{"class":86},[76,36970,33577],{"class":5183},[76,36972,133],{"class":82},[76,36974,33692],{"class":192},[76,36976,93],{"class":86},[76,36978,36979,36981,36983,36985,36987,36989,36991,36993,36995],{"class":78,"line":33651},[76,36980,33563],{"class":86},[76,36982,33566],{"class":192},[76,36984,33704],{"class":86},[76,36986,33597],{"class":192},[76,36988,466],{"class":86},[76,36990,33577],{"class":5183},[76,36992,133],{"class":82},[76,36994,33715],{"class":192},[76,36996,93],{"class":86},[76,36998,36999],{"class":78,"line":33657},[76,37000,33723],{"class":146},[76,37002,37003],{"class":78,"line":33674},[76,37004,33620],{"class":86},[76,37006,37007,37009,37011],{"class":78,"line":33697},[76,37008,33632],{"class":86},[76,37010,33566],{"class":192},[76,37012,93],{"class":86},[76,37014,37015,37017,37019],{"class":78,"line":33720},[76,37016,33643],{"class":86},[76,37018,33745],{"class":192},[76,37020,93],{"class":86},[76,37022,37023],{"class":78,"line":33726},[76,37024,33753],{"class":86},[76,37026,37027],{"class":78,"line":33731},[76,37028,2365],{"emptyLinePlaceholder":2364},[76,37030,37031],{"class":78,"line":33740},[76,37032,33764],{"class":146},[76,37034,37035,37037,37039,37041,37043],{"class":78,"line":33750},[76,37036,1495],{"class":82},[76,37038,31189],{"class":136},[76,37040,2914],{"class":82},[76,37042,31194],{"class":192},[76,37044,3704],{"class":86},[76,37046,37047],{"class":78,"line":33756},[76,37048,33783],{"class":146},[76,37050,37051,37054,37056],{"class":78,"line":33761},[76,37052,37053],{"class":86},"    AlexNet",[76,37055,133],{"class":82},[76,37057,37058],{"class":86},"AlexNet()\n",[76,37060,37061,37063,37065],{"class":78,"line":33767},[76,37062,33800],{"class":86},[76,37064,133],{"class":82},[76,37066,33805],{"class":86},[76,37068,37069,37071,37073,37076,37078,37080,37082],{"class":78,"line":33780},[76,37070,33362],{"class":86},[76,37072,133],{"class":82},[76,37074,37075],{"class":86},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[76,37077,33818],{"class":5183},[76,37079,133],{"class":82},[76,37081,788],{"class":136},[76,37083,93],{"class":86},[76,37085,37086],{"class":78,"line":33786},[76,37087,33830],{"class":86},[29,37089,37090],{"start":1143},[32,37091,33843],{},[66,37093,37095],{"className":30347,"code":37094,"language":30349,"meta":71,"style":71},"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",[73,37096,37097,37103,37113,37123,37133,37137,37147,37157,37168,37172,37176,37180,37188,37204,37214,37230,37240,37254,37258,37268,37278,37288,37294,37298,37302,37310,37314,37330,37338,37342,37346,37354,37362,37366,37370,37374,37378,37384,37388,37398,37406,37414,37418,37422,37426,37434,37438,37454,37458,37462,37466,37478,37482,37494,37498,37502,37514,37518,37528,37532,37536,37548,37552,37560,37564,37568,37576,37580,37588,37592,37596,37600,37604,37608,37624,37632,37636,37640,37688,37694,37698,37708,37716,37724,37728,37732,37736,37740,37748,37752,37768,37772,37780,37788],{"__ignoreMap":71},[76,37098,37099,37101],{"class":78,"line":79},[76,37100,30361],{"class":82},[76,37102,30364],{"class":86},[76,37104,37105,37107,37109,37111],{"class":78,"line":96},[76,37106,30361],{"class":82},[76,37108,31384],{"class":86},[76,37110,31352],{"class":82},[76,37112,31389],{"class":86},[76,37114,37115,37117,37119,37121],{"class":78,"line":1143},[76,37116,30706],{"class":82},[76,37118,33871],{"class":86},[76,37120,30361],{"class":82},[76,37122,33876],{"class":86},[76,37124,37125,37127,37129,37131],{"class":78,"line":1158},[76,37126,30706],{"class":82},[76,37128,31367],{"class":86},[76,37130,30361],{"class":82},[76,37132,31372],{"class":86},[76,37134,37135],{"class":78,"line":1164},[76,37136,33891],{"class":146},[76,37138,37139,37141,37143,37145],{"class":78,"line":1178},[76,37140,30706],{"class":82},[76,37142,31337],{"class":86},[76,37144,30361],{"class":82},[76,37146,31342],{"class":86},[76,37148,37149,37151,37153,37155],{"class":78,"line":1184},[76,37150,30706],{"class":82},[76,37152,31883],{"class":86},[76,37154,30361],{"class":82},[76,37156,35526],{"class":86},[76,37158,37159,37161,37164,37166],{"class":78,"line":1275},[76,37160,30706],{"class":82},[76,37162,37163],{"class":86}," 练习.AlexNet.model ",[76,37165,30361],{"class":82},[76,37167,35526],{"class":86},[76,37169,37170],{"class":78,"line":1281},[76,37171,2365],{"emptyLinePlaceholder":2364},[76,37173,37174],{"class":78,"line":1293},[76,37175,2365],{"emptyLinePlaceholder":2364},[76,37177,37178],{"class":78,"line":1576},[76,37179,33920],{"class":146},[76,37181,37182,37184,37186],{"class":78,"line":1581},[76,37183,31916],{"class":82},[76,37185,33927],{"class":1927},[76,37187,31922],{"class":86},[76,37189,37190,37192,37194,37196,37198,37200,37202],{"class":78,"line":1587},[76,37191,33934],{"class":86},[76,37193,133],{"class":82},[76,37195,31424],{"class":86},[76,37197,31427],{"class":5183},[76,37199,133],{"class":82},[76,37201,31432],{"class":192},[76,37203,31435],{"class":86},[76,37205,37206,37208,37210,37212],{"class":78,"line":1592},[76,37207,33951],{"class":5183},[76,37209,133],{"class":82},[76,37211,33956],{"class":136},[76,37213,31435],{"class":86},[76,37215,37216,37218,37220,37222,37224,37226,37228],{"class":78,"line":1606},[76,37217,33963],{"class":5183},[76,37219,133],{"class":82},[76,37221,31462],{"class":86},[76,37223,31465],{"class":5183},[76,37225,133],{"class":82},[76,37227,35418],{"class":136},[76,37229,31473],{"class":86},[76,37231,37232,37234,37236,37238],{"class":78,"line":1611},[76,37233,33980],{"class":5183},[76,37235,133],{"class":82},[76,37237,31445],{"class":136},[76,37239,93],{"class":86},[76,37241,37242,37244,37246,37248,37250,37252],{"class":78,"line":1617},[76,37243,33991],{"class":86},[76,37245,133],{"class":82},[76,37247,31503],{"class":86},[76,37249,31506],{"class":5183},[76,37251,133],{"class":82},[76,37253,34002],{"class":86},[76,37255,37256],{"class":78,"line":1638},[76,37257,34007],{"class":146},[76,37259,37260,37262,37264,37266],{"class":78,"line":1643},[76,37261,34012],{"class":5183},[76,37263,133],{"class":82},[76,37265,305],{"class":136},[76,37267,31435],{"class":86},[76,37269,37270,37272,37274,37276],{"class":78,"line":1657},[76,37271,34023],{"class":5183},[76,37273,133],{"class":82},[76,37275,31445],{"class":136},[76,37277,31435],{"class":86},[76,37279,37280,37282,37284,37286],{"class":78,"line":1662},[76,37281,34034],{"class":5183},[76,37283,133],{"class":82},[76,37285,279],{"class":136},[76,37287,93],{"class":86},[76,37289,37290,37292],{"class":78,"line":1691},[76,37291,4055],{"class":82},[76,37293,34047],{"class":86},[76,37295,37296],{"class":78,"line":1696},[76,37297,2365],{"emptyLinePlaceholder":2364},[76,37299,37300],{"class":78,"line":1713},[76,37301,34056],{"class":146},[76,37303,37304,37306,37308],{"class":78,"line":1718},[76,37305,31916],{"class":82},[76,37307,34063],{"class":1927},[76,37309,34066],{"class":86},[76,37311,37312],{"class":78,"line":1723},[76,37313,34071],{"class":146},[76,37315,37316,37318,37320,37322,37324,37326,37328],{"class":78,"line":1728},[76,37317,31206],{"class":86},[76,37319,133],{"class":82},[76,37321,31213],{"class":192},[76,37323,1668],{"class":82},[76,37325,31218],{"class":86},[76,37327,1665],{"class":82},[76,37329,34088],{"class":192},[76,37331,37332,37334,37336],{"class":78,"line":1742},[76,37333,31258],{"class":86},[76,37335,133],{"class":82},[76,37337,32258],{"class":86},[76,37339,37340],{"class":78,"line":1747},[76,37341,2365],{"emptyLinePlaceholder":2364},[76,37343,37344],{"class":78,"line":2542},[76,37345,34105],{"class":146},[76,37347,37348,37350,37352],{"class":78,"line":2556},[76,37349,34110],{"class":86},[76,37351,133],{"class":82},[76,37353,32311],{"class":136},[76,37355,37356,37358,37360],{"class":78,"line":2564},[76,37357,34119],{"class":86},[76,37359,133],{"class":82},[76,37361,3050],{"class":136},[76,37363,37364],{"class":78,"line":2569},[76,37365,2365],{"emptyLinePlaceholder":2364},[76,37367,37368],{"class":78,"line":2575},[76,37369,34132],{"class":146},[76,37371,37372],{"class":78,"line":2581},[76,37373,34137],{"class":146},[76,37375,37376],{"class":78,"line":2586},[76,37377,34142],{"class":146},[76,37379,37380,37382],{"class":78,"line":7915},[76,37381,34147],{"class":82},[76,37383,32853],{"class":86},[76,37385,37386],{"class":78,"line":7939},[76,37387,34154],{"class":146},[76,37389,37390,37392,37394,37396],{"class":78,"line":7944},[76,37391,3368],{"class":82},[76,37393,34161],{"class":86},[76,37395,26012],{"class":82},[76,37397,34166],{"class":86},[76,37399,37400,37402,37404],{"class":78,"line":7950},[76,37401,34171],{"class":86},[76,37403,133],{"class":82},[76,37405,34176],{"class":86},[76,37407,37408,37410,37412],{"class":78,"line":7977},[76,37409,34181],{"class":86},[76,37411,133],{"class":82},[76,37413,34186],{"class":86},[76,37415,37416],{"class":78,"line":7982},[76,37417,34191],{"class":146},[76,37419,37420],{"class":78,"line":7988},[76,37421,32844],{"class":86},[76,37423,37424],{"class":78,"line":8000},[76,37425,34200],{"class":146},[76,37427,37428,37430,37432],{"class":78,"line":8012},[76,37429,32629],{"class":86},[76,37431,133],{"class":82},[76,37433,34209],{"class":86},[76,37435,37436],{"class":78,"line":8024},[76,37437,34214],{"class":146},[76,37439,37440,37442,37444,37446,37448,37450,37452],{"class":78,"line":9683},[76,37441,32646],{"class":86},[76,37443,133],{"class":82},[76,37445,32651],{"class":86},[76,37447,32654],{"class":5183},[76,37449,133],{"class":82},[76,37451,305],{"class":136},[76,37453,93],{"class":86},[76,37455,37456],{"class":78,"line":9708},[76,37457,34235],{"class":146},[76,37459,37460],{"class":78,"line":9731},[76,37461,34240],{"class":146},[76,37463,37464],{"class":78,"line":9755},[76,37465,34245],{"class":146},[76,37467,37468,37470,37472,37474,37476],{"class":78,"line":9760},[76,37469,34250],{"class":86},[76,37471,9444],{"class":82},[76,37473,32756],{"class":86},[76,37475,2914],{"class":82},[76,37477,34259],{"class":86},[76,37479,37480],{"class":78,"line":9765},[76,37481,34264],{"class":146},[76,37483,37484,37486,37488,37490,37492],{"class":78,"line":9770},[76,37485,34269],{"class":86},[76,37487,9444],{"class":82},[76,37489,34274],{"class":86},[76,37491,279],{"class":136},[76,37493,93],{"class":86},[76,37495,37496],{"class":78,"line":9779},[76,37497,2365],{"emptyLinePlaceholder":2364},[76,37499,37500],{"class":78,"line":9784},[76,37501,34287],{"class":146},[76,37503,37504,37506,37508,37510,37512],{"class":78,"line":9790},[76,37505,34292],{"class":86},[76,37507,133],{"class":82},[76,37509,34297],{"class":86},[76,37511,672],{"class":82},[76,37513,34302],{"class":86},[76,37515,37516],{"class":78,"line":9811},[76,37517,34307],{"class":146},[76,37519,37520,37522,37524,37526],{"class":78,"line":9817},[76,37521,32420],{"class":136},[76,37523,87],{"class":86},[76,37525,34316],{"class":192},[76,37527,34319],{"class":86},[76,37529,37530],{"class":78,"line":9831},[76,37531,2365],{"emptyLinePlaceholder":2364},[76,37533,37534],{"class":78,"line":9837},[76,37535,34328],{"class":146},[76,37537,37538,37540,37542,37544,37546],{"class":78,"line":9864},[76,37539,1495],{"class":82},[76,37541,31189],{"class":136},[76,37543,2914],{"class":82},[76,37545,31194],{"class":192},[76,37547,3704],{"class":86},[76,37549,37550],{"class":78,"line":9873},[76,37551,34345],{"class":146},[76,37553,37554,37556,37558],{"class":78,"line":9879},[76,37555,31258],{"class":86},[76,37557,133],{"class":82},[76,37559,37058],{"class":86},[76,37561,37562],{"class":78,"line":9887},[76,37563,34358],{"class":146},[76,37565,37566],{"class":78,"line":9892},[76,37567,34363],{"class":146},[76,37569,37570,37572,37574],{"class":78,"line":16571},[76,37571,34368],{"class":86},[76,37573,34371],{"class":192},[76,37575,30466],{"class":86},[76,37577,37578],{"class":78,"line":16577},[76,37579,34378],{"class":146},[76,37581,37582,37584,37586],{"class":78,"line":16600},[76,37583,33991],{"class":86},[76,37585,133],{"class":82},[76,37587,34387],{"class":86},[76,37589,37590],{"class":78,"line":16606},[76,37591,34392],{"class":146},[76,37593,37594],{"class":78,"line":16629},[76,37595,34397],{"class":86},[76,37597,37598],{"class":78,"line":16643},[76,37599,2365],{"emptyLinePlaceholder":2364},[76,37601,37602],{"class":78,"line":16663},[76,37603,34406],{"class":146},[76,37605,37606],{"class":78,"line":16669},[76,37607,34411],{"class":146},[76,37609,37610,37612,37614,37616,37618,37620,37622],{"class":78,"line":16680},[76,37611,31206],{"class":86},[76,37613,133],{"class":82},[76,37615,31213],{"class":192},[76,37617,1668],{"class":82},[76,37619,31218],{"class":86},[76,37621,1665],{"class":82},[76,37623,34088],{"class":192},[76,37625,37626,37628,37630],{"class":78,"line":16703},[76,37627,31258],{"class":86},[76,37629,133],{"class":82},[76,37631,32258],{"class":86},[76,37633,37634],{"class":78,"line":16725},[76,37635,34440],{"class":146},[76,37637,37638],{"class":78,"line":16730},[76,37639,34445],{"class":146},[76,37641,37642,37644,37646,37648,37650,37652,37654,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686],{"class":78,"line":16736},[76,37643,34450],{"class":86},[76,37645,133],{"class":82},[76,37647,978],{"class":86},[76,37649,34457],{"class":192},[76,37651,466],{"class":86},[76,37653,34462],{"class":192},[76,37655,466],{"class":86},[76,37657,34467],{"class":192},[76,37659,466],{"class":86},[76,37661,34472],{"class":192},[76,37663,466],{"class":86},[76,37665,34477],{"class":192},[76,37667,466],{"class":86},[76,37669,34482],{"class":192},[76,37671,466],{"class":86},[76,37673,34487],{"class":192},[76,37675,466],{"class":86},[76,37677,34492],{"class":192},[76,37679,466],{"class":86},[76,37681,34497],{"class":192},[76,37683,466],{"class":86},[76,37685,34502],{"class":192},[76,37687,33215],{"class":86},[76,37689,37690,37692],{"class":78,"line":16750},[76,37691,34147],{"class":82},[76,37693,32853],{"class":86},[76,37695,37696],{"class":78,"line":16763},[76,37697,34515],{"class":146},[76,37699,37700,37702,37704,37706],{"class":78,"line":16768},[76,37701,3368],{"class":82},[76,37703,34522],{"class":86},[76,37705,26012],{"class":82},[76,37707,34166],{"class":86},[76,37709,37710,37712,37714],{"class":78,"line":16782},[76,37711,32579],{"class":86},[76,37713,133],{"class":82},[76,37715,32584],{"class":86},[76,37717,37718,37720,37722],{"class":78,"line":16787},[76,37719,32594],{"class":86},[76,37721,133],{"class":82},[76,37723,32599],{"class":86},[76,37725,37726],{"class":78,"line":16793},[76,37727,2365],{"emptyLinePlaceholder":2364},[76,37729,37730],{"class":78,"line":16798},[76,37731,34551],{"class":146},[76,37733,37734],{"class":78,"line":16812},[76,37735,32844],{"class":86},[76,37737,37738],{"class":78,"line":16817},[76,37739,34560],{"class":146},[76,37741,37742,37744,37746],{"class":78,"line":16822},[76,37743,32629],{"class":86},[76,37745,133],{"class":82},[76,37747,32634],{"class":86},[76,37749,37750],{"class":78,"line":16836},[76,37751,34573],{"class":146},[76,37753,37754,37756,37758,37760,37762,37764,37766],{"class":78,"line":16848},[76,37755,32646],{"class":86},[76,37757,133],{"class":82},[76,37759,32651],{"class":86},[76,37761,32654],{"class":5183},[76,37763,133],{"class":82},[76,37765,305],{"class":136},[76,37767,93],{"class":86},[76,37769,37770],{"class":78,"line":16853},[76,37771,34594],{"class":146},[76,37773,37774,37776,37778],{"class":78,"line":16866},[76,37775,34599],{"class":86},[76,37777,133],{"class":82},[76,37779,34604],{"class":86},[76,37781,37782,37784,37786],{"class":78,"line":16871},[76,37783,34609],{"class":86},[76,37785,133],{"class":82},[76,37787,34614],{"class":86},[76,37789,37790,37792,37794,37796,37798,37800,37802,37804],{"class":78,"line":16876},[76,37791,34619],{"class":136},[76,37793,87],{"class":86},[76,37795,34624],{"class":192},[76,37797,34627],{"class":86},[76,37799,34630],{"class":192},[76,37801,466],{"class":86},[76,37803,34635],{"class":192},[76,37805,34638],{"class":86},[46,37807,37809],{"id":37808},"_22vgg","2.2.VGG",[21965,37811,37813],{"id":37812},"_221原理","2.2.1.原理",[21,37815,37816],{},[1426,37817],{"alt":71,"src":37818},"\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",[21,37820,37821],{},[1426,37822],{"alt":71,"src":37823},"\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",[21,37825,37826],{},[1426,37827],{"alt":71,"src":37828},"\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",[21,37830,37831],{},"参数详细描述：",[21,37833,37834],{},[1426,37835],{"alt":71,"src":37836},"\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",[21,37838,37839],{},[1426,37840],{"alt":71,"src":37841},"\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",[21,37843,37844],{},[1426,37845],{"alt":71,"src":37846},"\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",[21,37848,37849],{},[1426,37850],{"alt":71,"src":37851},"\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",[21,37853,37854],{},[1426,37855],{"alt":71,"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-022.png",[21965,37858,37860],{"id":37859},"_222代码实现","2.2.2.代码实现",[29,37862,37863],{},[32,37864,37865],{},"网络搭建",[66,37867,37869],{"className":30347,"code":37868,"language":30349,"meta":71,"style":71},"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",[73,37870,37871,37877,37889,37899,37909,37913,37930,37938,37957,37962,37967,37979,38017,38022,38058,38062,38091,38096,38101,38112,38148,38152,38188,38192,38220,38224,38229,38240,38276,38280,38316,38320,38356,38360,38388,38392,38397,38408,38445,38449,38485,38489,38525,38529,38557,38561,38566,38577,38613,38617,38653,38657,38693,38697,38725,38729,38734,38745,38750,38755,38760,38781,38785,38797,38801,38813,38817,38821,38826,38831,38846,38851,38861,38866,38881,38886,38905,38910,38919,38924,38934,38939,38944,38958,38963,38977,38985,38989,38993,39001,39012,39023,39034,39045,39056,39067,39073,39077,39082,39095,39115,39121,39130],{"__ignoreMap":71},[76,37872,37873,37875],{"class":78,"line":79},[76,37874,30361],{"class":82},[76,37876,30364],{"class":86},[76,37878,37879,37881,37884,37886],{"class":78,"line":96},[76,37880,30706],{"class":82},[76,37882,37883],{"class":86}," sympy.core.sympify ",[76,37885,30361],{"class":82},[76,37887,37888],{"class":86}," kernS\n",[76,37890,37891,37893,37895,37897],{"class":78,"line":1143},[76,37892,30706],{"class":82},[76,37894,30709],{"class":86},[76,37896,30361],{"class":82},[76,37898,30714],{"class":86},[76,37900,37901,37903,37905,37907],{"class":78,"line":1158},[76,37902,30706],{"class":82},[76,37904,30726],{"class":86},[76,37906,30361],{"class":82},[76,37908,30731],{"class":86},[76,37910,37911],{"class":78,"line":1164},[76,37912,2365],{"emptyLinePlaceholder":2364},[76,37914,37915,37917,37920,37922,37924,37926,37928],{"class":78,"line":1178},[76,37916,14661],{"class":82},[76,37918,37919],{"class":1927}," VGG16",[76,37921,87],{"class":86},[76,37923,30747],{"class":1927},[76,37925,646],{"class":86},[76,37927,30752],{"class":1927},[76,37929,30755],{"class":86},[76,37931,37932,37934,37936],{"class":78,"line":1184},[76,37933,30770],{"class":82},[76,37935,30773],{"class":136},[76,37937,30776],{"class":86},[76,37939,37940,37942,37944,37947,37949,37951,37953,37955],{"class":78,"line":1275},[76,37941,30786],{"class":136},[76,37943,87],{"class":86},[76,37945,37946],{"class":136},"VGG16",[76,37948,12402],{"class":86},[76,37950,30792],{"class":136},[76,37952,30795],{"class":86},[76,37954,30798],{"class":136},[76,37956,1940],{"class":86},[76,37958,37959],{"class":78,"line":1281},[76,37960,37961],{"class":146},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[76,37963,37964],{"class":78,"line":1293},[76,37965,37966],{"class":146},"        # 这里用的是灰度图\n",[76,37968,37969,37971,37974,37976],{"class":78,"line":1576},[76,37970,30814],{"class":136},[76,37972,37973],{"class":86},".block1",[76,37975,133],{"class":82},[76,37977,37978],{"class":86},"nn.Sequential(\n",[76,37980,37981,37984,37986,37988,37990,37992,37994,37996,37998,38000,38002,38004,38006,38008,38010,38012,38014],{"class":78,"line":1581},[76,37982,37983],{"class":86},"            nn.Conv2d(",[76,37985,30825],{"class":5183},[76,37987,133],{"class":82},[76,37989,305],{"class":136},[76,37991,466],{"class":86},[76,37993,30834],{"class":5183},[76,37995,133],{"class":82},[76,37997,291],{"class":136},[76,37999,466],{"class":86},[76,38001,30843],{"class":5183},[76,38003,133],{"class":82},[76,38005,159],{"class":136},[76,38007,466],{"class":86},[76,38009,30852],{"class":5183},[76,38011,133],{"class":82},[76,38013,305],{"class":136},[76,38015,38016],{"class":86},"),\n",[76,38018,38019],{"class":78,"line":1587},[76,38020,38021],{"class":86},"            nn.ReLU(),\n",[76,38023,38024,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056],{"class":78,"line":1592},[76,38025,37983],{"class":86},[76,38027,30825],{"class":5183},[76,38029,133],{"class":82},[76,38031,291],{"class":136},[76,38033,466],{"class":86},[76,38035,30834],{"class":5183},[76,38037,133],{"class":82},[76,38039,291],{"class":136},[76,38041,466],{"class":86},[76,38043,30843],{"class":5183},[76,38045,133],{"class":82},[76,38047,159],{"class":136},[76,38049,466],{"class":86},[76,38051,30852],{"class":5183},[76,38053,133],{"class":82},[76,38055,305],{"class":136},[76,38057,38016],{"class":86},[76,38059,38060],{"class":78,"line":1606},[76,38061,38021],{"class":86},[76,38063,38064,38067,38069,38071,38073,38075,38077,38079,38081,38083,38085,38087,38089],{"class":78,"line":1611},[76,38065,38066],{"class":86},"            nn.MaxPool2d(",[76,38068,30843],{"class":5183},[76,38070,133],{"class":82},[76,38072,165],{"class":136},[76,38074,466],{"class":86},[76,38076,30898],{"class":5183},[76,38078,133],{"class":82},[76,38080,165],{"class":136},[76,38082,466],{"class":86},[76,38084,30852],{"class":5183},[76,38086,133],{"class":82},[76,38088,279],{"class":136},[76,38090,93],{"class":86},[76,38092,38093],{"class":78,"line":1617},[76,38094,38095],{"class":86},"        )\n",[76,38097,38098],{"class":78,"line":1638},[76,38099,38100],{"class":146},"        # 第二层\n",[76,38102,38103,38105,38108,38110],{"class":78,"line":1643},[76,38104,30814],{"class":136},[76,38106,38107],{"class":86},".block2",[76,38109,133],{"class":82},[76,38111,37978],{"class":86},[76,38113,38114,38116,38118,38120,38122,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146],{"class":78,"line":1657},[76,38115,37983],{"class":86},[76,38117,30825],{"class":5183},[76,38119,133],{"class":82},[76,38121,291],{"class":136},[76,38123,466],{"class":86},[76,38125,30834],{"class":5183},[76,38127,133],{"class":82},[76,38129,32039],{"class":136},[76,38131,466],{"class":86},[76,38133,30843],{"class":5183},[76,38135,133],{"class":82},[76,38137,159],{"class":136},[76,38139,466],{"class":86},[76,38141,30852],{"class":5183},[76,38143,133],{"class":82},[76,38145,305],{"class":136},[76,38147,38016],{"class":86},[76,38149,38150],{"class":78,"line":1662},[76,38151,38021],{"class":86},[76,38153,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186],{"class":78,"line":1691},[76,38155,37983],{"class":86},[76,38157,30825],{"class":5183},[76,38159,133],{"class":82},[76,38161,32039],{"class":136},[76,38163,466],{"class":86},[76,38165,30834],{"class":5183},[76,38167,133],{"class":82},[76,38169,32039],{"class":136},[76,38171,466],{"class":86},[76,38173,30843],{"class":5183},[76,38175,133],{"class":82},[76,38177,159],{"class":136},[76,38179,466],{"class":86},[76,38181,30852],{"class":5183},[76,38183,133],{"class":82},[76,38185,305],{"class":136},[76,38187,38016],{"class":86},[76,38189,38190],{"class":78,"line":1696},[76,38191,38021],{"class":86},[76,38193,38194,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218],{"class":78,"line":1713},[76,38195,38066],{"class":86},[76,38197,30843],{"class":5183},[76,38199,133],{"class":82},[76,38201,165],{"class":136},[76,38203,466],{"class":86},[76,38205,30898],{"class":5183},[76,38207,133],{"class":82},[76,38209,165],{"class":136},[76,38211,466],{"class":86},[76,38213,30852],{"class":5183},[76,38215,133],{"class":82},[76,38217,279],{"class":136},[76,38219,93],{"class":86},[76,38221,38222],{"class":78,"line":1718},[76,38223,38095],{"class":86},[76,38225,38226],{"class":78,"line":1723},[76,38227,38228],{"class":146},"        # 第三层\n",[76,38230,38231,38233,38236,38238],{"class":78,"line":1728},[76,38232,30814],{"class":136},[76,38234,38235],{"class":86},".block3",[76,38237,133],{"class":82},[76,38239,37978],{"class":86},[76,38241,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274],{"class":78,"line":1742},[76,38243,37983],{"class":86},[76,38245,30825],{"class":5183},[76,38247,133],{"class":82},[76,38249,32039],{"class":136},[76,38251,466],{"class":86},[76,38253,30834],{"class":5183},[76,38255,133],{"class":82},[76,38257,34839],{"class":136},[76,38259,466],{"class":86},[76,38261,30843],{"class":5183},[76,38263,133],{"class":82},[76,38265,159],{"class":136},[76,38267,466],{"class":86},[76,38269,30852],{"class":5183},[76,38271,133],{"class":82},[76,38273,305],{"class":136},[76,38275,38016],{"class":86},[76,38277,38278],{"class":78,"line":1747},[76,38279,38021],{"class":86},[76,38281,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314],{"class":78,"line":2542},[76,38283,37983],{"class":86},[76,38285,30825],{"class":5183},[76,38287,133],{"class":82},[76,38289,34839],{"class":136},[76,38291,466],{"class":86},[76,38293,30834],{"class":5183},[76,38295,133],{"class":82},[76,38297,34839],{"class":136},[76,38299,466],{"class":86},[76,38301,30843],{"class":5183},[76,38303,133],{"class":82},[76,38305,159],{"class":136},[76,38307,466],{"class":86},[76,38309,30852],{"class":5183},[76,38311,133],{"class":82},[76,38313,305],{"class":136},[76,38315,38016],{"class":86},[76,38317,38318],{"class":78,"line":2556},[76,38319,38021],{"class":86},[76,38321,38322,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354],{"class":78,"line":2564},[76,38323,37983],{"class":86},[76,38325,30825],{"class":5183},[76,38327,133],{"class":82},[76,38329,34839],{"class":136},[76,38331,466],{"class":86},[76,38333,30834],{"class":5183},[76,38335,133],{"class":82},[76,38337,34839],{"class":136},[76,38339,466],{"class":86},[76,38341,30843],{"class":5183},[76,38343,133],{"class":82},[76,38345,159],{"class":136},[76,38347,466],{"class":86},[76,38349,30852],{"class":5183},[76,38351,133],{"class":82},[76,38353,305],{"class":136},[76,38355,38016],{"class":86},[76,38357,38358],{"class":78,"line":2569},[76,38359,38021],{"class":86},[76,38361,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386],{"class":78,"line":2575},[76,38363,38066],{"class":86},[76,38365,30843],{"class":5183},[76,38367,133],{"class":82},[76,38369,165],{"class":136},[76,38371,466],{"class":86},[76,38373,30898],{"class":5183},[76,38375,133],{"class":82},[76,38377,165],{"class":136},[76,38379,466],{"class":86},[76,38381,30852],{"class":5183},[76,38383,133],{"class":82},[76,38385,279],{"class":136},[76,38387,93],{"class":86},[76,38389,38390],{"class":78,"line":2581},[76,38391,38095],{"class":86},[76,38393,38394],{"class":78,"line":2586},[76,38395,38396],{"class":146},"        # 第四层\n",[76,38398,38399,38401,38404,38406],{"class":78,"line":7915},[76,38400,30814],{"class":136},[76,38402,38403],{"class":86},".block4",[76,38405,133],{"class":82},[76,38407,37978],{"class":86},[76,38409,38410,38412,38414,38416,38418,38420,38422,38424,38427,38429,38431,38433,38435,38437,38439,38441,38443],{"class":78,"line":7939},[76,38411,37983],{"class":86},[76,38413,30825],{"class":5183},[76,38415,133],{"class":82},[76,38417,34839],{"class":136},[76,38419,466],{"class":86},[76,38421,30834],{"class":5183},[76,38423,133],{"class":82},[76,38425,38426],{"class":136},"512",[76,38428,466],{"class":86},[76,38430,30843],{"class":5183},[76,38432,133],{"class":82},[76,38434,159],{"class":136},[76,38436,466],{"class":86},[76,38438,30852],{"class":5183},[76,38440,133],{"class":82},[76,38442,305],{"class":136},[76,38444,38016],{"class":86},[76,38446,38447],{"class":78,"line":7944},[76,38448,38021],{"class":86},[76,38450,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483],{"class":78,"line":7950},[76,38452,37983],{"class":86},[76,38454,30825],{"class":5183},[76,38456,133],{"class":82},[76,38458,38426],{"class":136},[76,38460,466],{"class":86},[76,38462,30834],{"class":5183},[76,38464,133],{"class":82},[76,38466,38426],{"class":136},[76,38468,466],{"class":86},[76,38470,30843],{"class":5183},[76,38472,133],{"class":82},[76,38474,159],{"class":136},[76,38476,466],{"class":86},[76,38478,30852],{"class":5183},[76,38480,133],{"class":82},[76,38482,305],{"class":136},[76,38484,38016],{"class":86},[76,38486,38487],{"class":78,"line":7977},[76,38488,38021],{"class":86},[76,38490,38491,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523],{"class":78,"line":7982},[76,38492,37983],{"class":86},[76,38494,30825],{"class":5183},[76,38496,133],{"class":82},[76,38498,38426],{"class":136},[76,38500,466],{"class":86},[76,38502,30834],{"class":5183},[76,38504,133],{"class":82},[76,38506,38426],{"class":136},[76,38508,466],{"class":86},[76,38510,30843],{"class":5183},[76,38512,133],{"class":82},[76,38514,159],{"class":136},[76,38516,466],{"class":86},[76,38518,30852],{"class":5183},[76,38520,133],{"class":82},[76,38522,305],{"class":136},[76,38524,38016],{"class":86},[76,38526,38527],{"class":78,"line":7988},[76,38528,38021],{"class":86},[76,38530,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":78,"line":8000},[76,38532,38066],{"class":86},[76,38534,30843],{"class":5183},[76,38536,133],{"class":82},[76,38538,165],{"class":136},[76,38540,466],{"class":86},[76,38542,30898],{"class":5183},[76,38544,133],{"class":82},[76,38546,165],{"class":136},[76,38548,466],{"class":86},[76,38550,30852],{"class":5183},[76,38552,133],{"class":82},[76,38554,279],{"class":136},[76,38556,93],{"class":86},[76,38558,38559],{"class":78,"line":8012},[76,38560,38095],{"class":86},[76,38562,38563],{"class":78,"line":8024},[76,38564,38565],{"class":146},"        # 第五层\n",[76,38567,38568,38570,38573,38575],{"class":78,"line":9683},[76,38569,30814],{"class":136},[76,38571,38572],{"class":86},".block5",[76,38574,133],{"class":82},[76,38576,37978],{"class":86},[76,38578,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611],{"class":78,"line":9708},[76,38580,37983],{"class":86},[76,38582,30825],{"class":5183},[76,38584,133],{"class":82},[76,38586,38426],{"class":136},[76,38588,466],{"class":86},[76,38590,30834],{"class":5183},[76,38592,133],{"class":82},[76,38594,38426],{"class":136},[76,38596,466],{"class":86},[76,38598,30843],{"class":5183},[76,38600,133],{"class":82},[76,38602,159],{"class":136},[76,38604,466],{"class":86},[76,38606,30852],{"class":5183},[76,38608,133],{"class":82},[76,38610,305],{"class":136},[76,38612,38016],{"class":86},[76,38614,38615],{"class":78,"line":9731},[76,38616,38021],{"class":86},[76,38618,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651],{"class":78,"line":9755},[76,38620,37983],{"class":86},[76,38622,30825],{"class":5183},[76,38624,133],{"class":82},[76,38626,38426],{"class":136},[76,38628,466],{"class":86},[76,38630,30834],{"class":5183},[76,38632,133],{"class":82},[76,38634,38426],{"class":136},[76,38636,466],{"class":86},[76,38638,30843],{"class":5183},[76,38640,133],{"class":82},[76,38642,159],{"class":136},[76,38644,466],{"class":86},[76,38646,30852],{"class":5183},[76,38648,133],{"class":82},[76,38650,305],{"class":136},[76,38652,38016],{"class":86},[76,38654,38655],{"class":78,"line":9760},[76,38656,38021],{"class":86},[76,38658,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691],{"class":78,"line":9765},[76,38660,37983],{"class":86},[76,38662,30825],{"class":5183},[76,38664,133],{"class":82},[76,38666,38426],{"class":136},[76,38668,466],{"class":86},[76,38670,30834],{"class":5183},[76,38672,133],{"class":82},[76,38674,38426],{"class":136},[76,38676,466],{"class":86},[76,38678,30843],{"class":5183},[76,38680,133],{"class":82},[76,38682,159],{"class":136},[76,38684,466],{"class":86},[76,38686,30852],{"class":5183},[76,38688,133],{"class":82},[76,38690,305],{"class":136},[76,38692,38016],{"class":86},[76,38694,38695],{"class":78,"line":9770},[76,38696,38021],{"class":86},[76,38698,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":78,"line":9779},[76,38700,38066],{"class":86},[76,38702,30843],{"class":5183},[76,38704,133],{"class":82},[76,38706,165],{"class":136},[76,38708,466],{"class":86},[76,38710,30898],{"class":5183},[76,38712,133],{"class":82},[76,38714,165],{"class":136},[76,38716,466],{"class":86},[76,38718,30852],{"class":5183},[76,38720,133],{"class":82},[76,38722,279],{"class":136},[76,38724,93],{"class":86},[76,38726,38727],{"class":78,"line":9784},[76,38728,38095],{"class":86},[76,38730,38731],{"class":78,"line":9790},[76,38732,38733],{"class":146},"        # 全连接层\n",[76,38735,38736,38738,38741,38743],{"class":78,"line":9811},[76,38737,30814],{"class":136},[76,38739,38740],{"class":86},".block6",[76,38742,133],{"class":82},[76,38744,37978],{"class":86},[76,38746,38747],{"class":78,"line":9817},[76,38748,38749],{"class":146},"            # 平展操作\n",[76,38751,38752],{"class":78,"line":9831},[76,38753,38754],{"class":146},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[76,38756,38757],{"class":78,"line":9837},[76,38758,38759],{"class":86},"            nn.Flatten(),\n",[76,38761,38762,38765,38767,38769,38771,38773,38775,38777,38779],{"class":78,"line":9864},[76,38763,38764],{"class":86},"            nn.Linear(",[76,38766,457],{"class":136},[76,38768,543],{"class":82},[76,38770,457],{"class":136},[76,38772,543],{"class":82},[76,38774,38426],{"class":136},[76,38776,466],{"class":86},[76,38778,34839],{"class":136},[76,38780,38016],{"class":86},[76,38782,38783],{"class":78,"line":9873},[76,38784,38021],{"class":86},[76,38786,38787,38789,38791,38793,38795],{"class":78,"line":9879},[76,38788,38764],{"class":86},[76,38790,34839],{"class":136},[76,38792,466],{"class":86},[76,38794,32039],{"class":136},[76,38796,38016],{"class":86},[76,38798,38799],{"class":78,"line":9887},[76,38800,38021],{"class":86},[76,38802,38803,38805,38807,38809,38811],{"class":78,"line":9892},[76,38804,38764],{"class":86},[76,38806,32039],{"class":136},[76,38808,466],{"class":86},[76,38810,534],{"class":136},[76,38812,93],{"class":86},[76,38814,38815],{"class":78,"line":16571},[76,38816,38095],{"class":86},[76,38818,38819],{"class":78,"line":16577},[76,38820,2365],{"emptyLinePlaceholder":2364},[76,38822,38823],{"class":78,"line":16600},[76,38824,38825],{"class":146},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[76,38827,38828],{"class":78,"line":16606},[76,38829,38830],{"class":146},"        # 循环遍历模型\n",[76,38832,38833,38835,38838,38840,38843],{"class":78,"line":16629},[76,38834,3368],{"class":82},[76,38836,38837],{"class":86}," m ",[76,38839,26012],{"class":82},[76,38841,38842],{"class":136}," self",[76,38844,38845],{"class":86},".modules():\n",[76,38847,38848],{"class":78,"line":16643},[76,38849,38850],{"class":146},"            # print(m)\n",[76,38852,38853,38855,38858],{"class":78,"line":16663},[76,38854,4607],{"class":82},[76,38856,38857],{"class":136}," isinstance",[76,38859,38860],{"class":86},"(m,nn.Conv2d):\n",[76,38862,38863],{"class":78,"line":16669},[76,38864,38865],{"class":146},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[76,38867,38868,38871,38874,38876,38879],{"class":78,"line":16680},[76,38869,38870],{"class":86},"                nn.init.kaiming_normal_(m.weight,",[76,38872,38873],{"class":5183},"nonlinearity",[76,38875,133],{"class":82},[76,38877,38878],{"class":192},"'relu'",[76,38880,93],{"class":86},[76,38882,38883],{"class":78,"line":16703},[76,38884,38885],{"class":146},"                # 判断b参数是否存在\n",[76,38887,38888,38891,38894,38897,38900,38903],{"class":78,"line":16725},[76,38889,38890],{"class":82},"                if",[76,38892,38893],{"class":86}," m.bias ",[76,38895,38896],{"class":82},"is",[76,38898,38899],{"class":82}," not",[76,38901,38902],{"class":136}," None",[76,38904,3704],{"class":86},[76,38906,38907],{"class":78,"line":16730},[76,38908,38909],{"class":146},"                    # 如果参数不存在的化初始化b=0\n",[76,38911,38912,38915,38917],{"class":78,"line":16736},[76,38913,38914],{"class":86},"                    nn.init.constant_(m.bias,",[76,38916,279],{"class":136},[76,38918,93],{"class":86},[76,38920,38921],{"class":78,"line":16750},[76,38922,38923],{"class":146},"            # 全连接层初始化\n",[76,38925,38926,38929,38931],{"class":78,"line":16763},[76,38927,38928],{"class":82},"            elif",[76,38930,38857],{"class":136},[76,38932,38933],{"class":86},"(m,nn.Linear):\n",[76,38935,38936],{"class":78,"line":16768},[76,38937,38938],{"class":146},"                # 这个初始化方法是利用的是正太分布的方式\n",[76,38940,38941],{"class":78,"line":16782},[76,38942,38943],{"class":146},"                # 均值为0，方差为0.01\n",[76,38945,38946,38949,38951,38953,38956],{"class":78,"line":16787},[76,38947,38948],{"class":86},"                nn.init.normal_(m.weight,",[76,38950,279],{"class":136},[76,38952,466],{"class":86},[76,38954,38955],{"class":136},"0.01",[76,38957,93],{"class":86},[76,38959,38960],{"class":78,"line":16793},[76,38961,38962],{"class":146},"                # 初始化b参数\n",[76,38964,38965,38967,38969,38971,38973,38975],{"class":78,"line":16798},[76,38966,38890],{"class":82},[76,38968,38893],{"class":86},[76,38970,38896],{"class":82},[76,38972,38899],{"class":82},[76,38974,38902],{"class":136},[76,38976,3704],{"class":86},[76,38978,38979,38981,38983],{"class":78,"line":16812},[76,38980,38914],{"class":86},[76,38982,279],{"class":136},[76,38984,93],{"class":86},[76,38986,38987],{"class":78,"line":16817},[76,38988,2365],{"emptyLinePlaceholder":2364},[76,38990,38991],{"class":78,"line":16822},[76,38992,35134],{"class":146},[76,38994,38995,38997,38999],{"class":78,"line":16836},[76,38996,30770],{"class":82},[76,38998,31062],{"class":1927},[76,39000,31065],{"class":86},[76,39002,39003,39005,39007,39009],{"class":78,"line":16848},[76,39004,31070],{"class":86},[76,39006,133],{"class":82},[76,39008,30792],{"class":136},[76,39010,39011],{"class":86},".block1(x)\n",[76,39013,39014,39016,39018,39020],{"class":78,"line":16853},[76,39015,31070],{"class":86},[76,39017,133],{"class":82},[76,39019,30792],{"class":136},[76,39021,39022],{"class":86},".block2(x)\n",[76,39024,39025,39027,39029,39031],{"class":78,"line":16866},[76,39026,31070],{"class":86},[76,39028,133],{"class":82},[76,39030,30792],{"class":136},[76,39032,39033],{"class":86},".block3(x)\n",[76,39035,39036,39038,39040,39042],{"class":78,"line":16871},[76,39037,31070],{"class":86},[76,39039,133],{"class":82},[76,39041,30792],{"class":136},[76,39043,39044],{"class":86},".block4(x)\n",[76,39046,39047,39049,39051,39053],{"class":78,"line":16876},[76,39048,31070],{"class":86},[76,39050,133],{"class":82},[76,39052,30792],{"class":136},[76,39054,39055],{"class":86},".block5(x)\n",[76,39057,39058,39060,39062,39064],{"class":78,"line":16881},[76,39059,31070],{"class":86},[76,39061,133],{"class":82},[76,39063,30792],{"class":136},[76,39065,39066],{"class":86},".block6(x)\n",[76,39068,39069,39071],{"class":78,"line":16894},[76,39070,14719],{"class":82},[76,39072,31178],{"class":86},[76,39074,39075],{"class":78,"line":16899},[76,39076,2365],{"emptyLinePlaceholder":2364},[76,39078,39079],{"class":78,"line":32602},[76,39080,39081],{"class":146},"# 验证模型\n",[76,39083,39084,39086,39088,39090,39093],{"class":78,"line":32608},[76,39085,1495],{"class":82},[76,39087,31189],{"class":136},[76,39089,2914],{"class":82},[76,39091,39092],{"class":192},"'__main__'",[76,39094,3704],{"class":86},[76,39096,39097,39099,39101,39103,39105,39107,39109,39111,39113],{"class":78,"line":32614},[76,39098,31206],{"class":86},[76,39100,133],{"class":82},[76,39102,30420],{"class":86},[76,39104,31213],{"class":192},[76,39106,1668],{"class":82},[76,39108,31218],{"class":86},[76,39110,1665],{"class":82},[76,39112,30445],{"class":192},[76,39114,93],{"class":86},[76,39116,39117,39119],{"class":78,"line":32620},[76,39118,31268],{"class":136},[76,39120,30454],{"class":86},[76,39122,39123,39125,39127],{"class":78,"line":32626},[76,39124,31258],{"class":86},[76,39126,133],{"class":82},[76,39128,39129],{"class":86},"VGG16().to(device)\n",[76,39131,39132,39134,39136,39138,39140,39142,39144,39146],{"class":78,"line":32637},[76,39133,31268],{"class":136},[76,39135,31271],{"class":86},[76,39137,305],{"class":136},[76,39139,466],{"class":86},[76,39141,31470],{"class":136},[76,39143,466],{"class":86},[76,39145,31470],{"class":136},[76,39147,31284],{"class":86},[29,39149,39150],{"start":96},[32,39151,39152],{},"训练代码",[21,39154,39155],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[21,39157,39158],{},"解决方式:",[21,39160,39161],{},"①权重初始化",[66,39163,39165],{"className":30347,"code":39164,"language":30349,"meta":71,"style":71},"# 权重初始化,保证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",[73,39166,39167,39172,39177,39189,39194,39202,39207,39220,39225,39239,39244,39253,39258,39267,39272,39277,39290,39295,39309],{"__ignoreMap":71},[76,39168,39169],{"class":78,"line":79},[76,39170,39171],{"class":146},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[76,39173,39174],{"class":78,"line":96},[76,39175,39176],{"class":146},"# 循环遍历模型\n",[76,39178,39179,39181,39183,39185,39187],{"class":78,"line":1143},[76,39180,2990],{"class":82},[76,39182,38837],{"class":86},[76,39184,26012],{"class":82},[76,39186,38842],{"class":136},[76,39188,38845],{"class":86},[76,39190,39191],{"class":78,"line":1158},[76,39192,39193],{"class":146},"    # print(m)\n",[76,39195,39196,39198,39200],{"class":78,"line":1164},[76,39197,3066],{"class":82},[76,39199,38857],{"class":136},[76,39201,38860],{"class":86},[76,39203,39204],{"class":78,"line":1178},[76,39205,39206],{"class":146},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[76,39208,39209,39212,39214,39216,39218],{"class":78,"line":1184},[76,39210,39211],{"class":86},"        nn.init.kaiming_normal_(m.weight,",[76,39213,38873],{"class":5183},[76,39215,133],{"class":82},[76,39217,38878],{"class":192},[76,39219,93],{"class":86},[76,39221,39222],{"class":78,"line":1275},[76,39223,39224],{"class":146},"        # 判断b参数是否存在\n",[76,39226,39227,39229,39231,39233,39235,39237],{"class":78,"line":1281},[76,39228,2462],{"class":82},[76,39230,38893],{"class":86},[76,39232,38896],{"class":82},[76,39234,38899],{"class":82},[76,39236,38902],{"class":136},[76,39238,3704],{"class":86},[76,39240,39241],{"class":78,"line":1293},[76,39242,39243],{"class":146},"            # 如果参数不存在的化初始化b=0\n",[76,39245,39246,39249,39251],{"class":78,"line":1576},[76,39247,39248],{"class":86},"            nn.init.constant_(m.bias,",[76,39250,279],{"class":136},[76,39252,93],{"class":86},[76,39254,39255],{"class":78,"line":1581},[76,39256,39257],{"class":146},"    # 全连接层初始化\n",[76,39259,39260,39263,39265],{"class":78,"line":1587},[76,39261,39262],{"class":82},"    elif",[76,39264,38857],{"class":136},[76,39266,38933],{"class":86},[76,39268,39269],{"class":78,"line":1592},[76,39270,39271],{"class":146},"        # 这个初始化方法是利用的是正太分布的方式\n",[76,39273,39274],{"class":78,"line":1606},[76,39275,39276],{"class":146},"        # 均值为0，方差为0.01\n",[76,39278,39279,39282,39284,39286,39288],{"class":78,"line":1611},[76,39280,39281],{"class":86},"        nn.init.normal_(m.weight,",[76,39283,279],{"class":136},[76,39285,466],{"class":86},[76,39287,38955],{"class":136},[76,39289,93],{"class":86},[76,39291,39292],{"class":78,"line":1617},[76,39293,39294],{"class":146},"        # 初始化b参数\n",[76,39296,39297,39299,39301,39303,39305,39307],{"class":78,"line":1638},[76,39298,2462],{"class":82},[76,39300,38893],{"class":86},[76,39302,38896],{"class":82},[76,39304,38899],{"class":82},[76,39306,38902],{"class":136},[76,39308,3704],{"class":86},[76,39310,39311,39313,39315],{"class":78,"line":1643},[76,39312,39248],{"class":86},[76,39314,279],{"class":136},[76,39316,93],{"class":86},[21,39318,39319],{},"②尽可能地增加批次",[21,39321,39322],{},"训练完整代码：",[66,39324,39325],{"className":30347,"code":37868,"language":30349,"meta":71,"style":71},[73,39326,39327,39333,39343,39353,39363,39367,39383,39391,39409,39413,39417,39427,39463,39467,39503,39507,39535,39539,39543,39553,39589,39593,39629,39633,39661,39665,39669,39679,39715,39719,39755,39759,39795,39799,39827,39831,39835,39845,39881,39885,39921,39925,39961,39965,39993,39997,40001,40011,40047,40051,40087,40091,40127,40131,40159,40163,40167,40177,40181,40185,40189,40209,40213,40225,40229,40241,40245,40249,40253,40257,40269,40273,40281,40285,40297,40301,40315,40319,40327,40331,40339,40343,40347,40359,40363,40377,40385,40389,40393,40401,40411,40421,40431,40441,40451,40461,40467,40471,40475,40487,40507,40513,40521],{"__ignoreMap":71},[76,39328,39329,39331],{"class":78,"line":79},[76,39330,30361],{"class":82},[76,39332,30364],{"class":86},[76,39334,39335,39337,39339,39341],{"class":78,"line":96},[76,39336,30706],{"class":82},[76,39338,37883],{"class":86},[76,39340,30361],{"class":82},[76,39342,37888],{"class":86},[76,39344,39345,39347,39349,39351],{"class":78,"line":1143},[76,39346,30706],{"class":82},[76,39348,30709],{"class":86},[76,39350,30361],{"class":82},[76,39352,30714],{"class":86},[76,39354,39355,39357,39359,39361],{"class":78,"line":1158},[76,39356,30706],{"class":82},[76,39358,30726],{"class":86},[76,39360,30361],{"class":82},[76,39362,30731],{"class":86},[76,39364,39365],{"class":78,"line":1164},[76,39366,2365],{"emptyLinePlaceholder":2364},[76,39368,39369,39371,39373,39375,39377,39379,39381],{"class":78,"line":1178},[76,39370,14661],{"class":82},[76,39372,37919],{"class":1927},[76,39374,87],{"class":86},[76,39376,30747],{"class":1927},[76,39378,646],{"class":86},[76,39380,30752],{"class":1927},[76,39382,30755],{"class":86},[76,39384,39385,39387,39389],{"class":78,"line":1184},[76,39386,30770],{"class":82},[76,39388,30773],{"class":136},[76,39390,30776],{"class":86},[76,39392,39393,39395,39397,39399,39401,39403,39405,39407],{"class":78,"line":1275},[76,39394,30786],{"class":136},[76,39396,87],{"class":86},[76,39398,37946],{"class":136},[76,39400,12402],{"class":86},[76,39402,30792],{"class":136},[76,39404,30795],{"class":86},[76,39406,30798],{"class":136},[76,39408,1940],{"class":86},[76,39410,39411],{"class":78,"line":1281},[76,39412,37961],{"class":146},[76,39414,39415],{"class":78,"line":1293},[76,39416,37966],{"class":146},[76,39418,39419,39421,39423,39425],{"class":78,"line":1576},[76,39420,30814],{"class":136},[76,39422,37973],{"class":86},[76,39424,133],{"class":82},[76,39426,37978],{"class":86},[76,39428,39429,39431,39433,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461],{"class":78,"line":1581},[76,39430,37983],{"class":86},[76,39432,30825],{"class":5183},[76,39434,133],{"class":82},[76,39436,305],{"class":136},[76,39438,466],{"class":86},[76,39440,30834],{"class":5183},[76,39442,133],{"class":82},[76,39444,291],{"class":136},[76,39446,466],{"class":86},[76,39448,30843],{"class":5183},[76,39450,133],{"class":82},[76,39452,159],{"class":136},[76,39454,466],{"class":86},[76,39456,30852],{"class":5183},[76,39458,133],{"class":82},[76,39460,305],{"class":136},[76,39462,38016],{"class":86},[76,39464,39465],{"class":78,"line":1587},[76,39466,38021],{"class":86},[76,39468,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501],{"class":78,"line":1592},[76,39470,37983],{"class":86},[76,39472,30825],{"class":5183},[76,39474,133],{"class":82},[76,39476,291],{"class":136},[76,39478,466],{"class":86},[76,39480,30834],{"class":5183},[76,39482,133],{"class":82},[76,39484,291],{"class":136},[76,39486,466],{"class":86},[76,39488,30843],{"class":5183},[76,39490,133],{"class":82},[76,39492,159],{"class":136},[76,39494,466],{"class":86},[76,39496,30852],{"class":5183},[76,39498,133],{"class":82},[76,39500,305],{"class":136},[76,39502,38016],{"class":86},[76,39504,39505],{"class":78,"line":1606},[76,39506,38021],{"class":86},[76,39508,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533],{"class":78,"line":1611},[76,39510,38066],{"class":86},[76,39512,30843],{"class":5183},[76,39514,133],{"class":82},[76,39516,165],{"class":136},[76,39518,466],{"class":86},[76,39520,30898],{"class":5183},[76,39522,133],{"class":82},[76,39524,165],{"class":136},[76,39526,466],{"class":86},[76,39528,30852],{"class":5183},[76,39530,133],{"class":82},[76,39532,279],{"class":136},[76,39534,93],{"class":86},[76,39536,39537],{"class":78,"line":1617},[76,39538,38095],{"class":86},[76,39540,39541],{"class":78,"line":1638},[76,39542,38100],{"class":146},[76,39544,39545,39547,39549,39551],{"class":78,"line":1643},[76,39546,30814],{"class":136},[76,39548,38107],{"class":86},[76,39550,133],{"class":82},[76,39552,37978],{"class":86},[76,39554,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587],{"class":78,"line":1657},[76,39556,37983],{"class":86},[76,39558,30825],{"class":5183},[76,39560,133],{"class":82},[76,39562,291],{"class":136},[76,39564,466],{"class":86},[76,39566,30834],{"class":5183},[76,39568,133],{"class":82},[76,39570,32039],{"class":136},[76,39572,466],{"class":86},[76,39574,30843],{"class":5183},[76,39576,133],{"class":82},[76,39578,159],{"class":136},[76,39580,466],{"class":86},[76,39582,30852],{"class":5183},[76,39584,133],{"class":82},[76,39586,305],{"class":136},[76,39588,38016],{"class":86},[76,39590,39591],{"class":78,"line":1662},[76,39592,38021],{"class":86},[76,39594,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627],{"class":78,"line":1691},[76,39596,37983],{"class":86},[76,39598,30825],{"class":5183},[76,39600,133],{"class":82},[76,39602,32039],{"class":136},[76,39604,466],{"class":86},[76,39606,30834],{"class":5183},[76,39608,133],{"class":82},[76,39610,32039],{"class":136},[76,39612,466],{"class":86},[76,39614,30843],{"class":5183},[76,39616,133],{"class":82},[76,39618,159],{"class":136},[76,39620,466],{"class":86},[76,39622,30852],{"class":5183},[76,39624,133],{"class":82},[76,39626,305],{"class":136},[76,39628,38016],{"class":86},[76,39630,39631],{"class":78,"line":1696},[76,39632,38021],{"class":86},[76,39634,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659],{"class":78,"line":1713},[76,39636,38066],{"class":86},[76,39638,30843],{"class":5183},[76,39640,133],{"class":82},[76,39642,165],{"class":136},[76,39644,466],{"class":86},[76,39646,30898],{"class":5183},[76,39648,133],{"class":82},[76,39650,165],{"class":136},[76,39652,466],{"class":86},[76,39654,30852],{"class":5183},[76,39656,133],{"class":82},[76,39658,279],{"class":136},[76,39660,93],{"class":86},[76,39662,39663],{"class":78,"line":1718},[76,39664,38095],{"class":86},[76,39666,39667],{"class":78,"line":1723},[76,39668,38228],{"class":146},[76,39670,39671,39673,39675,39677],{"class":78,"line":1728},[76,39672,30814],{"class":136},[76,39674,38235],{"class":86},[76,39676,133],{"class":82},[76,39678,37978],{"class":86},[76,39680,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713],{"class":78,"line":1742},[76,39682,37983],{"class":86},[76,39684,30825],{"class":5183},[76,39686,133],{"class":82},[76,39688,32039],{"class":136},[76,39690,466],{"class":86},[76,39692,30834],{"class":5183},[76,39694,133],{"class":82},[76,39696,34839],{"class":136},[76,39698,466],{"class":86},[76,39700,30843],{"class":5183},[76,39702,133],{"class":82},[76,39704,159],{"class":136},[76,39706,466],{"class":86},[76,39708,30852],{"class":5183},[76,39710,133],{"class":82},[76,39712,305],{"class":136},[76,39714,38016],{"class":86},[76,39716,39717],{"class":78,"line":1747},[76,39718,38021],{"class":86},[76,39720,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753],{"class":78,"line":2542},[76,39722,37983],{"class":86},[76,39724,30825],{"class":5183},[76,39726,133],{"class":82},[76,39728,34839],{"class":136},[76,39730,466],{"class":86},[76,39732,30834],{"class":5183},[76,39734,133],{"class":82},[76,39736,34839],{"class":136},[76,39738,466],{"class":86},[76,39740,30843],{"class":5183},[76,39742,133],{"class":82},[76,39744,159],{"class":136},[76,39746,466],{"class":86},[76,39748,30852],{"class":5183},[76,39750,133],{"class":82},[76,39752,305],{"class":136},[76,39754,38016],{"class":86},[76,39756,39757],{"class":78,"line":2556},[76,39758,38021],{"class":86},[76,39760,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793],{"class":78,"line":2564},[76,39762,37983],{"class":86},[76,39764,30825],{"class":5183},[76,39766,133],{"class":82},[76,39768,34839],{"class":136},[76,39770,466],{"class":86},[76,39772,30834],{"class":5183},[76,39774,133],{"class":82},[76,39776,34839],{"class":136},[76,39778,466],{"class":86},[76,39780,30843],{"class":5183},[76,39782,133],{"class":82},[76,39784,159],{"class":136},[76,39786,466],{"class":86},[76,39788,30852],{"class":5183},[76,39790,133],{"class":82},[76,39792,305],{"class":136},[76,39794,38016],{"class":86},[76,39796,39797],{"class":78,"line":2569},[76,39798,38021],{"class":86},[76,39800,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825],{"class":78,"line":2575},[76,39802,38066],{"class":86},[76,39804,30843],{"class":5183},[76,39806,133],{"class":82},[76,39808,165],{"class":136},[76,39810,466],{"class":86},[76,39812,30898],{"class":5183},[76,39814,133],{"class":82},[76,39816,165],{"class":136},[76,39818,466],{"class":86},[76,39820,30852],{"class":5183},[76,39822,133],{"class":82},[76,39824,279],{"class":136},[76,39826,93],{"class":86},[76,39828,39829],{"class":78,"line":2581},[76,39830,38095],{"class":86},[76,39832,39833],{"class":78,"line":2586},[76,39834,38396],{"class":146},[76,39836,39837,39839,39841,39843],{"class":78,"line":7915},[76,39838,30814],{"class":136},[76,39840,38403],{"class":86},[76,39842,133],{"class":82},[76,39844,37978],{"class":86},[76,39846,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879],{"class":78,"line":7939},[76,39848,37983],{"class":86},[76,39850,30825],{"class":5183},[76,39852,133],{"class":82},[76,39854,34839],{"class":136},[76,39856,466],{"class":86},[76,39858,30834],{"class":5183},[76,39860,133],{"class":82},[76,39862,38426],{"class":136},[76,39864,466],{"class":86},[76,39866,30843],{"class":5183},[76,39868,133],{"class":82},[76,39870,159],{"class":136},[76,39872,466],{"class":86},[76,39874,30852],{"class":5183},[76,39876,133],{"class":82},[76,39878,305],{"class":136},[76,39880,38016],{"class":86},[76,39882,39883],{"class":78,"line":7944},[76,39884,38021],{"class":86},[76,39886,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919],{"class":78,"line":7950},[76,39888,37983],{"class":86},[76,39890,30825],{"class":5183},[76,39892,133],{"class":82},[76,39894,38426],{"class":136},[76,39896,466],{"class":86},[76,39898,30834],{"class":5183},[76,39900,133],{"class":82},[76,39902,38426],{"class":136},[76,39904,466],{"class":86},[76,39906,30843],{"class":5183},[76,39908,133],{"class":82},[76,39910,159],{"class":136},[76,39912,466],{"class":86},[76,39914,30852],{"class":5183},[76,39916,133],{"class":82},[76,39918,305],{"class":136},[76,39920,38016],{"class":86},[76,39922,39923],{"class":78,"line":7977},[76,39924,38021],{"class":86},[76,39926,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959],{"class":78,"line":7982},[76,39928,37983],{"class":86},[76,39930,30825],{"class":5183},[76,39932,133],{"class":82},[76,39934,38426],{"class":136},[76,39936,466],{"class":86},[76,39938,30834],{"class":5183},[76,39940,133],{"class":82},[76,39942,38426],{"class":136},[76,39944,466],{"class":86},[76,39946,30843],{"class":5183},[76,39948,133],{"class":82},[76,39950,159],{"class":136},[76,39952,466],{"class":86},[76,39954,30852],{"class":5183},[76,39956,133],{"class":82},[76,39958,305],{"class":136},[76,39960,38016],{"class":86},[76,39962,39963],{"class":78,"line":7988},[76,39964,38021],{"class":86},[76,39966,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991],{"class":78,"line":8000},[76,39968,38066],{"class":86},[76,39970,30843],{"class":5183},[76,39972,133],{"class":82},[76,39974,165],{"class":136},[76,39976,466],{"class":86},[76,39978,30898],{"class":5183},[76,39980,133],{"class":82},[76,39982,165],{"class":136},[76,39984,466],{"class":86},[76,39986,30852],{"class":5183},[76,39988,133],{"class":82},[76,39990,279],{"class":136},[76,39992,93],{"class":86},[76,39994,39995],{"class":78,"line":8012},[76,39996,38095],{"class":86},[76,39998,39999],{"class":78,"line":8024},[76,40000,38565],{"class":146},[76,40002,40003,40005,40007,40009],{"class":78,"line":9683},[76,40004,30814],{"class":136},[76,40006,38572],{"class":86},[76,40008,133],{"class":82},[76,40010,37978],{"class":86},[76,40012,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045],{"class":78,"line":9708},[76,40014,37983],{"class":86},[76,40016,30825],{"class":5183},[76,40018,133],{"class":82},[76,40020,38426],{"class":136},[76,40022,466],{"class":86},[76,40024,30834],{"class":5183},[76,40026,133],{"class":82},[76,40028,38426],{"class":136},[76,40030,466],{"class":86},[76,40032,30843],{"class":5183},[76,40034,133],{"class":82},[76,40036,159],{"class":136},[76,40038,466],{"class":86},[76,40040,30852],{"class":5183},[76,40042,133],{"class":82},[76,40044,305],{"class":136},[76,40046,38016],{"class":86},[76,40048,40049],{"class":78,"line":9731},[76,40050,38021],{"class":86},[76,40052,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085],{"class":78,"line":9755},[76,40054,37983],{"class":86},[76,40056,30825],{"class":5183},[76,40058,133],{"class":82},[76,40060,38426],{"class":136},[76,40062,466],{"class":86},[76,40064,30834],{"class":5183},[76,40066,133],{"class":82},[76,40068,38426],{"class":136},[76,40070,466],{"class":86},[76,40072,30843],{"class":5183},[76,40074,133],{"class":82},[76,40076,159],{"class":136},[76,40078,466],{"class":86},[76,40080,30852],{"class":5183},[76,40082,133],{"class":82},[76,40084,305],{"class":136},[76,40086,38016],{"class":86},[76,40088,40089],{"class":78,"line":9760},[76,40090,38021],{"class":86},[76,40092,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125],{"class":78,"line":9765},[76,40094,37983],{"class":86},[76,40096,30825],{"class":5183},[76,40098,133],{"class":82},[76,40100,38426],{"class":136},[76,40102,466],{"class":86},[76,40104,30834],{"class":5183},[76,40106,133],{"class":82},[76,40108,38426],{"class":136},[76,40110,466],{"class":86},[76,40112,30843],{"class":5183},[76,40114,133],{"class":82},[76,40116,159],{"class":136},[76,40118,466],{"class":86},[76,40120,30852],{"class":5183},[76,40122,133],{"class":82},[76,40124,305],{"class":136},[76,40126,38016],{"class":86},[76,40128,40129],{"class":78,"line":9770},[76,40130,38021],{"class":86},[76,40132,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157],{"class":78,"line":9779},[76,40134,38066],{"class":86},[76,40136,30843],{"class":5183},[76,40138,133],{"class":82},[76,40140,165],{"class":136},[76,40142,466],{"class":86},[76,40144,30898],{"class":5183},[76,40146,133],{"class":82},[76,40148,165],{"class":136},[76,40150,466],{"class":86},[76,40152,30852],{"class":5183},[76,40154,133],{"class":82},[76,40156,279],{"class":136},[76,40158,93],{"class":86},[76,40160,40161],{"class":78,"line":9784},[76,40162,38095],{"class":86},[76,40164,40165],{"class":78,"line":9790},[76,40166,38733],{"class":146},[76,40168,40169,40171,40173,40175],{"class":78,"line":9811},[76,40170,30814],{"class":136},[76,40172,38740],{"class":86},[76,40174,133],{"class":82},[76,40176,37978],{"class":86},[76,40178,40179],{"class":78,"line":9817},[76,40180,38749],{"class":146},[76,40182,40183],{"class":78,"line":9831},[76,40184,38754],{"class":146},[76,40186,40187],{"class":78,"line":9837},[76,40188,38759],{"class":86},[76,40190,40191,40193,40195,40197,40199,40201,40203,40205,40207],{"class":78,"line":9864},[76,40192,38764],{"class":86},[76,40194,457],{"class":136},[76,40196,543],{"class":82},[76,40198,457],{"class":136},[76,40200,543],{"class":82},[76,40202,38426],{"class":136},[76,40204,466],{"class":86},[76,40206,34839],{"class":136},[76,40208,38016],{"class":86},[76,40210,40211],{"class":78,"line":9873},[76,40212,38021],{"class":86},[76,40214,40215,40217,40219,40221,40223],{"class":78,"line":9879},[76,40216,38764],{"class":86},[76,40218,34839],{"class":136},[76,40220,466],{"class":86},[76,40222,32039],{"class":136},[76,40224,38016],{"class":86},[76,40226,40227],{"class":78,"line":9887},[76,40228,38021],{"class":86},[76,40230,40231,40233,40235,40237,40239],{"class":78,"line":9892},[76,40232,38764],{"class":86},[76,40234,32039],{"class":136},[76,40236,466],{"class":86},[76,40238,534],{"class":136},[76,40240,93],{"class":86},[76,40242,40243],{"class":78,"line":16571},[76,40244,38095],{"class":86},[76,40246,40247],{"class":78,"line":16577},[76,40248,2365],{"emptyLinePlaceholder":2364},[76,40250,40251],{"class":78,"line":16600},[76,40252,38825],{"class":146},[76,40254,40255],{"class":78,"line":16606},[76,40256,38830],{"class":146},[76,40258,40259,40261,40263,40265,40267],{"class":78,"line":16629},[76,40260,3368],{"class":82},[76,40262,38837],{"class":86},[76,40264,26012],{"class":82},[76,40266,38842],{"class":136},[76,40268,38845],{"class":86},[76,40270,40271],{"class":78,"line":16643},[76,40272,38850],{"class":146},[76,40274,40275,40277,40279],{"class":78,"line":16663},[76,40276,4607],{"class":82},[76,40278,38857],{"class":136},[76,40280,38860],{"class":86},[76,40282,40283],{"class":78,"line":16669},[76,40284,38865],{"class":146},[76,40286,40287,40289,40291,40293,40295],{"class":78,"line":16680},[76,40288,38870],{"class":86},[76,40290,38873],{"class":5183},[76,40292,133],{"class":82},[76,40294,38878],{"class":192},[76,40296,93],{"class":86},[76,40298,40299],{"class":78,"line":16703},[76,40300,38885],{"class":146},[76,40302,40303,40305,40307,40309,40311,40313],{"class":78,"line":16725},[76,40304,38890],{"class":82},[76,40306,38893],{"class":86},[76,40308,38896],{"class":82},[76,40310,38899],{"class":82},[76,40312,38902],{"class":136},[76,40314,3704],{"class":86},[76,40316,40317],{"class":78,"line":16730},[76,40318,38909],{"class":146},[76,40320,40321,40323,40325],{"class":78,"line":16736},[76,40322,38914],{"class":86},[76,40324,279],{"class":136},[76,40326,93],{"class":86},[76,40328,40329],{"class":78,"line":16750},[76,40330,38923],{"class":146},[76,40332,40333,40335,40337],{"class":78,"line":16763},[76,40334,38928],{"class":82},[76,40336,38857],{"class":136},[76,40338,38933],{"class":86},[76,40340,40341],{"class":78,"line":16768},[76,40342,38938],{"class":146},[76,40344,40345],{"class":78,"line":16782},[76,40346,38943],{"class":146},[76,40348,40349,40351,40353,40355,40357],{"class":78,"line":16787},[76,40350,38948],{"class":86},[76,40352,279],{"class":136},[76,40354,466],{"class":86},[76,40356,38955],{"class":136},[76,40358,93],{"class":86},[76,40360,40361],{"class":78,"line":16793},[76,40362,38962],{"class":146},[76,40364,40365,40367,40369,40371,40373,40375],{"class":78,"line":16798},[76,40366,38890],{"class":82},[76,40368,38893],{"class":86},[76,40370,38896],{"class":82},[76,40372,38899],{"class":82},[76,40374,38902],{"class":136},[76,40376,3704],{"class":86},[76,40378,40379,40381,40383],{"class":78,"line":16812},[76,40380,38914],{"class":86},[76,40382,279],{"class":136},[76,40384,93],{"class":86},[76,40386,40387],{"class":78,"line":16817},[76,40388,2365],{"emptyLinePlaceholder":2364},[76,40390,40391],{"class":78,"line":16822},[76,40392,35134],{"class":146},[76,40394,40395,40397,40399],{"class":78,"line":16836},[76,40396,30770],{"class":82},[76,40398,31062],{"class":1927},[76,40400,31065],{"class":86},[76,40402,40403,40405,40407,40409],{"class":78,"line":16848},[76,40404,31070],{"class":86},[76,40406,133],{"class":82},[76,40408,30792],{"class":136},[76,40410,39011],{"class":86},[76,40412,40413,40415,40417,40419],{"class":78,"line":16853},[76,40414,31070],{"class":86},[76,40416,133],{"class":82},[76,40418,30792],{"class":136},[76,40420,39022],{"class":86},[76,40422,40423,40425,40427,40429],{"class":78,"line":16866},[76,40424,31070],{"class":86},[76,40426,133],{"class":82},[76,40428,30792],{"class":136},[76,40430,39033],{"class":86},[76,40432,40433,40435,40437,40439],{"class":78,"line":16871},[76,40434,31070],{"class":86},[76,40436,133],{"class":82},[76,40438,30792],{"class":136},[76,40440,39044],{"class":86},[76,40442,40443,40445,40447,40449],{"class":78,"line":16876},[76,40444,31070],{"class":86},[76,40446,133],{"class":82},[76,40448,30792],{"class":136},[76,40450,39055],{"class":86},[76,40452,40453,40455,40457,40459],{"class":78,"line":16881},[76,40454,31070],{"class":86},[76,40456,133],{"class":82},[76,40458,30792],{"class":136},[76,40460,39066],{"class":86},[76,40462,40463,40465],{"class":78,"line":16894},[76,40464,14719],{"class":82},[76,40466,31178],{"class":86},[76,40468,40469],{"class":78,"line":16899},[76,40470,2365],{"emptyLinePlaceholder":2364},[76,40472,40473],{"class":78,"line":32602},[76,40474,39081],{"class":146},[76,40476,40477,40479,40481,40483,40485],{"class":78,"line":32608},[76,40478,1495],{"class":82},[76,40480,31189],{"class":136},[76,40482,2914],{"class":82},[76,40484,39092],{"class":192},[76,40486,3704],{"class":86},[76,40488,40489,40491,40493,40495,40497,40499,40501,40503,40505],{"class":78,"line":32614},[76,40490,31206],{"class":86},[76,40492,133],{"class":82},[76,40494,30420],{"class":86},[76,40496,31213],{"class":192},[76,40498,1668],{"class":82},[76,40500,31218],{"class":86},[76,40502,1665],{"class":82},[76,40504,30445],{"class":192},[76,40506,93],{"class":86},[76,40508,40509,40511],{"class":78,"line":32620},[76,40510,31268],{"class":136},[76,40512,30454],{"class":86},[76,40514,40515,40517,40519],{"class":78,"line":32626},[76,40516,31258],{"class":86},[76,40518,133],{"class":82},[76,40520,39129],{"class":86},[76,40522,40523,40525,40527,40529,40531,40533,40535,40537],{"class":78,"line":32637},[76,40524,31268],{"class":136},[76,40526,31271],{"class":86},[76,40528,305],{"class":136},[76,40530,466],{"class":86},[76,40532,31470],{"class":136},[76,40534,466],{"class":86},[76,40536,31470],{"class":136},[76,40538,31284],{"class":86},[29,40540,40541],{"start":1143},[32,40542,40543],{},"测试代码",[66,40545,40547],{"className":30347,"code":40546,"language":30349,"meta":71,"style":71},"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",[73,40548,40549,40555,40565,40575,40579,40589,40600,40604,40608,40612,40620,40636,40646,40662,40672,40686,40690,40700,40710,40720,40726,40730,40734,40742,40746,40762,40770,40774,40778,40786,40794,40798,40802,40806,40810,40816,40820,40830,40838,40846,40850,40854,40858,40866,40870,40886,40890,40894,40898,40910,40914,40926,40930,40934,40946,40950,40960,40964,40968,40980,40984,40993,40997,41001,41009,41013,41021,41025,41029,41033,41037,41041,41057,41065,41069,41073,41121,41127,41131,41141,41149,41157,41161,41165,41169,41173,41181,41185,41201,41205,41213,41221],{"__ignoreMap":71},[76,40550,40551,40553],{"class":78,"line":79},[76,40552,30361],{"class":82},[76,40554,30364],{"class":86},[76,40556,40557,40559,40561,40563],{"class":78,"line":96},[76,40558,30361],{"class":82},[76,40560,31384],{"class":86},[76,40562,31352],{"class":82},[76,40564,31389],{"class":86},[76,40566,40567,40569,40571,40573],{"class":78,"line":1143},[76,40568,30706],{"class":82},[76,40570,31367],{"class":86},[76,40572,30361],{"class":82},[76,40574,31372],{"class":86},[76,40576,40577],{"class":78,"line":1158},[76,40578,33891],{"class":146},[76,40580,40581,40583,40585,40587],{"class":78,"line":1164},[76,40582,30706],{"class":82},[76,40584,31337],{"class":86},[76,40586,30361],{"class":82},[76,40588,31342],{"class":86},[76,40590,40591,40593,40595,40597],{"class":78,"line":1178},[76,40592,30706],{"class":82},[76,40594,31883],{"class":86},[76,40596,30361],{"class":82},[76,40598,40599],{"class":136}," VGG16\n",[76,40601,40602],{"class":78,"line":1184},[76,40603,2365],{"emptyLinePlaceholder":2364},[76,40605,40606],{"class":78,"line":1275},[76,40607,2365],{"emptyLinePlaceholder":2364},[76,40609,40610],{"class":78,"line":1281},[76,40611,33920],{"class":146},[76,40613,40614,40616,40618],{"class":78,"line":1293},[76,40615,31916],{"class":82},[76,40617,33927],{"class":1927},[76,40619,31922],{"class":86},[76,40621,40622,40624,40626,40628,40630,40632,40634],{"class":78,"line":1576},[76,40623,33934],{"class":86},[76,40625,133],{"class":82},[76,40627,31424],{"class":86},[76,40629,31427],{"class":5183},[76,40631,133],{"class":82},[76,40633,31432],{"class":192},[76,40635,31435],{"class":86},[76,40637,40638,40640,40642,40644],{"class":78,"line":1581},[76,40639,33951],{"class":5183},[76,40641,133],{"class":82},[76,40643,33956],{"class":136},[76,40645,31435],{"class":86},[76,40647,40648,40650,40652,40654,40656,40658,40660],{"class":78,"line":1587},[76,40649,33963],{"class":5183},[76,40651,133],{"class":82},[76,40653,31462],{"class":86},[76,40655,31465],{"class":5183},[76,40657,133],{"class":82},[76,40659,31470],{"class":136},[76,40661,31473],{"class":86},[76,40663,40664,40666,40668,40670],{"class":78,"line":1592},[76,40665,33980],{"class":5183},[76,40667,133],{"class":82},[76,40669,31445],{"class":136},[76,40671,93],{"class":86},[76,40673,40674,40676,40678,40680,40682,40684],{"class":78,"line":1606},[76,40675,33991],{"class":86},[76,40677,133],{"class":82},[76,40679,31503],{"class":86},[76,40681,31506],{"class":5183},[76,40683,133],{"class":82},[76,40685,34002],{"class":86},[76,40687,40688],{"class":78,"line":1611},[76,40689,34007],{"class":146},[76,40691,40692,40694,40696,40698],{"class":78,"line":1617},[76,40693,34012],{"class":5183},[76,40695,133],{"class":82},[76,40697,305],{"class":136},[76,40699,31435],{"class":86},[76,40701,40702,40704,40706,40708],{"class":78,"line":1638},[76,40703,34023],{"class":5183},[76,40705,133],{"class":82},[76,40707,31445],{"class":136},[76,40709,31435],{"class":86},[76,40711,40712,40714,40716,40718],{"class":78,"line":1643},[76,40713,34034],{"class":5183},[76,40715,133],{"class":82},[76,40717,279],{"class":136},[76,40719,93],{"class":86},[76,40721,40722,40724],{"class":78,"line":1657},[76,40723,4055],{"class":82},[76,40725,34047],{"class":86},[76,40727,40728],{"class":78,"line":1662},[76,40729,2365],{"emptyLinePlaceholder":2364},[76,40731,40732],{"class":78,"line":1691},[76,40733,34056],{"class":146},[76,40735,40736,40738,40740],{"class":78,"line":1696},[76,40737,31916],{"class":82},[76,40739,34063],{"class":1927},[76,40741,34066],{"class":86},[76,40743,40744],{"class":78,"line":1713},[76,40745,34071],{"class":146},[76,40747,40748,40750,40752,40754,40756,40758,40760],{"class":78,"line":1718},[76,40749,31206],{"class":86},[76,40751,133],{"class":82},[76,40753,31213],{"class":192},[76,40755,1668],{"class":82},[76,40757,31218],{"class":86},[76,40759,1665],{"class":82},[76,40761,34088],{"class":192},[76,40763,40764,40766,40768],{"class":78,"line":1723},[76,40765,31258],{"class":86},[76,40767,133],{"class":82},[76,40769,32258],{"class":86},[76,40771,40772],{"class":78,"line":1728},[76,40773,2365],{"emptyLinePlaceholder":2364},[76,40775,40776],{"class":78,"line":1742},[76,40777,34105],{"class":146},[76,40779,40780,40782,40784],{"class":78,"line":1747},[76,40781,34110],{"class":86},[76,40783,133],{"class":82},[76,40785,32311],{"class":136},[76,40787,40788,40790,40792],{"class":78,"line":2542},[76,40789,34119],{"class":86},[76,40791,133],{"class":82},[76,40793,3050],{"class":136},[76,40795,40796],{"class":78,"line":2556},[76,40797,2365],{"emptyLinePlaceholder":2364},[76,40799,40800],{"class":78,"line":2564},[76,40801,34132],{"class":146},[76,40803,40804],{"class":78,"line":2569},[76,40805,34137],{"class":146},[76,40807,40808],{"class":78,"line":2575},[76,40809,34142],{"class":146},[76,40811,40812,40814],{"class":78,"line":2581},[76,40813,34147],{"class":82},[76,40815,32853],{"class":86},[76,40817,40818],{"class":78,"line":2586},[76,40819,34154],{"class":146},[76,40821,40822,40824,40826,40828],{"class":78,"line":7915},[76,40823,3368],{"class":82},[76,40825,34161],{"class":86},[76,40827,26012],{"class":82},[76,40829,34166],{"class":86},[76,40831,40832,40834,40836],{"class":78,"line":7939},[76,40833,34171],{"class":86},[76,40835,133],{"class":82},[76,40837,34176],{"class":86},[76,40839,40840,40842,40844],{"class":78,"line":7944},[76,40841,34181],{"class":86},[76,40843,133],{"class":82},[76,40845,34186],{"class":86},[76,40847,40848],{"class":78,"line":7950},[76,40849,34191],{"class":146},[76,40851,40852],{"class":78,"line":7977},[76,40853,32844],{"class":86},[76,40855,40856],{"class":78,"line":7982},[76,40857,34200],{"class":146},[76,40859,40860,40862,40864],{"class":78,"line":7988},[76,40861,32629],{"class":86},[76,40863,133],{"class":82},[76,40865,34209],{"class":86},[76,40867,40868],{"class":78,"line":8000},[76,40869,34214],{"class":146},[76,40871,40872,40874,40876,40878,40880,40882,40884],{"class":78,"line":8012},[76,40873,32646],{"class":86},[76,40875,133],{"class":82},[76,40877,32651],{"class":86},[76,40879,32654],{"class":5183},[76,40881,133],{"class":82},[76,40883,305],{"class":136},[76,40885,93],{"class":86},[76,40887,40888],{"class":78,"line":8024},[76,40889,34235],{"class":146},[76,40891,40892],{"class":78,"line":9683},[76,40893,34240],{"class":146},[76,40895,40896],{"class":78,"line":9708},[76,40897,34245],{"class":146},[76,40899,40900,40902,40904,40906,40908],{"class":78,"line":9731},[76,40901,34250],{"class":86},[76,40903,9444],{"class":82},[76,40905,32756],{"class":86},[76,40907,2914],{"class":82},[76,40909,34259],{"class":86},[76,40911,40912],{"class":78,"line":9755},[76,40913,34264],{"class":146},[76,40915,40916,40918,40920,40922,40924],{"class":78,"line":9760},[76,40917,34269],{"class":86},[76,40919,9444],{"class":82},[76,40921,34274],{"class":86},[76,40923,279],{"class":136},[76,40925,93],{"class":86},[76,40927,40928],{"class":78,"line":9765},[76,40929,2365],{"emptyLinePlaceholder":2364},[76,40931,40932],{"class":78,"line":9770},[76,40933,34287],{"class":146},[76,40935,40936,40938,40940,40942,40944],{"class":78,"line":9779},[76,40937,34292],{"class":86},[76,40939,133],{"class":82},[76,40941,34297],{"class":86},[76,40943,672],{"class":82},[76,40945,34302],{"class":86},[76,40947,40948],{"class":78,"line":9784},[76,40949,34307],{"class":146},[76,40951,40952,40954,40956,40958],{"class":78,"line":9790},[76,40953,32420],{"class":136},[76,40955,87],{"class":86},[76,40957,34316],{"class":192},[76,40959,34319],{"class":86},[76,40961,40962],{"class":78,"line":9811},[76,40963,2365],{"emptyLinePlaceholder":2364},[76,40965,40966],{"class":78,"line":9817},[76,40967,34328],{"class":146},[76,40969,40970,40972,40974,40976,40978],{"class":78,"line":9831},[76,40971,1495],{"class":82},[76,40973,31189],{"class":136},[76,40975,2914],{"class":82},[76,40977,31194],{"class":192},[76,40979,3704],{"class":86},[76,40981,40982],{"class":78,"line":9837},[76,40983,34345],{"class":146},[76,40985,40986,40988,40990],{"class":78,"line":9864},[76,40987,31258],{"class":86},[76,40989,133],{"class":82},[76,40991,40992],{"class":86},"VGG16()\n",[76,40994,40995],{"class":78,"line":9873},[76,40996,34358],{"class":146},[76,40998,40999],{"class":78,"line":9879},[76,41000,34363],{"class":146},[76,41002,41003,41005,41007],{"class":78,"line":9887},[76,41004,34368],{"class":86},[76,41006,34371],{"class":192},[76,41008,30466],{"class":86},[76,41010,41011],{"class":78,"line":9892},[76,41012,34378],{"class":146},[76,41014,41015,41017,41019],{"class":78,"line":16571},[76,41016,33991],{"class":86},[76,41018,133],{"class":82},[76,41020,34387],{"class":86},[76,41022,41023],{"class":78,"line":16577},[76,41024,34392],{"class":146},[76,41026,41027],{"class":78,"line":16600},[76,41028,34397],{"class":86},[76,41030,41031],{"class":78,"line":16606},[76,41032,2365],{"emptyLinePlaceholder":2364},[76,41034,41035],{"class":78,"line":16629},[76,41036,34406],{"class":146},[76,41038,41039],{"class":78,"line":16643},[76,41040,34411],{"class":146},[76,41042,41043,41045,41047,41049,41051,41053,41055],{"class":78,"line":16663},[76,41044,31206],{"class":86},[76,41046,133],{"class":82},[76,41048,31213],{"class":192},[76,41050,1668],{"class":82},[76,41052,31218],{"class":86},[76,41054,1665],{"class":82},[76,41056,34088],{"class":192},[76,41058,41059,41061,41063],{"class":78,"line":16669},[76,41060,31258],{"class":86},[76,41062,133],{"class":82},[76,41064,32258],{"class":86},[76,41066,41067],{"class":78,"line":16680},[76,41068,34440],{"class":146},[76,41070,41071],{"class":78,"line":16703},[76,41072,34445],{"class":146},[76,41074,41075,41077,41079,41081,41083,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119],{"class":78,"line":16725},[76,41076,34450],{"class":86},[76,41078,133],{"class":82},[76,41080,978],{"class":86},[76,41082,34457],{"class":192},[76,41084,466],{"class":86},[76,41086,34462],{"class":192},[76,41088,466],{"class":86},[76,41090,34467],{"class":192},[76,41092,466],{"class":86},[76,41094,34472],{"class":192},[76,41096,466],{"class":86},[76,41098,34477],{"class":192},[76,41100,466],{"class":86},[76,41102,34482],{"class":192},[76,41104,466],{"class":86},[76,41106,34487],{"class":192},[76,41108,466],{"class":86},[76,41110,34492],{"class":192},[76,41112,466],{"class":86},[76,41114,34497],{"class":192},[76,41116,466],{"class":86},[76,41118,34502],{"class":192},[76,41120,33215],{"class":86},[76,41122,41123,41125],{"class":78,"line":16730},[76,41124,34147],{"class":82},[76,41126,32853],{"class":86},[76,41128,41129],{"class":78,"line":16736},[76,41130,34515],{"class":146},[76,41132,41133,41135,41137,41139],{"class":78,"line":16750},[76,41134,3368],{"class":82},[76,41136,34522],{"class":86},[76,41138,26012],{"class":82},[76,41140,34166],{"class":86},[76,41142,41143,41145,41147],{"class":78,"line":16763},[76,41144,32579],{"class":86},[76,41146,133],{"class":82},[76,41148,32584],{"class":86},[76,41150,41151,41153,41155],{"class":78,"line":16768},[76,41152,32594],{"class":86},[76,41154,133],{"class":82},[76,41156,32599],{"class":86},[76,41158,41159],{"class":78,"line":16782},[76,41160,2365],{"emptyLinePlaceholder":2364},[76,41162,41163],{"class":78,"line":16787},[76,41164,34551],{"class":146},[76,41166,41167],{"class":78,"line":16793},[76,41168,32844],{"class":86},[76,41170,41171],{"class":78,"line":16798},[76,41172,34560],{"class":146},[76,41174,41175,41177,41179],{"class":78,"line":16812},[76,41176,32629],{"class":86},[76,41178,133],{"class":82},[76,41180,32634],{"class":86},[76,41182,41183],{"class":78,"line":16817},[76,41184,34573],{"class":146},[76,41186,41187,41189,41191,41193,41195,41197,41199],{"class":78,"line":16822},[76,41188,32646],{"class":86},[76,41190,133],{"class":82},[76,41192,32651],{"class":86},[76,41194,32654],{"class":5183},[76,41196,133],{"class":82},[76,41198,305],{"class":136},[76,41200,93],{"class":86},[76,41202,41203],{"class":78,"line":16836},[76,41204,34594],{"class":146},[76,41206,41207,41209,41211],{"class":78,"line":16848},[76,41208,34599],{"class":86},[76,41210,133],{"class":82},[76,41212,34604],{"class":86},[76,41214,41215,41217,41219],{"class":78,"line":16853},[76,41216,34609],{"class":86},[76,41218,133],{"class":82},[76,41220,34614],{"class":86},[76,41222,41223,41225,41227,41229,41231,41233,41235,41237],{"class":78,"line":16866},[76,41224,34619],{"class":136},[76,41226,87],{"class":86},[76,41228,34624],{"class":192},[76,41230,34627],{"class":86},[76,41232,34630],{"class":192},[76,41234,466],{"class":86},[76,41236,34635],{"class":192},[76,41238,34638],{"class":86},[46,41240,41242],{"id":41241},"_23googlenet","2.3.GoogLeNet",[21965,41244,41246],{"id":41245},"_231原理","2.3.1.原理",[29,41248,41249],{},[32,41250,41251],{},"网络结构",[21,41253,41254],{},[1426,41255],{"alt":71,"src":41256},"\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",[21,41258,41259],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[21,41261,41262],{},[1426,41263],{"alt":71,"src":41264},"\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",[21,41266,41267],{},[1426,41268],{"alt":71,"src":41269},"\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",[21,41271,41272],{},[1426,41273],{"alt":71,"src":41274},"\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",[29,41276,41277],{"start":96},[32,41278,41279],{},"1x1卷积的优点",[21,41281,41282],{},[1426,41283],{"alt":71,"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-027.png",[29,41286,41287],{"start":1143},[32,41288,41289],{},"全局平均池化层优点",[21,41291,41292],{},[1426,41293],{"alt":71,"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-028.png",[21,41296,41297],{},[1426,41298],{"alt":71,"src":41299},"\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",[29,41301,41302],{"start":1158},[32,41303,41304],{},"参数详细描述",[21,41306,41307],{},[1426,41308],{"alt":71,"src":41309},"\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",[21,41311,41312],{},[1426,41313],{"alt":71,"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-031.png",[21,41316,41317],{},[1426,41318],{"alt":71,"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-032.png",[21,41321,41322],{},[1426,41323],{"alt":71,"src":41324},"\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",[21,41326,41327],{},[1426,41328],{"alt":71,"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-034.png",[21,41331,41332],{},[1426,41333],{"alt":71,"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-035.png",[21,41336,41337],{},[1426,41338],{"alt":71,"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-036.png",[21,41341,41342],{},[1426,41343],{"alt":71,"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-037.png",[21,41346,41347],{},[1426,41348],{"alt":71,"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-038.png",[21,41351,41352],{},[1426,41353],{"alt":71,"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-039.png",[21,41356,41357],{},[1426,41358],{"alt":71,"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-040.png",[21,41361,41362],{},[1426,41363],{"alt":71,"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-041.png",[21,41366,41367],{},[1426,41368],{"alt":71,"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-042.png",[21,41371,41372],{},[1426,41373],{"alt":71,"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-043.png",[21,41376,41377],{},[1426,41378],{"alt":71,"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-044.png",[21,41381,41382],{},[1426,41383],{"alt":71,"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-045.png",[21,41386,41387],{},[1426,41388],{"alt":71,"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-046.png",[21,41391,41392],{},[1426,41393],{"alt":71,"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-047.png",[21,41396,41397],{},[1426,41398],{"alt":71,"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-048.png",[21,41401,41402],{},[1426,41403],{"alt":71,"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-049.png",[21,41406,41407],{},[1426,41408],{"alt":71,"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-050.png",[21965,41411,41413],{"id":41412},"_232代码实现","2.3.2.代码实现",[29,41415,41416],{},[32,41417,30680],{},[21,41419,41420],{},"根据原理一步一步搭建即可",[66,41422,41424],{"className":30347,"code":41423,"language":30349,"meta":71,"style":71},"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",[73,41425,41426,41432,41442,41452,41456,41473,41482,41497,41507,41512,41545,41550,41587,41634,41639,41675,41722,41727,41732,41767,41799,41803,41811,41827,41851,41876,41897,41902,41917,41921,41925,41930,41947,41952,41961,41976,41987,42031,42035,42063,42067,42078,42106,42110,42147,42151,42179,42183,42194,42230,42262,42290,42294,42305,42339,42371,42403,42436,42470,42498,42502,42513,42546,42578,42592,42596,42609,42613,42618,42630,42638,42660,42665,42670,42675,42680,42685,42690,42704,42712,42721,42734,42749,42758,42762,42770,42781,42792,42803,42814,42825,42831,42835,42840,42852,42872,42881],{"__ignoreMap":71},[76,41427,41428,41430],{"class":78,"line":79},[76,41429,30361],{"class":82},[76,41431,30364],{"class":86},[76,41433,41434,41436,41438,41440],{"class":78,"line":96},[76,41435,30706],{"class":82},[76,41437,30709],{"class":86},[76,41439,30361],{"class":82},[76,41441,30714],{"class":86},[76,41443,41444,41446,41448,41450],{"class":78,"line":1143},[76,41445,30706],{"class":82},[76,41447,30726],{"class":86},[76,41449,30361],{"class":82},[76,41451,30731],{"class":86},[76,41453,41454],{"class":78,"line":1158},[76,41455,2365],{"emptyLinePlaceholder":2364},[76,41457,41458,41460,41463,41465,41467,41469,41471],{"class":78,"line":1164},[76,41459,14661],{"class":82},[76,41461,41462],{"class":1927}," Inception",[76,41464,87],{"class":86},[76,41466,30747],{"class":1927},[76,41468,646],{"class":86},[76,41470,30752],{"class":1927},[76,41472,30755],{"class":86},[76,41474,41475,41477,41479],{"class":78,"line":1178},[76,41476,30770],{"class":82},[76,41478,30773],{"class":136},[76,41480,41481],{"class":86},"(self,in_channels,c1,c2,c3,c4):\n",[76,41483,41484,41486,41489,41491,41493,41495],{"class":78,"line":1184},[76,41485,30786],{"class":136},[76,41487,41488],{"class":86},"(Inception,",[76,41490,30792],{"class":136},[76,41492,30795],{"class":86},[76,41494,30798],{"class":136},[76,41496,1940],{"class":86},[76,41498,41499,41501,41503,41505],{"class":78,"line":1275},[76,41500,30814],{"class":136},[76,41502,34740],{"class":86},[76,41504,133],{"class":82},[76,41506,34745],{"class":86},[76,41508,41509],{"class":78,"line":1281},[76,41510,41511],{"class":146},"        # 路线1：定义1*1卷积\n",[76,41513,41514,41516,41519,41521,41523,41525,41527,41530,41532,41534,41537,41539,41541,41543],{"class":78,"line":1293},[76,41515,30814],{"class":136},[76,41517,41518],{"class":86},".p1_1",[76,41520,133],{"class":82},[76,41522,30822],{"class":86},[76,41524,30825],{"class":5183},[76,41526,133],{"class":82},[76,41528,41529],{"class":86},"in_channels,",[76,41531,30834],{"class":5183},[76,41533,133],{"class":82},[76,41535,41536],{"class":86},"c1,",[76,41538,30843],{"class":5183},[76,41540,133],{"class":82},[76,41542,305],{"class":136},[76,41544,93],{"class":86},[76,41546,41547],{"class":78,"line":1576},[76,41548,41549],{"class":146},"        # 路线2：定义1*1卷积和3*3\n",[76,41551,41552,41554,41557,41559,41561,41563,41565,41567,41569,41571,41574,41576,41579,41581,41583,41585],{"class":78,"line":1581},[76,41553,30814],{"class":136},[76,41555,41556],{"class":86},".p2_1",[76,41558,133],{"class":82},[76,41560,30822],{"class":86},[76,41562,30825],{"class":5183},[76,41564,133],{"class":82},[76,41566,41529],{"class":86},[76,41568,30834],{"class":5183},[76,41570,133],{"class":82},[76,41572,41573],{"class":86},"c2[",[76,41575,279],{"class":136},[76,41577,41578],{"class":86},"],",[76,41580,30843],{"class":5183},[76,41582,133],{"class":82},[76,41584,305],{"class":136},[76,41586,93],{"class":86},[76,41588,41589,41591,41594,41596,41598,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632],{"class":78,"line":1587},[76,41590,30814],{"class":136},[76,41592,41593],{"class":86},".p2_2",[76,41595,133],{"class":82},[76,41597,30822],{"class":86},[76,41599,30825],{"class":5183},[76,41601,133],{"class":82},[76,41603,41573],{"class":86},[76,41605,279],{"class":136},[76,41607,41578],{"class":86},[76,41609,30834],{"class":5183},[76,41611,133],{"class":82},[76,41613,41573],{"class":86},[76,41615,305],{"class":136},[76,41617,41578],{"class":86},[76,41619,30843],{"class":5183},[76,41621,133],{"class":82},[76,41623,159],{"class":136},[76,41625,466],{"class":86},[76,41627,30852],{"class":5183},[76,41629,133],{"class":82},[76,41631,305],{"class":136},[76,41633,93],{"class":86},[76,41635,41636],{"class":78,"line":1592},[76,41637,41638],{"class":146},"        # 路线3：定义1*1卷积和5*5\n",[76,41640,41641,41643,41646,41648,41650,41652,41654,41656,41658,41660,41663,41665,41667,41669,41671,41673],{"class":78,"line":1606},[76,41642,30814],{"class":136},[76,41644,41645],{"class":86},".p3_1",[76,41647,133],{"class":82},[76,41649,30822],{"class":86},[76,41651,30825],{"class":5183},[76,41653,133],{"class":82},[76,41655,41529],{"class":86},[76,41657,30834],{"class":5183},[76,41659,133],{"class":82},[76,41661,41662],{"class":86},"c3[",[76,41664,279],{"class":136},[76,41666,41578],{"class":86},[76,41668,30843],{"class":5183},[76,41670,133],{"class":82},[76,41672,305],{"class":136},[76,41674,93],{"class":86},[76,41676,41677,41679,41682,41684,41686,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720],{"class":78,"line":1611},[76,41678,30814],{"class":136},[76,41680,41681],{"class":86},".p3_2",[76,41683,133],{"class":82},[76,41685,30822],{"class":86},[76,41687,30825],{"class":5183},[76,41689,133],{"class":82},[76,41691,41662],{"class":86},[76,41693,279],{"class":136},[76,41695,41578],{"class":86},[76,41697,30834],{"class":5183},[76,41699,133],{"class":82},[76,41701,41662],{"class":86},[76,41703,305],{"class":136},[76,41705,41578],{"class":86},[76,41707,30843],{"class":5183},[76,41709,133],{"class":82},[76,41711,407],{"class":136},[76,41713,466],{"class":86},[76,41715,30852],{"class":5183},[76,41717,133],{"class":82},[76,41719,165],{"class":136},[76,41721,93],{"class":86},[76,41723,41724],{"class":78,"line":1617},[76,41725,41726],{"class":146},"        # 路线4：定义3*3最大池化和1*1卷积\n",[76,41728,41729],{"class":78,"line":1638},[76,41730,41731],{"class":146},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[76,41733,41734,41736,41739,41741,41743,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765],{"class":78,"line":1643},[76,41735,30814],{"class":136},[76,41737,41738],{"class":86},".p4_1",[76,41740,133],{"class":82},[76,41742,34798],{"class":86},[76,41744,30843],{"class":5183},[76,41746,133],{"class":82},[76,41748,159],{"class":136},[76,41750,466],{"class":86},[76,41752,30898],{"class":5183},[76,41754,133],{"class":82},[76,41756,305],{"class":136},[76,41758,466],{"class":86},[76,41760,30852],{"class":5183},[76,41762,133],{"class":82},[76,41764,305],{"class":136},[76,41766,93],{"class":86},[76,41768,41769,41771,41774,41776,41778,41780,41782,41784,41786,41788,41791,41793,41795,41797],{"class":78,"line":1657},[76,41770,30814],{"class":136},[76,41772,41773],{"class":86},".p4_2",[76,41775,133],{"class":82},[76,41777,30822],{"class":86},[76,41779,30825],{"class":5183},[76,41781,133],{"class":82},[76,41783,41529],{"class":86},[76,41785,30834],{"class":5183},[76,41787,133],{"class":82},[76,41789,41790],{"class":86},"c4,",[76,41792,30843],{"class":5183},[76,41794,133],{"class":82},[76,41796,305],{"class":136},[76,41798,93],{"class":86},[76,41800,41801],{"class":78,"line":1662},[76,41802,2365],{"emptyLinePlaceholder":2364},[76,41804,41805,41807,41809],{"class":78,"line":1691},[76,41806,30770],{"class":82},[76,41808,31062],{"class":1927},[76,41810,31065],{"class":86},[76,41812,41813,41816,41818,41820,41822,41824],{"class":78,"line":1696},[76,41814,41815],{"class":86},"        p1",[76,41817,133],{"class":82},[76,41819,30792],{"class":136},[76,41821,35153],{"class":86},[76,41823,30792],{"class":136},[76,41825,41826],{"class":86},".p1_1(x))\n",[76,41828,41829,41831,41833,41835,41837,41839,41842,41844,41846,41848],{"class":78,"line":1713},[76,41830,7052],{"class":86},[76,41832,133],{"class":82},[76,41834,30792],{"class":136},[76,41836,35153],{"class":86},[76,41838,30792],{"class":136},[76,41840,41841],{"class":86},".p2_2(",[76,41843,30792],{"class":136},[76,41845,35153],{"class":86},[76,41847,30792],{"class":136},[76,41849,41850],{"class":86},".p2_1(x))))\n",[76,41852,41853,41856,41858,41860,41862,41864,41867,41869,41871,41873],{"class":78,"line":1718},[76,41854,41855],{"class":86},"        p3",[76,41857,133],{"class":82},[76,41859,30792],{"class":136},[76,41861,35153],{"class":86},[76,41863,30792],{"class":136},[76,41865,41866],{"class":86},".p3_2(",[76,41868,30792],{"class":136},[76,41870,35153],{"class":86},[76,41872,30792],{"class":136},[76,41874,41875],{"class":86},".p3_1(x))))\n",[76,41877,41878,41881,41883,41885,41887,41889,41892,41894],{"class":78,"line":1723},[76,41879,41880],{"class":86},"        p4",[76,41882,133],{"class":82},[76,41884,30792],{"class":136},[76,41886,35153],{"class":86},[76,41888,30792],{"class":136},[76,41890,41891],{"class":86},".p4_2(",[76,41893,30792],{"class":136},[76,41895,41896],{"class":86},".p4_1(x)))\n",[76,41898,41899],{"class":78,"line":1728},[76,41900,41901],{"class":146},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[76,41903,41904,41906,41909,41911,41913,41915],{"class":78,"line":1742},[76,41905,14719],{"class":82},[76,41907,41908],{"class":86}," torch.cat((p1,p2,p3,p4),",[76,41910,32654],{"class":5183},[76,41912,133],{"class":82},[76,41914,305],{"class":136},[76,41916,93],{"class":86},[76,41918,41919],{"class":78,"line":1747},[76,41920,2365],{"emptyLinePlaceholder":2364},[76,41922,41923],{"class":78,"line":2542},[76,41924,2365],{"emptyLinePlaceholder":2364},[76,41926,41927],{"class":78,"line":2556},[76,41928,41929],{"class":146},"# 搭建GoogLeNet网络\n",[76,41931,41932,41934,41937,41939,41941,41943,41945],{"class":78,"line":2564},[76,41933,14661],{"class":82},[76,41935,41936],{"class":1927}," GoogLeNet",[76,41938,87],{"class":86},[76,41940,30747],{"class":1927},[76,41942,646],{"class":86},[76,41944,30752],{"class":1927},[76,41946,30755],{"class":86},[76,41948,41949],{"class":78,"line":2569},[76,41950,41951],{"class":146},"    # 必须把Inception导入到里边\n",[76,41953,41954,41956,41958],{"class":78,"line":2575},[76,41955,30770],{"class":82},[76,41957,30773],{"class":136},[76,41959,41960],{"class":86},"(self,Inception):\n",[76,41962,41963,41965,41968,41970,41972,41974],{"class":78,"line":2581},[76,41964,30786],{"class":136},[76,41966,41967],{"class":86},"(GoogLeNet,",[76,41969,30792],{"class":136},[76,41971,30795],{"class":86},[76,41973,30798],{"class":136},[76,41975,1940],{"class":86},[76,41977,41978,41980,41983,41985],{"class":78,"line":2586},[76,41979,30814],{"class":136},[76,41981,41982],{"class":86},".b1",[76,41984,133],{"class":82},[76,41986,37978],{"class":86},[76,41988,41989,41991,41993,41995,41997,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029],{"class":78,"line":7915},[76,41990,37983],{"class":86},[76,41992,30825],{"class":5183},[76,41994,133],{"class":82},[76,41996,305],{"class":136},[76,41998,466],{"class":86},[76,42000,30834],{"class":5183},[76,42002,133],{"class":82},[76,42004,291],{"class":136},[76,42006,466],{"class":86},[76,42008,30843],{"class":5183},[76,42010,133],{"class":82},[76,42012,457],{"class":136},[76,42014,466],{"class":86},[76,42016,30898],{"class":5183},[76,42018,133],{"class":82},[76,42020,165],{"class":136},[76,42022,466],{"class":86},[76,42024,30852],{"class":5183},[76,42026,133],{"class":82},[76,42028,159],{"class":136},[76,42030,38016],{"class":86},[76,42032,42033],{"class":78,"line":7939},[76,42034,38021],{"class":86},[76,42036,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061],{"class":78,"line":7944},[76,42038,38066],{"class":86},[76,42040,30843],{"class":5183},[76,42042,133],{"class":82},[76,42044,159],{"class":136},[76,42046,466],{"class":86},[76,42048,30898],{"class":5183},[76,42050,133],{"class":82},[76,42052,165],{"class":136},[76,42054,466],{"class":86},[76,42056,30852],{"class":5183},[76,42058,133],{"class":82},[76,42060,305],{"class":136},[76,42062,93],{"class":86},[76,42064,42065],{"class":78,"line":7950},[76,42066,38095],{"class":86},[76,42068,42069,42071,42074,42076],{"class":78,"line":7977},[76,42070,30814],{"class":136},[76,42072,42073],{"class":86},".b2",[76,42075,133],{"class":82},[76,42077,37978],{"class":86},[76,42079,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104],{"class":78,"line":7982},[76,42081,37983],{"class":86},[76,42083,30825],{"class":5183},[76,42085,133],{"class":82},[76,42087,291],{"class":136},[76,42089,466],{"class":86},[76,42091,30834],{"class":5183},[76,42093,133],{"class":82},[76,42095,291],{"class":136},[76,42097,466],{"class":86},[76,42099,30843],{"class":5183},[76,42101,133],{"class":82},[76,42103,305],{"class":136},[76,42105,38016],{"class":86},[76,42107,42108],{"class":78,"line":7988},[76,42109,38021],{"class":86},[76,42111,42112,42114,42116,42118,42120,42122,42124,42126,42129,42131,42133,42135,42137,42139,42141,42143,42145],{"class":78,"line":8000},[76,42113,37983],{"class":86},[76,42115,30825],{"class":5183},[76,42117,133],{"class":82},[76,42119,291],{"class":136},[76,42121,466],{"class":86},[76,42123,30834],{"class":5183},[76,42125,133],{"class":82},[76,42127,42128],{"class":136},"192",[76,42130,466],{"class":86},[76,42132,30843],{"class":5183},[76,42134,133],{"class":82},[76,42136,159],{"class":136},[76,42138,466],{"class":86},[76,42140,30852],{"class":5183},[76,42142,133],{"class":82},[76,42144,305],{"class":136},[76,42146,38016],{"class":86},[76,42148,42149],{"class":78,"line":8012},[76,42150,38021],{"class":86},[76,42152,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177],{"class":78,"line":8024},[76,42154,38066],{"class":86},[76,42156,30843],{"class":5183},[76,42158,133],{"class":82},[76,42160,159],{"class":136},[76,42162,466],{"class":86},[76,42164,30898],{"class":5183},[76,42166,133],{"class":82},[76,42168,165],{"class":136},[76,42170,466],{"class":86},[76,42172,30852],{"class":5183},[76,42174,133],{"class":82},[76,42176,305],{"class":136},[76,42178,93],{"class":86},[76,42180,42181],{"class":78,"line":9683},[76,42182,38095],{"class":86},[76,42184,42185,42187,42190,42192],{"class":78,"line":9708},[76,42186,30814],{"class":136},[76,42188,42189],{"class":86},".b3",[76,42191,133],{"class":82},[76,42193,37978],{"class":86},[76,42195,42196,42199,42201,42203,42205,42208,42210,42212,42214,42217,42219,42221,42223,42226,42228],{"class":78,"line":9731},[76,42197,42198],{"class":86},"            Inception(",[76,42200,42128],{"class":136},[76,42202,466],{"class":86},[76,42204,291],{"class":136},[76,42206,42207],{"class":86},",(",[76,42209,297],{"class":136},[76,42211,466],{"class":86},[76,42213,32039],{"class":136},[76,42215,42216],{"class":86},"),(",[76,42218,689],{"class":136},[76,42220,466],{"class":86},[76,42222,285],{"class":136},[76,42224,42225],{"class":86},"),",[76,42227,285],{"class":136},[76,42229,38016],{"class":86},[76,42231,42232,42234,42236,42238,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260],{"class":78,"line":9755},[76,42233,42198],{"class":86},[76,42235,34839],{"class":136},[76,42237,466],{"class":86},[76,42239,32039],{"class":136},[76,42241,42207],{"class":86},[76,42243,32039],{"class":136},[76,42245,466],{"class":86},[76,42247,42128],{"class":136},[76,42249,42216],{"class":86},[76,42251,285],{"class":136},[76,42253,466],{"class":86},[76,42255,297],{"class":136},[76,42257,42225],{"class":86},[76,42259,291],{"class":136},[76,42261,38016],{"class":86},[76,42263,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288],{"class":78,"line":9760},[76,42265,38066],{"class":86},[76,42267,30843],{"class":5183},[76,42269,133],{"class":82},[76,42271,159],{"class":136},[76,42273,466],{"class":86},[76,42275,30898],{"class":5183},[76,42277,133],{"class":82},[76,42279,165],{"class":136},[76,42281,466],{"class":86},[76,42283,30852],{"class":5183},[76,42285,133],{"class":82},[76,42287,305],{"class":136},[76,42289,93],{"class":86},[76,42291,42292],{"class":78,"line":9765},[76,42293,38095],{"class":86},[76,42295,42296,42298,42301,42303],{"class":78,"line":9770},[76,42297,30814],{"class":136},[76,42299,42300],{"class":86},".b4",[76,42302,133],{"class":82},[76,42304,37978],{"class":86},[76,42306,42307,42309,42312,42314,42316,42318,42320,42322,42325,42327,42329,42331,42333,42335,42337],{"class":78,"line":9779},[76,42308,42198],{"class":86},[76,42310,42311],{"class":136},"480",[76,42313,466],{"class":86},[76,42315,42128],{"class":136},[76,42317,42207],{"class":86},[76,42319,297],{"class":136},[76,42321,466],{"class":86},[76,42323,42324],{"class":136},"208",[76,42326,42216],{"class":86},[76,42328,689],{"class":136},[76,42330,466],{"class":86},[76,42332,695],{"class":136},[76,42334,42225],{"class":86},[76,42336,291],{"class":136},[76,42338,38016],{"class":86},[76,42340,42341,42343,42345,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369],{"class":78,"line":9784},[76,42342,42198],{"class":86},[76,42344,38426],{"class":136},[76,42346,466],{"class":86},[76,42348,21015],{"class":136},[76,42350,42207],{"class":86},[76,42352,706],{"class":136},[76,42354,466],{"class":86},[76,42356,31470],{"class":136},[76,42358,42216],{"class":86},[76,42360,888],{"class":136},[76,42362,466],{"class":86},[76,42364,291],{"class":136},[76,42366,42225],{"class":86},[76,42368,291],{"class":136},[76,42370,38016],{"class":86},[76,42372,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401],{"class":78,"line":9790},[76,42374,42198],{"class":86},[76,42376,38426],{"class":136},[76,42378,466],{"class":86},[76,42380,32039],{"class":136},[76,42382,42207],{"class":86},[76,42384,32039],{"class":136},[76,42386,466],{"class":86},[76,42388,34839],{"class":136},[76,42390,42216],{"class":86},[76,42392,888],{"class":136},[76,42394,466],{"class":86},[76,42396,291],{"class":136},[76,42398,42225],{"class":86},[76,42400,291],{"class":136},[76,42402,38016],{"class":86},[76,42404,42405,42407,42409,42411,42413,42415,42417,42419,42422,42424,42426,42428,42430,42432,42434],{"class":78,"line":9811},[76,42406,42198],{"class":86},[76,42408,38426],{"class":136},[76,42410,466],{"class":86},[76,42412,706],{"class":136},[76,42414,42207],{"class":86},[76,42416,32039],{"class":136},[76,42418,466],{"class":86},[76,42420,42421],{"class":136},"288",[76,42423,42216],{"class":86},[76,42425,285],{"class":136},[76,42427,466],{"class":86},[76,42429,291],{"class":136},[76,42431,42225],{"class":86},[76,42433,291],{"class":136},[76,42435,38016],{"class":86},[76,42437,42438,42440,42443,42445,42447,42449,42451,42453,42456,42458,42460,42462,42464,42466,42468],{"class":78,"line":9817},[76,42439,42198],{"class":86},[76,42441,42442],{"class":136},"528",[76,42444,466],{"class":86},[76,42446,34839],{"class":136},[76,42448,42207],{"class":86},[76,42450,21015],{"class":136},[76,42452,466],{"class":86},[76,42454,42455],{"class":136},"320",[76,42457,42216],{"class":86},[76,42459,285],{"class":136},[76,42461,466],{"class":86},[76,42463,32039],{"class":136},[76,42465,42225],{"class":86},[76,42467,32039],{"class":136},[76,42469,38016],{"class":86},[76,42471,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496],{"class":78,"line":9831},[76,42473,38066],{"class":86},[76,42475,30843],{"class":5183},[76,42477,133],{"class":82},[76,42479,159],{"class":136},[76,42481,466],{"class":86},[76,42483,30898],{"class":5183},[76,42485,133],{"class":82},[76,42487,165],{"class":136},[76,42489,466],{"class":86},[76,42491,30852],{"class":5183},[76,42493,133],{"class":82},[76,42495,305],{"class":136},[76,42497,93],{"class":86},[76,42499,42500],{"class":78,"line":9837},[76,42501,38095],{"class":86},[76,42503,42504,42506,42509,42511],{"class":78,"line":9864},[76,42505,30814],{"class":136},[76,42507,42508],{"class":86},".b5",[76,42510,133],{"class":82},[76,42512,37978],{"class":86},[76,42514,42515,42517,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538,42540,42542,42544],{"class":78,"line":9873},[76,42516,42198],{"class":86},[76,42518,42519],{"class":136},"832",[76,42521,466],{"class":86},[76,42523,34839],{"class":136},[76,42525,42207],{"class":86},[76,42527,21015],{"class":136},[76,42529,466],{"class":86},[76,42531,42455],{"class":136},[76,42533,42216],{"class":86},[76,42535,285],{"class":136},[76,42537,466],{"class":86},[76,42539,32039],{"class":136},[76,42541,42225],{"class":86},[76,42543,32039],{"class":136},[76,42545,38016],{"class":86},[76,42547,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576],{"class":78,"line":9879},[76,42549,42198],{"class":86},[76,42551,42519],{"class":136},[76,42553,466],{"class":86},[76,42555,34909],{"class":136},[76,42557,42207],{"class":86},[76,42559,42128],{"class":136},[76,42561,466],{"class":86},[76,42563,34909],{"class":136},[76,42565,42216],{"class":86},[76,42567,695],{"class":136},[76,42569,466],{"class":86},[76,42571,32039],{"class":136},[76,42573,42225],{"class":86},[76,42575,32039],{"class":136},[76,42577,38016],{"class":86},[76,42579,42580,42583,42585,42587,42589],{"class":78,"line":9887},[76,42581,42582],{"class":86},"            nn.AdaptiveAvgPool2d((",[76,42584,305],{"class":136},[76,42586,466],{"class":86},[76,42588,305],{"class":136},[76,42590,42591],{"class":86},")),\n",[76,42593,42594],{"class":78,"line":9892},[76,42595,38759],{"class":86},[76,42597,42598,42600,42603,42605,42607],{"class":78,"line":16571},[76,42599,38764],{"class":86},[76,42601,42602],{"class":136},"1024",[76,42604,466],{"class":86},[76,42606,534],{"class":136},[76,42608,93],{"class":86},[76,42610,42611],{"class":78,"line":16577},[76,42612,38095],{"class":86},[76,42614,42615],{"class":78,"line":16600},[76,42616,42617],{"class":146},"        # 对模型参数初始化\n",[76,42619,42620,42622,42624,42626,42628],{"class":78,"line":16606},[76,42621,3368],{"class":82},[76,42623,38837],{"class":86},[76,42625,26012],{"class":82},[76,42627,38842],{"class":136},[76,42629,38845],{"class":86},[76,42631,42632,42634,42636],{"class":78,"line":16629},[76,42633,4607],{"class":82},[76,42635,38857],{"class":136},[76,42637,38860],{"class":86},[76,42639,42640,42642,42645,42647,42650,42652,42654,42656,42658],{"class":78,"line":16643},[76,42641,38870],{"class":86},[76,42643,42644],{"class":5183},"mode",[76,42646,133],{"class":82},[76,42648,42649],{"class":192},"'fan_out'",[76,42651,466],{"class":86},[76,42653,38873],{"class":5183},[76,42655,133],{"class":82},[76,42657,38878],{"class":192},[76,42659,93],{"class":86},[76,42661,42662],{"class":78,"line":16663},[76,42663,42664],{"class":146},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[76,42666,42667],{"class":78,"line":16669},[76,42668,42669],{"class":146},"                # ② mode = 'fan_out'决定使用的fan值：\n",[76,42671,42672],{"class":78,"line":16680},[76,42673,42674],{"class":146},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[76,42676,42677],{"class":78,"line":16703},[76,42678,42679],{"class":146},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[76,42681,42682],{"class":78,"line":16725},[76,42683,42684],{"class":146},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[76,42686,42687],{"class":78,"line":16730},[76,42688,42689],{"class":146},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[76,42691,42692,42694,42696,42698,42700,42702],{"class":78,"line":16736},[76,42693,38890],{"class":82},[76,42695,38893],{"class":86},[76,42697,38896],{"class":82},[76,42699,38899],{"class":82},[76,42701,38902],{"class":136},[76,42703,3704],{"class":86},[76,42705,42706,42708,42710],{"class":78,"line":16750},[76,42707,38914],{"class":86},[76,42709,279],{"class":136},[76,42711,93],{"class":86},[76,42713,42714,42717,42719],{"class":78,"line":16763},[76,42715,42716],{"class":82},"                elif",[76,42718,38857],{"class":136},[76,42720,38933],{"class":86},[76,42722,42723,42726,42728,42730,42732],{"class":78,"line":16768},[76,42724,42725],{"class":86},"                    nn.init.normal_(m.weight,",[76,42727,279],{"class":136},[76,42729,466],{"class":86},[76,42731,38955],{"class":136},[76,42733,93],{"class":86},[76,42735,42736,42739,42741,42743,42745,42747],{"class":78,"line":16782},[76,42737,42738],{"class":82},"                    if",[76,42740,38893],{"class":86},[76,42742,38896],{"class":82},[76,42744,38899],{"class":82},[76,42746,38902],{"class":136},[76,42748,3704],{"class":86},[76,42750,42751,42754,42756],{"class":78,"line":16787},[76,42752,42753],{"class":86},"                        nn.init.constant_(m.bias,",[76,42755,279],{"class":136},[76,42757,93],{"class":86},[76,42759,42760],{"class":78,"line":16793},[76,42761,35134],{"class":146},[76,42763,42764,42766,42768],{"class":78,"line":16798},[76,42765,30770],{"class":82},[76,42767,31062],{"class":1927},[76,42769,31065],{"class":86},[76,42771,42772,42774,42776,42778],{"class":78,"line":16812},[76,42773,31070],{"class":86},[76,42775,133],{"class":82},[76,42777,30792],{"class":136},[76,42779,42780],{"class":86},".b1(x)\n",[76,42782,42783,42785,42787,42789],{"class":78,"line":16817},[76,42784,31070],{"class":86},[76,42786,133],{"class":82},[76,42788,30792],{"class":136},[76,42790,42791],{"class":86},".b2(x)\n",[76,42793,42794,42796,42798,42800],{"class":78,"line":16822},[76,42795,31070],{"class":86},[76,42797,133],{"class":82},[76,42799,30792],{"class":136},[76,42801,42802],{"class":86},".b3(x)\n",[76,42804,42805,42807,42809,42811],{"class":78,"line":16836},[76,42806,31070],{"class":86},[76,42808,133],{"class":82},[76,42810,30792],{"class":136},[76,42812,42813],{"class":86},".b4(x)\n",[76,42815,42816,42818,42820,42822],{"class":78,"line":16848},[76,42817,31070],{"class":86},[76,42819,133],{"class":82},[76,42821,30792],{"class":136},[76,42823,42824],{"class":86},".b5(x)\n",[76,42826,42827,42829],{"class":78,"line":16853},[76,42828,14719],{"class":82},[76,42830,31178],{"class":86},[76,42832,42833],{"class":78,"line":16866},[76,42834,2365],{"emptyLinePlaceholder":2364},[76,42836,42837],{"class":78,"line":16871},[76,42838,42839],{"class":146},"# 模型展示\n",[76,42841,42842,42844,42846,42848,42850],{"class":78,"line":16876},[76,42843,1495],{"class":82},[76,42845,31189],{"class":136},[76,42847,2914],{"class":82},[76,42849,31194],{"class":192},[76,42851,3704],{"class":86},[76,42853,42854,42856,42858,42860,42862,42864,42866,42868,42870],{"class":78,"line":16881},[76,42855,31206],{"class":86},[76,42857,133],{"class":82},[76,42859,30420],{"class":86},[76,42861,31213],{"class":192},[76,42863,1668],{"class":82},[76,42865,31218],{"class":86},[76,42867,1665],{"class":82},[76,42869,30445],{"class":192},[76,42871,93],{"class":86},[76,42873,42874,42876,42878],{"class":78,"line":16894},[76,42875,31258],{"class":86},[76,42877,133],{"class":82},[76,42879,42880],{"class":86},"GoogLeNet(Inception).to(device)\n",[76,42882,42883,42885,42887,42889,42891,42893,42895,42897],{"class":78,"line":16899},[76,42884,31268],{"class":136},[76,42886,31271],{"class":86},[76,42888,305],{"class":136},[76,42890,466],{"class":86},[76,42892,31470],{"class":136},[76,42894,466],{"class":86},[76,42896,31470],{"class":136},[76,42898,31284],{"class":86},[29,42900,42901],{"start":96},[32,42902,39152],{},[66,42904,42906],{"className":30347,"code":42905,"language":30349,"meta":71,"style":71},"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",[73,42907,42908,42914,42920,42930,42936,42946,42956,42966,42976,42986,42990,43001,43011,43015,43019,43023,43031,43043,43053,43069,43079,43111,43125,43135,43145,43149,43159,43173,43183,43193,43203,43209,43213,43217,43221,43225,43229,43237,43257,43261,43265,43269,43273,43277,43293,43297,43301,43309,43313,43317,43325,43329,43333,43337,43345,43349,43353,43357,43361,43369,43373,43381,43385,43393,43397,43405,43409,43417,43421,43425,43433,43437,43441,43445,43457,43481,43495,43499,43503,43507,43515,43519,43527,43531,43539,43543,43551,43555,43563,43567,43575,43579,43591,43595,43603,43607,43615,43619,43623,43627,43631,43639,43643,43659,43663,43671,43675,43679,43683,43687,43691,43695,43699,43715,43719,43731,43735,43747,43751,43763,43767,43775,43779,43787,43791,43795,43799,43805,43809,43817,43821,43837,43841,43849,43853,43869,43881,43885,43897,43901,43905,43913,43917,43921,43929,43933,43941,43945,43953,43957,43961,44003,44045,44049,44053,44069,44073,44089,44093,44097,44105,44109,44113,44125,44163,44167,44171,44179,44183,44197,44207,44213,44219,44225,44231,44235,44239,44245,44249,44253,44261,44265,44283,44287,44291,44295,44311,44315,44319,44323,44327,44331,44351,44371,44375,44379,44383,44391,44399,44403,44419,44439,44459,44463,44467,44475,44483,44487,44491,44495,44507,44511,44521,44529,44546],{"__ignoreMap":71},[76,42909,42910,42912],{"class":78,"line":79},[76,42911,30361],{"class":82},[76,42913,31791],{"class":86},[76,42915,42916,42918],{"class":78,"line":96},[76,42917,30361],{"class":82},[76,42919,31798],{"class":86},[76,42921,42922,42924,42926,42928],{"class":78,"line":1143},[76,42923,30361],{"class":82},[76,42925,31809],{"class":86},[76,42927,31352],{"class":82},[76,42929,31814],{"class":86},[76,42931,42932,42934],{"class":78,"line":1158},[76,42933,30361],{"class":82},[76,42935,30364],{"class":86},[76,42937,42938,42940,42942,42944],{"class":78,"line":1164},[76,42939,30706],{"class":82},[76,42941,31384],{"class":86},[76,42943,30361],{"class":82},[76,42945,31831],{"class":86},[76,42947,42948,42950,42952,42954],{"class":78,"line":1178},[76,42949,30706],{"class":82},[76,42951,31337],{"class":86},[76,42953,30361],{"class":82},[76,42955,31342],{"class":86},[76,42957,42958,42960,42962,42964],{"class":78,"line":1184},[76,42959,30706],{"class":82},[76,42961,31367],{"class":86},[76,42963,30361],{"class":82},[76,42965,31372],{"class":86},[76,42967,42968,42970,42972,42974],{"class":78,"line":1275},[76,42969,30361],{"class":82},[76,42971,31384],{"class":86},[76,42973,31352],{"class":82},[76,42975,31389],{"class":86},[76,42977,42978,42980,42982,42984],{"class":78,"line":1281},[76,42979,30361],{"class":82},[76,42981,31401],{"class":86},[76,42983,31352],{"class":82},[76,42985,31406],{"class":86},[76,42987,42988],{"class":78,"line":1293},[76,42989,31876],{"class":146},[76,42991,42992,42994,42996,42998],{"class":78,"line":1576},[76,42993,30706],{"class":82},[76,42995,31883],{"class":86},[76,42997,30361],{"class":82},[76,42999,43000],{"class":86}," GoogLeNet, Inception\n",[76,43002,43003,43005,43007,43009],{"class":78,"line":1581},[76,43004,30706],{"class":82},[76,43006,30709],{"class":86},[76,43008,30361],{"class":82},[76,43010,30714],{"class":86},[76,43012,43013],{"class":78,"line":1587},[76,43014,2365],{"emptyLinePlaceholder":2364},[76,43016,43017],{"class":78,"line":1592},[76,43018,2365],{"emptyLinePlaceholder":2364},[76,43020,43021],{"class":78,"line":1606},[76,43022,31911],{"class":146},[76,43024,43025,43027,43029],{"class":78,"line":1611},[76,43026,31916],{"class":82},[76,43028,31919],{"class":1927},[76,43030,31922],{"class":86},[76,43032,43033,43035,43037,43039,43041],{"class":78,"line":1617},[76,43034,31927],{"class":86},[76,43036,133],{"class":82},[76,43038,31424],{"class":86},[76,43040,31432],{"class":192},[76,43042,31435],{"class":86},[76,43044,43045,43047,43049,43051],{"class":78,"line":1638},[76,43046,31940],{"class":5183},[76,43048,133],{"class":82},[76,43050,31445],{"class":136},[76,43052,31435],{"class":86},[76,43054,43055,43057,43059,43061,43063,43065,43067],{"class":78,"line":1643},[76,43056,31951],{"class":5183},[76,43058,133],{"class":82},[76,43060,31462],{"class":86},[76,43062,31465],{"class":5183},[76,43064,133],{"class":82},[76,43066,35418],{"class":136},[76,43068,31473],{"class":86},[76,43070,43071,43073,43075,43077],{"class":78,"line":1657},[76,43072,31968],{"class":5183},[76,43074,133],{"class":82},[76,43076,31445],{"class":136},[76,43078,93],{"class":86},[76,43080,43081,43083,43085,43087,43089,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109],{"class":78,"line":1662},[76,43082,31979],{"class":86},[76,43084,133],{"class":82},[76,43086,31984],{"class":86},[76,43088,31987],{"class":136},[76,43090,87],{"class":86},[76,43092,31992],{"class":136},[76,43094,543],{"class":82},[76,43096,7325],{"class":136},[76,43098,31999],{"class":86},[76,43100,31987],{"class":136},[76,43102,87],{"class":86},[76,43104,32006],{"class":136},[76,43106,543],{"class":82},[76,43108,7325],{"class":136},[76,43110,32013],{"class":86},[76,43112,43113,43115,43117,43119,43121,43123],{"class":78,"line":1691},[76,43114,32018],{"class":86},[76,43116,133],{"class":82},[76,43118,32023],{"class":86},[76,43120,31506],{"class":5183},[76,43122,133],{"class":82},[76,43124,31511],{"class":86},[76,43126,43127,43129,43131,43133],{"class":78,"line":1696},[76,43128,32034],{"class":5183},[76,43130,133],{"class":82},[76,43132,285],{"class":136},[76,43134,31435],{"class":86},[76,43136,43137,43139,43141,43143],{"class":78,"line":1713},[76,43138,32046],{"class":5183},[76,43140,133],{"class":82},[76,43142,31445],{"class":136},[76,43144,31435],{"class":86},[76,43146,43147],{"class":78,"line":1718},[76,43148,32057],{"class":146},[76,43150,43151,43153,43155,43157],{"class":78,"line":1723},[76,43152,32062],{"class":5183},[76,43154,133],{"class":82},[76,43156,483],{"class":136},[76,43158,93],{"class":86},[76,43160,43161,43163,43165,43167,43169,43171],{"class":78,"line":1728},[76,43162,32073],{"class":86},[76,43164,133],{"class":82},[76,43166,31503],{"class":86},[76,43168,31506],{"class":5183},[76,43170,133],{"class":82},[76,43172,32084],{"class":86},[76,43174,43175,43177,43179,43181],{"class":78,"line":1742},[76,43176,32089],{"class":5183},[76,43178,133],{"class":82},[76,43180,285],{"class":136},[76,43182,31435],{"class":86},[76,43184,43185,43187,43189,43191],{"class":78,"line":1747},[76,43186,32100],{"class":5183},[76,43188,133],{"class":82},[76,43190,31445],{"class":136},[76,43192,31435],{"class":86},[76,43194,43195,43197,43199,43201],{"class":78,"line":2542},[76,43196,32111],{"class":5183},[76,43198,133],{"class":82},[76,43200,483],{"class":136},[76,43202,93],{"class":86},[76,43204,43205,43207],{"class":78,"line":2556},[76,43206,4055],{"class":82},[76,43208,32124],{"class":86},[76,43210,43211],{"class":78,"line":2564},[76,43212,2365],{"emptyLinePlaceholder":2364},[76,43214,43215],{"class":78,"line":2569},[76,43216,32133],{"class":146},[76,43218,43219],{"class":78,"line":2575},[76,43220,32138],{"class":146},[76,43222,43223],{"class":78,"line":2581},[76,43224,2365],{"emptyLinePlaceholder":2364},[76,43226,43227],{"class":78,"line":2586},[76,43228,32147],{"class":146},[76,43230,43231,43233,43235],{"class":78,"line":7915},[76,43232,31916],{"class":82},[76,43234,32154],{"class":1927},[76,43236,32157],{"class":86},[76,43238,43239,43241,43243,43245,43247,43249,43251,43253,43255],{"class":78,"line":7939},[76,43240,31206],{"class":86},[76,43242,133],{"class":82},[76,43244,30420],{"class":86},[76,43246,31213],{"class":192},[76,43248,1668],{"class":82},[76,43250,31218],{"class":86},[76,43252,1665],{"class":82},[76,43254,32176],{"class":192},[76,43256,93],{"class":86},[76,43258,43259],{"class":78,"line":7944},[76,43260,2365],{"emptyLinePlaceholder":2364},[76,43262,43263],{"class":78,"line":7950},[76,43264,2365],{"emptyLinePlaceholder":2364},[76,43266,43267],{"class":78,"line":7977},[76,43268,32191],{"class":146},[76,43270,43271],{"class":78,"line":7982},[76,43272,32196],{"class":146},[76,43274,43275],{"class":78,"line":7988},[76,43276,32201],{"class":146},[76,43278,43279,43281,43283,43285,43287,43289,43291],{"class":78,"line":8000},[76,43280,32206],{"class":86},[76,43282,133],{"class":82},[76,43284,32211],{"class":86},[76,43286,32214],{"class":5183},[76,43288,133],{"class":82},[76,43290,32219],{"class":136},[76,43292,93],{"class":86},[76,43294,43295],{"class":78,"line":8012},[76,43296,2365],{"emptyLinePlaceholder":2364},[76,43298,43299],{"class":78,"line":8024},[76,43300,32230],{"class":146},[76,43302,43303,43305,43307],{"class":78,"line":9683},[76,43304,32235],{"class":86},[76,43306,133],{"class":82},[76,43308,32240],{"class":86},[76,43310,43311],{"class":78,"line":9708},[76,43312,2365],{"emptyLinePlaceholder":2364},[76,43314,43315],{"class":78,"line":9731},[76,43316,32249],{"class":146},[76,43318,43319,43321,43323],{"class":78,"line":9755},[76,43320,31258],{"class":86},[76,43322,133],{"class":82},[76,43324,32258],{"class":86},[76,43326,43327],{"class":78,"line":9760},[76,43328,32263],{"class":146},[76,43330,43331],{"class":78,"line":9765},[76,43332,32268],{"class":146},[76,43334,43335],{"class":78,"line":9770},[76,43336,32273],{"class":146},[76,43338,43339,43341,43343],{"class":78,"line":9779},[76,43340,32278],{"class":86},[76,43342,133],{"class":82},[76,43344,32283],{"class":86},[76,43346,43347],{"class":78,"line":9784},[76,43348,2365],{"emptyLinePlaceholder":2364},[76,43350,43351],{"class":78,"line":9790},[76,43352,2365],{"emptyLinePlaceholder":2364},[76,43354,43355],{"class":78,"line":9811},[76,43356,32296],{"class":146},[76,43358,43359],{"class":78,"line":9817},[76,43360,32301],{"class":146},[76,43362,43363,43365,43367],{"class":78,"line":9831},[76,43364,32306],{"class":86},[76,43366,133],{"class":82},[76,43368,32311],{"class":136},[76,43370,43371],{"class":78,"line":9837},[76,43372,32316],{"class":146},[76,43374,43375,43377,43379],{"class":78,"line":9864},[76,43376,32321],{"class":86},[76,43378,133],{"class":82},[76,43380,32326],{"class":86},[76,43382,43383],{"class":78,"line":9873},[76,43384,32331],{"class":146},[76,43386,43387,43389,43391],{"class":78,"line":9879},[76,43388,32336],{"class":86},[76,43390,133],{"class":82},[76,43392,32326],{"class":86},[76,43394,43395],{"class":78,"line":9887},[76,43396,32345],{"class":146},[76,43398,43399,43401,43403],{"class":78,"line":9892},[76,43400,32350],{"class":86},[76,43402,133],{"class":82},[76,43404,32326],{"class":86},[76,43406,43407],{"class":78,"line":16571},[76,43408,32359],{"class":146},[76,43410,43411,43413,43415],{"class":78,"line":16577},[76,43412,32364],{"class":86},[76,43414,133],{"class":82},[76,43416,32326],{"class":86},[76,43418,43419],{"class":78,"line":16600},[76,43420,2365],{"emptyLinePlaceholder":2364},[76,43422,43423],{"class":78,"line":16606},[76,43424,32377],{"class":146},[76,43426,43427,43429,43431],{"class":78,"line":16629},[76,43428,32382],{"class":86},[76,43430,133],{"class":82},[76,43432,32387],{"class":86},[76,43434,43435],{"class":78,"line":16643},[76,43436,2365],{"emptyLinePlaceholder":2364},[76,43438,43439],{"class":78,"line":16663},[76,43440,2365],{"emptyLinePlaceholder":2364},[76,43442,43443],{"class":78,"line":16669},[76,43444,32400],{"class":146},[76,43446,43447,43449,43451,43453,43455],{"class":78,"line":16680},[76,43448,3166],{"class":82},[76,43450,32407],{"class":86},[76,43452,26012],{"class":82},[76,43454,32412],{"class":136},[76,43456,32415],{"class":86},[76,43458,43459,43461,43463,43465,43467,43469,43471,43473,43475,43477,43479],{"class":78,"line":16703},[76,43460,32420],{"class":136},[76,43462,87],{"class":86},[76,43464,32425],{"class":192},[76,43466,32428],{"class":136},[76,43468,672],{"class":192},[76,43470,32428],{"class":136},[76,43472,339],{"class":192},[76,43474,32437],{"class":86},[76,43476,620],{"class":82},[76,43478,305],{"class":136},[76,43480,30466],{"class":86},[76,43482,43483,43485,43487,43489,43491,43493],{"class":78,"line":16725},[76,43484,32420],{"class":136},[76,43486,87],{"class":86},[76,43488,32452],{"class":192},[76,43490,543],{"class":82},[76,43492,534],{"class":136},[76,43494,93],{"class":86},[76,43496,43497],{"class":78,"line":16730},[76,43498,2365],{"emptyLinePlaceholder":2364},[76,43500,43501],{"class":78,"line":16736},[76,43502,32467],{"class":146},[76,43504,43505],{"class":78,"line":16750},[76,43506,32472],{"class":146},[76,43508,43509,43511,43513],{"class":78,"line":16763},[76,43510,32477],{"class":86},[76,43512,133],{"class":82},[76,43514,32311],{"class":136},[76,43516,43517],{"class":78,"line":16768},[76,43518,32486],{"class":146},[76,43520,43521,43523,43525],{"class":78,"line":16782},[76,43522,32491],{"class":86},[76,43524,133],{"class":82},[76,43526,3050],{"class":136},[76,43528,43529],{"class":78,"line":16787},[76,43530,32500],{"class":146},[76,43532,43533,43535,43537],{"class":78,"line":16793},[76,43534,32505],{"class":86},[76,43536,133],{"class":82},[76,43538,32311],{"class":136},[76,43540,43541],{"class":78,"line":16798},[76,43542,32514],{"class":146},[76,43544,43545,43547,43549],{"class":78,"line":16812},[76,43546,32519],{"class":86},[76,43548,133],{"class":82},[76,43550,3050],{"class":136},[76,43552,43553],{"class":78,"line":16817},[76,43554,32528],{"class":146},[76,43556,43557,43559,43561],{"class":78,"line":16822},[76,43558,32533],{"class":86},[76,43560,133],{"class":82},[76,43562,3050],{"class":136},[76,43564,43565],{"class":78,"line":16836},[76,43566,32542],{"class":146},[76,43568,43569,43571,43573],{"class":78,"line":16848},[76,43570,32547],{"class":86},[76,43572,133],{"class":82},[76,43574,3050],{"class":136},[76,43576,43577],{"class":78,"line":16853},[76,43578,32556],{"class":146},[76,43580,43581,43583,43585,43587,43589],{"class":78,"line":16866},[76,43582,3368],{"class":82},[76,43584,31570],{"class":86},[76,43586,26012],{"class":82},[76,43588,31575],{"class":136},[76,43590,32569],{"class":86},[76,43592,43593],{"class":78,"line":16871},[76,43594,32574],{"class":146},[76,43596,43597,43599,43601],{"class":78,"line":16876},[76,43598,32579],{"class":86},[76,43600,133],{"class":82},[76,43602,32584],{"class":86},[76,43604,43605],{"class":78,"line":16881},[76,43606,32589],{"class":146},[76,43608,43609,43611,43613],{"class":78,"line":16894},[76,43610,32594],{"class":86},[76,43612,133],{"class":82},[76,43614,32599],{"class":86},[76,43616,43617],{"class":78,"line":16899},[76,43618,32605],{"class":146},[76,43620,43621],{"class":78,"line":32602},[76,43622,32611],{"class":86},[76,43624,43625],{"class":78,"line":32608},[76,43626,32617],{"class":146},[76,43628,43629],{"class":78,"line":32614},[76,43630,32623],{"class":146},[76,43632,43633,43635,43637],{"class":78,"line":32620},[76,43634,32629],{"class":86},[76,43636,133],{"class":82},[76,43638,32634],{"class":86},[76,43640,43641],{"class":78,"line":32626},[76,43642,32640],{"class":146},[76,43644,43645,43647,43649,43651,43653,43655,43657],{"class":78,"line":32637},[76,43646,32646],{"class":86},[76,43648,133],{"class":82},[76,43650,32651],{"class":86},[76,43652,32654],{"class":5183},[76,43654,133],{"class":82},[76,43656,305],{"class":136},[76,43658,93],{"class":86},[76,43660,43661],{"class":78,"line":32643},[76,43662,32666],{"class":146},[76,43664,43665,43667,43669],{"class":78,"line":32663},[76,43666,32672],{"class":86},[76,43668,133],{"class":82},[76,43670,32677],{"class":86},[76,43672,43673],{"class":78,"line":32669},[76,43674,32683],{"class":146},[76,43676,43677],{"class":78,"line":32680},[76,43678,32689],{"class":86},[76,43680,43681],{"class":78,"line":32686},[76,43682,32695],{"class":146},[76,43684,43685],{"class":78,"line":32692},[76,43686,32701],{"class":86},[76,43688,43689],{"class":78,"line":32698},[76,43690,32707],{"class":146},[76,43692,43693],{"class":78,"line":32704},[76,43694,32713],{"class":86},[76,43696,43697],{"class":78,"line":32710},[76,43698,32719],{"class":146},[76,43700,43701,43703,43705,43707,43709,43711,43713],{"class":78,"line":32716},[76,43702,32725],{"class":86},[76,43704,9444],{"class":82},[76,43706,32730],{"class":86},[76,43708,543],{"class":82},[76,43710,32735],{"class":86},[76,43712,279],{"class":136},[76,43714,93],{"class":86},[76,43716,43717],{"class":78,"line":32722},[76,43718,32745],{"class":146},[76,43720,43721,43723,43725,43727,43729],{"class":78,"line":32742},[76,43722,32751],{"class":86},[76,43724,9444],{"class":82},[76,43726,32756],{"class":86},[76,43728,2914],{"class":82},[76,43730,32761],{"class":86},[76,43732,43733],{"class":78,"line":32748},[76,43734,32767],{"class":146},[76,43736,43737,43739,43741,43743,43745],{"class":78,"line":32764},[76,43738,32773],{"class":86},[76,43740,9444],{"class":82},[76,43742,32735],{"class":86},[76,43744,279],{"class":136},[76,43746,93],{"class":86},[76,43748,43749],{"class":78,"line":32770},[76,43750,32787],{"class":146},[76,43752,43753,43755,43757,43759,43761],{"class":78,"line":32784},[76,43754,3368],{"class":82},[76,43756,32795],{"class":86},[76,43758,26012],{"class":82},[76,43760,31575],{"class":136},[76,43762,32802],{"class":86},[76,43764,43765],{"class":78,"line":32790},[76,43766,32808],{"class":146},[76,43768,43769,43771,43773],{"class":78,"line":32805},[76,43770,32579],{"class":86},[76,43772,133],{"class":82},[76,43774,32584],{"class":86},[76,43776,43777],{"class":78,"line":32811},[76,43778,32823],{"class":146},[76,43780,43781,43783,43785],{"class":78,"line":32820},[76,43782,32594],{"class":86},[76,43784,133],{"class":82},[76,43786,32599],{"class":86},[76,43788,43789],{"class":78,"line":32826},[76,43790,32838],{"class":146},[76,43792,43793],{"class":78,"line":32835},[76,43794,32844],{"class":86},[76,43796,43797],{"class":78,"line":32841},[76,43798,36325],{"class":146},[76,43800,43801,43803],{"class":78,"line":32847},[76,43802,32850],{"class":82},[76,43804,32853],{"class":86},[76,43806,43807],{"class":78,"line":32856},[76,43808,32859],{"class":146},[76,43810,43811,43813,43815],{"class":78,"line":32862},[76,43812,36340],{"class":86},[76,43814,133],{"class":82},[76,43816,32634],{"class":86},[76,43818,43819],{"class":78,"line":32873},[76,43820,32876],{"class":146},[76,43822,43823,43825,43827,43829,43831,43833,43835],{"class":78,"line":32879},[76,43824,36353],{"class":86},[76,43826,133],{"class":82},[76,43828,32651],{"class":86},[76,43830,32654],{"class":5183},[76,43832,133],{"class":82},[76,43834,305],{"class":136},[76,43836,93],{"class":86},[76,43838,43839],{"class":78,"line":32898},[76,43840,32901],{"class":146},[76,43842,43843,43845,43847],{"class":78,"line":32904},[76,43844,36374],{"class":86},[76,43846,133],{"class":82},[76,43848,32677],{"class":86},[76,43850,43851],{"class":78,"line":32915},[76,43852,32918],{"class":146},[76,43854,43855,43857,43859,43861,43863,43865,43867],{"class":78,"line":32921},[76,43856,36387],{"class":86},[76,43858,9444],{"class":82},[76,43860,36392],{"class":86},[76,43862,543],{"class":82},[76,43864,32735],{"class":86},[76,43866,279],{"class":136},[76,43868,93],{"class":86},[76,43870,43871,43873,43875,43877,43879],{"class":78,"line":32941},[76,43872,36405],{"class":86},[76,43874,9444],{"class":82},[76,43876,32756],{"class":86},[76,43878,2914],{"class":82},[76,43880,32761],{"class":86},[76,43882,43883],{"class":78,"line":32957},[76,43884,36418],{"class":146},[76,43886,43887,43889,43891,43893,43895],{"class":78,"line":32963},[76,43888,36423],{"class":86},[76,43890,9444],{"class":82},[76,43892,32735],{"class":86},[76,43894,279],{"class":136},[76,43896,93],{"class":86},[76,43898,43899],{"class":78,"line":32977},[76,43900,32980],{"class":146},[76,43902,43903],{"class":78,"line":32983},[76,43904,32986],{"class":146},[76,43906,43907,43909,43911],{"class":78,"line":32989},[76,43908,32992],{"class":86},[76,43910,672],{"class":82},[76,43912,32997],{"class":86},[76,43914,43915],{"class":78,"line":33000},[76,43916,33003],{"class":146},[76,43918,43919],{"class":78,"line":33006},[76,43920,33009],{"class":146},[76,43922,43923,43925,43927],{"class":78,"line":33012},[76,43924,33015],{"class":86},[76,43926,672],{"class":82},[76,43928,32997],{"class":86},[76,43930,43931],{"class":78,"line":33022},[76,43932,33025],{"class":146},[76,43934,43935,43937,43939],{"class":78,"line":33028},[76,43936,33031],{"class":86},[76,43938,672],{"class":82},[76,43940,33036],{"class":86},[76,43942,43943],{"class":78,"line":33039},[76,43944,33042],{"class":146},[76,43946,43947,43949,43951],{"class":78,"line":33045},[76,43948,33048],{"class":86},[76,43950,672],{"class":82},[76,43952,33036],{"class":86},[76,43954,43955],{"class":78,"line":33055},[76,43956,2365],{"emptyLinePlaceholder":2364},[76,43958,43959],{"class":78,"line":33060},[76,43960,33063],{"class":146},[76,43962,43963,43965,43967,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001],{"class":78,"line":33066},[76,43964,32420],{"class":136},[76,43966,87],{"class":86},[76,43968,3557],{"class":192},[76,43970,32428],{"class":136},[76,43972,33077],{"class":192},[76,43974,984],{"class":136},[76,43976,33082],{"class":82},[76,43978,1034],{"class":136},[76,43980,33087],{"class":192},[76,43982,984],{"class":136},[76,43984,33082],{"class":82},[76,43986,1034],{"class":136},[76,43988,3557],{"class":192},[76,43990,33098],{"class":86},[76,43992,620],{"class":82},[76,43994,305],{"class":136},[76,43996,33105],{"class":86},[76,43998,620],{"class":82},[76,44000,305],{"class":136},[76,44002,33112],{"class":86},[76,44004,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043],{"class":78,"line":33115},[76,44006,32420],{"class":136},[76,44008,87],{"class":86},[76,44010,3557],{"class":192},[76,44012,32428],{"class":136},[76,44014,33126],{"class":192},[76,44016,984],{"class":136},[76,44018,33082],{"class":82},[76,44020,1034],{"class":136},[76,44022,33135],{"class":192},[76,44024,984],{"class":136},[76,44026,33082],{"class":82},[76,44028,1034],{"class":136},[76,44030,3557],{"class":192},[76,44032,33146],{"class":86},[76,44034,620],{"class":82},[76,44036,305],{"class":136},[76,44038,33153],{"class":86},[76,44040,620],{"class":82},[76,44042,305],{"class":136},[76,44044,33112],{"class":86},[76,44046,44047],{"class":78,"line":33162},[76,44048,2365],{"emptyLinePlaceholder":2364},[76,44050,44051],{"class":78,"line":33167},[76,44052,33170],{"class":146},[76,44054,44055,44057,44059,44061,44063,44065,44067],{"class":78,"line":33173},[76,44056,2462],{"class":82},[76,44058,33178],{"class":86},[76,44060,620],{"class":82},[76,44062,305],{"class":136},[76,44064,1028],{"class":86},[76,44066,1048],{"class":82},[76,44068,33189],{"class":86},[76,44070,44071],{"class":78,"line":33192},[76,44072,33195],{"class":146},[76,44074,44075,44077,44079,44081,44083,44085,44087],{"class":78,"line":33198},[76,44076,33201],{"class":86},[76,44078,127],{"class":136},[76,44080,133],{"class":82},[76,44082,33208],{"class":86},[76,44084,620],{"class":82},[76,44086,305],{"class":136},[76,44088,33215],{"class":86},[76,44090,44091],{"class":78,"line":33218},[76,44092,33221],{"class":146},[76,44094,44095],{"class":78,"line":33224},[76,44096,33227],{"class":146},[76,44098,44099,44101,44103],{"class":78,"line":33230},[76,44100,33233],{"class":86},[76,44102,133],{"class":82},[76,44104,32283],{"class":86},[76,44106,44107],{"class":78,"line":33240},[76,44108,2365],{"emptyLinePlaceholder":2364},[76,44110,44111],{"class":78,"line":33245},[76,44112,33248],{"class":146},[76,44114,44115,44117,44119,44121,44123],{"class":78,"line":33251},[76,44116,33254],{"class":86},[76,44118,133],{"class":82},[76,44120,33259],{"class":86},[76,44122,620],{"class":82},[76,44124,33264],{"class":86},[76,44126,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161],{"class":78,"line":33267},[76,44128,32420],{"class":136},[76,44130,87],{"class":86},[76,44132,33274],{"class":192},[76,44134,984],{"class":136},[76,44136,33279],{"class":82},[76,44138,1034],{"class":136},[76,44140,632],{"class":192},[76,44142,984],{"class":136},[76,44144,33279],{"class":82},[76,44146,1034],{"class":136},[76,44148,33292],{"class":192},[76,44150,33295],{"class":86},[76,44152,33298],{"class":82},[76,44154,995],{"class":136},[76,44156,33303],{"class":86},[76,44158,416],{"class":82},[76,44160,995],{"class":136},[76,44162,30466],{"class":86},[76,44164,44165],{"class":78,"line":33312},[76,44166,36702],{"class":146},[76,44168,44169],{"class":78,"line":33318},[76,44170,36707],{"class":146},[76,44172,44173,44175,44177],{"class":78,"line":33324},[76,44174,36712],{"class":86},[76,44176,33336],{"class":192},[76,44178,93],{"class":86},[76,44180,44181],{"class":78,"line":33330},[76,44182,33356],{"class":146},[76,44184,44185,44187,44189,44191,44193,44195],{"class":78,"line":33341},[76,44186,33362],{"class":86},[76,44188,133],{"class":82},[76,44190,33367],{"class":86},[76,44192,33370],{"class":5183},[76,44194,133],{"class":82},[76,44196,1510],{"class":86},[76,44198,44199,44201,44203,44205],{"class":78,"line":33347},[76,44200,33380],{"class":192},[76,44202,947],{"class":86},[76,44204,33385],{"class":136},[76,44206,33388],{"class":86},[76,44208,44209,44211],{"class":78,"line":33353},[76,44210,33394],{"class":192},[76,44212,33397],{"class":86},[76,44214,44215,44217],{"class":78,"line":33359},[76,44216,33403],{"class":192},[76,44218,33406],{"class":86},[76,44220,44221,44223],{"class":78,"line":33377},[76,44222,33412],{"class":192},[76,44224,33415],{"class":86},[76,44226,44227,44229],{"class":78,"line":33391},[76,44228,33421],{"class":192},[76,44230,33424],{"class":86},[76,44232,44233],{"class":78,"line":33400},[76,44234,33430],{"class":86},[76,44236,44237],{"class":78,"line":33409},[76,44238,33436],{"class":146},[76,44240,44241,44243],{"class":78,"line":33418},[76,44242,4055],{"class":82},[76,44244,33444],{"class":86},[76,44246,44247],{"class":78,"line":33427},[76,44248,2365],{"emptyLinePlaceholder":2364},[76,44250,44251],{"class":78,"line":33433},[76,44252,33455],{"class":146},[76,44254,44255,44257,44259],{"class":78,"line":33439},[76,44256,31916],{"class":82},[76,44258,33463],{"class":1927},[76,44260,33466],{"class":86},[76,44262,44263],{"class":78,"line":33447},[76,44264,33472],{"class":146},[76,44266,44267,44269,44271,44273,44275,44277,44279,44281],{"class":78,"line":33452},[76,44268,33478],{"class":86},[76,44270,31662],{"class":5183},[76,44272,133],{"class":82},[76,44274,87],{"class":86},[76,44276,586],{"class":136},[76,44278,466],{"class":86},[76,44280,381],{"class":136},[76,44282,30466],{"class":86},[76,44284,44285],{"class":78,"line":33458},[76,44286,33498],{"class":146},[76,44288,44289],{"class":78,"line":33469},[76,44290,33504],{"class":146},[76,44292,44293],{"class":78,"line":33475},[76,44294,33510],{"class":146},[76,44296,44297,44299,44301,44303,44305,44307,44309],{"class":78,"line":33495},[76,44298,31696],{"class":86},[76,44300,305],{"class":136},[76,44302,466],{"class":86},[76,44304,165],{"class":136},[76,44306,466],{"class":86},[76,44308,305],{"class":136},[76,44310,93],{"class":86},[76,44312,44313],{"class":78,"line":33501},[76,44314,33533],{"class":146},[76,44316,44317],{"class":78,"line":33507},[76,44318,33539],{"class":146},[76,44320,44321],{"class":78,"line":33513},[76,44322,33545],{"class":146},[76,44324,44325],{"class":78,"line":33530},[76,44326,33551],{"class":146},[76,44328,44329],{"class":78,"line":33536},[76,44330,33557],{"class":146},[76,44332,44333,44335,44337,44339,44341,44343,44345,44347,44349],{"class":78,"line":33542},[76,44334,33563],{"class":86},[76,44336,33566],{"class":192},[76,44338,33569],{"class":86},[76,44340,33572],{"class":192},[76,44342,466],{"class":86},[76,44344,33577],{"class":5183},[76,44346,133],{"class":82},[76,44348,33582],{"class":192},[76,44350,93],{"class":86},[76,44352,44353,44355,44357,44359,44361,44363,44365,44367,44369],{"class":78,"line":33548},[76,44354,33563],{"class":86},[76,44356,33566],{"class":192},[76,44358,33594],{"class":86},[76,44360,33597],{"class":192},[76,44362,466],{"class":86},[76,44364,33577],{"class":5183},[76,44366,133],{"class":82},[76,44368,33606],{"class":192},[76,44370,93],{"class":86},[76,44372,44373],{"class":78,"line":33554},[76,44374,33614],{"class":146},[76,44376,44377],{"class":78,"line":33560},[76,44378,33620],{"class":86},[76,44380,44381],{"class":78,"line":33587},[76,44382,33626],{"class":146},[76,44384,44385,44387,44389],{"class":78,"line":33611},[76,44386,33632],{"class":86},[76,44388,33635],{"class":192},[76,44390,93],{"class":86},[76,44392,44393,44395,44397],{"class":78,"line":33617},[76,44394,33643],{"class":86},[76,44396,33646],{"class":192},[76,44398,93],{"class":86},[76,44400,44401],{"class":78,"line":33623},[76,44402,33654],{"class":146},[76,44404,44405,44407,44409,44411,44413,44415,44417],{"class":78,"line":33629},[76,44406,31696],{"class":86},[76,44408,305],{"class":136},[76,44410,466],{"class":86},[76,44412,165],{"class":136},[76,44414,466],{"class":86},[76,44416,165],{"class":136},[76,44418,93],{"class":86},[76,44420,44421,44423,44425,44427,44429,44431,44433,44435,44437],{"class":78,"line":33640},[76,44422,33563],{"class":86},[76,44424,33566],{"class":192},[76,44426,33681],{"class":86},[76,44428,33572],{"class":192},[76,44430,466],{"class":86},[76,44432,33577],{"class":5183},[76,44434,133],{"class":82},[76,44436,33692],{"class":192},[76,44438,93],{"class":86},[76,44440,44441,44443,44445,44447,44449,44451,44453,44455,44457],{"class":78,"line":33651},[76,44442,33563],{"class":86},[76,44444,33566],{"class":192},[76,44446,33704],{"class":86},[76,44448,33597],{"class":192},[76,44450,466],{"class":86},[76,44452,33577],{"class":5183},[76,44454,133],{"class":82},[76,44456,33715],{"class":192},[76,44458,93],{"class":86},[76,44460,44461],{"class":78,"line":33657},[76,44462,33723],{"class":146},[76,44464,44465],{"class":78,"line":33674},[76,44466,33620],{"class":86},[76,44468,44469,44471,44473],{"class":78,"line":33697},[76,44470,33632],{"class":86},[76,44472,33566],{"class":192},[76,44474,93],{"class":86},[76,44476,44477,44479,44481],{"class":78,"line":33720},[76,44478,33643],{"class":86},[76,44480,33745],{"class":192},[76,44482,93],{"class":86},[76,44484,44485],{"class":78,"line":33726},[76,44486,33753],{"class":86},[76,44488,44489],{"class":78,"line":33731},[76,44490,2365],{"emptyLinePlaceholder":2364},[76,44492,44493],{"class":78,"line":33740},[76,44494,33764],{"class":146},[76,44496,44497,44499,44501,44503,44505],{"class":78,"line":33750},[76,44498,1495],{"class":82},[76,44500,31189],{"class":136},[76,44502,2914],{"class":82},[76,44504,31194],{"class":192},[76,44506,3704],{"class":86},[76,44508,44509],{"class":78,"line":33756},[76,44510,33783],{"class":146},[76,44512,44513,44516,44518],{"class":78,"line":33761},[76,44514,44515],{"class":86},"    GoogLeNet",[76,44517,133],{"class":82},[76,44519,44520],{"class":86},"GoogLeNet(Inception)\n",[76,44522,44523,44525,44527],{"class":78,"line":33767},[76,44524,33800],{"class":86},[76,44526,133],{"class":82},[76,44528,33805],{"class":86},[76,44530,44531,44533,44535,44538,44540,44542,44544],{"class":78,"line":33780},[76,44532,33362],{"class":86},[76,44534,133],{"class":82},[76,44536,44537],{"class":86},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[76,44539,33818],{"class":5183},[76,44541,133],{"class":82},[76,44543,1039],{"class":136},[76,44545,93],{"class":86},[76,44547,44548],{"class":78,"line":33786},[76,44549,33830],{"class":86},[29,44551,44552],{"start":1143},[32,44553,40543],{},[66,44555,44557],{"className":30347,"code":44556,"language":30349,"meta":71,"style":71},"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",[73,44558,44559,44565,44575,44585,44589,44599,44610,44614,44618,44622,44630,44646,44656,44672,44682,44696,44700,44710,44720,44730,44736,44740,44744,44752,44756,44772,44780,44784,44788,44796,44804,44808,44812,44816,44820,44826,44830,44840,44848,44856,44860,44864,44868,44876,44880,44896,44900,44904,44908,44920,44924,44936,44940,44944,44956,44960,44970,44974,44978,44990,44994,45002,45006,45010,45018,45022,45030,45034,45038,45042,45046,45050,45066,45074,45078,45082,45130,45136,45140,45150,45158,45166,45170,45174,45178,45182,45190,45194,45210,45214,45222,45230],{"__ignoreMap":71},[76,44560,44561,44563],{"class":78,"line":79},[76,44562,30361],{"class":82},[76,44564,30364],{"class":86},[76,44566,44567,44569,44571,44573],{"class":78,"line":96},[76,44568,30361],{"class":82},[76,44570,31384],{"class":86},[76,44572,31352],{"class":82},[76,44574,31389],{"class":86},[76,44576,44577,44579,44581,44583],{"class":78,"line":1143},[76,44578,30706],{"class":82},[76,44580,31367],{"class":86},[76,44582,30361],{"class":82},[76,44584,31372],{"class":86},[76,44586,44587],{"class":78,"line":1158},[76,44588,33891],{"class":146},[76,44590,44591,44593,44595,44597],{"class":78,"line":1164},[76,44592,30706],{"class":82},[76,44594,31337],{"class":86},[76,44596,30361],{"class":82},[76,44598,31342],{"class":86},[76,44600,44601,44603,44605,44607],{"class":78,"line":1178},[76,44602,30706],{"class":82},[76,44604,31883],{"class":86},[76,44606,30361],{"class":82},[76,44608,44609],{"class":86}," GoogLeNet,Inception\n",[76,44611,44612],{"class":78,"line":1184},[76,44613,2365],{"emptyLinePlaceholder":2364},[76,44615,44616],{"class":78,"line":1275},[76,44617,2365],{"emptyLinePlaceholder":2364},[76,44619,44620],{"class":78,"line":1281},[76,44621,33920],{"class":146},[76,44623,44624,44626,44628],{"class":78,"line":1293},[76,44625,31916],{"class":82},[76,44627,33927],{"class":1927},[76,44629,31922],{"class":86},[76,44631,44632,44634,44636,44638,44640,44642,44644],{"class":78,"line":1576},[76,44633,33934],{"class":86},[76,44635,133],{"class":82},[76,44637,31424],{"class":86},[76,44639,31427],{"class":5183},[76,44641,133],{"class":82},[76,44643,31432],{"class":192},[76,44645,31435],{"class":86},[76,44647,44648,44650,44652,44654],{"class":78,"line":1581},[76,44649,33951],{"class":5183},[76,44651,133],{"class":82},[76,44653,33956],{"class":136},[76,44655,31435],{"class":86},[76,44657,44658,44660,44662,44664,44666,44668,44670],{"class":78,"line":1587},[76,44659,33963],{"class":5183},[76,44661,133],{"class":82},[76,44663,31462],{"class":86},[76,44665,31465],{"class":5183},[76,44667,133],{"class":82},[76,44669,35418],{"class":136},[76,44671,31473],{"class":86},[76,44673,44674,44676,44678,44680],{"class":78,"line":1592},[76,44675,33980],{"class":5183},[76,44677,133],{"class":82},[76,44679,31445],{"class":136},[76,44681,93],{"class":86},[76,44683,44684,44686,44688,44690,44692,44694],{"class":78,"line":1606},[76,44685,33991],{"class":86},[76,44687,133],{"class":82},[76,44689,31503],{"class":86},[76,44691,31506],{"class":5183},[76,44693,133],{"class":82},[76,44695,34002],{"class":86},[76,44697,44698],{"class":78,"line":1611},[76,44699,34007],{"class":146},[76,44701,44702,44704,44706,44708],{"class":78,"line":1617},[76,44703,34012],{"class":5183},[76,44705,133],{"class":82},[76,44707,305],{"class":136},[76,44709,31435],{"class":86},[76,44711,44712,44714,44716,44718],{"class":78,"line":1638},[76,44713,34023],{"class":5183},[76,44715,133],{"class":82},[76,44717,31445],{"class":136},[76,44719,31435],{"class":86},[76,44721,44722,44724,44726,44728],{"class":78,"line":1643},[76,44723,34034],{"class":5183},[76,44725,133],{"class":82},[76,44727,279],{"class":136},[76,44729,93],{"class":86},[76,44731,44732,44734],{"class":78,"line":1657},[76,44733,4055],{"class":82},[76,44735,34047],{"class":86},[76,44737,44738],{"class":78,"line":1662},[76,44739,2365],{"emptyLinePlaceholder":2364},[76,44741,44742],{"class":78,"line":1691},[76,44743,34056],{"class":146},[76,44745,44746,44748,44750],{"class":78,"line":1696},[76,44747,31916],{"class":82},[76,44749,34063],{"class":1927},[76,44751,34066],{"class":86},[76,44753,44754],{"class":78,"line":1713},[76,44755,34071],{"class":146},[76,44757,44758,44760,44762,44764,44766,44768,44770],{"class":78,"line":1718},[76,44759,31206],{"class":86},[76,44761,133],{"class":82},[76,44763,31213],{"class":192},[76,44765,1668],{"class":82},[76,44767,31218],{"class":86},[76,44769,1665],{"class":82},[76,44771,34088],{"class":192},[76,44773,44774,44776,44778],{"class":78,"line":1723},[76,44775,31258],{"class":86},[76,44777,133],{"class":82},[76,44779,32258],{"class":86},[76,44781,44782],{"class":78,"line":1728},[76,44783,2365],{"emptyLinePlaceholder":2364},[76,44785,44786],{"class":78,"line":1742},[76,44787,34105],{"class":146},[76,44789,44790,44792,44794],{"class":78,"line":1747},[76,44791,34110],{"class":86},[76,44793,133],{"class":82},[76,44795,32311],{"class":136},[76,44797,44798,44800,44802],{"class":78,"line":2542},[76,44799,34119],{"class":86},[76,44801,133],{"class":82},[76,44803,3050],{"class":136},[76,44805,44806],{"class":78,"line":2556},[76,44807,2365],{"emptyLinePlaceholder":2364},[76,44809,44810],{"class":78,"line":2564},[76,44811,34132],{"class":146},[76,44813,44814],{"class":78,"line":2569},[76,44815,34137],{"class":146},[76,44817,44818],{"class":78,"line":2575},[76,44819,34142],{"class":146},[76,44821,44822,44824],{"class":78,"line":2581},[76,44823,34147],{"class":82},[76,44825,32853],{"class":86},[76,44827,44828],{"class":78,"line":2586},[76,44829,34154],{"class":146},[76,44831,44832,44834,44836,44838],{"class":78,"line":7915},[76,44833,3368],{"class":82},[76,44835,34161],{"class":86},[76,44837,26012],{"class":82},[76,44839,34166],{"class":86},[76,44841,44842,44844,44846],{"class":78,"line":7939},[76,44843,34171],{"class":86},[76,44845,133],{"class":82},[76,44847,34176],{"class":86},[76,44849,44850,44852,44854],{"class":78,"line":7944},[76,44851,34181],{"class":86},[76,44853,133],{"class":82},[76,44855,34186],{"class":86},[76,44857,44858],{"class":78,"line":7950},[76,44859,34191],{"class":146},[76,44861,44862],{"class":78,"line":7977},[76,44863,32844],{"class":86},[76,44865,44866],{"class":78,"line":7982},[76,44867,34200],{"class":146},[76,44869,44870,44872,44874],{"class":78,"line":7988},[76,44871,32629],{"class":86},[76,44873,133],{"class":82},[76,44875,34209],{"class":86},[76,44877,44878],{"class":78,"line":8000},[76,44879,34214],{"class":146},[76,44881,44882,44884,44886,44888,44890,44892,44894],{"class":78,"line":8012},[76,44883,32646],{"class":86},[76,44885,133],{"class":82},[76,44887,32651],{"class":86},[76,44889,32654],{"class":5183},[76,44891,133],{"class":82},[76,44893,305],{"class":136},[76,44895,93],{"class":86},[76,44897,44898],{"class":78,"line":8024},[76,44899,34235],{"class":146},[76,44901,44902],{"class":78,"line":9683},[76,44903,34240],{"class":146},[76,44905,44906],{"class":78,"line":9708},[76,44907,34245],{"class":146},[76,44909,44910,44912,44914,44916,44918],{"class":78,"line":9731},[76,44911,34250],{"class":86},[76,44913,9444],{"class":82},[76,44915,32756],{"class":86},[76,44917,2914],{"class":82},[76,44919,34259],{"class":86},[76,44921,44922],{"class":78,"line":9755},[76,44923,34264],{"class":146},[76,44925,44926,44928,44930,44932,44934],{"class":78,"line":9760},[76,44927,34269],{"class":86},[76,44929,9444],{"class":82},[76,44931,34274],{"class":86},[76,44933,279],{"class":136},[76,44935,93],{"class":86},[76,44937,44938],{"class":78,"line":9765},[76,44939,2365],{"emptyLinePlaceholder":2364},[76,44941,44942],{"class":78,"line":9770},[76,44943,34287],{"class":146},[76,44945,44946,44948,44950,44952,44954],{"class":78,"line":9779},[76,44947,34292],{"class":86},[76,44949,133],{"class":82},[76,44951,34297],{"class":86},[76,44953,672],{"class":82},[76,44955,34302],{"class":86},[76,44957,44958],{"class":78,"line":9784},[76,44959,34307],{"class":146},[76,44961,44962,44964,44966,44968],{"class":78,"line":9790},[76,44963,32420],{"class":136},[76,44965,87],{"class":86},[76,44967,34316],{"class":192},[76,44969,34319],{"class":86},[76,44971,44972],{"class":78,"line":9811},[76,44973,2365],{"emptyLinePlaceholder":2364},[76,44975,44976],{"class":78,"line":9817},[76,44977,34328],{"class":146},[76,44979,44980,44982,44984,44986,44988],{"class":78,"line":9831},[76,44981,1495],{"class":82},[76,44983,31189],{"class":136},[76,44985,2914],{"class":82},[76,44987,31194],{"class":192},[76,44989,3704],{"class":86},[76,44991,44992],{"class":78,"line":9837},[76,44993,34345],{"class":146},[76,44995,44996,44998,45000],{"class":78,"line":9864},[76,44997,31258],{"class":86},[76,44999,133],{"class":82},[76,45001,44520],{"class":86},[76,45003,45004],{"class":78,"line":9873},[76,45005,34358],{"class":146},[76,45007,45008],{"class":78,"line":9879},[76,45009,34363],{"class":146},[76,45011,45012,45014,45016],{"class":78,"line":9887},[76,45013,34368],{"class":86},[76,45015,34371],{"class":192},[76,45017,30466],{"class":86},[76,45019,45020],{"class":78,"line":9892},[76,45021,34378],{"class":146},[76,45023,45024,45026,45028],{"class":78,"line":16571},[76,45025,33991],{"class":86},[76,45027,133],{"class":82},[76,45029,34387],{"class":86},[76,45031,45032],{"class":78,"line":16577},[76,45033,34392],{"class":146},[76,45035,45036],{"class":78,"line":16600},[76,45037,34397],{"class":86},[76,45039,45040],{"class":78,"line":16606},[76,45041,2365],{"emptyLinePlaceholder":2364},[76,45043,45044],{"class":78,"line":16629},[76,45045,34406],{"class":146},[76,45047,45048],{"class":78,"line":16643},[76,45049,34411],{"class":146},[76,45051,45052,45054,45056,45058,45060,45062,45064],{"class":78,"line":16663},[76,45053,31206],{"class":86},[76,45055,133],{"class":82},[76,45057,31213],{"class":192},[76,45059,1668],{"class":82},[76,45061,31218],{"class":86},[76,45063,1665],{"class":82},[76,45065,34088],{"class":192},[76,45067,45068,45070,45072],{"class":78,"line":16669},[76,45069,31258],{"class":86},[76,45071,133],{"class":82},[76,45073,32258],{"class":86},[76,45075,45076],{"class":78,"line":16680},[76,45077,34440],{"class":146},[76,45079,45080],{"class":78,"line":16703},[76,45081,34445],{"class":146},[76,45083,45084,45086,45088,45090,45092,45094,45096,45098,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128],{"class":78,"line":16725},[76,45085,34450],{"class":86},[76,45087,133],{"class":82},[76,45089,978],{"class":86},[76,45091,34457],{"class":192},[76,45093,466],{"class":86},[76,45095,34462],{"class":192},[76,45097,466],{"class":86},[76,45099,34467],{"class":192},[76,45101,466],{"class":86},[76,45103,34472],{"class":192},[76,45105,466],{"class":86},[76,45107,34477],{"class":192},[76,45109,466],{"class":86},[76,45111,34482],{"class":192},[76,45113,466],{"class":86},[76,45115,34487],{"class":192},[76,45117,466],{"class":86},[76,45119,34492],{"class":192},[76,45121,466],{"class":86},[76,45123,34497],{"class":192},[76,45125,466],{"class":86},[76,45127,34502],{"class":192},[76,45129,33215],{"class":86},[76,45131,45132,45134],{"class":78,"line":16730},[76,45133,34147],{"class":82},[76,45135,32853],{"class":86},[76,45137,45138],{"class":78,"line":16736},[76,45139,34515],{"class":146},[76,45141,45142,45144,45146,45148],{"class":78,"line":16750},[76,45143,3368],{"class":82},[76,45145,34522],{"class":86},[76,45147,26012],{"class":82},[76,45149,34166],{"class":86},[76,45151,45152,45154,45156],{"class":78,"line":16763},[76,45153,32579],{"class":86},[76,45155,133],{"class":82},[76,45157,32584],{"class":86},[76,45159,45160,45162,45164],{"class":78,"line":16768},[76,45161,32594],{"class":86},[76,45163,133],{"class":82},[76,45165,32599],{"class":86},[76,45167,45168],{"class":78,"line":16782},[76,45169,2365],{"emptyLinePlaceholder":2364},[76,45171,45172],{"class":78,"line":16787},[76,45173,34551],{"class":146},[76,45175,45176],{"class":78,"line":16793},[76,45177,32844],{"class":86},[76,45179,45180],{"class":78,"line":16798},[76,45181,34560],{"class":146},[76,45183,45184,45186,45188],{"class":78,"line":16812},[76,45185,32629],{"class":86},[76,45187,133],{"class":82},[76,45189,32634],{"class":86},[76,45191,45192],{"class":78,"line":16817},[76,45193,34573],{"class":146},[76,45195,45196,45198,45200,45202,45204,45206,45208],{"class":78,"line":16822},[76,45197,32646],{"class":86},[76,45199,133],{"class":82},[76,45201,32651],{"class":86},[76,45203,32654],{"class":5183},[76,45205,133],{"class":82},[76,45207,305],{"class":136},[76,45209,93],{"class":86},[76,45211,45212],{"class":78,"line":16836},[76,45213,34594],{"class":146},[76,45215,45216,45218,45220],{"class":78,"line":16848},[76,45217,34599],{"class":86},[76,45219,133],{"class":82},[76,45221,34604],{"class":86},[76,45223,45224,45226,45228],{"class":78,"line":16853},[76,45225,34609],{"class":86},[76,45227,133],{"class":82},[76,45229,34614],{"class":86},[76,45231,45232,45234,45236,45238,45240,45242,45244,45246],{"class":78,"line":16866},[76,45233,34619],{"class":136},[76,45235,87],{"class":86},[76,45237,34624],{"class":192},[76,45239,34627],{"class":86},[76,45241,34630],{"class":192},[76,45243,466],{"class":86},[76,45245,34635],{"class":192},[76,45247,34638],{"class":86},[46,45249,45251],{"id":45250},"_24训练自己的数据集","2.4.训练自己的数据集",[21,45253,45254],{},"猫狗分类任务",[21,45256,45257],{},"划分数据集和验证集",[66,45259,45261],{"className":30347,"code":45260,"language":30349,"meta":71,"style":71},"# 创建脚本，用于划分数据集和验证集\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",[73,45262,45263,45268,45275,45280,45291,45298,45302,45312,45326,45335,45339,45344,45354,45374,45378,45383,45393,45404,45417,45421,45426,45435,45445,45456,45460,45465,45475,45479,45484,45489,45494,45499,45504,45508,45518,45545,45558,45570,45597,45602,45607,45621,45626,45638,45653,45668,45676,45680,45685,45691,45703,45716,45721,45726,45731,45781,45787,45791],{"__ignoreMap":71},[76,45264,45265],{"class":78,"line":79},[76,45266,45267],{"class":146},"# 创建脚本，用于划分数据集和验证集\n",[76,45269,45270,45272],{"class":78,"line":96},[76,45271,30361],{"class":82},[76,45273,45274],{"class":86}," os\n",[76,45276,45277],{"class":78,"line":1143},[76,45278,45279],{"class":146},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[76,45281,45282,45284,45287,45289],{"class":78,"line":1158},[76,45283,30706],{"class":82},[76,45285,45286],{"class":86}," shutil ",[76,45288,30361],{"class":82},[76,45290,31791],{"class":86},[76,45292,45293,45295],{"class":78,"line":1164},[76,45294,30361],{"class":82},[76,45296,45297],{"class":86}," random\n",[76,45299,45300],{"class":78,"line":1178},[76,45301,2365],{"emptyLinePlaceholder":2364},[76,45303,45304,45306,45309],{"class":78,"line":1184},[76,45305,31916],{"class":82},[76,45307,45308],{"class":1927}," mkfile",[76,45310,45311],{"class":86},"(file):\n",[76,45313,45314,45316,45318,45321,45324],{"class":78,"line":1275},[76,45315,3066],{"class":82},[76,45317,38899],{"class":82},[76,45319,45320],{"class":86}," os.path.exists(",[76,45322,45323],{"class":5183},"file",[76,45325,30755],{"class":86},[76,45327,45328,45331,45333],{"class":78,"line":1281},[76,45329,45330],{"class":86},"        os.makedirs(",[76,45332,45323],{"class":5183},[76,45334,93],{"class":86},[76,45336,45337],{"class":78,"line":1293},[76,45338,2365],{"emptyLinePlaceholder":2364},[76,45340,45341],{"class":78,"line":1576},[76,45342,45343],{"class":146},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[76,45345,45346,45349,45351],{"class":78,"line":1581},[76,45347,45348],{"class":86},"file_path",[76,45350,133],{"class":82},[76,45352,45353],{"class":192},"'data_cat_dog'\n",[76,45355,45356,45359,45361,45364,45366,45369,45371],{"class":78,"line":1587},[76,45357,45358],{"class":86},"flower_class",[76,45360,133],{"class":82},[76,45362,45363],{"class":86},"[cla ",[76,45365,2990],{"class":82},[76,45367,45368],{"class":86}," cla ",[76,45370,26012],{"class":82},[76,45372,45373],{"class":86}," os.listdir(file_path)]\n",[76,45375,45376],{"class":78,"line":1592},[76,45377,2365],{"emptyLinePlaceholder":2364},[76,45379,45380],{"class":78,"line":1606},[76,45381,45382],{"class":146},"# 创建训练集train文件夹\n",[76,45384,45385,45388,45391],{"class":78,"line":1611},[76,45386,45387],{"class":86},"mkfile(",[76,45389,45390],{"class":192},"'data\u002Ftrain'",[76,45392,93],{"class":86},[76,45394,45395,45397,45399,45401],{"class":78,"line":1617},[76,45396,2990],{"class":82},[76,45398,45368],{"class":86},[76,45400,26012],{"class":82},[76,45402,45403],{"class":86}," flower_class:\n",[76,45405,45406,45409,45412,45414],{"class":78,"line":1638},[76,45407,45408],{"class":86},"    mkfile(",[76,45410,45411],{"class":192},"'data\u002Ftrain\u002F'",[76,45413,569],{"class":82},[76,45415,45416],{"class":86},"cla)\n",[76,45418,45419],{"class":78,"line":1643},[76,45420,2365],{"emptyLinePlaceholder":2364},[76,45422,45423],{"class":78,"line":1657},[76,45424,45425],{"class":146},"# 创建验证集val文件夹\n",[76,45427,45428,45430,45433],{"class":78,"line":1662},[76,45429,45387],{"class":86},[76,45431,45432],{"class":192},"'data\u002Ftest'",[76,45434,93],{"class":86},[76,45436,45437,45439,45441,45443],{"class":78,"line":1691},[76,45438,2990],{"class":82},[76,45440,45368],{"class":86},[76,45442,26012],{"class":82},[76,45444,45403],{"class":86},[76,45446,45447,45449,45452,45454],{"class":78,"line":1696},[76,45448,45408],{"class":86},[76,45450,45451],{"class":192},"'data\u002Ftest\u002F'",[76,45453,569],{"class":82},[76,45455,45416],{"class":86},[76,45457,45458],{"class":78,"line":1713},[76,45459,2365],{"emptyLinePlaceholder":2364},[76,45461,45462],{"class":78,"line":1718},[76,45463,45464],{"class":146},"# 划分比例，训练集：测试集=9：1\n",[76,45466,45467,45470,45472],{"class":78,"line":1723},[76,45468,45469],{"class":86},"split_rate",[76,45471,133],{"class":82},[76,45473,45474],{"class":136},"0.1\n",[76,45476,45477],{"class":78,"line":1728},[76,45478,2365],{"emptyLinePlaceholder":2364},[76,45480,45481],{"class":78,"line":1742},[76,45482,45483],{"class":146},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[76,45485,45486],{"class":78,"line":1747},[76,45487,45488],{"class":146},"# cla_path：当前类别的原始图片路径\n",[76,45490,45491],{"class":78,"line":2542},[76,45492,45493],{"class":146},"# images：当前类别下所有图片的文件名列表\n",[76,45495,45496],{"class":78,"line":2556},[76,45497,45498],{"class":146},"# num：该类别图片总数\n",[76,45500,45501],{"class":78,"line":2564},[76,45502,45503],{"class":146},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[76,45505,45506],{"class":78,"line":2569},[76,45507,2365],{"emptyLinePlaceholder":2364},[76,45509,45510,45512,45514,45516],{"class":78,"line":2575},[76,45511,2990],{"class":82},[76,45513,45368],{"class":86},[76,45515,26012],{"class":82},[76,45517,45403],{"class":86},[76,45519,45520,45523,45525,45528,45530,45533,45536,45538,45540,45542],{"class":78,"line":2581},[76,45521,45522],{"class":86},"    cla_path ",[76,45524,133],{"class":82},[76,45526,45527],{"class":86}," file_path ",[76,45529,569],{"class":82},[76,45531,45532],{"class":192}," '\u002F'",[76,45534,45535],{"class":82}," +",[76,45537,45368],{"class":86},[76,45539,569],{"class":82},[76,45541,45532],{"class":192},[76,45543,45544],{"class":146},"  # 某一类别的子目录\n",[76,45546,45547,45550,45552,45555],{"class":78,"line":2586},[76,45548,45549],{"class":86},"    images ",[76,45551,133],{"class":82},[76,45553,45554],{"class":86}," os.listdir(cla_path)  ",[76,45556,45557],{"class":146},"# iamges 列表存储了该目录下所有图像的名称\n",[76,45559,45560,45563,45565,45567],{"class":78,"line":7915},[76,45561,45562],{"class":86},"    num ",[76,45564,133],{"class":82},[76,45566,7298],{"class":136},[76,45568,45569],{"class":86},"(images)\n",[76,45571,45572,45575,45577,45580,45582,45584,45586,45589,45591,45594],{"class":78,"line":7939},[76,45573,45574],{"class":86},"    eval_index ",[76,45576,133],{"class":82},[76,45578,45579],{"class":86}," random.sample(images, ",[76,45581,581],{"class":5183},[76,45583,133],{"class":82},[76,45585,90],{"class":136},[76,45587,45588],{"class":86},"(num ",[76,45590,543],{"class":82},[76,45592,45593],{"class":86}," split_rate))  ",[76,45595,45596],{"class":146},"# 从images列表中随机抽取 k 个图像名称\n",[76,45598,45599],{"class":78,"line":7944},[76,45600,45601],{"class":146},"    # 遍历该类别下的所有图片\n",[76,45603,45604],{"class":78,"line":7950},[76,45605,45606],{"class":146},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[76,45608,45609,45611,45614,45616,45618],{"class":78,"line":7977},[76,45610,3166],{"class":82},[76,45612,45613],{"class":86}," index, image ",[76,45615,26012],{"class":82},[76,45617,31575],{"class":136},[76,45619,45620],{"class":86},"(images):\n",[76,45622,45623],{"class":78,"line":7982},[76,45624,45625],{"class":146},"        # eval_index 中保存验证集val的图像名称\n",[76,45627,45628,45630,45633,45635],{"class":78,"line":7988},[76,45629,2462],{"class":82},[76,45631,45632],{"class":86}," image ",[76,45634,26012],{"class":82},[76,45636,45637],{"class":86}," eval_index:\n",[76,45639,45640,45643,45645,45648,45650],{"class":78,"line":8000},[76,45641,45642],{"class":86},"            image_path ",[76,45644,133],{"class":82},[76,45646,45647],{"class":86}," cla_path ",[76,45649,569],{"class":82},[76,45651,45652],{"class":86}," image\n",[76,45654,45655,45658,45660,45663,45665],{"class":78,"line":8012},[76,45656,45657],{"class":86},"            new_path ",[76,45659,133],{"class":82},[76,45661,45662],{"class":192}," 'data\u002Ftest\u002F'",[76,45664,45535],{"class":82},[76,45666,45667],{"class":86}," cla\n",[76,45669,45670,45673],{"class":78,"line":8024},[76,45671,45672],{"class":86},"            copy(image_path, new_path)  ",[76,45674,45675],{"class":146},"# 将选中的图像复制到新路径\n",[76,45677,45678],{"class":78,"line":9683},[76,45679,2365],{"emptyLinePlaceholder":2364},[76,45681,45682],{"class":78,"line":9708},[76,45683,45684],{"class":146},"        # 其余的图像保存在训练集train中\n",[76,45686,45687,45689],{"class":78,"line":9731},[76,45688,2499],{"class":82},[76,45690,3704],{"class":86},[76,45692,45693,45695,45697,45699,45701],{"class":78,"line":9755},[76,45694,45642],{"class":86},[76,45696,133],{"class":82},[76,45698,45647],{"class":86},[76,45700,569],{"class":82},[76,45702,45652],{"class":86},[76,45704,45705,45707,45709,45712,45714],{"class":78,"line":9760},[76,45706,45657],{"class":86},[76,45708,133],{"class":82},[76,45710,45711],{"class":192}," 'data\u002Ftrain\u002F'",[76,45713,45535],{"class":82},[76,45715,45667],{"class":86},[76,45717,45718],{"class":78,"line":9765},[76,45719,45720],{"class":86},"            copy(image_path, new_path)\n",[76,45722,45723],{"class":78,"line":9770},[76,45724,45725],{"class":146},"            # 打印进度条信息\n",[76,45727,45728],{"class":78,"line":9779},[76,45729,45730],{"class":146},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[76,45732,45733,45735,45737,45739,45742,45744,45746,45749,45751,45753,45755,45758,45761,45763,45765,45768,45771,45773,45775,45778],{"class":78,"line":9784},[76,45734,32420],{"class":136},[76,45736,87],{"class":86},[76,45738,339],{"class":192},[76,45740,45741],{"class":136},"\\r",[76,45743,978],{"class":192},[76,45745,32428],{"class":136},[76,45747,45748],{"class":192},"] processing [",[76,45750,32428],{"class":136},[76,45752,672],{"class":192},[76,45754,32428],{"class":136},[76,45756,45757],{"class":192},"]\"",[76,45759,45760],{"class":86},".format(cla, index ",[76,45762,569],{"class":82},[76,45764,25087],{"class":136},[76,45766,45767],{"class":86},", num), ",[76,45769,45770],{"class":5183},"end",[76,45772,133],{"class":82},[76,45774,7619],{"class":192},[76,45776,45777],{"class":86},")  ",[76,45779,45780],{"class":146},"# processing bar\n",[76,45782,45783,45785],{"class":78,"line":9790},[76,45784,31268],{"class":136},[76,45786,1940],{"class":86},[76,45788,45789],{"class":78,"line":9811},[76,45790,2365],{"emptyLinePlaceholder":2364},[76,45792,45793,45795,45797,45800],{"class":78,"line":9817},[76,45794,30384],{"class":136},[76,45796,87],{"class":86},[76,45798,45799],{"class":192},"\"processing done!\"",[76,45801,93],{"class":86},[21,45803,45804],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21965,45806,45808],{"id":45807},"_242模型代码","2.4.2.模型代码",[21,45810,45811],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[66,45813,45815],{"className":30347,"code":45814,"language":30349,"meta":71,"style":71},"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",[73,45816,45817,45823,45833,45843,45847,45863,45871,45885,45895,45899,45929,45933,45967,46013,46017,46051,46097,46101,46105,46139,46169,46173,46181,46195,46217,46239,46257,46261,46275,46279,46283,46299,46303,46311,46325,46335,46379,46383,46411,46415,46425,46453,46457,46493,46497,46525,46529,46539,46571,46603,46631,46635,46645,46677,46709,46741,46773,46805,46833,46837,46847,46879,46911,46923,46927,46939,46943,46947,46959,46967,46987,46991,46995,46999,47003,47007,47011,47025,47033,47041,47053,47067,47075,47079,47087,47097,47107,47117,47127,47137,47143,47147,47151,47163,47183,47191],{"__ignoreMap":71},[76,45818,45819,45821],{"class":78,"line":79},[76,45820,30361],{"class":82},[76,45822,30364],{"class":86},[76,45824,45825,45827,45829,45831],{"class":78,"line":96},[76,45826,30706],{"class":82},[76,45828,30709],{"class":86},[76,45830,30361],{"class":82},[76,45832,30714],{"class":86},[76,45834,45835,45837,45839,45841],{"class":78,"line":1143},[76,45836,30706],{"class":82},[76,45838,30726],{"class":86},[76,45840,30361],{"class":82},[76,45842,30731],{"class":86},[76,45844,45845],{"class":78,"line":1158},[76,45846,2365],{"emptyLinePlaceholder":2364},[76,45848,45849,45851,45853,45855,45857,45859,45861],{"class":78,"line":1164},[76,45850,14661],{"class":82},[76,45852,41462],{"class":1927},[76,45854,87],{"class":86},[76,45856,30747],{"class":1927},[76,45858,646],{"class":86},[76,45860,30752],{"class":1927},[76,45862,30755],{"class":86},[76,45864,45865,45867,45869],{"class":78,"line":1178},[76,45866,30770],{"class":82},[76,45868,30773],{"class":136},[76,45870,41481],{"class":86},[76,45872,45873,45875,45877,45879,45881,45883],{"class":78,"line":1184},[76,45874,30786],{"class":136},[76,45876,41488],{"class":86},[76,45878,30792],{"class":136},[76,45880,30795],{"class":86},[76,45882,30798],{"class":136},[76,45884,1940],{"class":86},[76,45886,45887,45889,45891,45893],{"class":78,"line":1275},[76,45888,30814],{"class":136},[76,45890,34740],{"class":86},[76,45892,133],{"class":82},[76,45894,34745],{"class":86},[76,45896,45897],{"class":78,"line":1281},[76,45898,41511],{"class":146},[76,45900,45901,45903,45905,45907,45909,45911,45913,45915,45917,45919,45921,45923,45925,45927],{"class":78,"line":1293},[76,45902,30814],{"class":136},[76,45904,41518],{"class":86},[76,45906,133],{"class":82},[76,45908,30822],{"class":86},[76,45910,30825],{"class":5183},[76,45912,133],{"class":82},[76,45914,41529],{"class":86},[76,45916,30834],{"class":5183},[76,45918,133],{"class":82},[76,45920,41536],{"class":86},[76,45922,30843],{"class":5183},[76,45924,133],{"class":82},[76,45926,305],{"class":136},[76,45928,93],{"class":86},[76,45930,45931],{"class":78,"line":1576},[76,45932,41549],{"class":146},[76,45934,45935,45937,45939,45941,45943,45945,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965],{"class":78,"line":1581},[76,45936,30814],{"class":136},[76,45938,41556],{"class":86},[76,45940,133],{"class":82},[76,45942,30822],{"class":86},[76,45944,30825],{"class":5183},[76,45946,133],{"class":82},[76,45948,41529],{"class":86},[76,45950,30834],{"class":5183},[76,45952,133],{"class":82},[76,45954,41573],{"class":86},[76,45956,279],{"class":136},[76,45958,41578],{"class":86},[76,45960,30843],{"class":5183},[76,45962,133],{"class":82},[76,45964,305],{"class":136},[76,45966,93],{"class":86},[76,45968,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011],{"class":78,"line":1587},[76,45970,30814],{"class":136},[76,45972,41593],{"class":86},[76,45974,133],{"class":82},[76,45976,30822],{"class":86},[76,45978,30825],{"class":5183},[76,45980,133],{"class":82},[76,45982,41573],{"class":86},[76,45984,279],{"class":136},[76,45986,41578],{"class":86},[76,45988,30834],{"class":5183},[76,45990,133],{"class":82},[76,45992,41573],{"class":86},[76,45994,305],{"class":136},[76,45996,41578],{"class":86},[76,45998,30843],{"class":5183},[76,46000,133],{"class":82},[76,46002,159],{"class":136},[76,46004,466],{"class":86},[76,46006,30852],{"class":5183},[76,46008,133],{"class":82},[76,46010,305],{"class":136},[76,46012,93],{"class":86},[76,46014,46015],{"class":78,"line":1592},[76,46016,41638],{"class":146},[76,46018,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049],{"class":78,"line":1606},[76,46020,30814],{"class":136},[76,46022,41645],{"class":86},[76,46024,133],{"class":82},[76,46026,30822],{"class":86},[76,46028,30825],{"class":5183},[76,46030,133],{"class":82},[76,46032,41529],{"class":86},[76,46034,30834],{"class":5183},[76,46036,133],{"class":82},[76,46038,41662],{"class":86},[76,46040,279],{"class":136},[76,46042,41578],{"class":86},[76,46044,30843],{"class":5183},[76,46046,133],{"class":82},[76,46048,305],{"class":136},[76,46050,93],{"class":86},[76,46052,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095],{"class":78,"line":1611},[76,46054,30814],{"class":136},[76,46056,41681],{"class":86},[76,46058,133],{"class":82},[76,46060,30822],{"class":86},[76,46062,30825],{"class":5183},[76,46064,133],{"class":82},[76,46066,41662],{"class":86},[76,46068,279],{"class":136},[76,46070,41578],{"class":86},[76,46072,30834],{"class":5183},[76,46074,133],{"class":82},[76,46076,41662],{"class":86},[76,46078,305],{"class":136},[76,46080,41578],{"class":86},[76,46082,30843],{"class":5183},[76,46084,133],{"class":82},[76,46086,407],{"class":136},[76,46088,466],{"class":86},[76,46090,30852],{"class":5183},[76,46092,133],{"class":82},[76,46094,165],{"class":136},[76,46096,93],{"class":86},[76,46098,46099],{"class":78,"line":1617},[76,46100,41726],{"class":146},[76,46102,46103],{"class":78,"line":1638},[76,46104,41731],{"class":146},[76,46106,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137],{"class":78,"line":1643},[76,46108,30814],{"class":136},[76,46110,41738],{"class":86},[76,46112,133],{"class":82},[76,46114,34798],{"class":86},[76,46116,30843],{"class":5183},[76,46118,133],{"class":82},[76,46120,159],{"class":136},[76,46122,466],{"class":86},[76,46124,30898],{"class":5183},[76,46126,133],{"class":82},[76,46128,305],{"class":136},[76,46130,466],{"class":86},[76,46132,30852],{"class":5183},[76,46134,133],{"class":82},[76,46136,305],{"class":136},[76,46138,93],{"class":86},[76,46140,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167],{"class":78,"line":1657},[76,46142,30814],{"class":136},[76,46144,41773],{"class":86},[76,46146,133],{"class":82},[76,46148,30822],{"class":86},[76,46150,30825],{"class":5183},[76,46152,133],{"class":82},[76,46154,41529],{"class":86},[76,46156,30834],{"class":5183},[76,46158,133],{"class":82},[76,46160,41790],{"class":86},[76,46162,30843],{"class":5183},[76,46164,133],{"class":82},[76,46166,305],{"class":136},[76,46168,93],{"class":86},[76,46170,46171],{"class":78,"line":1662},[76,46172,2365],{"emptyLinePlaceholder":2364},[76,46174,46175,46177,46179],{"class":78,"line":1691},[76,46176,30770],{"class":82},[76,46178,31062],{"class":1927},[76,46180,31065],{"class":86},[76,46182,46183,46185,46187,46189,46191,46193],{"class":78,"line":1696},[76,46184,41815],{"class":86},[76,46186,133],{"class":82},[76,46188,30792],{"class":136},[76,46190,35153],{"class":86},[76,46192,30792],{"class":136},[76,46194,41826],{"class":86},[76,46196,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215],{"class":78,"line":1713},[76,46198,7052],{"class":86},[76,46200,133],{"class":82},[76,46202,30792],{"class":136},[76,46204,35153],{"class":86},[76,46206,30792],{"class":136},[76,46208,41841],{"class":86},[76,46210,30792],{"class":136},[76,46212,35153],{"class":86},[76,46214,30792],{"class":136},[76,46216,41850],{"class":86},[76,46218,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237],{"class":78,"line":1718},[76,46220,41855],{"class":86},[76,46222,133],{"class":82},[76,46224,30792],{"class":136},[76,46226,35153],{"class":86},[76,46228,30792],{"class":136},[76,46230,41866],{"class":86},[76,46232,30792],{"class":136},[76,46234,35153],{"class":86},[76,46236,30792],{"class":136},[76,46238,41875],{"class":86},[76,46240,46241,46243,46245,46247,46249,46251,46253,46255],{"class":78,"line":1723},[76,46242,41880],{"class":86},[76,46244,133],{"class":82},[76,46246,30792],{"class":136},[76,46248,35153],{"class":86},[76,46250,30792],{"class":136},[76,46252,41891],{"class":86},[76,46254,30792],{"class":136},[76,46256,41896],{"class":86},[76,46258,46259],{"class":78,"line":1728},[76,46260,41901],{"class":146},[76,46262,46263,46265,46267,46269,46271,46273],{"class":78,"line":1742},[76,46264,14719],{"class":82},[76,46266,41908],{"class":86},[76,46268,32654],{"class":5183},[76,46270,133],{"class":82},[76,46272,305],{"class":136},[76,46274,93],{"class":86},[76,46276,46277],{"class":78,"line":1747},[76,46278,2365],{"emptyLinePlaceholder":2364},[76,46280,46281],{"class":78,"line":2542},[76,46282,41929],{"class":146},[76,46284,46285,46287,46289,46291,46293,46295,46297],{"class":78,"line":2556},[76,46286,14661],{"class":82},[76,46288,41936],{"class":1927},[76,46290,87],{"class":86},[76,46292,30747],{"class":1927},[76,46294,646],{"class":86},[76,46296,30752],{"class":1927},[76,46298,30755],{"class":86},[76,46300,46301],{"class":78,"line":2564},[76,46302,41951],{"class":146},[76,46304,46305,46307,46309],{"class":78,"line":2569},[76,46306,30770],{"class":82},[76,46308,30773],{"class":136},[76,46310,41960],{"class":86},[76,46312,46313,46315,46317,46319,46321,46323],{"class":78,"line":2575},[76,46314,30786],{"class":136},[76,46316,41967],{"class":86},[76,46318,30792],{"class":136},[76,46320,30795],{"class":86},[76,46322,30798],{"class":136},[76,46324,1940],{"class":86},[76,46326,46327,46329,46331,46333],{"class":78,"line":2581},[76,46328,30814],{"class":136},[76,46330,41982],{"class":86},[76,46332,133],{"class":82},[76,46334,37978],{"class":86},[76,46336,46337,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377],{"class":78,"line":2586},[76,46338,37983],{"class":86},[76,46340,30825],{"class":5183},[76,46342,133],{"class":82},[76,46344,159],{"class":136},[76,46346,466],{"class":86},[76,46348,30834],{"class":5183},[76,46350,133],{"class":82},[76,46352,291],{"class":136},[76,46354,466],{"class":86},[76,46356,30843],{"class":5183},[76,46358,133],{"class":82},[76,46360,457],{"class":136},[76,46362,466],{"class":86},[76,46364,30898],{"class":5183},[76,46366,133],{"class":82},[76,46368,165],{"class":136},[76,46370,466],{"class":86},[76,46372,30852],{"class":5183},[76,46374,133],{"class":82},[76,46376,159],{"class":136},[76,46378,38016],{"class":86},[76,46380,46381],{"class":78,"line":7915},[76,46382,38021],{"class":86},[76,46384,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409],{"class":78,"line":7939},[76,46386,38066],{"class":86},[76,46388,30843],{"class":5183},[76,46390,133],{"class":82},[76,46392,159],{"class":136},[76,46394,466],{"class":86},[76,46396,30898],{"class":5183},[76,46398,133],{"class":82},[76,46400,165],{"class":136},[76,46402,466],{"class":86},[76,46404,30852],{"class":5183},[76,46406,133],{"class":82},[76,46408,305],{"class":136},[76,46410,93],{"class":86},[76,46412,46413],{"class":78,"line":7944},[76,46414,38095],{"class":86},[76,46416,46417,46419,46421,46423],{"class":78,"line":7950},[76,46418,30814],{"class":136},[76,46420,42073],{"class":86},[76,46422,133],{"class":82},[76,46424,37978],{"class":86},[76,46426,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451],{"class":78,"line":7977},[76,46428,37983],{"class":86},[76,46430,30825],{"class":5183},[76,46432,133],{"class":82},[76,46434,291],{"class":136},[76,46436,466],{"class":86},[76,46438,30834],{"class":5183},[76,46440,133],{"class":82},[76,46442,291],{"class":136},[76,46444,466],{"class":86},[76,46446,30843],{"class":5183},[76,46448,133],{"class":82},[76,46450,305],{"class":136},[76,46452,38016],{"class":86},[76,46454,46455],{"class":78,"line":7982},[76,46456,38021],{"class":86},[76,46458,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491],{"class":78,"line":7988},[76,46460,37983],{"class":86},[76,46462,30825],{"class":5183},[76,46464,133],{"class":82},[76,46466,291],{"class":136},[76,46468,466],{"class":86},[76,46470,30834],{"class":5183},[76,46472,133],{"class":82},[76,46474,42128],{"class":136},[76,46476,466],{"class":86},[76,46478,30843],{"class":5183},[76,46480,133],{"class":82},[76,46482,159],{"class":136},[76,46484,466],{"class":86},[76,46486,30852],{"class":5183},[76,46488,133],{"class":82},[76,46490,305],{"class":136},[76,46492,38016],{"class":86},[76,46494,46495],{"class":78,"line":8000},[76,46496,38021],{"class":86},[76,46498,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523],{"class":78,"line":8012},[76,46500,38066],{"class":86},[76,46502,30843],{"class":5183},[76,46504,133],{"class":82},[76,46506,159],{"class":136},[76,46508,466],{"class":86},[76,46510,30898],{"class":5183},[76,46512,133],{"class":82},[76,46514,165],{"class":136},[76,46516,466],{"class":86},[76,46518,30852],{"class":5183},[76,46520,133],{"class":82},[76,46522,305],{"class":136},[76,46524,93],{"class":86},[76,46526,46527],{"class":78,"line":8024},[76,46528,38095],{"class":86},[76,46530,46531,46533,46535,46537],{"class":78,"line":9683},[76,46532,30814],{"class":136},[76,46534,42189],{"class":86},[76,46536,133],{"class":82},[76,46538,37978],{"class":86},[76,46540,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569],{"class":78,"line":9708},[76,46542,42198],{"class":86},[76,46544,42128],{"class":136},[76,46546,466],{"class":86},[76,46548,291],{"class":136},[76,46550,42207],{"class":86},[76,46552,297],{"class":136},[76,46554,466],{"class":86},[76,46556,32039],{"class":136},[76,46558,42216],{"class":86},[76,46560,689],{"class":136},[76,46562,466],{"class":86},[76,46564,285],{"class":136},[76,46566,42225],{"class":86},[76,46568,285],{"class":136},[76,46570,38016],{"class":86},[76,46572,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601],{"class":78,"line":9731},[76,46574,42198],{"class":86},[76,46576,34839],{"class":136},[76,46578,466],{"class":86},[76,46580,32039],{"class":136},[76,46582,42207],{"class":86},[76,46584,32039],{"class":136},[76,46586,466],{"class":86},[76,46588,42128],{"class":136},[76,46590,42216],{"class":86},[76,46592,285],{"class":136},[76,46594,466],{"class":86},[76,46596,297],{"class":136},[76,46598,42225],{"class":86},[76,46600,291],{"class":136},[76,46602,38016],{"class":86},[76,46604,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629],{"class":78,"line":9755},[76,46606,38066],{"class":86},[76,46608,30843],{"class":5183},[76,46610,133],{"class":82},[76,46612,159],{"class":136},[76,46614,466],{"class":86},[76,46616,30898],{"class":5183},[76,46618,133],{"class":82},[76,46620,165],{"class":136},[76,46622,466],{"class":86},[76,46624,30852],{"class":5183},[76,46626,133],{"class":82},[76,46628,305],{"class":136},[76,46630,93],{"class":86},[76,46632,46633],{"class":78,"line":9760},[76,46634,38095],{"class":86},[76,46636,46637,46639,46641,46643],{"class":78,"line":9765},[76,46638,30814],{"class":136},[76,46640,42300],{"class":86},[76,46642,133],{"class":82},[76,46644,37978],{"class":86},[76,46646,46647,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675],{"class":78,"line":9770},[76,46648,42198],{"class":86},[76,46650,42311],{"class":136},[76,46652,466],{"class":86},[76,46654,42128],{"class":136},[76,46656,42207],{"class":86},[76,46658,297],{"class":136},[76,46660,466],{"class":86},[76,46662,42324],{"class":136},[76,46664,42216],{"class":86},[76,46666,689],{"class":136},[76,46668,466],{"class":86},[76,46670,695],{"class":136},[76,46672,42225],{"class":86},[76,46674,291],{"class":136},[76,46676,38016],{"class":86},[76,46678,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707],{"class":78,"line":9779},[76,46680,42198],{"class":86},[76,46682,38426],{"class":136},[76,46684,466],{"class":86},[76,46686,21015],{"class":136},[76,46688,42207],{"class":86},[76,46690,706],{"class":136},[76,46692,466],{"class":86},[76,46694,31470],{"class":136},[76,46696,42216],{"class":86},[76,46698,888],{"class":136},[76,46700,466],{"class":86},[76,46702,291],{"class":136},[76,46704,42225],{"class":86},[76,46706,291],{"class":136},[76,46708,38016],{"class":86},[76,46710,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739],{"class":78,"line":9784},[76,46712,42198],{"class":86},[76,46714,38426],{"class":136},[76,46716,466],{"class":86},[76,46718,32039],{"class":136},[76,46720,42207],{"class":86},[76,46722,32039],{"class":136},[76,46724,466],{"class":86},[76,46726,34839],{"class":136},[76,46728,42216],{"class":86},[76,46730,888],{"class":136},[76,46732,466],{"class":86},[76,46734,291],{"class":136},[76,46736,42225],{"class":86},[76,46738,291],{"class":136},[76,46740,38016],{"class":86},[76,46742,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771],{"class":78,"line":9790},[76,46744,42198],{"class":86},[76,46746,38426],{"class":136},[76,46748,466],{"class":86},[76,46750,706],{"class":136},[76,46752,42207],{"class":86},[76,46754,32039],{"class":136},[76,46756,466],{"class":86},[76,46758,42421],{"class":136},[76,46760,42216],{"class":86},[76,46762,285],{"class":136},[76,46764,466],{"class":86},[76,46766,291],{"class":136},[76,46768,42225],{"class":86},[76,46770,291],{"class":136},[76,46772,38016],{"class":86},[76,46774,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803],{"class":78,"line":9811},[76,46776,42198],{"class":86},[76,46778,42442],{"class":136},[76,46780,466],{"class":86},[76,46782,34839],{"class":136},[76,46784,42207],{"class":86},[76,46786,21015],{"class":136},[76,46788,466],{"class":86},[76,46790,42455],{"class":136},[76,46792,42216],{"class":86},[76,46794,285],{"class":136},[76,46796,466],{"class":86},[76,46798,32039],{"class":136},[76,46800,42225],{"class":86},[76,46802,32039],{"class":136},[76,46804,38016],{"class":86},[76,46806,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831],{"class":78,"line":9817},[76,46808,38066],{"class":86},[76,46810,30843],{"class":5183},[76,46812,133],{"class":82},[76,46814,159],{"class":136},[76,46816,466],{"class":86},[76,46818,30898],{"class":5183},[76,46820,133],{"class":82},[76,46822,165],{"class":136},[76,46824,466],{"class":86},[76,46826,30852],{"class":5183},[76,46828,133],{"class":82},[76,46830,305],{"class":136},[76,46832,93],{"class":86},[76,46834,46835],{"class":78,"line":9831},[76,46836,38095],{"class":86},[76,46838,46839,46841,46843,46845],{"class":78,"line":9837},[76,46840,30814],{"class":136},[76,46842,42508],{"class":86},[76,46844,133],{"class":82},[76,46846,37978],{"class":86},[76,46848,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877],{"class":78,"line":9864},[76,46850,42198],{"class":86},[76,46852,42519],{"class":136},[76,46854,466],{"class":86},[76,46856,34839],{"class":136},[76,46858,42207],{"class":86},[76,46860,21015],{"class":136},[76,46862,466],{"class":86},[76,46864,42455],{"class":136},[76,46866,42216],{"class":86},[76,46868,285],{"class":136},[76,46870,466],{"class":86},[76,46872,32039],{"class":136},[76,46874,42225],{"class":86},[76,46876,32039],{"class":136},[76,46878,38016],{"class":86},[76,46880,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909],{"class":78,"line":9873},[76,46882,42198],{"class":86},[76,46884,42519],{"class":136},[76,46886,466],{"class":86},[76,46888,34909],{"class":136},[76,46890,42207],{"class":86},[76,46892,42128],{"class":136},[76,46894,466],{"class":86},[76,46896,34909],{"class":136},[76,46898,42216],{"class":86},[76,46900,695],{"class":136},[76,46902,466],{"class":86},[76,46904,32039],{"class":136},[76,46906,42225],{"class":86},[76,46908,32039],{"class":136},[76,46910,38016],{"class":86},[76,46912,46913,46915,46917,46919,46921],{"class":78,"line":9879},[76,46914,42582],{"class":86},[76,46916,305],{"class":136},[76,46918,466],{"class":86},[76,46920,305],{"class":136},[76,46922,42591],{"class":86},[76,46924,46925],{"class":78,"line":9887},[76,46926,38759],{"class":86},[76,46928,46929,46931,46933,46935,46937],{"class":78,"line":9892},[76,46930,38764],{"class":86},[76,46932,42602],{"class":136},[76,46934,466],{"class":86},[76,46936,165],{"class":136},[76,46938,93],{"class":86},[76,46940,46941],{"class":78,"line":16571},[76,46942,38095],{"class":86},[76,46944,46945],{"class":78,"line":16577},[76,46946,42617],{"class":146},[76,46948,46949,46951,46953,46955,46957],{"class":78,"line":16600},[76,46950,3368],{"class":82},[76,46952,38837],{"class":86},[76,46954,26012],{"class":82},[76,46956,38842],{"class":136},[76,46958,38845],{"class":86},[76,46960,46961,46963,46965],{"class":78,"line":16606},[76,46962,4607],{"class":82},[76,46964,38857],{"class":136},[76,46966,38860],{"class":86},[76,46968,46969,46971,46973,46975,46977,46979,46981,46983,46985],{"class":78,"line":16629},[76,46970,38870],{"class":86},[76,46972,42644],{"class":5183},[76,46974,133],{"class":82},[76,46976,42649],{"class":192},[76,46978,466],{"class":86},[76,46980,38873],{"class":5183},[76,46982,133],{"class":82},[76,46984,38878],{"class":192},[76,46986,93],{"class":86},[76,46988,46989],{"class":78,"line":16643},[76,46990,42664],{"class":146},[76,46992,46993],{"class":78,"line":16663},[76,46994,42669],{"class":146},[76,46996,46997],{"class":78,"line":16669},[76,46998,42674],{"class":146},[76,47000,47001],{"class":78,"line":16680},[76,47002,42679],{"class":146},[76,47004,47005],{"class":78,"line":16703},[76,47006,42684],{"class":146},[76,47008,47009],{"class":78,"line":16725},[76,47010,42689],{"class":146},[76,47012,47013,47015,47017,47019,47021,47023],{"class":78,"line":16730},[76,47014,38890],{"class":82},[76,47016,38893],{"class":86},[76,47018,38896],{"class":82},[76,47020,38899],{"class":82},[76,47022,38902],{"class":136},[76,47024,3704],{"class":86},[76,47026,47027,47029,47031],{"class":78,"line":16736},[76,47028,38914],{"class":86},[76,47030,279],{"class":136},[76,47032,93],{"class":86},[76,47034,47035,47037,47039],{"class":78,"line":16750},[76,47036,42716],{"class":82},[76,47038,38857],{"class":136},[76,47040,38933],{"class":86},[76,47042,47043,47045,47047,47049,47051],{"class":78,"line":16763},[76,47044,42725],{"class":86},[76,47046,279],{"class":136},[76,47048,466],{"class":86},[76,47050,38955],{"class":136},[76,47052,93],{"class":86},[76,47054,47055,47057,47059,47061,47063,47065],{"class":78,"line":16768},[76,47056,42738],{"class":82},[76,47058,38893],{"class":86},[76,47060,38896],{"class":82},[76,47062,38899],{"class":82},[76,47064,38902],{"class":136},[76,47066,3704],{"class":86},[76,47068,47069,47071,47073],{"class":78,"line":16782},[76,47070,42753],{"class":86},[76,47072,279],{"class":136},[76,47074,93],{"class":86},[76,47076,47077],{"class":78,"line":16787},[76,47078,35134],{"class":146},[76,47080,47081,47083,47085],{"class":78,"line":16793},[76,47082,30770],{"class":82},[76,47084,31062],{"class":1927},[76,47086,31065],{"class":86},[76,47088,47089,47091,47093,47095],{"class":78,"line":16798},[76,47090,31070],{"class":86},[76,47092,133],{"class":82},[76,47094,30792],{"class":136},[76,47096,42780],{"class":86},[76,47098,47099,47101,47103,47105],{"class":78,"line":16812},[76,47100,31070],{"class":86},[76,47102,133],{"class":82},[76,47104,30792],{"class":136},[76,47106,42791],{"class":86},[76,47108,47109,47111,47113,47115],{"class":78,"line":16817},[76,47110,31070],{"class":86},[76,47112,133],{"class":82},[76,47114,30792],{"class":136},[76,47116,42802],{"class":86},[76,47118,47119,47121,47123,47125],{"class":78,"line":16822},[76,47120,31070],{"class":86},[76,47122,133],{"class":82},[76,47124,30792],{"class":136},[76,47126,42813],{"class":86},[76,47128,47129,47131,47133,47135],{"class":78,"line":16836},[76,47130,31070],{"class":86},[76,47132,133],{"class":82},[76,47134,30792],{"class":136},[76,47136,42824],{"class":86},[76,47138,47139,47141],{"class":78,"line":16848},[76,47140,14719],{"class":82},[76,47142,31178],{"class":86},[76,47144,47145],{"class":78,"line":16853},[76,47146,2365],{"emptyLinePlaceholder":2364},[76,47148,47149],{"class":78,"line":16866},[76,47150,42839],{"class":146},[76,47152,47153,47155,47157,47159,47161],{"class":78,"line":16871},[76,47154,1495],{"class":82},[76,47156,31189],{"class":136},[76,47158,2914],{"class":82},[76,47160,31194],{"class":192},[76,47162,3704],{"class":86},[76,47164,47165,47167,47169,47171,47173,47175,47177,47179,47181],{"class":78,"line":16876},[76,47166,31206],{"class":86},[76,47168,133],{"class":82},[76,47170,30420],{"class":86},[76,47172,31213],{"class":192},[76,47174,1668],{"class":82},[76,47176,31218],{"class":86},[76,47178,1665],{"class":82},[76,47180,30445],{"class":192},[76,47182,93],{"class":86},[76,47184,47185,47187,47189],{"class":78,"line":16881},[76,47186,31258],{"class":86},[76,47188,133],{"class":82},[76,47190,42880],{"class":86},[76,47192,47193,47195,47197,47199,47201,47203,47205,47207],{"class":78,"line":16894},[76,47194,31268],{"class":136},[76,47196,31271],{"class":86},[76,47198,305],{"class":136},[76,47200,466],{"class":86},[76,47202,31470],{"class":136},[76,47204,466],{"class":86},[76,47206,31470],{"class":136},[76,47208,31284],{"class":86},[21965,47210,47212],{"id":47211},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[21,47214,47215],{},"计算图片的均值与方差，用于训练中归一化处理操作",[66,47217,47219],{"className":30347,"code":47218,"language":30349,"meta":71,"style":71},"# 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",[73,47220,47221,47226,47239,47244,47250,47255,47265,47269,47274,47284,47288,47293,47303,47320,47324,47329,47341,47353,47384,47393,47403,47413,47417,47422,47437,47441,47446,47451,47456,47466,47471,47496,47500,47505,47520,47524,47537,47541,47546,47551,47556,47561,47566,47576,47586,47609,47617,47625,47633,47637,47649,47653,47658,47662,47666,47673,47693,47717,47724,47738,47743,47748,47752,47766,47770,47782],{"__ignoreMap":71},[76,47222,47223],{"class":78,"line":79},[76,47224,47225],{"class":146},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[76,47227,47228,47230,47233,47236],{"class":78,"line":96},[76,47229,30706],{"class":82},[76,47231,47232],{"class":136}," PIL",[76,47234,47235],{"class":82}," import",[76,47237,47238],{"class":86}," Image\n",[76,47240,47241],{"class":78,"line":1143},[76,47242,47243],{"class":146},"# os 用来处理文件夹和文件路径\n",[76,47245,47246,47248],{"class":78,"line":1158},[76,47247,30361],{"class":82},[76,47249,45274],{"class":86},[76,47251,47252],{"class":78,"line":1164},[76,47253,47254],{"class":146},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[76,47256,47257,47259,47261,47263],{"class":78,"line":1178},[76,47258,30361],{"class":82},[76,47260,31349],{"class":86},[76,47262,31352],{"class":82},[76,47264,31355],{"class":86},[76,47266,47267],{"class":78,"line":1184},[76,47268,2365],{"emptyLinePlaceholder":2364},[76,47270,47271],{"class":78,"line":1275},[76,47272,47273],{"class":146},"# 文件夹路径，包含所有图片文件\n",[76,47275,47276,47279,47281],{"class":78,"line":1281},[76,47277,47278],{"class":86},"folder_path ",[76,47280,133],{"class":82},[76,47282,47283],{"class":192}," 'data_cat_dog'\n",[76,47285,47286],{"class":78,"line":1293},[76,47287,2365],{"emptyLinePlaceholder":2364},[76,47289,47290],{"class":78,"line":1576},[76,47291,47292],{"class":146},"# 初始化累积变量\n",[76,47294,47295,47298,47300],{"class":78,"line":1581},[76,47296,47297],{"class":86},"total_pixels ",[76,47299,133],{"class":82},[76,47301,47302],{"class":136}," 0\n",[76,47304,47305,47308,47310,47313,47315,47317],{"class":78,"line":1587},[76,47306,47307],{"class":86},"sum_normalized_pixel_values ",[76,47309,133],{"class":82},[76,47311,47312],{"class":86}," np.zeros(",[76,47314,159],{"class":136},[76,47316,45777],{"class":86},[76,47318,47319],{"class":146},"# 如果是RGB图像，需要三个通道的均值和方差\n",[76,47321,47322],{"class":78,"line":1592},[76,47323,2365],{"emptyLinePlaceholder":2364},[76,47325,47326],{"class":78,"line":1606},[76,47327,47328],{"class":146},"# 遍历文件夹中的图片文件\n",[76,47330,47331,47333,47336,47338],{"class":78,"line":1611},[76,47332,2990],{"class":82},[76,47334,47335],{"class":86}," root, dirs, files ",[76,47337,26012],{"class":82},[76,47339,47340],{"class":86}," os.walk(folder_path):\n",[76,47342,47343,47345,47348,47350],{"class":78,"line":1617},[76,47344,3166],{"class":82},[76,47346,47347],{"class":86}," filename ",[76,47349,26012],{"class":82},[76,47351,47352],{"class":86}," files:\n",[76,47354,47355,47357,47360,47363,47365,47368,47370,47373,47375,47378,47381],{"class":78,"line":1638},[76,47356,2462],{"class":82},[76,47358,47359],{"class":86}," filename.endswith((",[76,47361,47362],{"class":192},"'.jpg'",[76,47364,12402],{"class":86},[76,47366,47367],{"class":192},"'.jpeg'",[76,47369,12402],{"class":86},[76,47371,47372],{"class":192},"'.png'",[76,47374,12402],{"class":86},[76,47376,47377],{"class":192},"'.bmp'",[76,47379,47380],{"class":86},")):  ",[76,47382,47383],{"class":146},"# 可根据实际情况添加其他格式\n",[76,47385,47386,47388,47390],{"class":78,"line":1643},[76,47387,45642],{"class":86},[76,47389,133],{"class":82},[76,47391,47392],{"class":86}," os.path.join(root, filename)\n",[76,47394,47395,47398,47400],{"class":78,"line":1657},[76,47396,47397],{"class":86},"            image ",[76,47399,133],{"class":82},[76,47401,47402],{"class":86}," Image.open(image_path)\n",[76,47404,47405,47408,47410],{"class":78,"line":1662},[76,47406,47407],{"class":86},"            image_array ",[76,47409,133],{"class":82},[76,47411,47412],{"class":86}," np.array(image)\n",[76,47414,47415],{"class":78,"line":1691},[76,47416,2365],{"emptyLinePlaceholder":2364},[76,47418,47419],{"class":78,"line":1696},[76,47420,47421],{"class":146},"            # 归一化像素值到0-1之间\n",[76,47423,47424,47427,47429,47432,47434],{"class":78,"line":1713},[76,47425,47426],{"class":86},"            normalized_image_array ",[76,47428,133],{"class":82},[76,47430,47431],{"class":86}," image_array ",[76,47433,672],{"class":82},[76,47435,47436],{"class":136}," 255.0\n",[76,47438,47439],{"class":78,"line":1718},[76,47440,2365],{"emptyLinePlaceholder":2364},[76,47442,47443],{"class":78,"line":1723},[76,47444,47445],{"class":146},"            # print(image_path)\n",[76,47447,47448],{"class":78,"line":1728},[76,47449,47450],{"class":146},"            # print(normalized_image_array.shape)\n",[76,47452,47453],{"class":78,"line":1742},[76,47454,47455],{"class":146},"            # 累积归一化后的像素值和像素数量\n",[76,47457,47458,47461,47463],{"class":78,"line":1747},[76,47459,47460],{"class":86},"            total_pixels ",[76,47462,9444],{"class":82},[76,47464,47465],{"class":86}," normalized_image_array.size\n",[76,47467,47468],{"class":78,"line":2542},[76,47469,47470],{"class":146},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[76,47472,47473,47476,47478,47481,47484,47486,47488,47490,47492,47494],{"class":78,"line":2556},[76,47474,47475],{"class":86},"            sum_normalized_pixel_values ",[76,47477,9444],{"class":82},[76,47479,47480],{"class":86}," np.sum(normalized_image_array, ",[76,47482,47483],{"class":5183},"axis",[76,47485,133],{"class":82},[76,47487,87],{"class":86},[76,47489,279],{"class":136},[76,47491,12402],{"class":86},[76,47493,305],{"class":136},[76,47495,30466],{"class":86},[76,47497,47498],{"class":78,"line":2564},[76,47499,2365],{"emptyLinePlaceholder":2364},[76,47501,47502],{"class":78,"line":2569},[76,47503,47504],{"class":146},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[76,47506,47507,47510,47512,47515,47517],{"class":78,"line":2575},[76,47508,47509],{"class":86},"mean ",[76,47511,133],{"class":82},[76,47513,47514],{"class":86}," sum_normalized_pixel_values ",[76,47516,672],{"class":82},[76,47518,47519],{"class":86}," total_pixels\n",[76,47521,47522],{"class":78,"line":2581},[76,47523,2365],{"emptyLinePlaceholder":2364},[76,47525,47526,47529,47531,47533,47535],{"class":78,"line":2586},[76,47527,47528],{"class":86},"sum_squared_diff ",[76,47530,133],{"class":82},[76,47532,47312],{"class":86},[76,47534,159],{"class":136},[76,47536,93],{"class":86},[76,47538,47539],{"class":78,"line":7915},[76,47540,2365],{"emptyLinePlaceholder":2364},[76,47542,47543],{"class":78,"line":7939},[76,47544,47545],{"class":146},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[76,47547,47548],{"class":78,"line":7944},[76,47549,47550],{"class":146},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[76,47552,47553],{"class":78,"line":7950},[76,47554,47555],{"class":146},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[76,47557,47558],{"class":78,"line":7977},[76,47559,47560],{"class":146},"# Image.open(image_path)：打开图片\n",[76,47562,47563],{"class":78,"line":7982},[76,47564,47565],{"class":146},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[76,47567,47568,47570,47572,47574],{"class":78,"line":7988},[76,47569,2990],{"class":82},[76,47571,47335],{"class":86},[76,47573,26012],{"class":82},[76,47575,47340],{"class":86},[76,47577,47578,47580,47582,47584],{"class":78,"line":8000},[76,47579,3166],{"class":82},[76,47581,47347],{"class":86},[76,47583,26012],{"class":82},[76,47585,47352],{"class":86},[76,47587,47588,47590,47592,47594,47596,47598,47600,47602,47604,47606],{"class":78,"line":8012},[76,47589,2462],{"class":82},[76,47591,47359],{"class":86},[76,47593,47362],{"class":192},[76,47595,12402],{"class":86},[76,47597,47367],{"class":192},[76,47599,12402],{"class":86},[76,47601,47372],{"class":192},[76,47603,12402],{"class":86},[76,47605,47377],{"class":192},[76,47607,47608],{"class":86},")):\n",[76,47610,47611,47613,47615],{"class":78,"line":8024},[76,47612,45642],{"class":86},[76,47614,133],{"class":82},[76,47616,47392],{"class":86},[76,47618,47619,47621,47623],{"class":78,"line":9683},[76,47620,47397],{"class":86},[76,47622,133],{"class":82},[76,47624,47402],{"class":86},[76,47626,47627,47629,47631],{"class":78,"line":9708},[76,47628,47407],{"class":86},[76,47630,133],{"class":82},[76,47632,47412],{"class":86},[76,47634,47635],{"class":78,"line":9731},[76,47636,47421],{"class":146},[76,47638,47639,47641,47643,47645,47647],{"class":78,"line":9755},[76,47640,47426],{"class":86},[76,47642,133],{"class":82},[76,47644,47431],{"class":86},[76,47646,672],{"class":82},[76,47648,47436],{"class":136},[76,47650,47651],{"class":78,"line":9760},[76,47652,47450],{"class":146},[76,47654,47655],{"class":78,"line":9765},[76,47656,47657],{"class":146},"            # print(mean.shape)\n",[76,47659,47660],{"class":78,"line":9770},[76,47661,47445],{"class":146},[76,47663,47664],{"class":78,"line":9779},[76,47665,2365],{"emptyLinePlaceholder":2364},[76,47667,47668,47671],{"class":78,"line":9784},[76,47669,47670],{"class":82},"            try",[76,47672,3704],{"class":86},[76,47674,47675,47678,47680,47683,47685,47688,47690],{"class":78,"line":9790},[76,47676,47677],{"class":86},"                diff ",[76,47679,133],{"class":82},[76,47681,47682],{"class":86}," (normalized_image_array ",[76,47684,620],{"class":82},[76,47686,47687],{"class":86}," mean) ",[76,47689,10628],{"class":82},[76,47691,47692],{"class":136}," 2\n",[76,47694,47695,47698,47700,47703,47705,47707,47709,47711,47713,47715],{"class":78,"line":9811},[76,47696,47697],{"class":86},"                sum_squared_diff ",[76,47699,9444],{"class":82},[76,47701,47702],{"class":86}," np.sum(diff, ",[76,47704,47483],{"class":5183},[76,47706,133],{"class":82},[76,47708,87],{"class":86},[76,47710,279],{"class":136},[76,47712,12402],{"class":86},[76,47714,305],{"class":136},[76,47716,30466],{"class":86},[76,47718,47719,47722],{"class":78,"line":9817},[76,47720,47721],{"class":82},"            except",[76,47723,3704],{"class":86},[76,47725,47726,47729,47731,47733,47736],{"class":78,"line":9831},[76,47727,47728],{"class":136},"                print",[76,47730,87],{"class":86},[76,47732,140],{"class":82},[76,47734,47735],{"class":192},"\"捕获到自定义异常\"",[76,47737,93],{"class":86},[76,47739,47740],{"class":78,"line":9837},[76,47741,47742],{"class":146},"            # diff = (normalized_image_array - mean) ** 2\n",[76,47744,47745],{"class":78,"line":9864},[76,47746,47747],{"class":146},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[76,47749,47750],{"class":78,"line":9873},[76,47751,2365],{"emptyLinePlaceholder":2364},[76,47753,47754,47757,47759,47762,47764],{"class":78,"line":9879},[76,47755,47756],{"class":86},"variance ",[76,47758,133],{"class":82},[76,47760,47761],{"class":86}," sum_squared_diff ",[76,47763,672],{"class":82},[76,47765,47519],{"class":86},[76,47767,47768],{"class":78,"line":9887},[76,47769,2365],{"emptyLinePlaceholder":2364},[76,47771,47772,47774,47776,47779],{"class":78,"line":9892},[76,47773,30384],{"class":136},[76,47775,87],{"class":86},[76,47777,47778],{"class":192},"\"Mean:\"",[76,47780,47781],{"class":86},", mean)\n",[76,47783,47784,47786,47788,47791],{"class":78,"line":16571},[76,47785,30384],{"class":136},[76,47787,87],{"class":86},[76,47789,47790],{"class":192},"\"Variance:\"",[76,47792,47793],{"class":86},", variance)\n",[66,47795,47797],{"className":30347,"code":47796,"language":30349,"meta":71,"style":71},"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",[73,47798,47799,47805,47811,47821,47827,47837,47851,47861,47871,47881,47885,47895,47905,47909,47913,47921,47926,47931,47950,47954,47959,47964,47969,47974,48015,48020,48030,48035,48048,48053,48058,48063,48068,48073,48077,48082,48087,48109,48113,48145,48159,48169,48179,48183,48193,48207,48217,48227,48237,48243,48247,48251,48255,48259,48263,48271,48291,48295,48299,48303,48307,48323,48327,48331,48339,48343,48347,48355,48359,48363,48367,48375,48379,48383,48387,48395,48399,48407,48411,48419,48423,48431,48435,48443,48447,48451,48459,48463,48467,48479,48503,48517,48521,48525,48529,48537,48541,48549,48553,48561,48565,48573,48577,48585,48589,48597,48601,48613,48617,48625,48629,48637,48641,48645,48649,48653,48661,48665,48681,48685,48693,48697,48701,48705,48709,48713,48717,48721,48737,48741,48753,48757,48769,48773,48785,48789,48797,48801,48809,48813,48817,48821,48827,48831,48839,48843,48859,48863,48871,48875,48891,48903,48907,48919,48923,48927,48935,48939,48943,48951,48955,48963,48967,48975,48979,48983,49025,49067,49071,49075,49091,49095,49111,49115,49119,49127,49131,49135,49147,49185,49189,49193,49201,49205,49219,49229,49235,49241,49247,49253,49257,49261,49267,49271,49275,49283,49287,49305,49309,49313,49317,49333,49337,49341,49345,49349,49353,49373,49393,49397,49401,49405,49413,49421,49425,49441,49461,49481,49485,49490,49499,49508,49513,49518,49523,49536,49541,49550,49559,49576],{"__ignoreMap":71},[76,47800,47801,47803],{"class":78,"line":79},[76,47802,30361],{"class":82},[76,47804,31791],{"class":86},[76,47806,47807,47809],{"class":78,"line":96},[76,47808,30361],{"class":82},[76,47810,31798],{"class":86},[76,47812,47813,47815,47817,47819],{"class":78,"line":1143},[76,47814,30361],{"class":82},[76,47816,31809],{"class":86},[76,47818,31352],{"class":82},[76,47820,31814],{"class":86},[76,47822,47823,47825],{"class":78,"line":1158},[76,47824,30361],{"class":82},[76,47826,30364],{"class":86},[76,47828,47829,47831,47833,47835],{"class":78,"line":1164},[76,47830,30706],{"class":82},[76,47832,31384],{"class":86},[76,47834,30361],{"class":82},[76,47836,31831],{"class":86},[76,47838,47839,47841,47843,47845,47848],{"class":78,"line":1178},[76,47840,30706],{"class":82},[76,47842,31337],{"class":86},[76,47844,30361],{"class":82},[76,47846,47847],{"class":86}," ImageFolder ",[76,47849,47850],{"class":146},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[76,47852,47853,47855,47857,47859],{"class":78,"line":1184},[76,47854,30706],{"class":82},[76,47856,31367],{"class":86},[76,47858,30361],{"class":82},[76,47860,31372],{"class":86},[76,47862,47863,47865,47867,47869],{"class":78,"line":1275},[76,47864,30361],{"class":82},[76,47866,31384],{"class":86},[76,47868,31352],{"class":82},[76,47870,31389],{"class":86},[76,47872,47873,47875,47877,47879],{"class":78,"line":1281},[76,47874,30361],{"class":82},[76,47876,31401],{"class":86},[76,47878,31352],{"class":82},[76,47880,31406],{"class":86},[76,47882,47883],{"class":78,"line":1293},[76,47884,31876],{"class":146},[76,47886,47887,47889,47891,47893],{"class":78,"line":1576},[76,47888,30706],{"class":82},[76,47890,31883],{"class":86},[76,47892,30361],{"class":82},[76,47894,43000],{"class":86},[76,47896,47897,47899,47901,47903],{"class":78,"line":1581},[76,47898,30706],{"class":82},[76,47900,30709],{"class":86},[76,47902,30361],{"class":82},[76,47904,30714],{"class":86},[76,47906,47907],{"class":78,"line":1587},[76,47908,2365],{"emptyLinePlaceholder":2364},[76,47910,47911],{"class":78,"line":1592},[76,47912,31911],{"class":146},[76,47914,47915,47917,47919],{"class":78,"line":1606},[76,47916,31916],{"class":82},[76,47918,31919],{"class":1927},[76,47920,31922],{"class":86},[76,47922,47923],{"class":78,"line":1611},[76,47924,47925],{"class":146},"    # 导入自己的数据集，并进行数据处理\n",[76,47927,47928],{"class":78,"line":1617},[76,47929,47930],{"class":146},"    # 定义数据集的路径\n",[76,47932,47933,47936,47938,47940,47942,47944,47948],{"class":78,"line":1638},[76,47934,47935],{"class":136},"    ROOT_PATH",[76,47937,133],{"class":82},[76,47939,758],{"class":82},[76,47941,339],{"class":192},[76,47943,646],{"class":136},[76,47945,47947],{"class":47946},"sA_wV","\u002Fdata\u002Ftrain",[76,47949,25102],{"class":192},[76,47951,47952],{"class":78,"line":1643},[76,47953,2365],{"emptyLinePlaceholder":2364},[76,47955,47956],{"class":78,"line":1657},[76,47957,47958],{"class":146},"    # 定义归一化方法\n",[76,47960,47961],{"class":78,"line":1662},[76,47962,47963],{"class":146},"    # 这里需要先计算一下数据集的均值和方差\n",[76,47965,47966],{"class":78,"line":1691},[76,47967,47968],{"class":146},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[76,47970,47971],{"class":78,"line":1696},[76,47972,47973],{"class":146},"    # 第一个参数是均值，第二个参数是方差\n",[76,47975,47976,47979,47981,47984,47987,47989,47992,47994,47997,48000,48003,48005,48008,48010,48013],{"class":78,"line":1713},[76,47977,47978],{"class":86},"    normalize",[76,47980,133],{"class":82},[76,47982,47983],{"class":86},"transforms.Normalize([",[76,47985,47986],{"class":136},"0.162",[76,47988,466],{"class":86},[76,47990,47991],{"class":136},"0.151",[76,47993,466],{"class":86},[76,47995,47996],{"class":136},"0.138",[76,47998,47999],{"class":86},"],[",[76,48001,48002],{"class":136},"0.058",[76,48004,466],{"class":86},[76,48006,48007],{"class":136},"0.052",[76,48009,466],{"class":86},[76,48011,48012],{"class":136},"0.048",[76,48014,4622],{"class":86},[76,48016,48017],{"class":78,"line":1718},[76,48018,48019],{"class":146},"    # 定义数据集处理方法变量\n",[76,48021,48022,48025,48027],{"class":78,"line":1723},[76,48023,48024],{"class":86},"    train_transform",[76,48026,133],{"class":82},[76,48028,48029],{"class":86},"transforms.Compose([\n",[76,48031,48032],{"class":78,"line":1728},[76,48033,48034],{"class":146},"        # 调整图像大小为224*224\n",[76,48036,48037,48040,48042,48044,48046],{"class":78,"line":1742},[76,48038,48039],{"class":86},"        transforms.Resize((",[76,48041,31470],{"class":136},[76,48043,466],{"class":86},[76,48045,31470],{"class":136},[76,48047,42591],{"class":86},[76,48049,48050],{"class":78,"line":1747},[76,48051,48052],{"class":146},"        # 将图像转换为张量\n",[76,48054,48055],{"class":78,"line":2542},[76,48056,48057],{"class":86},"        transforms.ToTensor(),\n",[76,48059,48060],{"class":78,"line":2556},[76,48061,48062],{"class":86},"        normalize])\n",[76,48064,48065],{"class":78,"line":2564},[76,48066,48067],{"class":146},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[76,48069,48070],{"class":78,"line":2569},[76,48071,48072],{"class":146},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[76,48074,48075],{"class":78,"line":2575},[76,48076,2365],{"emptyLinePlaceholder":2364},[76,48078,48079],{"class":78,"line":2581},[76,48080,48081],{"class":146},"    # 加载数据集\n",[76,48083,48084],{"class":78,"line":2586},[76,48085,48086],{"class":146},"    # 传入数据集路径与处理方法\n",[76,48088,48089,48091,48093,48096,48099,48101,48104,48106],{"class":78,"line":7915},[76,48090,31927],{"class":86},[76,48092,133],{"class":82},[76,48094,48095],{"class":86},"ImageFolder(",[76,48097,48098],{"class":136},"ROOT_PATH",[76,48100,466],{"class":86},[76,48102,48103],{"class":5183},"transform",[76,48105,133],{"class":82},[76,48107,48108],{"class":86},"train_transform)\n",[76,48110,48111],{"class":78,"line":7939},[76,48112,2365],{"emptyLinePlaceholder":2364},[76,48114,48115,48117,48119,48121,48123,48125,48127,48129,48131,48133,48135,48137,48139,48141,48143],{"class":78,"line":7944},[76,48116,31979],{"class":86},[76,48118,133],{"class":82},[76,48120,31984],{"class":86},[76,48122,31987],{"class":136},[76,48124,87],{"class":86},[76,48126,31992],{"class":136},[76,48128,543],{"class":82},[76,48130,7325],{"class":136},[76,48132,31999],{"class":86},[76,48134,31987],{"class":136},[76,48136,87],{"class":86},[76,48138,32006],{"class":136},[76,48140,543],{"class":82},[76,48142,7325],{"class":136},[76,48144,32013],{"class":86},[76,48146,48147,48149,48151,48153,48155,48157],{"class":78,"line":7950},[76,48148,32018],{"class":86},[76,48150,133],{"class":82},[76,48152,32023],{"class":86},[76,48154,31506],{"class":5183},[76,48156,133],{"class":82},[76,48158,31511],{"class":86},[76,48160,48161,48163,48165,48167],{"class":78,"line":7977},[76,48162,32034],{"class":5183},[76,48164,133],{"class":82},[76,48166,285],{"class":136},[76,48168,31435],{"class":86},[76,48170,48171,48173,48175,48177],{"class":78,"line":7982},[76,48172,32046],{"class":5183},[76,48174,133],{"class":82},[76,48176,31445],{"class":136},[76,48178,31435],{"class":86},[76,48180,48181],{"class":78,"line":7988},[76,48182,32057],{"class":146},[76,48184,48185,48187,48189,48191],{"class":78,"line":8000},[76,48186,32062],{"class":5183},[76,48188,133],{"class":82},[76,48190,483],{"class":136},[76,48192,93],{"class":86},[76,48194,48195,48197,48199,48201,48203,48205],{"class":78,"line":8012},[76,48196,32073],{"class":86},[76,48198,133],{"class":82},[76,48200,31503],{"class":86},[76,48202,31506],{"class":5183},[76,48204,133],{"class":82},[76,48206,32084],{"class":86},[76,48208,48209,48211,48213,48215],{"class":78,"line":8024},[76,48210,32089],{"class":5183},[76,48212,133],{"class":82},[76,48214,285],{"class":136},[76,48216,31435],{"class":86},[76,48218,48219,48221,48223,48225],{"class":78,"line":9683},[76,48220,32100],{"class":5183},[76,48222,133],{"class":82},[76,48224,31445],{"class":136},[76,48226,31435],{"class":86},[76,48228,48229,48231,48233,48235],{"class":78,"line":9708},[76,48230,32111],{"class":5183},[76,48232,133],{"class":82},[76,48234,483],{"class":136},[76,48236,93],{"class":86},[76,48238,48239,48241],{"class":78,"line":9731},[76,48240,4055],{"class":82},[76,48242,32124],{"class":86},[76,48244,48245],{"class":78,"line":9755},[76,48246,2365],{"emptyLinePlaceholder":2364},[76,48248,48249],{"class":78,"line":9760},[76,48250,32133],{"class":146},[76,48252,48253],{"class":78,"line":9765},[76,48254,32138],{"class":146},[76,48256,48257],{"class":78,"line":9770},[76,48258,2365],{"emptyLinePlaceholder":2364},[76,48260,48261],{"class":78,"line":9779},[76,48262,32147],{"class":146},[76,48264,48265,48267,48269],{"class":78,"line":9784},[76,48266,31916],{"class":82},[76,48268,32154],{"class":1927},[76,48270,32157],{"class":86},[76,48272,48273,48275,48277,48279,48281,48283,48285,48287,48289],{"class":78,"line":9790},[76,48274,31206],{"class":86},[76,48276,133],{"class":82},[76,48278,30420],{"class":86},[76,48280,31213],{"class":192},[76,48282,1668],{"class":82},[76,48284,31218],{"class":86},[76,48286,1665],{"class":82},[76,48288,32176],{"class":192},[76,48290,93],{"class":86},[76,48292,48293],{"class":78,"line":9811},[76,48294,2365],{"emptyLinePlaceholder":2364},[76,48296,48297],{"class":78,"line":9817},[76,48298,32191],{"class":146},[76,48300,48301],{"class":78,"line":9831},[76,48302,32196],{"class":146},[76,48304,48305],{"class":78,"line":9837},[76,48306,32201],{"class":146},[76,48308,48309,48311,48313,48315,48317,48319,48321],{"class":78,"line":9864},[76,48310,32206],{"class":86},[76,48312,133],{"class":82},[76,48314,32211],{"class":86},[76,48316,32214],{"class":5183},[76,48318,133],{"class":82},[76,48320,32219],{"class":136},[76,48322,93],{"class":86},[76,48324,48325],{"class":78,"line":9873},[76,48326,2365],{"emptyLinePlaceholder":2364},[76,48328,48329],{"class":78,"line":9879},[76,48330,32230],{"class":146},[76,48332,48333,48335,48337],{"class":78,"line":9887},[76,48334,32235],{"class":86},[76,48336,133],{"class":82},[76,48338,32240],{"class":86},[76,48340,48341],{"class":78,"line":9892},[76,48342,2365],{"emptyLinePlaceholder":2364},[76,48344,48345],{"class":78,"line":16571},[76,48346,32249],{"class":146},[76,48348,48349,48351,48353],{"class":78,"line":16577},[76,48350,31258],{"class":86},[76,48352,133],{"class":82},[76,48354,32258],{"class":86},[76,48356,48357],{"class":78,"line":16600},[76,48358,32263],{"class":146},[76,48360,48361],{"class":78,"line":16606},[76,48362,32268],{"class":146},[76,48364,48365],{"class":78,"line":16629},[76,48366,32273],{"class":146},[76,48368,48369,48371,48373],{"class":78,"line":16643},[76,48370,32278],{"class":86},[76,48372,133],{"class":82},[76,48374,32283],{"class":86},[76,48376,48377],{"class":78,"line":16663},[76,48378,2365],{"emptyLinePlaceholder":2364},[76,48380,48381],{"class":78,"line":16669},[76,48382,32296],{"class":146},[76,48384,48385],{"class":78,"line":16680},[76,48386,32301],{"class":146},[76,48388,48389,48391,48393],{"class":78,"line":16703},[76,48390,32306],{"class":86},[76,48392,133],{"class":82},[76,48394,32311],{"class":136},[76,48396,48397],{"class":78,"line":16725},[76,48398,32316],{"class":146},[76,48400,48401,48403,48405],{"class":78,"line":16730},[76,48402,32321],{"class":86},[76,48404,133],{"class":82},[76,48406,32326],{"class":86},[76,48408,48409],{"class":78,"line":16736},[76,48410,32331],{"class":146},[76,48412,48413,48415,48417],{"class":78,"line":16750},[76,48414,32336],{"class":86},[76,48416,133],{"class":82},[76,48418,32326],{"class":86},[76,48420,48421],{"class":78,"line":16763},[76,48422,32345],{"class":146},[76,48424,48425,48427,48429],{"class":78,"line":16768},[76,48426,32350],{"class":86},[76,48428,133],{"class":82},[76,48430,32326],{"class":86},[76,48432,48433],{"class":78,"line":16782},[76,48434,32359],{"class":146},[76,48436,48437,48439,48441],{"class":78,"line":16787},[76,48438,32364],{"class":86},[76,48440,133],{"class":82},[76,48442,32326],{"class":86},[76,48444,48445],{"class":78,"line":16793},[76,48446,2365],{"emptyLinePlaceholder":2364},[76,48448,48449],{"class":78,"line":16798},[76,48450,32377],{"class":146},[76,48452,48453,48455,48457],{"class":78,"line":16812},[76,48454,32382],{"class":86},[76,48456,133],{"class":82},[76,48458,32387],{"class":86},[76,48460,48461],{"class":78,"line":16817},[76,48462,2365],{"emptyLinePlaceholder":2364},[76,48464,48465],{"class":78,"line":16822},[76,48466,32400],{"class":146},[76,48468,48469,48471,48473,48475,48477],{"class":78,"line":16836},[76,48470,3166],{"class":82},[76,48472,32407],{"class":86},[76,48474,26012],{"class":82},[76,48476,32412],{"class":136},[76,48478,32415],{"class":86},[76,48480,48481,48483,48485,48487,48489,48491,48493,48495,48497,48499,48501],{"class":78,"line":16848},[76,48482,32420],{"class":136},[76,48484,87],{"class":86},[76,48486,32425],{"class":192},[76,48488,32428],{"class":136},[76,48490,672],{"class":192},[76,48492,32428],{"class":136},[76,48494,339],{"class":192},[76,48496,32437],{"class":86},[76,48498,620],{"class":82},[76,48500,305],{"class":136},[76,48502,30466],{"class":86},[76,48504,48505,48507,48509,48511,48513,48515],{"class":78,"line":16853},[76,48506,32420],{"class":136},[76,48508,87],{"class":86},[76,48510,32452],{"class":192},[76,48512,543],{"class":82},[76,48514,534],{"class":136},[76,48516,93],{"class":86},[76,48518,48519],{"class":78,"line":16866},[76,48520,2365],{"emptyLinePlaceholder":2364},[76,48522,48523],{"class":78,"line":16871},[76,48524,32467],{"class":146},[76,48526,48527],{"class":78,"line":16876},[76,48528,32472],{"class":146},[76,48530,48531,48533,48535],{"class":78,"line":16881},[76,48532,32477],{"class":86},[76,48534,133],{"class":82},[76,48536,32311],{"class":136},[76,48538,48539],{"class":78,"line":16894},[76,48540,32486],{"class":146},[76,48542,48543,48545,48547],{"class":78,"line":16899},[76,48544,32491],{"class":86},[76,48546,133],{"class":82},[76,48548,3050],{"class":136},[76,48550,48551],{"class":78,"line":32602},[76,48552,32500],{"class":146},[76,48554,48555,48557,48559],{"class":78,"line":32608},[76,48556,32505],{"class":86},[76,48558,133],{"class":82},[76,48560,32311],{"class":136},[76,48562,48563],{"class":78,"line":32614},[76,48564,32514],{"class":146},[76,48566,48567,48569,48571],{"class":78,"line":32620},[76,48568,32519],{"class":86},[76,48570,133],{"class":82},[76,48572,3050],{"class":136},[76,48574,48575],{"class":78,"line":32626},[76,48576,32528],{"class":146},[76,48578,48579,48581,48583],{"class":78,"line":32637},[76,48580,32533],{"class":86},[76,48582,133],{"class":82},[76,48584,3050],{"class":136},[76,48586,48587],{"class":78,"line":32643},[76,48588,32542],{"class":146},[76,48590,48591,48593,48595],{"class":78,"line":32663},[76,48592,32547],{"class":86},[76,48594,133],{"class":82},[76,48596,3050],{"class":136},[76,48598,48599],{"class":78,"line":32669},[76,48600,32556],{"class":146},[76,48602,48603,48605,48607,48609,48611],{"class":78,"line":32680},[76,48604,3368],{"class":82},[76,48606,31570],{"class":86},[76,48608,26012],{"class":82},[76,48610,31575],{"class":136},[76,48612,32569],{"class":86},[76,48614,48615],{"class":78,"line":32686},[76,48616,32574],{"class":146},[76,48618,48619,48621,48623],{"class":78,"line":32692},[76,48620,32579],{"class":86},[76,48622,133],{"class":82},[76,48624,32584],{"class":86},[76,48626,48627],{"class":78,"line":32698},[76,48628,32589],{"class":146},[76,48630,48631,48633,48635],{"class":78,"line":32704},[76,48632,32594],{"class":86},[76,48634,133],{"class":82},[76,48636,32599],{"class":86},[76,48638,48639],{"class":78,"line":32710},[76,48640,32605],{"class":146},[76,48642,48643],{"class":78,"line":32716},[76,48644,32611],{"class":86},[76,48646,48647],{"class":78,"line":32722},[76,48648,32617],{"class":146},[76,48650,48651],{"class":78,"line":32742},[76,48652,32623],{"class":146},[76,48654,48655,48657,48659],{"class":78,"line":32748},[76,48656,32629],{"class":86},[76,48658,133],{"class":82},[76,48660,32634],{"class":86},[76,48662,48663],{"class":78,"line":32764},[76,48664,32640],{"class":146},[76,48666,48667,48669,48671,48673,48675,48677,48679],{"class":78,"line":32770},[76,48668,32646],{"class":86},[76,48670,133],{"class":82},[76,48672,32651],{"class":86},[76,48674,32654],{"class":5183},[76,48676,133],{"class":82},[76,48678,305],{"class":136},[76,48680,93],{"class":86},[76,48682,48683],{"class":78,"line":32784},[76,48684,32666],{"class":146},[76,48686,48687,48689,48691],{"class":78,"line":32790},[76,48688,32672],{"class":86},[76,48690,133],{"class":82},[76,48692,32677],{"class":86},[76,48694,48695],{"class":78,"line":32805},[76,48696,32683],{"class":146},[76,48698,48699],{"class":78,"line":32811},[76,48700,32689],{"class":86},[76,48702,48703],{"class":78,"line":32820},[76,48704,32695],{"class":146},[76,48706,48707],{"class":78,"line":32826},[76,48708,32701],{"class":86},[76,48710,48711],{"class":78,"line":32835},[76,48712,32707],{"class":146},[76,48714,48715],{"class":78,"line":32841},[76,48716,32713],{"class":86},[76,48718,48719],{"class":78,"line":32847},[76,48720,32719],{"class":146},[76,48722,48723,48725,48727,48729,48731,48733,48735],{"class":78,"line":32856},[76,48724,32725],{"class":86},[76,48726,9444],{"class":82},[76,48728,32730],{"class":86},[76,48730,543],{"class":82},[76,48732,32735],{"class":86},[76,48734,279],{"class":136},[76,48736,93],{"class":86},[76,48738,48739],{"class":78,"line":32862},[76,48740,32745],{"class":146},[76,48742,48743,48745,48747,48749,48751],{"class":78,"line":32873},[76,48744,32751],{"class":86},[76,48746,9444],{"class":82},[76,48748,32756],{"class":86},[76,48750,2914],{"class":82},[76,48752,32761],{"class":86},[76,48754,48755],{"class":78,"line":32879},[76,48756,32767],{"class":146},[76,48758,48759,48761,48763,48765,48767],{"class":78,"line":32898},[76,48760,32773],{"class":86},[76,48762,9444],{"class":82},[76,48764,32735],{"class":86},[76,48766,279],{"class":136},[76,48768,93],{"class":86},[76,48770,48771],{"class":78,"line":32904},[76,48772,32787],{"class":146},[76,48774,48775,48777,48779,48781,48783],{"class":78,"line":32915},[76,48776,3368],{"class":82},[76,48778,32795],{"class":86},[76,48780,26012],{"class":82},[76,48782,31575],{"class":136},[76,48784,32802],{"class":86},[76,48786,48787],{"class":78,"line":32921},[76,48788,32808],{"class":146},[76,48790,48791,48793,48795],{"class":78,"line":32941},[76,48792,32579],{"class":86},[76,48794,133],{"class":82},[76,48796,32584],{"class":86},[76,48798,48799],{"class":78,"line":32957},[76,48800,32823],{"class":146},[76,48802,48803,48805,48807],{"class":78,"line":32963},[76,48804,32594],{"class":86},[76,48806,133],{"class":82},[76,48808,32599],{"class":86},[76,48810,48811],{"class":78,"line":32977},[76,48812,32838],{"class":146},[76,48814,48815],{"class":78,"line":32983},[76,48816,32844],{"class":86},[76,48818,48819],{"class":78,"line":32989},[76,48820,36325],{"class":146},[76,48822,48823,48825],{"class":78,"line":33000},[76,48824,32850],{"class":82},[76,48826,32853],{"class":86},[76,48828,48829],{"class":78,"line":33006},[76,48830,32859],{"class":146},[76,48832,48833,48835,48837],{"class":78,"line":33012},[76,48834,36340],{"class":86},[76,48836,133],{"class":82},[76,48838,32634],{"class":86},[76,48840,48841],{"class":78,"line":33022},[76,48842,32876],{"class":146},[76,48844,48845,48847,48849,48851,48853,48855,48857],{"class":78,"line":33028},[76,48846,36353],{"class":86},[76,48848,133],{"class":82},[76,48850,32651],{"class":86},[76,48852,32654],{"class":5183},[76,48854,133],{"class":82},[76,48856,305],{"class":136},[76,48858,93],{"class":86},[76,48860,48861],{"class":78,"line":33039},[76,48862,32901],{"class":146},[76,48864,48865,48867,48869],{"class":78,"line":33045},[76,48866,36374],{"class":86},[76,48868,133],{"class":82},[76,48870,32677],{"class":86},[76,48872,48873],{"class":78,"line":33055},[76,48874,32918],{"class":146},[76,48876,48877,48879,48881,48883,48885,48887,48889],{"class":78,"line":33060},[76,48878,36387],{"class":86},[76,48880,9444],{"class":82},[76,48882,36392],{"class":86},[76,48884,543],{"class":82},[76,48886,32735],{"class":86},[76,48888,279],{"class":136},[76,48890,93],{"class":86},[76,48892,48893,48895,48897,48899,48901],{"class":78,"line":33066},[76,48894,36405],{"class":86},[76,48896,9444],{"class":82},[76,48898,32756],{"class":86},[76,48900,2914],{"class":82},[76,48902,32761],{"class":86},[76,48904,48905],{"class":78,"line":33115},[76,48906,36418],{"class":146},[76,48908,48909,48911,48913,48915,48917],{"class":78,"line":33162},[76,48910,36423],{"class":86},[76,48912,9444],{"class":82},[76,48914,32735],{"class":86},[76,48916,279],{"class":136},[76,48918,93],{"class":86},[76,48920,48921],{"class":78,"line":33167},[76,48922,32980],{"class":146},[76,48924,48925],{"class":78,"line":33173},[76,48926,32986],{"class":146},[76,48928,48929,48931,48933],{"class":78,"line":33192},[76,48930,32992],{"class":86},[76,48932,672],{"class":82},[76,48934,32997],{"class":86},[76,48936,48937],{"class":78,"line":33198},[76,48938,33003],{"class":146},[76,48940,48941],{"class":78,"line":33218},[76,48942,33009],{"class":146},[76,48944,48945,48947,48949],{"class":78,"line":33224},[76,48946,33015],{"class":86},[76,48948,672],{"class":82},[76,48950,32997],{"class":86},[76,48952,48953],{"class":78,"line":33230},[76,48954,33025],{"class":146},[76,48956,48957,48959,48961],{"class":78,"line":33240},[76,48958,33031],{"class":86},[76,48960,672],{"class":82},[76,48962,33036],{"class":86},[76,48964,48965],{"class":78,"line":33245},[76,48966,33042],{"class":146},[76,48968,48969,48971,48973],{"class":78,"line":33251},[76,48970,33048],{"class":86},[76,48972,672],{"class":82},[76,48974,33036],{"class":86},[76,48976,48977],{"class":78,"line":33267},[76,48978,2365],{"emptyLinePlaceholder":2364},[76,48980,48981],{"class":78,"line":33312},[76,48982,33063],{"class":146},[76,48984,48985,48987,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023],{"class":78,"line":33318},[76,48986,32420],{"class":136},[76,48988,87],{"class":86},[76,48990,3557],{"class":192},[76,48992,32428],{"class":136},[76,48994,33077],{"class":192},[76,48996,984],{"class":136},[76,48998,33082],{"class":82},[76,49000,1034],{"class":136},[76,49002,33087],{"class":192},[76,49004,984],{"class":136},[76,49006,33082],{"class":82},[76,49008,1034],{"class":136},[76,49010,3557],{"class":192},[76,49012,33098],{"class":86},[76,49014,620],{"class":82},[76,49016,305],{"class":136},[76,49018,33105],{"class":86},[76,49020,620],{"class":82},[76,49022,305],{"class":136},[76,49024,33112],{"class":86},[76,49026,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065],{"class":78,"line":33324},[76,49028,32420],{"class":136},[76,49030,87],{"class":86},[76,49032,3557],{"class":192},[76,49034,32428],{"class":136},[76,49036,33126],{"class":192},[76,49038,984],{"class":136},[76,49040,33082],{"class":82},[76,49042,1034],{"class":136},[76,49044,33135],{"class":192},[76,49046,984],{"class":136},[76,49048,33082],{"class":82},[76,49050,1034],{"class":136},[76,49052,3557],{"class":192},[76,49054,33146],{"class":86},[76,49056,620],{"class":82},[76,49058,305],{"class":136},[76,49060,33153],{"class":86},[76,49062,620],{"class":82},[76,49064,305],{"class":136},[76,49066,33112],{"class":86},[76,49068,49069],{"class":78,"line":33330},[76,49070,2365],{"emptyLinePlaceholder":2364},[76,49072,49073],{"class":78,"line":33341},[76,49074,33170],{"class":146},[76,49076,49077,49079,49081,49083,49085,49087,49089],{"class":78,"line":33347},[76,49078,2462],{"class":82},[76,49080,33178],{"class":86},[76,49082,620],{"class":82},[76,49084,305],{"class":136},[76,49086,1028],{"class":86},[76,49088,1048],{"class":82},[76,49090,33189],{"class":86},[76,49092,49093],{"class":78,"line":33353},[76,49094,33195],{"class":146},[76,49096,49097,49099,49101,49103,49105,49107,49109],{"class":78,"line":33359},[76,49098,33201],{"class":86},[76,49100,127],{"class":136},[76,49102,133],{"class":82},[76,49104,33208],{"class":86},[76,49106,620],{"class":82},[76,49108,305],{"class":136},[76,49110,33215],{"class":86},[76,49112,49113],{"class":78,"line":33377},[76,49114,33221],{"class":146},[76,49116,49117],{"class":78,"line":33391},[76,49118,33227],{"class":146},[76,49120,49121,49123,49125],{"class":78,"line":33400},[76,49122,33233],{"class":86},[76,49124,133],{"class":82},[76,49126,32283],{"class":86},[76,49128,49129],{"class":78,"line":33409},[76,49130,2365],{"emptyLinePlaceholder":2364},[76,49132,49133],{"class":78,"line":33418},[76,49134,33248],{"class":146},[76,49136,49137,49139,49141,49143,49145],{"class":78,"line":33427},[76,49138,33254],{"class":86},[76,49140,133],{"class":82},[76,49142,33259],{"class":86},[76,49144,620],{"class":82},[76,49146,33264],{"class":86},[76,49148,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183],{"class":78,"line":33433},[76,49150,32420],{"class":136},[76,49152,87],{"class":86},[76,49154,33274],{"class":192},[76,49156,984],{"class":136},[76,49158,33279],{"class":82},[76,49160,1034],{"class":136},[76,49162,632],{"class":192},[76,49164,984],{"class":136},[76,49166,33279],{"class":82},[76,49168,1034],{"class":136},[76,49170,33292],{"class":192},[76,49172,33295],{"class":86},[76,49174,33298],{"class":82},[76,49176,995],{"class":136},[76,49178,33303],{"class":86},[76,49180,416],{"class":82},[76,49182,995],{"class":136},[76,49184,30466],{"class":86},[76,49186,49187],{"class":78,"line":33439},[76,49188,36702],{"class":146},[76,49190,49191],{"class":78,"line":33447},[76,49192,36707],{"class":146},[76,49194,49195,49197,49199],{"class":78,"line":33452},[76,49196,36712],{"class":86},[76,49198,33336],{"class":192},[76,49200,93],{"class":86},[76,49202,49203],{"class":78,"line":33458},[76,49204,33356],{"class":146},[76,49206,49207,49209,49211,49213,49215,49217],{"class":78,"line":33469},[76,49208,33362],{"class":86},[76,49210,133],{"class":82},[76,49212,33367],{"class":86},[76,49214,33370],{"class":5183},[76,49216,133],{"class":82},[76,49218,1510],{"class":86},[76,49220,49221,49223,49225,49227],{"class":78,"line":33475},[76,49222,33380],{"class":192},[76,49224,947],{"class":86},[76,49226,33385],{"class":136},[76,49228,33388],{"class":86},[76,49230,49231,49233],{"class":78,"line":33495},[76,49232,33394],{"class":192},[76,49234,33397],{"class":86},[76,49236,49237,49239],{"class":78,"line":33501},[76,49238,33403],{"class":192},[76,49240,33406],{"class":86},[76,49242,49243,49245],{"class":78,"line":33507},[76,49244,33412],{"class":192},[76,49246,33415],{"class":86},[76,49248,49249,49251],{"class":78,"line":33513},[76,49250,33421],{"class":192},[76,49252,33424],{"class":86},[76,49254,49255],{"class":78,"line":33530},[76,49256,33430],{"class":86},[76,49258,49259],{"class":78,"line":33536},[76,49260,33436],{"class":146},[76,49262,49263,49265],{"class":78,"line":33542},[76,49264,4055],{"class":82},[76,49266,33444],{"class":86},[76,49268,49269],{"class":78,"line":33548},[76,49270,2365],{"emptyLinePlaceholder":2364},[76,49272,49273],{"class":78,"line":33554},[76,49274,33455],{"class":146},[76,49276,49277,49279,49281],{"class":78,"line":33560},[76,49278,31916],{"class":82},[76,49280,33463],{"class":1927},[76,49282,33466],{"class":86},[76,49284,49285],{"class":78,"line":33587},[76,49286,33472],{"class":146},[76,49288,49289,49291,49293,49295,49297,49299,49301,49303],{"class":78,"line":33611},[76,49290,33478],{"class":86},[76,49292,31662],{"class":5183},[76,49294,133],{"class":82},[76,49296,87],{"class":86},[76,49298,586],{"class":136},[76,49300,466],{"class":86},[76,49302,381],{"class":136},[76,49304,30466],{"class":86},[76,49306,49307],{"class":78,"line":33617},[76,49308,33498],{"class":146},[76,49310,49311],{"class":78,"line":33623},[76,49312,33504],{"class":146},[76,49314,49315],{"class":78,"line":33629},[76,49316,33510],{"class":146},[76,49318,49319,49321,49323,49325,49327,49329,49331],{"class":78,"line":33640},[76,49320,31696],{"class":86},[76,49322,305],{"class":136},[76,49324,466],{"class":86},[76,49326,165],{"class":136},[76,49328,466],{"class":86},[76,49330,305],{"class":136},[76,49332,93],{"class":86},[76,49334,49335],{"class":78,"line":33651},[76,49336,33533],{"class":146},[76,49338,49339],{"class":78,"line":33657},[76,49340,33539],{"class":146},[76,49342,49343],{"class":78,"line":33674},[76,49344,33545],{"class":146},[76,49346,49347],{"class":78,"line":33697},[76,49348,33551],{"class":146},[76,49350,49351],{"class":78,"line":33720},[76,49352,33557],{"class":146},[76,49354,49355,49357,49359,49361,49363,49365,49367,49369,49371],{"class":78,"line":33726},[76,49356,33563],{"class":86},[76,49358,33566],{"class":192},[76,49360,33569],{"class":86},[76,49362,33572],{"class":192},[76,49364,466],{"class":86},[76,49366,33577],{"class":5183},[76,49368,133],{"class":82},[76,49370,33582],{"class":192},[76,49372,93],{"class":86},[76,49374,49375,49377,49379,49381,49383,49385,49387,49389,49391],{"class":78,"line":33731},[76,49376,33563],{"class":86},[76,49378,33566],{"class":192},[76,49380,33594],{"class":86},[76,49382,33597],{"class":192},[76,49384,466],{"class":86},[76,49386,33577],{"class":5183},[76,49388,133],{"class":82},[76,49390,33606],{"class":192},[76,49392,93],{"class":86},[76,49394,49395],{"class":78,"line":33740},[76,49396,33614],{"class":146},[76,49398,49399],{"class":78,"line":33750},[76,49400,33620],{"class":86},[76,49402,49403],{"class":78,"line":33756},[76,49404,33626],{"class":146},[76,49406,49407,49409,49411],{"class":78,"line":33761},[76,49408,33632],{"class":86},[76,49410,33635],{"class":192},[76,49412,93],{"class":86},[76,49414,49415,49417,49419],{"class":78,"line":33767},[76,49416,33643],{"class":86},[76,49418,33646],{"class":192},[76,49420,93],{"class":86},[76,49422,49423],{"class":78,"line":33780},[76,49424,33654],{"class":146},[76,49426,49427,49429,49431,49433,49435,49437,49439],{"class":78,"line":33786},[76,49428,31696],{"class":86},[76,49430,305],{"class":136},[76,49432,466],{"class":86},[76,49434,165],{"class":136},[76,49436,466],{"class":86},[76,49438,165],{"class":136},[76,49440,93],{"class":86},[76,49442,49443,49445,49447,49449,49451,49453,49455,49457,49459],{"class":78,"line":33797},[76,49444,33563],{"class":86},[76,49446,33566],{"class":192},[76,49448,33681],{"class":86},[76,49450,33572],{"class":192},[76,49452,466],{"class":86},[76,49454,33577],{"class":5183},[76,49456,133],{"class":82},[76,49458,33692],{"class":192},[76,49460,93],{"class":86},[76,49462,49463,49465,49467,49469,49471,49473,49475,49477,49479],{"class":78,"line":33808},[76,49464,33563],{"class":86},[76,49466,33566],{"class":192},[76,49468,33704],{"class":86},[76,49470,33597],{"class":192},[76,49472,466],{"class":86},[76,49474,33577],{"class":5183},[76,49476,133],{"class":82},[76,49478,33715],{"class":192},[76,49480,93],{"class":86},[76,49482,49483],{"class":78,"line":33827},[76,49484,33723],{"class":146},[76,49486,49488],{"class":78,"line":49487},219,[76,49489,33620],{"class":86},[76,49491,49493,49495,49497],{"class":78,"line":49492},220,[76,49494,33632],{"class":86},[76,49496,33566],{"class":192},[76,49498,93],{"class":86},[76,49500,49502,49504,49506],{"class":78,"line":49501},221,[76,49503,33643],{"class":86},[76,49505,33745],{"class":192},[76,49507,93],{"class":86},[76,49509,49511],{"class":78,"line":49510},222,[76,49512,33753],{"class":86},[76,49514,49516],{"class":78,"line":49515},223,[76,49517,2365],{"emptyLinePlaceholder":2364},[76,49519,49521],{"class":78,"line":49520},224,[76,49522,33764],{"class":146},[76,49524,49526,49528,49530,49532,49534],{"class":78,"line":49525},225,[76,49527,1495],{"class":82},[76,49529,31189],{"class":136},[76,49531,2914],{"class":82},[76,49533,31194],{"class":192},[76,49535,3704],{"class":86},[76,49537,49539],{"class":78,"line":49538},226,[76,49540,33783],{"class":146},[76,49542,49544,49546,49548],{"class":78,"line":49543},227,[76,49545,44515],{"class":86},[76,49547,133],{"class":82},[76,49549,44520],{"class":86},[76,49551,49553,49555,49557],{"class":78,"line":49552},228,[76,49554,33800],{"class":86},[76,49556,133],{"class":82},[76,49558,33805],{"class":86},[76,49560,49562,49564,49566,49568,49570,49572,49574],{"class":78,"line":49561},229,[76,49563,33362],{"class":86},[76,49565,133],{"class":82},[76,49567,44537],{"class":86},[76,49569,33818],{"class":5183},[76,49571,133],{"class":82},[76,49573,995],{"class":136},[76,49575,93],{"class":86},[76,49577,49579],{"class":78,"line":49578},230,[76,49580,33830],{"class":86},[21965,49582,49584],{"id":49583},"_242测试代码","2.4.2.测试代码",[21,49586,49587],{},"使用测试集进行测试与推理",[66,49589,49591],{"className":30347,"code":49590,"language":30349,"meta":71,"style":71},"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",[73,49592,49593,49599,49609,49619,49630,49640,49644,49648,49656,49661,49665,49682,49686,49690,49694,49698,49702,49734,49738,49746,49750,49762,49766,49770,49774,49778,49782,49786,49790,49794,49812,49826,49830,49840,49850,49860,49866,49870,49874,49882,49886,49902,49910,49914,49918,49926,49934,49938,49942,49946,49950,49956,49960,49970,49978,49986,49990,49994,49998,50006,50010,50026,50030,50034,50038,50050,50054,50066,50070,50074,50086,50090,50100,50104,50108,50120,50124,50132,50136,50140,50148,50152,50160,50164,50168,50172,50176,50180,50196,50204,50208,50212,50230,50236,50240,50250,50258,50266,50270,50274,50278,50282,50290,50294,50310,50314,50322,50330],{"__ignoreMap":71},[76,49594,49595,49597],{"class":78,"line":79},[76,49596,30361],{"class":82},[76,49598,30364],{"class":86},[76,49600,49601,49603,49605,49607],{"class":78,"line":96},[76,49602,30361],{"class":82},[76,49604,31384],{"class":86},[76,49606,31352],{"class":82},[76,49608,31389],{"class":86},[76,49610,49611,49613,49615,49617],{"class":78,"line":1143},[76,49612,30706],{"class":82},[76,49614,31367],{"class":86},[76,49616,30361],{"class":82},[76,49618,31372],{"class":86},[76,49620,49621,49623,49625,49627],{"class":78,"line":1158},[76,49622,30706],{"class":82},[76,49624,31337],{"class":86},[76,49626,30361],{"class":82},[76,49628,49629],{"class":86}," ImageFolder\n",[76,49631,49632,49634,49636,49638],{"class":78,"line":1164},[76,49633,30706],{"class":82},[76,49635,31883],{"class":86},[76,49637,30361],{"class":82},[76,49639,44609],{"class":86},[76,49641,49642],{"class":78,"line":1178},[76,49643,2365],{"emptyLinePlaceholder":2364},[76,49645,49646],{"class":78,"line":1184},[76,49647,33920],{"class":146},[76,49649,49650,49652,49654],{"class":78,"line":1275},[76,49651,31916],{"class":82},[76,49653,33927],{"class":1927},[76,49655,31922],{"class":86},[76,49657,49658],{"class":78,"line":1281},[76,49659,49660],{"class":146},"   # 导入自己的数据集，并进行数据处理\n",[76,49662,49663],{"class":78,"line":1293},[76,49664,47930],{"class":146},[76,49666,49667,49669,49671,49673,49675,49677,49680],{"class":78,"line":1576},[76,49668,47935],{"class":136},[76,49670,133],{"class":82},[76,49672,758],{"class":82},[76,49674,339],{"class":192},[76,49676,646],{"class":136},[76,49678,49679],{"class":47946},"\u002Fdata\u002Ftest",[76,49681,25102],{"class":192},[76,49683,49684],{"class":78,"line":1581},[76,49685,2365],{"emptyLinePlaceholder":2364},[76,49687,49688],{"class":78,"line":1587},[76,49689,47958],{"class":146},[76,49691,49692],{"class":78,"line":1592},[76,49693,47963],{"class":146},[76,49695,49696],{"class":78,"line":1606},[76,49697,47968],{"class":146},[76,49699,49700],{"class":78,"line":1611},[76,49701,47973],{"class":146},[76,49703,49704,49706,49708,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732],{"class":78,"line":1617},[76,49705,47978],{"class":86},[76,49707,133],{"class":82},[76,49709,47983],{"class":86},[76,49711,47986],{"class":136},[76,49713,466],{"class":86},[76,49715,47991],{"class":136},[76,49717,466],{"class":86},[76,49719,47996],{"class":136},[76,49721,47999],{"class":86},[76,49723,48002],{"class":136},[76,49725,466],{"class":86},[76,49727,48007],{"class":136},[76,49729,466],{"class":86},[76,49731,48012],{"class":136},[76,49733,4622],{"class":86},[76,49735,49736],{"class":78,"line":1638},[76,49737,48019],{"class":146},[76,49739,49740,49742,49744],{"class":78,"line":1643},[76,49741,48024],{"class":86},[76,49743,133],{"class":82},[76,49745,48029],{"class":86},[76,49747,49748],{"class":78,"line":1657},[76,49749,48034],{"class":146},[76,49751,49752,49754,49756,49758,49760],{"class":78,"line":1662},[76,49753,48039],{"class":86},[76,49755,31470],{"class":136},[76,49757,466],{"class":86},[76,49759,31470],{"class":136},[76,49761,42591],{"class":86},[76,49763,49764],{"class":78,"line":1691},[76,49765,48052],{"class":146},[76,49767,49768],{"class":78,"line":1696},[76,49769,48057],{"class":86},[76,49771,49772],{"class":78,"line":1713},[76,49773,48062],{"class":86},[76,49775,49776],{"class":78,"line":1718},[76,49777,48067],{"class":146},[76,49779,49780],{"class":78,"line":1723},[76,49781,48072],{"class":146},[76,49783,49784],{"class":78,"line":1728},[76,49785,2365],{"emptyLinePlaceholder":2364},[76,49787,49788],{"class":78,"line":1742},[76,49789,48081],{"class":146},[76,49791,49792],{"class":78,"line":1747},[76,49793,48086],{"class":146},[76,49795,49796,49798,49800,49802,49804,49806,49808,49810],{"class":78,"line":2542},[76,49797,33934],{"class":86},[76,49799,133],{"class":82},[76,49801,48095],{"class":86},[76,49803,48098],{"class":136},[76,49805,466],{"class":86},[76,49807,48103],{"class":5183},[76,49809,133],{"class":82},[76,49811,48108],{"class":86},[76,49813,49814,49816,49818,49820,49822,49824],{"class":78,"line":2556},[76,49815,33991],{"class":86},[76,49817,133],{"class":82},[76,49819,31503],{"class":86},[76,49821,31506],{"class":5183},[76,49823,133],{"class":82},[76,49825,34002],{"class":86},[76,49827,49828],{"class":78,"line":2564},[76,49829,34007],{"class":146},[76,49831,49832,49834,49836,49838],{"class":78,"line":2569},[76,49833,34012],{"class":5183},[76,49835,133],{"class":82},[76,49837,305],{"class":136},[76,49839,31435],{"class":86},[76,49841,49842,49844,49846,49848],{"class":78,"line":2575},[76,49843,34023],{"class":5183},[76,49845,133],{"class":82},[76,49847,31445],{"class":136},[76,49849,31435],{"class":86},[76,49851,49852,49854,49856,49858],{"class":78,"line":2581},[76,49853,34034],{"class":5183},[76,49855,133],{"class":82},[76,49857,279],{"class":136},[76,49859,93],{"class":86},[76,49861,49862,49864],{"class":78,"line":2586},[76,49863,4055],{"class":82},[76,49865,34047],{"class":86},[76,49867,49868],{"class":78,"line":7915},[76,49869,2365],{"emptyLinePlaceholder":2364},[76,49871,49872],{"class":78,"line":7939},[76,49873,34056],{"class":146},[76,49875,49876,49878,49880],{"class":78,"line":7944},[76,49877,31916],{"class":82},[76,49879,34063],{"class":1927},[76,49881,34066],{"class":86},[76,49883,49884],{"class":78,"line":7950},[76,49885,34071],{"class":146},[76,49887,49888,49890,49892,49894,49896,49898,49900],{"class":78,"line":7977},[76,49889,31206],{"class":86},[76,49891,133],{"class":82},[76,49893,31213],{"class":192},[76,49895,1668],{"class":82},[76,49897,31218],{"class":86},[76,49899,1665],{"class":82},[76,49901,34088],{"class":192},[76,49903,49904,49906,49908],{"class":78,"line":7982},[76,49905,31258],{"class":86},[76,49907,133],{"class":82},[76,49909,32258],{"class":86},[76,49911,49912],{"class":78,"line":7988},[76,49913,2365],{"emptyLinePlaceholder":2364},[76,49915,49916],{"class":78,"line":8000},[76,49917,34105],{"class":146},[76,49919,49920,49922,49924],{"class":78,"line":8012},[76,49921,34110],{"class":86},[76,49923,133],{"class":82},[76,49925,32311],{"class":136},[76,49927,49928,49930,49932],{"class":78,"line":8024},[76,49929,34119],{"class":86},[76,49931,133],{"class":82},[76,49933,3050],{"class":136},[76,49935,49936],{"class":78,"line":9683},[76,49937,2365],{"emptyLinePlaceholder":2364},[76,49939,49940],{"class":78,"line":9708},[76,49941,34132],{"class":146},[76,49943,49944],{"class":78,"line":9731},[76,49945,34137],{"class":146},[76,49947,49948],{"class":78,"line":9755},[76,49949,34142],{"class":146},[76,49951,49952,49954],{"class":78,"line":9760},[76,49953,34147],{"class":82},[76,49955,32853],{"class":86},[76,49957,49958],{"class":78,"line":9765},[76,49959,34154],{"class":146},[76,49961,49962,49964,49966,49968],{"class":78,"line":9770},[76,49963,3368],{"class":82},[76,49965,34161],{"class":86},[76,49967,26012],{"class":82},[76,49969,34166],{"class":86},[76,49971,49972,49974,49976],{"class":78,"line":9779},[76,49973,34171],{"class":86},[76,49975,133],{"class":82},[76,49977,34176],{"class":86},[76,49979,49980,49982,49984],{"class":78,"line":9784},[76,49981,34181],{"class":86},[76,49983,133],{"class":82},[76,49985,34186],{"class":86},[76,49987,49988],{"class":78,"line":9790},[76,49989,34191],{"class":146},[76,49991,49992],{"class":78,"line":9811},[76,49993,32844],{"class":86},[76,49995,49996],{"class":78,"line":9817},[76,49997,34200],{"class":146},[76,49999,50000,50002,50004],{"class":78,"line":9831},[76,50001,32629],{"class":86},[76,50003,133],{"class":82},[76,50005,34209],{"class":86},[76,50007,50008],{"class":78,"line":9837},[76,50009,34214],{"class":146},[76,50011,50012,50014,50016,50018,50020,50022,50024],{"class":78,"line":9864},[76,50013,32646],{"class":86},[76,50015,133],{"class":82},[76,50017,32651],{"class":86},[76,50019,32654],{"class":5183},[76,50021,133],{"class":82},[76,50023,305],{"class":136},[76,50025,93],{"class":86},[76,50027,50028],{"class":78,"line":9873},[76,50029,34235],{"class":146},[76,50031,50032],{"class":78,"line":9879},[76,50033,34240],{"class":146},[76,50035,50036],{"class":78,"line":9887},[76,50037,34245],{"class":146},[76,50039,50040,50042,50044,50046,50048],{"class":78,"line":9892},[76,50041,34250],{"class":86},[76,50043,9444],{"class":82},[76,50045,32756],{"class":86},[76,50047,2914],{"class":82},[76,50049,34259],{"class":86},[76,50051,50052],{"class":78,"line":16571},[76,50053,34264],{"class":146},[76,50055,50056,50058,50060,50062,50064],{"class":78,"line":16577},[76,50057,34269],{"class":86},[76,50059,9444],{"class":82},[76,50061,34274],{"class":86},[76,50063,279],{"class":136},[76,50065,93],{"class":86},[76,50067,50068],{"class":78,"line":16600},[76,50069,2365],{"emptyLinePlaceholder":2364},[76,50071,50072],{"class":78,"line":16606},[76,50073,34287],{"class":146},[76,50075,50076,50078,50080,50082,50084],{"class":78,"line":16629},[76,50077,34292],{"class":86},[76,50079,133],{"class":82},[76,50081,34297],{"class":86},[76,50083,672],{"class":82},[76,50085,34302],{"class":86},[76,50087,50088],{"class":78,"line":16643},[76,50089,34307],{"class":146},[76,50091,50092,50094,50096,50098],{"class":78,"line":16663},[76,50093,32420],{"class":136},[76,50095,87],{"class":86},[76,50097,34316],{"class":192},[76,50099,34319],{"class":86},[76,50101,50102],{"class":78,"line":16669},[76,50103,2365],{"emptyLinePlaceholder":2364},[76,50105,50106],{"class":78,"line":16680},[76,50107,34328],{"class":146},[76,50109,50110,50112,50114,50116,50118],{"class":78,"line":16703},[76,50111,1495],{"class":82},[76,50113,31189],{"class":136},[76,50115,2914],{"class":82},[76,50117,31194],{"class":192},[76,50119,3704],{"class":86},[76,50121,50122],{"class":78,"line":16725},[76,50123,34345],{"class":146},[76,50125,50126,50128,50130],{"class":78,"line":16730},[76,50127,31258],{"class":86},[76,50129,133],{"class":82},[76,50131,44520],{"class":86},[76,50133,50134],{"class":78,"line":16736},[76,50135,34358],{"class":146},[76,50137,50138],{"class":78,"line":16750},[76,50139,34363],{"class":146},[76,50141,50142,50144,50146],{"class":78,"line":16763},[76,50143,34368],{"class":86},[76,50145,34371],{"class":192},[76,50147,30466],{"class":86},[76,50149,50150],{"class":78,"line":16768},[76,50151,34378],{"class":146},[76,50153,50154,50156,50158],{"class":78,"line":16782},[76,50155,33991],{"class":86},[76,50157,133],{"class":82},[76,50159,34387],{"class":86},[76,50161,50162],{"class":78,"line":16787},[76,50163,34392],{"class":146},[76,50165,50166],{"class":78,"line":16793},[76,50167,34397],{"class":86},[76,50169,50170],{"class":78,"line":16798},[76,50171,2365],{"emptyLinePlaceholder":2364},[76,50173,50174],{"class":78,"line":16812},[76,50175,34406],{"class":146},[76,50177,50178],{"class":78,"line":16817},[76,50179,34411],{"class":146},[76,50181,50182,50184,50186,50188,50190,50192,50194],{"class":78,"line":16822},[76,50183,31206],{"class":86},[76,50185,133],{"class":82},[76,50187,31213],{"class":192},[76,50189,1668],{"class":82},[76,50191,31218],{"class":86},[76,50193,1665],{"class":82},[76,50195,34088],{"class":192},[76,50197,50198,50200,50202],{"class":78,"line":16836},[76,50199,31258],{"class":86},[76,50201,133],{"class":82},[76,50203,32258],{"class":86},[76,50205,50206],{"class":78,"line":16848},[76,50207,34440],{"class":146},[76,50209,50210],{"class":78,"line":16853},[76,50211,34445],{"class":146},[76,50213,50214,50216,50218,50220,50223,50225,50228],{"class":78,"line":16866},[76,50215,34450],{"class":86},[76,50217,133],{"class":82},[76,50219,978],{"class":86},[76,50221,50222],{"class":192},"'猫'",[76,50224,466],{"class":86},[76,50226,50227],{"class":192},"'狗'",[76,50229,33215],{"class":86},[76,50231,50232,50234],{"class":78,"line":16871},[76,50233,34147],{"class":82},[76,50235,32853],{"class":86},[76,50237,50238],{"class":78,"line":16876},[76,50239,34515],{"class":146},[76,50241,50242,50244,50246,50248],{"class":78,"line":16881},[76,50243,3368],{"class":82},[76,50245,34522],{"class":86},[76,50247,26012],{"class":82},[76,50249,34166],{"class":86},[76,50251,50252,50254,50256],{"class":78,"line":16894},[76,50253,32579],{"class":86},[76,50255,133],{"class":82},[76,50257,32584],{"class":86},[76,50259,50260,50262,50264],{"class":78,"line":16899},[76,50261,32594],{"class":86},[76,50263,133],{"class":82},[76,50265,32599],{"class":86},[76,50267,50268],{"class":78,"line":32602},[76,50269,2365],{"emptyLinePlaceholder":2364},[76,50271,50272],{"class":78,"line":32608},[76,50273,34551],{"class":146},[76,50275,50276],{"class":78,"line":32614},[76,50277,32844],{"class":86},[76,50279,50280],{"class":78,"line":32620},[76,50281,34560],{"class":146},[76,50283,50284,50286,50288],{"class":78,"line":32626},[76,50285,32629],{"class":86},[76,50287,133],{"class":82},[76,50289,32634],{"class":86},[76,50291,50292],{"class":78,"line":32637},[76,50293,34573],{"class":146},[76,50295,50296,50298,50300,50302,50304,50306,50308],{"class":78,"line":32643},[76,50297,32646],{"class":86},[76,50299,133],{"class":82},[76,50301,32651],{"class":86},[76,50303,32654],{"class":5183},[76,50305,133],{"class":82},[76,50307,305],{"class":136},[76,50309,93],{"class":86},[76,50311,50312],{"class":78,"line":32663},[76,50313,34594],{"class":146},[76,50315,50316,50318,50320],{"class":78,"line":32669},[76,50317,34599],{"class":86},[76,50319,133],{"class":82},[76,50321,34604],{"class":86},[76,50323,50324,50326,50328],{"class":78,"line":32680},[76,50325,34609],{"class":86},[76,50327,133],{"class":82},[76,50329,34614],{"class":86},[76,50331,50332,50334,50336,50338,50340,50342,50344,50346],{"class":78,"line":32686},[76,50333,34619],{"class":136},[76,50335,87],{"class":86},[76,50337,34624],{"class":192},[76,50339,34627],{"class":86},[76,50341,34630],{"class":192},[76,50343,466],{"class":86},[76,50345,34635],{"class":192},[76,50347,34638],{"class":86},[5092,50349,50350],{},"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":71,"searchDepth":96,"depth":96,"links":50352},[50353,50354,50355,50356],{"id":30560,"depth":1143,"text":30561},{"id":37808,"depth":1143,"text":37809},{"id":41241,"depth":1143,"text":41242},{"id":45250,"depth":1143,"text":45251},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30552,"description":23344},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50363,"title":50364,"body":50365,"description":23344,"extension":5123,"meta":50372,"navigation":2364,"path":50373,"seo":50374,"stem":50375,"__hash__":50376},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":9,"value":50366,"toc":50370},[50367],[12,50368,50364],{"id":50369},"_3yolo模型学习",{"title":71,"searchDepth":96,"depth":96,"links":50371},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50364,"description":23344},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50378,"title":50379,"body":50380,"description":50387,"extension":5123,"meta":50388,"navigation":2364,"path":50390,"seo":50391,"stem":50392,"__hash__":50393},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":9,"value":50381,"toc":50385},[50382],[21,50383,50384],{},"yolo模型还未补充",{"title":71,"searchDepth":96,"depth":96,"links":50386},[],"深度学习学习",{"category":50389},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50379,"description":50387},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50395,"title":50396,"body":50397,"description":23344,"extension":5123,"meta":50422,"navigation":2364,"path":50423,"seo":50424,"stem":50425,"__hash__":50426},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":9,"value":50398,"toc":50420},[50399,50402,50405,50410,50417],[12,50400,50396],{"id":50401},"_1工具",[21,50403,50404],{},"提示错误插件：有问题会提前报错",[21,50406,50407],{},[1426,50408],{"alt":71,"src":50409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[21,50411,50412],{},[326,50413,50416],{"href":50414,"rel":50415},"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",[23833],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[21,50418,50419],{},"alt键加上下箭头可以实现语句的移动",{"title":71,"searchDepth":96,"depth":96,"links":50421},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50396,"description":23344},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50428,"title":50429,"body":50430,"description":23344,"extension":5123,"meta":53294,"navigation":2364,"path":53295,"seo":53296,"stem":53297,"__hash__":53298},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":9,"value":50431,"toc":53245},[50432,50435,50439,50443,50448,50451,50456,50460,50467,50472,50479,50484,50491,50496,50500,50505,50508,50512,50517,50521,50526,50529,50532,50535,50538,50541,50544,50547,50550,50555,50560,50565,50569,50572,50575,50579,50584,50587,50595,50600,50617,50625,50630,50635,50640,50645,50650,50653,50658,50663,50667,50676,50681,50686,50690,50695,50698,50702,50707,50715,50720,50725,50728,50733,50738,50743,50746,50749,50752,50757,50762,50765,50770,50773,50778,50781,50784,50787,50792,50795,50798,50813,50818,50823,50828,50831,50834,50837,50851,50854,50859,50864,50867,50870,50873,50876,50879,50882,50885,50889,50893,50898,50902,50905,50910,50915,50918,50923,50926,50930,50935,50938,50941,50944,50947,50950,50953,50956,50959,50962,50966,50971,50976,50981,50984,50987,50991,50996,50999,51003,51006,51009,51014,51017,51020,51024,51028,51031,51036,51041,51044,51073,51078,51083,51088,51093,51097,51102,51106,51111,51114,51118,51122,51127,51131,51136,51141,51145,51150,51153,51155,51158,51163,51167,51172,51176,51180,51185,51190,51195,51200,51204,51209,51214,51219,51222,51225,51230,51233,51238,51243,51248,51253,51257,52064,52068,52411,52416,52419,52422,52425,52428,52431,52434,52437,52440,52442,52445,52447,52450,52454,52459,52462,52465,52468,52472,52477,52482,52502,52505,52509,52514,52519,52536,52540,52569,52573,52595,52597,52636,52644,52650,52654,52657,52660,52665,52670,52673,52676,52679,52684,52689,52692,52695,52698,52701,52704,52707,52710,52713,52716,52719,52722,52724,52727,52730,52733,52736,52739,52742,52745,52748,52752,52757,52760,52765,52768,52771,52774,52777,52780,52783,52786,52788,52791,52794,52797,52800,52803,52806,52810,52813,52822,52825,52830,52833,52838,52841,52844,52847,52850,52853,52856,52859,52863,52867,52870,52873,52878,52883,52888,52892,52897,52902,52905,52908,52911,52914,52917,52922,52925,52930,52932,52937,52940,52944,52949,52952,52955,52960,52964,52967,52972,52975,52978,53007,53012,53015,53018,53021,53024,53027,53031,53034,53120,53124,53127,53132,53137,53144,53147,53150,53153,53156,53159,53164,53169,53172,53175,53178,53181,53184,53187,53190,53193,53196,53198,53201,53205,53210,53215,53220,53223,53228,53233,53236,53239,53242],[12,50433,50429],{"id":50434},"_2基础语法",[16,50436,50438],{"id":50437},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[46,50440,50442],{"id":50441},"_211-js组成","2.1.1 js组成",[29,50444,50445],{},[32,50446,50447],{},"js是编程语言，html和css不是编程语言，是标记语言",[21,50449,50450],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[29,50452,50453],{"start":96},[32,50454,50455],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[46,50457,50459],{"id":50458},"_212-js书写位置","2.1.2 js书写位置",[29,50461,50462],{},[32,50463,50464],{},[237,50465,50466],{},"内部 JavaScript",[21,50468,50469],{},[1426,50470],{"alt":71,"src":50471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[29,50473,50474],{"start":96},[32,50475,50476],{},[237,50477,50478],{},"外部 JavaScript",[21,50480,50481],{},[1426,50482],{"alt":71,"src":50483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[29,50485,50486],{"start":1143},[32,50487,50488],{},[237,50489,50490],{},"内联 JavaScript",[21,50492,50493],{},[1426,50494],{"alt":71,"src":50495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[46,50497,50499],{"id":50498},"_213-javascript注释","2.1.3 JavaScript注释",[21,50501,50502],{},[1426,50503],{"alt":71,"src":50504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[21,50506,50507],{},"alt+shift+a一定要记住！",[46,50509,50511],{"id":50510},"_214-javascript结束符","2.1.4 JavaScript结束符",[21,50513,50514],{},[1426,50515],{"alt":71,"src":50516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[46,50518,50520],{"id":50519},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[29,50522,50523],{},[32,50524,50525],{},"输出语法：",[21,50527,50528],{},"①document.write('要出的内容')",[21,50530,50531],{},"向body内输出内容；",[21,50533,50534],{},"如果输出的内容写的是标签，也会被解析cheng",[21,50536,50537],{},"②alert('要出的内容')",[21,50539,50540],{},"页面弹出警告对话框",[21,50542,50543],{},"③console.log('控制台打印')",[21,50545,50546],{},"控制台输出语法，程序员调试使用",[21,50548,50549],{},"输入log就行，自动生成：",[21,50551,50552],{},[1426,50553],{"alt":71,"src":50554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[29,50556,50557],{"start":96},[32,50558,50559],{},"输入语法：",[21,50561,50562],{},[1426,50563],{"alt":71,"src":50564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[46,50566,50568],{"id":50567},"_2116-字面量","21.1.6 字面量",[21,50570,50571],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[21,50573,50574],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[16,50576,50578],{"id":50577},"_22-变量","2.2 变量",[29,50580,50581],{},[32,50582,50583],{},"变量声明",[21,50585,50586],{},"let 变量名",[1095,50588,50589,50592],{},[32,50590,50591],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[32,50593,50594],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[29,50596,50597],{"start":96},[32,50598,50599],{},"变量赋值",[66,50601,50605],{"className":50602,"code":50603,"language":50604,"meta":71,"style":71},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[73,50606,50607,50612],{"__ignoreMap":71},[76,50608,50609],{"class":78,"line":79},[76,50610,50611],{"class":86},"let age\n",[76,50613,50614],{"class":78,"line":96},[76,50615,50616],{"class":86},"age=18\n",[29,50618,50619,50622],{"start":1143},[32,50620,50621],{},"连这些（变量的初始化）：let age=18",[32,50623,50624],{},"更新变量",[21,50626,50627],{},[1426,50628],{"alt":71,"src":50629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[29,50631,50632],{"start":1164},[32,50633,50634],{},"声明多个变量",[21,50636,50637],{},[1426,50638],{"alt":71,"src":50639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[29,50641,50642],{"start":1178},[32,50643,50644],{},"变量命名规则与规范",[21,50646,50647],{},[1426,50648],{"alt":71,"src":50649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[21,50651,50652],{},"遵守小驼峰！",[29,50654,50655],{"start":1184},[32,50656,50657],{},"变量拓展-let和var的区别",[21,50659,50660],{},[1426,50661],{"alt":71,"src":50662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[16,50664,50666],{"id":50665},"_23-数组","2.3 数组",[66,50668,50670],{"className":50602,"code":50669,"language":50604,"meta":71,"style":71},"let arr = []\n",[73,50671,50672],{"__ignoreMap":71},[76,50673,50674],{"class":78,"line":79},[76,50675,50669],{"class":86},[21,50677,50678],{},[1426,50679],{"alt":71,"src":50680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[21,50682,50683],{},[1426,50684],{"alt":71,"src":50685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[16,50687,50689],{"id":50688},"_24-常量","2.4 常量",[21,50691,50692],{},[1426,50693],{"alt":71,"src":50694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[21,50696,50697],{},"const — 类似于 let ，但是变量的值无法被修改",[16,50699,50701],{"id":50700},"_25-数据类型","2.5 数据类型",[21,50703,50704],{},[1426,50705],{"alt":71,"src":50706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[29,50708,50709,50712],{},[32,50710,50711],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[32,50713,50714],{},"算数运算符：",[21,50716,50717],{},[1426,50718],{"alt":71,"src":50719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[29,50721,50722],{"start":1143},[32,50723,50724],{},"数字类型（Number）",[21,50726,50727],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[21,50729,50730],{},[1426,50731],{"alt":71,"src":50732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[29,50734,50735],{"start":1158},[32,50736,50737],{},"字符串类型（string）",[21,50739,50740],{},[1426,50741],{"alt":71,"src":50742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[21,50744,50745],{},"反引号也是可以使用的",[21,50747,50748],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[21,50750,50751],{},"例如：document.write(\"我今年\"+age+\"岁\")",[29,50753,50754],{"start":1164},[32,50755,50756],{},"模板字符串",[21,50758,50759],{},[1426,50760],{"alt":71,"src":50761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[21,50763,50764],{},"类似于python的字符串格式化",[29,50766,50767],{"start":1178},[32,50768,50769],{},"布尔类型",[21,50771,50772],{},"true 和 false",[29,50774,50775],{"start":1184},[32,50776,50777],{},"未定义类型（underfined）",[21,50779,50780],{},"表示没有赋值",[21,50782,50783],{},"未定义类型是比较特殊的类型，只有一个值undefined",[21,50785,50786],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[29,50788,50789],{"start":1275},[32,50790,50791],{},"null（空类型）",[21,50793,50794],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[21,50796,50797],{},"赋值了，但是内容为空",[66,50799,50801],{"className":50602,"code":50800,"language":50604,"meta":71,"style":71},"typeof null\n输出的是'object'，是一个对象数据类型\n",[73,50802,50803,50808],{"__ignoreMap":71},[76,50804,50805],{"class":78,"line":79},[76,50806,50807],{"class":86},"typeof null\n",[76,50809,50810],{"class":78,"line":96},[76,50811,50812],{"class":86},"输出的是'object'，是一个对象数据类型\n",[29,50814,50815],{"start":1281},[32,50816,50817],{},"控制台检测数据类型",[21,50819,50820],{},[1426,50821],{"alt":71,"src":50822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[29,50824,50825],{"start":1293},[32,50826,50827],{},"类型转换",[21,50829,50830],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[21,50832,50833],{},"转换方式：隐式转换和显示转换",[21,50835,50836],{},"①隐式转换",[1095,50838,50839,50842,50845,50848],{},[32,50840,50841],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[32,50843,50844],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[32,50846,50847],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[32,50849,50850],{},"任何数据和字符串相加结果都是字符串",[21,50852,50853],{},"②显示转换",[21,50855,50856],{},[1426,50857],{"alt":71,"src":50858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[21,50860,50861],{},[1426,50862],{"alt":71,"src":50863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[21,50865,50866],{},"在输入的时候要用好隐式转换，简单写起来",[21,50868,50869],{},"let num = +prompt(’请输入数字：‘)",[21,50871,50872],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[21,50874,50875],{},"console.log(parseInt('12.333px'))",[21,50877,50878],{},"输出为：12",[21,50880,50881],{},"console.log(parseInt('a'a'a12.333px'))",[21,50883,50884],{},"输出：NaN",[16,50886,50888],{"id":50887},"_26-运算符","2.6 运算符",[46,50890,50892],{"id":50891},"_261-赋值运算符","2.6.1 赋值运算符",[21,50894,50895],{},[1426,50896],{"alt":71,"src":50897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[46,50899,50901],{"id":50900},"_262-一元运算符","2.6.2 一元运算符",[21,50903,50904],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[21,50906,50907],{},[1426,50908],{"alt":71,"src":50909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[21,50911,50912],{},[1426,50913],{"alt":71,"src":50914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[21,50916,50917],{},"两者的区别：",[21,50919,50920],{},[1426,50921],{"alt":71,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[21,50924,50925],{},"前置先自加；后置后加，代码执行完之后再加",[46,50927,50929],{"id":50928},"_263-比较运算符","2.6.3 比较运算符",[21,50931,50932],{},[1426,50933],{"alt":71,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[21,50936,50937],{},"比较运算符也有隐式转换",[21,50939,50940],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[21,50942,50943],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[21,50945,50946],{},"要使用三等，开发的时候",[21,50948,50949],{},"NaN不等于任何人，包括它自己",[21,50951,50952],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[21,50954,50955],{},"7\u002F10=0.7",[21,50957,50958],{},"最后：0.5+0.2=0.7",[21,50960,50961],{},"字符串比较，比较的是字符对应的ASCII码",[46,50963,50965],{"id":50964},"_264-逻辑运算符","2.6.4 逻辑运算符",[21,50967,50968],{},[1426,50969],{"alt":71,"src":50970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[21,50972,50973],{},[1426,50974],{"alt":71,"src":50975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[21,50977,50978],{},[1426,50979],{"alt":71,"src":50980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[21,50982,50983],{},"上述题目选D",[21,50985,50986],{},"与真2假1；或真1假2",[46,50988,50990],{"id":50989},"_265-运算符优先级","2.6.5 运算符优先级",[21,50992,50993],{},[1426,50994],{"alt":71,"src":50995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[21,50997,50998],{},"先算逻辑与，后算逻辑或",[16,51000,51002],{"id":51001},"_27-语句","2.7 语句",[21,51004,51005],{},"表达式：是可以被求值的代码，会有结果给我们",[21,51007,51008],{},"语句：语句是可以被执行的代码，例如prompt()",[21,51010,51011],{},[1426,51012],{"alt":71,"src":51013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[21,51015,51016],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[21,51018,51019],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[46,51021,51023],{"id":51022},"_271-分支语句","2.7.1 分支语句",[21965,51025,51027],{"id":51026},"_2711-if分支语句","2.7.1.1 if分支语句",[21,51029,51030],{},"if语句单行简单的话，可以不写{}，写在一行就行",[29,51032,51033],{},[32,51034,51035],{},"单分支语句",[21,51037,51038],{},[1426,51039],{"alt":71,"src":51040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[21,51042,51043],{},"除了0，所有数字都为真",[66,51045,51047],{"className":50602,"code":51046,"language":50604,"meta":71,"style":71},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[73,51048,51049,51054,51059,51064,51068],{"__ignoreMap":71},[76,51050,51051],{"class":78,"line":79},[76,51052,51053],{"class":86},"if（0) {\n",[76,51055,51056],{"class":78,"line":96},[76,51057,51058],{"class":86},"    let a=1\n",[76,51060,51061],{"class":78,"line":1143},[76,51062,51063],{"class":86},"    alert(typeof a)\n",[76,51065,51066],{"class":78,"line":1158},[76,51067,1529],{"class":86},[76,51069,51070],{"class":78,"line":1164},[76,51071,51072],{"class":86},"不输出，括号为假\n",[29,51074,51075],{"start":96},[32,51076,51077],{},"双分支语句",[21,51079,51080],{},[1426,51081],{"alt":71,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[29,51084,51085],{"start":1143},[32,51086,51087],{},"多分支语句",[21,51089,51090],{},[1426,51091],{"alt":71,"src":51092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21965,51094,51096],{"id":51095},"_2712-三元运算符","2.7.1.2 三元运算符",[21,51098,51099],{},[1426,51100],{"alt":71,"src":51101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21965,51103,51105],{"id":51104},"_2713-switch语句","2.7.1.3 switch语句",[21,51107,51108],{},[1426,51109],{"alt":71,"src":51110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[21,51112,51113],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[46,51115,51117],{"id":51116},"_272-循环语句","2.7.2 循环语句",[21965,51119,51121],{"id":51120},"_2721-断点演示","2.7.2.1 断点演示",[21,51123,51124],{},[1426,51125],{"alt":71,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21965,51128,51130],{"id":51129},"_2722-while循环","2.7.2.2 while循环",[21,51132,51133],{},[1426,51134],{"alt":71,"src":51135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[21,51137,51138],{},[1426,51139],{"alt":71,"src":51140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21965,51142,51144],{"id":51143},"_2723-for循环","2.7.2.3 for循环",[21,51146,51147],{},[1426,51148],{"alt":71,"src":51149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[21,51151,51152],{},"for(;;) {",[21,51154,1034],{},[21,51156,51157],{},"表示无限循环",[21,51159,51160],{},[1426,51161],{"alt":71,"src":51162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21965,51164,51166],{"id":51165},"_2724-循环的退出","2.7.2.4 循环的退出",[21,51168,51169],{},[1426,51170],{"alt":71,"src":51171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[16,51173,51175],{"id":51174},"_28-数组","2.8 数组",[46,51177,51179],{"id":51178},"_281-基础认识","2.8.1 基础认识",[21,51181,51182],{},[1426,51183],{"alt":71,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[21,51186,51187],{},[1426,51188],{"alt":71,"src":51189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[21,51191,51192],{},[1426,51193],{"alt":71,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[21,51196,51197],{},[1426,51198],{"alt":71,"src":51199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[46,51201,51203],{"id":51202},"_282-操作数组","2.8.2 操作数组",[21,51205,51206],{},[1426,51207],{"alt":71,"src":51208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[29,51210,51211],{},[32,51212,51213],{},"添加元素",[21,51215,51216],{},[1426,51217],{"alt":71,"src":51218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[21,51220,51221],{},"console.log(arr.push('green'))",[21,51223,51224],{},"输出结果：为新数组的长度",[21,51226,51227],{},[1426,51228],{"alt":71,"src":51229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[21,51231,51232],{},"push用的非常多，一定要记住",[29,51234,51235],{},[32,51236,51237],{},"删除元素",[21,51239,51240],{},[1426,51241],{"alt":71,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[21,51244,51245],{},[1426,51246],{"alt":71,"src":51247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[21,51249,51250],{},[1426,51251],{"alt":71,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[46,51254,51256],{"id":51255},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[66,51258,51260],{"className":50602,"code":51259,"language":50604,"meta":71,"style":71},"\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",[73,51261,51262,51277,51293,51297,51306,51324,51348,51370,51384,51392,51399,51411,51422,51426,51430,51437,51449,51464,51477,51496,51513,51528,51540,51552,51564,51568,51572,51583,51593,51605,51617,51629,51640,51644,51648,51660,51664,51678,51682,51686,51697,51711,51723,51737,51741,51750,51759,51763,51772,51776,51785,51790,51795,51808,51836,51841,51846,51871,51876,51880,51885,51890,51905,51909,51914,51944,51956,51972,51988,52002,52007,52014,52018,52023,52036,52044,52052,52056],{"__ignoreMap":71},[76,51263,51264,51267,51271,51274],{"class":78,"line":79},[76,51265,51266],{"class":86},"\u003C!",[76,51268,51270],{"class":51269},"s9eBZ","DOCTYPE",[76,51272,51273],{"class":1927}," html",[76,51275,51276],{"class":86},">\n",[76,51278,51279,51281,51283,51286,51288,51291],{"class":78,"line":96},[76,51280,998],{"class":86},[76,51282,50604],{"class":51269},[76,51284,51285],{"class":1927}," lang",[76,51287,133],{"class":86},[76,51289,51290],{"class":192},"\"en\"",[76,51292,51276],{"class":86},[76,51294,51295],{"class":78,"line":1143},[76,51296,2365],{"emptyLinePlaceholder":2364},[76,51298,51299,51301,51304],{"class":78,"line":1158},[76,51300,998],{"class":86},[76,51302,51303],{"class":51269},"head",[76,51305,51276],{"class":86},[76,51307,51308,51311,51314,51317,51319,51322],{"class":78,"line":1164},[76,51309,51310],{"class":86},"    \u003C",[76,51312,51313],{"class":51269},"meta",[76,51315,51316],{"class":1927}," charset",[76,51318,133],{"class":86},[76,51320,51321],{"class":192},"\"UTF-8\"",[76,51323,51276],{"class":86},[76,51325,51326,51328,51330,51333,51335,51338,51341,51343,51346],{"class":78,"line":1178},[76,51327,51310],{"class":86},[76,51329,51313],{"class":51269},[76,51331,51332],{"class":1927}," http-equiv",[76,51334,133],{"class":86},[76,51336,51337],{"class":192},"\"X-UA-Compatible\"",[76,51339,51340],{"class":1927}," content",[76,51342,133],{"class":86},[76,51344,51345],{"class":192},"\"IE=edge\"",[76,51347,51276],{"class":86},[76,51349,51350,51352,51354,51356,51358,51361,51363,51365,51368],{"class":78,"line":1184},[76,51351,51310],{"class":86},[76,51353,51313],{"class":51269},[76,51355,14887],{"class":1927},[76,51357,133],{"class":86},[76,51359,51360],{"class":192},"\"viewport\"",[76,51362,51340],{"class":1927},[76,51364,133],{"class":86},[76,51366,51367],{"class":192},"\"width=device-width, initial-scale=1.0\"",[76,51369,51276],{"class":86},[76,51371,51372,51374,51377,51380,51382],{"class":78,"line":1275},[76,51373,51310],{"class":86},[76,51375,51376],{"class":51269},"title",[76,51378,51379],{"class":86},">Document\u003C\u002F",[76,51381,51376],{"class":51269},[76,51383,51276],{"class":86},[76,51385,51386,51388,51390],{"class":78,"line":1281},[76,51387,51310],{"class":86},[76,51389,5092],{"class":51269},[76,51391,51276],{"class":86},[76,51393,51394,51397],{"class":78,"line":1293},[76,51395,51396],{"class":51269},"        *",[76,51398,15539],{"class":86},[76,51400,51401,51404,51407,51409],{"class":78,"line":1576},[76,51402,51403],{"class":136},"            margin",[76,51405,51406],{"class":86},": ",[76,51408,279],{"class":136},[76,51410,1254],{"class":86},[76,51412,51413,51416,51418,51420],{"class":78,"line":1581},[76,51414,51415],{"class":136},"            padding",[76,51417,51406],{"class":86},[76,51419,279],{"class":136},[76,51421,1254],{"class":86},[76,51423,51424],{"class":78,"line":1587},[76,51425,2494],{"class":86},[76,51427,51428],{"class":78,"line":1592},[76,51429,2365],{"emptyLinePlaceholder":2364},[76,51431,51432,51435],{"class":78,"line":1606},[76,51433,51434],{"class":1927},"        .box",[76,51436,15539],{"class":86},[76,51438,51439,51442,51444,51447],{"class":78,"line":1611},[76,51440,51441],{"class":136},"            display",[76,51443,51406],{"class":86},[76,51445,51446],{"class":136},"flex",[76,51448,1254],{"class":86},[76,51450,51451,51454,51456,51459,51462],{"class":78,"line":1617},[76,51452,51453],{"class":136},"            width",[76,51455,51406],{"class":86},[76,51457,51458],{"class":136},"700",[76,51460,51461],{"class":82},"px",[76,51463,1254],{"class":86},[76,51465,51466,51469,51471,51473,51475],{"class":78,"line":1638},[76,51467,51468],{"class":136},"            height",[76,51470,51406],{"class":86},[76,51472,3938],{"class":136},[76,51474,51461],{"class":82},[76,51476,1254],{"class":86},[76,51478,51479,51482,51484,51486,51488,51491,51494],{"class":78,"line":1643},[76,51480,51481],{"class":136},"            border-left",[76,51483,51406],{"class":86},[76,51485,305],{"class":136},[76,51487,51461],{"class":82},[76,51489,51490],{"class":136}," solid",[76,51492,51493],{"class":136}," pink",[76,51495,1254],{"class":86},[76,51497,51498,51501,51503,51505,51507,51509,51511],{"class":78,"line":1657},[76,51499,51500],{"class":136},"            border-bottom",[76,51502,51406],{"class":86},[76,51504,305],{"class":136},[76,51506,51461],{"class":82},[76,51508,51490],{"class":136},[76,51510,51493],{"class":136},[76,51512,1254],{"class":86},[76,51514,51515,51517,51519,51521,51523,51526],{"class":78,"line":1662},[76,51516,51403],{"class":136},[76,51518,51406],{"class":86},[76,51520,744],{"class":136},[76,51522,51461],{"class":82},[76,51524,51525],{"class":136}," auto",[76,51527,1254],{"class":86},[76,51529,51530,51533,51535,51538],{"class":78,"line":1691},[76,51531,51532],{"class":136},"            justify-content",[76,51534,51406],{"class":86},[76,51536,51537],{"class":136},"space-around",[76,51539,1254],{"class":86},[76,51541,51542,51545,51547,51550],{"class":78,"line":1696},[76,51543,51544],{"class":136},"            align-items",[76,51546,51406],{"class":86},[76,51548,51549],{"class":136},"flex-end",[76,51551,1254],{"class":86},[76,51553,51554,51557,51559,51562],{"class":78,"line":1713},[76,51555,51556],{"class":136},"            text-align",[76,51558,51406],{"class":86},[76,51560,51561],{"class":136},"center",[76,51563,1254],{"class":86},[76,51565,51566],{"class":78,"line":1718},[76,51567,2494],{"class":86},[76,51569,51570],{"class":78,"line":1723},[76,51571,2365],{"emptyLinePlaceholder":2364},[76,51573,51574,51576,51578,51581],{"class":78,"line":1728},[76,51575,51434],{"class":1927},[76,51577,1048],{"class":82},[76,51579,51580],{"class":51269},"div",[76,51582,15539],{"class":86},[76,51584,51585,51587,51589,51591],{"class":78,"line":1742},[76,51586,51441],{"class":136},[76,51588,51406],{"class":86},[76,51590,51446],{"class":136},[76,51592,1254],{"class":86},[76,51594,51595,51597,51599,51601,51603],{"class":78,"line":1747},[76,51596,51453],{"class":136},[76,51598,51406],{"class":86},[76,51600,744],{"class":136},[76,51602,51461],{"class":82},[76,51604,1254],{"class":86},[76,51606,51607,51610,51612,51615],{"class":78,"line":2542},[76,51608,51609],{"class":136},"            background-color",[76,51611,51406],{"class":86},[76,51613,51614],{"class":136},"pink",[76,51616,1254],{"class":86},[76,51618,51619,51622,51624,51627],{"class":78,"line":2556},[76,51620,51621],{"class":136},"            flex-direction",[76,51623,51406],{"class":86},[76,51625,51626],{"class":136},"column",[76,51628,1254],{"class":86},[76,51630,51631,51633,51635,51638],{"class":78,"line":2564},[76,51632,51532],{"class":136},[76,51634,51406],{"class":86},[76,51636,51637],{"class":136},"space-between",[76,51639,1254],{"class":86},[76,51641,51642],{"class":78,"line":2569},[76,51643,2494],{"class":86},[76,51645,51646],{"class":78,"line":2575},[76,51647,2365],{"emptyLinePlaceholder":2364},[76,51649,51650,51652,51655,51658],{"class":78,"line":2581},[76,51651,51434],{"class":1927},[76,51653,51654],{"class":51269}," div",[76,51656,51657],{"class":51269}," span",[76,51659,15539],{"class":86},[76,51661,51662],{"class":78,"line":2586},[76,51663,2365],{"emptyLinePlaceholder":2364},[76,51665,51666,51669,51671,51674,51676],{"class":78,"line":7915},[76,51667,51668],{"class":136},"            margin-top",[76,51670,51406],{"class":86},[76,51672,51673],{"class":136},"-20",[76,51675,51461],{"class":82},[76,51677,1254],{"class":86},[76,51679,51680],{"class":78,"line":7939},[76,51681,2494],{"class":86},[76,51683,51684],{"class":78,"line":7944},[76,51685,2365],{"emptyLinePlaceholder":2364},[76,51687,51688,51690,51692,51695],{"class":78,"line":7950},[76,51689,51434],{"class":1927},[76,51691,51654],{"class":51269},[76,51693,51694],{"class":51269}," h4",[76,51696,15539],{"class":86},[76,51698,51699,51702,51704,51707,51709],{"class":78,"line":7977},[76,51700,51701],{"class":136},"            margin-bottom",[76,51703,51406],{"class":86},[76,51705,51706],{"class":136},"-35",[76,51708,51461],{"class":82},[76,51710,1254],{"class":86},[76,51712,51713,51715,51717,51719,51721],{"class":78,"line":7982},[76,51714,51453],{"class":136},[76,51716,51406],{"class":86},[76,51718,444],{"class":136},[76,51720,51461],{"class":82},[76,51722,1254],{"class":86},[76,51724,51725,51728,51730,51733,51735],{"class":78,"line":7988},[76,51726,51727],{"class":136},"            margin-left",[76,51729,51406],{"class":86},[76,51731,51732],{"class":136},"-10",[76,51734,51461],{"class":82},[76,51736,1254],{"class":86},[76,51738,51739],{"class":78,"line":8000},[76,51740,2494],{"class":86},[76,51742,51743,51746,51748],{"class":78,"line":8012},[76,51744,51745],{"class":86},"    \u003C\u002F",[76,51747,5092],{"class":51269},[76,51749,51276],{"class":86},[76,51751,51752,51755,51757],{"class":78,"line":8024},[76,51753,51754],{"class":86},"\u003C\u002F",[76,51756,51303],{"class":51269},[76,51758,51276],{"class":86},[76,51760,51761],{"class":78,"line":9683},[76,51762,2365],{"emptyLinePlaceholder":2364},[76,51764,51765,51767,51770],{"class":78,"line":9708},[76,51766,998],{"class":86},[76,51768,51769],{"class":51269},"body",[76,51771,51276],{"class":86},[76,51773,51774],{"class":78,"line":9731},[76,51775,2365],{"emptyLinePlaceholder":2364},[76,51777,51778,51780,51783],{"class":78,"line":9755},[76,51779,51310],{"class":86},[76,51781,51782],{"class":51269},"script",[76,51784,51276],{"class":86},[76,51786,51787],{"class":78,"line":9760},[76,51788,51789],{"class":146},"        \u002F\u002F 1. 四次弹框效果\n",[76,51791,51792],{"class":78,"line":9765},[76,51793,51794],{"class":146},"        \u002F\u002F 声明一个新的数组\n",[76,51796,51797,51800,51803,51805],{"class":78,"line":9770},[76,51798,51799],{"class":82},"        let",[76,51801,51802],{"class":86}," arr ",[76,51804,133],{"class":82},[76,51806,51807],{"class":86}," []\n",[76,51809,51810,51812,51814,51817,51819,51821,51823,51825,51827,51830,51832,51834],{"class":78,"line":9779},[76,51811,3368],{"class":82},[76,51813,1622],{"class":86},[76,51815,51816],{"class":82},"let",[76,51818,9405],{"class":86},[76,51820,133],{"class":82},[76,51822,25087],{"class":136},[76,51824,9412],{"class":86},[76,51826,1552],{"class":82},[76,51828,51829],{"class":136}," 4",[76,51831,3179],{"class":86},[76,51833,2256],{"class":82},[76,51835,12409],{"class":86},[76,51837,51838],{"class":78,"line":9784},[76,51839,51840],{"class":146},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[76,51842,51843],{"class":78,"line":9790},[76,51844,51845],{"class":146},"            \u002F\u002F arr.push(num)\n",[76,51847,51848,51851,51854,51856,51859,51861,51864,51866,51869],{"class":78,"line":9811},[76,51849,51850],{"class":86},"            arr.",[76,51852,51853],{"class":1927},"push",[76,51855,87],{"class":86},[76,51857,51858],{"class":1927},"prompt",[76,51860,87],{"class":86},[76,51862,51863],{"class":192},"`请输入第${",[76,51865,529],{"class":86},[76,51867,51868],{"class":192},"}季度的数据:`",[76,51870,30466],{"class":86},[76,51872,51873],{"class":78,"line":9817},[76,51874,51875],{"class":146},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[76,51877,51878],{"class":78,"line":9831},[76,51879,2494],{"class":86},[76,51881,51882],{"class":78,"line":9837},[76,51883,51884],{"class":146},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[76,51886,51887],{"class":78,"line":9864},[76,51888,51889],{"class":146},"        \u002F\u002F 盒子开头\n",[76,51891,51892,51895,51898,51900,51903],{"class":78,"line":9873},[76,51893,51894],{"class":86},"        document.",[76,51896,51897],{"class":1927},"write",[76,51899,87],{"class":86},[76,51901,51902],{"class":192},"` \u003Cdiv class=\"box\">`",[76,51904,93],{"class":86},[76,51906,51907],{"class":78,"line":9879},[76,51908,2365],{"emptyLinePlaceholder":2364},[76,51910,51911],{"class":78,"line":9887},[76,51912,51913],{"class":146},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[76,51915,51916,51918,51920,51922,51924,51926,51928,51930,51932,51935,51938,51940,51942],{"class":78,"line":9892},[76,51917,3368],{"class":82},[76,51919,1622],{"class":86},[76,51921,51816],{"class":82},[76,51923,9405],{"class":86},[76,51925,133],{"class":82},[76,51927,4058],{"class":136},[76,51929,9412],{"class":86},[76,51931,998],{"class":82},[76,51933,51934],{"class":86}," arr.",[76,51936,51937],{"class":136},"length",[76,51939,3179],{"class":86},[76,51941,2256],{"class":82},[76,51943,12409],{"class":86},[76,51945,51946,51949,51951,51953],{"class":78,"line":16571},[76,51947,51948],{"class":86},"            document.",[76,51950,51897],{"class":1927},[76,51952,87],{"class":86},[76,51954,51955],{"class":192},"`\n",[76,51957,51958,51961,51963,51965,51967,51969],{"class":78,"line":16577},[76,51959,51960],{"class":192},"              \u003Cdiv style=\"height: ${",[76,51962,3845],{"class":86},[76,51964,978],{"class":192},[76,51966,529],{"class":86},[76,51968,1028],{"class":192},[76,51970,51971],{"class":192},"}px;\">\n",[76,51973,51974,51977,51979,51981,51983,51985],{"class":78,"line":16600},[76,51975,51976],{"class":192},"                \u003Cspan>${",[76,51978,3845],{"class":86},[76,51980,978],{"class":192},[76,51982,529],{"class":86},[76,51984,1028],{"class":192},[76,51986,51987],{"class":192},"}\u003C\u002Fspan>\n",[76,51989,51990,51993,51995,51997,51999],{"class":78,"line":16606},[76,51991,51992],{"class":192},"                \u003Ch4>第${",[76,51994,529],{"class":86},[76,51996,45535],{"class":82},[76,51998,25087],{"class":136},[76,52000,52001],{"class":192},"}季度\u003C\u002Fh4>\n",[76,52003,52004],{"class":78,"line":16629},[76,52005,52006],{"class":192},"              \u003C\u002Fdiv>          \n",[76,52008,52009,52012],{"class":78,"line":16643},[76,52010,52011],{"class":192},"            `",[76,52013,93],{"class":86},[76,52015,52016],{"class":78,"line":16663},[76,52017,2494],{"class":86},[76,52019,52020],{"class":78,"line":16669},[76,52021,52022],{"class":146},"        \u002F\u002F 盒子结尾\n",[76,52024,52025,52027,52029,52031,52034],{"class":78,"line":16680},[76,52026,51894],{"class":86},[76,52028,51897],{"class":1927},[76,52030,87],{"class":86},[76,52032,52033],{"class":192},"` \u003C\u002Fdiv>`",[76,52035,93],{"class":86},[76,52037,52038,52040,52042],{"class":78,"line":16703},[76,52039,51745],{"class":86},[76,52041,51782],{"class":51269},[76,52043,51276],{"class":86},[76,52045,52046,52048,52050],{"class":78,"line":16725},[76,52047,51754],{"class":86},[76,52049,51769],{"class":51269},[76,52051,51276],{"class":86},[76,52053,52054],{"class":78,"line":16730},[76,52055,2365],{"emptyLinePlaceholder":2364},[76,52057,52058,52060,52062],{"class":78,"line":16736},[76,52059,51754],{"class":86},[76,52061,50604],{"class":51269},[76,52063,51276],{"class":86},[46,52065,52067],{"id":52066},"_284-冒泡排序","2.8.4 冒泡排序",[66,52069,52071],{"className":50602,"code":52070,"language":50604,"meta":71,"style":71},"\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",[73,52072,52073,52083,52097,52101,52109,52124,52144,52156,52164,52168,52176,52184,52216,52249,52286,52291,52310,52315,52328,52343,52359,52363,52368,52372,52382,52391,52399,52403],{"__ignoreMap":71},[76,52074,52075,52077,52079,52081],{"class":78,"line":79},[76,52076,51266],{"class":86},[76,52078,51270],{"class":51269},[76,52080,51273],{"class":1927},[76,52082,51276],{"class":86},[76,52084,52085,52087,52089,52091,52093,52095],{"class":78,"line":96},[76,52086,998],{"class":86},[76,52088,50604],{"class":51269},[76,52090,51285],{"class":1927},[76,52092,133],{"class":86},[76,52094,51290],{"class":192},[76,52096,51276],{"class":86},[76,52098,52099],{"class":78,"line":1143},[76,52100,2365],{"emptyLinePlaceholder":2364},[76,52102,52103,52105,52107],{"class":78,"line":1158},[76,52104,998],{"class":86},[76,52106,51303],{"class":51269},[76,52108,51276],{"class":86},[76,52110,52111,52114,52116,52118,52120,52122],{"class":78,"line":1164},[76,52112,52113],{"class":86},"  \u003C",[76,52115,51313],{"class":51269},[76,52117,51316],{"class":1927},[76,52119,133],{"class":86},[76,52121,51321],{"class":192},[76,52123,51276],{"class":86},[76,52125,52126,52128,52130,52132,52134,52136,52138,52140,52142],{"class":78,"line":1178},[76,52127,52113],{"class":86},[76,52129,51313],{"class":51269},[76,52131,14887],{"class":1927},[76,52133,133],{"class":86},[76,52135,51360],{"class":192},[76,52137,51340],{"class":1927},[76,52139,133],{"class":86},[76,52141,51367],{"class":192},[76,52143,51276],{"class":86},[76,52145,52146,52148,52150,52152,52154],{"class":78,"line":1184},[76,52147,52113],{"class":86},[76,52149,51376],{"class":51269},[76,52151,51379],{"class":86},[76,52153,51376],{"class":51269},[76,52155,51276],{"class":86},[76,52157,52158,52160,52162],{"class":78,"line":1275},[76,52159,51754],{"class":86},[76,52161,51303],{"class":51269},[76,52163,51276],{"class":86},[76,52165,52166],{"class":78,"line":1281},[76,52167,2365],{"emptyLinePlaceholder":2364},[76,52169,52170,52172,52174],{"class":78,"line":1293},[76,52171,998],{"class":86},[76,52173,51769],{"class":51269},[76,52175,51276],{"class":86},[76,52177,52178,52180,52182],{"class":78,"line":1576},[76,52179,52113],{"class":86},[76,52181,51782],{"class":51269},[76,52183,51276],{"class":86},[76,52185,52186,52189,52191,52193,52196,52198,52200,52202,52204,52206,52208,52210,52212,52214],{"class":78,"line":1581},[76,52187,52188],{"class":82},"    let",[76,52190,51802],{"class":86},[76,52192,133],{"class":82},[76,52194,52195],{"class":86}," [",[76,52197,407],{"class":136},[76,52199,12402],{"class":86},[76,52201,381],{"class":136},[76,52203,12402],{"class":86},[76,52205,159],{"class":136},[76,52207,12402],{"class":86},[76,52209,165],{"class":136},[76,52211,12402],{"class":86},[76,52213,305],{"class":136},[76,52215,33215],{"class":86},[76,52217,52218,52220,52222,52224,52226,52228,52230,52232,52234,52236,52238,52241,52243,52245,52247],{"class":78,"line":1587},[76,52219,3166],{"class":82},[76,52221,1622],{"class":86},[76,52223,51816],{"class":82},[76,52225,9405],{"class":86},[76,52227,133],{"class":82},[76,52229,4058],{"class":136},[76,52231,9412],{"class":86},[76,52233,998],{"class":82},[76,52235,51934],{"class":86},[76,52237,51937],{"class":136},[76,52239,52240],{"class":82}," -",[76,52242,25087],{"class":136},[76,52244,3179],{"class":86},[76,52246,2256],{"class":82},[76,52248,12409],{"class":86},[76,52250,52251,52254,52256,52258,52260,52262,52264,52266,52268,52270,52272,52274,52276,52278,52280,52282,52284],{"class":78,"line":1592},[76,52252,52253],{"class":82},"      for",[76,52255,1622],{"class":86},[76,52257,51816],{"class":82},[76,52259,9467],{"class":86},[76,52261,133],{"class":82},[76,52263,4058],{"class":136},[76,52265,9474],{"class":86},[76,52267,998],{"class":82},[76,52269,51934],{"class":86},[76,52271,51937],{"class":136},[76,52273,52240],{"class":82},[76,52275,9405],{"class":86},[76,52277,620],{"class":82},[76,52279,25087],{"class":136},[76,52281,9481],{"class":86},[76,52283,2256],{"class":82},[76,52285,12409],{"class":86},[76,52287,52288],{"class":78,"line":1606},[76,52289,52290],{"class":146},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[76,52292,52293,52295,52298,52300,52303,52305,52307],{"class":78,"line":1611},[76,52294,2462],{"class":82},[76,52296,52297],{"class":86}," (arr[j] ",[76,52299,1048],{"class":82},[76,52301,52302],{"class":86}," arr[j ",[76,52304,569],{"class":82},[76,52306,25087],{"class":136},[76,52308,52309],{"class":86},"]) {\n",[76,52311,52312],{"class":78,"line":1617},[76,52313,52314],{"class":146},"          \u002F\u002F 交换两个变量\n",[76,52316,52317,52320,52323,52325],{"class":78,"line":1638},[76,52318,52319],{"class":82},"          let",[76,52321,52322],{"class":86}," tmp ",[76,52324,133],{"class":82},[76,52326,52327],{"class":86}," arr[j]\n",[76,52329,52330,52333,52335,52337,52339,52341],{"class":78,"line":1643},[76,52331,52332],{"class":86},"          arr[j] ",[76,52334,133],{"class":82},[76,52336,52302],{"class":86},[76,52338,569],{"class":82},[76,52340,25087],{"class":136},[76,52342,33215],{"class":86},[76,52344,52345,52348,52350,52352,52354,52356],{"class":78,"line":1657},[76,52346,52347],{"class":86},"          arr[j ",[76,52349,569],{"class":82},[76,52351,25087],{"class":136},[76,52353,4408],{"class":86},[76,52355,133],{"class":82},[76,52357,52358],{"class":86}," tmp\n",[76,52360,52361],{"class":78,"line":1662},[76,52362,2494],{"class":86},[76,52364,52365],{"class":78,"line":1691},[76,52366,52367],{"class":86},"      }\n",[76,52369,52370],{"class":78,"line":1696},[76,52371,2151],{"class":86},[76,52373,52374,52377,52379],{"class":78,"line":1713},[76,52375,52376],{"class":86},"    document.",[76,52378,51897],{"class":1927},[76,52380,52381],{"class":86},"(arr)\n",[76,52383,52384,52387,52389],{"class":78,"line":1718},[76,52385,52386],{"class":86},"  \u003C\u002F",[76,52388,51782],{"class":51269},[76,52390,51276],{"class":86},[76,52392,52393,52395,52397],{"class":78,"line":1723},[76,52394,51754],{"class":86},[76,52396,51769],{"class":51269},[76,52398,51276],{"class":86},[76,52400,52401],{"class":78,"line":1728},[76,52402,2365],{"emptyLinePlaceholder":2364},[76,52404,52405,52407,52409],{"class":78,"line":1742},[76,52406,51754],{"class":86},[76,52408,50604],{"class":51269},[76,52410,51276],{"class":86},[21,52412,52413],{},[1426,52414],{"alt":71,"src":52415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[21,52417,52418],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[21,52420,52421],{},"let arr = [4, 2, 5, 1, 3]",[21,52423,52424],{},"\u002F\u002F 1.升序排列写法",[21,52426,52427],{},"arr.sort(function (a, b) {",[21,52429,52430],{},"return a - b",[21,52432,52433],{},"})",[21,52435,52436],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[21,52438,52439],{},"\u002F\u002F 降序排列写法",[21,52441,52427],{},[21,52443,52444],{},"return b - a",[21,52446,52433],{},[21,52448,52449],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[16,52451,52453],{"id":52452},"_29-函数","2.9 函数",[21,52455,52456],{},[1426,52457],{"alt":71,"src":52458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[21,52460,52461],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[21,52463,52464],{},"函数的声明用function",[21,52466,52467],{},"函数里边可以嵌套函数",[46,52469,52471],{"id":52470},"_291-函数传参","2.9.1 函数传参",[21,52473,52474],{},[1426,52475],{"alt":71,"src":52476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[21,52478,52479],{},[1426,52480],{"alt":71,"src":52481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1095,52483,52484,52487,52490,52493,52496,52499],{},[32,52485,52486],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[32,52488,52489],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[32,52491,52492],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[32,52494,52495],{},"开发中尽量保持形参和实参个数一致",[32,52497,52498],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[32,52500,52501],{},"形参只在函数中有用，所以不需要进行声明这个变量",[21,52503,52504],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[46,52506,52508],{"id":52507},"_292-函数的返回值","2.9.2 函数的返回值",[21,52510,52511],{},[1426,52512],{"alt":71,"src":52513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[21,52515,52516],{},[1426,52517],{"alt":71,"src":52518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1095,52520,52521,52524,52527,52530,52533],{},[32,52522,52523],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[32,52525,52526],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[32,52528,52529],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[32,52531,52532],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[32,52534,52535],{},"断点调试:进入函数内部看执行过程F11",[46,52537,52539],{"id":52538},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[66,52541,52543],{"className":50602,"code":52542,"language":50604,"meta":71,"style":71},"    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",[73,52544,52545,52550,52555,52559,52564],{"__ignoreMap":71},[76,52546,52547],{"class":78,"line":79},[76,52548,52549],{"class":86},"    function fn(a, b) {\n",[76,52551,52552],{"class":78,"line":96},[76,52553,52554],{"class":86},"      console.log(a + b);\n",[76,52556,52557],{"class":78,"line":1143},[76,52558,2151],{"class":86},[76,52560,52561],{"class":78,"line":1158},[76,52562,52563],{"class":86},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[76,52565,52566],{"class":78,"line":1164},[76,52567,52568],{"class":86},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[46,52570,52572],{"id":52571},"_294-作用域","2.9.4 作用域",[1095,52574,52575,52581,52586,52589,52592],{},[32,52576,52577,52578],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[237,52579,52580],{},"作用域",[32,52582,52583],{},[237,52584,52585],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[32,52587,52588],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[32,52590,52591],{},"函数内部可以直接所使用全局变量",[32,52593,52594],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[21,52596,14600],{},[66,52598,52600],{"className":50602,"code":52599,"language":50604,"meta":71,"style":71},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[73,52601,52602,52607,52612,52616,52621,52626,52631],{"__ignoreMap":71},[76,52603,52604],{"class":78,"line":79},[76,52605,52606],{"class":86},"    function fun() {\n",[76,52608,52609],{"class":78,"line":96},[76,52610,52611],{"class":86},"      num = 10\n",[76,52613,52614],{"class":78,"line":1143},[76,52615,2151],{"class":86},[76,52617,52618],{"class":78,"line":1158},[76,52619,52620],{"class":86},"    fun()\n",[76,52622,52623],{"class":78,"line":1164},[76,52624,52625],{"class":86},"    console.log(num)\n",[76,52627,52628],{"class":78,"line":1178},[76,52629,52630],{"class":86},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[76,52632,52633],{"class":78,"line":1184},[76,52634,52635],{"class":86},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1095,52637,52638,52641],{},[32,52639,52640],{},"函数内部的形参可以看做是局部变量",[32,52642,52643],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[21,52645,52646,52647],{},"变量访问原则： ",[237,52648,52649],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[46,52651,52653],{"id":52652},"_295-匿名函数","2.9.5 匿名函数",[21,52655,52656],{},"函数可以分为具名函数和匿名函数",[21,52658,52659],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[29,52661,52662],{},[32,52663,52664],{},"函数表达式",[21,52666,52667],{},[1426,52668],{"alt":71,"src":52669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[21,52671,52672],{},"里边也可以写参数",[21,52674,52675],{},"具名函数调用位置可以随意调整；",[21,52677,52678],{},"匿名函数函数表达式形式只能在声明后才可以使用",[29,52680,52681],{"start":96},[32,52682,52683],{},"立即执行函数",[21,52685,52686],{},[1426,52687],{"alt":71,"src":52688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[21,52690,52691],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[21,52693,52694],{},"写法：两个小括号，然后在第一个小括号中写function",[21,52696,52697],{},"(function () {})();",[21,52699,52700],{},"不要落下最后的;",[21,52702,52703],{},"立即执行函数必须要加;",[21,52705,52706],{},"分号写前写后都没问题",[21,52708,52709],{},"写前：",[21,52711,52712],{},"(function() {})()",[21,52714,52715],{},";(function () {})();",[21,52717,52718],{},"写后:",[21,52720,52721],{},"(function() {})();",[21,52723,52697],{},[21,52725,52726],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[21,52728,52729],{},"还有一种写法：",[21,52731,52732],{},"(function(){}());",[21,52734,52735],{},"或者:",[21,52737,52738],{},"!function(){}();",[21,52740,52741],{},"立即执行函数有时候也是可以加名字的：",[21,52743,52744],{},"(function flexible(window,document) {}(window,document));",[21,52746,52747],{},"省一些调用方法",[46,52749,52751],{"id":52750},"_296-逻辑中断","2.9.6 逻辑中断!!!",[21,52753,52754],{},[1426,52755],{"alt":71,"src":52756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[21,52758,52759],{},"这样就不用非得给x,y初始化了",[21,52761,52762],{},[1426,52763],{"alt":71,"src":52764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[21,52766,52767],{},"代码执行时先看左边",[21,52769,52770],{},"例如：console.log(false && 3+5)",[21,52772,52773],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[21,52775,52776],{},"&&都是真时，就返回最后一个真值",[21,52778,52779],{},"console.log(11 && 22)",[21,52781,52782],{},"输出22",[21,52784,52785],{},"逻辑与：遇真则真",[21,52787,14600],{},[21,52789,52790],{},"let age=1",[21,52792,52793],{},"console.log(11 || age++)",[21,52795,52796],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[21,52798,52799],{},"console.log(11 || 22)",[21,52801,52802],{},"||逻辑或遇到真就直接输出，输出结果为11",[21,52804,52805],{},"||如果都是假的话，就取最后一个假的值了",[46,52807,52809],{"id":52808},"_297-转换为boolean型","2.9.7 转换为Boolean型",[21,52811,52812],{},"显示转换：",[21,52814,52815,52818,52819],{},[237,52816,52817],{},"记忆","： ",[237,52820,52821],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[21,52823,52824],{},"空字符串为假，其他字符串全为真",[21,52826,52827],{},[1426,52828],{"alt":71,"src":52829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[21,52831,52832],{},"隐式转换：",[21,52834,52835],{},[1426,52836],{"alt":71,"src":52837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[21,52839,52840],{},"隐式转换:",[21,52842,52843],{},"null+3=3",[21,52845,52846],{},"undefined+3=NaN",[21,52848,52849],{},"null==undefined 输出true,他两个都当0看",[21,52851,52852],{},"null===undefined 输出false",[21,52854,52855],{},"undefined做任何操作都是NaN",[21,52857,52858],{},"NaN不等于NaN，NaN表示计算错误",[16,52860,52862],{"id":52861},"_210-对象","2.10 对象",[46,52864,52866],{"id":52865},"_2101-对象的介绍","2.10.1 对象的介绍",[21,52868,52869],{},"对象也是一种数据类型，里边的数据是无序的",[21,52871,52872],{},"对象由属性和方法组成",[21,52874,52875],{},[1426,52876],{"alt":71,"src":52877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[21,52879,52880],{},[1426,52881],{"alt":71,"src":52882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[21,52884,52885],{},[1426,52886],{"alt":71,"src":52887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[46,52889,52891],{"id":52890},"_2102-对象属性","2.10.2 对象属性",[21,52893,52894],{},[1426,52895],{"alt":71,"src":52896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[29,52898,52899],{},[32,52900,52901],{},"查询对象",[21,52903,52904],{},"对象名.属性 goods.uname",[21,52906,52907],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[21,52909,52910],{},"不带字符串的属性名也可以使用 对象名['属性名']",[21,52912,52913],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[21,52915,52916],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[29,52918,52919],{"start":96},[32,52920,52921],{},"重新赋值",[21,52923,52924],{},"对象名.属性=新值",[29,52926,52927],{"start":1143},[32,52928,52929],{},"增加新数据",[21,52931,52924],{},[29,52933,52934],{"start":1158},[32,52935,52936],{},"删除对象中的属性",[21,52938,52939],{},"delete 对象名.属性",[46,52941,52943],{"id":52942},"_2103-对象方法","2.10.3 对象方法",[21,52945,52946],{},[1426,52947],{"alt":71,"src":52948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[21,52950,52951],{},"后边跟的是匿名函数",[21,52953,52954],{},"对象外面的叫函数；对象内部的叫方法",[21,52956,52957],{},[1426,52958],{"alt":71,"src":52959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[46,52961,52963],{"id":52962},"_2104-遍历对象","2.10.4 遍历对象",[21,52965,52966],{},"理解为加括号的python字典遍历",[21,52968,52969],{},[1426,52970],{"alt":71,"src":52971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[21,52973,52974],{},"k是字符串类型",[21,52976,52977],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[66,52979,52981],{"className":50602,"code":52980,"language":50604,"meta":71,"style":71},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[73,52982,52983,52988,52993,52998,53003],{"__ignoreMap":71},[76,52984,52985],{"class":78,"line":79},[76,52986,52987],{"class":86},"   let arr = [1, 2, 3]\n",[76,52989,52990],{"class":78,"line":96},[76,52991,52992],{"class":86},"    for (let k in arr) {\n",[76,52994,52995],{"class":78,"line":1143},[76,52996,52997],{"class":86},"      console.log(k)\n",[76,52999,53000],{"class":78,"line":1158},[76,53001,53002],{"class":86},"      console.log(arr[k])\n",[76,53004,53005],{"class":78,"line":1164},[76,53006,2151],{"class":86},[21,53008,53009],{},[1426,53010],{"alt":71,"src":53011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[21,53013,53014],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[21,53016,53017],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[21,53019,53020],{},"for in 得到的k是属性名",[51782,53022,53023],{},"\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",[21,53025,53026],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[46,53028,53030],{"id":53029},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[21,53032,53033],{},"数组中放对象信息",[66,53035,53039],{"className":53036,"code":53037,"language":53038,"meta":71,"style":71},"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",[73,53040,53041,53049,53054,53059,53064,53069,53074,53079,53084,53089,53094,53099,53104,53108,53112],{"__ignoreMap":71},[76,53042,53043,53045,53047],{"class":78,"line":79},[76,53044,998],{"class":86},[76,53046,51782],{"class":51269},[76,53048,51276],{"class":86},[76,53050,53051],{"class":78,"line":96},[76,53052,53053],{"class":86},"    let students = [\n",[76,53055,53056],{"class":78,"line":1143},[76,53057,53058],{"class":86},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[76,53060,53061],{"class":78,"line":1158},[76,53062,53063],{"class":86},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[76,53065,53066],{"class":78,"line":1164},[76,53067,53068],{"class":86},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[76,53070,53071],{"class":78,"line":1178},[76,53072,53073],{"class":86},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[76,53075,53076],{"class":78,"line":1184},[76,53077,53078],{"class":86},"    ]\n",[76,53080,53081],{"class":78,"line":1275},[76,53082,53083],{"class":86},"    for (let i = 0; i \u003C students.length; i++) {\n",[76,53085,53086],{"class":78,"line":1281},[76,53087,53088],{"class":86},"      for (let k in students[i]) {\n",[76,53090,53091],{"class":78,"line":1293},[76,53092,53093],{"class":86},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[76,53095,53096],{"class":78,"line":1576},[76,53097,53098],{"class":86},"        \u002F\u002F输出每个人的名字：\n",[76,53100,53101],{"class":78,"line":1581},[76,53102,53103],{"class":86},"        \u002F\u002Fconsole.log(students[i].name)\n",[76,53105,53106],{"class":78,"line":1587},[76,53107,52367],{"class":86},[76,53109,53110],{"class":78,"line":1592},[76,53111,2151],{"class":86},[76,53113,53114,53116,53118],{"class":78,"line":1606},[76,53115,52386],{"class":86},[76,53117,51782],{"class":51269},[76,53119,51276],{"class":86},[46,53121,53123],{"id":53122},"_2106-内置对象","2.10.6 内置对象",[21,53125,53126],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[29,53128,53129],{},[32,53130,53131],{},"数学对象Math",[21,53133,53134],{},[1426,53135],{"alt":71,"src":53136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[21,53138,53139],{},[326,53140,53143],{"href":53141,"rel":53142},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23833],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[21,53145,53146],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[21,53148,53149],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[21,53151,53152],{},"数组不可以使用Math中的max,min来求最大值与最小值",[21,53154,53155],{},"null是一个空对象，可以认为：null类似于let obj={}",[21,53157,53158],{},"null属于对象数据类型",[29,53160,53161],{"start":96},[32,53162,53163],{},"生成任意范围随机数",[21,53165,53166],{},[1426,53167],{"alt":71,"src":53168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[21,53170,53171],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[21,53173,53174],{},"乘以几就取不到几",[21,53176,53177],{},"取数组中的随机元素：",[21,53179,53180],{},"let arr = ['red', 'green', 'blue']",[21,53182,53183],{},"let random = Math.floor(Math.random() * arr.length)",[21,53185,53186],{},"console.log(arr[random])",[21,53188,53189],{},"这个函数得到的是全闭区间",[21,53191,53192],{},"function getRandom(N, M) {",[21,53194,53195],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[21,53197,1034],{},[21,53199,53200],{},"console.log(getRandom(4, 8))",[46,53202,53204],{"id":53203},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[21,53206,53207],{},[1426,53208],{"alt":71,"src":53209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[21,53211,53212],{},[1426,53213],{"alt":71,"src":53214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[21,53216,53217],{},[1426,53218],{"alt":71,"src":53219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[21,53221,53222],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[21,53224,53225],{},[1426,53226],{"alt":71,"src":53227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[21,53229,53230],{},[1426,53231],{"alt":71,"src":53232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[21,53234,53235],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[21,53237,53238],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[21,53240,53241],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5092,53243,53244],{},"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":71,"searchDepth":96,"depth":96,"links":53246},[53247,53255,53256,53257,53258,53259,53266,53270,53276,53285],{"id":50437,"depth":96,"text":50438,"children":53248},[53249,53250,53251,53252,53253,53254],{"id":50441,"depth":1143,"text":50442},{"id":50458,"depth":1143,"text":50459},{"id":50498,"depth":1143,"text":50499},{"id":50510,"depth":1143,"text":50511},{"id":50519,"depth":1143,"text":50520},{"id":50567,"depth":1143,"text":50568},{"id":50577,"depth":96,"text":50578},{"id":50665,"depth":96,"text":50666},{"id":50688,"depth":96,"text":50689},{"id":50700,"depth":96,"text":50701},{"id":50887,"depth":96,"text":50888,"children":53260},[53261,53262,53263,53264,53265],{"id":50891,"depth":1143,"text":50892},{"id":50900,"depth":1143,"text":50901},{"id":50928,"depth":1143,"text":50929},{"id":50964,"depth":1143,"text":50965},{"id":50989,"depth":1143,"text":50990},{"id":51001,"depth":96,"text":51002,"children":53267},[53268,53269],{"id":51022,"depth":1143,"text":51023},{"id":51116,"depth":1143,"text":51117},{"id":51174,"depth":96,"text":51175,"children":53271},[53272,53273,53274,53275],{"id":51178,"depth":1143,"text":51179},{"id":51202,"depth":1143,"text":51203},{"id":51255,"depth":1143,"text":51256},{"id":52066,"depth":1143,"text":52067},{"id":52452,"depth":96,"text":52453,"children":53277},[53278,53279,53280,53281,53282,53283,53284],{"id":52470,"depth":1143,"text":52471},{"id":52507,"depth":1143,"text":52508},{"id":52538,"depth":1143,"text":52539},{"id":52571,"depth":1143,"text":52572},{"id":52652,"depth":1143,"text":52653},{"id":52750,"depth":1143,"text":52751},{"id":52808,"depth":1143,"text":52809},{"id":52861,"depth":96,"text":52862,"children":53286},[53287,53288,53289,53290,53291,53292,53293],{"id":52865,"depth":1143,"text":52866},{"id":52890,"depth":1143,"text":52891},{"id":52942,"depth":1143,"text":52943},{"id":52962,"depth":1143,"text":52963},{"id":53029,"depth":1143,"text":53030},{"id":53122,"depth":1143,"text":53123},{"id":53203,"depth":1143,"text":53204},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50429,"description":23344},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53300,"title":53301,"body":53302,"description":23344,"extension":5123,"meta":76642,"navigation":2364,"path":76643,"seo":76644,"stem":76645,"__hash__":76646},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":9,"value":53303,"toc":76582},[53304,53307,53310,53313,53318,53321,53324,53327,53331,53335,53341,53346,53354,53361,53364,53368,53373,53378,53383,53386,53389,53400,53403,53407,53410,53413,53418,53423,53428,53431,53434,53526,53529,53534,53537,53542,53545,53548,53553,53556,53561,53565,53568,53582,53586,53591,53594,53597,53601,53606,53609,53613,53617,53622,53626,53631,53634,53637,53640,53643,53646,53649,53654,53659,53687,53690,53693,53696,53701,53704,53707,53710,53713,53717,53746,53750,53755,53760,53763,53766,53769,53774,53889,53894,53899,54060,54065,54068,54072,54077,54082,54085,54088,54091,54094,54097,54100,54103,54106,54109,54112,54115,54118,54121,54124,54126,54129,54132,54135,54140,54144,54541,54544,54550,54554,54559,55841,55846,55849,55852,55855,55860,57056,57060,57066,57071,57074,57079,57084,57088,57092,57097,57100,57105,57108,57111,57115,58023,58026,58030,58251,58254,58257,58260,58486,58489,58713,58716,58720,58725,58728,58731,58959,58962,58995,58998,59002,59007,59011,59014,59017,59020,59023,59026,59029,59032,59037,60317,60321,60324,61417,61421,61424,61427,61430,61433,61437,61440,61443,61445,61453,62934,62938,62941,62944,62947,63156,63159,63163,63167,63172,63177,63180,63183,63188,63192,63197,63200,63309,63313,63318,63323,63326,63329,63333,63338,63343,63348,63351,63354,63365,63368,63373,63378,63381,63384,63457,63461,63466,63469,63471,63482,63486,63491,64817,64820,64823,64826,64828,64831,64834,64837,64840,64843,64846,64849,64852,64855,64858,64861,64864,64866,64868,64871,64875,65969,65972,65975,65991,66005,66008,66013,66019,66024,66028,66032,66037,66041,66046,66488,66493,66496,66500,66505,66508,66511,66515,66520,66524,66529,66534,66538,66543,66548,66551,66556,66561,66565,66570,66575,66679,66682,66686,66691,67057,67060,67063,67066,67069,67072,67075,67078,67081,68377,68381,68386,68391,68394,68397,68400,68403,68405,68410,68415,68418,68422,68427,68432,68437,68440,68443,68446,68449,68452,68457,68460,68464,68469,68474,68478,68483,68486,68491,68494,68497,68500,68503,68506,68511,68514,68517,68520,68523,68527,68532,68535,68539,68544,68547,68550,68554,68583,68586,68590,68594,68599,68603,68608,68611,68614,68617,68620,68623,68626,68629,68632,68635,68638,68641,68644,68647,68650,68654,68659,68664,68667,68671,68675,68680,68683,68687,68690,68693,68698,68703,68708,68713,68718,68721,68724,68729,68734,68738,68743,68746,68751,68754,68757,68760,68763,68768,68771,68780,68784,68789,68792,68795,68799,68802,68807,68811,68814,68820,68826,68830,68856,68859,70420,70423,70919,70922,70927,70932,70937,70941,70946,70951,70956,70960,70965,70968,70971,70974,70977,70981,70984,70989,70992,70997,71001,71006,71009,71014,71019,71024,71027,71030,71035,71040,71043,71046,71050,71053,71058,71061,71066,71069,71074,71079,71084,71087,71092,71157,71160,71171,71175,71180,71352,71356,71361,71364,71367,71370,71374,71385,71389,71392,71397,71402,71405,71408,71411,71414,71417,71419,71422,71425,71428,71433,71436,71441,71444,71448,71451,71454,71468,71472,71475,71530,71535,71538,71541,71546,71549,71553,71558,71688,71692,71697,71702,71783,71788,71792,71795,71800,71805,71811,71814,71817,71820,71824,71829,71832,71843,71847,71864,74911,74915,74918,74921,74924,74945,74949,74952,74960,74963,74968,74971,74974,74979,74984,74988,75009,75013,75018,75021,75024,75027,75030,75034,75039,75042,75046,75051,75054,75059,75062,75067,75070,75075,76278,76282,76287,76290,76295,76579],[12,53305,53301],{"id":53306},"_3web-apis",[21,53308,53309],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[21,53311,53312],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[21,53314,53315],{},[1426,53316],{"alt":71,"src":53317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[21,53319,53320],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[21,53322,53323],{},"建议数组和对象使用 const 来声明",[21,53325,53326],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[16,53328,53330],{"id":53329},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[46,53332,53334],{"id":53333},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[21,53336,53337,53340],{},[73,53338,53339],{},"document"," = HTML 文件解析后的对象化表示；",[21,53342,53343,53345],{},[73,53344,53339],{}," ≠ HTML 文件本身",[21,53347,53348,53353],{},[237,53349,53350],{},[73,53351,53352],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[21,53355,53356,53360],{},[237,53357,53358],{},[73,53359,53339],{}," ：容器里的内容，代表当前加载的网页（DOM）",[21,53362,53363],{},"document实际上为window.document的简写",[46,53365,53367],{"id":53366},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[21,53369,53370],{},[1426,53371],{"alt":71,"src":53372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[21,53374,53375],{},[1426,53376],{"alt":71,"src":53377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[21,53379,53380],{},[1426,53381],{"alt":71,"src":53382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[21,53384,53385],{},"console.dir()",[21,53387,53388],{},"dir用来打印对象",[1095,53390,53391,53394,53397],{},[32,53392,53393],{},"任何一个标签，都是一个对象",[32,53395,53396],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[32,53398,53399],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[21,53401,53402],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[46,53404,53406],{"id":53405},"_312-获取dom对象","3.1.2 获取DoM对象",[21,53408,53409],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[21,53411,53412],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[21,53414,53415],{},[237,53416,53417],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[29,53419,53420],{},[32,53421,53422],{},"利用CSS选择器来获取标签元素",[21,53424,53425],{},[1426,53426],{"alt":71,"src":53427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[21,53429,53430],{},"里边的选择器必须必须加引号！！！",[21,53432,53433],{},"只选择第一个元素",[66,53435,53437],{"className":53036,"code":53436,"language":53038,"meta":71,"style":71},"\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",[73,53438,53439,53447,53468,53487,53495,53500,53505,53510,53518],{"__ignoreMap":71},[76,53440,53441,53443,53445],{"class":78,"line":79},[76,53442,998],{"class":86},[76,53444,51769],{"class":51269},[76,53446,51276],{"class":86},[76,53448,53449,53451,53453,53456,53458,53461,53464,53466],{"class":78,"line":96},[76,53450,52113],{"class":86},[76,53452,51580],{"class":51269},[76,53454,53455],{"class":1927}," class",[76,53457,133],{"class":86},[76,53459,53460],{"class":192},"\"box\"",[76,53462,53463],{"class":86},">123\u003C\u002F",[76,53465,51580],{"class":51269},[76,53467,51276],{"class":86},[76,53469,53470,53472,53474,53476,53478,53480,53483,53485],{"class":78,"line":1143},[76,53471,52113],{"class":86},[76,53473,51580],{"class":51269},[76,53475,53455],{"class":1927},[76,53477,133],{"class":86},[76,53479,53460],{"class":192},[76,53481,53482],{"class":86},">456\u003C\u002F",[76,53484,51580],{"class":51269},[76,53486,51276],{"class":86},[76,53488,53489,53491,53493],{"class":78,"line":1158},[76,53490,52113],{"class":86},[76,53492,51782],{"class":51269},[76,53494,51276],{"class":86},[76,53496,53497],{"class":78,"line":1164},[76,53498,53499],{"class":86},"    \u002F\u002F 1.获取匹配的第一个元素\n",[76,53501,53502],{"class":78,"line":1178},[76,53503,53504],{"class":86},"    const box = document.querySelector('div')\n",[76,53506,53507],{"class":78,"line":1184},[76,53508,53509],{"class":86},"    console.dir(box)\n",[76,53511,53512,53514,53516],{"class":78,"line":1275},[76,53513,52386],{"class":86},[76,53515,51782],{"class":51269},[76,53517,51276],{"class":86},[76,53519,53520,53522,53524],{"class":78,"line":1281},[76,53521,51754],{"class":86},[76,53523,51769],{"class":51269},[76,53525,51276],{"class":86},[21,53527,53528],{},"只选123，不选456",[21,53530,53531],{},[1426,53532],{"alt":71,"src":53533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[21,53535,53536],{},"返回的是一个数组的集合，不能对其进行直接修改",[21,53538,53539],{},[1426,53540],{"alt":71,"src":53541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[21,53543,53544],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[21,53546,53547],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[29,53549,53550],{"start":96},[32,53551,53552],{},"其他方法来获取标签元素",[21,53554,53555],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[21,53557,53558],{},[1426,53559],{"alt":71,"src":53560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[46,53562,53564],{"id":53563},"_313-操作元素的内容","3.1.3 操作元素的内容",[21,53566,53567],{},"设置修改DOM元素内容有两种方式：",[1095,53569,53570,53573,53576,53579],{},[32,53571,53572],{},"元素.innerText=''",[32,53574,53575],{},"元素.innerHTML=''",[32,53577,53578],{},"不写字符串输出数字也是可以的",[32,53580,53581],{},"元素.innerHtml=1",[21965,53583,53585],{"id":53584},"_3131-innertext","3.1.3.1 innerText",[21,53587,53588],{},[1426,53589],{"alt":71,"src":53590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[21,53592,53593],{},"思路：实现了修改盒子中的内容！",[21,53595,53596],{},"它只显示纯文本，不解析标签",[21965,53598,53600],{"id":53599},"_3132-innerhtml","3.1.3.2 innerHTML",[21,53602,53603],{},[1426,53604],{"alt":71,"src":53605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[21,53607,53608],{},"相比于innerText，他的强大之处在于可以解析标签",[46,53610,53612],{"id":53611},"_314-操作元素属性","3.1.4 操作元素属性",[21965,53614,53616],{"id":53615},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[21,53618,53619],{},[1426,53620],{"alt":71,"src":53621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21965,53623,53625],{"id":53624},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[21,53627,53628],{},[1426,53629],{"alt":71,"src":53630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[21,53632,53633],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[21,53635,53636],{},"div.style.backgroundColor = 'hotpink'",[21,53638,53639],{},"如果按照css的写法，-表示减，就会出错",[21,53641,53642],{},"body元素不需要再获取，直接用就行！！！！！！",[21,53644,53645],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[21,53647,53648],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[21,53650,53651],{},[1426,53652],{"alt":71,"src":53653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[21,53655,53656],{},[1426,53657],{"alt":71,"src":53658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[29,53660,53661,53664,53667,53670,53673,53676],{},[32,53662,53663],{},"className这个方式就是修改很多样式的时候来使用的！",[32,53665,53666],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[32,53668,53669],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[32,53671,53672],{},"className为属性名，如果还用class的话就导致与关键字冲突",[32,53674,53675],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[32,53677,53678,53679,53684],{},"解析标签的时候就变为了",[51580,53680],{"className":53681},[53682,53683],"nav","box",[53685,53686],"br",{},[21,53688,53689],{},"例子：",[51580,53691],{"className":53692},[53682],[51782,53694,53695],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[21,53697,53698],{},[1426,53699],{"alt":71,"src":53700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[21,53702,53703],{},"追加和删除类名用classList",[21,53705,53706],{},"常用于类似于开关的操作",[21,53708,53709],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[21,53711,53712],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21965,53714,53716],{"id":53715},"_3143-牢记点","3.1.4.3 牢记点",[29,53718,53719,53722,53725,53728,53731,53734,53737,53740,53743],{},[32,53720,53721],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[32,53723,53724],{},"使用style属性操作css时不要忘记引号",[32,53726,53727],{},"使用className或者classList时也不要忘记引号",[32,53729,53730],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[32,53732,53733],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[32,53735,53736],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[32,53738,53739],{},"若： let arr=['1','2',3] arr[0]=1",[32,53741,53742],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[32,53744,53745],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[46,53747,53749],{"id":53748},"_315-操作表单元素","3.1.5 操作表单元素",[29,53751,53752],{},[32,53753,53754],{},"天生的属性",[21,53756,53757],{},[1426,53758],{"alt":71,"src":53759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[21,53761,53762],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[21,53764,53765],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[21,53767,53768],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[21,53770,53771],{},[1426,53772],{"alt":71,"src":53773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[66,53775,53777],{"className":50602,"code":53776,"language":50604,"meta":71,"style":71},"在复选框中如果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",[73,53778,53779,53784,53816,53821,53826,53831,53836,53840,53845,53850,53867,53879,53884],{"__ignoreMap":71},[76,53780,53781],{"class":78,"line":79},[76,53782,53783],{"class":86},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[76,53785,53786,53788,53791,53794,53796,53799,53801,53803,53805,53807,53809,53811,53814],{"class":78,"line":96},[76,53787,998],{"class":86},[76,53789,53790],{"class":51269},"input",[76,53792,53793],{"class":1927}," type",[76,53795,133],{"class":86},[76,53797,53798],{"class":192},"\"checkbox\"",[76,53800,14887],{"class":1927},[76,53802,133],{"class":86},[76,53804,7619],{"class":192},[76,53806,14926],{"class":1927},[76,53808,133],{"class":86},[76,53810,7619],{"class":192},[76,53812,53813],{"class":1927}," checked",[76,53815,51276],{"class":86},[76,53817,53818],{"class":78,"line":1143},[76,53819,53820],{"class":86},"不选的话：\n",[76,53822,53823],{"class":78,"line":1158},[76,53824,53825],{"class":86},"const input = document.querySelector('input')\n",[76,53827,53828],{"class":78,"line":1164},[76,53829,53830],{"class":86},"input.checked=false\n",[76,53832,53833],{"class":78,"line":1178},[76,53834,53835],{"class":86},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[76,53837,53838],{"class":78,"line":1184},[76,53839,2365],{"emptyLinePlaceholder":2364},[76,53841,53842],{"class":78,"line":1275},[76,53843,53844],{"class":86},"禁用按钮：\n",[76,53846,53847],{"class":78,"line":1281},[76,53848,53849],{"class":86},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[76,53851,53852,53854,53857,53860,53863,53865],{"class":78,"line":1293},[76,53853,998],{"class":86},[76,53855,53856],{"class":51269},"button",[76,53858,53859],{"class":1927}," disabled",[76,53861,53862],{"class":86},">点击\u003C\u002F",[76,53864,53856],{"class":51269},[76,53866,51276],{"class":86},[76,53868,53869,53871,53873,53875,53877],{"class":78,"line":1576},[76,53870,998],{"class":86},[76,53872,53856],{"class":51269},[76,53874,53862],{"class":86},[76,53876,53856],{"class":51269},[76,53878,51276],{"class":86},[76,53880,53881],{"class":78,"line":1581},[76,53882,53883],{"class":86},"const bt = document.querySelector('button')\n",[76,53885,53886],{"class":78,"line":1587},[76,53887,53888],{"class":86},"bt.disabled = false\n",[29,53890,53891],{"start":96},[32,53892,53893],{},"自定义属性",[21,53895,53896],{},[1426,53897],{"alt":71,"src":53898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[66,53900,53902],{"className":53036,"code":53901,"language":53038,"meta":71,"style":71},"\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",[73,53903,53904,53912,53940,53959,53978,53997,54016,54024,54029,54034,54039,54044,54052],{"__ignoreMap":71},[76,53905,53906,53908,53910],{"class":78,"line":79},[76,53907,998],{"class":86},[76,53909,51769],{"class":51269},[76,53911,51276],{"class":86},[76,53913,53914,53916,53918,53921,53923,53925,53928,53930,53933,53936,53938],{"class":78,"line":96},[76,53915,52113],{"class":86},[76,53917,51580],{"class":51269},[76,53919,53920],{"class":1927}," data-id",[76,53922,133],{"class":86},[76,53924,3643],{"class":192},[76,53926,53927],{"class":1927}," data-spm",[76,53929,133],{"class":86},[76,53931,53932],{"class":192},"\"我不知道\"",[76,53934,53935],{"class":86},">1\u003C\u002F",[76,53937,51580],{"class":51269},[76,53939,51276],{"class":86},[76,53941,53942,53944,53946,53948,53950,53952,53955,53957],{"class":78,"line":1143},[76,53943,52113],{"class":86},[76,53945,51580],{"class":51269},[76,53947,53920],{"class":1927},[76,53949,133],{"class":86},[76,53951,3666],{"class":192},[76,53953,53954],{"class":86},">2\u003C\u002F",[76,53956,51580],{"class":51269},[76,53958,51276],{"class":86},[76,53960,53961,53963,53965,53967,53969,53971,53974,53976],{"class":78,"line":1158},[76,53962,52113],{"class":86},[76,53964,51580],{"class":51269},[76,53966,53920],{"class":1927},[76,53968,133],{"class":86},[76,53970,3679],{"class":192},[76,53972,53973],{"class":86},">3\u003C\u002F",[76,53975,51580],{"class":51269},[76,53977,51276],{"class":86},[76,53979,53980,53982,53984,53986,53988,53990,53993,53995],{"class":78,"line":1164},[76,53981,52113],{"class":86},[76,53983,51580],{"class":51269},[76,53985,53920],{"class":1927},[76,53987,133],{"class":86},[76,53989,3692],{"class":192},[76,53991,53992],{"class":86},">4\u003C\u002F",[76,53994,51580],{"class":51269},[76,53996,51276],{"class":86},[76,53998,53999,54001,54003,54005,54007,54009,54012,54014],{"class":78,"line":1178},[76,54000,52113],{"class":86},[76,54002,51580],{"class":51269},[76,54004,53920],{"class":1927},[76,54006,133],{"class":86},[76,54008,3713],{"class":192},[76,54010,54011],{"class":86},">5\u003C\u002F",[76,54013,51580],{"class":51269},[76,54015,51276],{"class":86},[76,54017,54018,54020,54022],{"class":78,"line":1184},[76,54019,52113],{"class":86},[76,54021,51782],{"class":51269},[76,54023,51276],{"class":86},[76,54025,54026],{"class":78,"line":1275},[76,54027,54028],{"class":86},"    const one = document.querySelector('div')\n",[76,54030,54031],{"class":78,"line":1281},[76,54032,54033],{"class":86},"    console.log(one.dataset)\n",[76,54035,54036],{"class":78,"line":1293},[76,54037,54038],{"class":86},"    console.log(one.dataset.id)\n",[76,54040,54041],{"class":78,"line":1576},[76,54042,54043],{"class":86},"    console.log(one.dataset.spm)\n",[76,54045,54046,54048,54050],{"class":78,"line":1581},[76,54047,52386],{"class":86},[76,54049,51782],{"class":51269},[76,54051,51276],{"class":86},[76,54053,54054,54056,54058],{"class":78,"line":1587},[76,54055,51754],{"class":86},[76,54057,51769],{"class":51269},[76,54059,51276],{"class":86},[21,54061,54062],{},[1426,54063],{"alt":71,"src":54064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[21,54066,54067],{},"document.querySelector选择的是第一个对象（元素）",[46,54069,54071],{"id":54070},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[21,54073,54074],{},[1426,54075],{"alt":71,"src":54076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[21,54078,54079],{},[1426,54080],{"alt":71,"src":54081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[21,54083,54084],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51782,54086,54087],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[21,54089,54090],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51782,54092,54093],{},"\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",[21,54095,54096],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[21,54098,54099],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[21,54101,54102],{},"单位为毫秒！！！",[21,54104,54105],{},"可以搭配匿名函数来用！！！",[21,54107,54108],{},"setInterval(function () {",[21,54110,54111],{},"alert('两秒执行一次')",[21,54113,54114],{},"}, 2000)",[21,54116,54117],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[21,54119,54120],{},"function fn() {",[21,54122,54123],{},"document.write(1)",[21,54125,1034],{},[21,54127,54128],{},"setInterval(fn, 1000)",[21,54130,54131],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[21,54133,54134],{},"setInterval('fn()', 1000)",[21,54136,54137],{},[1426,54138],{"alt":71,"src":54139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21965,54141,54143],{"id":54142},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[66,54145,54147],{"className":50602,"code":54146,"language":50604,"meta":71,"style":71},"\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",[73,54148,54149,54159,54173,54177,54185,54199,54219,54231,54239,54243,54251,54288,54293,54298,54303,54311,54319,54341,54349,54354,54376,54381,54386,54397,54402,54422,54430,54445,54460,54471,54476,54486,54496,54500,54509,54513,54521,54529,54533],{"__ignoreMap":71},[76,54150,54151,54153,54155,54157],{"class":78,"line":79},[76,54152,51266],{"class":86},[76,54154,51270],{"class":51269},[76,54156,51273],{"class":1927},[76,54158,51276],{"class":86},[76,54160,54161,54163,54165,54167,54169,54171],{"class":78,"line":96},[76,54162,998],{"class":86},[76,54164,50604],{"class":51269},[76,54166,51285],{"class":1927},[76,54168,133],{"class":86},[76,54170,51290],{"class":192},[76,54172,51276],{"class":86},[76,54174,54175],{"class":78,"line":1143},[76,54176,2365],{"emptyLinePlaceholder":2364},[76,54178,54179,54181,54183],{"class":78,"line":1158},[76,54180,998],{"class":86},[76,54182,51303],{"class":51269},[76,54184,51276],{"class":86},[76,54186,54187,54189,54191,54193,54195,54197],{"class":78,"line":1164},[76,54188,52113],{"class":86},[76,54190,51313],{"class":51269},[76,54192,51316],{"class":1927},[76,54194,133],{"class":86},[76,54196,51321],{"class":192},[76,54198,51276],{"class":86},[76,54200,54201,54203,54205,54207,54209,54211,54213,54215,54217],{"class":78,"line":1178},[76,54202,52113],{"class":86},[76,54204,51313],{"class":51269},[76,54206,14887],{"class":1927},[76,54208,133],{"class":86},[76,54210,51360],{"class":192},[76,54212,51340],{"class":1927},[76,54214,133],{"class":86},[76,54216,51367],{"class":192},[76,54218,51276],{"class":86},[76,54220,54221,54223,54225,54227,54229],{"class":78,"line":1184},[76,54222,52113],{"class":86},[76,54224,51376],{"class":51269},[76,54226,51379],{"class":86},[76,54228,51376],{"class":51269},[76,54230,51276],{"class":86},[76,54232,54233,54235,54237],{"class":78,"line":1275},[76,54234,51754],{"class":86},[76,54236,51303],{"class":51269},[76,54238,51276],{"class":86},[76,54240,54241],{"class":78,"line":1281},[76,54242,2365],{"emptyLinePlaceholder":2364},[76,54244,54245,54247,54249],{"class":78,"line":1293},[76,54246,998],{"class":86},[76,54248,51769],{"class":51269},[76,54250,51276],{"class":86},[76,54252,54253,54255,54258,54260,54262,54264,54266,54268,54270,54273,54275,54278,54281,54283,54286],{"class":78,"line":1576},[76,54254,52113],{"class":86},[76,54256,54257],{"class":51269},"textarea",[76,54259,14887],{"class":1927},[76,54261,133],{"class":86},[76,54263,7619],{"class":192},[76,54265,14926],{"class":1927},[76,54267,133],{"class":86},[76,54269,7619],{"class":192},[76,54271,54272],{"class":1927}," cols",[76,54274,133],{"class":86},[76,54276,54277],{"class":192},"\"30\"",[76,54279,54280],{"class":1927}," rows",[76,54282,133],{"class":86},[76,54284,54285],{"class":192},"\"10\"",[76,54287,51276],{"class":86},[76,54289,54290],{"class":78,"line":1581},[76,54291,54292],{"class":86},"        用户注册协议\n",[76,54294,54295],{"class":78,"line":1587},[76,54296,54297],{"class":86},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[76,54299,54300],{"class":78,"line":1592},[76,54301,54302],{"class":86},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[76,54304,54305,54307,54309],{"class":78,"line":1606},[76,54306,51745],{"class":86},[76,54308,54257],{"class":51269},[76,54310,51276],{"class":86},[76,54312,54313,54315,54317],{"class":78,"line":1611},[76,54314,52113],{"class":86},[76,54316,53685],{"class":51269},[76,54318,51276],{"class":86},[76,54320,54321,54323,54325,54327,54329,54332,54334,54337,54339],{"class":78,"line":1617},[76,54322,52113],{"class":86},[76,54324,53856],{"class":51269},[76,54326,53455],{"class":1927},[76,54328,133],{"class":86},[76,54330,54331],{"class":192},"\"btn\"",[76,54333,53859],{"class":1927},[76,54335,54336],{"class":86},">我已经阅读用户协议(5)\u003C\u002F",[76,54338,53856],{"class":51269},[76,54340,51276],{"class":86},[76,54342,54343,54345,54347],{"class":78,"line":1638},[76,54344,52113],{"class":86},[76,54346,51782],{"class":51269},[76,54348,51276],{"class":86},[76,54350,54351],{"class":78,"line":1643},[76,54352,54353],{"class":146},"    \u002F\u002F 1. 获取元素\n",[76,54355,54356,54358,54361,54363,54366,54369,54371,54374],{"class":78,"line":1657},[76,54357,11188],{"class":82},[76,54359,54360],{"class":136}," btn",[76,54362,13531],{"class":82},[76,54364,54365],{"class":86}," document.",[76,54367,54368],{"class":1927},"querySelector",[76,54370,87],{"class":86},[76,54372,54373],{"class":192},"'.btn'",[76,54375,93],{"class":86},[76,54377,54378],{"class":78,"line":1662},[76,54379,54380],{"class":146},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[76,54382,54383],{"class":78,"line":1691},[76,54384,54385],{"class":146},"    \u002F\u002F 2. 倒计时\n",[76,54387,54388,54390,54392,54394],{"class":78,"line":1696},[76,54389,52188],{"class":82},[76,54391,9405],{"class":86},[76,54393,133],{"class":82},[76,54395,54396],{"class":136}," 5\n",[76,54398,54399],{"class":78,"line":1713},[76,54400,54401],{"class":146},"    \u002F\u002F 2.1 开启定时器\n",[76,54403,54404,54406,54409,54411,54414,54416,54419],{"class":78,"line":1718},[76,54405,52188],{"class":82},[76,54407,54408],{"class":86}," n ",[76,54410,133],{"class":82},[76,54412,54413],{"class":1927}," setInterval",[76,54415,87],{"class":86},[76,54417,54418],{"class":82},"function",[76,54420,54421],{"class":86}," () {\n",[76,54423,54424,54427],{"class":78,"line":1723},[76,54425,54426],{"class":86},"      i",[76,54428,54429],{"class":82},"--\n",[76,54431,54432,54435,54437,54440,54442],{"class":78,"line":1728},[76,54433,54434],{"class":86},"      btn.innerHTML ",[76,54436,133],{"class":82},[76,54438,54439],{"class":192}," `我已经阅读用户协议(${",[76,54441,529],{"class":86},[76,54443,54444],{"class":192},"})`\n",[76,54446,54447,54450,54453,54456,54458],{"class":78,"line":1742},[76,54448,54449],{"class":82},"      if",[76,54451,54452],{"class":86}," (i ",[76,54454,54455],{"class":82},"===",[76,54457,4058],{"class":136},[76,54459,12409],{"class":86},[76,54461,54462,54465,54468],{"class":78,"line":1747},[76,54463,54464],{"class":1927},"        clearInterval",[76,54466,54467],{"class":86},"(n)  ",[76,54469,54470],{"class":146},"\u002F\u002F 关闭定时器\n",[76,54472,54473],{"class":78,"line":2542},[76,54474,54475],{"class":146},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[76,54477,54478,54481,54483],{"class":78,"line":2556},[76,54479,54480],{"class":86},"        btn.disabled ",[76,54482,133],{"class":82},[76,54484,54485],{"class":136}," false\n",[76,54487,54488,54491,54493],{"class":78,"line":2564},[76,54489,54490],{"class":86},"        btn.innerHTML ",[76,54492,133],{"class":82},[76,54494,54495],{"class":192}," '同意'\n",[76,54497,54498],{"class":78,"line":2569},[76,54499,52367],{"class":86},[76,54501,54502,54505,54507],{"class":78,"line":2575},[76,54503,54504],{"class":86},"    }, ",[76,54506,6377],{"class":136},[76,54508,93],{"class":86},[76,54510,54511],{"class":78,"line":2581},[76,54512,2365],{"emptyLinePlaceholder":2364},[76,54514,54515,54517,54519],{"class":78,"line":2586},[76,54516,52386],{"class":86},[76,54518,51782],{"class":51269},[76,54520,51276],{"class":86},[76,54522,54523,54525,54527],{"class":78,"line":7915},[76,54524,51754],{"class":86},[76,54526,51769],{"class":51269},[76,54528,51276],{"class":86},[76,54530,54531],{"class":78,"line":7939},[76,54532,2365],{"emptyLinePlaceholder":2364},[76,54534,54535,54537,54539],{"class":78,"line":7944},[76,54536,51754],{"class":86},[76,54538,50604],{"class":51269},[76,54540,51276],{"class":86},[21,54542,54543],{},"不要一直想着用死循环,避免死循环",[21,54545,54546,54549],{},[73,54547,54548],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21965,54551,54553],{"id":54552},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[29,54555,54556],{},[32,54557,54558],{},"法1",[66,54560,54562],{"className":50602,"code":54561,"language":50604,"meta":71,"style":71},"\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",[73,54563,54564,54574,54588,54592,54600,54614,54634,54646,54654,54660,54671,54682,54686,54690,54697,54709,54713,54717,54724,54736,54750,54763,54777,54781,54785,54792,54803,54814,54825,54837,54849,54861,54865,54869,54877,54887,54900,54912,54925,54929,54933,54940,54950,54962,54974,54985,54996,55006,55018,55030,55034,55038,55047,55059,55071,55099,55112,55116,55120,55127,55138,55142,55150,55158,55162,55170,55184,55199,55223,55231,55246,55259,55267,55288,55300,55312,55324,55336,55348,55360,55372,55381,55389,55397,55405,55417,55440,55459,55478,55497,55516,55535,55554,55574,55578,55598,55617,55637,55658,55669,55686,55696,55706,55716,55721,55726,55731,55736,55761,55774,55778,55801,55805,55813,55821,55829,55833],{"__ignoreMap":71},[76,54565,54566,54568,54570,54572],{"class":78,"line":79},[76,54567,51266],{"class":86},[76,54569,51270],{"class":51269},[76,54571,51273],{"class":1927},[76,54573,51276],{"class":86},[76,54575,54576,54578,54580,54582,54584,54586],{"class":78,"line":96},[76,54577,998],{"class":86},[76,54579,50604],{"class":51269},[76,54581,51285],{"class":1927},[76,54583,133],{"class":86},[76,54585,51290],{"class":192},[76,54587,51276],{"class":86},[76,54589,54590],{"class":78,"line":1143},[76,54591,2365],{"emptyLinePlaceholder":2364},[76,54593,54594,54596,54598],{"class":78,"line":1158},[76,54595,998],{"class":86},[76,54597,51303],{"class":51269},[76,54599,51276],{"class":86},[76,54601,54602,54604,54606,54608,54610,54612],{"class":78,"line":1164},[76,54603,52113],{"class":86},[76,54605,51313],{"class":51269},[76,54607,51316],{"class":1927},[76,54609,133],{"class":86},[76,54611,51321],{"class":192},[76,54613,51276],{"class":86},[76,54615,54616,54618,54620,54622,54624,54626,54628,54630,54632],{"class":78,"line":1178},[76,54617,52113],{"class":86},[76,54619,51313],{"class":51269},[76,54621,14887],{"class":1927},[76,54623,133],{"class":86},[76,54625,51360],{"class":192},[76,54627,51340],{"class":1927},[76,54629,133],{"class":86},[76,54631,51367],{"class":192},[76,54633,51276],{"class":86},[76,54635,54636,54638,54640,54642,54644],{"class":78,"line":1184},[76,54637,52113],{"class":86},[76,54639,51376],{"class":51269},[76,54641,51379],{"class":86},[76,54643,51376],{"class":51269},[76,54645,51276],{"class":86},[76,54647,54648,54650,54652],{"class":78,"line":1275},[76,54649,52113],{"class":86},[76,54651,5092],{"class":51269},[76,54653,51276],{"class":86},[76,54655,54656,54658],{"class":78,"line":1281},[76,54657,6370],{"class":51269},[76,54659,15539],{"class":86},[76,54661,54662,54665,54667,54669],{"class":78,"line":1293},[76,54663,54664],{"class":136},"      padding",[76,54666,51406],{"class":86},[76,54668,279],{"class":136},[76,54670,1254],{"class":86},[76,54672,54673,54676,54678,54680],{"class":78,"line":1576},[76,54674,54675],{"class":136},"      margin",[76,54677,51406],{"class":86},[76,54679,279],{"class":136},[76,54681,1254],{"class":86},[76,54683,54684],{"class":78,"line":1581},[76,54685,2151],{"class":86},[76,54687,54688],{"class":78,"line":1587},[76,54689,2365],{"emptyLinePlaceholder":2364},[76,54691,54692,54695],{"class":78,"line":1592},[76,54693,54694],{"class":51269},"    li",[76,54696,15539],{"class":86},[76,54698,54699,54702,54704,54707],{"class":78,"line":1606},[76,54700,54701],{"class":136},"      list-style",[76,54703,51406],{"class":86},[76,54705,54706],{"class":136},"none",[76,54708,1254],{"class":86},[76,54710,54711],{"class":78,"line":1611},[76,54712,2151],{"class":86},[76,54714,54715],{"class":78,"line":1617},[76,54716,2365],{"emptyLinePlaceholder":2364},[76,54718,54719,54722],{"class":78,"line":1638},[76,54720,54721],{"class":1927},"    .box",[76,54723,15539],{"class":86},[76,54725,54726,54729,54731,54734],{"class":78,"line":1643},[76,54727,54728],{"class":136},"      position",[76,54730,51406],{"class":86},[76,54732,54733],{"class":136},"relative",[76,54735,1254],{"class":86},[76,54737,54738,54741,54743,54746,54748],{"class":78,"line":1657},[76,54739,54740],{"class":136},"      width",[76,54742,51406],{"class":86},[76,54744,54745],{"class":136},"976",[76,54747,51461],{"class":82},[76,54749,1254],{"class":86},[76,54751,54752,54755,54757,54759,54761],{"class":78,"line":1662},[76,54753,54754],{"class":136},"      height",[76,54756,51406],{"class":86},[76,54758,1503],{"class":136},[76,54760,51461],{"class":82},[76,54762,1254],{"class":86},[76,54764,54765,54767,54769,54771,54773,54775],{"class":78,"line":1691},[76,54766,54675],{"class":136},[76,54768,51406],{"class":86},[76,54770,399],{"class":136},[76,54772,51461],{"class":82},[76,54774,51525],{"class":136},[76,54776,1254],{"class":86},[76,54778,54779],{"class":78,"line":1696},[76,54780,2151],{"class":86},[76,54782,54783],{"class":78,"line":1713},[76,54784,2365],{"emptyLinePlaceholder":2364},[76,54786,54787,54790],{"class":78,"line":1718},[76,54788,54789],{"class":1927},"    .slider-footer",[76,54791,15539],{"class":86},[76,54793,54794,54796,54798,54801],{"class":78,"line":1723},[76,54795,54728],{"class":136},[76,54797,51406],{"class":86},[76,54799,54800],{"class":136},"absolute",[76,54802,1254],{"class":86},[76,54804,54805,54808,54810,54812],{"class":78,"line":1728},[76,54806,54807],{"class":136},"      left",[76,54809,51406],{"class":86},[76,54811,279],{"class":136},[76,54813,1254],{"class":86},[76,54815,54816,54819,54821,54823],{"class":78,"line":1742},[76,54817,54818],{"class":136},"      bottom",[76,54820,51406],{"class":86},[76,54822,279],{"class":136},[76,54824,1254],{"class":86},[76,54826,54827,54829,54831,54833,54835],{"class":78,"line":1747},[76,54828,54740],{"class":136},[76,54830,51406],{"class":86},[76,54832,399],{"class":136},[76,54834,416],{"class":82},[76,54836,1254],{"class":86},[76,54838,54839,54841,54843,54845,54847],{"class":78,"line":2542},[76,54840,54754],{"class":136},[76,54842,51406],{"class":86},[76,54844,663],{"class":136},[76,54846,416],{"class":82},[76,54848,1254],{"class":86},[76,54850,54851,54854,54856,54859],{"class":78,"line":2556},[76,54852,54853],{"class":136},"      background-color",[76,54855,51406],{"class":86},[76,54857,54858],{"class":136},"skyblue",[76,54860,1254],{"class":86},[76,54862,54863],{"class":78,"line":2564},[76,54864,2151],{"class":86},[76,54866,54867],{"class":78,"line":2569},[76,54868,2365],{"emptyLinePlaceholder":2364},[76,54870,54871,54873,54875],{"class":78,"line":2575},[76,54872,54789],{"class":1927},[76,54874,6792],{"class":51269},[76,54876,15539],{"class":86},[76,54878,54879,54881,54883,54885],{"class":78,"line":2581},[76,54880,54728],{"class":136},[76,54882,51406],{"class":86},[76,54884,54800],{"class":136},[76,54886,1254],{"class":86},[76,54888,54889,54892,54894,54896,54898],{"class":78,"line":2586},[76,54890,54891],{"class":136},"      font-size",[76,54893,51406],{"class":86},[76,54895,989],{"class":136},[76,54897,51461],{"class":82},[76,54899,1254],{"class":86},[76,54901,54902,54904,54906,54908,54910],{"class":78,"line":7915},[76,54903,54807],{"class":136},[76,54905,51406],{"class":86},[76,54907,788],{"class":136},[76,54909,51461],{"class":82},[76,54911,1254],{"class":86},[76,54913,54914,54917,54919,54921,54923],{"class":78,"line":7939},[76,54915,54916],{"class":136},"      top",[76,54918,51406],{"class":86},[76,54920,407],{"class":136},[76,54922,51461],{"class":82},[76,54924,1254],{"class":86},[76,54926,54927],{"class":78,"line":7944},[76,54928,2151],{"class":86},[76,54930,54931],{"class":78,"line":7950},[76,54932,2365],{"emptyLinePlaceholder":2364},[76,54934,54935,54938],{"class":78,"line":7977},[76,54936,54937],{"class":51269},"    ul",[76,54939,15539],{"class":86},[76,54941,54942,54944,54946,54948],{"class":78,"line":7982},[76,54943,54728],{"class":136},[76,54945,51406],{"class":86},[76,54947,54800],{"class":136},[76,54949,1254],{"class":86},[76,54951,54952,54954,54956,54958,54960],{"class":78,"line":7988},[76,54953,54916],{"class":136},[76,54955,51406],{"class":86},[76,54957,869],{"class":136},[76,54959,51461],{"class":82},[76,54961,1254],{"class":86},[76,54963,54964,54966,54968,54970,54972],{"class":78,"line":8000},[76,54965,54807],{"class":136},[76,54967,51406],{"class":86},[76,54969,788],{"class":136},[76,54971,51461],{"class":82},[76,54973,1254],{"class":86},[76,54975,54976,54979,54981,54983],{"class":78,"line":8012},[76,54977,54978],{"class":136},"      display",[76,54980,51406],{"class":86},[76,54982,51446],{"class":136},[76,54984,1254],{"class":86},[76,54986,54987,54990,54992,54994],{"class":78,"line":8024},[76,54988,54989],{"class":136},"      justify-content",[76,54991,51406],{"class":86},[76,54993,51637],{"class":136},[76,54995,1254],{"class":86},[76,54997,54998,55000,55002,55004],{"class":78,"line":9683},[76,54999,54728],{"class":136},[76,55001,51406],{"class":86},[76,55003,54800],{"class":136},[76,55005,1254],{"class":86},[76,55007,55008,55010,55012,55014,55016],{"class":78,"line":9708},[76,55009,54740],{"class":136},[76,55011,51406],{"class":86},[76,55013,3957],{"class":136},[76,55015,51461],{"class":82},[76,55017,1254],{"class":86},[76,55019,55020,55022,55024,55026,55028],{"class":78,"line":9731},[76,55021,54754],{"class":136},[76,55023,51406],{"class":86},[76,55025,788],{"class":136},[76,55027,51461],{"class":82},[76,55029,1254],{"class":86},[76,55031,55032],{"class":78,"line":9755},[76,55033,2151],{"class":86},[76,55035,55036],{"class":78,"line":9760},[76,55037,2365],{"emptyLinePlaceholder":2364},[76,55039,55040,55042,55045],{"class":78,"line":9765},[76,55041,54937],{"class":51269},[76,55043,55044],{"class":51269}," li",[76,55046,15539],{"class":86},[76,55048,55049,55051,55053,55055,55057],{"class":78,"line":9770},[76,55050,54740],{"class":136},[76,55052,51406],{"class":86},[76,55054,788],{"class":136},[76,55056,51461],{"class":82},[76,55058,1254],{"class":86},[76,55060,55061,55063,55065,55067,55069],{"class":78,"line":9779},[76,55062,54754],{"class":136},[76,55064,51406],{"class":86},[76,55066,788],{"class":136},[76,55068,51461],{"class":82},[76,55070,1254],{"class":86},[76,55072,55073,55075,55077,55080,55082,55084,55086,55088,55090,55092,55094,55097],{"class":78,"line":9784},[76,55074,54853],{"class":136},[76,55076,51406],{"class":86},[76,55078,55079],{"class":136},"rgba",[76,55081,87],{"class":86},[76,55083,279],{"class":136},[76,55085,12402],{"class":86},[76,55087,279],{"class":136},[76,55089,12402],{"class":86},[76,55091,279],{"class":136},[76,55093,12402],{"class":86},[76,55095,55096],{"class":136},".4",[76,55098,2684],{"class":86},[76,55100,55101,55104,55106,55108,55110],{"class":78,"line":9790},[76,55102,55103],{"class":136},"      border-radius",[76,55105,51406],{"class":86},[76,55107,534],{"class":136},[76,55109,51461],{"class":82},[76,55111,1254],{"class":86},[76,55113,55114],{"class":78,"line":9811},[76,55115,2151],{"class":86},[76,55117,55118],{"class":78,"line":9817},[76,55119,2365],{"emptyLinePlaceholder":2364},[76,55121,55122,55125],{"class":78,"line":9831},[76,55123,55124],{"class":1927},"    .activate",[76,55126,15539],{"class":86},[76,55128,55129,55131,55133,55136],{"class":78,"line":9837},[76,55130,54853],{"class":136},[76,55132,51406],{"class":86},[76,55134,55135],{"class":136},"#f7f7f7",[76,55137,1254],{"class":86},[76,55139,55140],{"class":78,"line":9864},[76,55141,2151],{"class":86},[76,55143,55144,55146,55148],{"class":78,"line":9873},[76,55145,52386],{"class":86},[76,55147,5092],{"class":51269},[76,55149,51276],{"class":86},[76,55151,55152,55154,55156],{"class":78,"line":9879},[76,55153,51754],{"class":86},[76,55155,51303],{"class":51269},[76,55157,51276],{"class":86},[76,55159,55160],{"class":78,"line":9887},[76,55161,2365],{"emptyLinePlaceholder":2364},[76,55163,55164,55166,55168],{"class":78,"line":9892},[76,55165,998],{"class":86},[76,55167,51769],{"class":51269},[76,55169,51276],{"class":86},[76,55171,55172,55174,55176,55178,55180,55182],{"class":78,"line":16571},[76,55173,52113],{"class":86},[76,55175,51580],{"class":51269},[76,55177,53455],{"class":1927},[76,55179,133],{"class":86},[76,55181,53460],{"class":192},[76,55183,51276],{"class":86},[76,55185,55186,55188,55190,55192,55194,55197],{"class":78,"line":16577},[76,55187,51310],{"class":86},[76,55189,51580],{"class":51269},[76,55191,53455],{"class":1927},[76,55193,133],{"class":86},[76,55195,55196],{"class":192},"\"slider-wrapper\"",[76,55198,51276],{"class":86},[76,55200,55201,55204,55206,55209,55211,55214,55217,55219,55221],{"class":78,"line":16600},[76,55202,55203],{"class":86},"      \u003C",[76,55205,1426],{"class":51269},[76,55207,55208],{"class":1927}," src",[76,55210,133],{"class":86},[76,55212,55213],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[76,55215,55216],{"class":1927}," alt",[76,55218,133],{"class":86},[76,55220,7619],{"class":192},[76,55222,51276],{"class":86},[76,55224,55225,55227,55229],{"class":78,"line":16606},[76,55226,51745],{"class":86},[76,55228,51580],{"class":51269},[76,55230,51276],{"class":86},[76,55232,55233,55235,55237,55239,55241,55244],{"class":78,"line":16629},[76,55234,51310],{"class":86},[76,55236,51580],{"class":51269},[76,55238,53455],{"class":1927},[76,55240,133],{"class":86},[76,55242,55243],{"class":192},"\"slider-footer\"",[76,55245,51276],{"class":86},[76,55247,55248,55250,55252,55255,55257],{"class":78,"line":16643},[76,55249,55203],{"class":86},[76,55251,21],{"class":51269},[76,55253,55254],{"class":86},">对人类来说会不会太超前了?\u003C\u002F",[76,55256,21],{"class":51269},[76,55258,51276],{"class":86},[76,55260,55261,55263,55265],{"class":78,"line":16663},[76,55262,55203],{"class":86},[76,55264,1095],{"class":51269},[76,55266,51276],{"class":86},[76,55268,55269,55272,55274,55276,55278,55281,55284,55286],{"class":78,"line":16669},[76,55270,55271],{"class":86},"        \u003C",[76,55273,32],{"class":51269},[76,55275,53455],{"class":1927},[76,55277,133],{"class":86},[76,55279,55280],{"class":192},"\"activate\"",[76,55282,55283],{"class":86},">\u003C\u002F",[76,55285,32],{"class":51269},[76,55287,51276],{"class":86},[76,55289,55290,55292,55294,55296,55298],{"class":78,"line":16680},[76,55291,55271],{"class":86},[76,55293,32],{"class":51269},[76,55295,55283],{"class":86},[76,55297,32],{"class":51269},[76,55299,51276],{"class":86},[76,55301,55302,55304,55306,55308,55310],{"class":78,"line":16703},[76,55303,55271],{"class":86},[76,55305,32],{"class":51269},[76,55307,55283],{"class":86},[76,55309,32],{"class":51269},[76,55311,51276],{"class":86},[76,55313,55314,55316,55318,55320,55322],{"class":78,"line":16725},[76,55315,55271],{"class":86},[76,55317,32],{"class":51269},[76,55319,55283],{"class":86},[76,55321,32],{"class":51269},[76,55323,51276],{"class":86},[76,55325,55326,55328,55330,55332,55334],{"class":78,"line":16730},[76,55327,55271],{"class":86},[76,55329,32],{"class":51269},[76,55331,55283],{"class":86},[76,55333,32],{"class":51269},[76,55335,51276],{"class":86},[76,55337,55338,55340,55342,55344,55346],{"class":78,"line":16736},[76,55339,55271],{"class":86},[76,55341,32],{"class":51269},[76,55343,55283],{"class":86},[76,55345,32],{"class":51269},[76,55347,51276],{"class":86},[76,55349,55350,55352,55354,55356,55358],{"class":78,"line":16750},[76,55351,55271],{"class":86},[76,55353,32],{"class":51269},[76,55355,55283],{"class":86},[76,55357,32],{"class":51269},[76,55359,51276],{"class":86},[76,55361,55362,55364,55366,55368,55370],{"class":78,"line":16763},[76,55363,55271],{"class":86},[76,55365,32],{"class":51269},[76,55367,55283],{"class":86},[76,55369,32],{"class":51269},[76,55371,51276],{"class":86},[76,55373,55374,55377,55379],{"class":78,"line":16768},[76,55375,55376],{"class":86},"      \u003C\u002F",[76,55378,1095],{"class":51269},[76,55380,51276],{"class":86},[76,55382,55383,55385,55387],{"class":78,"line":16782},[76,55384,51745],{"class":86},[76,55386,51580],{"class":51269},[76,55388,51276],{"class":86},[76,55390,55391,55393,55395],{"class":78,"line":16787},[76,55392,52386],{"class":86},[76,55394,51580],{"class":51269},[76,55396,51276],{"class":86},[76,55398,55399,55401,55403],{"class":78,"line":16793},[76,55400,52113],{"class":86},[76,55402,51782],{"class":51269},[76,55404,51276],{"class":86},[76,55406,55407,55409,55412,55414],{"class":78,"line":16798},[76,55408,11188],{"class":82},[76,55410,55411],{"class":136}," arrImage",[76,55413,13531],{"class":82},[76,55415,55416],{"class":86}," [\n",[76,55418,55419,55422,55425,55428,55431,55434,55437],{"class":78,"line":16812},[76,55420,55421],{"class":86},"      { url: ",[76,55423,55424],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[76,55426,55427],{"class":86},", title: ",[76,55429,55430],{"class":192},"'对人类来说会不会太超前了?'",[76,55432,55433],{"class":86},", color: ",[76,55435,55436],{"class":192},"'rgba(100,67,68)'",[76,55438,55439],{"class":86}," },\n",[76,55441,55442,55444,55447,55449,55452,55454,55457],{"class":78,"line":16817},[76,55443,55421],{"class":86},[76,55445,55446],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[76,55448,55427],{"class":86},[76,55450,55451],{"class":192},"'开启剑与雪的黑暗传说!'",[76,55453,55433],{"class":86},[76,55455,55456],{"class":192},"'rgba(43,35,26)'",[76,55458,55439],{"class":86},[76,55460,55461,55463,55466,55468,55471,55473,55476],{"class":78,"line":16822},[76,55462,55421],{"class":86},[76,55464,55465],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[76,55467,55427],{"class":86},[76,55469,55470],{"class":192},"'真正的jo厨出现了!'",[76,55472,55433],{"class":86},[76,55474,55475],{"class":192},"'rgba(36,31,33)'",[76,55477,55439],{"class":86},[76,55479,55480,55482,55485,55487,55490,55492,55495],{"class":78,"line":16836},[76,55481,55421],{"class":86},[76,55483,55484],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[76,55486,55427],{"class":86},[76,55488,55489],{"class":192},"'李玉刚:让世界通过b站看到东方大国文化'",[76,55491,55433],{"class":86},[76,55493,55494],{"class":192},"'rgba(139,98,66)'",[76,55496,55439],{"class":86},[76,55498,55499,55501,55504,55506,55509,55511,55514],{"class":78,"line":16848},[76,55500,55421],{"class":86},[76,55502,55503],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[76,55505,55427],{"class":86},[76,55507,55508],{"class":192},"'快来分享你的寒假日常吧'",[76,55510,55433],{"class":86},[76,55512,55513],{"class":192},"'rgba(67,90,92)'",[76,55515,55439],{"class":86},[76,55517,55518,55520,55523,55525,55528,55530,55533],{"class":78,"line":16853},[76,55519,55421],{"class":86},[76,55521,55522],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[76,55524,55427],{"class":86},[76,55526,55527],{"class":192},"'哔哩哔哩小年YEAR'",[76,55529,55433],{"class":86},[76,55531,55532],{"class":192},"'rgba(166,131,143)'",[76,55534,55439],{"class":86},[76,55536,55537,55539,55542,55544,55547,55549,55552],{"class":78,"line":16866},[76,55538,55421],{"class":86},[76,55540,55541],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[76,55543,55427],{"class":86},[76,55545,55546],{"class":192},"'一站式解决你的电脑配置问题'",[76,55548,55433],{"class":86},[76,55550,55551],{"class":192},"'rgba(53,29,25)'",[76,55553,55439],{"class":86},[76,55555,55556,55558,55561,55563,55566,55568,55571],{"class":78,"line":16871},[76,55557,55421],{"class":86},[76,55559,55560],{"class":192},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[76,55562,55427],{"class":86},[76,55564,55565],{"class":192},"'谁不想和小猫咪贴贴呢?'",[76,55567,55433],{"class":86},[76,55569,55570],{"class":192},"'rgba(99,72,114)'",[76,55572,55573],{"class":86}," }\n",[76,55575,55576],{"class":78,"line":16876},[76,55577,53078],{"class":86},[76,55579,55580,55582,55585,55587,55589,55591,55593,55596],{"class":78,"line":16881},[76,55581,11188],{"class":82},[76,55583,55584],{"class":136}," img",[76,55586,13531],{"class":82},[76,55588,54365],{"class":86},[76,55590,54368],{"class":1927},[76,55592,87],{"class":86},[76,55594,55595],{"class":192},"'.slider-wrapper img'",[76,55597,93],{"class":86},[76,55599,55600,55602,55604,55606,55608,55610,55612,55615],{"class":78,"line":16894},[76,55601,11188],{"class":82},[76,55603,6792],{"class":136},[76,55605,13531],{"class":82},[76,55607,54365],{"class":86},[76,55609,54368],{"class":1927},[76,55611,87],{"class":86},[76,55613,55614],{"class":192},"'.slider-footer p'",[76,55616,93],{"class":86},[76,55618,55619,55621,55624,55626,55628,55630,55632,55635],{"class":78,"line":16899},[76,55620,11188],{"class":82},[76,55622,55623],{"class":136}," color",[76,55625,13531],{"class":82},[76,55627,54365],{"class":86},[76,55629,54368],{"class":1927},[76,55631,87],{"class":86},[76,55633,55634],{"class":192},"'.slider-footer'",[76,55636,93],{"class":86},[76,55638,55639,55641,55644,55646,55648,55651,55653,55656],{"class":78,"line":32602},[76,55640,11188],{"class":82},[76,55642,55643],{"class":136}," lis",[76,55645,13531],{"class":82},[76,55647,54365],{"class":86},[76,55649,55650],{"class":1927},"querySelectorAll",[76,55652,87],{"class":86},[76,55654,55655],{"class":192},"'.slider-footer ul li'",[76,55657,93],{"class":86},[76,55659,55660,55662,55664,55666],{"class":78,"line":32608},[76,55661,52188],{"class":82},[76,55663,9405],{"class":86},[76,55665,133],{"class":82},[76,55667,55668],{"class":136}," 1\n",[76,55670,55671,55673,55676,55678,55680,55682,55684],{"class":78,"line":32614},[76,55672,52188],{"class":82},[76,55674,55675],{"class":86}," timer ",[76,55677,133],{"class":82},[76,55679,54413],{"class":1927},[76,55681,87],{"class":86},[76,55683,54418],{"class":82},[76,55685,54421],{"class":86},[76,55687,55688,55691,55693],{"class":78,"line":32620},[76,55689,55690],{"class":86},"      img.src ",[76,55692,133],{"class":82},[76,55694,55695],{"class":86}," arrImage[i].url\n",[76,55697,55698,55701,55703],{"class":78,"line":32626},[76,55699,55700],{"class":86},"      p.innerHTML ",[76,55702,133],{"class":82},[76,55704,55705],{"class":86}," arrImage[i].title\n",[76,55707,55708,55711,55713],{"class":78,"line":32637},[76,55709,55710],{"class":86},"      color.style.backgroundColor ",[76,55712,133],{"class":82},[76,55714,55715],{"class":86}," arrImage[i].color\n",[76,55717,55718],{"class":78,"line":32643},[76,55719,55720],{"class":146},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[76,55722,55723],{"class":78,"line":32663},[76,55724,55725],{"class":146},"      \u002F\u002F li.classList.add('activate')\n",[76,55727,55728],{"class":78,"line":32669},[76,55729,55730],{"class":146},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[76,55732,55733],{"class":78,"line":32680},[76,55734,55735],{"class":146},"      \u002F\u002F lis[i].classList.remove('activate')\n",[76,55737,55738,55741,55743,55745,55748,55751,55754,55756,55759],{"class":78,"line":32686},[76,55739,55740],{"class":86},"      document.",[76,55742,54368],{"class":1927},[76,55744,87],{"class":86},[76,55746,55747],{"class":192},"'.activate'",[76,55749,55750],{"class":86},")?.classList.",[76,55752,55753],{"class":1927},"toggle",[76,55755,87],{"class":86},[76,55757,55758],{"class":192},"'activate'",[76,55760,93],{"class":86},[76,55762,55763,55766,55768,55770,55772],{"class":78,"line":32692},[76,55764,55765],{"class":86},"      lis[i].classList.",[76,55767,5301],{"class":1927},[76,55769,87],{"class":86},[76,55771,55758],{"class":192},[76,55773,93],{"class":86},[76,55775,55776],{"class":78,"line":32698},[76,55777,2365],{"emptyLinePlaceholder":2364},[76,55779,55780,55783,55785,55787,55789,55791,55793,55795,55798],{"class":78,"line":32704},[76,55781,55782],{"class":86},"      i ",[76,55784,133],{"class":82},[76,55786,54452],{"class":86},[76,55788,569],{"class":82},[76,55790,25087],{"class":136},[76,55792,13681],{"class":86},[76,55794,416],{"class":82},[76,55796,55797],{"class":86}," arrImage.",[76,55799,55800],{"class":136},"length\n",[76,55802,55803],{"class":78,"line":32710},[76,55804,2365],{"emptyLinePlaceholder":2364},[76,55806,55807,55809,55811],{"class":78,"line":32716},[76,55808,54504],{"class":86},[76,55810,6377],{"class":136},[76,55812,93],{"class":86},[76,55814,55815,55817,55819],{"class":78,"line":32722},[76,55816,52386],{"class":86},[76,55818,51782],{"class":51269},[76,55820,51276],{"class":86},[76,55822,55823,55825,55827],{"class":78,"line":32742},[76,55824,51754],{"class":86},[76,55826,51769],{"class":51269},[76,55828,51276],{"class":86},[76,55830,55831],{"class":78,"line":32748},[76,55832,2365],{"emptyLinePlaceholder":2364},[76,55834,55835,55837,55839],{"class":78,"line":32764},[76,55836,51754],{"class":86},[76,55838,50604],{"class":51269},[76,55840,51276],{"class":86},[21,55842,55843],{},[1426,55844],{"alt":71,"src":55845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[21,55847,55848],{},"?.就是短路保护,确保输出正常进行",[21,55850,55851],{},"不要忘记取余%,有时候可以用",[21,55853,55854],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[29,55856,55857],{"start":96},[32,55858,55859],{},"法2",[66,55861,55863],{"className":50602,"code":55862,"language":50604,"meta":71,"style":71},"\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",[73,55864,55865,55875,55889,55893,55901,55915,55935,55947,55955,55961,55971,55981,55985,55989,55995,56005,56009,56013,56019,56029,56041,56053,56067,56071,56075,56081,56091,56101,56111,56123,56135,56145,56149,56153,56161,56171,56183,56195,56207,56211,56215,56221,56231,56243,56255,56265,56275,56285,56297,56309,56313,56317,56325,56337,56349,56375,56387,56391,56395,56401,56411,56415,56423,56431,56435,56443,56457,56471,56491,56499,56513,56525,56533,56551,56563,56575,56587,56599,56611,56623,56635,56643,56651,56659,56667,56678,56694,56710,56726,56742,56758,56774,56790,56806,56810,56815,56833,56851,56861,56866,56871,56882,56888,56903,56912,56916,56921,56930,56935,56944,56949,56954,56959,56982,57012,57016,57024,57028,57036,57044,57048],{"__ignoreMap":71},[76,55866,55867,55869,55871,55873],{"class":78,"line":79},[76,55868,51266],{"class":86},[76,55870,51270],{"class":51269},[76,55872,51273],{"class":1927},[76,55874,51276],{"class":86},[76,55876,55877,55879,55881,55883,55885,55887],{"class":78,"line":96},[76,55878,998],{"class":86},[76,55880,50604],{"class":51269},[76,55882,51285],{"class":1927},[76,55884,133],{"class":86},[76,55886,51290],{"class":192},[76,55888,51276],{"class":86},[76,55890,55891],{"class":78,"line":1143},[76,55892,2365],{"emptyLinePlaceholder":2364},[76,55894,55895,55897,55899],{"class":78,"line":1158},[76,55896,998],{"class":86},[76,55898,51303],{"class":51269},[76,55900,51276],{"class":86},[76,55902,55903,55905,55907,55909,55911,55913],{"class":78,"line":1164},[76,55904,52113],{"class":86},[76,55906,51313],{"class":51269},[76,55908,51316],{"class":1927},[76,55910,133],{"class":86},[76,55912,51321],{"class":192},[76,55914,51276],{"class":86},[76,55916,55917,55919,55921,55923,55925,55927,55929,55931,55933],{"class":78,"line":1178},[76,55918,52113],{"class":86},[76,55920,51313],{"class":51269},[76,55922,14887],{"class":1927},[76,55924,133],{"class":86},[76,55926,51360],{"class":192},[76,55928,51340],{"class":1927},[76,55930,133],{"class":86},[76,55932,51367],{"class":192},[76,55934,51276],{"class":86},[76,55936,55937,55939,55941,55943,55945],{"class":78,"line":1184},[76,55938,52113],{"class":86},[76,55940,51376],{"class":51269},[76,55942,51379],{"class":86},[76,55944,51376],{"class":51269},[76,55946,51276],{"class":86},[76,55948,55949,55951,55953],{"class":78,"line":1275},[76,55950,52113],{"class":86},[76,55952,5092],{"class":51269},[76,55954,51276],{"class":86},[76,55956,55957,55959],{"class":78,"line":1281},[76,55958,6370],{"class":51269},[76,55960,15539],{"class":86},[76,55962,55963,55965,55967,55969],{"class":78,"line":1293},[76,55964,54664],{"class":136},[76,55966,51406],{"class":86},[76,55968,279],{"class":136},[76,55970,1254],{"class":86},[76,55972,55973,55975,55977,55979],{"class":78,"line":1576},[76,55974,54675],{"class":136},[76,55976,51406],{"class":86},[76,55978,279],{"class":136},[76,55980,1254],{"class":86},[76,55982,55983],{"class":78,"line":1581},[76,55984,2151],{"class":86},[76,55986,55987],{"class":78,"line":1587},[76,55988,2365],{"emptyLinePlaceholder":2364},[76,55990,55991,55993],{"class":78,"line":1592},[76,55992,54694],{"class":51269},[76,55994,15539],{"class":86},[76,55996,55997,55999,56001,56003],{"class":78,"line":1606},[76,55998,54701],{"class":136},[76,56000,51406],{"class":86},[76,56002,54706],{"class":136},[76,56004,1254],{"class":86},[76,56006,56007],{"class":78,"line":1611},[76,56008,2151],{"class":86},[76,56010,56011],{"class":78,"line":1617},[76,56012,2365],{"emptyLinePlaceholder":2364},[76,56014,56015,56017],{"class":78,"line":1638},[76,56016,54721],{"class":1927},[76,56018,15539],{"class":86},[76,56020,56021,56023,56025,56027],{"class":78,"line":1643},[76,56022,54728],{"class":136},[76,56024,51406],{"class":86},[76,56026,54733],{"class":136},[76,56028,1254],{"class":86},[76,56030,56031,56033,56035,56037,56039],{"class":78,"line":1657},[76,56032,54740],{"class":136},[76,56034,51406],{"class":86},[76,56036,54745],{"class":136},[76,56038,51461],{"class":82},[76,56040,1254],{"class":86},[76,56042,56043,56045,56047,56049,56051],{"class":78,"line":1662},[76,56044,54754],{"class":136},[76,56046,51406],{"class":86},[76,56048,1503],{"class":136},[76,56050,51461],{"class":82},[76,56052,1254],{"class":86},[76,56054,56055,56057,56059,56061,56063,56065],{"class":78,"line":1691},[76,56056,54675],{"class":136},[76,56058,51406],{"class":86},[76,56060,399],{"class":136},[76,56062,51461],{"class":82},[76,56064,51525],{"class":136},[76,56066,1254],{"class":86},[76,56068,56069],{"class":78,"line":1696},[76,56070,2151],{"class":86},[76,56072,56073],{"class":78,"line":1713},[76,56074,2365],{"emptyLinePlaceholder":2364},[76,56076,56077,56079],{"class":78,"line":1718},[76,56078,54789],{"class":1927},[76,56080,15539],{"class":86},[76,56082,56083,56085,56087,56089],{"class":78,"line":1723},[76,56084,54728],{"class":136},[76,56086,51406],{"class":86},[76,56088,54800],{"class":136},[76,56090,1254],{"class":86},[76,56092,56093,56095,56097,56099],{"class":78,"line":1728},[76,56094,54807],{"class":136},[76,56096,51406],{"class":86},[76,56098,279],{"class":136},[76,56100,1254],{"class":86},[76,56102,56103,56105,56107,56109],{"class":78,"line":1742},[76,56104,54818],{"class":136},[76,56106,51406],{"class":86},[76,56108,279],{"class":136},[76,56110,1254],{"class":86},[76,56112,56113,56115,56117,56119,56121],{"class":78,"line":1747},[76,56114,54740],{"class":136},[76,56116,51406],{"class":86},[76,56118,399],{"class":136},[76,56120,416],{"class":82},[76,56122,1254],{"class":86},[76,56124,56125,56127,56129,56131,56133],{"class":78,"line":2542},[76,56126,54754],{"class":136},[76,56128,51406],{"class":86},[76,56130,663],{"class":136},[76,56132,416],{"class":82},[76,56134,1254],{"class":86},[76,56136,56137,56139,56141,56143],{"class":78,"line":2556},[76,56138,54853],{"class":136},[76,56140,51406],{"class":86},[76,56142,54858],{"class":136},[76,56144,1254],{"class":86},[76,56146,56147],{"class":78,"line":2564},[76,56148,2151],{"class":86},[76,56150,56151],{"class":78,"line":2569},[76,56152,2365],{"emptyLinePlaceholder":2364},[76,56154,56155,56157,56159],{"class":78,"line":2575},[76,56156,54789],{"class":1927},[76,56158,6792],{"class":51269},[76,56160,15539],{"class":86},[76,56162,56163,56165,56167,56169],{"class":78,"line":2581},[76,56164,54728],{"class":136},[76,56166,51406],{"class":86},[76,56168,54800],{"class":136},[76,56170,1254],{"class":86},[76,56172,56173,56175,56177,56179,56181],{"class":78,"line":2586},[76,56174,54891],{"class":136},[76,56176,51406],{"class":86},[76,56178,989],{"class":136},[76,56180,51461],{"class":82},[76,56182,1254],{"class":86},[76,56184,56185,56187,56189,56191,56193],{"class":78,"line":7915},[76,56186,54807],{"class":136},[76,56188,51406],{"class":86},[76,56190,788],{"class":136},[76,56192,51461],{"class":82},[76,56194,1254],{"class":86},[76,56196,56197,56199,56201,56203,56205],{"class":78,"line":7939},[76,56198,54916],{"class":136},[76,56200,51406],{"class":86},[76,56202,407],{"class":136},[76,56204,51461],{"class":82},[76,56206,1254],{"class":86},[76,56208,56209],{"class":78,"line":7944},[76,56210,2151],{"class":86},[76,56212,56213],{"class":78,"line":7950},[76,56214,2365],{"emptyLinePlaceholder":2364},[76,56216,56217,56219],{"class":78,"line":7977},[76,56218,54937],{"class":51269},[76,56220,15539],{"class":86},[76,56222,56223,56225,56227,56229],{"class":78,"line":7982},[76,56224,54728],{"class":136},[76,56226,51406],{"class":86},[76,56228,54800],{"class":136},[76,56230,1254],{"class":86},[76,56232,56233,56235,56237,56239,56241],{"class":78,"line":7988},[76,56234,54916],{"class":136},[76,56236,51406],{"class":86},[76,56238,869],{"class":136},[76,56240,51461],{"class":82},[76,56242,1254],{"class":86},[76,56244,56245,56247,56249,56251,56253],{"class":78,"line":8000},[76,56246,54807],{"class":136},[76,56248,51406],{"class":86},[76,56250,788],{"class":136},[76,56252,51461],{"class":82},[76,56254,1254],{"class":86},[76,56256,56257,56259,56261,56263],{"class":78,"line":8012},[76,56258,54978],{"class":136},[76,56260,51406],{"class":86},[76,56262,51446],{"class":136},[76,56264,1254],{"class":86},[76,56266,56267,56269,56271,56273],{"class":78,"line":8024},[76,56268,54989],{"class":136},[76,56270,51406],{"class":86},[76,56272,51637],{"class":136},[76,56274,1254],{"class":86},[76,56276,56277,56279,56281,56283],{"class":78,"line":9683},[76,56278,54728],{"class":136},[76,56280,51406],{"class":86},[76,56282,54800],{"class":136},[76,56284,1254],{"class":86},[76,56286,56287,56289,56291,56293,56295],{"class":78,"line":9708},[76,56288,54740],{"class":136},[76,56290,51406],{"class":86},[76,56292,3957],{"class":136},[76,56294,51461],{"class":82},[76,56296,1254],{"class":86},[76,56298,56299,56301,56303,56305,56307],{"class":78,"line":9731},[76,56300,54754],{"class":136},[76,56302,51406],{"class":86},[76,56304,788],{"class":136},[76,56306,51461],{"class":82},[76,56308,1254],{"class":86},[76,56310,56311],{"class":78,"line":9755},[76,56312,2151],{"class":86},[76,56314,56315],{"class":78,"line":9760},[76,56316,2365],{"emptyLinePlaceholder":2364},[76,56318,56319,56321,56323],{"class":78,"line":9765},[76,56320,54937],{"class":51269},[76,56322,55044],{"class":51269},[76,56324,15539],{"class":86},[76,56326,56327,56329,56331,56333,56335],{"class":78,"line":9770},[76,56328,54740],{"class":136},[76,56330,51406],{"class":86},[76,56332,788],{"class":136},[76,56334,51461],{"class":82},[76,56336,1254],{"class":86},[76,56338,56339,56341,56343,56345,56347],{"class":78,"line":9779},[76,56340,54754],{"class":136},[76,56342,51406],{"class":86},[76,56344,788],{"class":136},[76,56346,51461],{"class":82},[76,56348,1254],{"class":86},[76,56350,56351,56353,56355,56357,56359,56361,56363,56365,56367,56369,56371,56373],{"class":78,"line":9784},[76,56352,54853],{"class":136},[76,56354,51406],{"class":86},[76,56356,55079],{"class":136},[76,56358,87],{"class":86},[76,56360,279],{"class":136},[76,56362,12402],{"class":86},[76,56364,279],{"class":136},[76,56366,12402],{"class":86},[76,56368,279],{"class":136},[76,56370,12402],{"class":86},[76,56372,55096],{"class":136},[76,56374,2684],{"class":86},[76,56376,56377,56379,56381,56383,56385],{"class":78,"line":9790},[76,56378,55103],{"class":136},[76,56380,51406],{"class":86},[76,56382,534],{"class":136},[76,56384,51461],{"class":82},[76,56386,1254],{"class":86},[76,56388,56389],{"class":78,"line":9811},[76,56390,2151],{"class":86},[76,56392,56393],{"class":78,"line":9817},[76,56394,2365],{"emptyLinePlaceholder":2364},[76,56396,56397,56399],{"class":78,"line":9831},[76,56398,55124],{"class":1927},[76,56400,15539],{"class":86},[76,56402,56403,56405,56407,56409],{"class":78,"line":9837},[76,56404,54853],{"class":136},[76,56406,51406],{"class":86},[76,56408,55135],{"class":136},[76,56410,1254],{"class":86},[76,56412,56413],{"class":78,"line":9864},[76,56414,2151],{"class":86},[76,56416,56417,56419,56421],{"class":78,"line":9873},[76,56418,52386],{"class":86},[76,56420,5092],{"class":51269},[76,56422,51276],{"class":86},[76,56424,56425,56427,56429],{"class":78,"line":9879},[76,56426,51754],{"class":86},[76,56428,51303],{"class":51269},[76,56430,51276],{"class":86},[76,56432,56433],{"class":78,"line":9887},[76,56434,2365],{"emptyLinePlaceholder":2364},[76,56436,56437,56439,56441],{"class":78,"line":9892},[76,56438,998],{"class":86},[76,56440,51769],{"class":51269},[76,56442,51276],{"class":86},[76,56444,56445,56447,56449,56451,56453,56455],{"class":78,"line":16571},[76,56446,52113],{"class":86},[76,56448,51580],{"class":51269},[76,56450,53455],{"class":1927},[76,56452,133],{"class":86},[76,56454,53460],{"class":192},[76,56456,51276],{"class":86},[76,56458,56459,56461,56463,56465,56467,56469],{"class":78,"line":16577},[76,56460,51310],{"class":86},[76,56462,51580],{"class":51269},[76,56464,53455],{"class":1927},[76,56466,133],{"class":86},[76,56468,55196],{"class":192},[76,56470,51276],{"class":86},[76,56472,56473,56475,56477,56479,56481,56483,56485,56487,56489],{"class":78,"line":16600},[76,56474,55203],{"class":86},[76,56476,1426],{"class":51269},[76,56478,55208],{"class":1927},[76,56480,133],{"class":86},[76,56482,55213],{"class":192},[76,56484,55216],{"class":1927},[76,56486,133],{"class":86},[76,56488,7619],{"class":192},[76,56490,51276],{"class":86},[76,56492,56493,56495,56497],{"class":78,"line":16606},[76,56494,51745],{"class":86},[76,56496,51580],{"class":51269},[76,56498,51276],{"class":86},[76,56500,56501,56503,56505,56507,56509,56511],{"class":78,"line":16629},[76,56502,51310],{"class":86},[76,56504,51580],{"class":51269},[76,56506,53455],{"class":1927},[76,56508,133],{"class":86},[76,56510,55243],{"class":192},[76,56512,51276],{"class":86},[76,56514,56515,56517,56519,56521,56523],{"class":78,"line":16643},[76,56516,55203],{"class":86},[76,56518,21],{"class":51269},[76,56520,55254],{"class":86},[76,56522,21],{"class":51269},[76,56524,51276],{"class":86},[76,56526,56527,56529,56531],{"class":78,"line":16663},[76,56528,55203],{"class":86},[76,56530,1095],{"class":51269},[76,56532,51276],{"class":86},[76,56534,56535,56537,56539,56541,56543,56545,56547,56549],{"class":78,"line":16669},[76,56536,55271],{"class":86},[76,56538,32],{"class":51269},[76,56540,53455],{"class":1927},[76,56542,133],{"class":86},[76,56544,55280],{"class":192},[76,56546,55283],{"class":86},[76,56548,32],{"class":51269},[76,56550,51276],{"class":86},[76,56552,56553,56555,56557,56559,56561],{"class":78,"line":16680},[76,56554,55271],{"class":86},[76,56556,32],{"class":51269},[76,56558,55283],{"class":86},[76,56560,32],{"class":51269},[76,56562,51276],{"class":86},[76,56564,56565,56567,56569,56571,56573],{"class":78,"line":16703},[76,56566,55271],{"class":86},[76,56568,32],{"class":51269},[76,56570,55283],{"class":86},[76,56572,32],{"class":51269},[76,56574,51276],{"class":86},[76,56576,56577,56579,56581,56583,56585],{"class":78,"line":16725},[76,56578,55271],{"class":86},[76,56580,32],{"class":51269},[76,56582,55283],{"class":86},[76,56584,32],{"class":51269},[76,56586,51276],{"class":86},[76,56588,56589,56591,56593,56595,56597],{"class":78,"line":16730},[76,56590,55271],{"class":86},[76,56592,32],{"class":51269},[76,56594,55283],{"class":86},[76,56596,32],{"class":51269},[76,56598,51276],{"class":86},[76,56600,56601,56603,56605,56607,56609],{"class":78,"line":16736},[76,56602,55271],{"class":86},[76,56604,32],{"class":51269},[76,56606,55283],{"class":86},[76,56608,32],{"class":51269},[76,56610,51276],{"class":86},[76,56612,56613,56615,56617,56619,56621],{"class":78,"line":16750},[76,56614,55271],{"class":86},[76,56616,32],{"class":51269},[76,56618,55283],{"class":86},[76,56620,32],{"class":51269},[76,56622,51276],{"class":86},[76,56624,56625,56627,56629,56631,56633],{"class":78,"line":16763},[76,56626,55271],{"class":86},[76,56628,32],{"class":51269},[76,56630,55283],{"class":86},[76,56632,32],{"class":51269},[76,56634,51276],{"class":86},[76,56636,56637,56639,56641],{"class":78,"line":16768},[76,56638,55376],{"class":86},[76,56640,1095],{"class":51269},[76,56642,51276],{"class":86},[76,56644,56645,56647,56649],{"class":78,"line":16782},[76,56646,51745],{"class":86},[76,56648,51580],{"class":51269},[76,56650,51276],{"class":86},[76,56652,56653,56655,56657],{"class":78,"line":16787},[76,56654,52386],{"class":86},[76,56656,51580],{"class":51269},[76,56658,51276],{"class":86},[76,56660,56661,56663,56665],{"class":78,"line":16793},[76,56662,52113],{"class":86},[76,56664,51782],{"class":51269},[76,56666,51276],{"class":86},[76,56668,56669,56671,56674,56676],{"class":78,"line":16798},[76,56670,11188],{"class":82},[76,56672,56673],{"class":136}," sliderData",[76,56675,13531],{"class":82},[76,56677,55416],{"class":86},[76,56679,56680,56682,56684,56686,56688,56690,56692],{"class":78,"line":16812},[76,56681,55421],{"class":86},[76,56683,55424],{"class":192},[76,56685,55427],{"class":86},[76,56687,55430],{"class":192},[76,56689,55433],{"class":86},[76,56691,55436],{"class":192},[76,56693,55439],{"class":86},[76,56695,56696,56698,56700,56702,56704,56706,56708],{"class":78,"line":16817},[76,56697,55421],{"class":86},[76,56699,55446],{"class":192},[76,56701,55427],{"class":86},[76,56703,55451],{"class":192},[76,56705,55433],{"class":86},[76,56707,55456],{"class":192},[76,56709,55439],{"class":86},[76,56711,56712,56714,56716,56718,56720,56722,56724],{"class":78,"line":16822},[76,56713,55421],{"class":86},[76,56715,55465],{"class":192},[76,56717,55427],{"class":86},[76,56719,55470],{"class":192},[76,56721,55433],{"class":86},[76,56723,55475],{"class":192},[76,56725,55439],{"class":86},[76,56727,56728,56730,56732,56734,56736,56738,56740],{"class":78,"line":16836},[76,56729,55421],{"class":86},[76,56731,55484],{"class":192},[76,56733,55427],{"class":86},[76,56735,55489],{"class":192},[76,56737,55433],{"class":86},[76,56739,55494],{"class":192},[76,56741,55439],{"class":86},[76,56743,56744,56746,56748,56750,56752,56754,56756],{"class":78,"line":16848},[76,56745,55421],{"class":86},[76,56747,55503],{"class":192},[76,56749,55427],{"class":86},[76,56751,55508],{"class":192},[76,56753,55433],{"class":86},[76,56755,55513],{"class":192},[76,56757,55439],{"class":86},[76,56759,56760,56762,56764,56766,56768,56770,56772],{"class":78,"line":16853},[76,56761,55421],{"class":86},[76,56763,55522],{"class":192},[76,56765,55427],{"class":86},[76,56767,55527],{"class":192},[76,56769,55433],{"class":86},[76,56771,55532],{"class":192},[76,56773,55439],{"class":86},[76,56775,56776,56778,56780,56782,56784,56786,56788],{"class":78,"line":16866},[76,56777,55421],{"class":86},[76,56779,55541],{"class":192},[76,56781,55427],{"class":86},[76,56783,55546],{"class":192},[76,56785,55433],{"class":86},[76,56787,55551],{"class":192},[76,56789,55439],{"class":86},[76,56791,56792,56794,56796,56798,56800,56802,56804],{"class":78,"line":16871},[76,56793,55421],{"class":86},[76,56795,55560],{"class":192},[76,56797,55427],{"class":86},[76,56799,55565],{"class":192},[76,56801,55433],{"class":86},[76,56803,55570],{"class":192},[76,56805,55573],{"class":86},[76,56807,56808],{"class":78,"line":16876},[76,56809,53078],{"class":86},[76,56811,56812],{"class":78,"line":16881},[76,56813,56814],{"class":146},"    \u002F\u002F 1.获取元素\n",[76,56816,56817,56819,56821,56823,56825,56827,56829,56831],{"class":78,"line":16894},[76,56818,11188],{"class":82},[76,56820,55584],{"class":136},[76,56822,13531],{"class":82},[76,56824,54365],{"class":86},[76,56826,54368],{"class":1927},[76,56828,87],{"class":86},[76,56830,55595],{"class":192},[76,56832,93],{"class":86},[76,56834,56835,56837,56839,56841,56843,56845,56847,56849],{"class":78,"line":16899},[76,56836,11188],{"class":82},[76,56838,6792],{"class":136},[76,56840,13531],{"class":82},[76,56842,54365],{"class":86},[76,56844,54368],{"class":1927},[76,56846,87],{"class":86},[76,56848,55614],{"class":192},[76,56850,93],{"class":86},[76,56852,56853,56855,56857,56859],{"class":78,"line":32602},[76,56854,52188],{"class":82},[76,56856,9405],{"class":86},[76,56858,133],{"class":82},[76,56860,47302],{"class":136},[76,56862,56863],{"class":78,"line":32608},[76,56864,56865],{"class":146},"    \u002F\u002F 2.开启定时器\n",[76,56867,56868],{"class":78,"line":32614},[76,56869,56870],{"class":146},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[76,56872,56873,56876,56878,56880],{"class":78,"line":32620},[76,56874,56875],{"class":1927},"    setInterval",[76,56877,87],{"class":86},[76,56879,54418],{"class":82},[76,56881,54421],{"class":86},[76,56883,56884,56886],{"class":78,"line":32626},[76,56885,54426],{"class":86},[76,56887,2667],{"class":82},[76,56889,56890,56892,56894,56896,56899,56901],{"class":78,"line":32637},[76,56891,54449],{"class":82},[76,56893,54452],{"class":86},[76,56895,1674],{"class":82},[76,56897,56898],{"class":86}," sliderData.",[76,56900,51937],{"class":136},[76,56902,12409],{"class":86},[76,56904,56905,56908,56910],{"class":78,"line":32643},[76,56906,56907],{"class":86},"        i ",[76,56909,133],{"class":82},[76,56911,47302],{"class":136},[76,56913,56914],{"class":78,"line":32663},[76,56915,52367],{"class":86},[76,56917,56918],{"class":78,"line":32669},[76,56919,56920],{"class":146},"      \u002F\u002F 更换图片路径\n",[76,56922,56923,56925,56927],{"class":78,"line":32680},[76,56924,55690],{"class":86},[76,56926,133],{"class":82},[76,56928,56929],{"class":86}," sliderData[i].url\n",[76,56931,56932],{"class":78,"line":32686},[76,56933,56934],{"class":146},"      \u002F\u002F 把文字写到p里面\n",[76,56936,56937,56939,56941],{"class":78,"line":32692},[76,56938,55700],{"class":86},[76,56940,133],{"class":82},[76,56942,56943],{"class":86}," sliderData[i].title\n",[76,56945,56946],{"class":78,"line":32698},[76,56947,56948],{"class":146},"      \u002F\u002F 小圆点\n",[76,56950,56951],{"class":78,"line":32704},[76,56952,56953],{"class":146},"      \u002F\u002F 先删除以前的active\n",[76,56955,56956],{"class":78,"line":32710},[76,56957,56958],{"class":146},"      \u002F\u002F 只让当前li添加active\n",[76,56960,56961,56963,56965,56967,56970,56973,56976,56978,56980],{"class":78,"line":32716},[76,56962,55740],{"class":86},[76,56964,54368],{"class":1927},[76,56966,87],{"class":86},[76,56968,56969],{"class":192},"'.slider-footer .activate'",[76,56971,56972],{"class":86},").classList.",[76,56974,56975],{"class":1927},"remove",[76,56977,87],{"class":86},[76,56979,55758],{"class":192},[76,56981,93],{"class":86},[76,56983,56984,56986,56988,56990,56993,56995,56997,56999,57002,57004,57006,57008,57010],{"class":78,"line":32722},[76,56985,55740],{"class":86},[76,56987,54368],{"class":1927},[76,56989,87],{"class":86},[76,56991,56992],{"class":192},"`.slider-footer ul li:nth-child(${",[76,56994,529],{"class":86},[76,56996,45535],{"class":82},[76,56998,25087],{"class":136},[76,57000,57001],{"class":192},"})`",[76,57003,56972],{"class":86},[76,57005,5301],{"class":1927},[76,57007,87],{"class":86},[76,57009,55758],{"class":192},[76,57011,93],{"class":86},[76,57013,57014],{"class":78,"line":32742},[76,57015,2365],{"emptyLinePlaceholder":2364},[76,57017,57018,57020,57022],{"class":78,"line":32748},[76,57019,54504],{"class":86},[76,57021,6377],{"class":136},[76,57023,93],{"class":86},[76,57025,57026],{"class":78,"line":32764},[76,57027,2365],{"emptyLinePlaceholder":2364},[76,57029,57030,57032,57034],{"class":78,"line":32770},[76,57031,52386],{"class":86},[76,57033,51782],{"class":51269},[76,57035,51276],{"class":86},[76,57037,57038,57040,57042],{"class":78,"line":32784},[76,57039,51754],{"class":86},[76,57041,51769],{"class":51269},[76,57043,51276],{"class":86},[76,57045,57046],{"class":78,"line":32790},[76,57047,2365],{"emptyLinePlaceholder":2364},[76,57049,57050,57052,57054],{"class":78,"line":32805},[76,57051,51754],{"class":86},[76,57053,50604],{"class":51269},[76,57055,51276],{"class":86},[46,57057,57059],{"id":57058},"_317-重要知识点","3.1.7 重要知识点",[21,57061,57062,57063],{},"浏览器在渲染文本时， ",[237,57064,57065],{},"没有空格或换行符就没有“断行点”",[21,57067,57068],{},[1426,57069],{"alt":71,"src":57070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[21,57072,57073],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[21,57075,57076],{},[1426,57077],{"alt":71,"src":57078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[21,57080,57081],{},[1426,57082],{"alt":71,"src":57083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[16,57085,57087],{"id":57086},"_32-dom事件基础","3.2 DOM事件基础",[46,57089,57091],{"id":57090},"_321-事件监听","3.2.1 事件监听",[21,57093,57094],{},[1426,57095],{"alt":71,"src":57096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[21,57098,57099],{},"事件监听有响应的发生",[21,57101,57102],{},[1426,57103],{"alt":71,"src":57104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[21,57106,57107],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[21,57109,57110],{},"对于有名函数,要执行的函数名后边不要加()",[46,57112,57114],{"id":57113},"_322-随机点名案例","3.2.2 随机点名案例",[66,57116,57118],{"className":50602,"code":57117,"language":50604,"meta":71,"style":71},"\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",[73,57119,57120,57130,57144,57148,57156,57170,57190,57202,57210,57216,57226,57236,57240,57244,57251,57262,57266,57270,57276,57288,57302,57312,57324,57337,57341,57345,57352,57356,57369,57381,57393,57397,57401,57405,57412,57422,57426,57430,57439,57451,57463,57478,57482,57490,57498,57502,57510,57523,57537,57550,57570,57578,57593,57613,57633,57641,57645,57653,57658,57694,57714,57719,57738,57743,57754,57759,57770,57775,57794,57809,57814,57840,57850,57859,57864,57880,57885,57890,57895,57910,57914,57918,57923,57942,57959,57967,57972,57987,57991,57995,58003,58011,58015],{"__ignoreMap":71},[76,57121,57122,57124,57126,57128],{"class":78,"line":79},[76,57123,51266],{"class":86},[76,57125,51270],{"class":51269},[76,57127,51273],{"class":1927},[76,57129,51276],{"class":86},[76,57131,57132,57134,57136,57138,57140,57142],{"class":78,"line":96},[76,57133,998],{"class":86},[76,57135,50604],{"class":51269},[76,57137,51285],{"class":1927},[76,57139,133],{"class":86},[76,57141,51290],{"class":192},[76,57143,51276],{"class":86},[76,57145,57146],{"class":78,"line":1143},[76,57147,2365],{"emptyLinePlaceholder":2364},[76,57149,57150,57152,57154],{"class":78,"line":1158},[76,57151,998],{"class":86},[76,57153,51303],{"class":51269},[76,57155,51276],{"class":86},[76,57157,57158,57160,57162,57164,57166,57168],{"class":78,"line":1164},[76,57159,52113],{"class":86},[76,57161,51313],{"class":51269},[76,57163,51316],{"class":1927},[76,57165,133],{"class":86},[76,57167,51321],{"class":192},[76,57169,51276],{"class":86},[76,57171,57172,57174,57176,57178,57180,57182,57184,57186,57188],{"class":78,"line":1178},[76,57173,52113],{"class":86},[76,57175,51313],{"class":51269},[76,57177,14887],{"class":1927},[76,57179,133],{"class":86},[76,57181,51360],{"class":192},[76,57183,51340],{"class":1927},[76,57185,133],{"class":86},[76,57187,51367],{"class":192},[76,57189,51276],{"class":86},[76,57191,57192,57194,57196,57198,57200],{"class":78,"line":1184},[76,57193,52113],{"class":86},[76,57195,51376],{"class":51269},[76,57197,51379],{"class":86},[76,57199,51376],{"class":51269},[76,57201,51276],{"class":86},[76,57203,57204,57206,57208],{"class":78,"line":1275},[76,57205,52113],{"class":86},[76,57207,5092],{"class":51269},[76,57209,51276],{"class":86},[76,57211,57212,57214],{"class":78,"line":1281},[76,57213,6370],{"class":51269},[76,57215,15539],{"class":86},[76,57217,57218,57220,57222,57224],{"class":78,"line":1293},[76,57219,54675],{"class":136},[76,57221,51406],{"class":86},[76,57223,279],{"class":136},[76,57225,1254],{"class":86},[76,57227,57228,57230,57232,57234],{"class":78,"line":1576},[76,57229,54664],{"class":136},[76,57231,51406],{"class":86},[76,57233,279],{"class":136},[76,57235,1254],{"class":86},[76,57237,57238],{"class":78,"line":1581},[76,57239,2151],{"class":86},[76,57241,57242],{"class":78,"line":1587},[76,57243,2365],{"emptyLinePlaceholder":2364},[76,57245,57246,57249],{"class":78,"line":1592},[76,57247,57248],{"class":51269},"    h2",[76,57250,15539],{"class":86},[76,57252,57253,57256,57258,57260],{"class":78,"line":1606},[76,57254,57255],{"class":136},"      text-align",[76,57257,51406],{"class":86},[76,57259,51561],{"class":136},[76,57261,1254],{"class":86},[76,57263,57264],{"class":78,"line":1611},[76,57265,2151],{"class":86},[76,57267,57268],{"class":78,"line":1617},[76,57269,2365],{"emptyLinePlaceholder":2364},[76,57271,57272,57274],{"class":78,"line":1638},[76,57273,54721],{"class":1927},[76,57275,15539],{"class":86},[76,57277,57278,57280,57282,57284,57286],{"class":78,"line":1643},[76,57279,54740],{"class":136},[76,57281,51406],{"class":86},[76,57283,1503],{"class":136},[76,57285,51461],{"class":82},[76,57287,1254],{"class":86},[76,57289,57290,57292,57294,57296,57298,57300],{"class":78,"line":1657},[76,57291,54675],{"class":136},[76,57293,51406],{"class":86},[76,57295,744],{"class":136},[76,57297,51461],{"class":82},[76,57299,51525],{"class":136},[76,57301,1254],{"class":86},[76,57303,57304,57306,57308,57310],{"class":78,"line":1662},[76,57305,54978],{"class":136},[76,57307,51406],{"class":86},[76,57309,51446],{"class":136},[76,57311,1254],{"class":86},[76,57313,57314,57316,57318,57320,57322],{"class":78,"line":1691},[76,57315,54891],{"class":136},[76,57317,51406],{"class":86},[76,57319,913],{"class":136},[76,57321,51461],{"class":82},[76,57323,1254],{"class":86},[76,57325,57326,57329,57331,57333,57335],{"class":78,"line":1696},[76,57327,57328],{"class":136},"      line-height",[76,57330,51406],{"class":86},[76,57332,489],{"class":136},[76,57334,51461],{"class":82},[76,57336,1254],{"class":86},[76,57338,57339],{"class":78,"line":1713},[76,57340,2151],{"class":86},[76,57342,57343],{"class":78,"line":1718},[76,57344,2365],{"emptyLinePlaceholder":2364},[76,57346,57347,57350],{"class":78,"line":1723},[76,57348,57349],{"class":1927},"    .qs",[76,57351,15539],{"class":86},[76,57353,57354],{"class":78,"line":1728},[76,57355,2365],{"emptyLinePlaceholder":2364},[76,57357,57358,57360,57362,57365,57367],{"class":78,"line":1742},[76,57359,54740],{"class":136},[76,57361,51406],{"class":86},[76,57363,57364],{"class":136},"450",[76,57366,51461],{"class":82},[76,57368,1254],{"class":86},[76,57370,57371,57373,57375,57377,57379],{"class":78,"line":1747},[76,57372,54754],{"class":136},[76,57374,51406],{"class":86},[76,57376,489],{"class":136},[76,57378,51461],{"class":82},[76,57380,1254],{"class":86},[76,57382,57383,57386,57388,57391],{"class":78,"line":2542},[76,57384,57385],{"class":136},"      color",[76,57387,51406],{"class":86},[76,57389,57390],{"class":136},"red",[76,57392,1254],{"class":86},[76,57394,57395],{"class":78,"line":2556},[76,57396,2365],{"emptyLinePlaceholder":2364},[76,57398,57399],{"class":78,"line":2564},[76,57400,2151],{"class":86},[76,57402,57403],{"class":78,"line":2569},[76,57404,2365],{"emptyLinePlaceholder":2364},[76,57406,57407,57410],{"class":78,"line":2575},[76,57408,57409],{"class":1927},"    .btns",[76,57411,15539],{"class":86},[76,57413,57414,57416,57418,57420],{"class":78,"line":2581},[76,57415,57255],{"class":136},[76,57417,51406],{"class":86},[76,57419,51561],{"class":136},[76,57421,1254],{"class":86},[76,57423,57424],{"class":78,"line":2586},[76,57425,2151],{"class":86},[76,57427,57428],{"class":78,"line":7915},[76,57429,2365],{"emptyLinePlaceholder":2364},[76,57431,57432,57434,57437],{"class":78,"line":7939},[76,57433,57409],{"class":1927},[76,57435,57436],{"class":51269}," button",[76,57438,15539],{"class":86},[76,57440,57441,57443,57445,57447,57449],{"class":78,"line":7944},[76,57442,54740],{"class":136},[76,57444,51406],{"class":86},[76,57446,905],{"class":136},[76,57448,51461],{"class":82},[76,57450,1254],{"class":86},[76,57452,57453,57455,57457,57459,57461],{"class":78,"line":7950},[76,57454,54754],{"class":136},[76,57456,51406],{"class":86},[76,57458,361],{"class":136},[76,57460,51461],{"class":82},[76,57462,1254],{"class":86},[76,57464,57465,57467,57469,57471,57474,57476],{"class":78,"line":7977},[76,57466,54675],{"class":136},[76,57468,51406],{"class":86},[76,57470,279],{"class":136},[76,57472,57473],{"class":136}," 50",[76,57475,51461],{"class":82},[76,57477,1254],{"class":86},[76,57479,57480],{"class":78,"line":7982},[76,57481,2151],{"class":86},[76,57483,57484,57486,57488],{"class":78,"line":7988},[76,57485,52386],{"class":86},[76,57487,5092],{"class":51269},[76,57489,51276],{"class":86},[76,57491,57492,57494,57496],{"class":78,"line":8000},[76,57493,51754],{"class":86},[76,57495,51303],{"class":51269},[76,57497,51276],{"class":86},[76,57499,57500],{"class":78,"line":8012},[76,57501,2365],{"emptyLinePlaceholder":2364},[76,57503,57504,57506,57508],{"class":78,"line":8024},[76,57505,998],{"class":86},[76,57507,51769],{"class":51269},[76,57509,51276],{"class":86},[76,57511,57512,57514,57516,57519,57521],{"class":78,"line":9683},[76,57513,52113],{"class":86},[76,57515,16],{"class":51269},[76,57517,57518],{"class":86},">随机点名\u003C\u002F",[76,57520,16],{"class":51269},[76,57522,51276],{"class":86},[76,57524,57525,57527,57529,57531,57533,57535],{"class":78,"line":9708},[76,57526,52113],{"class":86},[76,57528,51580],{"class":51269},[76,57530,53455],{"class":1927},[76,57532,133],{"class":86},[76,57534,53460],{"class":192},[76,57536,51276],{"class":86},[76,57538,57539,57541,57543,57546,57548],{"class":78,"line":9731},[76,57540,51310],{"class":86},[76,57542,76],{"class":51269},[76,57544,57545],{"class":86},">名字是：\u003C\u002F",[76,57547,76],{"class":51269},[76,57549,51276],{"class":86},[76,57551,57552,57554,57556,57558,57560,57563,57566,57568],{"class":78,"line":9755},[76,57553,51310],{"class":86},[76,57555,51580],{"class":51269},[76,57557,53455],{"class":1927},[76,57559,133],{"class":86},[76,57561,57562],{"class":192},"\"qs\"",[76,57564,57565],{"class":86},">这里显示姓名\u003C\u002F",[76,57567,51580],{"class":51269},[76,57569,51276],{"class":86},[76,57571,57572,57574,57576],{"class":78,"line":9760},[76,57573,52386],{"class":86},[76,57575,51580],{"class":51269},[76,57577,51276],{"class":86},[76,57579,57580,57582,57584,57586,57588,57591],{"class":78,"line":9765},[76,57581,52113],{"class":86},[76,57583,51580],{"class":51269},[76,57585,53455],{"class":1927},[76,57587,133],{"class":86},[76,57589,57590],{"class":192},"\"btns\"",[76,57592,51276],{"class":86},[76,57594,57595,57597,57599,57601,57603,57606,57609,57611],{"class":78,"line":9770},[76,57596,51310],{"class":86},[76,57598,53856],{"class":51269},[76,57600,53455],{"class":1927},[76,57602,133],{"class":86},[76,57604,57605],{"class":192},"\"start\"",[76,57607,57608],{"class":86},">开始\u003C\u002F",[76,57610,53856],{"class":51269},[76,57612,51276],{"class":86},[76,57614,57615,57617,57619,57621,57623,57626,57629,57631],{"class":78,"line":9779},[76,57616,51310],{"class":86},[76,57618,53856],{"class":51269},[76,57620,53455],{"class":1927},[76,57622,133],{"class":86},[76,57624,57625],{"class":192},"\"end\"",[76,57627,57628],{"class":86},">结束\u003C\u002F",[76,57630,53856],{"class":51269},[76,57632,51276],{"class":86},[76,57634,57635,57637,57639],{"class":78,"line":9784},[76,57636,52386],{"class":86},[76,57638,51580],{"class":51269},[76,57640,51276],{"class":86},[76,57642,57643],{"class":78,"line":9790},[76,57644,2365],{"emptyLinePlaceholder":2364},[76,57646,57647,57649,57651],{"class":78,"line":9811},[76,57648,52113],{"class":86},[76,57650,51782],{"class":51269},[76,57652,51276],{"class":86},[76,57654,57655],{"class":78,"line":9817},[76,57656,57657],{"class":146},"    \u002F\u002F 数据数组\n",[76,57659,57660,57662,57665,57667,57669,57672,57674,57677,57679,57682,57684,57687,57689,57692],{"class":78,"line":9831},[76,57661,11188],{"class":82},[76,57663,57664],{"class":136}," arr",[76,57666,13531],{"class":82},[76,57668,52195],{"class":86},[76,57670,57671],{"class":192},"'马超'",[76,57673,12402],{"class":86},[76,57675,57676],{"class":192},"'黄忠'",[76,57678,12402],{"class":86},[76,57680,57681],{"class":192},"'赵云'",[76,57683,12402],{"class":86},[76,57685,57686],{"class":192},"'关羽'",[76,57688,12402],{"class":86},[76,57690,57691],{"class":192},"'张飞'",[76,57693,33215],{"class":86},[76,57695,57696,57698,57701,57703,57705,57707,57709,57712],{"class":78,"line":9837},[76,57697,11188],{"class":82},[76,57699,57700],{"class":136}," qs",[76,57702,13531],{"class":82},[76,57704,54365],{"class":86},[76,57706,54368],{"class":1927},[76,57708,87],{"class":86},[76,57710,57711],{"class":192},"'.qs'",[76,57713,93],{"class":86},[76,57715,57716],{"class":78,"line":9864},[76,57717,57718],{"class":146},"    \u002F\u002F 1.业务1.开始按钮模块\n",[76,57720,57721,57723,57725,57727,57729,57731,57733,57736],{"class":78,"line":9873},[76,57722,11188],{"class":82},[76,57724,4149],{"class":136},[76,57726,13531],{"class":82},[76,57728,54365],{"class":86},[76,57730,54368],{"class":1927},[76,57732,87],{"class":86},[76,57734,57735],{"class":192},"'.start'",[76,57737,93],{"class":86},[76,57739,57740],{"class":78,"line":9879},[76,57741,57742],{"class":146},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[76,57744,57745,57747,57750,57752],{"class":78,"line":9887},[76,57746,52188],{"class":82},[76,57748,57749],{"class":86}," timerId ",[76,57751,133],{"class":82},[76,57753,47302],{"class":136},[76,57755,57756],{"class":78,"line":9892},[76,57757,57758],{"class":146},"    \u002F\u002F 随机号要全局变量\n",[76,57760,57761,57763,57766,57768],{"class":78,"line":16571},[76,57762,52188],{"class":82},[76,57764,57765],{"class":86}," random ",[76,57767,133],{"class":82},[76,57769,47302],{"class":136},[76,57771,57772],{"class":78,"line":16577},[76,57773,57774],{"class":146},"    \u002F\u002F 1.1 添加点击事件\n",[76,57776,57777,57780,57783,57785,57788,57790,57792],{"class":78,"line":16600},[76,57778,57779],{"class":86},"    start.",[76,57781,57782],{"class":1927},"addEventListener",[76,57784,87],{"class":86},[76,57786,57787],{"class":192},"'click'",[76,57789,12402],{"class":86},[76,57791,54418],{"class":82},[76,57793,54421],{"class":86},[76,57795,57796,57799,57801,57803,57805,57807],{"class":78,"line":16606},[76,57797,57798],{"class":86},"      timerId ",[76,57800,133],{"class":82},[76,57802,54413],{"class":1927},[76,57804,87],{"class":86},[76,57806,54418],{"class":82},[76,57808,54421],{"class":86},[76,57810,57811],{"class":78,"line":16629},[76,57812,57813],{"class":146},"        \u002F\u002F 随机数\n",[76,57815,57816,57819,57821,57824,57827,57830,57832,57834,57836,57838],{"class":78,"line":16643},[76,57817,57818],{"class":86},"        random ",[76,57820,133],{"class":82},[76,57822,57823],{"class":1927}," parseInt",[76,57825,57826],{"class":86},"(Math.",[76,57828,57829],{"class":1927},"random",[76,57831,13017],{"class":86},[76,57833,543],{"class":82},[76,57835,51934],{"class":86},[76,57837,51937],{"class":136},[76,57839,93],{"class":86},[76,57841,57842,57845,57847],{"class":78,"line":16663},[76,57843,57844],{"class":86},"        qs.innerHTML ",[76,57846,133],{"class":82},[76,57848,57849],{"class":86}," arr[random]\n",[76,57851,57852,57855,57857],{"class":78,"line":16669},[76,57853,57854],{"class":86},"      }, ",[76,57856,361],{"class":136},[76,57858,93],{"class":86},[76,57860,57861],{"class":78,"line":16680},[76,57862,57863],{"class":146},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[76,57865,57866,57868,57871,57873,57876,57878],{"class":78,"line":16703},[76,57867,54449],{"class":82},[76,57869,57870],{"class":86}," (arr.",[76,57872,51937],{"class":136},[76,57874,57875],{"class":82}," ===",[76,57877,25087],{"class":136},[76,57879,12409],{"class":86},[76,57881,57882],{"class":78,"line":16725},[76,57883,57884],{"class":146},"        \u002F\u002F start.disabled = true\n",[76,57886,57887],{"class":78,"line":16730},[76,57888,57889],{"class":146},"        \u002F\u002F end.disabled = true\n",[76,57891,57892],{"class":78,"line":16736},[76,57893,57894],{"class":146},"        \u002F\u002F 可以合起来写\n",[76,57896,57897,57900,57902,57905,57907],{"class":78,"line":16750},[76,57898,57899],{"class":86},"        start.disabled ",[76,57901,133],{"class":82},[76,57903,57904],{"class":86}," end.disabled ",[76,57906,133],{"class":82},[76,57908,57909],{"class":136}," true\n",[76,57911,57912],{"class":78,"line":16763},[76,57913,52367],{"class":86},[76,57915,57916],{"class":78,"line":16768},[76,57917,33430],{"class":86},[76,57919,57920],{"class":78,"line":16782},[76,57921,57922],{"class":146},"    \u002F\u002F 1.2 关闭按钮模块\n",[76,57924,57925,57927,57929,57931,57933,57935,57937,57940],{"class":78,"line":16787},[76,57926,11188],{"class":82},[76,57928,4165],{"class":136},[76,57930,13531],{"class":82},[76,57932,54365],{"class":86},[76,57934,54368],{"class":1927},[76,57936,87],{"class":86},[76,57938,57939],{"class":192},"'.end'",[76,57941,93],{"class":86},[76,57943,57944,57947,57949,57951,57953,57955,57957],{"class":78,"line":16793},[76,57945,57946],{"class":86},"    end.",[76,57948,57782],{"class":1927},[76,57950,87],{"class":86},[76,57952,57787],{"class":192},[76,57954,12402],{"class":86},[76,57956,54418],{"class":82},[76,57958,54421],{"class":86},[76,57960,57961,57964],{"class":78,"line":16798},[76,57962,57963],{"class":1927},"      clearInterval",[76,57965,57966],{"class":86},"(timerId)\n",[76,57968,57969],{"class":78,"line":16812},[76,57970,57971],{"class":146},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[76,57973,57974,57977,57980,57983,57985],{"class":78,"line":16817},[76,57975,57976],{"class":86},"      arr.",[76,57978,57979],{"class":1927},"splice",[76,57981,57982],{"class":86},"(random, ",[76,57984,305],{"class":136},[76,57986,93],{"class":86},[76,57988,57989],{"class":78,"line":16822},[76,57990,33430],{"class":86},[76,57992,57993],{"class":78,"line":16836},[76,57994,2365],{"emptyLinePlaceholder":2364},[76,57996,57997,57999,58001],{"class":78,"line":16848},[76,57998,52386],{"class":86},[76,58000,51782],{"class":51269},[76,58002,51276],{"class":86},[76,58004,58005,58007,58009],{"class":78,"line":16853},[76,58006,51754],{"class":86},[76,58008,51769],{"class":51269},[76,58010,51276],{"class":86},[76,58012,58013],{"class":78,"line":16866},[76,58014,2365],{"emptyLinePlaceholder":2364},[76,58016,58017,58019,58021],{"class":78,"line":16871},[76,58018,51754],{"class":86},[76,58020,50604],{"class":51269},[76,58022,51276],{"class":86},[21,58024,58025],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[46,58027,58029],{"id":58028},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[66,58031,58033],{"className":50602,"code":58032,"language":50604,"meta":71,"style":71},"\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",[73,58034,58035,58045,58059,58063,58071,58085,58105,58117,58125,58129,58137,58149,58157,58176,58193,58209,58219,58223,58231,58239,58243],{"__ignoreMap":71},[76,58036,58037,58039,58041,58043],{"class":78,"line":79},[76,58038,51266],{"class":86},[76,58040,51270],{"class":51269},[76,58042,51273],{"class":1927},[76,58044,51276],{"class":86},[76,58046,58047,58049,58051,58053,58055,58057],{"class":78,"line":96},[76,58048,998],{"class":86},[76,58050,50604],{"class":51269},[76,58052,51285],{"class":1927},[76,58054,133],{"class":86},[76,58056,51290],{"class":192},[76,58058,51276],{"class":86},[76,58060,58061],{"class":78,"line":1143},[76,58062,2365],{"emptyLinePlaceholder":2364},[76,58064,58065,58067,58069],{"class":78,"line":1158},[76,58066,998],{"class":86},[76,58068,51303],{"class":51269},[76,58070,51276],{"class":86},[76,58072,58073,58075,58077,58079,58081,58083],{"class":78,"line":1164},[76,58074,52113],{"class":86},[76,58076,51313],{"class":51269},[76,58078,51316],{"class":1927},[76,58080,133],{"class":86},[76,58082,51321],{"class":192},[76,58084,51276],{"class":86},[76,58086,58087,58089,58091,58093,58095,58097,58099,58101,58103],{"class":78,"line":1178},[76,58088,52113],{"class":86},[76,58090,51313],{"class":51269},[76,58092,14887],{"class":1927},[76,58094,133],{"class":86},[76,58096,51360],{"class":192},[76,58098,51340],{"class":1927},[76,58100,133],{"class":86},[76,58102,51367],{"class":192},[76,58104,51276],{"class":86},[76,58106,58107,58109,58111,58113,58115],{"class":78,"line":1184},[76,58108,52113],{"class":86},[76,58110,51376],{"class":51269},[76,58112,51379],{"class":86},[76,58114,51376],{"class":51269},[76,58116,51276],{"class":86},[76,58118,58119,58121,58123],{"class":78,"line":1275},[76,58120,51754],{"class":86},[76,58122,51303],{"class":51269},[76,58124,51276],{"class":86},[76,58126,58127],{"class":78,"line":1281},[76,58128,2365],{"emptyLinePlaceholder":2364},[76,58130,58131,58133,58135],{"class":78,"line":1293},[76,58132,998],{"class":86},[76,58134,51769],{"class":51269},[76,58136,51276],{"class":86},[76,58138,58139,58141,58143,58145,58147],{"class":78,"line":1576},[76,58140,52113],{"class":86},[76,58142,53856],{"class":51269},[76,58144,53862],{"class":86},[76,58146,53856],{"class":51269},[76,58148,51276],{"class":86},[76,58150,58151,58153,58155],{"class":78,"line":1581},[76,58152,52113],{"class":86},[76,58154,51782],{"class":51269},[76,58156,51276],{"class":86},[76,58158,58159,58161,58163,58165,58167,58169,58171,58174],{"class":78,"line":1587},[76,58160,11188],{"class":82},[76,58162,54360],{"class":136},[76,58164,13531],{"class":82},[76,58166,54365],{"class":86},[76,58168,54368],{"class":1927},[76,58170,87],{"class":86},[76,58172,58173],{"class":192},"'button'",[76,58175,93],{"class":86},[76,58177,58178,58181,58183,58185,58187,58189,58191],{"class":78,"line":1592},[76,58179,58180],{"class":86},"    btn.",[76,58182,57782],{"class":1927},[76,58184,87],{"class":86},[76,58186,57787],{"class":192},[76,58188,12402],{"class":86},[76,58190,54418],{"class":82},[76,58192,54421],{"class":86},[76,58194,58195,58198,58200,58202,58205,58207],{"class":78,"line":1606},[76,58196,58197],{"class":82},"      const",[76,58199,2204],{"class":136},[76,58201,13531],{"class":82},[76,58203,58204],{"class":86}," Math.",[76,58206,57829],{"class":1927},[76,58208,1940],{"class":86},[76,58210,58211,58214,58217],{"class":78,"line":1611},[76,58212,58213],{"class":86},"      console.",[76,58215,58216],{"class":1927},"log",[76,58218,101],{"class":86},[76,58220,58221],{"class":78,"line":1617},[76,58222,33430],{"class":86},[76,58224,58225,58227,58229],{"class":78,"line":1638},[76,58226,52386],{"class":86},[76,58228,51782],{"class":51269},[76,58230,51276],{"class":86},[76,58232,58233,58235,58237],{"class":78,"line":1643},[76,58234,51754],{"class":86},[76,58236,51769],{"class":51269},[76,58238,51276],{"class":86},[76,58240,58241],{"class":78,"line":1657},[76,58242,2365],{"emptyLinePlaceholder":2364},[76,58244,58245,58247,58249],{"class":78,"line":1662},[76,58246,51754],{"class":86},[76,58248,50604],{"class":51269},[76,58250,51276],{"class":86},[21,58252,58253],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[21,58255,58256],{},"常量不可以重新赋值",[21,58258,58259],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[66,58261,58263],{"className":50602,"code":58262,"language":50604,"meta":71,"style":71},"\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",[73,58264,58265,58275,58289,58293,58301,58315,58335,58347,58355,58359,58367,58379,58387,58398,58416,58432,58446,58454,58458,58466,58474,58478],{"__ignoreMap":71},[76,58266,58267,58269,58271,58273],{"class":78,"line":79},[76,58268,51266],{"class":86},[76,58270,51270],{"class":51269},[76,58272,51273],{"class":1927},[76,58274,51276],{"class":86},[76,58276,58277,58279,58281,58283,58285,58287],{"class":78,"line":96},[76,58278,998],{"class":86},[76,58280,50604],{"class":51269},[76,58282,51285],{"class":1927},[76,58284,133],{"class":86},[76,58286,51290],{"class":192},[76,58288,51276],{"class":86},[76,58290,58291],{"class":78,"line":1143},[76,58292,2365],{"emptyLinePlaceholder":2364},[76,58294,58295,58297,58299],{"class":78,"line":1158},[76,58296,998],{"class":86},[76,58298,51303],{"class":51269},[76,58300,51276],{"class":86},[76,58302,58303,58305,58307,58309,58311,58313],{"class":78,"line":1164},[76,58304,52113],{"class":86},[76,58306,51313],{"class":51269},[76,58308,51316],{"class":1927},[76,58310,133],{"class":86},[76,58312,51321],{"class":192},[76,58314,51276],{"class":86},[76,58316,58317,58319,58321,58323,58325,58327,58329,58331,58333],{"class":78,"line":1178},[76,58318,52113],{"class":86},[76,58320,51313],{"class":51269},[76,58322,14887],{"class":1927},[76,58324,133],{"class":86},[76,58326,51360],{"class":192},[76,58328,51340],{"class":1927},[76,58330,133],{"class":86},[76,58332,51367],{"class":192},[76,58334,51276],{"class":86},[76,58336,58337,58339,58341,58343,58345],{"class":78,"line":1184},[76,58338,52113],{"class":86},[76,58340,51376],{"class":51269},[76,58342,51379],{"class":86},[76,58344,51376],{"class":51269},[76,58346,51276],{"class":86},[76,58348,58349,58351,58353],{"class":78,"line":1275},[76,58350,51754],{"class":86},[76,58352,51303],{"class":51269},[76,58354,51276],{"class":86},[76,58356,58357],{"class":78,"line":1281},[76,58358,2365],{"emptyLinePlaceholder":2364},[76,58360,58361,58363,58365],{"class":78,"line":1293},[76,58362,998],{"class":86},[76,58364,51769],{"class":51269},[76,58366,51276],{"class":86},[76,58368,58369,58371,58373,58375,58377],{"class":78,"line":1576},[76,58370,52113],{"class":86},[76,58372,53856],{"class":51269},[76,58374,53862],{"class":86},[76,58376,53856],{"class":51269},[76,58378,51276],{"class":86},[76,58380,58381,58383,58385],{"class":78,"line":1581},[76,58382,52113],{"class":86},[76,58384,51782],{"class":51269},[76,58386,51276],{"class":86},[76,58388,58389,58391,58393,58395],{"class":78,"line":1587},[76,58390,11188],{"class":82},[76,58392,2204],{"class":136},[76,58394,13531],{"class":82},[76,58396,58397],{"class":136}," 10\n",[76,58399,58400,58402,58404,58406,58408,58410,58412,58414],{"class":78,"line":1592},[76,58401,11188],{"class":82},[76,58403,54360],{"class":136},[76,58405,13531],{"class":82},[76,58407,54365],{"class":86},[76,58409,54368],{"class":1927},[76,58411,87],{"class":86},[76,58413,58173],{"class":192},[76,58415,93],{"class":86},[76,58417,58418,58420,58422,58424,58426,58428,58430],{"class":78,"line":1606},[76,58419,58180],{"class":86},[76,58421,57782],{"class":1927},[76,58423,87],{"class":86},[76,58425,57787],{"class":192},[76,58427,12402],{"class":86},[76,58429,54418],{"class":82},[76,58431,54421],{"class":86},[76,58433,58434,58436,58438,58440,58442,58444],{"class":78,"line":1611},[76,58435,58197],{"class":82},[76,58437,2204],{"class":136},[76,58439,13531],{"class":82},[76,58441,58204],{"class":86},[76,58443,57829],{"class":1927},[76,58445,1940],{"class":86},[76,58447,58448,58450,58452],{"class":78,"line":1617},[76,58449,58213],{"class":86},[76,58451,58216],{"class":1927},[76,58453,101],{"class":86},[76,58455,58456],{"class":78,"line":1638},[76,58457,33430],{"class":86},[76,58459,58460,58462,58464],{"class":78,"line":1643},[76,58461,52386],{"class":86},[76,58463,51782],{"class":51269},[76,58465,51276],{"class":86},[76,58467,58468,58470,58472],{"class":78,"line":1657},[76,58469,51754],{"class":86},[76,58471,51769],{"class":51269},[76,58473,51276],{"class":86},[76,58475,58476],{"class":78,"line":1662},[76,58477,2365],{"emptyLinePlaceholder":2364},[76,58479,58480,58482,58484],{"class":78,"line":1691},[76,58481,51754],{"class":86},[76,58483,50604],{"class":51269},[76,58485,51276],{"class":86},[21,58487,58488],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[66,58490,58492],{"className":50602,"code":58491,"language":50604,"meta":71,"style":71},"\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",[73,58493,58494,58504,58518,58522,58530,58544,58564,58576,58584,58588,58596,58608,58616,58626,58644,58660,58673,58681,58685,58693,58701,58705],{"__ignoreMap":71},[76,58495,58496,58498,58500,58502],{"class":78,"line":79},[76,58497,51266],{"class":86},[76,58499,51270],{"class":51269},[76,58501,51273],{"class":1927},[76,58503,51276],{"class":86},[76,58505,58506,58508,58510,58512,58514,58516],{"class":78,"line":96},[76,58507,998],{"class":86},[76,58509,50604],{"class":51269},[76,58511,51285],{"class":1927},[76,58513,133],{"class":86},[76,58515,51290],{"class":192},[76,58517,51276],{"class":86},[76,58519,58520],{"class":78,"line":1143},[76,58521,2365],{"emptyLinePlaceholder":2364},[76,58523,58524,58526,58528],{"class":78,"line":1158},[76,58525,998],{"class":86},[76,58527,51303],{"class":51269},[76,58529,51276],{"class":86},[76,58531,58532,58534,58536,58538,58540,58542],{"class":78,"line":1164},[76,58533,52113],{"class":86},[76,58535,51313],{"class":51269},[76,58537,51316],{"class":1927},[76,58539,133],{"class":86},[76,58541,51321],{"class":192},[76,58543,51276],{"class":86},[76,58545,58546,58548,58550,58552,58554,58556,58558,58560,58562],{"class":78,"line":1178},[76,58547,52113],{"class":86},[76,58549,51313],{"class":51269},[76,58551,14887],{"class":1927},[76,58553,133],{"class":86},[76,58555,51360],{"class":192},[76,58557,51340],{"class":1927},[76,58559,133],{"class":86},[76,58561,51367],{"class":192},[76,58563,51276],{"class":86},[76,58565,58566,58568,58570,58572,58574],{"class":78,"line":1184},[76,58567,52113],{"class":86},[76,58569,51376],{"class":51269},[76,58571,51379],{"class":86},[76,58573,51376],{"class":51269},[76,58575,51276],{"class":86},[76,58577,58578,58580,58582],{"class":78,"line":1275},[76,58579,51754],{"class":86},[76,58581,51303],{"class":51269},[76,58583,51276],{"class":86},[76,58585,58586],{"class":78,"line":1281},[76,58587,2365],{"emptyLinePlaceholder":2364},[76,58589,58590,58592,58594],{"class":78,"line":1293},[76,58591,998],{"class":86},[76,58593,51769],{"class":51269},[76,58595,51276],{"class":86},[76,58597,58598,58600,58602,58604,58606],{"class":78,"line":1576},[76,58599,52113],{"class":86},[76,58601,53856],{"class":51269},[76,58603,53862],{"class":86},[76,58605,53856],{"class":51269},[76,58607,51276],{"class":86},[76,58609,58610,58612,58614],{"class":78,"line":1581},[76,58611,52113],{"class":86},[76,58613,51782],{"class":51269},[76,58615,51276],{"class":86},[76,58617,58618,58620,58622,58624],{"class":78,"line":1587},[76,58619,11188],{"class":82},[76,58621,2204],{"class":136},[76,58623,13531],{"class":82},[76,58625,58397],{"class":136},[76,58627,58628,58630,58632,58634,58636,58638,58640,58642],{"class":78,"line":1592},[76,58629,11188],{"class":82},[76,58631,54360],{"class":136},[76,58633,13531],{"class":82},[76,58635,54365],{"class":86},[76,58637,54368],{"class":1927},[76,58639,87],{"class":86},[76,58641,58173],{"class":192},[76,58643,93],{"class":86},[76,58645,58646,58648,58650,58652,58654,58656,58658],{"class":78,"line":1606},[76,58647,58180],{"class":86},[76,58649,57782],{"class":1927},[76,58651,87],{"class":86},[76,58653,57787],{"class":192},[76,58655,12402],{"class":86},[76,58657,54418],{"class":82},[76,58659,54421],{"class":86},[76,58661,58662,58665,58667,58669,58671],{"class":78,"line":1611},[76,58663,58664],{"class":86},"      num ",[76,58666,133],{"class":82},[76,58668,58204],{"class":86},[76,58670,57829],{"class":1927},[76,58672,1940],{"class":86},[76,58674,58675,58677,58679],{"class":78,"line":1617},[76,58676,58213],{"class":86},[76,58678,58216],{"class":1927},[76,58680,101],{"class":86},[76,58682,58683],{"class":78,"line":1638},[76,58684,33430],{"class":86},[76,58686,58687,58689,58691],{"class":78,"line":1643},[76,58688,52386],{"class":86},[76,58690,51782],{"class":51269},[76,58692,51276],{"class":86},[76,58694,58695,58697,58699],{"class":78,"line":1657},[76,58696,51754],{"class":86},[76,58698,51769],{"class":51269},[76,58700,51276],{"class":86},[76,58702,58703],{"class":78,"line":1662},[76,58704,2365],{"emptyLinePlaceholder":2364},[76,58706,58707,58709,58711],{"class":78,"line":1691},[76,58708,51754],{"class":86},[76,58710,50604],{"class":51269},[76,58712,51276],{"class":86},[21,58714,58715],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[46,58717,58719],{"id":58718},"_324-事件监听版本","3.2.4 事件监听版本",[21,58721,58722],{},[1426,58723],{"alt":71,"src":58724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[21,58726,58727],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[21,58729,58730],{},"这种方式会覆盖前边的事件监听:",[66,58732,58734],{"className":50602,"code":58733,"language":50604,"meta":71,"style":71},"\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",[73,58735,58736,58746,58760,58764,58772,58786,58806,58818,58826,58830,58838,58850,58858,58876,58890,58901,58905,58917,58927,58931,58939,58947,58951],{"__ignoreMap":71},[76,58737,58738,58740,58742,58744],{"class":78,"line":79},[76,58739,51266],{"class":86},[76,58741,51270],{"class":51269},[76,58743,51273],{"class":1927},[76,58745,51276],{"class":86},[76,58747,58748,58750,58752,58754,58756,58758],{"class":78,"line":96},[76,58749,998],{"class":86},[76,58751,50604],{"class":51269},[76,58753,51285],{"class":1927},[76,58755,133],{"class":86},[76,58757,51290],{"class":192},[76,58759,51276],{"class":86},[76,58761,58762],{"class":78,"line":1143},[76,58763,2365],{"emptyLinePlaceholder":2364},[76,58765,58766,58768,58770],{"class":78,"line":1158},[76,58767,998],{"class":86},[76,58769,51303],{"class":51269},[76,58771,51276],{"class":86},[76,58773,58774,58776,58778,58780,58782,58784],{"class":78,"line":1164},[76,58775,52113],{"class":86},[76,58777,51313],{"class":51269},[76,58779,51316],{"class":1927},[76,58781,133],{"class":86},[76,58783,51321],{"class":192},[76,58785,51276],{"class":86},[76,58787,58788,58790,58792,58794,58796,58798,58800,58802,58804],{"class":78,"line":1178},[76,58789,52113],{"class":86},[76,58791,51313],{"class":51269},[76,58793,14887],{"class":1927},[76,58795,133],{"class":86},[76,58797,51360],{"class":192},[76,58799,51340],{"class":1927},[76,58801,133],{"class":86},[76,58803,51367],{"class":192},[76,58805,51276],{"class":86},[76,58807,58808,58810,58812,58814,58816],{"class":78,"line":1184},[76,58809,52113],{"class":86},[76,58811,51376],{"class":51269},[76,58813,51379],{"class":86},[76,58815,51376],{"class":51269},[76,58817,51276],{"class":86},[76,58819,58820,58822,58824],{"class":78,"line":1275},[76,58821,51754],{"class":86},[76,58823,51303],{"class":51269},[76,58825,51276],{"class":86},[76,58827,58828],{"class":78,"line":1281},[76,58829,2365],{"emptyLinePlaceholder":2364},[76,58831,58832,58834,58836],{"class":78,"line":1293},[76,58833,998],{"class":86},[76,58835,51769],{"class":51269},[76,58837,51276],{"class":86},[76,58839,58840,58842,58844,58846,58848],{"class":78,"line":1576},[76,58841,52113],{"class":86},[76,58843,53856],{"class":51269},[76,58845,53862],{"class":86},[76,58847,53856],{"class":51269},[76,58849,51276],{"class":86},[76,58851,58852,58854,58856],{"class":78,"line":1581},[76,58853,52113],{"class":86},[76,58855,51782],{"class":51269},[76,58857,51276],{"class":86},[76,58859,58860,58862,58864,58866,58868,58870,58872,58874],{"class":78,"line":1587},[76,58861,11188],{"class":82},[76,58863,54360],{"class":136},[76,58865,13531],{"class":82},[76,58867,54365],{"class":86},[76,58869,54368],{"class":1927},[76,58871,87],{"class":86},[76,58873,58173],{"class":192},[76,58875,93],{"class":86},[76,58877,58878,58880,58883,58885,58888],{"class":78,"line":1592},[76,58879,58180],{"class":86},[76,58881,58882],{"class":1927},"onclick",[76,58884,13531],{"class":82},[76,58886,58887],{"class":82}," function",[76,58889,54421],{"class":86},[76,58891,58892,58895,58897,58899],{"class":78,"line":1606},[76,58893,58894],{"class":1927},"      alert",[76,58896,87],{"class":86},[76,58898,560],{"class":136},[76,58900,93],{"class":86},[76,58902,58903],{"class":78,"line":1611},[76,58904,2151],{"class":86},[76,58906,58907,58909,58911,58913,58915],{"class":78,"line":1617},[76,58908,58180],{"class":86},[76,58910,58882],{"class":1927},[76,58912,13531],{"class":82},[76,58914,58887],{"class":82},[76,58916,54421],{"class":86},[76,58918,58919,58921,58923,58925],{"class":78,"line":1638},[76,58920,58894],{"class":1927},[76,58922,87],{"class":86},[76,58924,838],{"class":136},[76,58926,93],{"class":86},[76,58928,58929],{"class":78,"line":1643},[76,58930,2151],{"class":86},[76,58932,58933,58935,58937],{"class":78,"line":1657},[76,58934,52386],{"class":86},[76,58936,51782],{"class":51269},[76,58938,51276],{"class":86},[76,58940,58941,58943,58945],{"class":78,"line":1662},[76,58942,51754],{"class":86},[76,58944,51769],{"class":51269},[76,58946,51276],{"class":86},[76,58948,58949],{"class":78,"line":1691},[76,58950,2365],{"emptyLinePlaceholder":2364},[76,58952,58953,58955,58957],{"class":78,"line":1696},[76,58954,51754],{"class":86},[76,58956,50604],{"class":51269},[76,58958,51276],{"class":86},[21,58960,58961],{},"只要点击就输出结果为22,前边11被覆盖了",[66,58963,58965],{"className":50602,"code":58964,"language":50604,"meta":71,"style":71},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[73,58966,58967,58972,58977,58981,58986,58991],{"__ignoreMap":71},[76,58968,58969],{"class":78,"line":79},[76,58970,58971],{"class":86},"  btn.addEventListener('click', function () {\n",[76,58973,58974],{"class":78,"line":96},[76,58975,58976],{"class":86},"      alert(11)\n",[76,58978,58979],{"class":78,"line":1143},[76,58980,33430],{"class":86},[76,58982,58983],{"class":78,"line":1158},[76,58984,58985],{"class":86},"    btn.addEventListener('click', function () {\n",[76,58987,58988],{"class":78,"line":1164},[76,58989,58990],{"class":86},"      alert(22)\n",[76,58992,58993],{"class":78,"line":1178},[76,58994,33430],{"class":86},[21,58996,58997],{},"点击第一次输出11,第二次点击为22",[46,58999,59001],{"id":59000},"_325-事件类型","3.2.5 事件类型",[21,59003,59004],{},[1426,59005],{"alt":71,"src":59006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21965,59008,59010],{"id":59009},"_3251-鼠标事件","3.2.5.1 鼠标事件",[21,59012,59013],{},"补充知识:",[21,59015,59016],{},"轮播图自动播放模块,可以使用",[21,59018,59019],{},"let timerId = setInterval(function () {",[21,59021,59022],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[21,59024,59025],{},"用js方法模拟进行点击事件,click必须加()",[21,59027,59028],{},"next.click()",[21,59030,59031],{},"}, 1000)",[21,59033,59034],{},[1426,59035],{"alt":71,"src":59036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[66,59038,59040],{"className":53036,"code":59039,"language":53038,"meta":71,"style":71},"\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",[73,59041,59042,59046,59056,59070,59074,59082,59097,59117,59137,59150,59158,59163,59168,59172,59176,59181,59186,59191,59196,59200,59204,59209,59214,59219,59223,59227,59232,59236,59241,59246,59250,59254,59259,59264,59269,59274,59279,59283,59287,59292,59297,59302,59307,59312,59316,59320,59325,59330,59335,59340,59345,59350,59355,59360,59365,59370,59374,59378,59383,59388,59392,59396,59401,59406,59410,59415,59420,59424,59428,59433,59437,59442,59447,59451,59456,59460,59464,59469,59474,59479,59484,59489,59494,59499,59503,59507,59511,59516,59521,59526,59531,59535,59543,59551,59555,59563,59578,59592,59613,59621,59635,59648,59663,59682,59694,59706,59718,59730,59742,59754,59766,59774,59789,59813,59837,59845,59853,59861,59869,59874,59879,59884,59889,59894,59899,59904,59909,59914,59919,59923,59928,59933,59938,59943,59948,59953,59958,59963,59968,59972,59977,59982,59987,59992,59997,60002,60007,60012,60017,60022,60027,60032,60036,60040,60045,60050,60055,60059,60064,60069,60074,60079,60084,60088,60093,60097,60101,60105,60109,60113,60117,60122,60127,60132,60137,60142,60147,60152,60157,60162,60166,60170,60175,60180,60185,60190,60195,60199,60204,60209,60214,60219,60224,60229,60233,60237,60242,60246,60251,60255,60260,60265,60270,60275,60280,60285,60289,60297,60305,60309],{"__ignoreMap":71},[76,59043,59044],{"class":78,"line":79},[76,59045,2365],{"emptyLinePlaceholder":2364},[76,59047,59048,59050,59052,59054],{"class":78,"line":96},[76,59049,51266],{"class":86},[76,59051,51270],{"class":82},[76,59053,51273],{"class":136},[76,59055,51276],{"class":86},[76,59057,59058,59060,59062,59064,59066,59068],{"class":78,"line":1143},[76,59059,998],{"class":86},[76,59061,50604],{"class":51269},[76,59063,51285],{"class":1927},[76,59065,133],{"class":86},[76,59067,51290],{"class":192},[76,59069,51276],{"class":86},[76,59071,59072],{"class":78,"line":1158},[76,59073,2365],{"emptyLinePlaceholder":2364},[76,59075,59076,59078,59080],{"class":78,"line":1164},[76,59077,998],{"class":86},[76,59079,51303],{"class":51269},[76,59081,51276],{"class":86},[76,59083,59084,59086,59088,59090,59092,59094],{"class":78,"line":1178},[76,59085,52113],{"class":86},[76,59087,51313],{"class":51269},[76,59089,51316],{"class":1927},[76,59091,133],{"class":86},[76,59093,51321],{"class":192},[76,59095,59096],{"class":86}," \u002F>\n",[76,59098,59099,59101,59103,59105,59107,59109,59111,59113,59115],{"class":78,"line":1184},[76,59100,52113],{"class":86},[76,59102,51313],{"class":51269},[76,59104,51332],{"class":1927},[76,59106,133],{"class":86},[76,59108,51337],{"class":192},[76,59110,51340],{"class":1927},[76,59112,133],{"class":86},[76,59114,51345],{"class":192},[76,59116,59096],{"class":86},[76,59118,59119,59121,59123,59125,59127,59129,59131,59133,59135],{"class":78,"line":1275},[76,59120,52113],{"class":86},[76,59122,51313],{"class":51269},[76,59124,14887],{"class":1927},[76,59126,133],{"class":86},[76,59128,51360],{"class":192},[76,59130,51340],{"class":1927},[76,59132,133],{"class":86},[76,59134,51367],{"class":192},[76,59136,59096],{"class":86},[76,59138,59139,59141,59143,59146,59148],{"class":78,"line":1281},[76,59140,52113],{"class":86},[76,59142,51376],{"class":51269},[76,59144,59145],{"class":86},">轮播图点击切换\u003C\u002F",[76,59147,51376],{"class":51269},[76,59149,51276],{"class":86},[76,59151,59152,59154,59156],{"class":78,"line":1293},[76,59153,52113],{"class":86},[76,59155,5092],{"class":51269},[76,59157,51276],{"class":86},[76,59159,59160],{"class":78,"line":1576},[76,59161,59162],{"class":86},"    * {\n",[76,59164,59165],{"class":78,"line":1581},[76,59166,59167],{"class":86},"      box-sizing: border-box;\n",[76,59169,59170],{"class":78,"line":1587},[76,59171,2151],{"class":86},[76,59173,59174],{"class":78,"line":1592},[76,59175,2365],{"emptyLinePlaceholder":2364},[76,59177,59178],{"class":78,"line":1606},[76,59179,59180],{"class":86},"    .slider {\n",[76,59182,59183],{"class":78,"line":1611},[76,59184,59185],{"class":86},"      width: 560px;\n",[76,59187,59188],{"class":78,"line":1617},[76,59189,59190],{"class":86},"      height: 400px;\n",[76,59192,59193],{"class":78,"line":1638},[76,59194,59195],{"class":86},"      overflow: hidden;\n",[76,59197,59198],{"class":78,"line":1643},[76,59199,2151],{"class":86},[76,59201,59202],{"class":78,"line":1657},[76,59203,2365],{"emptyLinePlaceholder":2364},[76,59205,59206],{"class":78,"line":1662},[76,59207,59208],{"class":86},"    .slider-wrapper {\n",[76,59210,59211],{"class":78,"line":1691},[76,59212,59213],{"class":86},"      width: 100%;\n",[76,59215,59216],{"class":78,"line":1696},[76,59217,59218],{"class":86},"      height: 320px;\n",[76,59220,59221],{"class":78,"line":1713},[76,59222,2151],{"class":86},[76,59224,59225],{"class":78,"line":1718},[76,59226,2365],{"emptyLinePlaceholder":2364},[76,59228,59229],{"class":78,"line":1723},[76,59230,59231],{"class":86},"    .slider-wrapper img {\n",[76,59233,59234],{"class":78,"line":1728},[76,59235,59213],{"class":86},[76,59237,59238],{"class":78,"line":1742},[76,59239,59240],{"class":86},"      height: 100%;\n",[76,59242,59243],{"class":78,"line":1747},[76,59244,59245],{"class":86},"      display: block;\n",[76,59247,59248],{"class":78,"line":2542},[76,59249,2151],{"class":86},[76,59251,59252],{"class":78,"line":2556},[76,59253,2365],{"emptyLinePlaceholder":2364},[76,59255,59256],{"class":78,"line":2564},[76,59257,59258],{"class":86},"    .slider-footer {\n",[76,59260,59261],{"class":78,"line":2569},[76,59262,59263],{"class":86},"      height: 80px;\n",[76,59265,59266],{"class":78,"line":2575},[76,59267,59268],{"class":86},"      background-color: rgb(100, 67, 68);\n",[76,59270,59271],{"class":78,"line":2581},[76,59272,59273],{"class":86},"      padding: 12px 12px 0 12px;\n",[76,59275,59276],{"class":78,"line":2586},[76,59277,59278],{"class":86},"      position: relative;\n",[76,59280,59281],{"class":78,"line":7915},[76,59282,2151],{"class":86},[76,59284,59285],{"class":78,"line":7939},[76,59286,2365],{"emptyLinePlaceholder":2364},[76,59288,59289],{"class":78,"line":7944},[76,59290,59291],{"class":86},"    .slider-footer .toggle {\n",[76,59293,59294],{"class":78,"line":7950},[76,59295,59296],{"class":86},"      position: absolute;\n",[76,59298,59299],{"class":78,"line":7977},[76,59300,59301],{"class":86},"      right: 0;\n",[76,59303,59304],{"class":78,"line":7982},[76,59305,59306],{"class":86},"      top: 12px;\n",[76,59308,59309],{"class":78,"line":7988},[76,59310,59311],{"class":86},"      display: flex;\n",[76,59313,59314],{"class":78,"line":8000},[76,59315,2151],{"class":86},[76,59317,59318],{"class":78,"line":8012},[76,59319,2365],{"emptyLinePlaceholder":2364},[76,59321,59322],{"class":78,"line":8024},[76,59323,59324],{"class":86},"    .slider-footer .toggle button {\n",[76,59326,59327],{"class":78,"line":9683},[76,59328,59329],{"class":86},"      margin-right: 12px;\n",[76,59331,59332],{"class":78,"line":9708},[76,59333,59334],{"class":86},"      width: 28px;\n",[76,59336,59337],{"class":78,"line":9731},[76,59338,59339],{"class":86},"      height: 28px;\n",[76,59341,59342],{"class":78,"line":9755},[76,59343,59344],{"class":86},"      appearance: none;\n",[76,59346,59347],{"class":78,"line":9760},[76,59348,59349],{"class":86},"      border: none;\n",[76,59351,59352],{"class":78,"line":9765},[76,59353,59354],{"class":86},"      background: rgba(255, 255, 255, 0.1);\n",[76,59356,59357],{"class":78,"line":9770},[76,59358,59359],{"class":86},"      color: #fff;\n",[76,59361,59362],{"class":78,"line":9779},[76,59363,59364],{"class":86},"      border-radius: 4px;\n",[76,59366,59367],{"class":78,"line":9784},[76,59368,59369],{"class":86},"      cursor: pointer;\n",[76,59371,59372],{"class":78,"line":9790},[76,59373,2151],{"class":86},[76,59375,59376],{"class":78,"line":9811},[76,59377,2365],{"emptyLinePlaceholder":2364},[76,59379,59380],{"class":78,"line":9817},[76,59381,59382],{"class":86},"    .slider-footer .toggle button:hover {\n",[76,59384,59385],{"class":78,"line":9831},[76,59386,59387],{"class":86},"      background: rgba(255, 255, 255, 0.2);\n",[76,59389,59390],{"class":78,"line":9837},[76,59391,2151],{"class":86},[76,59393,59394],{"class":78,"line":9864},[76,59395,2365],{"emptyLinePlaceholder":2364},[76,59397,59398],{"class":78,"line":9873},[76,59399,59400],{"class":86},"    .slider-footer p {\n",[76,59402,59403],{"class":78,"line":9879},[76,59404,59405],{"class":86},"      margin: 0;\n",[76,59407,59408],{"class":78,"line":9887},[76,59409,59359],{"class":86},[76,59411,59412],{"class":78,"line":9892},[76,59413,59414],{"class":86},"      font-size: 18px;\n",[76,59416,59417],{"class":78,"line":16571},[76,59418,59419],{"class":86},"      margin-bottom: 10px;\n",[76,59421,59422],{"class":78,"line":16577},[76,59423,2151],{"class":86},[76,59425,59426],{"class":78,"line":16600},[76,59427,2365],{"emptyLinePlaceholder":2364},[76,59429,59430],{"class":78,"line":16606},[76,59431,59432],{"class":86},"    .slider-indicator {\n",[76,59434,59435],{"class":78,"line":16629},[76,59436,59405],{"class":86},[76,59438,59439],{"class":78,"line":16643},[76,59440,59441],{"class":86},"      padding: 0;\n",[76,59443,59444],{"class":78,"line":16663},[76,59445,59446],{"class":86},"      list-style: none;\n",[76,59448,59449],{"class":78,"line":16669},[76,59450,59311],{"class":86},[76,59452,59453],{"class":78,"line":16680},[76,59454,59455],{"class":86},"      align-items: center;\n",[76,59457,59458],{"class":78,"line":16703},[76,59459,2151],{"class":86},[76,59461,59462],{"class":78,"line":16725},[76,59463,2365],{"emptyLinePlaceholder":2364},[76,59465,59466],{"class":78,"line":16730},[76,59467,59468],{"class":86},"    .slider-indicator li {\n",[76,59470,59471],{"class":78,"line":16736},[76,59472,59473],{"class":86},"      width: 8px;\n",[76,59475,59476],{"class":78,"line":16750},[76,59477,59478],{"class":86},"      height: 8px;\n",[76,59480,59481],{"class":78,"line":16763},[76,59482,59483],{"class":86},"      margin: 4px;\n",[76,59485,59486],{"class":78,"line":16768},[76,59487,59488],{"class":86},"      border-radius: 50%;\n",[76,59490,59491],{"class":78,"line":16782},[76,59492,59493],{"class":86},"      background: #fff;\n",[76,59495,59496],{"class":78,"line":16787},[76,59497,59498],{"class":86},"      opacity: 0.4;\n",[76,59500,59501],{"class":78,"line":16793},[76,59502,59369],{"class":86},[76,59504,59505],{"class":78,"line":16798},[76,59506,2151],{"class":86},[76,59508,59509],{"class":78,"line":16812},[76,59510,2365],{"emptyLinePlaceholder":2364},[76,59512,59513],{"class":78,"line":16817},[76,59514,59515],{"class":86},"    .slider-indicator li.active {\n",[76,59517,59518],{"class":78,"line":16822},[76,59519,59520],{"class":86},"      width: 12px;\n",[76,59522,59523],{"class":78,"line":16836},[76,59524,59525],{"class":86},"      height: 12px;\n",[76,59527,59528],{"class":78,"line":16848},[76,59529,59530],{"class":86},"      opacity: 1;\n",[76,59532,59533],{"class":78,"line":16853},[76,59534,2151],{"class":86},[76,59536,59537,59539,59541],{"class":78,"line":16866},[76,59538,52386],{"class":86},[76,59540,5092],{"class":51269},[76,59542,51276],{"class":86},[76,59544,59545,59547,59549],{"class":78,"line":16871},[76,59546,51754],{"class":86},[76,59548,51303],{"class":51269},[76,59550,51276],{"class":86},[76,59552,59553],{"class":78,"line":16876},[76,59554,2365],{"emptyLinePlaceholder":2364},[76,59556,59557,59559,59561],{"class":78,"line":16881},[76,59558,998],{"class":86},[76,59560,51769],{"class":51269},[76,59562,51276],{"class":86},[76,59564,59565,59567,59569,59571,59573,59576],{"class":78,"line":16894},[76,59566,52113],{"class":86},[76,59568,51580],{"class":51269},[76,59570,53455],{"class":1927},[76,59572,133],{"class":86},[76,59574,59575],{"class":192},"\"slider\"",[76,59577,51276],{"class":86},[76,59579,59580,59582,59584,59586,59588,59590],{"class":78,"line":16899},[76,59581,51310],{"class":86},[76,59583,51580],{"class":51269},[76,59585,53455],{"class":1927},[76,59587,133],{"class":86},[76,59589,55196],{"class":192},[76,59591,51276],{"class":86},[76,59593,59594,59596,59598,59600,59602,59605,59607,59609,59611],{"class":78,"line":32602},[76,59595,55203],{"class":86},[76,59597,1426],{"class":51269},[76,59599,55208],{"class":1927},[76,59601,133],{"class":86},[76,59603,59604],{"class":192},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[76,59606,55216],{"class":1927},[76,59608,133],{"class":86},[76,59610,7619],{"class":192},[76,59612,59096],{"class":86},[76,59614,59615,59617,59619],{"class":78,"line":32608},[76,59616,51745],{"class":86},[76,59618,51580],{"class":51269},[76,59620,51276],{"class":86},[76,59622,59623,59625,59627,59629,59631,59633],{"class":78,"line":32614},[76,59624,51310],{"class":86},[76,59626,51580],{"class":51269},[76,59628,53455],{"class":1927},[76,59630,133],{"class":86},[76,59632,55243],{"class":192},[76,59634,51276],{"class":86},[76,59636,59637,59639,59641,59644,59646],{"class":78,"line":32620},[76,59638,55203],{"class":86},[76,59640,21],{"class":51269},[76,59642,59643],{"class":86},">对人类来说会不会太超前了？\u003C\u002F",[76,59645,21],{"class":51269},[76,59647,51276],{"class":86},[76,59649,59650,59652,59654,59656,59658,59661],{"class":78,"line":32626},[76,59651,55203],{"class":86},[76,59653,1095],{"class":51269},[76,59655,53455],{"class":1927},[76,59657,133],{"class":86},[76,59659,59660],{"class":192},"\"slider-indicator\"",[76,59662,51276],{"class":86},[76,59664,59665,59667,59669,59671,59673,59676,59678,59680],{"class":78,"line":32637},[76,59666,55271],{"class":86},[76,59668,32],{"class":51269},[76,59670,53455],{"class":1927},[76,59672,133],{"class":86},[76,59674,59675],{"class":192},"\"active\"",[76,59677,55283],{"class":86},[76,59679,32],{"class":51269},[76,59681,51276],{"class":86},[76,59683,59684,59686,59688,59690,59692],{"class":78,"line":32643},[76,59685,55271],{"class":86},[76,59687,32],{"class":51269},[76,59689,55283],{"class":86},[76,59691,32],{"class":51269},[76,59693,51276],{"class":86},[76,59695,59696,59698,59700,59702,59704],{"class":78,"line":32663},[76,59697,55271],{"class":86},[76,59699,32],{"class":51269},[76,59701,55283],{"class":86},[76,59703,32],{"class":51269},[76,59705,51276],{"class":86},[76,59707,59708,59710,59712,59714,59716],{"class":78,"line":32669},[76,59709,55271],{"class":86},[76,59711,32],{"class":51269},[76,59713,55283],{"class":86},[76,59715,32],{"class":51269},[76,59717,51276],{"class":86},[76,59719,59720,59722,59724,59726,59728],{"class":78,"line":32680},[76,59721,55271],{"class":86},[76,59723,32],{"class":51269},[76,59725,55283],{"class":86},[76,59727,32],{"class":51269},[76,59729,51276],{"class":86},[76,59731,59732,59734,59736,59738,59740],{"class":78,"line":32686},[76,59733,55271],{"class":86},[76,59735,32],{"class":51269},[76,59737,55283],{"class":86},[76,59739,32],{"class":51269},[76,59741,51276],{"class":86},[76,59743,59744,59746,59748,59750,59752],{"class":78,"line":32692},[76,59745,55271],{"class":86},[76,59747,32],{"class":51269},[76,59749,55283],{"class":86},[76,59751,32],{"class":51269},[76,59753,51276],{"class":86},[76,59755,59756,59758,59760,59762,59764],{"class":78,"line":32698},[76,59757,55271],{"class":86},[76,59759,32],{"class":51269},[76,59761,55283],{"class":86},[76,59763,32],{"class":51269},[76,59765,51276],{"class":86},[76,59767,59768,59770,59772],{"class":78,"line":32704},[76,59769,55376],{"class":86},[76,59771,1095],{"class":51269},[76,59773,51276],{"class":86},[76,59775,59776,59778,59780,59782,59784,59787],{"class":78,"line":32710},[76,59777,55203],{"class":86},[76,59779,51580],{"class":51269},[76,59781,53455],{"class":1927},[76,59783,133],{"class":86},[76,59785,59786],{"class":192},"\"toggle\"",[76,59788,51276],{"class":86},[76,59790,59791,59793,59795,59797,59799,59802,59804,59807,59809,59811],{"class":78,"line":32716},[76,59792,55271],{"class":86},[76,59794,53856],{"class":51269},[76,59796,53455],{"class":1927},[76,59798,133],{"class":86},[76,59800,59801],{"class":192},"\"prev\"",[76,59803,1048],{"class":86},[76,59805,59806],{"class":136},"&lt;",[76,59808,51754],{"class":86},[76,59810,53856],{"class":51269},[76,59812,51276],{"class":86},[76,59814,59815,59817,59819,59821,59823,59826,59828,59831,59833,59835],{"class":78,"line":32722},[76,59816,55271],{"class":86},[76,59818,53856],{"class":51269},[76,59820,53455],{"class":1927},[76,59822,133],{"class":86},[76,59824,59825],{"class":192},"\"next\"",[76,59827,1048],{"class":86},[76,59829,59830],{"class":136},"&gt;",[76,59832,51754],{"class":86},[76,59834,53856],{"class":51269},[76,59836,51276],{"class":86},[76,59838,59839,59841,59843],{"class":78,"line":32742},[76,59840,55376],{"class":86},[76,59842,51580],{"class":51269},[76,59844,51276],{"class":86},[76,59846,59847,59849,59851],{"class":78,"line":32748},[76,59848,51745],{"class":86},[76,59850,51580],{"class":51269},[76,59852,51276],{"class":86},[76,59854,59855,59857,59859],{"class":78,"line":32764},[76,59856,52386],{"class":86},[76,59858,51580],{"class":51269},[76,59860,51276],{"class":86},[76,59862,59863,59865,59867],{"class":78,"line":32770},[76,59864,52113],{"class":86},[76,59866,51782],{"class":51269},[76,59868,51276],{"class":86},[76,59870,59871],{"class":78,"line":32784},[76,59872,59873],{"class":86},"    \u002F\u002F 1. 初始数据\n",[76,59875,59876],{"class":78,"line":32790},[76,59877,59878],{"class":86},"    const data = [\n",[76,59880,59881],{"class":78,"line":32805},[76,59882,59883],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[76,59885,59886],{"class":78,"line":32811},[76,59887,59888],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[76,59890,59891],{"class":78,"line":32820},[76,59892,59893],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[76,59895,59896],{"class":78,"line":32826},[76,59897,59898],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[76,59900,59901],{"class":78,"line":32835},[76,59902,59903],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[76,59905,59906],{"class":78,"line":32841},[76,59907,59908],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[76,59910,59911],{"class":78,"line":32847},[76,59912,59913],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[76,59915,59916],{"class":78,"line":32856},[76,59917,59918],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[76,59920,59921],{"class":78,"line":32862},[76,59922,53078],{"class":86},[76,59924,59925],{"class":78,"line":32873},[76,59926,59927],{"class":86},"    \u002F\u002F 获取元素\n",[76,59929,59930],{"class":78,"line":32879},[76,59931,59932],{"class":86},"    const img = document.querySelector('.slider-wrapper img')\n",[76,59934,59935],{"class":78,"line":32898},[76,59936,59937],{"class":86},"    const p = document.querySelector('.slider-footer p')\n",[76,59939,59940],{"class":78,"line":32904},[76,59941,59942],{"class":86},"    const footer = document.querySelector('.slider-footer')\n",[76,59944,59945],{"class":78,"line":32915},[76,59946,59947],{"class":86},"    \u002F\u002F 1. 右按钮业务\n",[76,59949,59950],{"class":78,"line":32921},[76,59951,59952],{"class":86},"    \u002F\u002F 1.1 获取右侧按钮 \n",[76,59954,59955],{"class":78,"line":32941},[76,59956,59957],{"class":86},"    const next = document.querySelector('.next')\n",[76,59959,59960],{"class":78,"line":32957},[76,59961,59962],{"class":86},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[76,59964,59965],{"class":78,"line":32963},[76,59966,59967],{"class":86},"    \u002F\u002F 1.2 注册点击事件\n",[76,59969,59970],{"class":78,"line":32977},[76,59971,2365],{"emptyLinePlaceholder":2364},[76,59973,59974],{"class":78,"line":32983},[76,59975,59976],{"class":86},"    next.addEventListener('click', function () {\n",[76,59978,59979],{"class":78,"line":32989},[76,59980,59981],{"class":86},"      \u002F\u002F console.log(11)\n",[76,59983,59984],{"class":78,"line":33000},[76,59985,59986],{"class":86},"      i++\n",[76,59988,59989],{"class":78,"line":33006},[76,59990,59991],{"class":86},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[76,59993,59994],{"class":78,"line":33012},[76,59995,59996],{"class":86},"      \u002F\u002F if (i >= 8) {\n",[76,59998,59999],{"class":78,"line":33022},[76,60000,60001],{"class":86},"      \u002F\u002F   i = 0\n",[76,60003,60004],{"class":78,"line":33028},[76,60005,60006],{"class":86},"      \u002F\u002F }\n",[76,60008,60009],{"class":78,"line":33039},[76,60010,60011],{"class":86},"      i = i >= data.length ? 0 : i\n",[76,60013,60014],{"class":78,"line":33045},[76,60015,60016],{"class":86},"      \u002F\u002F 1.3 得到对应的对象\n",[76,60018,60019],{"class":78,"line":33055},[76,60020,60021],{"class":86},"      \u002F\u002F console.log(data[i])\n",[76,60023,60024],{"class":78,"line":33060},[76,60025,60026],{"class":86},"      \u002F\u002F 调用函数\n",[76,60028,60029],{"class":78,"line":33066},[76,60030,60031],{"class":86},"      toggle()\n",[76,60033,60034],{"class":78,"line":33115},[76,60035,33430],{"class":86},[76,60037,60038],{"class":78,"line":33162},[76,60039,2365],{"emptyLinePlaceholder":2364},[76,60041,60042],{"class":78,"line":33167},[76,60043,60044],{"class":86},"    \u002F\u002F 2. 左侧按钮业务\n",[76,60046,60047],{"class":78,"line":33173},[76,60048,60049],{"class":86},"    \u002F\u002F 2.1 获取左侧按钮 \n",[76,60051,60052],{"class":78,"line":33192},[76,60053,60054],{"class":86},"    const prev = document.querySelector('.prev')\n",[76,60056,60057],{"class":78,"line":33198},[76,60058,59967],{"class":86},[76,60060,60061],{"class":78,"line":33218},[76,60062,60063],{"class":86},"    prev.addEventListener('click', function () {\n",[76,60065,60066],{"class":78,"line":33224},[76,60067,60068],{"class":86},"      i--\n",[76,60070,60071],{"class":78,"line":33230},[76,60072,60073],{"class":86},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[76,60075,60076],{"class":78,"line":33240},[76,60077,60078],{"class":86},"      \u002F\u002F if (i \u003C 0) {\n",[76,60080,60081],{"class":78,"line":33245},[76,60082,60083],{"class":86},"      \u002F\u002F   i = 7\n",[76,60085,60086],{"class":78,"line":33251},[76,60087,60006],{"class":86},[76,60089,60090],{"class":78,"line":33267},[76,60091,60092],{"class":86},"      i = i \u003C 0 ? data.length - 1 : i\n",[76,60094,60095],{"class":78,"line":33312},[76,60096,60016],{"class":86},[76,60098,60099],{"class":78,"line":33318},[76,60100,60021],{"class":86},[76,60102,60103],{"class":78,"line":33324},[76,60104,60026],{"class":86},[76,60106,60107],{"class":78,"line":33330},[76,60108,60031],{"class":86},[76,60110,60111],{"class":78,"line":33341},[76,60112,33430],{"class":86},[76,60114,60115],{"class":78,"line":33347},[76,60116,2365],{"emptyLinePlaceholder":2364},[76,60118,60119],{"class":78,"line":33353},[76,60120,60121],{"class":86},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[76,60123,60124],{"class":78,"line":33359},[76,60125,60126],{"class":86},"    function toggle() {\n",[76,60128,60129],{"class":78,"line":33377},[76,60130,60131],{"class":86},"      \u002F\u002F 1.4 渲染对应的数据\n",[76,60133,60134],{"class":78,"line":33391},[76,60135,60136],{"class":86},"      img.src = data[i].url\n",[76,60138,60139],{"class":78,"line":33400},[76,60140,60141],{"class":86},"      p.innerHTML = data[i].title\n",[76,60143,60144],{"class":78,"line":33409},[76,60145,60146],{"class":86},"      footer.style.backgroundColor = data[i].color\n",[76,60148,60149],{"class":78,"line":33418},[76,60150,60151],{"class":86},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[76,60153,60154],{"class":78,"line":33427},[76,60155,60156],{"class":86},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[76,60158,60159],{"class":78,"line":33433},[76,60160,60161],{"class":86},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[76,60163,60164],{"class":78,"line":33439},[76,60165,2151],{"class":86},[76,60167,60168],{"class":78,"line":33447},[76,60169,2365],{"emptyLinePlaceholder":2364},[76,60171,60172],{"class":78,"line":33452},[76,60173,60174],{"class":86},"    \u002F\u002F 3. 自动播放模块\n",[76,60176,60177],{"class":78,"line":33458},[76,60178,60179],{"class":86},"    let timerId = setInterval(function () {\n",[76,60181,60182],{"class":78,"line":33469},[76,60183,60184],{"class":86},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[76,60186,60187],{"class":78,"line":33475},[76,60188,60189],{"class":86},"      next.click()\n",[76,60191,60192],{"class":78,"line":33495},[76,60193,60194],{"class":86},"    }, 1000)\n",[76,60196,60197],{"class":78,"line":33501},[76,60198,2365],{"emptyLinePlaceholder":2364},[76,60200,60201],{"class":78,"line":33507},[76,60202,60203],{"class":86},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[76,60205,60206],{"class":78,"line":33513},[76,60207,60208],{"class":86},"    const slider = document.querySelector('.slider')\n",[76,60210,60211],{"class":78,"line":33530},[76,60212,60213],{"class":86},"    \u002F\u002F 注册事件\n",[76,60215,60216],{"class":78,"line":33536},[76,60217,60218],{"class":86},"    slider.addEventListener('mouseenter', function () {\n",[76,60220,60221],{"class":78,"line":33542},[76,60222,60223],{"class":86},"      \u002F\u002F 停止定时器\n",[76,60225,60226],{"class":78,"line":33548},[76,60227,60228],{"class":86},"      clearInterval(timerId)\n",[76,60230,60231],{"class":78,"line":33554},[76,60232,33430],{"class":86},[76,60234,60235],{"class":78,"line":33560},[76,60236,2365],{"emptyLinePlaceholder":2364},[76,60238,60239],{"class":78,"line":33587},[76,60240,60241],{"class":86},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[76,60243,60244],{"class":78,"line":33611},[76,60245,60213],{"class":86},[76,60247,60248],{"class":78,"line":33617},[76,60249,60250],{"class":86},"    slider.addEventListener('mouseleave', function () {\n",[76,60252,60253],{"class":78,"line":33623},[76,60254,60223],{"class":86},[76,60256,60257],{"class":78,"line":33629},[76,60258,60259],{"class":86},"      if (timerId) clearInterval(timerId)\n",[76,60261,60262],{"class":78,"line":33640},[76,60263,60264],{"class":86},"      \u002F\u002F 开启定时器\n",[76,60266,60267],{"class":78,"line":33651},[76,60268,60269],{"class":86},"      timerId = setInterval(function () {\n",[76,60271,60272],{"class":78,"line":33657},[76,60273,60274],{"class":86},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[76,60276,60277],{"class":78,"line":33674},[76,60278,60279],{"class":86},"        next.click()\n",[76,60281,60282],{"class":78,"line":33697},[76,60283,60284],{"class":86},"      }, 1000)\n",[76,60286,60287],{"class":78,"line":33720},[76,60288,33430],{"class":86},[76,60290,60291,60293,60295],{"class":78,"line":33726},[76,60292,52386],{"class":86},[76,60294,51782],{"class":51269},[76,60296,51276],{"class":86},[76,60298,60299,60301,60303],{"class":78,"line":33731},[76,60300,51754],{"class":86},[76,60302,51769],{"class":51269},[76,60304,51276],{"class":86},[76,60306,60307],{"class":78,"line":33740},[76,60308,2365],{"emptyLinePlaceholder":2364},[76,60310,60311,60313,60315],{"class":78,"line":33750},[76,60312,51754],{"class":86},[76,60314,50604],{"class":51269},[76,60316,51276],{"class":86},[21965,60318,60320],{"id":60319},"_3252-焦点事件","3.2.5.2 焦点事件",[21,60322,60323],{},"小米搜索框案例：",[66,60325,60327],{"className":50602,"code":60326,"language":50604,"meta":71,"style":71},"\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",[73,60328,60329,60339,60353,60357,60365,60379,60399,60419,60431,60439,60445,60455,60465,60477,60481,60485,60492,60496,60507,60511,60515,60522,60533,60546,60560,60564,60568,60577,60589,60601,60615,60628,60641,60659,60670,60674,60678,60687,60704,60708,60712,60719,60729,60739,60750,60763,60775,60791,60802,60814,60818,60822,60830,60841,60858,60870,60882,60893,60897,60901,60912,60923,60927,60935,60939,60947,60951,60959,60974,60997,61012,61043,61070,61097,61124,61151,61178,61205,61214,61222,61230,61235,61255,61275,61280,61285,61303,61308,61318,61323,61337,61342,61347,61364,61373,61385,61389,61397,61405,61409],{"__ignoreMap":71},[76,60330,60331,60333,60335,60337],{"class":78,"line":79},[76,60332,51266],{"class":86},[76,60334,51270],{"class":51269},[76,60336,51273],{"class":1927},[76,60338,51276],{"class":86},[76,60340,60341,60343,60345,60347,60349,60351],{"class":78,"line":96},[76,60342,998],{"class":86},[76,60344,50604],{"class":51269},[76,60346,51285],{"class":1927},[76,60348,133],{"class":86},[76,60350,51290],{"class":192},[76,60352,51276],{"class":86},[76,60354,60355],{"class":78,"line":1143},[76,60356,2365],{"emptyLinePlaceholder":2364},[76,60358,60359,60361,60363],{"class":78,"line":1158},[76,60360,998],{"class":86},[76,60362,51303],{"class":51269},[76,60364,51276],{"class":86},[76,60366,60367,60369,60371,60373,60375,60377],{"class":78,"line":1164},[76,60368,51310],{"class":86},[76,60370,51313],{"class":51269},[76,60372,51316],{"class":1927},[76,60374,133],{"class":86},[76,60376,51321],{"class":192},[76,60378,51276],{"class":86},[76,60380,60381,60383,60385,60387,60389,60391,60393,60395,60397],{"class":78,"line":1178},[76,60382,51310],{"class":86},[76,60384,51313],{"class":51269},[76,60386,51332],{"class":1927},[76,60388,133],{"class":86},[76,60390,51337],{"class":192},[76,60392,51340],{"class":1927},[76,60394,133],{"class":86},[76,60396,51345],{"class":192},[76,60398,51276],{"class":86},[76,60400,60401,60403,60405,60407,60409,60411,60413,60415,60417],{"class":78,"line":1184},[76,60402,51310],{"class":86},[76,60404,51313],{"class":51269},[76,60406,14887],{"class":1927},[76,60408,133],{"class":86},[76,60410,51360],{"class":192},[76,60412,51340],{"class":1927},[76,60414,133],{"class":86},[76,60416,51367],{"class":192},[76,60418,51276],{"class":86},[76,60420,60421,60423,60425,60427,60429],{"class":78,"line":1275},[76,60422,51310],{"class":86},[76,60424,51376],{"class":51269},[76,60426,51379],{"class":86},[76,60428,51376],{"class":51269},[76,60430,51276],{"class":86},[76,60432,60433,60435,60437],{"class":78,"line":1281},[76,60434,51310],{"class":86},[76,60436,5092],{"class":51269},[76,60438,51276],{"class":86},[76,60440,60441,60443],{"class":78,"line":1293},[76,60442,51396],{"class":51269},[76,60444,15539],{"class":86},[76,60446,60447,60449,60451,60453],{"class":78,"line":1576},[76,60448,51403],{"class":136},[76,60450,51406],{"class":86},[76,60452,279],{"class":136},[76,60454,1254],{"class":86},[76,60456,60457,60459,60461,60463],{"class":78,"line":1581},[76,60458,51415],{"class":136},[76,60460,51406],{"class":86},[76,60462,279],{"class":136},[76,60464,1254],{"class":86},[76,60466,60467,60470,60472,60475],{"class":78,"line":1587},[76,60468,60469],{"class":136},"            box-sizing",[76,60471,51406],{"class":86},[76,60473,60474],{"class":136},"border-box",[76,60476,1254],{"class":86},[76,60478,60479],{"class":78,"line":1592},[76,60480,2494],{"class":86},[76,60482,60483],{"class":78,"line":1606},[76,60484,2365],{"emptyLinePlaceholder":2364},[76,60486,60487,60490],{"class":78,"line":1611},[76,60488,60489],{"class":51269},"        ul",[76,60491,15539],{"class":86},[76,60493,60494],{"class":78,"line":1617},[76,60495,2365],{"emptyLinePlaceholder":2364},[76,60497,60498,60501,60503,60505],{"class":78,"line":1638},[76,60499,60500],{"class":136},"            list-style",[76,60502,51406],{"class":86},[76,60504,54706],{"class":136},[76,60506,1254],{"class":86},[76,60508,60509],{"class":78,"line":1643},[76,60510,2494],{"class":86},[76,60512,60513],{"class":78,"line":1657},[76,60514,2365],{"emptyLinePlaceholder":2364},[76,60516,60517,60520],{"class":78,"line":1662},[76,60518,60519],{"class":1927},"        .mi",[76,60521,15539],{"class":86},[76,60523,60524,60527,60529,60531],{"class":78,"line":1691},[76,60525,60526],{"class":136},"            position",[76,60528,51406],{"class":86},[76,60530,54733],{"class":136},[76,60532,1254],{"class":86},[76,60534,60535,60537,60539,60542,60544],{"class":78,"line":1696},[76,60536,51453],{"class":136},[76,60538,51406],{"class":86},[76,60540,60541],{"class":136},"223",[76,60543,51461],{"class":82},[76,60545,1254],{"class":86},[76,60547,60548,60550,60552,60554,60556,60558],{"class":78,"line":1713},[76,60549,51403],{"class":136},[76,60551,51406],{"class":86},[76,60553,399],{"class":136},[76,60555,51461],{"class":82},[76,60557,51525],{"class":136},[76,60559,1254],{"class":86},[76,60561,60562],{"class":78,"line":1718},[76,60563,2494],{"class":86},[76,60565,60566],{"class":78,"line":1723},[76,60567,2365],{"emptyLinePlaceholder":2364},[76,60569,60570,60572,60575],{"class":78,"line":1728},[76,60571,60519],{"class":1927},[76,60573,60574],{"class":51269}," input",[76,60576,15539],{"class":86},[76,60578,60579,60581,60583,60585,60587],{"class":78,"line":1742},[76,60580,51453],{"class":136},[76,60582,51406],{"class":86},[76,60584,60541],{"class":136},[76,60586,51461],{"class":82},[76,60588,1254],{"class":86},[76,60590,60591,60593,60595,60597,60599],{"class":78,"line":1747},[76,60592,51468],{"class":136},[76,60594,51406],{"class":86},[76,60596,695],{"class":136},[76,60598,51461],{"class":82},[76,60600,1254],{"class":86},[76,60602,60603,60605,60607,60609,60611,60613],{"class":78,"line":2542},[76,60604,51415],{"class":136},[76,60606,51406],{"class":86},[76,60608,279],{"class":136},[76,60610,2002],{"class":136},[76,60612,51461],{"class":82},[76,60614,1254],{"class":86},[76,60616,60617,60620,60622,60624,60626],{"class":78,"line":2556},[76,60618,60619],{"class":136},"            font-size",[76,60621,51406],{"class":86},[76,60623,637],{"class":136},[76,60625,51461],{"class":82},[76,60627,1254],{"class":86},[76,60629,60630,60633,60635,60637,60639],{"class":78,"line":2564},[76,60631,60632],{"class":136},"            line-height",[76,60634,51406],{"class":86},[76,60636,695],{"class":136},[76,60638,51461],{"class":82},[76,60640,1254],{"class":86},[76,60642,60643,60646,60648,60650,60652,60654,60657],{"class":78,"line":2569},[76,60644,60645],{"class":136},"            border",[76,60647,51406],{"class":86},[76,60649,305],{"class":136},[76,60651,51461],{"class":82},[76,60653,51490],{"class":136},[76,60655,60656],{"class":136}," #e0e0e0",[76,60658,1254],{"class":86},[76,60660,60661,60664,60666,60668],{"class":78,"line":2575},[76,60662,60663],{"class":136},"            outline",[76,60665,51406],{"class":86},[76,60667,54706],{"class":136},[76,60669,1254],{"class":86},[76,60671,60672],{"class":78,"line":2581},[76,60673,2494],{"class":86},[76,60675,60676],{"class":78,"line":2586},[76,60677,2365],{"emptyLinePlaceholder":2364},[76,60679,60680,60682,60685],{"class":78,"line":7915},[76,60681,60519],{"class":1927},[76,60683,60684],{"class":1927}," .search",[76,60686,15539],{"class":86},[76,60688,60689,60691,60693,60695,60697,60699,60702],{"class":78,"line":7939},[76,60690,60645],{"class":136},[76,60692,51406],{"class":86},[76,60694,305],{"class":136},[76,60696,51461],{"class":82},[76,60698,51490],{"class":136},[76,60700,60701],{"class":136}," #ff6700",[76,60703,1254],{"class":86},[76,60705,60706],{"class":78,"line":7944},[76,60707,2494],{"class":86},[76,60709,60710],{"class":78,"line":7950},[76,60711,2365],{"emptyLinePlaceholder":2364},[76,60713,60714,60717],{"class":78,"line":7977},[76,60715,60716],{"class":1927},"        .result-list",[76,60718,15539],{"class":86},[76,60720,60721,60723,60725,60727],{"class":78,"line":7982},[76,60722,51441],{"class":136},[76,60724,51406],{"class":86},[76,60726,54706],{"class":136},[76,60728,1254],{"class":86},[76,60730,60731,60733,60735,60737],{"class":78,"line":7988},[76,60732,60526],{"class":136},[76,60734,51406],{"class":86},[76,60736,54800],{"class":136},[76,60738,1254],{"class":86},[76,60740,60741,60744,60746,60748],{"class":78,"line":8000},[76,60742,60743],{"class":136},"            left",[76,60745,51406],{"class":86},[76,60747,279],{"class":136},[76,60749,1254],{"class":86},[76,60751,60752,60755,60757,60759,60761],{"class":78,"line":8012},[76,60753,60754],{"class":136},"            top",[76,60756,51406],{"class":86},[76,60758,695],{"class":136},[76,60760,51461],{"class":82},[76,60762,1254],{"class":86},[76,60764,60765,60767,60769,60771,60773],{"class":78,"line":8024},[76,60766,51453],{"class":136},[76,60768,51406],{"class":86},[76,60770,60541],{"class":136},[76,60772,51461],{"class":82},[76,60774,1254],{"class":86},[76,60776,60777,60779,60781,60783,60785,60787,60789],{"class":78,"line":9683},[76,60778,60645],{"class":136},[76,60780,51406],{"class":86},[76,60782,305],{"class":136},[76,60784,51461],{"class":82},[76,60786,51490],{"class":136},[76,60788,60701],{"class":136},[76,60790,1254],{"class":86},[76,60792,60793,60796,60798,60800],{"class":78,"line":9708},[76,60794,60795],{"class":136},"            border-top",[76,60797,51406],{"class":86},[76,60799,279],{"class":136},[76,60801,1254],{"class":86},[76,60803,60804,60807,60809,60812],{"class":78,"line":9731},[76,60805,60806],{"class":136},"            background",[76,60808,51406],{"class":86},[76,60810,60811],{"class":136},"#fff",[76,60813,1254],{"class":86},[76,60815,60816],{"class":78,"line":9755},[76,60817,2494],{"class":86},[76,60819,60820],{"class":78,"line":9760},[76,60821,2365],{"emptyLinePlaceholder":2364},[76,60823,60824,60826,60828],{"class":78,"line":9765},[76,60825,60716],{"class":1927},[76,60827,1362],{"class":51269},[76,60829,15539],{"class":86},[76,60831,60832,60834,60836,60839],{"class":78,"line":9770},[76,60833,51441],{"class":136},[76,60835,51406],{"class":86},[76,60837,60838],{"class":136},"block",[76,60840,1254],{"class":86},[76,60842,60843,60845,60847,60849,60851,60854,60856],{"class":78,"line":9779},[76,60844,51415],{"class":136},[76,60846,51406],{"class":86},[76,60848,432],{"class":136},[76,60850,51461],{"class":82},[76,60852,60853],{"class":136}," 15",[76,60855,51461],{"class":82},[76,60857,1254],{"class":86},[76,60859,60860,60862,60864,60866,60868],{"class":78,"line":9784},[76,60861,60619],{"class":136},[76,60863,51406],{"class":86},[76,60865,586],{"class":136},[76,60867,51461],{"class":82},[76,60869,1254],{"class":86},[76,60871,60872,60875,60877,60880],{"class":78,"line":9790},[76,60873,60874],{"class":136},"            color",[76,60876,51406],{"class":86},[76,60878,60879],{"class":136},"#424242",[76,60881,1254],{"class":86},[76,60883,60884,60887,60889,60891],{"class":78,"line":9811},[76,60885,60886],{"class":136},"            text-decoration",[76,60888,51406],{"class":86},[76,60890,54706],{"class":136},[76,60892,1254],{"class":86},[76,60894,60895],{"class":78,"line":9817},[76,60896,2494],{"class":86},[76,60898,60899],{"class":78,"line":9831},[76,60900,2365],{"emptyLinePlaceholder":2364},[76,60902,60903,60905,60907,60910],{"class":78,"line":9837},[76,60904,60716],{"class":1927},[76,60906,1362],{"class":51269},[76,60908,60909],{"class":1927},":hover",[76,60911,15539],{"class":86},[76,60913,60914,60916,60918,60921],{"class":78,"line":9864},[76,60915,51609],{"class":136},[76,60917,51406],{"class":86},[76,60919,60920],{"class":136},"#eee",[76,60922,1254],{"class":86},[76,60924,60925],{"class":78,"line":9873},[76,60926,2494],{"class":86},[76,60928,60929,60931,60933],{"class":78,"line":9879},[76,60930,51745],{"class":86},[76,60932,5092],{"class":51269},[76,60934,51276],{"class":86},[76,60936,60937],{"class":78,"line":9887},[76,60938,2365],{"emptyLinePlaceholder":2364},[76,60940,60941,60943,60945],{"class":78,"line":9892},[76,60942,51754],{"class":86},[76,60944,51303],{"class":51269},[76,60946,51276],{"class":86},[76,60948,60949],{"class":78,"line":16571},[76,60950,2365],{"emptyLinePlaceholder":2364},[76,60952,60953,60955,60957],{"class":78,"line":16577},[76,60954,998],{"class":86},[76,60956,51769],{"class":51269},[76,60958,51276],{"class":86},[76,60960,60961,60963,60965,60967,60969,60972],{"class":78,"line":16600},[76,60962,51310],{"class":86},[76,60964,51580],{"class":51269},[76,60966,53455],{"class":1927},[76,60968,133],{"class":86},[76,60970,60971],{"class":192},"\"mi\"",[76,60973,51276],{"class":86},[76,60975,60976,60978,60980,60982,60984,60987,60990,60992,60995],{"class":78,"line":16606},[76,60977,55271],{"class":86},[76,60979,53790],{"class":51269},[76,60981,53793],{"class":1927},[76,60983,133],{"class":86},[76,60985,60986],{"class":192},"\"search\"",[76,60988,60989],{"class":1927}," placeholder",[76,60991,133],{"class":86},[76,60993,60994],{"class":192},"\"小米笔记本\"",[76,60996,51276],{"class":86},[76,60998,60999,61001,61003,61005,61007,61010],{"class":78,"line":16629},[76,61000,55271],{"class":86},[76,61002,1095],{"class":51269},[76,61004,53455],{"class":1927},[76,61006,133],{"class":86},[76,61008,61009],{"class":192},"\"result-list\"",[76,61011,51276],{"class":86},[76,61013,61014,61017,61019,61022,61024,61027,61029,61032,61035,61037,61039,61041],{"class":78,"line":16643},[76,61015,61016],{"class":86},"            \u003C",[76,61018,32],{"class":51269},[76,61020,61021],{"class":86},">\u003C",[76,61023,326],{"class":51269},[76,61025,61026],{"class":1927}," href",[76,61028,133],{"class":86},[76,61030,61031],{"class":192},"\"#\"",[76,61033,61034],{"class":86},">全部商品\u003C\u002F",[76,61036,326],{"class":51269},[76,61038,55283],{"class":86},[76,61040,32],{"class":51269},[76,61042,51276],{"class":86},[76,61044,61045,61047,61049,61051,61053,61055,61057,61059,61062,61064,61066,61068],{"class":78,"line":16663},[76,61046,61016],{"class":86},[76,61048,32],{"class":51269},[76,61050,61021],{"class":86},[76,61052,326],{"class":51269},[76,61054,61026],{"class":1927},[76,61056,133],{"class":86},[76,61058,61031],{"class":192},[76,61060,61061],{"class":86},">小米11\u003C\u002F",[76,61063,326],{"class":51269},[76,61065,55283],{"class":86},[76,61067,32],{"class":51269},[76,61069,51276],{"class":86},[76,61071,61072,61074,61076,61078,61080,61082,61084,61086,61089,61091,61093,61095],{"class":78,"line":16669},[76,61073,61016],{"class":86},[76,61075,32],{"class":51269},[76,61077,61021],{"class":86},[76,61079,326],{"class":51269},[76,61081,61026],{"class":1927},[76,61083,133],{"class":86},[76,61085,61031],{"class":192},[76,61087,61088],{"class":86},">小米10S\u003C\u002F",[76,61090,326],{"class":51269},[76,61092,55283],{"class":86},[76,61094,32],{"class":51269},[76,61096,51276],{"class":86},[76,61098,61099,61101,61103,61105,61107,61109,61111,61113,61116,61118,61120,61122],{"class":78,"line":16680},[76,61100,61016],{"class":86},[76,61102,32],{"class":51269},[76,61104,61021],{"class":86},[76,61106,326],{"class":51269},[76,61108,61026],{"class":1927},[76,61110,133],{"class":86},[76,61112,61031],{"class":192},[76,61114,61115],{"class":86},">小米笔记本\u003C\u002F",[76,61117,326],{"class":51269},[76,61119,55283],{"class":86},[76,61121,32],{"class":51269},[76,61123,51276],{"class":86},[76,61125,61126,61128,61130,61132,61134,61136,61138,61140,61143,61145,61147,61149],{"class":78,"line":16703},[76,61127,61016],{"class":86},[76,61129,32],{"class":51269},[76,61131,61021],{"class":86},[76,61133,326],{"class":51269},[76,61135,61026],{"class":1927},[76,61137,133],{"class":86},[76,61139,61031],{"class":192},[76,61141,61142],{"class":86},">小米手机\u003C\u002F",[76,61144,326],{"class":51269},[76,61146,55283],{"class":86},[76,61148,32],{"class":51269},[76,61150,51276],{"class":86},[76,61152,61153,61155,61157,61159,61161,61163,61165,61167,61170,61172,61174,61176],{"class":78,"line":16725},[76,61154,61016],{"class":86},[76,61156,32],{"class":51269},[76,61158,61021],{"class":86},[76,61160,326],{"class":51269},[76,61162,61026],{"class":1927},[76,61164,133],{"class":86},[76,61166,61031],{"class":192},[76,61168,61169],{"class":86},">黑鲨4\u003C\u002F",[76,61171,326],{"class":51269},[76,61173,55283],{"class":86},[76,61175,32],{"class":51269},[76,61177,51276],{"class":86},[76,61179,61180,61182,61184,61186,61188,61190,61192,61194,61197,61199,61201,61203],{"class":78,"line":16730},[76,61181,61016],{"class":86},[76,61183,32],{"class":51269},[76,61185,61021],{"class":86},[76,61187,326],{"class":51269},[76,61189,61026],{"class":1927},[76,61191,133],{"class":86},[76,61193,61031],{"class":192},[76,61195,61196],{"class":86},">空调\u003C\u002F",[76,61198,326],{"class":51269},[76,61200,55283],{"class":86},[76,61202,32],{"class":51269},[76,61204,51276],{"class":86},[76,61206,61207,61210,61212],{"class":78,"line":16736},[76,61208,61209],{"class":86},"        \u003C\u002F",[76,61211,1095],{"class":51269},[76,61213,51276],{"class":86},[76,61215,61216,61218,61220],{"class":78,"line":16750},[76,61217,51745],{"class":86},[76,61219,51580],{"class":51269},[76,61221,51276],{"class":86},[76,61223,61224,61226,61228],{"class":78,"line":16763},[76,61225,51310],{"class":86},[76,61227,51782],{"class":51269},[76,61229,51276],{"class":86},[76,61231,61232],{"class":78,"line":16768},[76,61233,61234],{"class":146},"        \u002F\u002F 1. 获取元素\n",[76,61236,61237,61240,61242,61244,61246,61248,61250,61253],{"class":78,"line":16782},[76,61238,61239],{"class":82},"        const",[76,61241,60574],{"class":136},[76,61243,13531],{"class":82},[76,61245,54365],{"class":86},[76,61247,54368],{"class":1927},[76,61249,87],{"class":86},[76,61251,61252],{"class":192},"'[type=search]'",[76,61254,93],{"class":86},[76,61256,61257,61259,61262,61264,61266,61268,61270,61273],{"class":78,"line":16787},[76,61258,61239],{"class":82},[76,61260,61261],{"class":136}," ul",[76,61263,13531],{"class":82},[76,61265,54365],{"class":86},[76,61267,54368],{"class":1927},[76,61269,87],{"class":86},[76,61271,61272],{"class":192},"'.result-list'",[76,61274,93],{"class":86},[76,61276,61277],{"class":78,"line":16793},[76,61278,61279],{"class":146},"        \u002F\u002F console.log(input)\n",[76,61281,61282],{"class":78,"line":16798},[76,61283,61284],{"class":146},"        \u002F\u002F 2. 监听事件 获得焦点\n",[76,61286,61287,61290,61292,61294,61297,61299,61301],{"class":78,"line":16812},[76,61288,61289],{"class":86},"        input.",[76,61291,57782],{"class":1927},[76,61293,87],{"class":86},[76,61295,61296],{"class":192},"'focus'",[76,61298,12402],{"class":86},[76,61300,54418],{"class":82},[76,61302,54421],{"class":86},[76,61304,61305],{"class":78,"line":16817},[76,61306,61307],{"class":146},"            \u002F\u002F ul显示\n",[76,61309,61310,61313,61315],{"class":78,"line":16822},[76,61311,61312],{"class":86},"            ul.style.display ",[76,61314,133],{"class":82},[76,61316,61317],{"class":192}," 'block'\n",[76,61319,61320],{"class":78,"line":16836},[76,61321,61322],{"class":146},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[76,61324,61325,61328,61330,61332,61335],{"class":78,"line":16848},[76,61326,61327],{"class":86},"            input.classList.",[76,61329,5301],{"class":1927},[76,61331,87],{"class":86},[76,61333,61334],{"class":192},"'search'",[76,61336,93],{"class":86},[76,61338,61339],{"class":78,"line":16853},[76,61340,61341],{"class":86},"        })\n",[76,61343,61344],{"class":78,"line":16866},[76,61345,61346],{"class":146},"        \u002F\u002F 3. 监听事件 失去焦点\n",[76,61348,61349,61351,61353,61355,61358,61360,61362],{"class":78,"line":16871},[76,61350,61289],{"class":86},[76,61352,57782],{"class":1927},[76,61354,87],{"class":86},[76,61356,61357],{"class":192},"'blur'",[76,61359,12402],{"class":86},[76,61361,54418],{"class":82},[76,61363,54421],{"class":86},[76,61365,61366,61368,61370],{"class":78,"line":16876},[76,61367,61312],{"class":86},[76,61369,133],{"class":82},[76,61371,61372],{"class":192}," 'none'\n",[76,61374,61375,61377,61379,61381,61383],{"class":78,"line":16881},[76,61376,61327],{"class":86},[76,61378,56975],{"class":1927},[76,61380,87],{"class":86},[76,61382,61334],{"class":192},[76,61384,93],{"class":86},[76,61386,61387],{"class":78,"line":16894},[76,61388,61341],{"class":86},[76,61390,61391,61393,61395],{"class":78,"line":16899},[76,61392,51745],{"class":86},[76,61394,51782],{"class":51269},[76,61396,51276],{"class":86},[76,61398,61399,61401,61403],{"class":78,"line":32602},[76,61400,51754],{"class":86},[76,61402,51769],{"class":51269},[76,61404,51276],{"class":86},[76,61406,61407],{"class":78,"line":32608},[76,61408,2365],{"emptyLinePlaceholder":2364},[76,61410,61411,61413,61415],{"class":78,"line":32614},[76,61412,51754],{"class":86},[76,61414,50604],{"class":51269},[76,61416,51276],{"class":86},[21965,61418,61420],{"id":61419},"_3253-键盘事件","3.2.5.3 键盘事件",[21,61422,61423],{},"评论字数统计案例",[21,61425,61426],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[21,61428,61429],{},"牢记focus伪类选择器",[51313,61431],{"charSet":61432},"UTF-8",[51313,61434],{"name":61435,"content":61436},"viewport","width=device-width, initial-scale=1.0",[51376,61438,61439],{},"Document",[5092,61441,61442],{},"\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",[53790,61444],{"type":5154},[1095,61446,61447,61450],{},[32,61448,61449],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[32,61451,61452],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[66,61454,61456],{"className":50602,"code":61455,"language":50604,"meta":71,"style":71},"\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",[73,61457,61458,61468,61482,61486,61494,61508,61528,61548,61561,61569,61576,61589,61603,61613,61623,61627,61631,61638,61650,61662,61674,61686,61715,61728,61732,61736,61745,61756,61768,61779,61790,61802,61813,61825,61841,61853,61857,61861,61872,61883,61893,61905,61909,61913,61921,61932,61942,61953,61965,61978,61990,62002,62006,62010,62019,62031,62042,62055,62066,62080,62084,62088,62095,62107,62119,62129,62133,62137,62146,62158,62168,62172,62176,62187,62197,62216,62229,62233,62237,62247,62257,62261,62265,62276,62287,62299,62311,62315,62319,62330,62341,62355,62359,62363,62374,62384,62396,62400,62408,62416,62420,62428,62443,62462,62502,62515,62523,62537,62557,62565,62580,62603,62621,62636,62656,62676,62696,62704,62712,62720,62728,62748,62768,62773,62790,62799,62803,62808,62824,62832,62836,62841,62858,62863,62888,62892,62896,62901,62906,62914,62922,62926],{"__ignoreMap":71},[76,61459,61460,61462,61464,61466],{"class":78,"line":79},[76,61461,51266],{"class":86},[76,61463,51270],{"class":51269},[76,61465,51273],{"class":1927},[76,61467,51276],{"class":86},[76,61469,61470,61472,61474,61476,61478,61480],{"class":78,"line":96},[76,61471,998],{"class":86},[76,61473,50604],{"class":51269},[76,61475,51285],{"class":1927},[76,61477,133],{"class":86},[76,61479,51290],{"class":192},[76,61481,51276],{"class":86},[76,61483,61484],{"class":78,"line":1143},[76,61485,2365],{"emptyLinePlaceholder":2364},[76,61487,61488,61490,61492],{"class":78,"line":1158},[76,61489,998],{"class":86},[76,61491,51303],{"class":51269},[76,61493,51276],{"class":86},[76,61495,61496,61498,61500,61502,61504,61506],{"class":78,"line":1164},[76,61497,52113],{"class":86},[76,61499,51313],{"class":51269},[76,61501,51316],{"class":1927},[76,61503,133],{"class":86},[76,61505,51321],{"class":192},[76,61507,51276],{"class":86},[76,61509,61510,61512,61514,61516,61518,61520,61522,61524,61526],{"class":78,"line":1178},[76,61511,52113],{"class":86},[76,61513,51313],{"class":51269},[76,61515,51332],{"class":1927},[76,61517,133],{"class":86},[76,61519,51337],{"class":192},[76,61521,51340],{"class":1927},[76,61523,133],{"class":86},[76,61525,51345],{"class":192},[76,61527,51276],{"class":86},[76,61529,61530,61532,61534,61536,61538,61540,61542,61544,61546],{"class":78,"line":1184},[76,61531,52113],{"class":86},[76,61533,51313],{"class":51269},[76,61535,14887],{"class":1927},[76,61537,133],{"class":86},[76,61539,51360],{"class":192},[76,61541,51340],{"class":1927},[76,61543,133],{"class":86},[76,61545,51367],{"class":192},[76,61547,51276],{"class":86},[76,61549,61550,61552,61554,61557,61559],{"class":78,"line":1275},[76,61551,52113],{"class":86},[76,61553,51376],{"class":51269},[76,61555,61556],{"class":86},">评论回车发布\u003C\u002F",[76,61558,51376],{"class":51269},[76,61560,51276],{"class":86},[76,61562,61563,61565,61567],{"class":78,"line":1281},[76,61564,52113],{"class":86},[76,61566,5092],{"class":51269},[76,61568,51276],{"class":86},[76,61570,61571,61574],{"class":78,"line":1293},[76,61572,61573],{"class":1927},"    .wrapper",[76,61575,15539],{"class":86},[76,61577,61578,61581,61583,61585,61587],{"class":78,"line":1576},[76,61579,61580],{"class":136},"      min-width",[76,61582,51406],{"class":86},[76,61584,3952],{"class":136},[76,61586,51461],{"class":82},[76,61588,1254],{"class":86},[76,61590,61591,61594,61596,61599,61601],{"class":78,"line":1581},[76,61592,61593],{"class":136},"      max-width",[76,61595,51406],{"class":86},[76,61597,61598],{"class":136},"800",[76,61600,51461],{"class":82},[76,61602,1254],{"class":86},[76,61604,61605,61607,61609,61611],{"class":78,"line":1587},[76,61606,54978],{"class":136},[76,61608,51406],{"class":86},[76,61610,51446],{"class":136},[76,61612,1254],{"class":86},[76,61614,61615,61617,61619,61621],{"class":78,"line":1592},[76,61616,54989],{"class":136},[76,61618,51406],{"class":86},[76,61620,51549],{"class":136},[76,61622,1254],{"class":86},[76,61624,61625],{"class":78,"line":1606},[76,61626,2151],{"class":86},[76,61628,61629],{"class":78,"line":1611},[76,61630,2365],{"emptyLinePlaceholder":2364},[76,61632,61633,61636],{"class":78,"line":1617},[76,61634,61635],{"class":1927},"    .avatar",[76,61637,15539],{"class":86},[76,61639,61640,61642,61644,61646,61648],{"class":78,"line":1638},[76,61641,54740],{"class":136},[76,61643,51406],{"class":86},[76,61645,695],{"class":136},[76,61647,51461],{"class":82},[76,61649,1254],{"class":86},[76,61651,61652,61654,61656,61658,61660],{"class":78,"line":1643},[76,61653,54754],{"class":136},[76,61655,51406],{"class":86},[76,61657,695],{"class":136},[76,61659,51461],{"class":82},[76,61661,1254],{"class":86},[76,61663,61664,61666,61668,61670,61672],{"class":78,"line":1657},[76,61665,55103],{"class":136},[76,61667,51406],{"class":86},[76,61669,744],{"class":136},[76,61671,416],{"class":82},[76,61673,1254],{"class":86},[76,61675,61676,61679,61681,61684],{"class":78,"line":1662},[76,61677,61678],{"class":136},"      overflow",[76,61680,51406],{"class":86},[76,61682,61683],{"class":136},"hidden",[76,61685,1254],{"class":86},[76,61687,61688,61691,61693,61696,61698,61701,61703,61706,61708,61710,61713],{"class":78,"line":1691},[76,61689,61690],{"class":136},"      background",[76,61692,51406],{"class":86},[76,61694,61695],{"class":136},"url",[76,61697,87],{"class":86},[76,61699,61700],{"class":5183},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[76,61702,13681],{"class":86},[76,61704,61705],{"class":136},"no-repeat",[76,61707,17111],{"class":136},[76,61709,24947],{"class":86},[76,61711,61712],{"class":136},"cover",[76,61714,1254],{"class":86},[76,61716,61717,61720,61722,61724,61726],{"class":78,"line":1696},[76,61718,61719],{"class":136},"      margin-right",[76,61721,51406],{"class":86},[76,61723,788],{"class":136},[76,61725,51461],{"class":82},[76,61727,1254],{"class":86},[76,61729,61730],{"class":78,"line":1713},[76,61731,2151],{"class":86},[76,61733,61734],{"class":78,"line":1718},[76,61735,2365],{"emptyLinePlaceholder":2364},[76,61737,61738,61740,61743],{"class":78,"line":1723},[76,61739,61573],{"class":1927},[76,61741,61742],{"class":51269}," textarea",[76,61744,15539],{"class":86},[76,61746,61747,61750,61752,61754],{"class":78,"line":1728},[76,61748,61749],{"class":136},"      outline",[76,61751,51406],{"class":86},[76,61753,54706],{"class":136},[76,61755,1254],{"class":86},[76,61757,61758,61761,61763,61766],{"class":78,"line":1742},[76,61759,61760],{"class":136},"      border-color",[76,61762,51406],{"class":86},[76,61764,61765],{"class":136},"transparent",[76,61767,1254],{"class":86},[76,61769,61770,61773,61775,61777],{"class":78,"line":1747},[76,61771,61772],{"class":136},"      resize",[76,61774,51406],{"class":86},[76,61776,54706],{"class":136},[76,61778,1254],{"class":86},[76,61780,61781,61783,61785,61788],{"class":78,"line":2542},[76,61782,61690],{"class":136},[76,61784,51406],{"class":86},[76,61786,61787],{"class":136},"#f5f5f5",[76,61789,1254],{"class":86},[76,61791,61792,61794,61796,61798,61800],{"class":78,"line":2556},[76,61793,55103],{"class":136},[76,61795,51406],{"class":86},[76,61797,381],{"class":136},[76,61799,51461],{"class":82},[76,61801,1254],{"class":86},[76,61803,61804,61807,61809,61811],{"class":78,"line":2564},[76,61805,61806],{"class":136},"      flex",[76,61808,51406],{"class":86},[76,61810,305],{"class":136},[76,61812,1254],{"class":86},[76,61814,61815,61817,61819,61821,61823],{"class":78,"line":2569},[76,61816,54664],{"class":136},[76,61818,51406],{"class":86},[76,61820,534],{"class":136},[76,61822,51461],{"class":82},[76,61824,1254],{"class":86},[76,61826,61827,61830,61832,61834,61837,61839],{"class":78,"line":2575},[76,61828,61829],{"class":136},"      transition",[76,61831,51406],{"class":86},[76,61833,28090],{"class":136},[76,61835,61836],{"class":136}," 0.5",[76,61838,783],{"class":82},[76,61840,1254],{"class":86},[76,61842,61843,61845,61847,61849,61851],{"class":78,"line":2581},[76,61844,54754],{"class":136},[76,61846,51406],{"class":86},[76,61848,1039],{"class":136},[76,61850,51461],{"class":82},[76,61852,1254],{"class":86},[76,61854,61855],{"class":78,"line":2586},[76,61856,2151],{"class":86},[76,61858,61859],{"class":78,"line":7915},[76,61860,2365],{"emptyLinePlaceholder":2364},[76,61862,61863,61865,61867,61870],{"class":78,"line":7939},[76,61864,61573],{"class":1927},[76,61866,61742],{"class":51269},[76,61868,61869],{"class":1927},":focus",[76,61871,15539],{"class":86},[76,61873,61874,61876,61878,61881],{"class":78,"line":7944},[76,61875,61760],{"class":136},[76,61877,51406],{"class":86},[76,61879,61880],{"class":136},"#e4e4e4",[76,61882,1254],{"class":86},[76,61884,61885,61887,61889,61891],{"class":78,"line":7950},[76,61886,61690],{"class":136},[76,61888,51406],{"class":86},[76,61890,60811],{"class":136},[76,61892,1254],{"class":86},[76,61894,61895,61897,61899,61901,61903],{"class":78,"line":7977},[76,61896,54754],{"class":136},[76,61898,51406],{"class":86},[76,61900,744],{"class":136},[76,61902,51461],{"class":82},[76,61904,1254],{"class":86},[76,61906,61907],{"class":78,"line":7982},[76,61908,2151],{"class":86},[76,61910,61911],{"class":78,"line":7988},[76,61912,2365],{"emptyLinePlaceholder":2364},[76,61914,61915,61917,61919],{"class":78,"line":8000},[76,61916,61573],{"class":1927},[76,61918,57436],{"class":51269},[76,61920,15539],{"class":86},[76,61922,61923,61925,61927,61930],{"class":78,"line":8012},[76,61924,61690],{"class":136},[76,61926,51406],{"class":86},[76,61928,61929],{"class":136},"#00aeec",[76,61931,1254],{"class":86},[76,61933,61934,61936,61938,61940],{"class":78,"line":8024},[76,61935,57385],{"class":136},[76,61937,51406],{"class":86},[76,61939,60811],{"class":136},[76,61941,1254],{"class":86},[76,61943,61944,61947,61949,61951],{"class":78,"line":9683},[76,61945,61946],{"class":136},"      border",[76,61948,51406],{"class":86},[76,61950,54706],{"class":136},[76,61952,1254],{"class":86},[76,61954,61955,61957,61959,61961,61963],{"class":78,"line":9708},[76,61956,55103],{"class":136},[76,61958,51406],{"class":86},[76,61960,381],{"class":136},[76,61962,51461],{"class":82},[76,61964,1254],{"class":86},[76,61966,61967,61970,61972,61974,61976],{"class":78,"line":9731},[76,61968,61969],{"class":136},"      margin-left",[76,61971,51406],{"class":86},[76,61973,534],{"class":136},[76,61975,51461],{"class":82},[76,61977,1254],{"class":86},[76,61979,61980,61982,61984,61986,61988],{"class":78,"line":9755},[76,61981,54740],{"class":136},[76,61983,51406],{"class":86},[76,61985,444],{"class":136},[76,61987,51461],{"class":82},[76,61989,1254],{"class":86},[76,61991,61992,61995,61997,62000],{"class":78,"line":9760},[76,61993,61994],{"class":136},"      cursor",[76,61996,51406],{"class":86},[76,61998,61999],{"class":136},"pointer",[76,62001,1254],{"class":86},[76,62003,62004],{"class":78,"line":9765},[76,62005,2151],{"class":86},[76,62007,62008],{"class":78,"line":9770},[76,62009,2365],{"emptyLinePlaceholder":2364},[76,62011,62012,62014,62017],{"class":78,"line":9779},[76,62013,61573],{"class":1927},[76,62015,62016],{"class":1927}," .total",[76,62018,15539],{"class":86},[76,62020,62021,62023,62025,62027,62029],{"class":78,"line":9784},[76,62022,61719],{"class":136},[76,62024,51406],{"class":86},[76,62026,700],{"class":136},[76,62028,51461],{"class":82},[76,62030,1254],{"class":86},[76,62032,62033,62035,62037,62040],{"class":78,"line":9790},[76,62034,57385],{"class":136},[76,62036,51406],{"class":86},[76,62038,62039],{"class":136},"#999",[76,62041,1254],{"class":86},[76,62043,62044,62047,62049,62051,62053],{"class":78,"line":9811},[76,62045,62046],{"class":136},"      margin-top",[76,62048,51406],{"class":86},[76,62050,407],{"class":136},[76,62052,51461],{"class":82},[76,62054,1254],{"class":86},[76,62056,62057,62060,62062,62064],{"class":78,"line":9817},[76,62058,62059],{"class":136},"      opacity",[76,62061,51406],{"class":86},[76,62063,279],{"class":136},[76,62065,1254],{"class":86},[76,62067,62068,62070,62072,62074,62076,62078],{"class":78,"line":9831},[76,62069,61829],{"class":136},[76,62071,51406],{"class":86},[76,62073,28090],{"class":136},[76,62075,61836],{"class":136},[76,62077,783],{"class":82},[76,62079,1254],{"class":86},[76,62081,62082],{"class":78,"line":9837},[76,62083,2151],{"class":86},[76,62085,62086],{"class":78,"line":9864},[76,62087,2365],{"emptyLinePlaceholder":2364},[76,62089,62090,62093],{"class":78,"line":9873},[76,62091,62092],{"class":1927},"    .list",[76,62094,15539],{"class":86},[76,62096,62097,62099,62101,62103,62105],{"class":78,"line":9879},[76,62098,61580],{"class":136},[76,62100,51406],{"class":86},[76,62102,3952],{"class":136},[76,62104,51461],{"class":82},[76,62106,1254],{"class":86},[76,62108,62109,62111,62113,62115,62117],{"class":78,"line":9887},[76,62110,61593],{"class":136},[76,62112,51406],{"class":86},[76,62114,61598],{"class":136},[76,62116,51461],{"class":82},[76,62118,1254],{"class":86},[76,62120,62121,62123,62125,62127],{"class":78,"line":9892},[76,62122,54978],{"class":136},[76,62124,51406],{"class":86},[76,62126,51446],{"class":136},[76,62128,1254],{"class":86},[76,62130,62131],{"class":78,"line":16571},[76,62132,2151],{"class":86},[76,62134,62135],{"class":78,"line":16577},[76,62136,2365],{"emptyLinePlaceholder":2364},[76,62138,62139,62141,62144],{"class":78,"line":16600},[76,62140,62092],{"class":1927},[76,62142,62143],{"class":1927}," .item",[76,62145,15539],{"class":86},[76,62147,62148,62150,62152,62154,62156],{"class":78,"line":16606},[76,62149,54740],{"class":136},[76,62151,51406],{"class":86},[76,62153,399],{"class":136},[76,62155,416],{"class":82},[76,62157,1254],{"class":86},[76,62159,62160,62162,62164,62166],{"class":78,"line":16629},[76,62161,54978],{"class":136},[76,62163,51406],{"class":86},[76,62165,51446],{"class":136},[76,62167,1254],{"class":86},[76,62169,62170],{"class":78,"line":16643},[76,62171,2151],{"class":86},[76,62173,62174],{"class":78,"line":16663},[76,62175,2365],{"emptyLinePlaceholder":2364},[76,62177,62178,62180,62182,62185],{"class":78,"line":16669},[76,62179,62092],{"class":1927},[76,62181,62143],{"class":1927},[76,62183,62184],{"class":1927}," .info",[76,62186,15539],{"class":86},[76,62188,62189,62191,62193,62195],{"class":78,"line":16680},[76,62190,61806],{"class":136},[76,62192,51406],{"class":86},[76,62194,305],{"class":136},[76,62196,1254],{"class":86},[76,62198,62199,62202,62204,62206,62208,62211,62214],{"class":78,"line":16703},[76,62200,62201],{"class":136},"      border-bottom",[76,62203,51406],{"class":86},[76,62205,305],{"class":136},[76,62207,51461],{"class":82},[76,62209,62210],{"class":136}," dashed",[76,62212,62213],{"class":136}," #e4e4e4",[76,62215,1254],{"class":86},[76,62217,62218,62221,62223,62225,62227],{"class":78,"line":16725},[76,62219,62220],{"class":136},"      padding-bottom",[76,62222,51406],{"class":86},[76,62224,534],{"class":136},[76,62226,51461],{"class":82},[76,62228,1254],{"class":86},[76,62230,62231],{"class":78,"line":16730},[76,62232,2151],{"class":86},[76,62234,62235],{"class":78,"line":16736},[76,62236,2365],{"emptyLinePlaceholder":2364},[76,62238,62239,62241,62243,62245],{"class":78,"line":16750},[76,62240,62092],{"class":1927},[76,62242,62143],{"class":1927},[76,62244,6792],{"class":51269},[76,62246,15539],{"class":86},[76,62248,62249,62251,62253,62255],{"class":78,"line":16763},[76,62250,54675],{"class":136},[76,62252,51406],{"class":86},[76,62254,279],{"class":136},[76,62256,1254],{"class":86},[76,62258,62259],{"class":78,"line":16768},[76,62260,2151],{"class":86},[76,62262,62263],{"class":78,"line":16782},[76,62264,2365],{"emptyLinePlaceholder":2364},[76,62266,62267,62269,62271,62274],{"class":78,"line":16787},[76,62268,62092],{"class":1927},[76,62270,62143],{"class":1927},[76,62272,62273],{"class":1927}," .name",[76,62275,15539],{"class":86},[76,62277,62278,62280,62282,62285],{"class":78,"line":16793},[76,62279,57385],{"class":136},[76,62281,51406],{"class":86},[76,62283,62284],{"class":136},"#FB7299",[76,62286,1254],{"class":86},[76,62288,62289,62291,62293,62295,62297],{"class":78,"line":16798},[76,62290,54891],{"class":136},[76,62292,51406],{"class":86},[76,62294,637],{"class":136},[76,62296,51461],{"class":82},[76,62298,1254],{"class":86},[76,62300,62301,62304,62306,62309],{"class":78,"line":16812},[76,62302,62303],{"class":136},"      font-weight",[76,62305,51406],{"class":86},[76,62307,62308],{"class":136},"bold",[76,62310,1254],{"class":86},[76,62312,62313],{"class":78,"line":16817},[76,62314,2151],{"class":86},[76,62316,62317],{"class":78,"line":16822},[76,62318,2365],{"emptyLinePlaceholder":2364},[76,62320,62321,62323,62325,62328],{"class":78,"line":16836},[76,62322,62092],{"class":1927},[76,62324,62143],{"class":1927},[76,62326,62327],{"class":1927}," .text",[76,62329,15539],{"class":86},[76,62331,62332,62334,62336,62339],{"class":78,"line":16848},[76,62333,57385],{"class":136},[76,62335,51406],{"class":86},[76,62337,62338],{"class":136},"#333",[76,62340,1254],{"class":86},[76,62342,62343,62345,62347,62349,62351,62353],{"class":78,"line":16853},[76,62344,54664],{"class":136},[76,62346,51406],{"class":86},[76,62348,534],{"class":136},[76,62350,51461],{"class":82},[76,62352,4058],{"class":136},[76,62354,1254],{"class":86},[76,62356,62357],{"class":78,"line":16866},[76,62358,2151],{"class":86},[76,62360,62361],{"class":78,"line":16871},[76,62362,2365],{"emptyLinePlaceholder":2364},[76,62364,62365,62367,62369,62372],{"class":78,"line":16876},[76,62366,62092],{"class":1927},[76,62368,62143],{"class":1927},[76,62370,62371],{"class":1927}," .time",[76,62373,15539],{"class":86},[76,62375,62376,62378,62380,62382],{"class":78,"line":16881},[76,62377,57385],{"class":136},[76,62379,51406],{"class":86},[76,62381,62039],{"class":136},[76,62383,1254],{"class":86},[76,62385,62386,62388,62390,62392,62394],{"class":78,"line":16894},[76,62387,54891],{"class":136},[76,62389,51406],{"class":86},[76,62391,586],{"class":136},[76,62393,51461],{"class":82},[76,62395,1254],{"class":86},[76,62397,62398],{"class":78,"line":16899},[76,62399,2151],{"class":86},[76,62401,62402,62404,62406],{"class":78,"line":32602},[76,62403,52386],{"class":86},[76,62405,5092],{"class":51269},[76,62407,51276],{"class":86},[76,62409,62410,62412,62414],{"class":78,"line":32608},[76,62411,51754],{"class":86},[76,62413,51303],{"class":51269},[76,62415,51276],{"class":86},[76,62417,62418],{"class":78,"line":32614},[76,62419,2365],{"emptyLinePlaceholder":2364},[76,62421,62422,62424,62426],{"class":78,"line":32620},[76,62423,998],{"class":86},[76,62425,51769],{"class":51269},[76,62427,51276],{"class":86},[76,62429,62430,62432,62434,62436,62438,62441],{"class":78,"line":32626},[76,62431,52113],{"class":86},[76,62433,51580],{"class":51269},[76,62435,53455],{"class":1927},[76,62437,133],{"class":86},[76,62439,62440],{"class":192},"\"wrapper\"",[76,62442,51276],{"class":86},[76,62444,62445,62447,62449,62451,62453,62456,62458,62460],{"class":78,"line":32637},[76,62446,51310],{"class":86},[76,62448,529],{"class":51269},[76,62450,53455],{"class":1927},[76,62452,133],{"class":86},[76,62454,62455],{"class":192},"\"avatar\"",[76,62457,55283],{"class":86},[76,62459,529],{"class":51269},[76,62461,51276],{"class":86},[76,62463,62464,62466,62468,62470,62472,62475,62477,62479,62482,62484,62486,62488,62491,62493,62496,62498,62500],{"class":78,"line":32643},[76,62465,51310],{"class":86},[76,62467,54257],{"class":51269},[76,62469,14926],{"class":1927},[76,62471,133],{"class":86},[76,62473,62474],{"class":192},"\"tx\"",[76,62476,60989],{"class":1927},[76,62478,133],{"class":86},[76,62480,62481],{"class":192},"\"发一条友善的评论\"",[76,62483,54280],{"class":1927},[76,62485,133],{"class":86},[76,62487,3666],{"class":192},[76,62489,62490],{"class":1927}," maxlength",[76,62492,133],{"class":86},[76,62494,62495],{"class":192},"\"200\"",[76,62497,55283],{"class":86},[76,62499,54257],{"class":51269},[76,62501,51276],{"class":86},[76,62503,62504,62506,62508,62511,62513],{"class":78,"line":32663},[76,62505,51310],{"class":86},[76,62507,53856],{"class":51269},[76,62509,62510],{"class":86},">发布\u003C\u002F",[76,62512,53856],{"class":51269},[76,62514,51276],{"class":86},[76,62516,62517,62519,62521],{"class":78,"line":32669},[76,62518,52386],{"class":86},[76,62520,51580],{"class":51269},[76,62522,51276],{"class":86},[76,62524,62525,62527,62529,62531,62533,62535],{"class":78,"line":32680},[76,62526,52113],{"class":86},[76,62528,51580],{"class":51269},[76,62530,53455],{"class":1927},[76,62532,133],{"class":86},[76,62534,62440],{"class":192},[76,62536,51276],{"class":86},[76,62538,62539,62541,62543,62545,62547,62550,62553,62555],{"class":78,"line":32686},[76,62540,51310],{"class":86},[76,62542,76],{"class":51269},[76,62544,53455],{"class":1927},[76,62546,133],{"class":86},[76,62548,62549],{"class":192},"\"total\"",[76,62551,62552],{"class":86},">0\u002F200字\u003C\u002F",[76,62554,76],{"class":51269},[76,62556,51276],{"class":86},[76,62558,62559,62561,62563],{"class":78,"line":32692},[76,62560,52386],{"class":86},[76,62562,51580],{"class":51269},[76,62564,51276],{"class":86},[76,62566,62567,62569,62571,62573,62575,62578],{"class":78,"line":32698},[76,62568,52113],{"class":86},[76,62570,51580],{"class":51269},[76,62572,53455],{"class":1927},[76,62574,133],{"class":86},[76,62576,62577],{"class":192},"\"list\"",[76,62579,51276],{"class":86},[76,62581,62582,62584,62586,62588,62590,62593,62596,62598,62601],{"class":78,"line":32704},[76,62583,51310],{"class":86},[76,62585,51580],{"class":51269},[76,62587,53455],{"class":1927},[76,62589,133],{"class":86},[76,62591,62592],{"class":192},"\"item\"",[76,62594,62595],{"class":1927}," style",[76,62597,133],{"class":86},[76,62599,62600],{"class":192},"\"display: none;\"",[76,62602,51276],{"class":86},[76,62604,62605,62607,62609,62611,62613,62615,62617,62619],{"class":78,"line":32710},[76,62606,55203],{"class":86},[76,62608,529],{"class":51269},[76,62610,53455],{"class":1927},[76,62612,133],{"class":86},[76,62614,62455],{"class":192},[76,62616,55283],{"class":86},[76,62618,529],{"class":51269},[76,62620,51276],{"class":86},[76,62622,62623,62625,62627,62629,62631,62634],{"class":78,"line":32716},[76,62624,55203],{"class":86},[76,62626,51580],{"class":51269},[76,62628,53455],{"class":1927},[76,62630,133],{"class":86},[76,62632,62633],{"class":192},"\"info\"",[76,62635,51276],{"class":86},[76,62637,62638,62640,62642,62644,62646,62649,62652,62654],{"class":78,"line":32722},[76,62639,55271],{"class":86},[76,62641,21],{"class":51269},[76,62643,53455],{"class":1927},[76,62645,133],{"class":86},[76,62647,62648],{"class":192},"\"name\"",[76,62650,62651],{"class":86},">清风徐来\u003C\u002F",[76,62653,21],{"class":51269},[76,62655,51276],{"class":86},[76,62657,62658,62660,62662,62664,62666,62669,62672,62674],{"class":78,"line":32742},[76,62659,55271],{"class":86},[76,62661,21],{"class":51269},[76,62663,53455],{"class":1927},[76,62665,133],{"class":86},[76,62667,62668],{"class":192},"\"text\"",[76,62670,62671],{"class":86},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[76,62673,21],{"class":51269},[76,62675,51276],{"class":86},[76,62677,62678,62680,62682,62684,62686,62689,62692,62694],{"class":78,"line":32748},[76,62679,55271],{"class":86},[76,62681,21],{"class":51269},[76,62683,53455],{"class":1927},[76,62685,133],{"class":86},[76,62687,62688],{"class":192},"\"time\"",[76,62690,62691],{"class":86},">2022-10-10 20:29:21\u003C\u002F",[76,62693,21],{"class":51269},[76,62695,51276],{"class":86},[76,62697,62698,62700,62702],{"class":78,"line":32764},[76,62699,55376],{"class":86},[76,62701,51580],{"class":51269},[76,62703,51276],{"class":86},[76,62705,62706,62708,62710],{"class":78,"line":32770},[76,62707,51745],{"class":86},[76,62709,51580],{"class":51269},[76,62711,51276],{"class":86},[76,62713,62714,62716,62718],{"class":78,"line":32784},[76,62715,52386],{"class":86},[76,62717,51580],{"class":51269},[76,62719,51276],{"class":86},[76,62721,62722,62724,62726],{"class":78,"line":32790},[76,62723,52113],{"class":86},[76,62725,51782],{"class":51269},[76,62727,51276],{"class":86},[76,62729,62730,62732,62735,62737,62739,62741,62743,62746],{"class":78,"line":32805},[76,62731,11188],{"class":82},[76,62733,62734],{"class":136}," tx",[76,62736,13531],{"class":82},[76,62738,54365],{"class":86},[76,62740,54368],{"class":1927},[76,62742,87],{"class":86},[76,62744,62745],{"class":192},"'#tx'",[76,62747,93],{"class":86},[76,62749,62750,62752,62755,62757,62759,62761,62763,62766],{"class":78,"line":32811},[76,62751,11188],{"class":82},[76,62753,62754],{"class":136}," total",[76,62756,13531],{"class":82},[76,62758,54365],{"class":86},[76,62760,54368],{"class":1927},[76,62762,87],{"class":86},[76,62764,62765],{"class":192},"'.total'",[76,62767,93],{"class":86},[76,62769,62770],{"class":78,"line":32820},[76,62771,62772],{"class":146},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[76,62774,62775,62778,62780,62782,62784,62786,62788],{"class":78,"line":32826},[76,62776,62777],{"class":86},"    tx.",[76,62779,57782],{"class":1927},[76,62781,87],{"class":86},[76,62783,61296],{"class":192},[76,62785,12402],{"class":86},[76,62787,54418],{"class":82},[76,62789,54421],{"class":86},[76,62791,62792,62795,62797],{"class":78,"line":32835},[76,62793,62794],{"class":86},"      total.style.opacity ",[76,62796,133],{"class":82},[76,62798,55668],{"class":136},[76,62800,62801],{"class":78,"line":32841},[76,62802,33430],{"class":86},[76,62804,62805],{"class":78,"line":32847},[76,62806,62807],{"class":146},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[76,62809,62810,62812,62814,62816,62818,62820,62822],{"class":78,"line":32856},[76,62811,62777],{"class":86},[76,62813,57782],{"class":1927},[76,62815,87],{"class":86},[76,62817,61357],{"class":192},[76,62819,12402],{"class":86},[76,62821,54418],{"class":82},[76,62823,54421],{"class":86},[76,62825,62826,62828,62830],{"class":78,"line":32862},[76,62827,62794],{"class":86},[76,62829,133],{"class":82},[76,62831,47302],{"class":136},[76,62833,62834],{"class":78,"line":32873},[76,62835,33430],{"class":86},[76,62837,62838],{"class":78,"line":32879},[76,62839,62840],{"class":146},"    \u002F\u002F 3. 检测用户输入\n",[76,62842,62843,62845,62847,62849,62852,62854,62856],{"class":78,"line":32898},[76,62844,62777],{"class":86},[76,62846,57782],{"class":1927},[76,62848,87],{"class":86},[76,62850,62851],{"class":192},"'input'",[76,62853,12402],{"class":86},[76,62855,54418],{"class":82},[76,62857,54421],{"class":86},[76,62859,62860],{"class":78,"line":32904},[76,62861,62862],{"class":146},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[76,62864,62865,62868,62870,62873,62876,62878,62881,62883,62885],{"class":78,"line":32915},[76,62866,62867],{"class":86},"      total.innerHTML ",[76,62869,133],{"class":82},[76,62871,62872],{"class":192}," `${",[76,62874,62875],{"class":86},"tx",[76,62877,646],{"class":192},[76,62879,62880],{"class":86},"value",[76,62882,646],{"class":192},[76,62884,51937],{"class":136},[76,62886,62887],{"class":192},"}\u002F200字`\n",[76,62889,62890],{"class":78,"line":32921},[76,62891,33430],{"class":86},[76,62893,62894],{"class":78,"line":32941},[76,62895,2365],{"emptyLinePlaceholder":2364},[76,62897,62898],{"class":78,"line":32957},[76,62899,62900],{"class":146},"    \u002F\u002F const str = 'andy'\n",[76,62902,62903],{"class":78,"line":32963},[76,62904,62905],{"class":146},"    \u002F\u002F console.log(str.length)\n",[76,62907,62908,62910,62912],{"class":78,"line":32977},[76,62909,52386],{"class":86},[76,62911,51782],{"class":51269},[76,62913,51276],{"class":86},[76,62915,62916,62918,62920],{"class":78,"line":32983},[76,62917,51754],{"class":86},[76,62919,51769],{"class":51269},[76,62921,51276],{"class":86},[76,62923,62924],{"class":78,"line":32989},[76,62925,2365],{"emptyLinePlaceholder":2364},[76,62927,62928,62930,62932],{"class":78,"line":33000},[76,62929,51754],{"class":86},[76,62931,50604],{"class":51269},[76,62933,51276],{"class":86},[21965,62935,62937],{"id":62936},"_3254-change事件","3.2.5.4 change事件",[21,62939,62940],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[21,62942,62943],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[21,62945,62946],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[66,62948,62950],{"className":50602,"code":62949,"language":50604,"meta":71,"style":71},"\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",[73,62951,62952,62962,62976,62980,62988,63002,63022,63034,63042,63046,63054,63068,63076,63094,63112,63124,63128,63136,63144,63148],{"__ignoreMap":71},[76,62953,62954,62956,62958,62960],{"class":78,"line":79},[76,62955,51266],{"class":86},[76,62957,51270],{"class":51269},[76,62959,51273],{"class":1927},[76,62961,51276],{"class":86},[76,62963,62964,62966,62968,62970,62972,62974],{"class":78,"line":96},[76,62965,998],{"class":86},[76,62967,50604],{"class":51269},[76,62969,51285],{"class":1927},[76,62971,133],{"class":86},[76,62973,51290],{"class":192},[76,62975,51276],{"class":86},[76,62977,62978],{"class":78,"line":1143},[76,62979,2365],{"emptyLinePlaceholder":2364},[76,62981,62982,62984,62986],{"class":78,"line":1158},[76,62983,998],{"class":86},[76,62985,51303],{"class":51269},[76,62987,51276],{"class":86},[76,62989,62990,62992,62994,62996,62998,63000],{"class":78,"line":1164},[76,62991,52113],{"class":86},[76,62993,51313],{"class":51269},[76,62995,51316],{"class":1927},[76,62997,133],{"class":86},[76,62999,51321],{"class":192},[76,63001,51276],{"class":86},[76,63003,63004,63006,63008,63010,63012,63014,63016,63018,63020],{"class":78,"line":1178},[76,63005,52113],{"class":86},[76,63007,51313],{"class":51269},[76,63009,14887],{"class":1927},[76,63011,133],{"class":86},[76,63013,51360],{"class":192},[76,63015,51340],{"class":1927},[76,63017,133],{"class":86},[76,63019,51367],{"class":192},[76,63021,51276],{"class":86},[76,63023,63024,63026,63028,63030,63032],{"class":78,"line":1184},[76,63025,52113],{"class":86},[76,63027,51376],{"class":51269},[76,63029,51379],{"class":86},[76,63031,51376],{"class":51269},[76,63033,51276],{"class":86},[76,63035,63036,63038,63040],{"class":78,"line":1275},[76,63037,51754],{"class":86},[76,63039,51303],{"class":51269},[76,63041,51276],{"class":86},[76,63043,63044],{"class":78,"line":1281},[76,63045,2365],{"emptyLinePlaceholder":2364},[76,63047,63048,63050,63052],{"class":78,"line":1293},[76,63049,998],{"class":86},[76,63051,51769],{"class":51269},[76,63053,51276],{"class":86},[76,63055,63056,63058,63060,63062,63064,63066],{"class":78,"line":1576},[76,63057,52113],{"class":86},[76,63059,53790],{"class":51269},[76,63061,53793],{"class":1927},[76,63063,133],{"class":86},[76,63065,62668],{"class":192},[76,63067,51276],{"class":86},[76,63069,63070,63072,63074],{"class":78,"line":1581},[76,63071,52113],{"class":86},[76,63073,51782],{"class":51269},[76,63075,51276],{"class":86},[76,63077,63078,63080,63082,63084,63086,63088,63090,63092],{"class":78,"line":1587},[76,63079,11188],{"class":82},[76,63081,60574],{"class":136},[76,63083,13531],{"class":82},[76,63085,54365],{"class":86},[76,63087,54368],{"class":1927},[76,63089,87],{"class":86},[76,63091,62851],{"class":192},[76,63093,93],{"class":86},[76,63095,63096,63099,63101,63103,63106,63108,63110],{"class":78,"line":1592},[76,63097,63098],{"class":86},"    input.",[76,63100,57782],{"class":1927},[76,63102,87],{"class":86},[76,63104,63105],{"class":192},"'change'",[76,63107,12402],{"class":86},[76,63109,54418],{"class":82},[76,63111,54421],{"class":86},[76,63113,63114,63116,63118,63120,63122],{"class":78,"line":1606},[76,63115,58213],{"class":86},[76,63117,58216],{"class":1927},[76,63119,87],{"class":86},[76,63121,681],{"class":136},[76,63123,93],{"class":86},[76,63125,63126],{"class":78,"line":1611},[76,63127,33430],{"class":86},[76,63129,63130,63132,63134],{"class":78,"line":1617},[76,63131,52386],{"class":86},[76,63133,51782],{"class":51269},[76,63135,51276],{"class":86},[76,63137,63138,63140,63142],{"class":78,"line":1638},[76,63139,51754],{"class":86},[76,63141,51769],{"class":51269},[76,63143,51276],{"class":86},[76,63145,63146],{"class":78,"line":1643},[76,63147,2365],{"emptyLinePlaceholder":2364},[76,63149,63150,63152,63154],{"class":78,"line":1657},[76,63151,51754],{"class":86},[76,63153,50604],{"class":51269},[76,63155,51276],{"class":86},[21,63157,63158],{},"总结：内容发生改变才回去触发",[46,63160,63162],{"id":63161},"_326-事件对象","3.2.6 事件对象",[21965,63164,63166],{"id":63165},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[21,63168,63169],{},[1426,63170],{"alt":71,"src":63171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[21,63173,63174],{},[1426,63175],{"alt":71,"src":63176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[21,63178,63179],{},"点击一次，就输出了事件对象，它是个对象",[21,63181,63182],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[21,63184,63185],{},[1426,63186],{"alt":71,"src":63187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21965,63189,63191],{"id":63190},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[21,63193,63194],{},[1426,63195],{"alt":71,"src":63196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[21,63198,63199],{},"实现按特殊字符才是实现打印输出效果：",[66,63201,63203],{"className":53036,"code":63202,"language":53038,"meta":71,"style":71},"\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",[73,63204,63205,63213,63218,63232,63240,63245,63250,63255,63260,63265,63270,63275,63280,63285,63289,63293,63301],{"__ignoreMap":71},[76,63206,63207,63209,63211],{"class":78,"line":79},[76,63208,998],{"class":86},[76,63210,51769],{"class":51269},[76,63212,51276],{"class":86},[76,63214,63215],{"class":78,"line":96},[76,63216,63217],{"class":146},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[76,63219,63220,63222,63224,63226,63228,63230],{"class":78,"line":1143},[76,63221,52113],{"class":86},[76,63223,53790],{"class":51269},[76,63225,53793],{"class":1927},[76,63227,133],{"class":86},[76,63229,62668],{"class":192},[76,63231,51276],{"class":86},[76,63233,63234,63236,63238],{"class":78,"line":1158},[76,63235,52113],{"class":86},[76,63237,51782],{"class":51269},[76,63239,51276],{"class":86},[76,63241,63242],{"class":78,"line":1164},[76,63243,63244],{"class":86},"    \u002F\u002F const btn = document.querySelector('button')\n",[76,63246,63247],{"class":78,"line":1178},[76,63248,63249],{"class":86},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[76,63251,63252],{"class":78,"line":1184},[76,63253,63254],{"class":86},"    \u002F\u002F   console.log(e);\n",[76,63256,63257],{"class":78,"line":1275},[76,63258,63259],{"class":86},"    \u002F\u002F })\n",[76,63261,63262],{"class":78,"line":1281},[76,63263,63264],{"class":86},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[76,63266,63267],{"class":78,"line":1293},[76,63268,63269],{"class":86},"    const input = document.querySelector('input')\n",[76,63271,63272],{"class":78,"line":1576},[76,63273,63274],{"class":86},"    input.addEventListener('keyup', function (e) {\n",[76,63276,63277],{"class":78,"line":1581},[76,63278,63279],{"class":86},"      if (e.key === 'Enter') {\n",[76,63281,63282],{"class":78,"line":1587},[76,63283,63284],{"class":86},"        console.log('我按下了回车键')\n",[76,63286,63287],{"class":78,"line":1592},[76,63288,52367],{"class":86},[76,63290,63291],{"class":78,"line":1606},[76,63292,33430],{"class":86},[76,63294,63295,63297,63299],{"class":78,"line":1611},[76,63296,52386],{"class":86},[76,63298,51782],{"class":51269},[76,63300,51276],{"class":86},[76,63302,63303,63305,63307],{"class":78,"line":1617},[76,63304,51754],{"class":86},[76,63306,51769],{"class":51269},[76,63308,51276],{"class":86},[21965,63310,63312],{"id":63311},"_3263-trim方法","3.2.6.3 trim方法",[21,63314,63315],{},[1426,63316],{"alt":71,"src":63317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[21,63319,63320],{},[1426,63321],{"alt":71,"src":63322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[21,63324,63325],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[21,63327,63328],{},"str.trim()",[46,63330,63332],{"id":63331},"_327-环境对象","3.2.7 环境对象",[21,63334,63335],{},[1426,63336],{"alt":71,"src":63337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[21,63339,63340],{},[1426,63341],{"alt":71,"src":63342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[21,63344,63345],{},[1426,63346],{"alt":71,"src":63347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[21,63349,63350],{},"实际函数调用是window.fn()",[21,63352,63353],{},"普通函数里面this指向的是window",[1095,63355,63356,63359,63362],{},[32,63357,63358],{},"在普通函数下，this指向的是window",[32,63360,63361],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[32,63363,63364],{},"箭头函数没有this",[21,63366,63367],{},"粗略记法就是：谁调用，this就指向谁",[21,63369,63370],{},[1426,63371],{"alt":71,"src":63372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[21,63374,63375],{},[1426,63376],{"alt":71,"src":63377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[21,63379,63380],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[21,63382,63383],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[66,63385,63387],{"className":53036,"code":63386,"language":53038,"meta":71,"style":71},"\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",[73,63388,63389,63397,63409,63417,63422,63427,63432,63437,63441,63449],{"__ignoreMap":71},[76,63390,63391,63393,63395],{"class":78,"line":79},[76,63392,998],{"class":86},[76,63394,51769],{"class":51269},[76,63396,51276],{"class":86},[76,63398,63399,63401,63403,63405,63407],{"class":78,"line":96},[76,63400,52113],{"class":86},[76,63402,53856],{"class":51269},[76,63404,53862],{"class":86},[76,63406,53856],{"class":51269},[76,63408,51276],{"class":86},[76,63410,63411,63413,63415],{"class":78,"line":1143},[76,63412,52113],{"class":86},[76,63414,51782],{"class":51269},[76,63416,51276],{"class":86},[76,63418,63419],{"class":78,"line":1158},[76,63420,63421],{"class":86},"    const button = document.querySelector('button')\n",[76,63423,63424],{"class":78,"line":1164},[76,63425,63426],{"class":86},"    button.addEventListener('click', function () {\n",[76,63428,63429],{"class":78,"line":1178},[76,63430,63431],{"class":86},"      \u002F\u002F console.log(this);\n",[76,63433,63434],{"class":78,"line":1184},[76,63435,63436],{"class":86},"      this.style.color = 'pink'\n",[76,63438,63439],{"class":78,"line":1275},[76,63440,33430],{"class":86},[76,63442,63443,63445,63447],{"class":78,"line":1281},[76,63444,52386],{"class":86},[76,63446,51782],{"class":51269},[76,63448,51276],{"class":86},[76,63450,63451,63453,63455],{"class":78,"line":1293},[76,63452,51754],{"class":86},[76,63454,51769],{"class":51269},[76,63456,51276],{"class":86},[46,63458,63460],{"id":63459},"_328-回调函数","3.2.8 回调函数",[21,63462,63463],{},[1426,63464],{"alt":71,"src":63465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[21,63467,63468],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[21,63470,11299],{},[1095,63472,63473,63476,63479],{},[32,63474,63475],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[32,63477,63478],{},"回调函数本质还是函数，只不过把它当成参数使用",[32,63480,63481],{},"使用匿名函数做为回调函数比较常见",[46,63483,63485],{"id":63484},"_329-tab栏切换","3.2.9 tab栏切换",[21,63487,63488],{},[1426,63489],{"alt":71,"src":63490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[66,63492,63494],{"className":50602,"code":63493,"language":50604,"meta":71,"style":71},"\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",[73,63495,63496,63506,63520,63524,63532,63546,63566,63586,63599,63607,63613,63623,63633,63637,63641,63648,63661,63674,63686,63702,63706,63710,63717,63729,63741,63753,63763,63773,63777,63781,63790,63802,63813,63825,63829,63833,63841,63851,63861,63871,63875,63879,63889,63903,63915,63919,63923,63935,63946,63963,63973,63977,63981,63996,64007,64017,64021,64025,64032,64047,64051,64055,64063,64073,64077,64081,64090,64100,64104,64112,64120,64124,64132,64147,64162,64175,64183,64217,64244,64271,64298,64325,64333,64341,64356,64393,64428,64463,64498,64533,64541,64549,64557,64562,64567,64587,64592,64621,64626,64631,64649,64654,64659,64664,64686,64691,64707,64711,64716,64721,64742,64747,64776,64780,64785,64789,64797,64805,64809],{"__ignoreMap":71},[76,63497,63498,63500,63502,63504],{"class":78,"line":79},[76,63499,51266],{"class":86},[76,63501,51270],{"class":51269},[76,63503,51273],{"class":1927},[76,63505,51276],{"class":86},[76,63507,63508,63510,63512,63514,63516,63518],{"class":78,"line":96},[76,63509,998],{"class":86},[76,63511,50604],{"class":51269},[76,63513,51285],{"class":1927},[76,63515,133],{"class":86},[76,63517,51290],{"class":192},[76,63519,51276],{"class":86},[76,63521,63522],{"class":78,"line":1143},[76,63523,2365],{"emptyLinePlaceholder":2364},[76,63525,63526,63528,63530],{"class":78,"line":1158},[76,63527,998],{"class":86},[76,63529,51303],{"class":51269},[76,63531,51276],{"class":86},[76,63533,63534,63536,63538,63540,63542,63544],{"class":78,"line":1164},[76,63535,52113],{"class":86},[76,63537,51313],{"class":51269},[76,63539,51316],{"class":1927},[76,63541,133],{"class":86},[76,63543,51321],{"class":192},[76,63545,59096],{"class":86},[76,63547,63548,63550,63552,63554,63556,63558,63560,63562,63564],{"class":78,"line":1178},[76,63549,52113],{"class":86},[76,63551,51313],{"class":51269},[76,63553,51332],{"class":1927},[76,63555,133],{"class":86},[76,63557,51337],{"class":192},[76,63559,51340],{"class":1927},[76,63561,133],{"class":86},[76,63563,51345],{"class":192},[76,63565,59096],{"class":86},[76,63567,63568,63570,63572,63574,63576,63578,63580,63582,63584],{"class":78,"line":1184},[76,63569,52113],{"class":86},[76,63571,51313],{"class":51269},[76,63573,14887],{"class":1927},[76,63575,133],{"class":86},[76,63577,51360],{"class":192},[76,63579,51340],{"class":1927},[76,63581,133],{"class":86},[76,63583,51367],{"class":192},[76,63585,59096],{"class":86},[76,63587,63588,63590,63592,63595,63597],{"class":78,"line":1275},[76,63589,52113],{"class":86},[76,63591,51376],{"class":51269},[76,63593,63594],{"class":86},">tab栏切换\u003C\u002F",[76,63596,51376],{"class":51269},[76,63598,51276],{"class":86},[76,63600,63601,63603,63605],{"class":78,"line":1281},[76,63602,52113],{"class":86},[76,63604,5092],{"class":51269},[76,63606,51276],{"class":86},[76,63608,63609,63611],{"class":78,"line":1293},[76,63610,6370],{"class":51269},[76,63612,15539],{"class":86},[76,63614,63615,63617,63619,63621],{"class":78,"line":1576},[76,63616,54675],{"class":136},[76,63618,51406],{"class":86},[76,63620,279],{"class":136},[76,63622,1254],{"class":86},[76,63624,63625,63627,63629,63631],{"class":78,"line":1581},[76,63626,54664],{"class":136},[76,63628,51406],{"class":86},[76,63630,279],{"class":136},[76,63632,1254],{"class":86},[76,63634,63635],{"class":78,"line":1587},[76,63636,2151],{"class":86},[76,63638,63639],{"class":78,"line":1592},[76,63640,2365],{"emptyLinePlaceholder":2364},[76,63642,63643,63646],{"class":78,"line":1606},[76,63644,63645],{"class":1927},"    .tab",[76,63647,15539],{"class":86},[76,63649,63650,63652,63654,63657,63659],{"class":78,"line":1611},[76,63651,54740],{"class":136},[76,63653,51406],{"class":86},[76,63655,63656],{"class":136},"590",[76,63658,51461],{"class":82},[76,63660,1254],{"class":86},[76,63662,63663,63665,63667,63670,63672],{"class":78,"line":1617},[76,63664,54754],{"class":136},[76,63666,51406],{"class":86},[76,63668,63669],{"class":136},"340",[76,63671,51461],{"class":82},[76,63673,1254],{"class":86},[76,63675,63676,63678,63680,63682,63684],{"class":78,"line":1638},[76,63677,54675],{"class":136},[76,63679,51406],{"class":86},[76,63681,788],{"class":136},[76,63683,51461],{"class":82},[76,63685,1254],{"class":86},[76,63687,63688,63690,63692,63694,63696,63698,63700],{"class":78,"line":1643},[76,63689,61946],{"class":136},[76,63691,51406],{"class":86},[76,63693,305],{"class":136},[76,63695,51461],{"class":82},[76,63697,51490],{"class":136},[76,63699,62213],{"class":136},[76,63701,1254],{"class":86},[76,63703,63704],{"class":78,"line":1657},[76,63705,2151],{"class":86},[76,63707,63708],{"class":78,"line":1662},[76,63709,2365],{"emptyLinePlaceholder":2364},[76,63711,63712,63715],{"class":78,"line":1691},[76,63713,63714],{"class":1927},"    .tab-nav",[76,63716,15539],{"class":86},[76,63718,63719,63721,63723,63725,63727],{"class":78,"line":1696},[76,63720,54740],{"class":136},[76,63722,51406],{"class":86},[76,63724,399],{"class":136},[76,63726,416],{"class":82},[76,63728,1254],{"class":86},[76,63730,63731,63733,63735,63737,63739],{"class":78,"line":1713},[76,63732,54754],{"class":136},[76,63734,51406],{"class":86},[76,63736,995],{"class":136},[76,63738,51461],{"class":82},[76,63740,1254],{"class":86},[76,63742,63743,63745,63747,63749,63751],{"class":78,"line":1718},[76,63744,57328],{"class":136},[76,63746,51406],{"class":86},[76,63748,995],{"class":136},[76,63750,51461],{"class":82},[76,63752,1254],{"class":86},[76,63754,63755,63757,63759,63761],{"class":78,"line":1723},[76,63756,54978],{"class":136},[76,63758,51406],{"class":86},[76,63760,51446],{"class":136},[76,63762,1254],{"class":86},[76,63764,63765,63767,63769,63771],{"class":78,"line":1728},[76,63766,54989],{"class":136},[76,63768,51406],{"class":86},[76,63770,51637],{"class":136},[76,63772,1254],{"class":86},[76,63774,63775],{"class":78,"line":1742},[76,63776,2151],{"class":86},[76,63778,63779],{"class":78,"line":1747},[76,63780,2365],{"emptyLinePlaceholder":2364},[76,63782,63783,63785,63788],{"class":78,"line":2542},[76,63784,63714],{"class":1927},[76,63786,63787],{"class":51269}," h3",[76,63789,15539],{"class":86},[76,63791,63792,63794,63796,63798,63800],{"class":78,"line":2556},[76,63793,54891],{"class":136},[76,63795,51406],{"class":86},[76,63797,888],{"class":136},[76,63799,51461],{"class":82},[76,63801,1254],{"class":86},[76,63803,63804,63806,63808,63811],{"class":78,"line":2564},[76,63805,62303],{"class":136},[76,63807,51406],{"class":86},[76,63809,63810],{"class":136},"normal",[76,63812,1254],{"class":86},[76,63814,63815,63817,63819,63821,63823],{"class":78,"line":2569},[76,63816,61969],{"class":136},[76,63818,51406],{"class":86},[76,63820,788],{"class":136},[76,63822,51461],{"class":82},[76,63824,1254],{"class":86},[76,63826,63827],{"class":78,"line":2575},[76,63828,2151],{"class":86},[76,63830,63831],{"class":78,"line":2581},[76,63832,2365],{"emptyLinePlaceholder":2364},[76,63834,63835,63837,63839],{"class":78,"line":2586},[76,63836,63714],{"class":1927},[76,63838,61261],{"class":51269},[76,63840,15539],{"class":86},[76,63842,63843,63845,63847,63849],{"class":78,"line":7915},[76,63844,54701],{"class":136},[76,63846,51406],{"class":86},[76,63848,54706],{"class":136},[76,63850,1254],{"class":86},[76,63852,63853,63855,63857,63859],{"class":78,"line":7939},[76,63854,54978],{"class":136},[76,63856,51406],{"class":86},[76,63858,51446],{"class":136},[76,63860,1254],{"class":86},[76,63862,63863,63865,63867,63869],{"class":78,"line":7944},[76,63864,54989],{"class":136},[76,63866,51406],{"class":86},[76,63868,51549],{"class":136},[76,63870,1254],{"class":86},[76,63872,63873],{"class":78,"line":7950},[76,63874,2151],{"class":86},[76,63876,63877],{"class":78,"line":7977},[76,63878,2365],{"emptyLinePlaceholder":2364},[76,63880,63881,63883,63885,63887],{"class":78,"line":7982},[76,63882,63714],{"class":1927},[76,63884,61261],{"class":51269},[76,63886,55044],{"class":51269},[76,63888,15539],{"class":86},[76,63890,63891,63893,63895,63897,63899,63901],{"class":78,"line":7988},[76,63892,54675],{"class":136},[76,63894,51406],{"class":86},[76,63896,279],{"class":136},[76,63898,8917],{"class":136},[76,63900,51461],{"class":82},[76,63902,1254],{"class":86},[76,63904,63905,63907,63909,63911,63913],{"class":78,"line":8000},[76,63906,54891],{"class":136},[76,63908,51406],{"class":86},[76,63910,637],{"class":136},[76,63912,51461],{"class":82},[76,63914,1254],{"class":86},[76,63916,63917],{"class":78,"line":8012},[76,63918,2151],{"class":86},[76,63920,63921],{"class":78,"line":8024},[76,63922,2365],{"emptyLinePlaceholder":2364},[76,63924,63925,63927,63929,63931,63933],{"class":78,"line":9683},[76,63926,63714],{"class":1927},[76,63928,61261],{"class":51269},[76,63930,55044],{"class":51269},[76,63932,1362],{"class":51269},[76,63934,15539],{"class":86},[76,63936,63937,63940,63942,63944],{"class":78,"line":9708},[76,63938,63939],{"class":136},"      text-decoration",[76,63941,51406],{"class":86},[76,63943,54706],{"class":136},[76,63945,1254],{"class":86},[76,63947,63948,63950,63952,63954,63956,63958,63961],{"class":78,"line":9731},[76,63949,62201],{"class":136},[76,63951,51406],{"class":86},[76,63953,165],{"class":136},[76,63955,51461],{"class":82},[76,63957,51490],{"class":136},[76,63959,63960],{"class":136}," transparent",[76,63962,1254],{"class":86},[76,63964,63965,63967,63969,63971],{"class":78,"line":9755},[76,63966,57385],{"class":136},[76,63968,51406],{"class":86},[76,63970,62338],{"class":136},[76,63972,1254],{"class":86},[76,63974,63975],{"class":78,"line":9760},[76,63976,2151],{"class":86},[76,63978,63979],{"class":78,"line":9765},[76,63980,2365],{"emptyLinePlaceholder":2364},[76,63982,63983,63985,63987,63989,63991,63994],{"class":78,"line":9770},[76,63984,63714],{"class":1927},[76,63986,61261],{"class":51269},[76,63988,55044],{"class":51269},[76,63990,1362],{"class":51269},[76,63992,63993],{"class":1927},".active",[76,63995,15539],{"class":86},[76,63997,63998,64000,64002,64005],{"class":78,"line":9779},[76,63999,61760],{"class":136},[76,64001,51406],{"class":86},[76,64003,64004],{"class":136},"#e1251b",[76,64006,1254],{"class":86},[76,64008,64009,64011,64013,64015],{"class":78,"line":9784},[76,64010,57385],{"class":136},[76,64012,51406],{"class":86},[76,64014,64004],{"class":136},[76,64016,1254],{"class":86},[76,64018,64019],{"class":78,"line":9790},[76,64020,2151],{"class":86},[76,64022,64023],{"class":78,"line":9811},[76,64024,2365],{"emptyLinePlaceholder":2364},[76,64026,64027,64030],{"class":78,"line":9817},[76,64028,64029],{"class":1927},"    .tab-content",[76,64031,15539],{"class":86},[76,64033,64034,64036,64038,64040,64043,64045],{"class":78,"line":9831},[76,64035,54664],{"class":136},[76,64037,51406],{"class":86},[76,64039,279],{"class":136},[76,64041,64042],{"class":136}," 16",[76,64044,51461],{"class":82},[76,64046,1254],{"class":86},[76,64048,64049],{"class":78,"line":9837},[76,64050,2151],{"class":86},[76,64052,64053],{"class":78,"line":9864},[76,64054,2365],{"emptyLinePlaceholder":2364},[76,64056,64057,64059,64061],{"class":78,"line":9873},[76,64058,64029],{"class":1927},[76,64060,62143],{"class":1927},[76,64062,15539],{"class":86},[76,64064,64065,64067,64069,64071],{"class":78,"line":9879},[76,64066,54978],{"class":136},[76,64068,51406],{"class":86},[76,64070,54706],{"class":136},[76,64072,1254],{"class":86},[76,64074,64075],{"class":78,"line":9887},[76,64076,2151],{"class":86},[76,64078,64079],{"class":78,"line":9892},[76,64080,2365],{"emptyLinePlaceholder":2364},[76,64082,64083,64085,64088],{"class":78,"line":16571},[76,64084,64029],{"class":1927},[76,64086,64087],{"class":1927}," .item.active",[76,64089,15539],{"class":86},[76,64091,64092,64094,64096,64098],{"class":78,"line":16577},[76,64093,54978],{"class":136},[76,64095,51406],{"class":86},[76,64097,60838],{"class":136},[76,64099,1254],{"class":86},[76,64101,64102],{"class":78,"line":16600},[76,64103,2151],{"class":86},[76,64105,64106,64108,64110],{"class":78,"line":16606},[76,64107,52386],{"class":86},[76,64109,5092],{"class":51269},[76,64111,51276],{"class":86},[76,64113,64114,64116,64118],{"class":78,"line":16629},[76,64115,51754],{"class":86},[76,64117,51303],{"class":51269},[76,64119,51276],{"class":86},[76,64121,64122],{"class":78,"line":16643},[76,64123,2365],{"emptyLinePlaceholder":2364},[76,64125,64126,64128,64130],{"class":78,"line":16663},[76,64127,998],{"class":86},[76,64129,51769],{"class":51269},[76,64131,51276],{"class":86},[76,64133,64134,64136,64138,64140,64142,64145],{"class":78,"line":16669},[76,64135,52113],{"class":86},[76,64137,51580],{"class":51269},[76,64139,53455],{"class":1927},[76,64141,133],{"class":86},[76,64143,64144],{"class":192},"\"tab\"",[76,64146,51276],{"class":86},[76,64148,64149,64151,64153,64155,64157,64160],{"class":78,"line":16680},[76,64150,51310],{"class":86},[76,64152,51580],{"class":51269},[76,64154,53455],{"class":1927},[76,64156,133],{"class":86},[76,64158,64159],{"class":192},"\"tab-nav\"",[76,64161,51276],{"class":86},[76,64163,64164,64166,64168,64171,64173],{"class":78,"line":16703},[76,64165,55203],{"class":86},[76,64167,46],{"class":51269},[76,64169,64170],{"class":86},">每日特价\u003C\u002F",[76,64172,46],{"class":51269},[76,64174,51276],{"class":86},[76,64176,64177,64179,64181],{"class":78,"line":16725},[76,64178,55203],{"class":86},[76,64180,1095],{"class":51269},[76,64182,51276],{"class":86},[76,64184,64185,64187,64189,64191,64193,64195,64197,64199,64201,64203,64206,64209,64211,64213,64215],{"class":78,"line":16730},[76,64186,55271],{"class":86},[76,64188,32],{"class":51269},[76,64190,61021],{"class":86},[76,64192,326],{"class":51269},[76,64194,53455],{"class":1927},[76,64196,133],{"class":86},[76,64198,59675],{"class":192},[76,64200,61026],{"class":1927},[76,64202,133],{"class":86},[76,64204,64205],{"class":192},"\"javascript:;\"",[76,64207,64208],{"class":86},">精选\u003C\u002F",[76,64210,326],{"class":51269},[76,64212,55283],{"class":86},[76,64214,32],{"class":51269},[76,64216,51276],{"class":86},[76,64218,64219,64221,64223,64225,64227,64229,64231,64233,64236,64238,64240,64242],{"class":78,"line":16736},[76,64220,55271],{"class":86},[76,64222,32],{"class":51269},[76,64224,61021],{"class":86},[76,64226,326],{"class":51269},[76,64228,61026],{"class":1927},[76,64230,133],{"class":86},[76,64232,64205],{"class":192},[76,64234,64235],{"class":86},">美食\u003C\u002F",[76,64237,326],{"class":51269},[76,64239,55283],{"class":86},[76,64241,32],{"class":51269},[76,64243,51276],{"class":86},[76,64245,64246,64248,64250,64252,64254,64256,64258,64260,64263,64265,64267,64269],{"class":78,"line":16750},[76,64247,55271],{"class":86},[76,64249,32],{"class":51269},[76,64251,61021],{"class":86},[76,64253,326],{"class":51269},[76,64255,61026],{"class":1927},[76,64257,133],{"class":86},[76,64259,64205],{"class":192},[76,64261,64262],{"class":86},">百货\u003C\u002F",[76,64264,326],{"class":51269},[76,64266,55283],{"class":86},[76,64268,32],{"class":51269},[76,64270,51276],{"class":86},[76,64272,64273,64275,64277,64279,64281,64283,64285,64287,64290,64292,64294,64296],{"class":78,"line":16763},[76,64274,55271],{"class":86},[76,64276,32],{"class":51269},[76,64278,61021],{"class":86},[76,64280,326],{"class":51269},[76,64282,61026],{"class":1927},[76,64284,133],{"class":86},[76,64286,64205],{"class":192},[76,64288,64289],{"class":86},">个护\u003C\u002F",[76,64291,326],{"class":51269},[76,64293,55283],{"class":86},[76,64295,32],{"class":51269},[76,64297,51276],{"class":86},[76,64299,64300,64302,64304,64306,64308,64310,64312,64314,64317,64319,64321,64323],{"class":78,"line":16768},[76,64301,55271],{"class":86},[76,64303,32],{"class":51269},[76,64305,61021],{"class":86},[76,64307,326],{"class":51269},[76,64309,61026],{"class":1927},[76,64311,133],{"class":86},[76,64313,64205],{"class":192},[76,64315,64316],{"class":86},">预告\u003C\u002F",[76,64318,326],{"class":51269},[76,64320,55283],{"class":86},[76,64322,32],{"class":51269},[76,64324,51276],{"class":86},[76,64326,64327,64329,64331],{"class":78,"line":16782},[76,64328,55376],{"class":86},[76,64330,1095],{"class":51269},[76,64332,51276],{"class":86},[76,64334,64335,64337,64339],{"class":78,"line":16787},[76,64336,51745],{"class":86},[76,64338,51580],{"class":51269},[76,64340,51276],{"class":86},[76,64342,64343,64345,64347,64349,64351,64354],{"class":78,"line":16793},[76,64344,51310],{"class":86},[76,64346,51580],{"class":51269},[76,64348,53455],{"class":1927},[76,64350,133],{"class":86},[76,64352,64353],{"class":192},"\"tab-content\"",[76,64355,51276],{"class":86},[76,64357,64358,64360,64362,64364,64366,64369,64371,64373,64375,64377,64380,64382,64384,64386,64389,64391],{"class":78,"line":16798},[76,64359,55203],{"class":86},[76,64361,51580],{"class":51269},[76,64363,53455],{"class":1927},[76,64365,133],{"class":86},[76,64367,64368],{"class":192},"\"item active\"",[76,64370,61021],{"class":86},[76,64372,1426],{"class":51269},[76,64374,55208],{"class":1927},[76,64376,133],{"class":86},[76,64378,64379],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[76,64381,55216],{"class":1927},[76,64383,133],{"class":86},[76,64385,7619],{"class":192},[76,64387,64388],{"class":86}," \u002F>\u003C\u002F",[76,64390,51580],{"class":51269},[76,64392,51276],{"class":86},[76,64394,64395,64397,64399,64401,64403,64405,64407,64409,64411,64413,64416,64418,64420,64422,64424,64426],{"class":78,"line":16812},[76,64396,55203],{"class":86},[76,64398,51580],{"class":51269},[76,64400,53455],{"class":1927},[76,64402,133],{"class":86},[76,64404,62592],{"class":192},[76,64406,61021],{"class":86},[76,64408,1426],{"class":51269},[76,64410,55208],{"class":1927},[76,64412,133],{"class":86},[76,64414,64415],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[76,64417,55216],{"class":1927},[76,64419,133],{"class":86},[76,64421,7619],{"class":192},[76,64423,64388],{"class":86},[76,64425,51580],{"class":51269},[76,64427,51276],{"class":86},[76,64429,64430,64432,64434,64436,64438,64440,64442,64444,64446,64448,64451,64453,64455,64457,64459,64461],{"class":78,"line":16817},[76,64431,55203],{"class":86},[76,64433,51580],{"class":51269},[76,64435,53455],{"class":1927},[76,64437,133],{"class":86},[76,64439,62592],{"class":192},[76,64441,61021],{"class":86},[76,64443,1426],{"class":51269},[76,64445,55208],{"class":1927},[76,64447,133],{"class":86},[76,64449,64450],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[76,64452,55216],{"class":1927},[76,64454,133],{"class":86},[76,64456,7619],{"class":192},[76,64458,64388],{"class":86},[76,64460,51580],{"class":51269},[76,64462,51276],{"class":86},[76,64464,64465,64467,64469,64471,64473,64475,64477,64479,64481,64483,64486,64488,64490,64492,64494,64496],{"class":78,"line":16822},[76,64466,55203],{"class":86},[76,64468,51580],{"class":51269},[76,64470,53455],{"class":1927},[76,64472,133],{"class":86},[76,64474,62592],{"class":192},[76,64476,61021],{"class":86},[76,64478,1426],{"class":51269},[76,64480,55208],{"class":1927},[76,64482,133],{"class":86},[76,64484,64485],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[76,64487,55216],{"class":1927},[76,64489,133],{"class":86},[76,64491,7619],{"class":192},[76,64493,64388],{"class":86},[76,64495,51580],{"class":51269},[76,64497,51276],{"class":86},[76,64499,64500,64502,64504,64506,64508,64510,64512,64514,64516,64518,64521,64523,64525,64527,64529,64531],{"class":78,"line":16836},[76,64501,55203],{"class":86},[76,64503,51580],{"class":51269},[76,64505,53455],{"class":1927},[76,64507,133],{"class":86},[76,64509,62592],{"class":192},[76,64511,61021],{"class":86},[76,64513,1426],{"class":51269},[76,64515,55208],{"class":1927},[76,64517,133],{"class":86},[76,64519,64520],{"class":192},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[76,64522,55216],{"class":1927},[76,64524,133],{"class":86},[76,64526,7619],{"class":192},[76,64528,64388],{"class":86},[76,64530,51580],{"class":51269},[76,64532,51276],{"class":86},[76,64534,64535,64537,64539],{"class":78,"line":16848},[76,64536,51745],{"class":86},[76,64538,51580],{"class":51269},[76,64540,51276],{"class":86},[76,64542,64543,64545,64547],{"class":78,"line":16853},[76,64544,52386],{"class":86},[76,64546,51580],{"class":51269},[76,64548,51276],{"class":86},[76,64550,64551,64553,64555],{"class":78,"line":16866},[76,64552,52113],{"class":86},[76,64554,51782],{"class":51269},[76,64556,51276],{"class":86},[76,64558,64559],{"class":78,"line":16871},[76,64560,64561],{"class":146},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[76,64563,64564],{"class":78,"line":16876},[76,64565,64566],{"class":146},"    \u002F\u002F 1.1 获取 a 元素 \n",[76,64568,64569,64571,64574,64576,64578,64580,64582,64585],{"class":78,"line":16881},[76,64570,11188],{"class":82},[76,64572,64573],{"class":136}," as",[76,64575,13531],{"class":82},[76,64577,54365],{"class":86},[76,64579,55650],{"class":1927},[76,64581,87],{"class":86},[76,64583,64584],{"class":192},"'.tab-nav a'",[76,64586,93],{"class":86},[76,64588,64589],{"class":78,"line":16894},[76,64590,64591],{"class":146},"    \u002F\u002F console.log(as) \n",[76,64593,64594,64596,64598,64600,64602,64604,64606,64608,64610,64613,64615,64617,64619],{"class":78,"line":16899},[76,64595,3166],{"class":82},[76,64597,1622],{"class":86},[76,64599,51816],{"class":82},[76,64601,9405],{"class":86},[76,64603,133],{"class":82},[76,64605,4058],{"class":136},[76,64607,9412],{"class":86},[76,64609,998],{"class":82},[76,64611,64612],{"class":86}," as.",[76,64614,51937],{"class":136},[76,64616,3179],{"class":86},[76,64618,2256],{"class":82},[76,64620,12409],{"class":86},[76,64622,64623],{"class":78,"line":32602},[76,64624,64625],{"class":146},"      \u002F\u002F console.log(as[i])\n",[76,64627,64628],{"class":78,"line":32608},[76,64629,64630],{"class":146},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[76,64632,64633,64636,64638,64640,64643,64645,64647],{"class":78,"line":32614},[76,64634,64635],{"class":86},"      as[i].",[76,64637,57782],{"class":1927},[76,64639,87],{"class":86},[76,64641,64642],{"class":192},"'mouseenter'",[76,64644,12402],{"class":86},[76,64646,54418],{"class":82},[76,64648,54421],{"class":86},[76,64650,64651],{"class":78,"line":32620},[76,64652,64653],{"class":146},"        \u002F\u002F console.log('鼠标经过')\n",[76,64655,64656],{"class":78,"line":32626},[76,64657,64658],{"class":146},"        \u002F\u002F 排他思想  \n",[76,64660,64661],{"class":78,"line":32637},[76,64662,64663],{"class":146},"        \u002F\u002F 干掉别人 移除类active\n",[76,64665,64666,64668,64670,64672,64675,64677,64679,64681,64684],{"class":78,"line":32643},[76,64667,51894],{"class":86},[76,64669,54368],{"class":1927},[76,64671,87],{"class":86},[76,64673,64674],{"class":192},"'.tab-nav .active'",[76,64676,56972],{"class":86},[76,64678,56975],{"class":1927},[76,64680,87],{"class":86},[76,64682,64683],{"class":192},"'active'",[76,64685,93],{"class":86},[76,64687,64688],{"class":78,"line":32663},[76,64689,64690],{"class":146},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[76,64692,64693,64696,64699,64701,64703,64705],{"class":78,"line":32669},[76,64694,64695],{"class":136},"        this",[76,64697,64698],{"class":86},".classList.",[76,64700,5301],{"class":1927},[76,64702,87],{"class":86},[76,64704,64683],{"class":192},[76,64706,93],{"class":86},[76,64708,64709],{"class":78,"line":32680},[76,64710,2365],{"emptyLinePlaceholder":2364},[76,64712,64713],{"class":78,"line":32686},[76,64714,64715],{"class":146},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[76,64717,64718],{"class":78,"line":32692},[76,64719,64720],{"class":146},"        \u002F\u002F 干掉别人\n",[76,64722,64723,64725,64727,64729,64732,64734,64736,64738,64740],{"class":78,"line":32698},[76,64724,51894],{"class":86},[76,64726,54368],{"class":1927},[76,64728,87],{"class":86},[76,64730,64731],{"class":192},"'.tab-content .active'",[76,64733,56972],{"class":86},[76,64735,56975],{"class":1927},[76,64737,87],{"class":86},[76,64739,64683],{"class":192},[76,64741,93],{"class":86},[76,64743,64744],{"class":78,"line":32704},[76,64745,64746],{"class":146},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[76,64748,64749,64751,64753,64755,64758,64760,64762,64764,64766,64768,64770,64772,64774],{"class":78,"line":32710},[76,64750,51894],{"class":86},[76,64752,54368],{"class":1927},[76,64754,87],{"class":86},[76,64756,64757],{"class":192},"`.tab-content .item:nth-child(${",[76,64759,529],{"class":86},[76,64761,45535],{"class":82},[76,64763,25087],{"class":136},[76,64765,57001],{"class":192},[76,64767,56972],{"class":86},[76,64769,5301],{"class":1927},[76,64771,87],{"class":86},[76,64773,64683],{"class":192},[76,64775,93],{"class":86},[76,64777,64778],{"class":78,"line":32716},[76,64779,2365],{"emptyLinePlaceholder":2364},[76,64781,64782],{"class":78,"line":32722},[76,64783,64784],{"class":86},"      })\n",[76,64786,64787],{"class":78,"line":32742},[76,64788,2151],{"class":86},[76,64790,64791,64793,64795],{"class":78,"line":32748},[76,64792,52386],{"class":86},[76,64794,51782],{"class":51269},[76,64796,51276],{"class":86},[76,64798,64799,64801,64803],{"class":78,"line":32764},[76,64800,51754],{"class":86},[76,64802,51769],{"class":51269},[76,64804,51276],{"class":86},[76,64806,64807],{"class":78,"line":32770},[76,64808,2365],{"emptyLinePlaceholder":2364},[76,64810,64811,64813,64815],{"class":78,"line":32784},[76,64812,51754],{"class":86},[76,64814,50604],{"class":51269},[76,64816,51276],{"class":86},[21,64818,64819],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[21,64821,64822],{},"在监听事件中，this指向的就是他的调用者",[21,64824,64825],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[21,64827,53689],{},[21,64829,64830],{},"(function () {",[21,64832,64833],{},"const list = document.querySelector('.xtx-elevator-list')",[21,64835,64836],{},"list.addEventListener('click', function (e) {",[21,64838,64839],{},"if (e.target.tagName === 'A') {",[21,64841,64842],{},"\u002F\u002F 排他思想",[21,64844,64845],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[21,64847,64848],{},"const old = document.querySelector('.xtx-elevator-list .active')",[21,64850,64851],{},"\u002F\u002F console.log(old);",[21,64853,64854],{},"\u002F\u002F 判断",[21,64856,64857],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[21,64859,64860],{},"if (old) old.classList.remove('active')",[21,64862,64863],{},"e.target.classList.add('active')",[21,64865,1034],{},[21,64867,52433],{},[21,64869,64870],{},"})();",[46,64872,64874],{"id":64873},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[66,64876,64878],{"className":50602,"code":64877,"language":50604,"meta":71,"style":71},"\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",[73,64879,64880,64890,64894,64902,64906,64920,64934,64946,64954,64960,64970,64980,64984,64988,64995,65007,65018,65035,65048,65062,65072,65076,65080,65087,65098,65116,65126,65138,65142,65146,65153,65170,65181,65193,65197,65201,65208,65220,65224,65232,65240,65244,65252,65260,65268,65283,65327,65335,65348,65361,65374,65382,65390,65398,65426,65434,65446,65459,65472,65480,65488,65496,65522,65530,65543,65555,65568,65576,65584,65592,65618,65626,65639,65651,65664,65672,65680,65688,65693,65713,65718,65738,65743,65760,65765,65773,65778,65807,65820,65824,65828,65833,65837,65865,65870,65887,65892,65897,65902,65907,65933,65937,65941,65949,65957,65961],{"__ignoreMap":71},[76,64881,64882,64884,64886,64888],{"class":78,"line":79},[76,64883,51266],{"class":86},[76,64885,51270],{"class":51269},[76,64887,51273],{"class":1927},[76,64889,51276],{"class":86},[76,64891,64892],{"class":78,"line":96},[76,64893,2365],{"emptyLinePlaceholder":2364},[76,64895,64896,64898,64900],{"class":78,"line":1143},[76,64897,998],{"class":86},[76,64899,50604],{"class":51269},[76,64901,51276],{"class":86},[76,64903,64904],{"class":78,"line":1158},[76,64905,2365],{"emptyLinePlaceholder":2364},[76,64907,64908,64910,64912,64914,64916,64918],{"class":78,"line":1164},[76,64909,998],{"class":86},[76,64911,51303],{"class":51269},[76,64913,51285],{"class":1927},[76,64915,133],{"class":86},[76,64917,51290],{"class":192},[76,64919,51276],{"class":86},[76,64921,64922,64924,64926,64928,64930,64932],{"class":78,"line":1178},[76,64923,52113],{"class":86},[76,64925,51313],{"class":51269},[76,64927,51316],{"class":1927},[76,64929,133],{"class":86},[76,64931,51321],{"class":192},[76,64933,51276],{"class":86},[76,64935,64936,64938,64940,64942,64944],{"class":78,"line":1184},[76,64937,52113],{"class":86},[76,64939,51376],{"class":51269},[76,64941,55283],{"class":86},[76,64943,51376],{"class":51269},[76,64945,51276],{"class":86},[76,64947,64948,64950,64952],{"class":78,"line":1275},[76,64949,52113],{"class":86},[76,64951,5092],{"class":51269},[76,64953,51276],{"class":86},[76,64955,64956,64958],{"class":78,"line":1281},[76,64957,6370],{"class":51269},[76,64959,15539],{"class":86},[76,64961,64962,64964,64966,64968],{"class":78,"line":1293},[76,64963,54675],{"class":136},[76,64965,51406],{"class":86},[76,64967,279],{"class":136},[76,64969,1254],{"class":86},[76,64971,64972,64974,64976,64978],{"class":78,"line":1576},[76,64973,54664],{"class":136},[76,64975,51406],{"class":86},[76,64977,279],{"class":136},[76,64979,1254],{"class":86},[76,64981,64982],{"class":78,"line":1581},[76,64983,2151],{"class":86},[76,64985,64986],{"class":78,"line":1587},[76,64987,2365],{"emptyLinePlaceholder":2364},[76,64989,64990,64993],{"class":78,"line":1592},[76,64991,64992],{"class":51269},"    table",[76,64994,15539],{"class":86},[76,64996,64997,65000,65002,65005],{"class":78,"line":1606},[76,64998,64999],{"class":136},"      border-collapse",[76,65001,51406],{"class":86},[76,65003,65004],{"class":136},"collapse",[76,65006,1254],{"class":86},[76,65008,65009,65012,65014,65016],{"class":78,"line":1611},[76,65010,65011],{"class":136},"      border-spacing",[76,65013,51406],{"class":86},[76,65015,279],{"class":136},[76,65017,1254],{"class":86},[76,65019,65020,65022,65024,65026,65028,65030,65033],{"class":78,"line":1617},[76,65021,61946],{"class":136},[76,65023,51406],{"class":86},[76,65025,305],{"class":136},[76,65027,51461],{"class":82},[76,65029,51490],{"class":136},[76,65031,65032],{"class":136}," #c0c0c0",[76,65034,1254],{"class":86},[76,65036,65037,65039,65041,65044,65046],{"class":78,"line":1638},[76,65038,54740],{"class":136},[76,65040,51406],{"class":86},[76,65042,65043],{"class":136},"500",[76,65045,51461],{"class":82},[76,65047,1254],{"class":86},[76,65049,65050,65052,65054,65056,65058,65060],{"class":78,"line":1643},[76,65051,54675],{"class":136},[76,65053,51406],{"class":86},[76,65055,399],{"class":136},[76,65057,51461],{"class":82},[76,65059,51525],{"class":136},[76,65061,1254],{"class":86},[76,65063,65064,65066,65068,65070],{"class":78,"line":1657},[76,65065,57255],{"class":136},[76,65067,51406],{"class":86},[76,65069,51561],{"class":136},[76,65071,1254],{"class":86},[76,65073,65074],{"class":78,"line":1662},[76,65075,2151],{"class":86},[76,65077,65078],{"class":78,"line":1691},[76,65079,2365],{"emptyLinePlaceholder":2364},[76,65081,65082,65085],{"class":78,"line":1696},[76,65083,65084],{"class":51269},"    th",[76,65086,15539],{"class":86},[76,65088,65089,65091,65093,65096],{"class":78,"line":1713},[76,65090,54853],{"class":136},[76,65092,51406],{"class":86},[76,65094,65095],{"class":136},"#09c",[76,65097,1254],{"class":86},[76,65099,65100,65103,65105,65107,65109,65111,65114],{"class":78,"line":1718},[76,65101,65102],{"class":136},"      font",[76,65104,51406],{"class":86},[76,65106,62308],{"class":136},[76,65108,64042],{"class":136},[76,65110,51461],{"class":82},[76,65112,65113],{"class":192}," \"微软雅黑\"",[76,65115,1254],{"class":86},[76,65117,65118,65120,65122,65124],{"class":78,"line":1723},[76,65119,57385],{"class":136},[76,65121,51406],{"class":86},[76,65123,60811],{"class":136},[76,65125,1254],{"class":86},[76,65127,65128,65130,65132,65134,65136],{"class":78,"line":1728},[76,65129,54754],{"class":136},[76,65131,51406],{"class":86},[76,65133,888],{"class":136},[76,65135,51461],{"class":82},[76,65137,1254],{"class":86},[76,65139,65140],{"class":78,"line":1742},[76,65141,2151],{"class":86},[76,65143,65144],{"class":78,"line":1747},[76,65145,2365],{"emptyLinePlaceholder":2364},[76,65147,65148,65151],{"class":78,"line":2542},[76,65149,65150],{"class":51269},"    td",[76,65152,15539],{"class":86},[76,65154,65155,65157,65159,65161,65163,65165,65168],{"class":78,"line":2556},[76,65156,61946],{"class":136},[76,65158,51406],{"class":86},[76,65160,305],{"class":136},[76,65162,51461],{"class":82},[76,65164,51490],{"class":136},[76,65166,65167],{"class":136}," #d0d0d0",[76,65169,1254],{"class":86},[76,65171,65172,65174,65176,65179],{"class":78,"line":2564},[76,65173,57385],{"class":136},[76,65175,51406],{"class":86},[76,65177,65178],{"class":136},"#404060",[76,65180,1254],{"class":86},[76,65182,65183,65185,65187,65189,65191],{"class":78,"line":2569},[76,65184,54664],{"class":136},[76,65186,51406],{"class":86},[76,65188,534],{"class":136},[76,65190,51461],{"class":82},[76,65192,1254],{"class":86},[76,65194,65195],{"class":78,"line":2575},[76,65196,2151],{"class":86},[76,65198,65199],{"class":78,"line":2581},[76,65200,2365],{"emptyLinePlaceholder":2364},[76,65202,65203,65206],{"class":78,"line":2586},[76,65204,65205],{"class":1927},"    .allCheck",[76,65207,15539],{"class":86},[76,65209,65210,65212,65214,65216,65218],{"class":78,"line":7915},[76,65211,54740],{"class":136},[76,65213,51406],{"class":86},[76,65215,700],{"class":136},[76,65217,51461],{"class":82},[76,65219,1254],{"class":86},[76,65221,65222],{"class":78,"line":7939},[76,65223,2151],{"class":86},[76,65225,65226,65228,65230],{"class":78,"line":7944},[76,65227,52386],{"class":86},[76,65229,5092],{"class":51269},[76,65231,51276],{"class":86},[76,65233,65234,65236,65238],{"class":78,"line":7950},[76,65235,51754],{"class":86},[76,65237,51303],{"class":51269},[76,65239,51276],{"class":86},[76,65241,65242],{"class":78,"line":7977},[76,65243,2365],{"emptyLinePlaceholder":2364},[76,65245,65246,65248,65250],{"class":78,"line":7982},[76,65247,998],{"class":86},[76,65249,51769],{"class":51269},[76,65251,51276],{"class":86},[76,65253,65254,65256,65258],{"class":78,"line":7988},[76,65255,52113],{"class":86},[76,65257,225],{"class":51269},[76,65259,51276],{"class":86},[76,65261,65262,65264,65266],{"class":78,"line":8000},[76,65263,51310],{"class":86},[76,65265,231],{"class":51269},[76,65267,51276],{"class":86},[76,65269,65270,65272,65274,65276,65278,65281],{"class":78,"line":8012},[76,65271,55203],{"class":86},[76,65273,234],{"class":51269},[76,65275,53455],{"class":1927},[76,65277,133],{"class":86},[76,65279,65280],{"class":192},"\"allCheck\"",[76,65282,51276],{"class":86},[76,65284,65285,65287,65289,65291,65293,65295,65297,65299,65301,65303,65305,65308,65311,65313,65315,65317,65320,65323,65325],{"class":78,"line":8024},[76,65286,55271],{"class":86},[76,65288,53790],{"class":51269},[76,65290,53793],{"class":1927},[76,65292,133],{"class":86},[76,65294,53798],{"class":192},[76,65296,14887],{"class":1927},[76,65298,133],{"class":86},[76,65300,7619],{"class":192},[76,65302,14926],{"class":1927},[76,65304,133],{"class":86},[76,65306,65307],{"class":192},"\"checkAll\"",[76,65309,65310],{"class":86},"> \u003C",[76,65312,76],{"class":51269},[76,65314,53455],{"class":1927},[76,65316,133],{"class":86},[76,65318,65319],{"class":192},"\"all\"",[76,65321,65322],{"class":86},">全选\u003C\u002F",[76,65324,76],{"class":51269},[76,65326,51276],{"class":86},[76,65328,65329,65331,65333],{"class":78,"line":9683},[76,65330,55376],{"class":86},[76,65332,234],{"class":51269},[76,65334,51276],{"class":86},[76,65336,65337,65339,65341,65344,65346],{"class":78,"line":9708},[76,65338,55203],{"class":86},[76,65340,234],{"class":51269},[76,65342,65343],{"class":86},">商品\u003C\u002F",[76,65345,234],{"class":51269},[76,65347,51276],{"class":86},[76,65349,65350,65352,65354,65357,65359],{"class":78,"line":9731},[76,65351,55203],{"class":86},[76,65353,234],{"class":51269},[76,65355,65356],{"class":86},">商家\u003C\u002F",[76,65358,234],{"class":51269},[76,65360,51276],{"class":86},[76,65362,65363,65365,65367,65370,65372],{"class":78,"line":9755},[76,65364,55203],{"class":86},[76,65366,234],{"class":51269},[76,65368,65369],{"class":86},">价格\u003C\u002F",[76,65371,234],{"class":51269},[76,65373,51276],{"class":86},[76,65375,65376,65378,65380],{"class":78,"line":9760},[76,65377,51745],{"class":86},[76,65379,231],{"class":51269},[76,65381,51276],{"class":86},[76,65383,65384,65386,65388],{"class":78,"line":9765},[76,65385,51310],{"class":86},[76,65387,231],{"class":51269},[76,65389,51276],{"class":86},[76,65391,65392,65394,65396],{"class":78,"line":9770},[76,65393,55203],{"class":86},[76,65395,277],{"class":51269},[76,65397,51276],{"class":86},[76,65399,65400,65402,65404,65406,65408,65410,65412,65414,65417,65419,65421,65424],{"class":78,"line":9779},[76,65401,55271],{"class":86},[76,65403,53790],{"class":51269},[76,65405,53793],{"class":1927},[76,65407,133],{"class":86},[76,65409,53798],{"class":192},[76,65411,14887],{"class":1927},[76,65413,133],{"class":86},[76,65415,65416],{"class":192},"\"check\"",[76,65418,53455],{"class":1927},[76,65420,133],{"class":86},[76,65422,65423],{"class":192},"\"ck\"",[76,65425,51276],{"class":86},[76,65427,65428,65430,65432],{"class":78,"line":9784},[76,65429,55376],{"class":86},[76,65431,277],{"class":51269},[76,65433,51276],{"class":86},[76,65435,65436,65438,65440,65442,65444],{"class":78,"line":9790},[76,65437,55203],{"class":86},[76,65439,277],{"class":51269},[76,65441,61142],{"class":86},[76,65443,277],{"class":51269},[76,65445,51276],{"class":86},[76,65447,65448,65450,65452,65455,65457],{"class":78,"line":9811},[76,65449,55203],{"class":86},[76,65451,277],{"class":51269},[76,65453,65454],{"class":86},">小米\u003C\u002F",[76,65456,277],{"class":51269},[76,65458,51276],{"class":86},[76,65460,65461,65463,65465,65468,65470],{"class":78,"line":9817},[76,65462,55203],{"class":86},[76,65464,277],{"class":51269},[76,65466,65467],{"class":86},">￥1999\u003C\u002F",[76,65469,277],{"class":51269},[76,65471,51276],{"class":86},[76,65473,65474,65476,65478],{"class":78,"line":9831},[76,65475,51745],{"class":86},[76,65477,231],{"class":51269},[76,65479,51276],{"class":86},[76,65481,65482,65484,65486],{"class":78,"line":9837},[76,65483,51310],{"class":86},[76,65485,231],{"class":51269},[76,65487,51276],{"class":86},[76,65489,65490,65492,65494],{"class":78,"line":9864},[76,65491,55203],{"class":86},[76,65493,277],{"class":51269},[76,65495,51276],{"class":86},[76,65497,65498,65500,65502,65504,65506,65508,65510,65512,65514,65516,65518,65520],{"class":78,"line":9873},[76,65499,55271],{"class":86},[76,65501,53790],{"class":51269},[76,65503,53793],{"class":1927},[76,65505,133],{"class":86},[76,65507,53798],{"class":192},[76,65509,14887],{"class":1927},[76,65511,133],{"class":86},[76,65513,65416],{"class":192},[76,65515,53455],{"class":1927},[76,65517,133],{"class":86},[76,65519,65423],{"class":192},[76,65521,51276],{"class":86},[76,65523,65524,65526,65528],{"class":78,"line":9879},[76,65525,55376],{"class":86},[76,65527,277],{"class":51269},[76,65529,51276],{"class":86},[76,65531,65532,65534,65536,65539,65541],{"class":78,"line":9887},[76,65533,55203],{"class":86},[76,65535,277],{"class":51269},[76,65537,65538],{"class":86},">小米净水器\u003C\u002F",[76,65540,277],{"class":51269},[76,65542,51276],{"class":86},[76,65544,65545,65547,65549,65551,65553],{"class":78,"line":9892},[76,65546,55203],{"class":86},[76,65548,277],{"class":51269},[76,65550,65454],{"class":86},[76,65552,277],{"class":51269},[76,65554,51276],{"class":86},[76,65556,65557,65559,65561,65564,65566],{"class":78,"line":16571},[76,65558,55203],{"class":86},[76,65560,277],{"class":51269},[76,65562,65563],{"class":86},">￥4999\u003C\u002F",[76,65565,277],{"class":51269},[76,65567,51276],{"class":86},[76,65569,65570,65572,65574],{"class":78,"line":16577},[76,65571,51745],{"class":86},[76,65573,231],{"class":51269},[76,65575,51276],{"class":86},[76,65577,65578,65580,65582],{"class":78,"line":16600},[76,65579,51310],{"class":86},[76,65581,231],{"class":51269},[76,65583,51276],{"class":86},[76,65585,65586,65588,65590],{"class":78,"line":16606},[76,65587,55203],{"class":86},[76,65589,277],{"class":51269},[76,65591,51276],{"class":86},[76,65593,65594,65596,65598,65600,65602,65604,65606,65608,65610,65612,65614,65616],{"class":78,"line":16629},[76,65595,55271],{"class":86},[76,65597,53790],{"class":51269},[76,65599,53793],{"class":1927},[76,65601,133],{"class":86},[76,65603,53798],{"class":192},[76,65605,14887],{"class":1927},[76,65607,133],{"class":86},[76,65609,65416],{"class":192},[76,65611,53455],{"class":1927},[76,65613,133],{"class":86},[76,65615,65423],{"class":192},[76,65617,51276],{"class":86},[76,65619,65620,65622,65624],{"class":78,"line":16643},[76,65621,55376],{"class":86},[76,65623,277],{"class":51269},[76,65625,51276],{"class":86},[76,65627,65628,65630,65632,65635,65637],{"class":78,"line":16663},[76,65629,55203],{"class":86},[76,65631,277],{"class":51269},[76,65633,65634],{"class":86},">小米电视\u003C\u002F",[76,65636,277],{"class":51269},[76,65638,51276],{"class":86},[76,65640,65641,65643,65645,65647,65649],{"class":78,"line":16669},[76,65642,55203],{"class":86},[76,65644,277],{"class":51269},[76,65646,65454],{"class":86},[76,65648,277],{"class":51269},[76,65650,51276],{"class":86},[76,65652,65653,65655,65657,65660,65662],{"class":78,"line":16680},[76,65654,55203],{"class":86},[76,65656,277],{"class":51269},[76,65658,65659],{"class":86},">￥5999\u003C\u002F",[76,65661,277],{"class":51269},[76,65663,51276],{"class":86},[76,65665,65666,65668,65670],{"class":78,"line":16703},[76,65667,51745],{"class":86},[76,65669,231],{"class":51269},[76,65671,51276],{"class":86},[76,65673,65674,65676,65678],{"class":78,"line":16725},[76,65675,52386],{"class":86},[76,65677,225],{"class":51269},[76,65679,51276],{"class":86},[76,65681,65682,65684,65686],{"class":78,"line":16730},[76,65683,52113],{"class":86},[76,65685,51782],{"class":51269},[76,65687,51276],{"class":86},[76,65689,65690],{"class":78,"line":16736},[76,65691,65692],{"class":146},"    \u002F\u002F 1. 获取大复选框\n",[76,65694,65695,65697,65700,65702,65704,65706,65708,65711],{"class":78,"line":16750},[76,65696,11188],{"class":82},[76,65698,65699],{"class":136}," checkAll",[76,65701,13531],{"class":82},[76,65703,54365],{"class":86},[76,65705,54368],{"class":1927},[76,65707,87],{"class":86},[76,65709,65710],{"class":192},"'#checkAll'",[76,65712,93],{"class":86},[76,65714,65715],{"class":78,"line":16763},[76,65716,65717],{"class":146},"    \u002F\u002F 2. 获取所有的小复选框\n",[76,65719,65720,65722,65725,65727,65729,65731,65733,65736],{"class":78,"line":16768},[76,65721,11188],{"class":82},[76,65723,65724],{"class":136}," cks",[76,65726,13531],{"class":82},[76,65728,54365],{"class":86},[76,65730,55650],{"class":1927},[76,65732,87],{"class":86},[76,65734,65735],{"class":192},"'.ck'",[76,65737,93],{"class":86},[76,65739,65740],{"class":78,"line":16782},[76,65741,65742],{"class":146},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[76,65744,65745,65748,65750,65752,65754,65756,65758],{"class":78,"line":16787},[76,65746,65747],{"class":86},"    checkAll.",[76,65749,57782],{"class":1927},[76,65751,87],{"class":86},[76,65753,57787],{"class":192},[76,65755,12402],{"class":86},[76,65757,54418],{"class":82},[76,65759,54421],{"class":86},[76,65761,65762],{"class":78,"line":16793},[76,65763,65764],{"class":146},"      \u002F\u002F 得到当前大复选框的选中状态\n",[76,65766,65767,65770],{"class":78,"line":16798},[76,65768,65769],{"class":146},"      \u002F\u002F console.log(checkAll.checked)",[76,65771,65772],{"class":146},"  \u002F\u002F 得到 是 true 或者是 false\n",[76,65774,65775],{"class":78,"line":16812},[76,65776,65777],{"class":146},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[76,65779,65780,65782,65784,65786,65788,65790,65792,65794,65796,65799,65801,65803,65805],{"class":78,"line":16817},[76,65781,52253],{"class":82},[76,65783,1622],{"class":86},[76,65785,51816],{"class":82},[76,65787,9405],{"class":86},[76,65789,133],{"class":82},[76,65791,4058],{"class":136},[76,65793,9412],{"class":86},[76,65795,998],{"class":82},[76,65797,65798],{"class":86}," cks.",[76,65800,51937],{"class":136},[76,65802,3179],{"class":86},[76,65804,2256],{"class":82},[76,65806,12409],{"class":86},[76,65808,65809,65812,65814,65817],{"class":78,"line":16822},[76,65810,65811],{"class":86},"        cks[i].checked ",[76,65813,133],{"class":82},[76,65815,65816],{"class":136}," this",[76,65818,65819],{"class":86},".checked\n",[76,65821,65822],{"class":78,"line":16836},[76,65823,52367],{"class":86},[76,65825,65826],{"class":78,"line":16848},[76,65827,33430],{"class":86},[76,65829,65830],{"class":78,"line":16853},[76,65831,65832],{"class":146},"    \u002F\u002F 5. 小复选框控制大复选框\n",[76,65834,65835],{"class":78,"line":16866},[76,65836,2365],{"emptyLinePlaceholder":2364},[76,65838,65839,65841,65843,65845,65847,65849,65851,65853,65855,65857,65859,65861,65863],{"class":78,"line":16871},[76,65840,3166],{"class":82},[76,65842,1622],{"class":86},[76,65844,51816],{"class":82},[76,65846,9405],{"class":86},[76,65848,133],{"class":82},[76,65850,4058],{"class":136},[76,65852,9412],{"class":86},[76,65854,998],{"class":82},[76,65856,65798],{"class":86},[76,65858,51937],{"class":136},[76,65860,3179],{"class":86},[76,65862,2256],{"class":82},[76,65864,12409],{"class":86},[76,65866,65867],{"class":78,"line":16876},[76,65868,65869],{"class":146},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[76,65871,65872,65875,65877,65879,65881,65883,65885],{"class":78,"line":16881},[76,65873,65874],{"class":86},"      cks[i].",[76,65876,57782],{"class":1927},[76,65878,87],{"class":86},[76,65880,57787],{"class":192},[76,65882,12402],{"class":86},[76,65884,54418],{"class":82},[76,65886,54421],{"class":86},[76,65888,65889],{"class":78,"line":16894},[76,65890,65891],{"class":146},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[76,65893,65894],{"class":78,"line":16899},[76,65895,65896],{"class":146},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[76,65898,65899],{"class":78,"line":32602},[76,65900,65901],{"class":146},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[76,65903,65904],{"class":78,"line":32608},[76,65905,65906],{"class":146},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[76,65908,65909,65912,65914,65916,65918,65920,65923,65925,65927,65929,65931],{"class":78,"line":32614},[76,65910,65911],{"class":86},"        checkAll.checked ",[76,65913,133],{"class":82},[76,65915,54365],{"class":86},[76,65917,55650],{"class":1927},[76,65919,87],{"class":86},[76,65921,65922],{"class":192},"'.ck:checked'",[76,65924,30795],{"class":86},[76,65926,51937],{"class":136},[76,65928,57875],{"class":82},[76,65930,65798],{"class":86},[76,65932,55800],{"class":136},[76,65934,65935],{"class":78,"line":32620},[76,65936,64784],{"class":86},[76,65938,65939],{"class":78,"line":32626},[76,65940,2151],{"class":86},[76,65942,65943,65945,65947],{"class":78,"line":32637},[76,65944,52386],{"class":86},[76,65946,51782],{"class":51269},[76,65948,51276],{"class":86},[76,65950,65951,65953,65955],{"class":78,"line":32643},[76,65952,51754],{"class":86},[76,65954,51769],{"class":51269},[76,65956,51276],{"class":86},[76,65958,65959],{"class":78,"line":32663},[76,65960,2365],{"emptyLinePlaceholder":2364},[76,65962,65963,65965,65967],{"class":78,"line":32669},[76,65964,51754],{"class":86},[76,65966,50604],{"class":51269},[76,65968,51276],{"class":86},[21,65970,65971],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[21,65973,65974],{},"用好之间比较得到的布尔值！！！",[21,65976,65977,65978,65981,65982,1622,65985,672,65987,65990],{},"在 JS 里访问的时候，",[73,65979,65980],{},"checkbox.checked"," 是一个 ",[237,65983,65984],{},"布尔值",[73,65986,1326],{},[73,65988,65989],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[21,65992,65993,65994,65997,65998],{},"HTML 的 ",[73,65995,65996],{},"checked=\"checked\""," 只是 ",[237,65999,66000,66001,66004],{},"初始值；JS 的 ",[73,66002,66003],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[21,66006,66007],{},"：checked是一个伪类选择器",[21,66009,66010],{},[1426,66011],{"alt":71,"src":66012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[21,66014,66015,66018],{},[66016,66017],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[21,66020,66021],{},[1426,66022],{"alt":71,"src":66023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[16,66025,66027],{"id":66026},"_33-dom事件进阶","3.3 DOM事件进阶",[46,66029,66031],{"id":66030},"_331-事件流","3.3.1 事件流",[21,66033,66034],{},[1426,66035],{"alt":71,"src":66036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21965,66038,66040],{"id":66039},"_3311-事件捕获","3.3.1.1 事件捕获",[21,66042,66043],{},[1426,66044],{"alt":71,"src":66045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[66,66047,66049],{"className":50602,"code":66048,"language":50604,"meta":71,"style":71},"\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",[73,66050,66051,66061,66075,66079,66087,66101,66121,66133,66141,66148,66160,66172,66182,66186,66190,66197,66209,66221,66231,66235,66243,66251,66255,66263,66278,66297,66305,66313,66333,66353,66369,66380,66388,66405,66416,66424,66441,66452,66460,66468,66476,66480],{"__ignoreMap":71},[76,66052,66053,66055,66057,66059],{"class":78,"line":79},[76,66054,51266],{"class":86},[76,66056,51270],{"class":51269},[76,66058,51273],{"class":1927},[76,66060,51276],{"class":86},[76,66062,66063,66065,66067,66069,66071,66073],{"class":78,"line":96},[76,66064,998],{"class":86},[76,66066,50604],{"class":51269},[76,66068,51285],{"class":1927},[76,66070,133],{"class":86},[76,66072,51290],{"class":192},[76,66074,51276],{"class":86},[76,66076,66077],{"class":78,"line":1143},[76,66078,2365],{"emptyLinePlaceholder":2364},[76,66080,66081,66083,66085],{"class":78,"line":1158},[76,66082,998],{"class":86},[76,66084,51303],{"class":51269},[76,66086,51276],{"class":86},[76,66088,66089,66091,66093,66095,66097,66099],{"class":78,"line":1164},[76,66090,52113],{"class":86},[76,66092,51313],{"class":51269},[76,66094,51316],{"class":1927},[76,66096,133],{"class":86},[76,66098,51321],{"class":192},[76,66100,51276],{"class":86},[76,66102,66103,66105,66107,66109,66111,66113,66115,66117,66119],{"class":78,"line":1178},[76,66104,52113],{"class":86},[76,66106,51313],{"class":51269},[76,66108,14887],{"class":1927},[76,66110,133],{"class":86},[76,66112,51360],{"class":192},[76,66114,51340],{"class":1927},[76,66116,133],{"class":86},[76,66118,51367],{"class":192},[76,66120,51276],{"class":86},[76,66122,66123,66125,66127,66129,66131],{"class":78,"line":1184},[76,66124,52113],{"class":86},[76,66126,51376],{"class":51269},[76,66128,51379],{"class":86},[76,66130,51376],{"class":51269},[76,66132,51276],{"class":86},[76,66134,66135,66137,66139],{"class":78,"line":1275},[76,66136,52113],{"class":86},[76,66138,5092],{"class":51269},[76,66140,51276],{"class":86},[76,66142,66143,66146],{"class":78,"line":1281},[76,66144,66145],{"class":1927},"    .father",[76,66147,15539],{"class":86},[76,66149,66150,66152,66154,66156,66158],{"class":78,"line":1293},[76,66151,54740],{"class":136},[76,66153,51406],{"class":86},[76,66155,65043],{"class":136},[76,66157,51461],{"class":82},[76,66159,1254],{"class":86},[76,66161,66162,66164,66166,66168,66170],{"class":78,"line":1576},[76,66163,54754],{"class":136},[76,66165,51406],{"class":86},[76,66167,65043],{"class":136},[76,66169,51461],{"class":82},[76,66171,1254],{"class":86},[76,66173,66174,66176,66178,66180],{"class":78,"line":1581},[76,66175,54853],{"class":136},[76,66177,51406],{"class":86},[76,66179,51614],{"class":136},[76,66181,1254],{"class":86},[76,66183,66184],{"class":78,"line":1587},[76,66185,2151],{"class":86},[76,66187,66188],{"class":78,"line":1592},[76,66189,2365],{"emptyLinePlaceholder":2364},[76,66191,66192,66195],{"class":78,"line":1606},[76,66193,66194],{"class":1927},"    .son",[76,66196,15539],{"class":86},[76,66198,66199,66201,66203,66205,66207],{"class":78,"line":1611},[76,66200,54740],{"class":136},[76,66202,51406],{"class":86},[76,66204,1686],{"class":136},[76,66206,51461],{"class":82},[76,66208,1254],{"class":86},[76,66210,66211,66213,66215,66217,66219],{"class":78,"line":1617},[76,66212,54754],{"class":136},[76,66214,51406],{"class":86},[76,66216,1686],{"class":136},[76,66218,51461],{"class":82},[76,66220,1254],{"class":86},[76,66222,66223,66225,66227,66229],{"class":78,"line":1638},[76,66224,54853],{"class":136},[76,66226,51406],{"class":86},[76,66228,54858],{"class":136},[76,66230,1254],{"class":86},[76,66232,66233],{"class":78,"line":1643},[76,66234,2151],{"class":86},[76,66236,66237,66239,66241],{"class":78,"line":1657},[76,66238,52386],{"class":86},[76,66240,5092],{"class":51269},[76,66242,51276],{"class":86},[76,66244,66245,66247,66249],{"class":78,"line":1662},[76,66246,51754],{"class":86},[76,66248,51303],{"class":51269},[76,66250,51276],{"class":86},[76,66252,66253],{"class":78,"line":1691},[76,66254,2365],{"emptyLinePlaceholder":2364},[76,66256,66257,66259,66261],{"class":78,"line":1696},[76,66258,998],{"class":86},[76,66260,51769],{"class":51269},[76,66262,51276],{"class":86},[76,66264,66265,66267,66269,66271,66273,66276],{"class":78,"line":1713},[76,66266,52113],{"class":86},[76,66268,51580],{"class":51269},[76,66270,53455],{"class":1927},[76,66272,133],{"class":86},[76,66274,66275],{"class":192},"\"father\"",[76,66277,51276],{"class":86},[76,66279,66280,66282,66284,66286,66288,66291,66293,66295],{"class":78,"line":1718},[76,66281,51310],{"class":86},[76,66283,51580],{"class":51269},[76,66285,53455],{"class":1927},[76,66287,133],{"class":86},[76,66289,66290],{"class":192},"\"son\"",[76,66292,55283],{"class":86},[76,66294,51580],{"class":51269},[76,66296,51276],{"class":86},[76,66298,66299,66301,66303],{"class":78,"line":1723},[76,66300,52386],{"class":86},[76,66302,51580],{"class":51269},[76,66304,51276],{"class":86},[76,66306,66307,66309,66311],{"class":78,"line":1728},[76,66308,52113],{"class":86},[76,66310,51782],{"class":51269},[76,66312,51276],{"class":86},[76,66314,66315,66317,66320,66322,66324,66326,66328,66331],{"class":78,"line":1742},[76,66316,11188],{"class":82},[76,66318,66319],{"class":136}," fa",[76,66321,13531],{"class":82},[76,66323,54365],{"class":86},[76,66325,54368],{"class":1927},[76,66327,87],{"class":86},[76,66329,66330],{"class":192},"'.father'",[76,66332,93],{"class":86},[76,66334,66335,66337,66340,66342,66344,66346,66348,66351],{"class":78,"line":1747},[76,66336,11188],{"class":82},[76,66338,66339],{"class":136}," son",[76,66341,13531],{"class":82},[76,66343,54365],{"class":86},[76,66345,54368],{"class":1927},[76,66347,87],{"class":86},[76,66349,66350],{"class":192},"'.son'",[76,66352,93],{"class":86},[76,66354,66355,66357,66359,66361,66363,66365,66367],{"class":78,"line":2542},[76,66356,52376],{"class":86},[76,66358,57782],{"class":1927},[76,66360,87],{"class":86},[76,66362,57787],{"class":192},[76,66364,12402],{"class":86},[76,66366,54418],{"class":82},[76,66368,54421],{"class":86},[76,66370,66371,66373,66375,66378],{"class":78,"line":2556},[76,66372,58894],{"class":1927},[76,66374,87],{"class":86},[76,66376,66377],{"class":192},"'woshiu1'",[76,66379,93],{"class":86},[76,66381,66382,66384,66386],{"class":78,"line":2564},[76,66383,54504],{"class":86},[76,66385,1326],{"class":136},[76,66387,93],{"class":86},[76,66389,66390,66393,66395,66397,66399,66401,66403],{"class":78,"line":2569},[76,66391,66392],{"class":86},"    fa.",[76,66394,57782],{"class":1927},[76,66396,87],{"class":86},[76,66398,57787],{"class":192},[76,66400,12402],{"class":86},[76,66402,54418],{"class":82},[76,66404,54421],{"class":86},[76,66406,66407,66409,66411,66414],{"class":78,"line":2575},[76,66408,58894],{"class":1927},[76,66410,87],{"class":86},[76,66412,66413],{"class":192},"'1'",[76,66415,93],{"class":86},[76,66417,66418,66420,66422],{"class":78,"line":2581},[76,66419,54504],{"class":86},[76,66421,1326],{"class":136},[76,66423,93],{"class":86},[76,66425,66426,66429,66431,66433,66435,66437,66439],{"class":78,"line":2586},[76,66427,66428],{"class":86},"    son.",[76,66430,57782],{"class":1927},[76,66432,87],{"class":86},[76,66434,57787],{"class":192},[76,66436,12402],{"class":86},[76,66438,54418],{"class":82},[76,66440,54421],{"class":86},[76,66442,66443,66445,66447,66450],{"class":78,"line":7915},[76,66444,58894],{"class":1927},[76,66446,87],{"class":86},[76,66448,66449],{"class":192},"'2'",[76,66451,93],{"class":86},[76,66453,66454,66456,66458],{"class":78,"line":7939},[76,66455,54504],{"class":86},[76,66457,1326],{"class":136},[76,66459,93],{"class":86},[76,66461,66462,66464,66466],{"class":78,"line":7944},[76,66463,52386],{"class":86},[76,66465,51782],{"class":51269},[76,66467,51276],{"class":86},[76,66469,66470,66472,66474],{"class":78,"line":7950},[76,66471,51754],{"class":86},[76,66473,51769],{"class":51269},[76,66475,51276],{"class":86},[76,66477,66478],{"class":78,"line":7977},[76,66479,2365],{"emptyLinePlaceholder":2364},[76,66481,66482,66484,66486],{"class":78,"line":7982},[76,66483,51754],{"class":86},[76,66485,50604],{"class":51269},[76,66487,51276],{"class":86},[21,66489,66490],{},[1426,66491],{"alt":71,"src":66492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[21,66494,66495],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21965,66497,66499],{"id":66498},"_3312-事件冒泡","3.3.1.2 事件冒泡",[21,66501,66502],{},[1426,66503],{"alt":71,"src":66504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[21,66506,66507],{},"反着来",[21,66509,66510],{},"注意是同名事件，比如都是‘click’",[21965,66512,66514],{"id":66513},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[21,66516,66517],{},[1426,66518],{"alt":71,"src":66519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21965,66521,66523],{"id":66522},"_3314-解绑事件","3.3.1.4 解绑事件",[21,66525,66526],{},[1426,66527],{"alt":71,"src":66528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[21,66530,66531],{},[1426,66532],{"alt":71,"src":66533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21965,66535,66537],{"id":66536},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[29,66539,66540],{},[32,66541,66542],{},"事件类型的区别",[21,66544,66545],{},[1426,66546],{"alt":71,"src":66547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[21,66549,66550],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[29,66552,66553],{"start":96},[32,66554,66555],{},"注册事件的区别",[21,66557,66558],{},[1426,66559],{"alt":71,"src":66560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21965,66562,66564],{"id":66563},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[21,66566,66567],{},[1426,66568],{"alt":71,"src":66569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[21,66571,66572],{},[1426,66573],{"alt":71,"src":66574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[66,66576,66578],{"className":53036,"code":66577,"language":53038,"meta":71,"style":71},"\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",[73,66579,66580,66588,66605,66628,66636,66641,66646,66651,66655,66663,66671],{"__ignoreMap":71},[76,66581,66582,66584,66586],{"class":78,"line":79},[76,66583,998],{"class":86},[76,66585,51769],{"class":51269},[76,66587,51276],{"class":86},[76,66589,66590,66592,66595,66598,66600,66603],{"class":78,"line":96},[76,66591,52113],{"class":86},[76,66593,66594],{"class":51269},"form",[76,66596,66597],{"class":1927}," action",[76,66599,133],{"class":86},[76,66601,66602],{"class":192},"\"http:\u002F\u002Fwww.itcast.cn\"",[76,66604,51276],{"class":86},[76,66606,66607,66609,66611,66613,66615,66618,66621,66623,66626],{"class":78,"line":1143},[76,66608,51310],{"class":86},[76,66610,53790],{"class":51269},[76,66612,53793],{"class":1927},[76,66614,133],{"class":86},[76,66616,66617],{"class":192},"\"submit\"",[76,66619,66620],{"class":1927}," value",[76,66622,133],{"class":86},[76,66624,66625],{"class":192},"\"免费注册\"",[76,66627,51276],{"class":86},[76,66629,66630,66632,66634],{"class":78,"line":1158},[76,66631,51310],{"class":86},[76,66633,51782],{"class":51269},[76,66635,51276],{"class":86},[76,66637,66638],{"class":78,"line":1164},[76,66639,66640],{"class":86},"      const form = document.querySelector('form')\n",[76,66642,66643],{"class":78,"line":1178},[76,66644,66645],{"class":86},"      form.addEventListener('submit', function (e) {\n",[76,66647,66648],{"class":78,"line":1184},[76,66649,66650],{"class":86},"        e.preventDefault()\n",[76,66652,66653],{"class":78,"line":1275},[76,66654,64784],{"class":86},[76,66656,66657,66659,66661],{"class":78,"line":1281},[76,66658,51745],{"class":86},[76,66660,51782],{"class":51269},[76,66662,51276],{"class":86},[76,66664,66665,66667,66669],{"class":78,"line":1293},[76,66666,52386],{"class":86},[76,66668,66594],{"class":51269},[76,66670,51276],{"class":86},[76,66672,66673,66675,66677],{"class":78,"line":1576},[76,66674,51754],{"class":86},[76,66676,51769],{"class":51269},[76,66678,51276],{"class":86},[21,66680,66681],{},"点击不在跳转！！！",[46,66683,66685],{"id":66684},"_332-事件委托","3.3.2 事件委托",[21,66687,66688],{},[1426,66689],{"alt":71,"src":66690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[66,66692,66694],{"className":50602,"code":66693,"language":50604,"meta":71,"style":71},"\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",[73,66695,66696,66706,66720,66724,66732,66746,66766,66778,66786,66790,66798,66806,66818,66830,66842,66854,66866,66879,66887,66895,66900,66919,66940,66945,66950,66955,66960,66969,66973,66983,66987,66992,66997,67011,67021,67025,67029,67037,67045,67049],{"__ignoreMap":71},[76,66697,66698,66700,66702,66704],{"class":78,"line":79},[76,66699,51266],{"class":86},[76,66701,51270],{"class":51269},[76,66703,51273],{"class":1927},[76,66705,51276],{"class":86},[76,66707,66708,66710,66712,66714,66716,66718],{"class":78,"line":96},[76,66709,998],{"class":86},[76,66711,50604],{"class":51269},[76,66713,51285],{"class":1927},[76,66715,133],{"class":86},[76,66717,51290],{"class":192},[76,66719,51276],{"class":86},[76,66721,66722],{"class":78,"line":1143},[76,66723,2365],{"emptyLinePlaceholder":2364},[76,66725,66726,66728,66730],{"class":78,"line":1158},[76,66727,998],{"class":86},[76,66729,51303],{"class":51269},[76,66731,51276],{"class":86},[76,66733,66734,66736,66738,66740,66742,66744],{"class":78,"line":1164},[76,66735,52113],{"class":86},[76,66737,51313],{"class":51269},[76,66739,51316],{"class":1927},[76,66741,133],{"class":86},[76,66743,51321],{"class":192},[76,66745,51276],{"class":86},[76,66747,66748,66750,66752,66754,66756,66758,66760,66762,66764],{"class":78,"line":1178},[76,66749,52113],{"class":86},[76,66751,51313],{"class":51269},[76,66753,14887],{"class":1927},[76,66755,133],{"class":86},[76,66757,51360],{"class":192},[76,66759,51340],{"class":1927},[76,66761,133],{"class":86},[76,66763,51367],{"class":192},[76,66765,51276],{"class":86},[76,66767,66768,66770,66772,66774,66776],{"class":78,"line":1184},[76,66769,52113],{"class":86},[76,66771,51376],{"class":51269},[76,66773,51379],{"class":86},[76,66775,51376],{"class":51269},[76,66777,51276],{"class":86},[76,66779,66780,66782,66784],{"class":78,"line":1275},[76,66781,51754],{"class":86},[76,66783,51303],{"class":51269},[76,66785,51276],{"class":86},[76,66787,66788],{"class":78,"line":1281},[76,66789,2365],{"emptyLinePlaceholder":2364},[76,66791,66792,66794,66796],{"class":78,"line":1293},[76,66793,998],{"class":86},[76,66795,51769],{"class":51269},[76,66797,51276],{"class":86},[76,66799,66800,66802,66804],{"class":78,"line":1576},[76,66801,52113],{"class":86},[76,66803,1095],{"class":51269},[76,66805,51276],{"class":86},[76,66807,66808,66810,66812,66814,66816],{"class":78,"line":1581},[76,66809,51310],{"class":86},[76,66811,32],{"class":51269},[76,66813,53935],{"class":86},[76,66815,32],{"class":51269},[76,66817,51276],{"class":86},[76,66819,66820,66822,66824,66826,66828],{"class":78,"line":1587},[76,66821,51310],{"class":86},[76,66823,32],{"class":51269},[76,66825,53954],{"class":86},[76,66827,32],{"class":51269},[76,66829,51276],{"class":86},[76,66831,66832,66834,66836,66838,66840],{"class":78,"line":1592},[76,66833,51310],{"class":86},[76,66835,32],{"class":51269},[76,66837,53973],{"class":86},[76,66839,32],{"class":51269},[76,66841,51276],{"class":86},[76,66843,66844,66846,66848,66850,66852],{"class":78,"line":1606},[76,66845,51310],{"class":86},[76,66847,32],{"class":51269},[76,66849,53992],{"class":86},[76,66851,32],{"class":51269},[76,66853,51276],{"class":86},[76,66855,66856,66858,66860,66862,66864],{"class":78,"line":1611},[76,66857,51310],{"class":86},[76,66859,32],{"class":51269},[76,66861,54011],{"class":86},[76,66863,32],{"class":51269},[76,66865,51276],{"class":86},[76,66867,66868,66870,66872,66875,66877],{"class":78,"line":1617},[76,66869,51310],{"class":86},[76,66871,21],{"class":51269},[76,66873,66874],{"class":86},">我不需要变色\u003C\u002F",[76,66876,21],{"class":51269},[76,66878,51276],{"class":86},[76,66880,66881,66883,66885],{"class":78,"line":1638},[76,66882,52386],{"class":86},[76,66884,1095],{"class":51269},[76,66886,51276],{"class":86},[76,66888,66889,66891,66893],{"class":78,"line":1643},[76,66890,52113],{"class":86},[76,66892,51782],{"class":51269},[76,66894,51276],{"class":86},[76,66896,66897],{"class":78,"line":1657},[76,66898,66899],{"class":146},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[76,66901,66902,66904,66906,66908,66910,66912,66914,66917],{"class":78,"line":1662},[76,66903,11188],{"class":82},[76,66905,61261],{"class":136},[76,66907,13531],{"class":82},[76,66909,54365],{"class":86},[76,66911,54368],{"class":1927},[76,66913,87],{"class":86},[76,66915,66916],{"class":192},"'ul'",[76,66918,93],{"class":86},[76,66920,66921,66924,66926,66928,66930,66932,66934,66936,66938],{"class":78,"line":1691},[76,66922,66923],{"class":86},"    ul.",[76,66925,57782],{"class":1927},[76,66927,87],{"class":86},[76,66929,57787],{"class":192},[76,66931,12402],{"class":86},[76,66933,54418],{"class":82},[76,66935,1622],{"class":86},[76,66937,162],{"class":5183},[76,66939,12409],{"class":86},[76,66941,66942],{"class":78,"line":1696},[76,66943,66944],{"class":146},"      \u002F\u002F alert(1)\n",[76,66946,66947],{"class":78,"line":1713},[76,66948,66949],{"class":146},"      \u002F\u002F e.target就是我们点击的对象\n",[76,66951,66952],{"class":78,"line":1718},[76,66953,66954],{"class":146},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[76,66956,66957],{"class":78,"line":1723},[76,66958,66959],{"class":146},"      \u002F\u002F e.target.style.color = 'red'\n",[76,66961,66962,66964,66966],{"class":78,"line":1728},[76,66963,58213],{"class":86},[76,66965,58216],{"class":1927},[76,66967,66968],{"class":86},"(e)\n",[76,66970,66971],{"class":78,"line":1742},[76,66972,2365],{"emptyLinePlaceholder":2364},[76,66974,66975,66977,66980],{"class":78,"line":1747},[76,66976,58213],{"class":86},[76,66978,66979],{"class":1927},"dir",[76,66981,66982],{"class":86},"(e.target)\n",[76,66984,66985],{"class":78,"line":2542},[76,66986,2365],{"emptyLinePlaceholder":2364},[76,66988,66989],{"class":78,"line":2556},[76,66990,66991],{"class":146},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[76,66993,66994],{"class":78,"line":2564},[76,66995,66996],{"class":146},"      \u002F\u002F 通过tagName来进行判断\n",[76,66998,66999,67001,67004,67006,67009],{"class":78,"line":2569},[76,67000,54449],{"class":82},[76,67002,67003],{"class":86}," (e.target.tagName ",[76,67005,54455],{"class":82},[76,67007,67008],{"class":192}," 'LI'",[76,67010,12409],{"class":86},[76,67012,67013,67016,67018],{"class":78,"line":2575},[76,67014,67015],{"class":86},"        e.target.style.color ",[76,67017,133],{"class":82},[76,67019,67020],{"class":192}," 'red'\n",[76,67022,67023],{"class":78,"line":2581},[76,67024,52367],{"class":86},[76,67026,67027],{"class":78,"line":2586},[76,67028,33430],{"class":86},[76,67030,67031,67033,67035],{"class":78,"line":7915},[76,67032,52386],{"class":86},[76,67034,51782],{"class":51269},[76,67036,51276],{"class":86},[76,67038,67039,67041,67043],{"class":78,"line":7939},[76,67040,51754],{"class":86},[76,67042,51769],{"class":51269},[76,67044,51276],{"class":86},[76,67046,67047],{"class":78,"line":7944},[76,67048,2365],{"emptyLinePlaceholder":2364},[76,67050,67051,67053,67055],{"class":78,"line":7950},[76,67052,51754],{"class":86},[76,67054,50604],{"class":51269},[76,67056,51276],{"class":86},[21,67058,67059],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[21,67061,67062],{},"if(e.target.ragName==='P') {}",[21,67064,67065],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[21,67067,67068],{},"通过事件委托的方式实现tab栏切换改造：",[21,67070,67071],{},"一定要记住自定义属性！！！！！！",[21,67073,67074],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[21,67076,67077],{},"id是自定义的属性名",[21,67079,67080],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[66,67082,67084],{"className":50602,"code":67083,"language":50604,"meta":71,"style":71},"\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",[73,67085,67086,67096,67110,67114,67122,67136,67156,67176,67188,67196,67202,67212,67222,67226,67230,67236,67248,67260,67272,67288,67292,67296,67302,67314,67326,67338,67348,67358,67362,67366,67374,67386,67396,67408,67412,67416,67424,67434,67444,67454,67458,67462,67472,67486,67498,67502,67506,67518,67528,67544,67554,67558,67562,67576,67586,67596,67600,67604,67610,67624,67628,67632,67640,67650,67654,67658,67667,67677,67681,67689,67697,67701,67709,67723,67737,67749,67757,67796,67828,67860,67892,67924,67932,67940,67954,67988,68022,68056,68090,68124,68132,68140,68148,68153,68158,68177,68182,68202,68210,68215,68228,68249,68262,68266,68271,68276,68289,68309,68337,68341,68345,68349,68357,68365,68369],{"__ignoreMap":71},[76,67087,67088,67090,67092,67094],{"class":78,"line":79},[76,67089,51266],{"class":86},[76,67091,51270],{"class":51269},[76,67093,51273],{"class":1927},[76,67095,51276],{"class":86},[76,67097,67098,67100,67102,67104,67106,67108],{"class":78,"line":96},[76,67099,998],{"class":86},[76,67101,50604],{"class":51269},[76,67103,51285],{"class":1927},[76,67105,133],{"class":86},[76,67107,51290],{"class":192},[76,67109,51276],{"class":86},[76,67111,67112],{"class":78,"line":1143},[76,67113,2365],{"emptyLinePlaceholder":2364},[76,67115,67116,67118,67120],{"class":78,"line":1158},[76,67117,998],{"class":86},[76,67119,51303],{"class":51269},[76,67121,51276],{"class":86},[76,67123,67124,67126,67128,67130,67132,67134],{"class":78,"line":1164},[76,67125,52113],{"class":86},[76,67127,51313],{"class":51269},[76,67129,51316],{"class":1927},[76,67131,133],{"class":86},[76,67133,51321],{"class":192},[76,67135,59096],{"class":86},[76,67137,67138,67140,67142,67144,67146,67148,67150,67152,67154],{"class":78,"line":1178},[76,67139,52113],{"class":86},[76,67141,51313],{"class":51269},[76,67143,51332],{"class":1927},[76,67145,133],{"class":86},[76,67147,51337],{"class":192},[76,67149,51340],{"class":1927},[76,67151,133],{"class":86},[76,67153,51345],{"class":192},[76,67155,59096],{"class":86},[76,67157,67158,67160,67162,67164,67166,67168,67170,67172,67174],{"class":78,"line":1184},[76,67159,52113],{"class":86},[76,67161,51313],{"class":51269},[76,67163,14887],{"class":1927},[76,67165,133],{"class":86},[76,67167,51360],{"class":192},[76,67169,51340],{"class":1927},[76,67171,133],{"class":86},[76,67173,51367],{"class":192},[76,67175,59096],{"class":86},[76,67177,67178,67180,67182,67184,67186],{"class":78,"line":1275},[76,67179,52113],{"class":86},[76,67181,51376],{"class":51269},[76,67183,63594],{"class":86},[76,67185,51376],{"class":51269},[76,67187,51276],{"class":86},[76,67189,67190,67192,67194],{"class":78,"line":1281},[76,67191,52113],{"class":86},[76,67193,5092],{"class":51269},[76,67195,51276],{"class":86},[76,67197,67198,67200],{"class":78,"line":1293},[76,67199,6370],{"class":51269},[76,67201,15539],{"class":86},[76,67203,67204,67206,67208,67210],{"class":78,"line":1576},[76,67205,54675],{"class":136},[76,67207,51406],{"class":86},[76,67209,279],{"class":136},[76,67211,1254],{"class":86},[76,67213,67214,67216,67218,67220],{"class":78,"line":1581},[76,67215,54664],{"class":136},[76,67217,51406],{"class":86},[76,67219,279],{"class":136},[76,67221,1254],{"class":86},[76,67223,67224],{"class":78,"line":1587},[76,67225,2151],{"class":86},[76,67227,67228],{"class":78,"line":1592},[76,67229,2365],{"emptyLinePlaceholder":2364},[76,67231,67232,67234],{"class":78,"line":1606},[76,67233,63645],{"class":1927},[76,67235,15539],{"class":86},[76,67237,67238,67240,67242,67244,67246],{"class":78,"line":1611},[76,67239,54740],{"class":136},[76,67241,51406],{"class":86},[76,67243,63656],{"class":136},[76,67245,51461],{"class":82},[76,67247,1254],{"class":86},[76,67249,67250,67252,67254,67256,67258],{"class":78,"line":1617},[76,67251,54754],{"class":136},[76,67253,51406],{"class":86},[76,67255,63669],{"class":136},[76,67257,51461],{"class":82},[76,67259,1254],{"class":86},[76,67261,67262,67264,67266,67268,67270],{"class":78,"line":1638},[76,67263,54675],{"class":136},[76,67265,51406],{"class":86},[76,67267,788],{"class":136},[76,67269,51461],{"class":82},[76,67271,1254],{"class":86},[76,67273,67274,67276,67278,67280,67282,67284,67286],{"class":78,"line":1643},[76,67275,61946],{"class":136},[76,67277,51406],{"class":86},[76,67279,305],{"class":136},[76,67281,51461],{"class":82},[76,67283,51490],{"class":136},[76,67285,62213],{"class":136},[76,67287,1254],{"class":86},[76,67289,67290],{"class":78,"line":1657},[76,67291,2151],{"class":86},[76,67293,67294],{"class":78,"line":1662},[76,67295,2365],{"emptyLinePlaceholder":2364},[76,67297,67298,67300],{"class":78,"line":1691},[76,67299,63714],{"class":1927},[76,67301,15539],{"class":86},[76,67303,67304,67306,67308,67310,67312],{"class":78,"line":1696},[76,67305,54740],{"class":136},[76,67307,51406],{"class":86},[76,67309,399],{"class":136},[76,67311,416],{"class":82},[76,67313,1254],{"class":86},[76,67315,67316,67318,67320,67322,67324],{"class":78,"line":1713},[76,67317,54754],{"class":136},[76,67319,51406],{"class":86},[76,67321,995],{"class":136},[76,67323,51461],{"class":82},[76,67325,1254],{"class":86},[76,67327,67328,67330,67332,67334,67336],{"class":78,"line":1718},[76,67329,57328],{"class":136},[76,67331,51406],{"class":86},[76,67333,995],{"class":136},[76,67335,51461],{"class":82},[76,67337,1254],{"class":86},[76,67339,67340,67342,67344,67346],{"class":78,"line":1723},[76,67341,54978],{"class":136},[76,67343,51406],{"class":86},[76,67345,51446],{"class":136},[76,67347,1254],{"class":86},[76,67349,67350,67352,67354,67356],{"class":78,"line":1728},[76,67351,54989],{"class":136},[76,67353,51406],{"class":86},[76,67355,51637],{"class":136},[76,67357,1254],{"class":86},[76,67359,67360],{"class":78,"line":1742},[76,67361,2151],{"class":86},[76,67363,67364],{"class":78,"line":1747},[76,67365,2365],{"emptyLinePlaceholder":2364},[76,67367,67368,67370,67372],{"class":78,"line":2542},[76,67369,63714],{"class":1927},[76,67371,63787],{"class":51269},[76,67373,15539],{"class":86},[76,67375,67376,67378,67380,67382,67384],{"class":78,"line":2556},[76,67377,54891],{"class":136},[76,67379,51406],{"class":86},[76,67381,888],{"class":136},[76,67383,51461],{"class":82},[76,67385,1254],{"class":86},[76,67387,67388,67390,67392,67394],{"class":78,"line":2564},[76,67389,62303],{"class":136},[76,67391,51406],{"class":86},[76,67393,63810],{"class":136},[76,67395,1254],{"class":86},[76,67397,67398,67400,67402,67404,67406],{"class":78,"line":2569},[76,67399,61969],{"class":136},[76,67401,51406],{"class":86},[76,67403,788],{"class":136},[76,67405,51461],{"class":82},[76,67407,1254],{"class":86},[76,67409,67410],{"class":78,"line":2575},[76,67411,2151],{"class":86},[76,67413,67414],{"class":78,"line":2581},[76,67415,2365],{"emptyLinePlaceholder":2364},[76,67417,67418,67420,67422],{"class":78,"line":2586},[76,67419,63714],{"class":1927},[76,67421,61261],{"class":51269},[76,67423,15539],{"class":86},[76,67425,67426,67428,67430,67432],{"class":78,"line":7915},[76,67427,54701],{"class":136},[76,67429,51406],{"class":86},[76,67431,54706],{"class":136},[76,67433,1254],{"class":86},[76,67435,67436,67438,67440,67442],{"class":78,"line":7939},[76,67437,54978],{"class":136},[76,67439,51406],{"class":86},[76,67441,51446],{"class":136},[76,67443,1254],{"class":86},[76,67445,67446,67448,67450,67452],{"class":78,"line":7944},[76,67447,54989],{"class":136},[76,67449,51406],{"class":86},[76,67451,51549],{"class":136},[76,67453,1254],{"class":86},[76,67455,67456],{"class":78,"line":7950},[76,67457,2151],{"class":86},[76,67459,67460],{"class":78,"line":7977},[76,67461,2365],{"emptyLinePlaceholder":2364},[76,67463,67464,67466,67468,67470],{"class":78,"line":7982},[76,67465,63714],{"class":1927},[76,67467,61261],{"class":51269},[76,67469,55044],{"class":51269},[76,67471,15539],{"class":86},[76,67473,67474,67476,67478,67480,67482,67484],{"class":78,"line":7988},[76,67475,54675],{"class":136},[76,67477,51406],{"class":86},[76,67479,279],{"class":136},[76,67481,8917],{"class":136},[76,67483,51461],{"class":82},[76,67485,1254],{"class":86},[76,67487,67488,67490,67492,67494,67496],{"class":78,"line":8000},[76,67489,54891],{"class":136},[76,67491,51406],{"class":86},[76,67493,637],{"class":136},[76,67495,51461],{"class":82},[76,67497,1254],{"class":86},[76,67499,67500],{"class":78,"line":8012},[76,67501,2151],{"class":86},[76,67503,67504],{"class":78,"line":8024},[76,67505,2365],{"emptyLinePlaceholder":2364},[76,67507,67508,67510,67512,67514,67516],{"class":78,"line":9683},[76,67509,63714],{"class":1927},[76,67511,61261],{"class":51269},[76,67513,55044],{"class":51269},[76,67515,1362],{"class":51269},[76,67517,15539],{"class":86},[76,67519,67520,67522,67524,67526],{"class":78,"line":9708},[76,67521,63939],{"class":136},[76,67523,51406],{"class":86},[76,67525,54706],{"class":136},[76,67527,1254],{"class":86},[76,67529,67530,67532,67534,67536,67538,67540,67542],{"class":78,"line":9731},[76,67531,62201],{"class":136},[76,67533,51406],{"class":86},[76,67535,165],{"class":136},[76,67537,51461],{"class":82},[76,67539,51490],{"class":136},[76,67541,63960],{"class":136},[76,67543,1254],{"class":86},[76,67545,67546,67548,67550,67552],{"class":78,"line":9755},[76,67547,57385],{"class":136},[76,67549,51406],{"class":86},[76,67551,62338],{"class":136},[76,67553,1254],{"class":86},[76,67555,67556],{"class":78,"line":9760},[76,67557,2151],{"class":86},[76,67559,67560],{"class":78,"line":9765},[76,67561,2365],{"emptyLinePlaceholder":2364},[76,67563,67564,67566,67568,67570,67572,67574],{"class":78,"line":9770},[76,67565,63714],{"class":1927},[76,67567,61261],{"class":51269},[76,67569,55044],{"class":51269},[76,67571,1362],{"class":51269},[76,67573,63993],{"class":1927},[76,67575,15539],{"class":86},[76,67577,67578,67580,67582,67584],{"class":78,"line":9779},[76,67579,61760],{"class":136},[76,67581,51406],{"class":86},[76,67583,64004],{"class":136},[76,67585,1254],{"class":86},[76,67587,67588,67590,67592,67594],{"class":78,"line":9784},[76,67589,57385],{"class":136},[76,67591,51406],{"class":86},[76,67593,64004],{"class":136},[76,67595,1254],{"class":86},[76,67597,67598],{"class":78,"line":9790},[76,67599,2151],{"class":86},[76,67601,67602],{"class":78,"line":9811},[76,67603,2365],{"emptyLinePlaceholder":2364},[76,67605,67606,67608],{"class":78,"line":9817},[76,67607,64029],{"class":1927},[76,67609,15539],{"class":86},[76,67611,67612,67614,67616,67618,67620,67622],{"class":78,"line":9831},[76,67613,54664],{"class":136},[76,67615,51406],{"class":86},[76,67617,279],{"class":136},[76,67619,64042],{"class":136},[76,67621,51461],{"class":82},[76,67623,1254],{"class":86},[76,67625,67626],{"class":78,"line":9837},[76,67627,2151],{"class":86},[76,67629,67630],{"class":78,"line":9864},[76,67631,2365],{"emptyLinePlaceholder":2364},[76,67633,67634,67636,67638],{"class":78,"line":9873},[76,67635,64029],{"class":1927},[76,67637,62143],{"class":1927},[76,67639,15539],{"class":86},[76,67641,67642,67644,67646,67648],{"class":78,"line":9879},[76,67643,54978],{"class":136},[76,67645,51406],{"class":86},[76,67647,54706],{"class":136},[76,67649,1254],{"class":86},[76,67651,67652],{"class":78,"line":9887},[76,67653,2151],{"class":86},[76,67655,67656],{"class":78,"line":9892},[76,67657,2365],{"emptyLinePlaceholder":2364},[76,67659,67660,67662,67665],{"class":78,"line":16571},[76,67661,64029],{"class":1927},[76,67663,67664],{"class":1927}," .active",[76,67666,15539],{"class":86},[76,67668,67669,67671,67673,67675],{"class":78,"line":16577},[76,67670,54978],{"class":136},[76,67672,51406],{"class":86},[76,67674,60838],{"class":136},[76,67676,1254],{"class":86},[76,67678,67679],{"class":78,"line":16600},[76,67680,2151],{"class":86},[76,67682,67683,67685,67687],{"class":78,"line":16606},[76,67684,52386],{"class":86},[76,67686,5092],{"class":51269},[76,67688,51276],{"class":86},[76,67690,67691,67693,67695],{"class":78,"line":16629},[76,67692,51754],{"class":86},[76,67694,51303],{"class":51269},[76,67696,51276],{"class":86},[76,67698,67699],{"class":78,"line":16643},[76,67700,2365],{"emptyLinePlaceholder":2364},[76,67702,67703,67705,67707],{"class":78,"line":16663},[76,67704,998],{"class":86},[76,67706,51769],{"class":51269},[76,67708,51276],{"class":86},[76,67710,67711,67713,67715,67717,67719,67721],{"class":78,"line":16669},[76,67712,52113],{"class":86},[76,67714,51580],{"class":51269},[76,67716,53455],{"class":1927},[76,67718,133],{"class":86},[76,67720,64144],{"class":192},[76,67722,51276],{"class":86},[76,67724,67725,67727,67729,67731,67733,67735],{"class":78,"line":16680},[76,67726,51310],{"class":86},[76,67728,51580],{"class":51269},[76,67730,53455],{"class":1927},[76,67732,133],{"class":86},[76,67734,64159],{"class":192},[76,67736,51276],{"class":86},[76,67738,67739,67741,67743,67745,67747],{"class":78,"line":16703},[76,67740,55203],{"class":86},[76,67742,46],{"class":51269},[76,67744,64170],{"class":86},[76,67746,46],{"class":51269},[76,67748,51276],{"class":86},[76,67750,67751,67753,67755],{"class":78,"line":16725},[76,67752,55203],{"class":86},[76,67754,1095],{"class":51269},[76,67756,51276],{"class":86},[76,67758,67759,67761,67763,67765,67767,67769,67771,67773,67775,67777,67779,67781,67783,67786,67788,67790,67792,67794],{"class":78,"line":16730},[76,67760,55271],{"class":86},[76,67762,32],{"class":51269},[76,67764,61021],{"class":86},[76,67766,326],{"class":51269},[76,67768,53455],{"class":1927},[76,67770,133],{"class":86},[76,67772,59675],{"class":192},[76,67774,61026],{"class":1927},[76,67776,133],{"class":86},[76,67778,64205],{"class":192},[76,67780,53920],{"class":1927},[76,67782,133],{"class":86},[76,67784,67785],{"class":192},"\"0\"",[76,67787,64208],{"class":86},[76,67789,326],{"class":51269},[76,67791,55283],{"class":86},[76,67793,32],{"class":51269},[76,67795,51276],{"class":86},[76,67797,67798,67800,67802,67804,67806,67808,67810,67812,67814,67816,67818,67820,67822,67824,67826],{"class":78,"line":16736},[76,67799,55271],{"class":86},[76,67801,32],{"class":51269},[76,67803,61021],{"class":86},[76,67805,326],{"class":51269},[76,67807,61026],{"class":1927},[76,67809,133],{"class":86},[76,67811,64205],{"class":192},[76,67813,53920],{"class":1927},[76,67815,133],{"class":86},[76,67817,3643],{"class":192},[76,67819,64235],{"class":86},[76,67821,326],{"class":51269},[76,67823,55283],{"class":86},[76,67825,32],{"class":51269},[76,67827,51276],{"class":86},[76,67829,67830,67832,67834,67836,67838,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858],{"class":78,"line":16750},[76,67831,55271],{"class":86},[76,67833,32],{"class":51269},[76,67835,61021],{"class":86},[76,67837,326],{"class":51269},[76,67839,61026],{"class":1927},[76,67841,133],{"class":86},[76,67843,64205],{"class":192},[76,67845,53920],{"class":1927},[76,67847,133],{"class":86},[76,67849,3666],{"class":192},[76,67851,64262],{"class":86},[76,67853,326],{"class":51269},[76,67855,55283],{"class":86},[76,67857,32],{"class":51269},[76,67859,51276],{"class":86},[76,67861,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890],{"class":78,"line":16763},[76,67863,55271],{"class":86},[76,67865,32],{"class":51269},[76,67867,61021],{"class":86},[76,67869,326],{"class":51269},[76,67871,61026],{"class":1927},[76,67873,133],{"class":86},[76,67875,64205],{"class":192},[76,67877,53920],{"class":1927},[76,67879,133],{"class":86},[76,67881,3679],{"class":192},[76,67883,64289],{"class":86},[76,67885,326],{"class":51269},[76,67887,55283],{"class":86},[76,67889,32],{"class":51269},[76,67891,51276],{"class":86},[76,67893,67894,67896,67898,67900,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922],{"class":78,"line":16768},[76,67895,55271],{"class":86},[76,67897,32],{"class":51269},[76,67899,61021],{"class":86},[76,67901,326],{"class":51269},[76,67903,61026],{"class":1927},[76,67905,133],{"class":86},[76,67907,64205],{"class":192},[76,67909,53920],{"class":1927},[76,67911,133],{"class":86},[76,67913,3692],{"class":192},[76,67915,64316],{"class":86},[76,67917,326],{"class":51269},[76,67919,55283],{"class":86},[76,67921,32],{"class":51269},[76,67923,51276],{"class":86},[76,67925,67926,67928,67930],{"class":78,"line":16782},[76,67927,55376],{"class":86},[76,67929,1095],{"class":51269},[76,67931,51276],{"class":86},[76,67933,67934,67936,67938],{"class":78,"line":16787},[76,67935,51745],{"class":86},[76,67937,51580],{"class":51269},[76,67939,51276],{"class":86},[76,67941,67942,67944,67946,67948,67950,67952],{"class":78,"line":16793},[76,67943,51310],{"class":86},[76,67945,51580],{"class":51269},[76,67947,53455],{"class":1927},[76,67949,133],{"class":86},[76,67951,64353],{"class":192},[76,67953,51276],{"class":86},[76,67955,67956,67958,67960,67962,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986],{"class":78,"line":16798},[76,67957,55203],{"class":86},[76,67959,51580],{"class":51269},[76,67961,53455],{"class":1927},[76,67963,133],{"class":86},[76,67965,64368],{"class":192},[76,67967,61021],{"class":86},[76,67969,1426],{"class":51269},[76,67971,55208],{"class":1927},[76,67973,133],{"class":86},[76,67975,64379],{"class":192},[76,67977,55216],{"class":1927},[76,67979,133],{"class":86},[76,67981,7619],{"class":192},[76,67983,64388],{"class":86},[76,67985,51580],{"class":51269},[76,67987,51276],{"class":86},[76,67989,67990,67992,67994,67996,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020],{"class":78,"line":16812},[76,67991,55203],{"class":86},[76,67993,51580],{"class":51269},[76,67995,53455],{"class":1927},[76,67997,133],{"class":86},[76,67999,62592],{"class":192},[76,68001,61021],{"class":86},[76,68003,1426],{"class":51269},[76,68005,55208],{"class":1927},[76,68007,133],{"class":86},[76,68009,64415],{"class":192},[76,68011,55216],{"class":1927},[76,68013,133],{"class":86},[76,68015,7619],{"class":192},[76,68017,64388],{"class":86},[76,68019,51580],{"class":51269},[76,68021,51276],{"class":86},[76,68023,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054],{"class":78,"line":16817},[76,68025,55203],{"class":86},[76,68027,51580],{"class":51269},[76,68029,53455],{"class":1927},[76,68031,133],{"class":86},[76,68033,62592],{"class":192},[76,68035,61021],{"class":86},[76,68037,1426],{"class":51269},[76,68039,55208],{"class":1927},[76,68041,133],{"class":86},[76,68043,64450],{"class":192},[76,68045,55216],{"class":1927},[76,68047,133],{"class":86},[76,68049,7619],{"class":192},[76,68051,64388],{"class":86},[76,68053,51580],{"class":51269},[76,68055,51276],{"class":86},[76,68057,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088],{"class":78,"line":16822},[76,68059,55203],{"class":86},[76,68061,51580],{"class":51269},[76,68063,53455],{"class":1927},[76,68065,133],{"class":86},[76,68067,62592],{"class":192},[76,68069,61021],{"class":86},[76,68071,1426],{"class":51269},[76,68073,55208],{"class":1927},[76,68075,133],{"class":86},[76,68077,64485],{"class":192},[76,68079,55216],{"class":1927},[76,68081,133],{"class":86},[76,68083,7619],{"class":192},[76,68085,64388],{"class":86},[76,68087,51580],{"class":51269},[76,68089,51276],{"class":86},[76,68091,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122],{"class":78,"line":16836},[76,68093,55203],{"class":86},[76,68095,51580],{"class":51269},[76,68097,53455],{"class":1927},[76,68099,133],{"class":86},[76,68101,62592],{"class":192},[76,68103,61021],{"class":86},[76,68105,1426],{"class":51269},[76,68107,55208],{"class":1927},[76,68109,133],{"class":86},[76,68111,64520],{"class":192},[76,68113,55216],{"class":1927},[76,68115,133],{"class":86},[76,68117,7619],{"class":192},[76,68119,64388],{"class":86},[76,68121,51580],{"class":51269},[76,68123,51276],{"class":86},[76,68125,68126,68128,68130],{"class":78,"line":16848},[76,68127,51745],{"class":86},[76,68129,51580],{"class":51269},[76,68131,51276],{"class":86},[76,68133,68134,68136,68138],{"class":78,"line":16853},[76,68135,52386],{"class":86},[76,68137,51580],{"class":51269},[76,68139,51276],{"class":86},[76,68141,68142,68144,68146],{"class":78,"line":16866},[76,68143,52113],{"class":86},[76,68145,51782],{"class":51269},[76,68147,51276],{"class":86},[76,68149,68150],{"class":78,"line":16871},[76,68151,68152],{"class":146},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[76,68154,68155],{"class":78,"line":16876},[76,68156,68157],{"class":146},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[76,68159,68160,68162,68164,68166,68168,68170,68172,68175],{"class":78,"line":16881},[76,68161,11188],{"class":82},[76,68163,61261],{"class":136},[76,68165,13531],{"class":82},[76,68167,54365],{"class":86},[76,68169,54368],{"class":1927},[76,68171,87],{"class":86},[76,68173,68174],{"class":192},"'.tab-nav ul'",[76,68176,93],{"class":86},[76,68178,68179],{"class":78,"line":16894},[76,68180,68181],{"class":146},"    \u002F\u002F 2.添加事件\n",[76,68183,68184,68186,68188,68190,68192,68194,68196,68198,68200],{"class":78,"line":16899},[76,68185,66923],{"class":86},[76,68187,57782],{"class":1927},[76,68189,87],{"class":86},[76,68191,57787],{"class":192},[76,68193,12402],{"class":86},[76,68195,54418],{"class":82},[76,68197,1622],{"class":86},[76,68199,162],{"class":5183},[76,68201,12409],{"class":86},[76,68203,68204,68206,68208],{"class":78,"line":32602},[76,68205,58213],{"class":86},[76,68207,66979],{"class":1927},[76,68209,66982],{"class":86},[76,68211,68212],{"class":78,"line":32608},[76,68213,68214],{"class":146},"      \u002F\u002Fe.targer是我们点击的对象\n",[76,68216,68217,68219,68221,68223,68226],{"class":78,"line":32614},[76,68218,54449],{"class":82},[76,68220,67003],{"class":86},[76,68222,54455],{"class":82},[76,68224,68225],{"class":192}," 'A'",[76,68227,12409],{"class":86},[76,68229,68230,68232,68234,68236,68239,68241,68243,68245,68247],{"class":78,"line":32620},[76,68231,51894],{"class":86},[76,68233,54368],{"class":1927},[76,68235,87],{"class":86},[76,68237,68238],{"class":192},"'.active'",[76,68240,56972],{"class":86},[76,68242,56975],{"class":1927},[76,68244,87],{"class":86},[76,68246,64683],{"class":192},[76,68248,93],{"class":86},[76,68250,68251,68254,68256,68258,68260],{"class":78,"line":32626},[76,68252,68253],{"class":86},"        e.target.classList.",[76,68255,5301],{"class":1927},[76,68257,87],{"class":86},[76,68259,64683],{"class":192},[76,68261,93],{"class":86},[76,68263,68264],{"class":78,"line":32637},[76,68265,2365],{"emptyLinePlaceholder":2364},[76,68267,68268],{"class":78,"line":32643},[76,68269,68270],{"class":146},"        \u002F\u002F 下面大盒子模块\n",[76,68272,68273],{"class":78,"line":32663},[76,68274,68275],{"class":146},"        \u002F\u002F console.log(e.target.dataset.id)\n",[76,68277,68278,68280,68282,68284,68286],{"class":78,"line":32669},[76,68279,61239],{"class":82},[76,68281,2997],{"class":136},[76,68283,13531],{"class":82},[76,68285,45535],{"class":82},[76,68287,68288],{"class":86},"e.target.dataset.id\n",[76,68290,68291,68293,68295,68297,68299,68301,68303,68305,68307],{"class":78,"line":32680},[76,68292,51894],{"class":86},[76,68294,54368],{"class":1927},[76,68296,87],{"class":86},[76,68298,64731],{"class":192},[76,68300,56972],{"class":86},[76,68302,56975],{"class":1927},[76,68304,87],{"class":86},[76,68306,64683],{"class":192},[76,68308,93],{"class":86},[76,68310,68311,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335],{"class":78,"line":32686},[76,68312,51894],{"class":86},[76,68314,54368],{"class":1927},[76,68316,87],{"class":86},[76,68318,64757],{"class":192},[76,68320,529],{"class":86},[76,68322,45535],{"class":82},[76,68324,25087],{"class":136},[76,68326,57001],{"class":192},[76,68328,56972],{"class":86},[76,68330,5301],{"class":1927},[76,68332,87],{"class":86},[76,68334,64683],{"class":192},[76,68336,93],{"class":86},[76,68338,68339],{"class":78,"line":32692},[76,68340,2365],{"emptyLinePlaceholder":2364},[76,68342,68343],{"class":78,"line":32698},[76,68344,52367],{"class":86},[76,68346,68347],{"class":78,"line":32704},[76,68348,33430],{"class":86},[76,68350,68351,68353,68355],{"class":78,"line":32710},[76,68352,52386],{"class":86},[76,68354,51782],{"class":51269},[76,68356,51276],{"class":86},[76,68358,68359,68361,68363],{"class":78,"line":32716},[76,68360,51754],{"class":86},[76,68362,51769],{"class":51269},[76,68364,51276],{"class":86},[76,68366,68367],{"class":78,"line":32722},[76,68368,2365],{"emptyLinePlaceholder":2364},[76,68370,68371,68373,68375],{"class":78,"line":32742},[76,68372,51754],{"class":86},[76,68374,50604],{"class":51269},[76,68376,51276],{"class":86},[46,68378,68380],{"id":68379},"_333-页面加载事件","3.3.3 页面加载事件",[29,68382,68383],{},[32,68384,68385],{},"load",[21,68387,68388],{},[1426,68389],{"alt":71,"src":68390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[21,68392,68393],{},"window代表整个窗口，比document还要大",[21,68395,68396],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[21,68398,68399],{},"img.addEventListener('load', function () {",[21,68401,68402],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[21,68404,52433],{},[29,68406,68407],{"start":96},[32,68408,68409],{},"DOMContentLoaded",[21,68411,68412],{},[1426,68413],{"alt":71,"src":68414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[21,68416,68417],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[46,68419,68421],{"id":68420},"_334-元素滚动事件","3.3.4 元素滚动事件",[21,68423,68424],{},[1426,68425],{"alt":71,"src":68426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[21,68428,68429],{},[1426,68430],{"alt":71,"src":68431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[21,68433,68434],{},[1426,68435],{"alt":71,"src":68436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[21,68438,68439],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[21,68441,68442],{},"获得的是数字型数据，不带单位",[21,68444,68445],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[21,68447,68448],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[21,68450,68451],{},"它是通过document.documentElement来获取",[21,68453,68454],{},[1426,68455],{"alt":71,"src":68456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[21,68458,68459],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[46,68461,68463],{"id":68462},"_335-页面缩放事件","3.3.5 页面缩放事件",[21,68465,68466],{},[1426,68467],{"alt":71,"src":68468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[21,68470,68471],{},[1426,68472],{"alt":71,"src":68473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[46,68475,68477],{"id":68476},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[21,68479,68480],{},[1426,68481],{"alt":71,"src":68482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[21,68484,68485],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[21,68487,68488],{},[1426,68489],{"alt":71,"src":68490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[21,68492,68493],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[21,68495,68496],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[21,68498,68499],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[21,68501,68502],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[21,68504,68505],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[21,68507,68508],{},[1426,68509],{"alt":71,"src":68510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[21,68512,68513],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[21,68515,68516],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[21,68518,68519],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[21,68521,68522],{},"e.pageX-box.getBoundingClientRect()",[46,68524,68526],{"id":68525},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[21,68528,68529],{},[1426,68530],{"alt":71,"src":68531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[21,68533,68534],{},"这个是相对于视口来说的，它是个方法，不是属性值",[46,68536,68538],{"id":68537},"_338-总结","3.3.8 总结",[21,68540,68541],{},[1426,68542],{"alt":71,"src":68543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[21,68545,68546],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[21,68548,68549],{},"修改盒子的宽高只能通过width和height来实现",[46,68551,68553],{"id":68552},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[66,68555,68557],{"className":50602,"code":68556,"language":50604,"meta":71,"style":71},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[73,68558,68559,68564,68569,68574,68579],{"__ignoreMap":71},[76,68560,68561],{"class":78,"line":79},[76,68562,68563],{"class":86},"\u002F* 页面滑动 *\u002F\n",[76,68565,68566],{"class":78,"line":96},[76,68567,68568],{"class":86},"html {\n",[76,68570,68571],{"class":78,"line":1143},[76,68572,68573],{"class":86},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[76,68575,68576],{"class":78,"line":1158},[76,68577,68578],{"class":86},"  scroll-behavior: smooth;\n",[76,68580,68581],{"class":78,"line":1164},[76,68582,1529],{"class":86},[21,68584,68585],{},"默认是auto",[46,68587,68589],{"id":68588},"_3310-日期对象","3.3.10 日期对象",[21965,68591,68593],{"id":68592},"_33101-实例化","3.3.10.1 实例化",[21,68595,68596],{},[1426,68597],{"alt":71,"src":68598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21965,68600,68602],{"id":68601},"_33102-时期对象方法","3.3.10.2 时期对象方法",[21,68604,68605],{},[1426,68606],{"alt":71,"src":68607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[21,68609,68610],{},"月份+1",[21,68612,68613],{},"老外认为第一天为0，星期天",[21,68615,68616],{},"方法使用的时候必须要跟括号",[21,68618,68619],{},"快速获得日期",[21,68621,68622],{},"\u002F\u002F 得到年月日",[21,68624,68625],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[21,68627,68628],{},"\u002F\u002F 得到当地日期",[21,68630,68631],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[21,68633,68634],{},"\u002F\u002F 得到当地时间",[21,68636,68637],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[21,68639,68640],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[21,68642,68643],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51782,68645,68646],{},"\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",[21,68648,68649],{},"学会去封装函数！",[21965,68651,68653],{"id":68652},"_33103-时间戳","3.3.10.3 时间戳",[21,68655,68656],{},[1426,68657],{"alt":71,"src":68658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[21,68660,68661],{},[1426,68662],{"alt":71,"src":68663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[21,68665,68666],{},"三种方法记住一个就可以",[46,68668,68670],{"id":68669},"_3311-节点操作","3.3.11 节点操作",[21965,68672,68674],{"id":68673},"_33111-dom节点","3.3.11.1 DOM节点",[21,68676,68677],{},[1426,68678],{"alt":71,"src":68679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[21,68681,68682],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21965,68684,68686],{"id":68685},"_33112-查找节点","3.3.11.2 查找节点",[21,68688,68689],{},"前边的document.querySelector()是获取的元素",[21,68691,68692],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[21,68694,68695],{},[1426,68696],{"alt":71,"src":68697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[29,68699,68700],{},[32,68701,68702],{},"父节点",[21,68704,68705],{},[1426,68706],{"alt":71,"src":68707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[29,68709,68710],{"start":96},[32,68711,68712],{},"子节点",[21,68714,68715],{},[1426,68716],{"alt":71,"src":68717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[21,68719,68720],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[21,68722,68723],{},"children获得的是伪数组，是亲儿子",[29,68725,68726],{"start":1143},[32,68727,68728],{},"兄弟节点",[21,68730,68731],{},[1426,68732],{"alt":71,"src":68733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21965,68735,68737],{"id":68736},"_33113-增加节点","3.3.11.3 增加节点",[21,68739,68740],{},[1426,68741],{"alt":71,"src":68742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[21,68744,68745],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[21,68747,68748],{},[1426,68749],{"alt":71,"src":68750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[21,68752,68753],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[21,68755,68756],{},"下面是写法的部分展示，就按照下边的格式来写",[21,68758,68759],{},"例：",[51782,68761,68762],{},"\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",[21,68764,68765],{},[1426,68766],{"alt":71,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[21,68769,68770],{},"false只克隆标签，里边的内容不会克隆过来",[66,68772,68774],{"className":50602,"code":68773,"language":50604,"meta":71,"style":71},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[73,68775,68776],{"__ignoreMap":71},[76,68777,68778],{"class":78,"line":79},[76,68779,68773],{"class":86},[21965,68781,68783],{"id":68782},"_33114-删除节点","3.3.11.4 删除节点",[21,68785,68786],{},[1426,68787],{"alt":71,"src":68788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[21,68790,68791],{},"父亲删儿子",[21,68793,68794],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[46,68796,68798],{"id":68797},"_3312-m端事件","3.3.12 M端事件",[21,68800,68801],{},"M端就是移动端",[21,68803,68804],{},[1426,68805],{"alt":71,"src":68806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[46,68808,68810],{"id":68809},"_3313-插件","3.3.13 插件",[21,68812,68813],{},"要熟悉官网！！！",[21,68815,68816],{},[326,68817,68818],{"href":68818,"rel":68819},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23833],[21,68821,68822],{},[326,68823,68824],{"href":68824,"rel":68825},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23833],[46,68827,68829],{"id":68828},"_3314-学生信息表","3.3.14 学生信息表",[29,68831,68832,68835,68838,68841,68844,68847,68850,68853],{},[32,68833,68834],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[32,68836,68837],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[32,68839,68840],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[32,68842,68843],{},"用好表单元素自带的属性，value,name等",[32,68845,68846],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[32,68848,68849],{},"不要忘记事件对象",[32,68851,68852],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[32,68854,68855],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[21,68857,68858],{},"结构：",[66,68860,68862],{"className":50602,"code":68861,"language":50604,"meta":71,"style":71},"\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",[73,68863,68864,68874,68888,68892,68900,68914,68934,68955,68968,68992,69000,69004,69012,69025,69046,69074,69102,69107,69129,69149,69168,69176,69204,69226,69246,69266,69286,69306,69326,69334,69354,69362,69366,69379,69387,69395,69403,69416,69429,69442,69455,69468,69481,69494,69502,69510,69518,69523,69528,69533,69538,69543,69548,69553,69558,69563,69568,69573,69578,69583,69591,69599,69607,69611,69631,69650,69670,69690,69710,69730,69734,69739,69759,69764,69774,69779,69784,69804,69826,69831,69841,69845,69849,69854,69859,69888,69902,69917,69921,69925,69929,69934,69945,69958,69963,69968,69973,69978,69983,69987,69992,69997,70006,70011,70016,70028,70033,70040,70044,70049,70059,70064,70074,70079,70107,70128,70138,70158,70176,70193,70210,70227,70244,70248,70258,70263,70268,70273,70284,70288,70292,70296,70301,70306,70327,70339,70344,70349,70354,70368,70373,70380,70384,70388,70396,70400,70408,70412],{"__ignoreMap":71},[76,68865,68866,68868,68870,68872],{"class":78,"line":79},[76,68867,51266],{"class":86},[76,68869,51270],{"class":51269},[76,68871,51273],{"class":1927},[76,68873,51276],{"class":86},[76,68875,68876,68878,68880,68882,68884,68886],{"class":78,"line":96},[76,68877,998],{"class":86},[76,68879,50604],{"class":51269},[76,68881,51285],{"class":1927},[76,68883,133],{"class":86},[76,68885,51290],{"class":192},[76,68887,51276],{"class":86},[76,68889,68890],{"class":78,"line":1143},[76,68891,2365],{"emptyLinePlaceholder":2364},[76,68893,68894,68896,68898],{"class":78,"line":1158},[76,68895,998],{"class":86},[76,68897,51303],{"class":51269},[76,68899,51276],{"class":86},[76,68901,68902,68904,68906,68908,68910,68912],{"class":78,"line":1164},[76,68903,52113],{"class":86},[76,68905,51313],{"class":51269},[76,68907,51316],{"class":1927},[76,68909,133],{"class":86},[76,68911,51321],{"class":192},[76,68913,59096],{"class":86},[76,68915,68916,68918,68920,68922,68924,68926,68928,68930,68932],{"class":78,"line":1178},[76,68917,52113],{"class":86},[76,68919,51313],{"class":51269},[76,68921,14887],{"class":1927},[76,68923,133],{"class":86},[76,68925,51360],{"class":192},[76,68927,51340],{"class":1927},[76,68929,133],{"class":86},[76,68931,51367],{"class":192},[76,68933,59096],{"class":86},[76,68935,68936,68938,68940,68942,68944,68946,68948,68950,68953],{"class":78,"line":1184},[76,68937,52113],{"class":86},[76,68939,51313],{"class":51269},[76,68941,51332],{"class":1927},[76,68943,133],{"class":86},[76,68945,51337],{"class":192},[76,68947,51340],{"class":1927},[76,68949,133],{"class":86},[76,68951,68952],{"class":192},"\"ie=edge\"",[76,68954,59096],{"class":86},[76,68956,68957,68959,68961,68964,68966],{"class":78,"line":1275},[76,68958,52113],{"class":86},[76,68960,51376],{"class":51269},[76,68962,68963],{"class":86},">学生信息管理\u003C\u002F",[76,68965,51376],{"class":51269},[76,68967,51276],{"class":86},[76,68969,68970,68972,68975,68978,68980,68983,68985,68987,68990],{"class":78,"line":1281},[76,68971,52113],{"class":86},[76,68973,68974],{"class":51269},"link",[76,68976,68977],{"class":1927}," rel",[76,68979,133],{"class":86},[76,68981,68982],{"class":192},"\"stylesheet\"",[76,68984,61026],{"class":1927},[76,68986,133],{"class":86},[76,68988,68989],{"class":192},"\"css\u002Findex.css\"",[76,68991,59096],{"class":86},[76,68993,68994,68996,68998],{"class":78,"line":1293},[76,68995,51754],{"class":86},[76,68997,51303],{"class":51269},[76,68999,51276],{"class":86},[76,69001,69002],{"class":78,"line":1576},[76,69003,2365],{"emptyLinePlaceholder":2364},[76,69005,69006,69008,69010],{"class":78,"line":1581},[76,69007,998],{"class":86},[76,69009,51769],{"class":51269},[76,69011,51276],{"class":86},[76,69013,69014,69016,69018,69021,69023],{"class":78,"line":1587},[76,69015,52113],{"class":86},[76,69017,12],{"class":51269},[76,69019,69020],{"class":86},">新增学员\u003C\u002F",[76,69022,12],{"class":51269},[76,69024,51276],{"class":86},[76,69026,69027,69029,69031,69033,69035,69037,69040,69042,69044],{"class":78,"line":1592},[76,69028,52113],{"class":86},[76,69030,66594],{"class":51269},[76,69032,53455],{"class":1927},[76,69034,133],{"class":86},[76,69036,62633],{"class":192},[76,69038,69039],{"class":1927}," autocomplete",[76,69041,133],{"class":86},[76,69043,31745],{"class":192},[76,69045,51276],{"class":86},[76,69047,69048,69051,69053,69055,69057,69059,69061,69063,69066,69068,69070,69072],{"class":78,"line":1606},[76,69049,69050],{"class":86},"    姓名：\u003C",[76,69052,53790],{"class":51269},[76,69054,53793],{"class":1927},[76,69056,133],{"class":86},[76,69058,62668],{"class":192},[76,69060,53455],{"class":1927},[76,69062,133],{"class":86},[76,69064,69065],{"class":192},"\"uname\"",[76,69067,14887],{"class":1927},[76,69069,133],{"class":86},[76,69071,69065],{"class":192},[76,69073,59096],{"class":86},[76,69075,69076,69079,69081,69083,69085,69087,69089,69091,69094,69096,69098,69100],{"class":78,"line":1611},[76,69077,69078],{"class":86},"    年龄：\u003C",[76,69080,53790],{"class":51269},[76,69082,53793],{"class":1927},[76,69084,133],{"class":86},[76,69086,62668],{"class":192},[76,69088,53455],{"class":1927},[76,69090,133],{"class":86},[76,69092,69093],{"class":192},"\"age\"",[76,69095,14887],{"class":1927},[76,69097,133],{"class":86},[76,69099,69093],{"class":192},[76,69101,59096],{"class":86},[76,69103,69104],{"class":78,"line":1617},[76,69105,69106],{"class":86},"    性别:\n",[76,69108,69109,69111,69114,69116,69118,69121,69123,69125,69127],{"class":78,"line":1638},[76,69110,51310],{"class":86},[76,69112,69113],{"class":51269},"select",[76,69115,14887],{"class":1927},[76,69117,133],{"class":86},[76,69119,69120],{"class":192},"\"gender\"",[76,69122,53455],{"class":1927},[76,69124,133],{"class":86},[76,69126,69120],{"class":192},[76,69128,51276],{"class":86},[76,69130,69131,69133,69136,69138,69140,69142,69145,69147],{"class":78,"line":1643},[76,69132,55203],{"class":86},[76,69134,69135],{"class":51269},"option",[76,69137,66620],{"class":1927},[76,69139,133],{"class":86},[76,69141,9928],{"class":192},[76,69143,69144],{"class":86},">男\u003C\u002F",[76,69146,69135],{"class":51269},[76,69148,51276],{"class":86},[76,69150,69151,69153,69155,69157,69159,69161,69164,69166],{"class":78,"line":1657},[76,69152,55203],{"class":86},[76,69154,69135],{"class":51269},[76,69156,66620],{"class":1927},[76,69158,133],{"class":86},[76,69160,9997],{"class":192},[76,69162,69163],{"class":86},">女\u003C\u002F",[76,69165,69135],{"class":51269},[76,69167,51276],{"class":86},[76,69169,69170,69172,69174],{"class":78,"line":1662},[76,69171,51745],{"class":86},[76,69173,69113],{"class":51269},[76,69175,51276],{"class":86},[76,69177,69178,69181,69183,69185,69187,69189,69191,69193,69196,69198,69200,69202],{"class":78,"line":1691},[76,69179,69180],{"class":86},"    薪资：\u003C",[76,69182,53790],{"class":51269},[76,69184,53793],{"class":1927},[76,69186,133],{"class":86},[76,69188,62668],{"class":192},[76,69190,53455],{"class":1927},[76,69192,133],{"class":86},[76,69194,69195],{"class":192},"\"salary\"",[76,69197,14887],{"class":1927},[76,69199,133],{"class":86},[76,69201,69195],{"class":192},[76,69203,59096],{"class":86},[76,69205,69206,69209,69211,69213,69215,69218,69220,69222,69224],{"class":78,"line":1696},[76,69207,69208],{"class":86},"    就业城市：\u003C",[76,69210,69113],{"class":51269},[76,69212,14887],{"class":1927},[76,69214,133],{"class":86},[76,69216,69217],{"class":192},"\"city\"",[76,69219,53455],{"class":1927},[76,69221,133],{"class":86},[76,69223,69217],{"class":192},[76,69225,51276],{"class":86},[76,69227,69228,69230,69232,69234,69236,69239,69242,69244],{"class":78,"line":1713},[76,69229,55203],{"class":86},[76,69231,69135],{"class":51269},[76,69233,66620],{"class":1927},[76,69235,133],{"class":86},[76,69237,69238],{"class":192},"\"北京\"",[76,69240,69241],{"class":86},">北京\u003C\u002F",[76,69243,69135],{"class":51269},[76,69245,51276],{"class":86},[76,69247,69248,69250,69252,69254,69256,69259,69262,69264],{"class":78,"line":1718},[76,69249,55203],{"class":86},[76,69251,69135],{"class":51269},[76,69253,66620],{"class":1927},[76,69255,133],{"class":86},[76,69257,69258],{"class":192},"\"上海\"",[76,69260,69261],{"class":86},">上海\u003C\u002F",[76,69263,69135],{"class":51269},[76,69265,51276],{"class":86},[76,69267,69268,69270,69272,69274,69276,69279,69282,69284],{"class":78,"line":1723},[76,69269,55203],{"class":86},[76,69271,69135],{"class":51269},[76,69273,66620],{"class":1927},[76,69275,133],{"class":86},[76,69277,69278],{"class":192},"\"广州\"",[76,69280,69281],{"class":86},">广州\u003C\u002F",[76,69283,69135],{"class":51269},[76,69285,51276],{"class":86},[76,69287,69288,69290,69292,69294,69296,69299,69302,69304],{"class":78,"line":1728},[76,69289,55203],{"class":86},[76,69291,69135],{"class":51269},[76,69293,66620],{"class":1927},[76,69295,133],{"class":86},[76,69297,69298],{"class":192},"\"深圳\"",[76,69300,69301],{"class":86},">深圳\u003C\u002F",[76,69303,69135],{"class":51269},[76,69305,51276],{"class":86},[76,69307,69308,69310,69312,69314,69316,69319,69322,69324],{"class":78,"line":1742},[76,69309,55203],{"class":86},[76,69311,69135],{"class":51269},[76,69313,66620],{"class":1927},[76,69315,133],{"class":86},[76,69317,69318],{"class":192},"\"曹县\"",[76,69320,69321],{"class":86},">曹县\u003C\u002F",[76,69323,69135],{"class":51269},[76,69325,51276],{"class":86},[76,69327,69328,69330,69332],{"class":78,"line":1747},[76,69329,51745],{"class":86},[76,69331,69113],{"class":51269},[76,69333,51276],{"class":86},[76,69335,69336,69338,69340,69342,69344,69347,69350,69352],{"class":78,"line":2542},[76,69337,51310],{"class":86},[76,69339,53856],{"class":51269},[76,69341,53455],{"class":1927},[76,69343,133],{"class":86},[76,69345,69346],{"class":192},"\"add\"",[76,69348,69349],{"class":86},">录入\u003C\u002F",[76,69351,53856],{"class":51269},[76,69353,51276],{"class":86},[76,69355,69356,69358,69360],{"class":78,"line":2556},[76,69357,52386],{"class":86},[76,69359,66594],{"class":51269},[76,69361,51276],{"class":86},[76,69363,69364],{"class":78,"line":2564},[76,69365,2365],{"emptyLinePlaceholder":2364},[76,69367,69368,69370,69372,69375,69377],{"class":78,"line":2569},[76,69369,52113],{"class":86},[76,69371,12],{"class":51269},[76,69373,69374],{"class":86},">就业榜\u003C\u002F",[76,69376,12],{"class":51269},[76,69378,51276],{"class":86},[76,69380,69381,69383,69385],{"class":78,"line":2575},[76,69382,52113],{"class":86},[76,69384,225],{"class":51269},[76,69386,51276],{"class":86},[76,69388,69389,69391,69393],{"class":78,"line":2581},[76,69390,51310],{"class":86},[76,69392,228],{"class":51269},[76,69394,51276],{"class":86},[76,69396,69397,69399,69401],{"class":78,"line":2586},[76,69398,55203],{"class":86},[76,69400,231],{"class":51269},[76,69402,51276],{"class":86},[76,69404,69405,69407,69409,69412,69414],{"class":78,"line":7915},[76,69406,55271],{"class":86},[76,69408,234],{"class":51269},[76,69410,69411],{"class":86},">序号\u003C\u002F",[76,69413,234],{"class":51269},[76,69415,51276],{"class":86},[76,69417,69418,69420,69422,69425,69427],{"class":78,"line":7939},[76,69419,55271],{"class":86},[76,69421,234],{"class":51269},[76,69423,69424],{"class":86},">姓名\u003C\u002F",[76,69426,234],{"class":51269},[76,69428,51276],{"class":86},[76,69430,69431,69433,69435,69438,69440],{"class":78,"line":7944},[76,69432,55271],{"class":86},[76,69434,234],{"class":51269},[76,69436,69437],{"class":86},">年龄\u003C\u002F",[76,69439,234],{"class":51269},[76,69441,51276],{"class":86},[76,69443,69444,69446,69448,69451,69453],{"class":78,"line":7950},[76,69445,55271],{"class":86},[76,69447,234],{"class":51269},[76,69449,69450],{"class":86},">性别\u003C\u002F",[76,69452,234],{"class":51269},[76,69454,51276],{"class":86},[76,69456,69457,69459,69461,69464,69466],{"class":78,"line":7977},[76,69458,55271],{"class":86},[76,69460,234],{"class":51269},[76,69462,69463],{"class":86},">薪资\u003C\u002F",[76,69465,234],{"class":51269},[76,69467,51276],{"class":86},[76,69469,69470,69472,69474,69477,69479],{"class":78,"line":7982},[76,69471,55271],{"class":86},[76,69473,234],{"class":51269},[76,69475,69476],{"class":86},">就业城市\u003C\u002F",[76,69478,234],{"class":51269},[76,69480,51276],{"class":86},[76,69482,69483,69485,69487,69490,69492],{"class":78,"line":7988},[76,69484,55271],{"class":86},[76,69486,234],{"class":51269},[76,69488,69489],{"class":86},">操作\u003C\u002F",[76,69491,234],{"class":51269},[76,69493,51276],{"class":86},[76,69495,69496,69498,69500],{"class":78,"line":8000},[76,69497,55376],{"class":86},[76,69499,231],{"class":51269},[76,69501,51276],{"class":86},[76,69503,69504,69506,69508],{"class":78,"line":8012},[76,69505,51745],{"class":86},[76,69507,228],{"class":51269},[76,69509,51276],{"class":86},[76,69511,69512,69514,69516],{"class":78,"line":8024},[76,69513,51310],{"class":86},[76,69515,272],{"class":51269},[76,69517,51276],{"class":86},[76,69519,69520],{"class":78,"line":9683},[76,69521,69522],{"class":146},"      \u003C!-- \n",[76,69524,69525],{"class":78,"line":9708},[76,69526,69527],{"class":146},"        \u003Ctr>\n",[76,69529,69530],{"class":78,"line":9731},[76,69531,69532],{"class":146},"          \u003Ctd>1001\u003C\u002Ftd>\n",[76,69534,69535],{"class":78,"line":9755},[76,69536,69537],{"class":146},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[76,69539,69540],{"class":78,"line":9760},[76,69541,69542],{"class":146},"          \u003Ctd>19\u003C\u002Ftd>\n",[76,69544,69545],{"class":78,"line":9765},[76,69546,69547],{"class":146},"          \u003Ctd>男\u003C\u002Ftd>\n",[76,69549,69550],{"class":78,"line":9770},[76,69551,69552],{"class":146},"          \u003Ctd>15000\u003C\u002Ftd>\n",[76,69554,69555],{"class":78,"line":9779},[76,69556,69557],{"class":146},"          \u003Ctd>上海\u003C\u002Ftd>\n",[76,69559,69560],{"class":78,"line":9784},[76,69561,69562],{"class":146},"          \u003Ctd>\n",[76,69564,69565],{"class":78,"line":9790},[76,69566,69567],{"class":146},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[76,69569,69570],{"class":78,"line":9811},[76,69571,69572],{"class":146},"          \u003C\u002Ftd>\n",[76,69574,69575],{"class":78,"line":9817},[76,69576,69577],{"class":146},"        \u003C\u002Ftr> \n",[76,69579,69580],{"class":78,"line":9831},[76,69581,69582],{"class":146},"        -->\n",[76,69584,69585,69587,69589],{"class":78,"line":9837},[76,69586,51745],{"class":86},[76,69588,272],{"class":51269},[76,69590,51276],{"class":86},[76,69592,69593,69595,69597],{"class":78,"line":9864},[76,69594,52386],{"class":86},[76,69596,225],{"class":51269},[76,69598,51276],{"class":86},[76,69600,69601,69603,69605],{"class":78,"line":9873},[76,69602,52113],{"class":86},[76,69604,51782],{"class":51269},[76,69606,51276],{"class":86},[76,69608,69609],{"class":78,"line":9879},[76,69610,59927],{"class":146},[76,69612,69613,69615,69618,69620,69622,69624,69626,69629],{"class":78,"line":9887},[76,69614,11188],{"class":82},[76,69616,69617],{"class":136}," uname",[76,69619,13531],{"class":82},[76,69621,54365],{"class":86},[76,69623,54368],{"class":1927},[76,69625,87],{"class":86},[76,69627,69628],{"class":192},"'.uname'",[76,69630,93],{"class":86},[76,69632,69633,69635,69637,69639,69641,69643,69645,69648],{"class":78,"line":9892},[76,69634,11188],{"class":82},[76,69636,15656],{"class":136},[76,69638,13531],{"class":82},[76,69640,54365],{"class":86},[76,69642,54368],{"class":1927},[76,69644,87],{"class":86},[76,69646,69647],{"class":192},"'.age'",[76,69649,93],{"class":86},[76,69651,69652,69654,69657,69659,69661,69663,69665,69668],{"class":78,"line":16571},[76,69653,11188],{"class":82},[76,69655,69656],{"class":136}," gender",[76,69658,13531],{"class":82},[76,69660,54365],{"class":86},[76,69662,54368],{"class":1927},[76,69664,87],{"class":86},[76,69666,69667],{"class":192},"'.gender'",[76,69669,93],{"class":86},[76,69671,69672,69674,69677,69679,69681,69683,69685,69688],{"class":78,"line":16577},[76,69673,11188],{"class":82},[76,69675,69676],{"class":136}," salary",[76,69678,13531],{"class":82},[76,69680,54365],{"class":86},[76,69682,54368],{"class":1927},[76,69684,87],{"class":86},[76,69686,69687],{"class":192},"'.salary'",[76,69689,93],{"class":86},[76,69691,69692,69694,69697,69699,69701,69703,69705,69708],{"class":78,"line":16600},[76,69693,11188],{"class":82},[76,69695,69696],{"class":136}," city",[76,69698,13531],{"class":82},[76,69700,54365],{"class":86},[76,69702,54368],{"class":1927},[76,69704,87],{"class":86},[76,69706,69707],{"class":192},"'.city'",[76,69709,93],{"class":86},[76,69711,69712,69714,69717,69719,69721,69723,69725,69728],{"class":78,"line":16606},[76,69713,11188],{"class":82},[76,69715,69716],{"class":136}," tbody",[76,69718,13531],{"class":82},[76,69720,54365],{"class":86},[76,69722,54368],{"class":1927},[76,69724,87],{"class":86},[76,69726,69727],{"class":192},"'tbody'",[76,69729,93],{"class":86},[76,69731,69732],{"class":78,"line":16629},[76,69733,2365],{"emptyLinePlaceholder":2364},[76,69735,69736],{"class":78,"line":16643},[76,69737,69738],{"class":146},"    \u002F\u002F 获取所有带有name属性的元素\n",[76,69740,69741,69743,69746,69748,69750,69752,69754,69757],{"class":78,"line":16663},[76,69742,11188],{"class":82},[76,69744,69745],{"class":136}," items",[76,69747,13531],{"class":82},[76,69749,54365],{"class":86},[76,69751,55650],{"class":1927},[76,69753,87],{"class":86},[76,69755,69756],{"class":192},"'[name]'",[76,69758,93],{"class":86},[76,69760,69761],{"class":78,"line":16669},[76,69762,69763],{"class":146},"    \u002F\u002F 声明一个空的数组\n",[76,69765,69766,69768,69770,69772],{"class":78,"line":16680},[76,69767,11188],{"class":82},[76,69769,57664],{"class":136},[76,69771,13531],{"class":82},[76,69773,51807],{"class":86},[76,69775,69776],{"class":78,"line":16703},[76,69777,69778],{"class":146},"    \u002F\u002F 1.录入模块\n",[76,69780,69781],{"class":78,"line":16725},[76,69782,69783],{"class":146},"    \u002F\u002F 1.1这是一个表单提交事件\n",[76,69785,69786,69788,69791,69793,69795,69797,69799,69802],{"class":78,"line":16730},[76,69787,11188],{"class":82},[76,69789,69790],{"class":136}," info",[76,69792,13531],{"class":82},[76,69794,54365],{"class":86},[76,69796,54368],{"class":1927},[76,69798,87],{"class":86},[76,69800,69801],{"class":192},"'.info'",[76,69803,93],{"class":86},[76,69805,69806,69809,69811,69813,69816,69818,69820,69822,69824],{"class":78,"line":16736},[76,69807,69808],{"class":86},"    info.",[76,69810,57782],{"class":1927},[76,69812,87],{"class":86},[76,69814,69815],{"class":192},"'submit'",[76,69817,12402],{"class":86},[76,69819,54418],{"class":82},[76,69821,1622],{"class":86},[76,69823,162],{"class":5183},[76,69825,12409],{"class":86},[76,69827,69828],{"class":78,"line":16750},[76,69829,69830],{"class":146},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[76,69832,69833,69836,69839],{"class":78,"line":16763},[76,69834,69835],{"class":86},"      e.",[76,69837,69838],{"class":1927},"preventDefault",[76,69840,1940],{"class":86},[76,69842,69843],{"class":78,"line":16768},[76,69844,59981],{"class":146},[76,69846,69847],{"class":78,"line":16782},[76,69848,2365],{"emptyLinePlaceholder":2364},[76,69850,69851],{"class":78,"line":16787},[76,69852,69853],{"class":146},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[76,69855,69856],{"class":78,"line":16793},[76,69857,69858],{"class":146},"      \u002F\u002F 先遍历循环\n",[76,69860,69861,69863,69865,69867,69869,69871,69873,69875,69877,69880,69882,69884,69886],{"class":78,"line":16798},[76,69862,52253],{"class":82},[76,69864,1622],{"class":86},[76,69866,51816],{"class":82},[76,69868,9405],{"class":86},[76,69870,133],{"class":82},[76,69872,4058],{"class":136},[76,69874,9412],{"class":86},[76,69876,998],{"class":82},[76,69878,69879],{"class":86}," items.",[76,69881,51937],{"class":136},[76,69883,3179],{"class":86},[76,69885,2256],{"class":82},[76,69887,12409],{"class":86},[76,69889,69890,69892,69895,69897,69900],{"class":78,"line":16812},[76,69891,2462],{"class":82},[76,69893,69894],{"class":86}," (items[i].value ",[76,69896,54455],{"class":82},[76,69898,69899],{"class":192}," ''",[76,69901,12409],{"class":86},[76,69903,69904,69907,69910,69912,69915],{"class":78,"line":16817},[76,69905,69906],{"class":82},"          return",[76,69908,69909],{"class":1927}," alert",[76,69911,87],{"class":86},[76,69913,69914],{"class":192},"'输入内容不能为空'",[76,69916,93],{"class":86},[76,69918,69919],{"class":78,"line":16822},[76,69920,2494],{"class":86},[76,69922,69923],{"class":78,"line":16836},[76,69924,52367],{"class":86},[76,69926,69927],{"class":78,"line":16848},[76,69928,2365],{"emptyLinePlaceholder":2364},[76,69930,69931],{"class":78,"line":16853},[76,69932,69933],{"class":146},"      \u002F\u002F 创建新的对象\n",[76,69935,69936,69938,69941,69943],{"class":78,"line":16866},[76,69937,58197],{"class":82},[76,69939,69940],{"class":136}," obj",[76,69942,13531],{"class":82},[76,69944,15539],{"class":86},[76,69946,69947,69950,69952,69954,69956],{"class":78,"line":16871},[76,69948,69949],{"class":86},"        stuID: arr.",[76,69951,51937],{"class":136},[76,69953,45535],{"class":82},[76,69955,25087],{"class":136},[76,69957,31435],{"class":86},[76,69959,69960],{"class":78,"line":16876},[76,69961,69962],{"class":86},"        uname: uname.value,\n",[76,69964,69965],{"class":78,"line":16881},[76,69966,69967],{"class":86},"        age: age.value,\n",[76,69969,69970],{"class":78,"line":16894},[76,69971,69972],{"class":86},"        gender: gender.value,\n",[76,69974,69975],{"class":78,"line":16899},[76,69976,69977],{"class":86},"        salary: salary.value,\n",[76,69979,69980],{"class":78,"line":32602},[76,69981,69982],{"class":86},"        city: city.value\n",[76,69984,69985],{"class":78,"line":32608},[76,69986,52367],{"class":86},[76,69988,69989],{"class":78,"line":32614},[76,69990,69991],{"class":146},"      \u002F\u002F console.log(obj);\n",[76,69993,69994],{"class":78,"line":32620},[76,69995,69996],{"class":146},"      \u002F\u002F 追加到数组里面\n",[76,69998,69999,70001,70003],{"class":78,"line":32626},[76,70000,57976],{"class":86},[76,70002,51853],{"class":1927},[76,70004,70005],{"class":86},"(obj)\n",[76,70007,70008],{"class":78,"line":32637},[76,70009,70010],{"class":146},"      \u002F\u002F console.log(arr);\n",[76,70012,70013],{"class":78,"line":32643},[76,70014,70015],{"class":146},"      \u002F\u002F 清空表单  reset重置表单\n",[76,70017,70018,70021,70023,70026],{"class":78,"line":32663},[76,70019,70020],{"class":136},"      this",[76,70022,646],{"class":86},[76,70024,70025],{"class":1927},"reset",[76,70027,1940],{"class":86},[76,70029,70030],{"class":78,"line":32669},[76,70031,70032],{"class":146},"      \u002F\u002F 调用渲染函数\n",[76,70034,70035,70038],{"class":78,"line":32680},[76,70036,70037],{"class":1927},"      render",[76,70039,1940],{"class":86},[76,70041,70042],{"class":78,"line":32686},[76,70043,33430],{"class":86},[76,70045,70046],{"class":78,"line":32692},[76,70047,70048],{"class":146},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[76,70050,70051,70054,70057],{"class":78,"line":32698},[76,70052,70053],{"class":82},"    function",[76,70055,70056],{"class":1927}," render",[76,70058,10820],{"class":86},[76,70060,70061],{"class":78,"line":32704},[76,70062,70063],{"class":146},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[76,70065,70066,70069,70071],{"class":78,"line":32710},[76,70067,70068],{"class":86},"      tbody.innerHTML ",[76,70070,133],{"class":82},[76,70072,70073],{"class":192}," ''\n",[76,70075,70076],{"class":78,"line":32716},[76,70077,70078],{"class":146},"      \u002F\u002F 遍历数组\n",[76,70080,70081,70083,70085,70087,70089,70091,70093,70095,70097,70099,70101,70103,70105],{"class":78,"line":32722},[76,70082,52253],{"class":82},[76,70084,1622],{"class":86},[76,70086,51816],{"class":82},[76,70088,9405],{"class":86},[76,70090,133],{"class":82},[76,70092,4058],{"class":136},[76,70094,9412],{"class":86},[76,70096,998],{"class":82},[76,70098,51934],{"class":86},[76,70100,51937],{"class":136},[76,70102,3179],{"class":86},[76,70104,2256],{"class":82},[76,70106,12409],{"class":86},[76,70108,70109,70111,70114,70116,70118,70121,70123,70126],{"class":78,"line":32742},[76,70110,61239],{"class":82},[76,70112,70113],{"class":136}," tr",[76,70115,13531],{"class":82},[76,70117,54365],{"class":86},[76,70119,70120],{"class":1927},"createElement",[76,70122,87],{"class":86},[76,70124,70125],{"class":192},"'tr'",[76,70127,93],{"class":86},[76,70129,70130,70133,70135],{"class":78,"line":32748},[76,70131,70132],{"class":86},"        tr.innerHTML ",[76,70134,133],{"class":82},[76,70136,70137],{"class":192}," `\n",[76,70139,70140,70143,70145,70147,70149,70152,70155],{"class":78,"line":32764},[76,70141,70142],{"class":192},"        \u003Ctd>${",[76,70144,3845],{"class":86},[76,70146,978],{"class":192},[76,70148,529],{"class":86},[76,70150,70151],{"class":192},"].",[76,70153,70154],{"class":86},"stuID",[76,70156,70157],{"class":192},"}\u003C\u002Ftd>\n",[76,70159,70160,70163,70165,70167,70169,70171,70174],{"class":78,"line":32770},[76,70161,70162],{"class":192},"          \u003Ctd>${",[76,70164,3845],{"class":86},[76,70166,978],{"class":192},[76,70168,529],{"class":86},[76,70170,70151],{"class":192},[76,70172,70173],{"class":86},"uname",[76,70175,70157],{"class":192},[76,70177,70178,70180,70182,70184,70186,70188,70191],{"class":78,"line":32784},[76,70179,70162],{"class":192},[76,70181,3845],{"class":86},[76,70183,978],{"class":192},[76,70185,529],{"class":86},[76,70187,70151],{"class":192},[76,70189,70190],{"class":86},"age",[76,70192,70157],{"class":192},[76,70194,70195,70197,70199,70201,70203,70205,70208],{"class":78,"line":32790},[76,70196,70162],{"class":192},[76,70198,3845],{"class":86},[76,70200,978],{"class":192},[76,70202,529],{"class":86},[76,70204,70151],{"class":192},[76,70206,70207],{"class":86},"gender",[76,70209,70157],{"class":192},[76,70211,70212,70214,70216,70218,70220,70222,70225],{"class":78,"line":32805},[76,70213,70162],{"class":192},[76,70215,3845],{"class":86},[76,70217,978],{"class":192},[76,70219,529],{"class":86},[76,70221,70151],{"class":192},[76,70223,70224],{"class":86},"salary",[76,70226,70157],{"class":192},[76,70228,70229,70231,70233,70235,70237,70239,70242],{"class":78,"line":32811},[76,70230,70162],{"class":192},[76,70232,3845],{"class":86},[76,70234,978],{"class":192},[76,70236,529],{"class":86},[76,70238,70151],{"class":192},[76,70240,70241],{"class":86},"city",[76,70243,70157],{"class":192},[76,70245,70246],{"class":78,"line":32820},[76,70247,69562],{"class":192},[76,70249,70250,70253,70255],{"class":78,"line":32826},[76,70251,70252],{"class":192},"            \u003Ca href=\"javascript:\" data-id=${",[76,70254,529],{"class":86},[76,70256,70257],{"class":192},"}>删除\u003C\u002Fa>\n",[76,70259,70260],{"class":78,"line":32835},[76,70261,70262],{"class":192},"          \u003C\u002Ftd> \n",[76,70264,70265],{"class":78,"line":32841},[76,70266,70267],{"class":192},"          `\n",[76,70269,70270],{"class":78,"line":32847},[76,70271,70272],{"class":146},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[76,70274,70275,70278,70281],{"class":78,"line":32856},[76,70276,70277],{"class":86},"        tbody.",[76,70279,70280],{"class":1927},"appendChild",[76,70282,70283],{"class":86},"(tr)\n",[76,70285,70286],{"class":78,"line":32862},[76,70287,52367],{"class":86},[76,70289,70290],{"class":78,"line":32873},[76,70291,2151],{"class":86},[76,70293,70294],{"class":78,"line":32879},[76,70295,2365],{"emptyLinePlaceholder":2364},[76,70297,70298],{"class":78,"line":32898},[76,70299,70300],{"class":146},"    \u002F\u002F 3.删除委托\n",[76,70302,70303],{"class":78,"line":32904},[76,70304,70305],{"class":146},"    \u002F\u002F 3.1 事件委托 tbody\n",[76,70307,70308,70311,70313,70315,70317,70319,70321,70323,70325],{"class":78,"line":32915},[76,70309,70310],{"class":86},"    tbody.",[76,70312,57782],{"class":1927},[76,70314,87],{"class":86},[76,70316,57787],{"class":192},[76,70318,12402],{"class":86},[76,70320,54418],{"class":82},[76,70322,1622],{"class":86},[76,70324,162],{"class":5183},[76,70326,12409],{"class":86},[76,70328,70329,70331,70333,70335,70337],{"class":78,"line":32921},[76,70330,54449],{"class":82},[76,70332,67003],{"class":86},[76,70334,54455],{"class":82},[76,70336,68225],{"class":192},[76,70338,12409],{"class":86},[76,70340,70341],{"class":78,"line":32941},[76,70342,70343],{"class":146},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[76,70345,70346],{"class":78,"line":32957},[76,70347,70348],{"class":146},"        \u002F\u002F console.log(e.target.dataset.id);\n",[76,70350,70351],{"class":78,"line":32963},[76,70352,70353],{"class":146},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[76,70355,70356,70359,70361,70364,70366],{"class":78,"line":32977},[76,70357,70358],{"class":86},"        arr.",[76,70360,57979],{"class":1927},[76,70362,70363],{"class":86},"(e.target.dataset.id, ",[76,70365,305],{"class":136},[76,70367,93],{"class":86},[76,70369,70370],{"class":78,"line":32983},[76,70371,70372],{"class":146},"        \u002F\u002F 重新渲染一次\n",[76,70374,70375,70378],{"class":78,"line":32989},[76,70376,70377],{"class":1927},"        render",[76,70379,1940],{"class":86},[76,70381,70382],{"class":78,"line":33000},[76,70383,52367],{"class":86},[76,70385,70386],{"class":78,"line":33006},[76,70387,33430],{"class":86},[76,70389,70390,70392,70394],{"class":78,"line":33012},[76,70391,52386],{"class":86},[76,70393,51782],{"class":51269},[76,70395,51276],{"class":86},[76,70397,70398],{"class":78,"line":33022},[76,70399,2365],{"emptyLinePlaceholder":2364},[76,70401,70402,70404,70406],{"class":78,"line":33028},[76,70403,51754],{"class":86},[76,70405,51769],{"class":51269},[76,70407,51276],{"class":86},[76,70409,70410],{"class":78,"line":33039},[76,70411,2365],{"emptyLinePlaceholder":2364},[76,70413,70414,70416,70418],{"class":78,"line":33045},[76,70415,51754],{"class":86},[76,70417,50604],{"class":51269},[76,70419,51276],{"class":86},[21,70421,70422],{},"样式：",[66,70424,70428],{"className":70425,"code":70426,"language":70427,"meta":71,"style":71},"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",[73,70429,70430,70435,70445,70454,70458,70462,70467,70477,70482,70486,70491,70501,70506,70515,70519,70523,70528,70533,70543,70553,70558,70562,70567,70576,70586,70591,70601,70611,70615,70620,70628,70632,70637,70642,70647,70655,70664,70668,70673,70682,70686,70691,70700,70704,70709,70718,70727,70735,70739,70744,70753,70763,70772,70782,70788,70797,70807,70817,70821,70826,70835,70843,70853,70861,70870,70879,70889,70897,70901,70906,70915],{"__ignoreMap":71},[76,70431,70432],{"class":78,"line":79},[76,70433,70434],{"class":86},"* {\n",[76,70436,70437,70440,70442],{"class":78,"line":96},[76,70438,70439],{"class":51269},"  margin",[76,70441,51406],{"class":86},[76,70443,70444],{"class":192},"0;\n",[76,70446,70447,70450,70452],{"class":78,"line":1143},[76,70448,70449],{"class":192},"  padding",[76,70451,51406],{"class":86},[76,70453,70444],{"class":192},[76,70455,70456],{"class":78,"line":1158},[76,70457,1529],{"class":86},[76,70459,70460],{"class":78,"line":1164},[76,70461,2365],{"emptyLinePlaceholder":2364},[76,70463,70464],{"class":78,"line":1178},[76,70465,70466],{"class":192},"a {\n",[76,70468,70469,70472,70474],{"class":78,"line":1184},[76,70470,70471],{"class":51269},"  text-decoration",[76,70473,51406],{"class":86},[76,70475,70476],{"class":192},"none;\n",[76,70478,70479],{"class":78,"line":1275},[76,70480,70481],{"class":192},"  color:#721c24;\n",[76,70483,70484],{"class":78,"line":1281},[76,70485,1529],{"class":86},[76,70487,70488],{"class":78,"line":1293},[76,70489,70490],{"class":192},"h1 {\n",[76,70492,70493,70496,70498],{"class":78,"line":1576},[76,70494,70495],{"class":51269},"  text-align",[76,70497,51406],{"class":86},[76,70499,70500],{"class":192},"center;\n",[76,70502,70503],{"class":78,"line":1581},[76,70504,70505],{"class":192},"  color:#333;\n",[76,70507,70508,70510,70512],{"class":78,"line":1587},[76,70509,70439],{"class":51269},[76,70511,51406],{"class":86},[76,70513,70514],{"class":192},"20px 0;\n",[76,70516,70517],{"class":78,"line":1592},[76,70518,2639],{"class":86},[76,70520,70521],{"class":78,"line":1606},[76,70522,1529],{"class":86},[76,70524,70525],{"class":78,"line":1611},[76,70526,70527],{"class":192},"table {\n",[76,70529,70530],{"class":78,"line":1617},[76,70531,70532],{"class":192},"  margin:0 auto;\n",[76,70534,70535,70538,70540],{"class":78,"line":1638},[76,70536,70537],{"class":51269},"  width",[76,70539,51406],{"class":86},[76,70541,70542],{"class":192},"800px;\n",[76,70544,70545,70548,70550],{"class":78,"line":1643},[76,70546,70547],{"class":51269},"  border-collapse",[76,70549,51406],{"class":86},[76,70551,70552],{"class":192},"collapse;\n",[76,70554,70555],{"class":78,"line":1657},[76,70556,70557],{"class":192},"  color:#004085;\n",[76,70559,70560],{"class":78,"line":1662},[76,70561,1529],{"class":86},[76,70563,70564],{"class":78,"line":1691},[76,70565,70566],{"class":192},"th {\n",[76,70568,70569,70571,70573],{"class":78,"line":1696},[76,70570,70449],{"class":51269},[76,70572,51406],{"class":86},[76,70574,70575],{"class":192},"10px;\n",[76,70577,70578,70581,70583],{"class":78,"line":1713},[76,70579,70580],{"class":51269},"  background",[76,70582,51406],{"class":86},[76,70584,70585],{"class":146},"#cfe5ff;\n",[76,70587,70588],{"class":78,"line":1718},[76,70589,70590],{"class":86},"  \n",[76,70592,70593,70596,70598],{"class":78,"line":1723},[76,70594,70595],{"class":51269},"  font-size",[76,70597,51406],{"class":86},[76,70599,70600],{"class":192},"20px;\n",[76,70602,70603,70606,70608],{"class":78,"line":1728},[76,70604,70605],{"class":51269},"  font-weight",[76,70607,51406],{"class":86},[76,70609,70610],{"class":192},"400;\n",[76,70612,70613],{"class":78,"line":1742},[76,70614,1529],{"class":86},[76,70616,70617],{"class":78,"line":1747},[76,70618,70619],{"class":192},"td,th {\n",[76,70621,70622,70625],{"class":78,"line":2542},[76,70623,70624],{"class":192},"  border:1px solid",[76,70626,70627],{"class":146}," #b8daff;\n",[76,70629,70630],{"class":78,"line":2556},[76,70631,1529],{"class":86},[76,70633,70634],{"class":78,"line":2564},[76,70635,70636],{"class":192},"td {\n",[76,70638,70639],{"class":78,"line":2569},[76,70640,70641],{"class":192},"  padding:10px;\n",[76,70643,70644],{"class":78,"line":2575},[76,70645,70646],{"class":192},"  color:#666;\n",[76,70648,70649,70651,70653],{"class":78,"line":2581},[76,70650,70495],{"class":51269},[76,70652,51406],{"class":86},[76,70654,70500],{"class":192},[76,70656,70657,70659,70661],{"class":78,"line":2586},[76,70658,70595],{"class":51269},[76,70660,51406],{"class":86},[76,70662,70663],{"class":192},"16px;\n",[76,70665,70666],{"class":78,"line":7915},[76,70667,1529],{"class":86},[76,70669,70670],{"class":78,"line":7939},[76,70671,70672],{"class":192},"tbody tr {\n",[76,70674,70675,70677,70679],{"class":78,"line":7944},[76,70676,70580],{"class":51269},[76,70678,51406],{"class":86},[76,70680,70681],{"class":146},"#fff;\n",[76,70683,70684],{"class":78,"line":7950},[76,70685,1529],{"class":86},[76,70687,70688],{"class":78,"line":7977},[76,70689,70690],{"class":192},"tbody tr:hover {\n",[76,70692,70693,70695,70697],{"class":78,"line":7982},[76,70694,70580],{"class":51269},[76,70696,51406],{"class":86},[76,70698,70699],{"class":146},"#e1ecf8;\n",[76,70701,70702],{"class":78,"line":7988},[76,70703,1529],{"class":86},[76,70705,70706],{"class":78,"line":8000},[76,70707,70708],{"class":192},".info {\n",[76,70710,70711,70713,70715],{"class":78,"line":8012},[76,70712,70537],{"class":51269},[76,70714,51406],{"class":86},[76,70716,70717],{"class":192},"900px;\n",[76,70719,70720,70722,70724],{"class":78,"line":8024},[76,70721,70439],{"class":51269},[76,70723,51406],{"class":86},[76,70725,70726],{"class":192},"50px auto;\n",[76,70728,70729,70731,70733],{"class":78,"line":9683},[76,70730,70495],{"class":51269},[76,70732,51406],{"class":86},[76,70734,70500],{"class":192},[76,70736,70737],{"class":78,"line":9708},[76,70738,1529],{"class":86},[76,70740,70741],{"class":78,"line":9731},[76,70742,70743],{"class":192},".info  input, .info select {\n",[76,70745,70746,70748,70750],{"class":78,"line":9755},[76,70747,70537],{"class":51269},[76,70749,51406],{"class":86},[76,70751,70752],{"class":192},"80px;\n",[76,70754,70755,70758,70760],{"class":78,"line":9760},[76,70756,70757],{"class":51269},"  height",[76,70759,51406],{"class":86},[76,70761,70762],{"class":192},"27px;\n",[76,70764,70765,70768,70770],{"class":78,"line":9765},[76,70766,70767],{"class":51269},"  outline",[76,70769,51406],{"class":86},[76,70771,70476],{"class":192},[76,70773,70774,70777,70779],{"class":78,"line":9770},[76,70775,70776],{"class":51269},"  border-radius",[76,70778,51406],{"class":86},[76,70780,70781],{"class":192},"5px;\n",[76,70783,70784,70786],{"class":78,"line":9779},[76,70785,70624],{"class":192},[76,70787,70627],{"class":146},[76,70789,70790,70793,70795],{"class":78,"line":9784},[76,70791,70792],{"class":51269},"  padding-left",[76,70794,51406],{"class":86},[76,70796,70781],{"class":192},[76,70798,70799,70802,70804],{"class":78,"line":9790},[76,70800,70801],{"class":51269},"  box-sizing",[76,70803,51406],{"class":86},[76,70805,70806],{"class":192},"border-box;\n",[76,70808,70809,70812,70814],{"class":78,"line":9811},[76,70810,70811],{"class":51269},"  margin-right",[76,70813,51406],{"class":86},[76,70815,70816],{"class":192},"15px;\n",[76,70818,70819],{"class":78,"line":9817},[76,70820,1529],{"class":86},[76,70822,70823],{"class":78,"line":9831},[76,70824,70825],{"class":192},".info button {\n",[76,70827,70828,70830,70832],{"class":78,"line":9837},[76,70829,70537],{"class":51269},[76,70831,51406],{"class":86},[76,70833,70834],{"class":192},"60px;\n",[76,70836,70837,70839,70841],{"class":78,"line":9864},[76,70838,70757],{"class":51269},[76,70840,51406],{"class":86},[76,70842,70762],{"class":192},[76,70844,70845,70848,70850],{"class":78,"line":9873},[76,70846,70847],{"class":51269},"  background-color",[76,70849,51406],{"class":86},[76,70851,70852],{"class":146},"#004085;\n",[76,70854,70855,70857,70859],{"class":78,"line":9879},[76,70856,70767],{"class":51269},[76,70858,51406],{"class":86},[76,70860,70476],{"class":192},[76,70862,70863,70866,70868],{"class":78,"line":9887},[76,70864,70865],{"class":51269},"  border",[76,70867,51406],{"class":86},[76,70869,70444],{"class":192},[76,70871,70872,70875,70877],{"class":78,"line":9892},[76,70873,70874],{"class":51269},"  color",[76,70876,51406],{"class":86},[76,70878,70681],{"class":146},[76,70880,70881,70884,70886],{"class":78,"line":16571},[76,70882,70883],{"class":51269},"  cursor",[76,70885,51406],{"class":86},[76,70887,70888],{"class":192},"pointer;\n",[76,70890,70891,70893,70895],{"class":78,"line":16577},[76,70892,70776],{"class":51269},[76,70894,51406],{"class":86},[76,70896,70781],{"class":192},[76,70898,70899],{"class":78,"line":16600},[76,70900,1529],{"class":86},[76,70902,70903],{"class":78,"line":16606},[76,70904,70905],{"class":192},".info .age {\n",[76,70907,70908,70910,70912],{"class":78,"line":16629},[76,70909,70537],{"class":51269},[76,70911,51406],{"class":86},[76,70913,70914],{"class":192},"50px;\n",[76,70916,70917],{"class":78,"line":16643},[76,70918,1529],{"class":86},[21,70920,70921],{},"思路：",[21,70923,70924],{},[1426,70925],{"alt":71,"src":70926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[21,70928,70929],{},[1426,70930],{"alt":71,"src":70931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[21,70933,70934],{},[1426,70935],{"alt":71,"src":70936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[46,70938,70940],{"id":70939},"_3315-重绘回流","3.3.15 重绘回流",[21,70942,70943],{},[1426,70944],{"alt":71,"src":70945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[21,70947,70948],{},[1426,70949],{"alt":71,"src":70950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[21,70952,70953],{},[1426,70954],{"alt":71,"src":70955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[16,70957,70959],{"id":70958},"_34-bom","3.4 BOM",[21,70961,70962],{},[1426,70963],{"alt":71,"src":70964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[21,70966,70967],{},"平时写的document省略了window而已，实际上是window.document",[21,70969,70970],{},"函数也是这样，调用的时候实际为window.fn()",[21,70972,70973],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[21,70975,70976],{},"window大部分情况下可以省略",[46,70978,70980],{"id":70979},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[21,70982,70983],{},"只执行一次",[21,70985,70986],{},[1426,70987],{"alt":71,"src":70988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[21,70990,70991],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[21,70993,70994],{},[1426,70995],{"alt":71,"src":70996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[46,70998,71000],{"id":70999},"_342-js执行机制","3.4.2 JS执行机制",[21,71002,71003],{},[1426,71004],{"alt":71,"src":71005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[21,71007,71008],{},"两个的结果都是1111 3333 2222",[21,71010,71011],{},[1426,71012],{"alt":71,"src":71013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[21,71015,71016],{},[1426,71017],{"alt":71,"src":71018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[21,71020,71021],{},[1426,71022],{"alt":71,"src":71023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[21,71025,71026],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[21,71028,71029],{},"工作流程：",[21,71031,71032],{},[1426,71033],{"alt":71,"src":71034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[21,71036,71037],{},[1426,71038],{"alt":71,"src":71039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[21,71041,71042],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[21,71044,71045],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[46,71047,71049],{"id":71048},"_343-location对象","3.4.3 location对象",[21,71051,71052],{},"location对象属于window这个全局对象下的，可以 省略window",[21,71054,71055],{},[1426,71056],{"alt":71,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[21,71059,71060],{},"href可以跳转页面",[29,71062,71063],{},[32,71064,71065],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[21,71067,71068],{},"search得到提交信息之后网站后边的地址",[21,71070,71071],{},[1426,71072],{"alt":71,"src":71073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[21,71075,71076],{},[1426,71077],{"alt":71,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[29,71080,71081],{"start":96},[32,71082,71083],{},"hash:这个获取单页面应用#后边的地址",[21,71085,71086],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[21,71088,71089],{},[1426,71090],{"alt":71,"src":71091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[66,71093,71095],{"className":53036,"code":71094,"language":53038,"meta":71,"style":71},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[73,71096,71097,71117,71137],{"__ignoreMap":71},[76,71098,71099,71101,71103,71105,71107,71110,71113,71115],{"class":78,"line":79},[76,71100,52113],{"class":86},[76,71102,326],{"class":51269},[76,71104,61026],{"class":1927},[76,71106,133],{"class":86},[76,71108,71109],{"class":192},"\"#\u002Fmy\"",[76,71111,71112],{"class":86},">我的\u003C\u002F",[76,71114,326],{"class":51269},[76,71116,51276],{"class":86},[76,71118,71119,71121,71123,71125,71127,71130,71133,71135],{"class":78,"line":96},[76,71120,52113],{"class":86},[76,71122,326],{"class":51269},[76,71124,61026],{"class":1927},[76,71126,133],{"class":86},[76,71128,71129],{"class":192},"\"#\u002Ffriend\"",[76,71131,71132],{"class":86},">关注\u003C\u002F",[76,71134,326],{"class":51269},[76,71136,51276],{"class":86},[76,71138,71139,71141,71143,71145,71147,71150,71153,71155],{"class":78,"line":1143},[76,71140,52113],{"class":86},[76,71142,326],{"class":51269},[76,71144,61026],{"class":1927},[76,71146,133],{"class":86},[76,71148,71149],{"class":192},"\"#\u002Fdownload\"",[76,71151,71152],{"class":86},">下载\u003C\u002F",[76,71154,326],{"class":51269},[76,71156,51276],{"class":86},[21,71158,71159],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[29,71161,71162],{"start":1143},[32,71163,71164,71165,71167,71168,71170],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53685,71166],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53685,71169],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[46,71172,71174],{"id":71173},"_345-navigator对象","3.4.5 navigator对象",[21,71176,71177],{},[1426,71178],{"alt":71,"src":71179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[66,71181,71185],{"className":71182,"code":71183,"language":71184,"meta":71,"style":71},"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",[73,71186,71187,71192,71203,71215,71220,71271,71312,71317,71330,71342,71347],{"__ignoreMap":71},[76,71188,71189],{"class":78,"line":79},[76,71190,71191],{"class":146},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[76,71193,71194,71196,71198,71200],{"class":78,"line":96},[76,71195,314],{"class":82},[76,71197,87],{"class":86},[76,71199,54418],{"class":82},[76,71201,71202],{"class":86}," () { \n",[76,71204,71205,71207,71210,71212],{"class":78,"line":1143},[76,71206,6759],{"class":82},[76,71208,71209],{"class":136}," userAgent",[76,71211,13531],{"class":82},[76,71213,71214],{"class":86}," navigator.userAgent \n",[76,71216,71217],{"class":78,"line":1158},[76,71218,71219],{"class":146},"\u002F\u002F 验证是否为Android或iPhone \n",[76,71221,71222,71224,71227,71229,71232,71235,71237,71239,71242,71244,71247,71251,71253,71255,71257,71260,71262,71264,71266,71268],{"class":78,"line":1164},[76,71223,6759],{"class":82},[76,71225,71226],{"class":136}," android",[76,71228,13531],{"class":82},[76,71230,71231],{"class":86}," userAgent.",[76,71233,71234],{"class":1927},"match",[76,71236,87],{"class":86},[76,71238,672],{"class":192},[76,71240,71241],{"class":47946},"(Android);",[76,71243,1074],{"class":82},[76,71245,71246],{"class":136},"[\\s",[76,71248,71250],{"class":71249},"snhLl","\\\u002F",[76,71252,1028],{"class":136},[76,71254,569],{"class":82},[76,71256,87],{"class":47946},[76,71258,71259],{"class":136},"[\\d.]",[76,71261,569],{"class":82},[76,71263,517],{"class":47946},[76,71265,1074],{"class":82},[76,71267,672],{"class":192},[76,71269,71270],{"class":86},") \n",[76,71272,71273,71275,71278,71280,71282,71284,71286,71288,71291,71294,71297,71299,71301,71304,71306,71308,71310],{"class":78,"line":1178},[76,71274,6759],{"class":82},[76,71276,71277],{"class":136}," iphone",[76,71279,13531],{"class":82},[76,71281,71231],{"class":86},[76,71283,71234],{"class":1927},[76,71285,87],{"class":86},[76,71287,672],{"class":192},[76,71289,71290],{"class":47946},"(iPhone",[76,71292,71293],{"class":136},"\\s",[76,71295,71296],{"class":47946},"OS)",[76,71298,71293],{"class":136},[76,71300,87],{"class":47946},[76,71302,71303],{"class":136},"[\\d_]",[76,71305,569],{"class":82},[76,71307,517],{"class":47946},[76,71309,672],{"class":192},[76,71311,71270],{"class":86},[76,71313,71314],{"class":78,"line":1184},[76,71315,71316],{"class":146},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[76,71318,71319,71321,71324,71327],{"class":78,"line":1275},[76,71320,1495],{"class":82},[76,71322,71323],{"class":86}," (android ",[76,71325,71326],{"class":82},"||",[76,71328,71329],{"class":86}," iphone) { \n",[76,71331,71332,71335,71337,71340],{"class":78,"line":1281},[76,71333,71334],{"class":86},"location.href ",[76,71336,133],{"class":82},[76,71338,71339],{"class":192}," 'http:\u002F\u002Fm.itcast.cn'",[76,71341,2639],{"class":86},[76,71343,71344],{"class":78,"line":1293},[76,71345,71346],{"class":86},"} \n",[76,71348,71349],{"class":78,"line":1576},[76,71350,71351],{"class":86},"})()\n",[46,71353,71355],{"id":71354},"_346-histroy对象","3.4.6 histroy对象",[21,71357,71358],{},[1426,71359],{"alt":71,"src":71360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[21,71362,71363],{},"浏览器地址的前进与后退!!!",[21,71365,71366],{},"history.back() 等效于 history.go(-1)",[21,71368,71369],{},"history.forward() 等效于 history.go(1)",[16,71371,71373],{"id":71372},"_35-本地存储","3.5 本地存储",[29,71375,71376,71379,71382],{},[32,71377,71378],{},"数据存储在用户浏览器中",[32,71380,71381],{},"设置、读取方便、甚至页面刷新不丢失数据",[32,71383,71384],{},"容量较大，sessionStorage和localStorage约 5M 左右",[46,71386,71388],{"id":71387},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[21,71390,71391],{},"只能存储字符串",[21,71393,71394],{},[1426,71395],{"alt":71,"src":71396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[21,71398,71399],{},[1426,71400],{"alt":71,"src":71401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[21,71403,71404],{},"键值对要加引号,不然就会当变量来看了",[21,71406,71407],{},"localStorage.setItem('uname', 'pink')",[21,71409,71410],{},"刷新之后信息不再丢失",[21,71412,71413],{},"操作key,value会跟着变",[21,71415,71416],{},"删除只删除键就可以,即名字",[21,71418,71407],{},[21,71420,71421],{},"改:",[21,71423,71424],{},"localStorage.setItem('uname','red')",[21,71426,71427],{},"有这个键就是改,没有这个键就是改",[21,71429,71430],{},[1426,71431],{"alt":71,"src":71432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[21,71434,71435],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[21,71437,71438],{},[1426,71439],{"alt":71,"src":71440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[21,71442,71443],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[46,71445,71447],{"id":71446},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[21,71449,71450],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[21,71452,71453],{},"特性:",[29,71455,71456,71459,71462,71465],{},[32,71457,71458],{},"生命周期为关闭浏览器窗口",[32,71460,71461],{},"在同一个窗口(页面)下数据可以共享",[32,71463,71464],{},"以键值对的形式存储使用",[32,71466,71467],{},"用法跟localStorage 基本相同",[46,71469,71471],{"id":71470},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[21,71473,71474],{},"本地只能存储字符串,无法直接存储复杂数据类型",[66,71476,71478],{"className":53036,"code":71477,"language":53038,"meta":71,"style":71},"\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",[73,71479,71480,71488,71493,71498,71503,71508,71512,71517,71522],{"__ignoreMap":71},[76,71481,71482,71484,71486],{"class":78,"line":79},[76,71483,998],{"class":86},[76,71485,51782],{"class":51269},[76,71487,51276],{"class":86},[76,71489,71490],{"class":78,"line":96},[76,71491,71492],{"class":86},"    const obj = {\n",[76,71494,71495],{"class":78,"line":1143},[76,71496,71497],{"class":86},"      uname: 'pink老师',\n",[76,71499,71500],{"class":78,"line":1158},[76,71501,71502],{"class":86},"      age: 18,\n",[76,71504,71505],{"class":78,"line":1164},[76,71506,71507],{"class":86},"      gender: '女'\n",[76,71509,71510],{"class":78,"line":1178},[76,71511,2151],{"class":86},[76,71513,71514],{"class":78,"line":1184},[76,71515,71516],{"class":86},"    \u002F\u002F 存储复杂数据类型\n",[76,71518,71519],{"class":78,"line":1275},[76,71520,71521],{"class":86},"    localStorage.setItem('obj', obj)\n",[76,71523,71524,71526,71528],{"class":78,"line":1281},[76,71525,52386],{"class":86},[76,71527,51782],{"class":51269},[76,71529,51276],{"class":86},[21,71531,71532],{},[1426,71533],{"alt":71,"src":71534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[21,71536,71537],{},"如果获取一下数据:",[21,71539,71540],{},"log(localStorage.getItem('obj'))",[21,71542,71543],{},[1426,71544],{"alt":71,"src":71545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[21,71547,71548],{},"发现直接存对象是使用不了的!!!",[21965,71550,71552],{"id":71551},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[21,71554,71555],{},[1426,71556],{"alt":71,"src":71557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[66,71559,71561],{"className":50602,"code":71560,"language":50604,"meta":71,"style":71},"\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",[73,71562,71563,71571,71581,71591,71600,71608,71612,71616,71642,71661,71669,71673,71678,71683],{"__ignoreMap":71},[76,71564,71565,71567,71569],{"class":78,"line":79},[76,71566,998],{"class":86},[76,71568,51782],{"class":51269},[76,71570,51276],{"class":86},[76,71572,71573,71575,71577,71579],{"class":78,"line":96},[76,71574,11188],{"class":82},[76,71576,69940],{"class":136},[76,71578,13531],{"class":82},[76,71580,15539],{"class":86},[76,71582,71583,71586,71589],{"class":78,"line":1143},[76,71584,71585],{"class":86},"      uname: ",[76,71587,71588],{"class":192},"'pink老师'",[76,71590,31435],{"class":86},[76,71592,71593,71596,71598],{"class":78,"line":1158},[76,71594,71595],{"class":86},"      age: ",[76,71597,738],{"class":136},[76,71599,31435],{"class":86},[76,71601,71602,71605],{"class":78,"line":1164},[76,71603,71604],{"class":86},"      gender: ",[76,71606,71607],{"class":192},"'女'\n",[76,71609,71610],{"class":78,"line":1178},[76,71611,2151],{"class":86},[76,71613,71614],{"class":78,"line":1184},[76,71615,71516],{"class":146},[76,71617,71618,71621,71624,71626,71629,71631,71634,71636,71639],{"class":78,"line":1275},[76,71619,71620],{"class":86},"  localStorage.",[76,71622,71623],{"class":1927},"setItem",[76,71625,87],{"class":86},[76,71627,71628],{"class":192},"'obj'",[76,71630,12402],{"class":86},[76,71632,71633],{"class":136},"JSON",[76,71635,646],{"class":86},[76,71637,71638],{"class":1927},"stringify",[76,71640,71641],{"class":86},"(obj))\n",[76,71643,71644,71647,71649,71652,71655,71657,71659],{"class":78,"line":1281},[76,71645,71646],{"class":86},"  console.",[76,71648,58216],{"class":1927},[76,71650,71651],{"class":86},"(localStorage.",[76,71653,71654],{"class":1927},"getItem",[76,71656,87],{"class":86},[76,71658,71628],{"class":192},[76,71660,30466],{"class":86},[76,71662,71663,71665,71667],{"class":78,"line":1293},[76,71664,52386],{"class":86},[76,71666,51782],{"class":51269},[76,71668,51276],{"class":86},[76,71670,71671],{"class":78,"line":1576},[76,71672,70590],{"class":86},[76,71674,71675],{"class":78,"line":1581},[76,71676,71677],{"class":86},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[76,71679,71680],{"class":78,"line":1587},[76,71681,71682],{"class":86},"  类型是字符串的\n",[76,71684,71685],{"class":78,"line":1592},[76,71686,71687],{"class":86},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21965,71689,71691],{"id":71690},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[21,71693,71694],{},[1426,71695],{"alt":71,"src":71696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[21,71698,71699],{},[1426,71700],{"alt":71,"src":71701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[66,71703,71705],{"className":53036,"code":71704,"language":53038,"meta":71,"style":71},"  \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",[73,71706,71707,71715,71719,71723,71727,71731,71735,71740,71745,71750,71755,71760,71765,71770,71775],{"__ignoreMap":71},[76,71708,71709,71711,71713],{"class":78,"line":79},[76,71710,52113],{"class":86},[76,71712,51782],{"class":51269},[76,71714,51276],{"class":86},[76,71716,71717],{"class":78,"line":96},[76,71718,71492],{"class":86},[76,71720,71721],{"class":78,"line":1143},[76,71722,71497],{"class":86},[76,71724,71725],{"class":78,"line":1158},[76,71726,71502],{"class":86},[76,71728,71729],{"class":78,"line":1164},[76,71730,71507],{"class":86},[76,71732,71733],{"class":78,"line":1178},[76,71734,2151],{"class":86},[76,71736,71737],{"class":78,"line":1184},[76,71738,71739],{"class":86},"    \u002F\u002F 1.存储复杂数据类型\n",[76,71741,71742],{"class":78,"line":1275},[76,71743,71744],{"class":86},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[76,71746,71747],{"class":78,"line":1281},[76,71748,71749],{"class":86},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[76,71751,71752],{"class":78,"line":1293},[76,71753,71754],{"class":86},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[76,71756,71757],{"class":78,"line":1576},[76,71758,71759],{"class":86},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[76,71761,71762],{"class":78,"line":1581},[76,71763,71764],{"class":86},"    \u002F\u002F 取\n",[76,71766,71767],{"class":78,"line":1587},[76,71768,71769],{"class":86},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[76,71771,71772],{"class":78,"line":1592},[76,71773,71774],{"class":86},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[76,71776,71777,71779,71781],{"class":78,"line":1606},[76,71778,52386],{"class":86},[76,71780,51782],{"class":51269},[76,71782,51276],{"class":86},[21,71784,71785],{},[1426,71786],{"alt":71,"src":71787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[46,71789,71791],{"id":71790},"_356-数组map方法","3.5.6 数组map方法",[21,71793,71794],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[21,71796,71797],{},[1426,71798],{"alt":71,"src":71799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[21,71801,71802],{},[1426,71803],{"alt":71,"src":71804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[21,71806,71807,71810],{},[237,71808,71809],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[21,71812,71813],{},"map有返回值，但是forEach没有返回值",[21,71815,71816],{},"map是个方法。用的时候要加 ()",[21,71818,71819],{},"map返回的是一个数组",[46,71821,71823],{"id":71822},"_357-数组中join方法","3.5.7 数组中join方法",[21,71825,71826],{},[1426,71827],{"alt":71,"src":71828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[21,71830,71831],{},"类似于python中拼接字符串一样！",[29,71833,71834,71837,71840],{},[32,71835,71836],{},"小括号为空则逗号分开",[32,71838,71839],{},"小括号为空字符串 ''，则元素之间没有分隔符",[32,71841,71842],{},"小括号用啥符号就用进行分割",[46,71844,71846],{"id":71845},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[29,71848,71849,71852,71855,71858,71861],{},[32,71850,71851],{},"记住本地时间获取快速方式：new Date().toDateString()",[32,71853,71854],{},"尽量减少DOM操作，用好map+join的渲染方式",[32,71856,71857],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[32,71859,71860],{},"return可以实现函数的结束",[32,71862,71863],{},"禁止跳转是 preventDefault() 不要忘记",[66,71865,71867],{"className":50602,"code":71866,"language":50604,"meta":71,"style":71},"\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",[73,71868,71869,71879,71893,71897,71905,71919,71939,71951,71959,71965,71975,71985,71989,71993,71999,72009,72021,72025,72029,72036,72048,72062,72072,72076,72080,72087,72094,72101,72113,72125,72135,72147,72151,72155,72162,72169,72181,72193,72203,72215,72245,72249,72253,72260,72272,72284,72308,72318,72328,72332,72336,72344,72355,72367,72379,72391,72408,72420,72432,72436,72440,72447,72459,72471,72483,72494,72512,72525,72537,72561,72572,72576,72580,72588,72598,72602,72606,72612,72624,72635,72645,72649,72653,72659,72681,72685,72689,72695,72701,72713,72723,72735,72765,72778,72795,72799,72803,72814,72836,72846,72850,72854,72867,72877,72889,72901,72913,72925,72935,72945,72955,72966,72979,72983,72991,72999,73003,73011,73024,73044,73077,73110,73143,73169,73187,73205,73213,73239,73257,73275,73293,73311,73329,73337,73345,73363,73371,73400,73408,73416,73424,73437,73449,73461,73473,73485,73497,73510,73522,73530,73538,73546,73551,73556,73560,73564,73568,73572,73576,73580,73585,73590,73595,73600,73608,73616,73624,73629,73634,73639,73644,73649,73654,73659,73664,73669,73674,73679,73684,73689,73694,73698,73703,73708,73718,73727,73731,73736,73745,73761,73803,73843,73882,73947,73955,73959,73964,73982,73990,73995,74000,74030,74036,74041,74054,74066,74078,74090,74102,74114,74126,74130,74140,74144,74149,74154,74158,74167,74171,74176,74181,74200,74205,74225,74229,74234,74238,74243,74261,74279,74297,74316,74335,74354,74359,74365,74386,74392,74401,74407,74413,74419,74446,74459,74464,74474,74480,74486,74492,74498,74503,74509,74515,74521,74527,74560,74565,74570,74575,74580,74586,74592,74598,74609,74614,74620,74627,74641,74647,74671,74676,74681,74687,74693,74714,74720,74733,74739,74745,74751,74757,74762,74768,74774,74780,74798,74812,74818,74826,74832,74854,74859,74864,74869,74874,74879,74888,74897,74902],{"__ignoreMap":71},[76,71870,71871,71873,71875,71877],{"class":78,"line":79},[76,71872,51266],{"class":86},[76,71874,51270],{"class":51269},[76,71876,51273],{"class":1927},[76,71878,51276],{"class":86},[76,71880,71881,71883,71885,71887,71889,71891],{"class":78,"line":96},[76,71882,998],{"class":86},[76,71884,50604],{"class":51269},[76,71886,51285],{"class":1927},[76,71888,133],{"class":86},[76,71890,51290],{"class":192},[76,71892,51276],{"class":86},[76,71894,71895],{"class":78,"line":1143},[76,71896,2365],{"emptyLinePlaceholder":2364},[76,71898,71899,71901,71903],{"class":78,"line":1158},[76,71900,998],{"class":86},[76,71902,51303],{"class":51269},[76,71904,51276],{"class":86},[76,71906,71907,71909,71911,71913,71915,71917],{"class":78,"line":1164},[76,71908,52113],{"class":86},[76,71910,51313],{"class":51269},[76,71912,51316],{"class":1927},[76,71914,133],{"class":86},[76,71916,51321],{"class":192},[76,71918,51276],{"class":86},[76,71920,71921,71923,71925,71927,71929,71931,71933,71935,71937],{"class":78,"line":1178},[76,71922,52113],{"class":86},[76,71924,51313],{"class":51269},[76,71926,14887],{"class":1927},[76,71928,133],{"class":86},[76,71930,51360],{"class":192},[76,71932,51340],{"class":1927},[76,71934,133],{"class":86},[76,71936,51367],{"class":192},[76,71938,51276],{"class":86},[76,71940,71941,71943,71945,71947,71949],{"class":78,"line":1184},[76,71942,52113],{"class":86},[76,71944,51376],{"class":51269},[76,71946,51379],{"class":86},[76,71948,51376],{"class":51269},[76,71950,51276],{"class":86},[76,71952,71953,71955,71957],{"class":78,"line":1275},[76,71954,52113],{"class":86},[76,71956,5092],{"class":51269},[76,71958,51276],{"class":86},[76,71960,71961,71963],{"class":78,"line":1281},[76,71962,6370],{"class":51269},[76,71964,15539],{"class":86},[76,71966,71967,71969,71971,71973],{"class":78,"line":1293},[76,71968,54664],{"class":136},[76,71970,51406],{"class":86},[76,71972,279],{"class":136},[76,71974,1254],{"class":86},[76,71976,71977,71979,71981,71983],{"class":78,"line":1576},[76,71978,54675],{"class":136},[76,71980,51406],{"class":86},[76,71982,279],{"class":136},[76,71984,1254],{"class":86},[76,71986,71987],{"class":78,"line":1581},[76,71988,2151],{"class":86},[76,71990,71991],{"class":78,"line":1587},[76,71992,2365],{"emptyLinePlaceholder":2364},[76,71994,71995,71997],{"class":78,"line":1592},[76,71996,57248],{"class":51269},[76,71998,15539],{"class":86},[76,72000,72001,72003,72005,72007],{"class":78,"line":1606},[76,72002,57255],{"class":136},[76,72004,51406],{"class":86},[76,72006,51561],{"class":136},[76,72008,1254],{"class":86},[76,72010,72011,72013,72015,72017,72019],{"class":78,"line":1611},[76,72012,62046],{"class":136},[76,72014,51406],{"class":86},[76,72016,788],{"class":136},[76,72018,51461],{"class":82},[76,72020,1254],{"class":86},[76,72022,72023],{"class":78,"line":1617},[76,72024,2151],{"class":86},[76,72026,72027],{"class":78,"line":1638},[76,72028,2365],{"emptyLinePlaceholder":2364},[76,72030,72031,72034],{"class":78,"line":1643},[76,72032,72033],{"class":1927},"    .info",[76,72035,15539],{"class":86},[76,72037,72038,72040,72042,72044,72046],{"class":78,"line":1657},[76,72039,54740],{"class":136},[76,72041,51406],{"class":86},[76,72043,51458],{"class":136},[76,72045,51461],{"class":82},[76,72047,1254],{"class":86},[76,72049,72050,72052,72054,72056,72058,72060],{"class":78,"line":1662},[76,72051,54675],{"class":136},[76,72053,51406],{"class":86},[76,72055,534],{"class":136},[76,72057,51461],{"class":82},[76,72059,51525],{"class":136},[76,72061,1254],{"class":86},[76,72063,72064,72066,72068,72070],{"class":78,"line":1691},[76,72065,57255],{"class":136},[76,72067,51406],{"class":86},[76,72069,51561],{"class":136},[76,72071,1254],{"class":86},[76,72073,72074],{"class":78,"line":1696},[76,72075,2151],{"class":86},[76,72077,72078],{"class":78,"line":1713},[76,72079,2365],{"emptyLinePlaceholder":2364},[76,72081,72082,72085],{"class":78,"line":1718},[76,72083,72084],{"class":1927},"    .uname",[76,72086,31435],{"class":86},[76,72088,72089,72092],{"class":78,"line":1723},[76,72090,72091],{"class":1927},"    .age",[76,72093,31435],{"class":86},[76,72095,72096,72099],{"class":78,"line":1728},[76,72097,72098],{"class":1927},"    .salary",[76,72100,15539],{"class":86},[76,72102,72103,72105,72107,72109,72111],{"class":78,"line":1742},[76,72104,54740],{"class":136},[76,72106,51406],{"class":86},[76,72108,399],{"class":136},[76,72110,51461],{"class":82},[76,72112,1254],{"class":86},[76,72114,72115,72117,72119,72121,72123],{"class":78,"line":1747},[76,72116,54754],{"class":136},[76,72118,51406],{"class":86},[76,72120,788],{"class":136},[76,72122,51461],{"class":82},[76,72124,1254],{"class":86},[76,72126,72127,72129,72131,72133],{"class":78,"line":2542},[76,72128,61749],{"class":136},[76,72130,51406],{"class":86},[76,72132,54706],{"class":136},[76,72134,1254],{"class":86},[76,72136,72137,72139,72141,72143,72145],{"class":78,"line":2556},[76,72138,61719],{"class":136},[76,72140,51406],{"class":86},[76,72142,663],{"class":136},[76,72144,51461],{"class":82},[76,72146,1254],{"class":86},[76,72148,72149],{"class":78,"line":2564},[76,72150,2151],{"class":86},[76,72152,72153],{"class":78,"line":2569},[76,72154,2365],{"emptyLinePlaceholder":2364},[76,72156,72157,72160],{"class":78,"line":2575},[76,72158,72159],{"class":1927},"    .gender",[76,72161,31435],{"class":86},[76,72163,72164,72167],{"class":78,"line":2581},[76,72165,72166],{"class":1927},"    .city",[76,72168,15539],{"class":86},[76,72170,72171,72173,72175,72177,72179],{"class":78,"line":2586},[76,72172,54740],{"class":136},[76,72174,51406],{"class":86},[76,72176,399],{"class":136},[76,72178,51461],{"class":82},[76,72180,1254],{"class":86},[76,72182,72183,72185,72187,72189,72191],{"class":78,"line":7915},[76,72184,54754],{"class":136},[76,72186,51406],{"class":86},[76,72188,913],{"class":136},[76,72190,51461],{"class":82},[76,72192,1254],{"class":86},[76,72194,72195,72197,72199,72201],{"class":78,"line":7939},[76,72196,61749],{"class":136},[76,72198,51406],{"class":86},[76,72200,54706],{"class":136},[76,72202,1254],{"class":86},[76,72204,72205,72207,72209,72211,72213],{"class":78,"line":7944},[76,72206,61719],{"class":136},[76,72208,51406],{"class":86},[76,72210,663],{"class":136},[76,72212,51461],{"class":82},[76,72214,1254],{"class":86},[76,72216,72217,72219,72221,72223,72225,72227,72230,72232,72234,72236,72239,72241,72243],{"class":78,"line":7950},[76,72218,61946],{"class":136},[76,72220,51406],{"class":86},[76,72222,305],{"class":136},[76,72224,51461],{"class":82},[76,72226,51490],{"class":136},[76,72228,72229],{"class":136}," rgb",[76,72231,87],{"class":86},[76,72233,1686],{"class":136},[76,72235,12402],{"class":86},[76,72237,72238],{"class":136},"197",[76,72240,12402],{"class":86},[76,72242,72238],{"class":136},[76,72244,2684],{"class":86},[76,72246,72247],{"class":78,"line":7977},[76,72248,2151],{"class":86},[76,72250,72251],{"class":78,"line":7982},[76,72252,2365],{"emptyLinePlaceholder":2364},[76,72254,72255,72258],{"class":78,"line":7988},[76,72256,72257],{"class":51269},"    button",[76,72259,15539],{"class":86},[76,72261,72262,72264,72266,72268,72270],{"class":78,"line":8000},[76,72263,54754],{"class":136},[76,72265,51406],{"class":86},[76,72267,913],{"class":136},[76,72269,51461],{"class":82},[76,72271,1254],{"class":86},[76,72273,72274,72276,72278,72280,72282],{"class":78,"line":8012},[76,72275,54740],{"class":136},[76,72277,51406],{"class":86},[76,72279,572],{"class":136},[76,72281,51461],{"class":82},[76,72283,1254],{"class":86},[76,72285,72286,72288,72290,72293,72295,72297,72299,72302,72304,72306],{"class":78,"line":8024},[76,72287,54853],{"class":136},[76,72289,51406],{"class":86},[76,72291,72292],{"class":136},"rgb",[76,72294,87],{"class":86},[76,72296,1057],{"class":136},[76,72298,12402],{"class":86},[76,72300,72301],{"class":136},"187",[76,72303,12402],{"class":86},[76,72305,387],{"class":136},[76,72307,2684],{"class":86},[76,72309,72310,72312,72314,72316],{"class":78,"line":9683},[76,72311,57385],{"class":136},[76,72313,51406],{"class":86},[76,72315,60811],{"class":136},[76,72317,1254],{"class":86},[76,72319,72320,72322,72324,72326],{"class":78,"line":9708},[76,72321,61946],{"class":136},[76,72323,51406],{"class":86},[76,72325,279],{"class":136},[76,72327,1254],{"class":86},[76,72329,72330],{"class":78,"line":9731},[76,72331,2151],{"class":86},[76,72333,72334],{"class":78,"line":9755},[76,72335,2365],{"emptyLinePlaceholder":2364},[76,72337,72338,72340,72342],{"class":78,"line":9760},[76,72339,72257],{"class":51269},[76,72341,51657],{"class":51269},[76,72343,15539],{"class":86},[76,72345,72346,72348,72350,72353],{"class":78,"line":9765},[76,72347,54978],{"class":136},[76,72349,51406],{"class":86},[76,72351,72352],{"class":136},"inline-block",[76,72354,1254],{"class":86},[76,72356,72357,72359,72361,72363,72365],{"class":78,"line":9770},[76,72358,54740],{"class":136},[76,72360,51406],{"class":86},[76,72362,534],{"class":136},[76,72364,51461],{"class":82},[76,72366,1254],{"class":86},[76,72368,72369,72371,72373,72375,72377],{"class":78,"line":9779},[76,72370,54754],{"class":136},[76,72372,51406],{"class":86},[76,72374,534],{"class":136},[76,72376,51461],{"class":82},[76,72378,1254],{"class":86},[76,72380,72381,72383,72385,72387,72389],{"class":78,"line":9784},[76,72382,57328],{"class":136},[76,72384,51406],{"class":86},[76,72386,560],{"class":136},[76,72388,51461],{"class":82},[76,72390,1254],{"class":86},[76,72392,72393,72395,72397,72399,72401,72403,72406],{"class":78,"line":9790},[76,72394,61946],{"class":136},[76,72396,51406],{"class":86},[76,72398,305],{"class":136},[76,72400,51461],{"class":82},[76,72402,51490],{"class":136},[76,72404,72405],{"class":136}," #fff",[76,72407,1254],{"class":86},[76,72409,72410,72412,72414,72416,72418],{"class":78,"line":9811},[76,72411,55103],{"class":136},[76,72413,51406],{"class":86},[76,72415,407],{"class":136},[76,72417,51461],{"class":82},[76,72419,1254],{"class":86},[76,72421,72422,72424,72426,72428,72430],{"class":78,"line":9817},[76,72423,61719],{"class":136},[76,72425,51406],{"class":86},[76,72427,305],{"class":136},[76,72429,51461],{"class":82},[76,72431,1254],{"class":86},[76,72433,72434],{"class":78,"line":9831},[76,72435,2151],{"class":86},[76,72437,72438],{"class":78,"line":9837},[76,72439,2365],{"emptyLinePlaceholder":2364},[76,72441,72442,72445],{"class":78,"line":9864},[76,72443,72444],{"class":1927},"    .total",[76,72446,15539],{"class":86},[76,72448,72449,72451,72453,72455,72457],{"class":78,"line":9873},[76,72450,54740],{"class":136},[76,72452,51406],{"class":86},[76,72454,61598],{"class":136},[76,72456,51461],{"class":82},[76,72458,1254],{"class":86},[76,72460,72461,72463,72465,72467,72469],{"class":78,"line":9879},[76,72462,54754],{"class":136},[76,72464,51406],{"class":86},[76,72466,489],{"class":136},[76,72468,51461],{"class":82},[76,72470,1254],{"class":86},[76,72472,72473,72475,72477,72479,72481],{"class":78,"line":9887},[76,72474,57328],{"class":136},[76,72476,51406],{"class":86},[76,72478,489],{"class":136},[76,72480,51461],{"class":82},[76,72482,1254],{"class":86},[76,72484,72485,72487,72489,72492],{"class":78,"line":9892},[76,72486,57255],{"class":136},[76,72488,51406],{"class":86},[76,72490,72491],{"class":136},"right",[76,72493,1254],{"class":86},[76,72495,72496,72498,72500,72502,72504,72506,72508,72510],{"class":78,"line":16571},[76,72497,54675],{"class":136},[76,72499,51406],{"class":86},[76,72501,489],{"class":136},[76,72503,51461],{"class":82},[76,72505,51525],{"class":136},[76,72507,2002],{"class":136},[76,72509,51461],{"class":82},[76,72511,1254],{"class":86},[76,72513,72514,72517,72519,72521,72523],{"class":78,"line":16577},[76,72515,72516],{"class":136},"      padding-right",[76,72518,51406],{"class":86},[76,72520,534],{"class":136},[76,72522,51461],{"class":82},[76,72524,1254],{"class":86},[76,72526,72527,72529,72531,72533,72535],{"class":78,"line":16600},[76,72528,54891],{"class":136},[76,72530,51406],{"class":86},[76,72532,611],{"class":136},[76,72534,51461],{"class":82},[76,72536,1254],{"class":86},[76,72538,72539,72541,72543,72545,72547,72550,72552,72555,72557,72559],{"class":78,"line":16606},[76,72540,54853],{"class":136},[76,72542,51406],{"class":86},[76,72544,72292],{"class":136},[76,72546,87],{"class":86},[76,72548,72549],{"class":136},"237",[76,72551,12402],{"class":86},[76,72553,72554],{"class":136},"235",[76,72556,12402],{"class":86},[76,72558,72554],{"class":136},[76,72560,2684],{"class":86},[76,72562,72563,72566,72568,72570],{"class":78,"line":16629},[76,72564,72565],{"class":136},"      box-sizing",[76,72567,51406],{"class":86},[76,72569,60474],{"class":136},[76,72571,1254],{"class":86},[76,72573,72574],{"class":78,"line":16643},[76,72575,2151],{"class":86},[76,72577,72578],{"class":78,"line":16663},[76,72579,2365],{"emptyLinePlaceholder":2364},[76,72581,72582,72584,72586],{"class":78,"line":16669},[76,72583,72444],{"class":1927},[76,72585,51657],{"class":51269},[76,72587,15539],{"class":86},[76,72589,72590,72592,72594,72596],{"class":78,"line":16680},[76,72591,57385],{"class":136},[76,72593,51406],{"class":86},[76,72595,57390],{"class":136},[76,72597,1254],{"class":86},[76,72599,72600],{"class":78,"line":16703},[76,72601,2151],{"class":86},[76,72603,72604],{"class":78,"line":16725},[76,72605,2365],{"emptyLinePlaceholder":2364},[76,72607,72608,72610],{"class":78,"line":16730},[76,72609,64992],{"class":51269},[76,72611,15539],{"class":86},[76,72613,72614,72616,72618,72620,72622],{"class":78,"line":16736},[76,72615,54740],{"class":136},[76,72617,51406],{"class":86},[76,72619,61598],{"class":136},[76,72621,51461],{"class":82},[76,72623,1254],{"class":86},[76,72625,72626,72628,72630,72633],{"class":78,"line":16750},[76,72627,54675],{"class":136},[76,72629,51406],{"class":86},[76,72631,72632],{"class":136},"auto",[76,72634,1254],{"class":86},[76,72636,72637,72639,72641,72643],{"class":78,"line":16763},[76,72638,64999],{"class":136},[76,72640,51406],{"class":86},[76,72642,65004],{"class":136},[76,72644,1254],{"class":86},[76,72646,72647],{"class":78,"line":16768},[76,72648,2151],{"class":86},[76,72650,72651],{"class":78,"line":16782},[76,72652,2365],{"emptyLinePlaceholder":2364},[76,72654,72655,72657],{"class":78,"line":16787},[76,72656,65084],{"class":51269},[76,72658,15539],{"class":86},[76,72660,72661,72663,72665,72667,72669,72671,72673,72675,72677,72679],{"class":78,"line":16793},[76,72662,54853],{"class":136},[76,72664,51406],{"class":86},[76,72666,72292],{"class":136},[76,72668,87],{"class":86},[76,72670,72549],{"class":136},[76,72672,12402],{"class":86},[76,72674,72554],{"class":136},[76,72676,12402],{"class":86},[76,72678,72554],{"class":136},[76,72680,2684],{"class":86},[76,72682,72683],{"class":78,"line":16798},[76,72684,2151],{"class":86},[76,72686,72687],{"class":78,"line":16812},[76,72688,2365],{"emptyLinePlaceholder":2364},[76,72690,72691,72693],{"class":78,"line":16817},[76,72692,65084],{"class":51269},[76,72694,31435],{"class":86},[76,72696,72697,72699],{"class":78,"line":16822},[76,72698,65150],{"class":51269},[76,72700,15539],{"class":86},[76,72702,72703,72705,72707,72709,72711],{"class":78,"line":16836},[76,72704,54754],{"class":136},[76,72706,51406],{"class":86},[76,72708,361],{"class":136},[76,72710,51461],{"class":82},[76,72712,1254],{"class":86},[76,72714,72715,72717,72719,72721],{"class":78,"line":16848},[76,72716,57255],{"class":136},[76,72718,51406],{"class":86},[76,72720,23704],{"class":136},[76,72722,1254],{"class":86},[76,72724,72725,72727,72729,72731,72733],{"class":78,"line":16853},[76,72726,54891],{"class":136},[76,72728,51406],{"class":86},[76,72730,637],{"class":136},[76,72732,51461],{"class":82},[76,72734,1254],{"class":86},[76,72736,72737,72739,72741,72743,72745,72747,72749,72751,72754,72756,72759,72761,72763],{"class":78,"line":16866},[76,72738,61946],{"class":136},[76,72740,51406],{"class":86},[76,72742,305],{"class":136},[76,72744,51461],{"class":82},[76,72746,51490],{"class":136},[76,72748,72229],{"class":136},[76,72750,87],{"class":86},[76,72752,72753],{"class":136},"228",[76,72755,12402],{"class":86},[76,72757,72758],{"class":136},"225",[76,72760,12402],{"class":86},[76,72762,72758],{"class":136},[76,72764,2684],{"class":86},[76,72766,72767,72770,72772,72774,72776],{"class":78,"line":16871},[76,72768,72769],{"class":136},"      padding-left",[76,72771,51406],{"class":86},[76,72773,407],{"class":136},[76,72775,51461],{"class":82},[76,72777,1254],{"class":86},[76,72779,72780,72782,72784,72786,72789,72791,72793],{"class":78,"line":16876},[76,72781,61829],{"class":136},[76,72783,51406],{"class":86},[76,72785,28090],{"class":136},[76,72787,72788],{"class":136}," linear",[76,72790,61836],{"class":136},[76,72792,783],{"class":82},[76,72794,1254],{"class":86},[76,72796,72797],{"class":78,"line":16881},[76,72798,2151],{"class":86},[76,72800,72801],{"class":78,"line":16894},[76,72802,2365],{"emptyLinePlaceholder":2364},[76,72804,72805,72808,72810,72812],{"class":78,"line":16899},[76,72806,72807],{"class":51269},"    tbody",[76,72809,70113],{"class":51269},[76,72811,60909],{"class":1927},[76,72813,15539],{"class":86},[76,72815,72816,72818,72820,72822,72824,72826,72828,72830,72832,72834],{"class":78,"line":32602},[76,72817,54853],{"class":136},[76,72819,51406],{"class":86},[76,72821,72292],{"class":136},[76,72823,87],{"class":86},[76,72825,72549],{"class":136},[76,72827,12402],{"class":86},[76,72829,72554],{"class":136},[76,72831,12402],{"class":86},[76,72833,72554],{"class":136},[76,72835,2684],{"class":86},[76,72837,72838,72840,72842,72844],{"class":78,"line":32608},[76,72839,61994],{"class":136},[76,72841,51406],{"class":86},[76,72843,61999],{"class":136},[76,72845,1254],{"class":86},[76,72847,72848],{"class":78,"line":32614},[76,72849,2151],{"class":86},[76,72851,72852],{"class":78,"line":32620},[76,72853,2365],{"emptyLinePlaceholder":2364},[76,72855,72856,72858,72860,72863,72865],{"class":78,"line":32626},[76,72857,72807],{"class":51269},[76,72859,70113],{"class":51269},[76,72861,72862],{"class":51269}," td",[76,72864,1362],{"class":51269},[76,72866,15539],{"class":86},[76,72868,72869,72871,72873,72875],{"class":78,"line":32637},[76,72870,54978],{"class":136},[76,72872,51406],{"class":86},[76,72874,60838],{"class":136},[76,72876,1254],{"class":86},[76,72878,72879,72881,72883,72885,72887],{"class":78,"line":32643},[76,72880,54740],{"class":136},[76,72882,51406],{"class":86},[76,72884,995],{"class":136},[76,72886,51461],{"class":82},[76,72888,1254],{"class":86},[76,72890,72891,72893,72895,72897,72899],{"class":78,"line":32663},[76,72892,54754],{"class":136},[76,72894,51406],{"class":86},[76,72896,913],{"class":136},[76,72898,51461],{"class":82},[76,72900,1254],{"class":86},[76,72902,72903,72905,72907,72909,72911],{"class":78,"line":32669},[76,72904,57328],{"class":136},[76,72906,51406],{"class":86},[76,72908,913],{"class":136},[76,72910,51461],{"class":82},[76,72912,1254],{"class":86},[76,72914,72915,72917,72919,72921,72923],{"class":78,"line":32680},[76,72916,62046],{"class":136},[76,72918,51406],{"class":86},[76,72920,165],{"class":136},[76,72922,51461],{"class":82},[76,72924,1254],{"class":86},[76,72926,72927,72929,72931,72933],{"class":78,"line":32686},[76,72928,57385],{"class":136},[76,72930,51406],{"class":86},[76,72932,60811],{"class":136},[76,72934,1254],{"class":86},[76,72936,72937,72939,72941,72943],{"class":78,"line":32692},[76,72938,57255],{"class":136},[76,72940,51406],{"class":86},[76,72942,51561],{"class":136},[76,72944,1254],{"class":86},[76,72946,72947,72949,72951,72953],{"class":78,"line":32698},[76,72948,63939],{"class":136},[76,72950,51406],{"class":86},[76,72952,54706],{"class":136},[76,72954,1254],{"class":86},[76,72956,72957,72959,72961,72964],{"class":78,"line":32704},[76,72958,54853],{"class":136},[76,72960,51406],{"class":86},[76,72962,72963],{"class":136},"orange",[76,72965,1254],{"class":86},[76,72967,72968,72970,72972,72975,72977],{"class":78,"line":32710},[76,72969,55103],{"class":136},[76,72971,51406],{"class":86},[76,72973,72974],{"class":136},"12.5",[76,72976,51461],{"class":82},[76,72978,1254],{"class":86},[76,72980,72981],{"class":78,"line":32716},[76,72982,2151],{"class":86},[76,72984,72985,72987,72989],{"class":78,"line":32722},[76,72986,52386],{"class":86},[76,72988,5092],{"class":51269},[76,72990,51276],{"class":86},[76,72992,72993,72995,72997],{"class":78,"line":32742},[76,72994,51754],{"class":86},[76,72996,51303],{"class":51269},[76,72998,51276],{"class":86},[76,73000,73001],{"class":78,"line":32748},[76,73002,2365],{"emptyLinePlaceholder":2364},[76,73004,73005,73007,73009],{"class":78,"line":32764},[76,73006,998],{"class":86},[76,73008,51769],{"class":51269},[76,73010,51276],{"class":86},[76,73012,73013,73015,73017,73020,73022],{"class":78,"line":32770},[76,73014,52113],{"class":86},[76,73016,16],{"class":51269},[76,73018,73019],{"class":86},">学生就业统计表\u003C\u002F",[76,73021,16],{"class":51269},[76,73023,51276],{"class":86},[76,73025,73026,73028,73030,73032,73034,73036,73038,73040,73042],{"class":78,"line":32784},[76,73027,52113],{"class":86},[76,73029,66594],{"class":51269},[76,73031,53455],{"class":1927},[76,73033,133],{"class":86},[76,73035,62633],{"class":192},[76,73037,69039],{"class":1927},[76,73039,133],{"class":86},[76,73041,31745],{"class":192},[76,73043,51276],{"class":86},[76,73045,73046,73048,73050,73052,73054,73056,73058,73060,73062,73064,73066,73069,73071,73073,73075],{"class":78,"line":32790},[76,73047,51310],{"class":86},[76,73049,53790],{"class":51269},[76,73051,53793],{"class":1927},[76,73053,133],{"class":86},[76,73055,62668],{"class":192},[76,73057,14887],{"class":1927},[76,73059,133],{"class":86},[76,73061,69065],{"class":192},[76,73063,60989],{"class":1927},[76,73065,133],{"class":86},[76,73067,73068],{"class":192},"\"姓名\"",[76,73070,53455],{"class":1927},[76,73072,133],{"class":86},[76,73074,69065],{"class":192},[76,73076,51276],{"class":86},[76,73078,73079,73081,73083,73085,73087,73089,73091,73093,73095,73097,73099,73102,73104,73106,73108],{"class":78,"line":32805},[76,73080,51310],{"class":86},[76,73082,53790],{"class":51269},[76,73084,53793],{"class":1927},[76,73086,133],{"class":86},[76,73088,62668],{"class":192},[76,73090,14887],{"class":1927},[76,73092,133],{"class":86},[76,73094,69093],{"class":192},[76,73096,60989],{"class":1927},[76,73098,133],{"class":86},[76,73100,73101],{"class":192},"\"年龄\"",[76,73103,53455],{"class":1927},[76,73105,133],{"class":86},[76,73107,69093],{"class":192},[76,73109,51276],{"class":86},[76,73111,73112,73114,73116,73118,73120,73122,73124,73126,73128,73130,73132,73135,73137,73139,73141],{"class":78,"line":32811},[76,73113,51310],{"class":86},[76,73115,53790],{"class":51269},[76,73117,53793],{"class":1927},[76,73119,133],{"class":86},[76,73121,62668],{"class":192},[76,73123,14887],{"class":1927},[76,73125,133],{"class":86},[76,73127,69195],{"class":192},[76,73129,60989],{"class":1927},[76,73131,133],{"class":86},[76,73133,73134],{"class":192},"\"薪资\"",[76,73136,53455],{"class":1927},[76,73138,133],{"class":86},[76,73140,69195],{"class":192},[76,73142,51276],{"class":86},[76,73144,73145,73147,73149,73151,73153,73155,73157,73159,73161,73163,73165,73167],{"class":78,"line":32820},[76,73146,51310],{"class":86},[76,73148,69113],{"class":51269},[76,73150,14887],{"class":1927},[76,73152,133],{"class":86},[76,73154,69120],{"class":192},[76,73156,14926],{"class":1927},[76,73158,133],{"class":86},[76,73160,7619],{"class":192},[76,73162,53455],{"class":1927},[76,73164,133],{"class":86},[76,73166,69120],{"class":192},[76,73168,51276],{"class":86},[76,73170,73171,73173,73175,73177,73179,73181,73183,73185],{"class":78,"line":32826},[76,73172,55203],{"class":86},[76,73174,69135],{"class":51269},[76,73176,66620],{"class":1927},[76,73178,133],{"class":86},[76,73180,9928],{"class":192},[76,73182,69144],{"class":86},[76,73184,69135],{"class":51269},[76,73186,51276],{"class":86},[76,73188,73189,73191,73193,73195,73197,73199,73201,73203],{"class":78,"line":32835},[76,73190,55203],{"class":86},[76,73192,69135],{"class":51269},[76,73194,66620],{"class":1927},[76,73196,133],{"class":86},[76,73198,9997],{"class":192},[76,73200,69163],{"class":86},[76,73202,69135],{"class":51269},[76,73204,51276],{"class":86},[76,73206,73207,73209,73211],{"class":78,"line":32841},[76,73208,51745],{"class":86},[76,73210,69113],{"class":51269},[76,73212,51276],{"class":86},[76,73214,73215,73217,73219,73221,73223,73225,73227,73229,73231,73233,73235,73237],{"class":78,"line":32847},[76,73216,51310],{"class":86},[76,73218,69113],{"class":51269},[76,73220,14887],{"class":1927},[76,73222,133],{"class":86},[76,73224,69217],{"class":192},[76,73226,14926],{"class":1927},[76,73228,133],{"class":86},[76,73230,7619],{"class":192},[76,73232,53455],{"class":1927},[76,73234,133],{"class":86},[76,73236,69217],{"class":192},[76,73238,51276],{"class":86},[76,73240,73241,73243,73245,73247,73249,73251,73253,73255],{"class":78,"line":32856},[76,73242,55203],{"class":86},[76,73244,69135],{"class":51269},[76,73246,66620],{"class":1927},[76,73248,133],{"class":86},[76,73250,69238],{"class":192},[76,73252,69241],{"class":86},[76,73254,69135],{"class":51269},[76,73256,51276],{"class":86},[76,73258,73259,73261,73263,73265,73267,73269,73271,73273],{"class":78,"line":32862},[76,73260,55203],{"class":86},[76,73262,69135],{"class":51269},[76,73264,66620],{"class":1927},[76,73266,133],{"class":86},[76,73268,69258],{"class":192},[76,73270,69261],{"class":86},[76,73272,69135],{"class":51269},[76,73274,51276],{"class":86},[76,73276,73277,73279,73281,73283,73285,73287,73289,73291],{"class":78,"line":32873},[76,73278,55203],{"class":86},[76,73280,69135],{"class":51269},[76,73282,66620],{"class":1927},[76,73284,133],{"class":86},[76,73286,69278],{"class":192},[76,73288,69281],{"class":86},[76,73290,69135],{"class":51269},[76,73292,51276],{"class":86},[76,73294,73295,73297,73299,73301,73303,73305,73307,73309],{"class":78,"line":32879},[76,73296,55203],{"class":86},[76,73298,69135],{"class":51269},[76,73300,66620],{"class":1927},[76,73302,133],{"class":86},[76,73304,69298],{"class":192},[76,73306,69301],{"class":86},[76,73308,69135],{"class":51269},[76,73310,51276],{"class":86},[76,73312,73313,73315,73317,73319,73321,73323,73325,73327],{"class":78,"line":32898},[76,73314,55203],{"class":86},[76,73316,69135],{"class":51269},[76,73318,66620],{"class":1927},[76,73320,133],{"class":86},[76,73322,69318],{"class":192},[76,73324,69321],{"class":86},[76,73326,69135],{"class":51269},[76,73328,51276],{"class":86},[76,73330,73331,73333,73335],{"class":78,"line":32904},[76,73332,51745],{"class":86},[76,73334,69113],{"class":51269},[76,73336,51276],{"class":86},[76,73338,73339,73341,73343],{"class":78,"line":32915},[76,73340,51310],{"class":86},[76,73342,53856],{"class":51269},[76,73344,51276],{"class":86},[76,73346,73347,73349,73351,73354,73356,73359,73361],{"class":78,"line":32921},[76,73348,55203],{"class":86},[76,73350,76],{"class":51269},[76,73352,73353],{"class":86},">+\u003C\u002F",[76,73355,76],{"class":51269},[76,73357,73358],{"class":86},">添加\u003C\u002F",[76,73360,53856],{"class":51269},[76,73362,51276],{"class":86},[76,73364,73365,73367,73369],{"class":78,"line":32941},[76,73366,52386],{"class":86},[76,73368,66594],{"class":51269},[76,73370,51276],{"class":86},[76,73372,73373,73375,73377,73379,73381,73383,73386,73388,73391,73393,73396,73398],{"class":78,"line":32957},[76,73374,52113],{"class":86},[76,73376,51580],{"class":51269},[76,73378,53455],{"class":1927},[76,73380,133],{"class":86},[76,73382,62549],{"class":192},[76,73384,73385],{"class":86},">共有数据 \u003C",[76,73387,76],{"class":51269},[76,73389,73390],{"class":86},">0\u003C\u002F",[76,73392,76],{"class":51269},[76,73394,73395],{"class":86},"> 条\u003C\u002F",[76,73397,51580],{"class":51269},[76,73399,51276],{"class":86},[76,73401,73402,73404,73406],{"class":78,"line":32963},[76,73403,52113],{"class":86},[76,73405,225],{"class":51269},[76,73407,51276],{"class":86},[76,73409,73410,73412,73414],{"class":78,"line":32977},[76,73411,51310],{"class":86},[76,73413,228],{"class":51269},[76,73415,51276],{"class":86},[76,73417,73418,73420,73422],{"class":78,"line":32983},[76,73419,55203],{"class":86},[76,73421,231],{"class":51269},[76,73423,51276],{"class":86},[76,73425,73426,73428,73430,73433,73435],{"class":78,"line":32989},[76,73427,55271],{"class":86},[76,73429,234],{"class":51269},[76,73431,73432],{"class":86},">ID\u003C\u002F",[76,73434,234],{"class":51269},[76,73436,51276],{"class":86},[76,73438,73439,73441,73443,73445,73447],{"class":78,"line":33000},[76,73440,55271],{"class":86},[76,73442,234],{"class":51269},[76,73444,69424],{"class":86},[76,73446,234],{"class":51269},[76,73448,51276],{"class":86},[76,73450,73451,73453,73455,73457,73459],{"class":78,"line":33006},[76,73452,55271],{"class":86},[76,73454,234],{"class":51269},[76,73456,69437],{"class":86},[76,73458,234],{"class":51269},[76,73460,51276],{"class":86},[76,73462,73463,73465,73467,73469,73471],{"class":78,"line":33012},[76,73464,55271],{"class":86},[76,73466,234],{"class":51269},[76,73468,69450],{"class":86},[76,73470,234],{"class":51269},[76,73472,51276],{"class":86},[76,73474,73475,73477,73479,73481,73483],{"class":78,"line":33022},[76,73476,55271],{"class":86},[76,73478,234],{"class":51269},[76,73480,69463],{"class":86},[76,73482,234],{"class":51269},[76,73484,51276],{"class":86},[76,73486,73487,73489,73491,73493,73495],{"class":78,"line":33028},[76,73488,55271],{"class":86},[76,73490,234],{"class":51269},[76,73492,69476],{"class":86},[76,73494,234],{"class":51269},[76,73496,51276],{"class":86},[76,73498,73499,73501,73503,73506,73508],{"class":78,"line":33039},[76,73500,55271],{"class":86},[76,73502,234],{"class":51269},[76,73504,73505],{"class":86},">录入时间\u003C\u002F",[76,73507,234],{"class":51269},[76,73509,51276],{"class":86},[76,73511,73512,73514,73516,73518,73520],{"class":78,"line":33045},[76,73513,55271],{"class":86},[76,73515,234],{"class":51269},[76,73517,69489],{"class":86},[76,73519,234],{"class":51269},[76,73521,51276],{"class":86},[76,73523,73524,73526,73528],{"class":78,"line":33055},[76,73525,55376],{"class":86},[76,73527,231],{"class":51269},[76,73529,51276],{"class":86},[76,73531,73532,73534,73536],{"class":78,"line":33060},[76,73533,51745],{"class":86},[76,73535,228],{"class":51269},[76,73537,51276],{"class":86},[76,73539,73540,73542,73544],{"class":78,"line":33066},[76,73541,51310],{"class":86},[76,73543,272],{"class":51269},[76,73545,51276],{"class":86},[76,73547,73548],{"class":78,"line":33115},[76,73549,73550],{"class":146},"      \u003C!-- \u003Ctr>\n",[76,73552,73553],{"class":78,"line":33162},[76,73554,73555],{"class":146},"        \u003Ctd>1\u003C\u002Ftd>\n",[76,73557,73558],{"class":78,"line":33167},[76,73559,73555],{"class":146},[76,73561,73562],{"class":78,"line":33173},[76,73563,73555],{"class":146},[76,73565,73566],{"class":78,"line":33192},[76,73567,73555],{"class":146},[76,73569,73570],{"class":78,"line":33198},[76,73571,73555],{"class":146},[76,73573,73574],{"class":78,"line":33218},[76,73575,73555],{"class":146},[76,73577,73578],{"class":78,"line":33224},[76,73579,73555],{"class":146},[76,73581,73582],{"class":78,"line":33230},[76,73583,73584],{"class":146},"        \u003Ctd>\n",[76,73586,73587],{"class":78,"line":33240},[76,73588,73589],{"class":146},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[76,73591,73592],{"class":78,"line":33245},[76,73593,73594],{"class":146},"        \u003C\u002Ftd>\n",[76,73596,73597],{"class":78,"line":33251},[76,73598,73599],{"class":146},"      \u003C\u002Ftr> -->\n",[76,73601,73602,73604,73606],{"class":78,"line":33267},[76,73603,51745],{"class":86},[76,73605,272],{"class":51269},[76,73607,51276],{"class":86},[76,73609,73610,73612,73614],{"class":78,"line":33312},[76,73611,52386],{"class":86},[76,73613,225],{"class":51269},[76,73615,51276],{"class":86},[76,73617,73618,73620,73622],{"class":78,"line":33318},[76,73619,52113],{"class":86},[76,73621,51782],{"class":51269},[76,73623,51276],{"class":86},[76,73625,73626],{"class":78,"line":33324},[76,73627,73628],{"class":146},"    \u002F\u002F const initData = [{\n",[76,73630,73631],{"class":78,"line":33330},[76,73632,73633],{"class":146},"    \u002F\u002F   unameId: 1,\n",[76,73635,73636],{"class":78,"line":33341},[76,73637,73638],{"class":146},"    \u002F\u002F   uname: '华晨宇',\n",[76,73640,73641],{"class":78,"line":33347},[76,73642,73643],{"class":146},"    \u002F\u002F   age: 22,\n",[76,73645,73646],{"class":78,"line":33353},[76,73647,73648],{"class":146},"    \u002F\u002F   salary: 12000,\n",[76,73650,73651],{"class":78,"line":33359},[76,73652,73653],{"class":146},"    \u002F\u002F   gender: '男',\n",[76,73655,73656],{"class":78,"line":33377},[76,73657,73658],{"class":146},"    \u002F\u002F   city: '北京',\n",[76,73660,73661],{"class":78,"line":33391},[76,73662,73663],{"class":146},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[76,73665,73666],{"class":78,"line":33400},[76,73667,73668],{"class":146},"    \u002F\u002F }]\n",[76,73670,73671],{"class":78,"line":33409},[76,73672,73673],{"class":146},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[76,73675,73676],{"class":78,"line":33418},[76,73677,73678],{"class":146},"    \u002F\u002F 1.渲染业务\n",[76,73680,73681],{"class":78,"line":33427},[76,73682,73683],{"class":146},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[76,73685,73686],{"class":78,"line":33433},[76,73687,73688],{"class":146},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[76,73690,73691],{"class":78,"line":33439},[76,73692,73693],{"class":146},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[76,73695,73696],{"class":78,"line":33447},[76,73697,2365],{"emptyLinePlaceholder":2364},[76,73699,73700],{"class":78,"line":33452},[76,73701,73702],{"class":146},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[76,73704,73705],{"class":78,"line":33458},[76,73706,73707],{"class":146},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[76,73709,73710,73712,73714,73716],{"class":78,"line":33469},[76,73711,11188],{"class":82},[76,73713,57664],{"class":136},[76,73715,13531],{"class":82},[76,73717,51807],{"class":86},[76,73719,73720,73723,73725],{"class":78,"line":33475},[76,73721,73722],{"class":86},"    console.",[76,73724,58216],{"class":1927},[76,73726,52381],{"class":86},[76,73728,73729],{"class":78,"line":33495},[76,73730,2365],{"emptyLinePlaceholder":2364},[76,73732,73733],{"class":78,"line":33501},[76,73734,73735],{"class":146},"    \u002F\u002F 时间函数\n",[76,73737,73738,73740,73743],{"class":78,"line":33507},[76,73739,70053],{"class":82},[76,73741,73742],{"class":1927}," getTime",[76,73744,10820],{"class":86},[76,73746,73747,73749,73752,73754,73756,73759],{"class":78,"line":33513},[76,73748,58197],{"class":82},[76,73750,73751],{"class":136}," date",[76,73753,13531],{"class":82},[76,73755,11545],{"class":82},[76,73757,73758],{"class":1927}," Date",[76,73760,1940],{"class":86},[76,73762,73763,73765,73767,73769,73772,73775,73777,73779,73781,73784,73787,73789,73791,73793,73795,73797,73799,73801],{"class":78,"line":33530},[76,73764,58197],{"class":82},[76,73766,16058],{"class":136},[76,73768,13531],{"class":82},[76,73770,73771],{"class":86}," date.",[76,73773,73774],{"class":1927},"getHours",[76,73776,13017],{"class":86},[76,73778,998],{"class":82},[76,73780,2002],{"class":136},[76,73782,73783],{"class":82}," ?",[76,73785,73786],{"class":192}," '0'",[76,73788,45535],{"class":82},[76,73790,73771],{"class":86},[76,73792,73774],{"class":1927},[76,73794,13017],{"class":86},[76,73796,947],{"class":82},[76,73798,73771],{"class":86},[76,73800,73774],{"class":1927},[76,73802,1940],{"class":86},[76,73804,73805,73807,73810,73812,73814,73817,73819,73821,73823,73825,73827,73829,73831,73833,73835,73837,73839,73841],{"class":78,"line":33536},[76,73806,58197],{"class":82},[76,73808,73809],{"class":136}," m",[76,73811,13531],{"class":82},[76,73813,73771],{"class":86},[76,73815,73816],{"class":1927},"getMinutes",[76,73818,13017],{"class":86},[76,73820,998],{"class":82},[76,73822,2002],{"class":136},[76,73824,73783],{"class":82},[76,73826,73786],{"class":192},[76,73828,45535],{"class":82},[76,73830,73771],{"class":86},[76,73832,73816],{"class":1927},[76,73834,13017],{"class":86},[76,73836,947],{"class":82},[76,73838,73771],{"class":86},[76,73840,73816],{"class":1927},[76,73842,1940],{"class":86},[76,73844,73845,73847,73849,73851,73853,73856,73858,73860,73862,73864,73866,73868,73870,73872,73874,73876,73878,73880],{"class":78,"line":33542},[76,73846,58197],{"class":82},[76,73848,8395],{"class":136},[76,73850,13531],{"class":82},[76,73852,73771],{"class":86},[76,73854,73855],{"class":1927},"getSeconds",[76,73857,13017],{"class":86},[76,73859,998],{"class":82},[76,73861,2002],{"class":136},[76,73863,73783],{"class":82},[76,73865,73786],{"class":192},[76,73867,45535],{"class":82},[76,73869,73771],{"class":86},[76,73871,73855],{"class":1927},[76,73873,13017],{"class":86},[76,73875,947],{"class":82},[76,73877,73771],{"class":86},[76,73879,73855],{"class":1927},[76,73881,1940],{"class":86},[76,73883,73884,73886,73889,73891,73893,73896,73898,73901,73903,73906,73908,73910,73913,73915,73917,73919,73921,73923,73925,73928,73930,73933,73935,73938,73940,73942,73944],{"class":78,"line":33548},[76,73885,58197],{"class":82},[76,73887,73888],{"class":136}," str",[76,73890,13531],{"class":82},[76,73892,62872],{"class":192},[76,73894,73895],{"class":86},"date",[76,73897,646],{"class":192},[76,73899,73900],{"class":1927},"getFullYear",[76,73902,2392],{"class":192},[76,73904,73905],{"class":192},"}\u002F${",[76,73907,73895],{"class":86},[76,73909,646],{"class":192},[76,73911,73912],{"class":1927},"getMonth",[76,73914,13017],{"class":192},[76,73916,569],{"class":82},[76,73918,25087],{"class":136},[76,73920,73905],{"class":192},[76,73922,73895],{"class":86},[76,73924,646],{"class":192},[76,73926,73927],{"class":1927},"getDate",[76,73929,2392],{"class":192},[76,73931,73932],{"class":192},"} ${",[76,73934,503],{"class":86},[76,73936,73937],{"class":192},"}:${",[76,73939,632],{"class":86},[76,73941,73937],{"class":192},[76,73943,783],{"class":86},[76,73945,73946],{"class":192},"}`\n",[76,73948,73949,73952],{"class":78,"line":33554},[76,73950,73951],{"class":82},"      return",[76,73953,73954],{"class":86}," str\n",[76,73956,73957],{"class":78,"line":33560},[76,73958,2151],{"class":86},[76,73960,73961],{"class":78,"line":33587},[76,73962,73963],{"class":146},"    \u002F\u002F 渲染函数\n",[76,73965,73966,73968,73970,73972,73974,73976,73978,73980],{"class":78,"line":33611},[76,73967,11188],{"class":82},[76,73969,69716],{"class":136},[76,73971,13531],{"class":82},[76,73973,54365],{"class":86},[76,73975,54368],{"class":1927},[76,73977,87],{"class":86},[76,73979,69727],{"class":192},[76,73981,93],{"class":86},[76,73983,73984,73986,73988],{"class":78,"line":33617},[76,73985,70053],{"class":82},[76,73987,70056],{"class":1927},[76,73989,10820],{"class":86},[76,73991,73992],{"class":78,"line":33623},[76,73993,73994],{"class":146},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[76,73996,73997],{"class":78,"line":33629},[76,73998,73999],{"class":146},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[76,74001,74002,74004,74007,74009,74011,74014,74016,74018,74020,74023,74025,74028],{"class":78,"line":33640},[76,74003,58197],{"class":82},[76,74005,74006],{"class":136}," trArr",[76,74008,13531],{"class":82},[76,74010,51934],{"class":86},[76,74012,74013],{"class":1927},"map",[76,74015,87],{"class":86},[76,74017,54418],{"class":82},[76,74019,1622],{"class":86},[76,74021,74022],{"class":5183},"ele",[76,74024,12402],{"class":86},[76,74026,74027],{"class":5183},"index",[76,74029,12409],{"class":86},[76,74031,74032,74034],{"class":78,"line":33651},[76,74033,14719],{"class":82},[76,74035,70137],{"class":192},[76,74037,74038],{"class":78,"line":33657},[76,74039,74040],{"class":192},"      \u003Ctr>\n",[76,74042,74043,74045,74047,74049,74052],{"class":78,"line":33674},[76,74044,70142],{"class":192},[76,74046,74022],{"class":86},[76,74048,646],{"class":192},[76,74050,74051],{"class":86},"unameId",[76,74053,70157],{"class":192},[76,74055,74056,74058,74060,74062,74064],{"class":78,"line":33697},[76,74057,70142],{"class":192},[76,74059,74022],{"class":86},[76,74061,646],{"class":192},[76,74063,70173],{"class":86},[76,74065,70157],{"class":192},[76,74067,74068,74070,74072,74074,74076],{"class":78,"line":33720},[76,74069,70142],{"class":192},[76,74071,74022],{"class":86},[76,74073,646],{"class":192},[76,74075,70190],{"class":86},[76,74077,70157],{"class":192},[76,74079,74080,74082,74084,74086,74088],{"class":78,"line":33726},[76,74081,70142],{"class":192},[76,74083,74022],{"class":86},[76,74085,646],{"class":192},[76,74087,70207],{"class":86},[76,74089,70157],{"class":192},[76,74091,74092,74094,74096,74098,74100],{"class":78,"line":33731},[76,74093,70142],{"class":192},[76,74095,74022],{"class":86},[76,74097,646],{"class":192},[76,74099,70224],{"class":86},[76,74101,70157],{"class":192},[76,74103,74104,74106,74108,74110,74112],{"class":78,"line":33740},[76,74105,70142],{"class":192},[76,74107,74022],{"class":86},[76,74109,646],{"class":192},[76,74111,70241],{"class":86},[76,74113,70157],{"class":192},[76,74115,74116,74118,74120,74122,74124],{"class":78,"line":33750},[76,74117,70142],{"class":192},[76,74119,74022],{"class":86},[76,74121,646],{"class":192},[76,74123,2351],{"class":86},[76,74125,70157],{"class":192},[76,74127,74128],{"class":78,"line":33756},[76,74129,73584],{"class":192},[76,74131,74132,74135,74137],{"class":78,"line":33761},[76,74133,74134],{"class":192},"          \u003Ca href=\"#\" data-id=\"${",[76,74136,74027],{"class":86},[76,74138,74139],{"class":192},"}\">删除\u003C\u002Fa>\n",[76,74141,74142],{"class":78,"line":33767},[76,74143,73594],{"class":192},[76,74145,74146],{"class":78,"line":33780},[76,74147,74148],{"class":192},"      \u003C\u002Ftr>\n",[76,74150,74151],{"class":78,"line":33786},[76,74152,74153],{"class":192},"  `\n",[76,74155,74156],{"class":78,"line":33797},[76,74157,64784],{"class":86},[76,74159,74160,74162,74164],{"class":78,"line":33808},[76,74161,58213],{"class":86},[76,74163,58216],{"class":1927},[76,74165,74166],{"class":86},"(trArr)\n",[76,74168,74169],{"class":78,"line":33827},[76,74170,2365],{"emptyLinePlaceholder":2364},[76,74172,74173],{"class":78,"line":49487},[76,74174,74175],{"class":146},"      \u002F\u002F (2) 把数组转换为字符串join\n",[76,74177,74178],{"class":78,"line":49492},[76,74179,74180],{"class":146},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[76,74182,74183,74185,74187,74190,74193,74195,74198],{"class":78,"line":49501},[76,74184,70068],{"class":86},[76,74186,133],{"class":82},[76,74188,74189],{"class":86}," trArr.",[76,74191,74192],{"class":1927},"join",[76,74194,87],{"class":86},[76,74196,74197],{"class":192},"''",[76,74199,93],{"class":86},[76,74201,74202],{"class":78,"line":49510},[76,74203,74204],{"class":146},"      \u002F\u002F 显示共有几条\n",[76,74206,74207,74209,74211,74213,74216,74219,74221,74223],{"class":78,"line":49515},[76,74208,55740],{"class":86},[76,74210,54368],{"class":1927},[76,74212,87],{"class":86},[76,74214,74215],{"class":192},"'.total span'",[76,74217,74218],{"class":86},").innerHTML ",[76,74220,133],{"class":82},[76,74222,51934],{"class":86},[76,74224,55800],{"class":136},[76,74226,74227],{"class":78,"line":49520},[76,74228,2151],{"class":86},[76,74230,74231],{"class":78,"line":49525},[76,74232,74233],{"class":146},"    \u002F\u002F render()\n",[76,74235,74236],{"class":78,"line":49538},[76,74237,2365],{"emptyLinePlaceholder":2364},[76,74239,74240],{"class":78,"line":49543},[76,74241,74242],{"class":146},"    \u002F\u002F 获取DOM对象\n",[76,74244,74245,74247,74249,74251,74253,74255,74257,74259],{"class":78,"line":49552},[76,74246,11188],{"class":82},[76,74248,69790],{"class":136},[76,74250,13531],{"class":82},[76,74252,54365],{"class":86},[76,74254,54368],{"class":1927},[76,74256,87],{"class":86},[76,74258,69801],{"class":192},[76,74260,93],{"class":86},[76,74262,74263,74265,74267,74269,74271,74273,74275,74277],{"class":78,"line":49561},[76,74264,11188],{"class":82},[76,74266,69617],{"class":136},[76,74268,13531],{"class":82},[76,74270,54365],{"class":86},[76,74272,54368],{"class":1927},[76,74274,87],{"class":86},[76,74276,69628],{"class":192},[76,74278,93],{"class":86},[76,74280,74281,74283,74285,74287,74289,74291,74293,74295],{"class":78,"line":49578},[76,74282,11188],{"class":82},[76,74284,15656],{"class":136},[76,74286,13531],{"class":82},[76,74288,54365],{"class":86},[76,74290,54368],{"class":1927},[76,74292,87],{"class":86},[76,74294,69647],{"class":192},[76,74296,93],{"class":86},[76,74298,74300,74302,74304,74306,74308,74310,74312,74314],{"class":78,"line":74299},231,[76,74301,11188],{"class":82},[76,74303,69676],{"class":136},[76,74305,13531],{"class":82},[76,74307,54365],{"class":86},[76,74309,54368],{"class":1927},[76,74311,87],{"class":86},[76,74313,69687],{"class":192},[76,74315,93],{"class":86},[76,74317,74319,74321,74323,74325,74327,74329,74331,74333],{"class":78,"line":74318},232,[76,74320,11188],{"class":82},[76,74322,69656],{"class":136},[76,74324,13531],{"class":82},[76,74326,54365],{"class":86},[76,74328,54368],{"class":1927},[76,74330,87],{"class":86},[76,74332,69667],{"class":192},[76,74334,93],{"class":86},[76,74336,74338,74340,74342,74344,74346,74348,74350,74352],{"class":78,"line":74337},233,[76,74339,11188],{"class":82},[76,74341,69696],{"class":136},[76,74343,13531],{"class":82},[76,74345,54365],{"class":86},[76,74347,54368],{"class":1927},[76,74349,87],{"class":86},[76,74351,69707],{"class":192},[76,74353,93],{"class":86},[76,74355,74357],{"class":78,"line":74356},234,[76,74358,2365],{"emptyLinePlaceholder":2364},[76,74360,74362],{"class":78,"line":74361},235,[76,74363,74364],{"class":146},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[76,74366,74368,74370,74372,74374,74376,74378,74380,74382,74384],{"class":78,"line":74367},236,[76,74369,69808],{"class":86},[76,74371,57782],{"class":1927},[76,74373,87],{"class":86},[76,74375,69815],{"class":192},[76,74377,12402],{"class":86},[76,74379,54418],{"class":82},[76,74381,1622],{"class":86},[76,74383,162],{"class":5183},[76,74385,12409],{"class":86},[76,74387,74389],{"class":78,"line":74388},237,[76,74390,74391],{"class":146},"      \u002F\u002F 禁止浏览器跳转\n",[76,74393,74395,74397,74399],{"class":78,"line":74394},238,[76,74396,69835],{"class":86},[76,74398,69838],{"class":1927},[76,74400,1940],{"class":86},[76,74402,74404],{"class":78,"line":74403},239,[76,74405,74406],{"class":146},"      \u002F\u002F 非空判断\n",[76,74408,74410],{"class":78,"line":74409},240,[76,74411,74412],{"class":146},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[76,74414,74416],{"class":78,"line":74415},241,[76,74417,74418],{"class":146},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[76,74420,74422,74424,74426,74428,74431,74433,74436,74439,74441,74443],{"class":78,"line":74421},242,[76,74423,54449],{"class":82},[76,74425,1622],{"class":86},[76,74427,314],{"class":82},[76,74429,74430],{"class":86},"uname.value ",[76,74432,71326],{"class":82},[76,74434,74435],{"class":82}," !",[76,74437,74438],{"class":86},"age.value ",[76,74440,71326],{"class":82},[76,74442,74435],{"class":82},[76,74444,74445],{"class":86},"salary.value) {\n",[76,74447,74449,74451,74453,74455,74457],{"class":78,"line":74448},243,[76,74450,14719],{"class":82},[76,74452,69909],{"class":1927},[76,74454,87],{"class":86},[76,74456,69914],{"class":192},[76,74458,93],{"class":86},[76,74460,74462],{"class":78,"line":74461},244,[76,74463,52367],{"class":86},[76,74465,74467,74469,74471],{"class":78,"line":74466},245,[76,74468,57976],{"class":86},[76,74470,51853],{"class":1927},[76,74472,74473],{"class":86},"({\n",[76,74475,74477],{"class":78,"line":74476},246,[76,74478,74479],{"class":146},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[76,74481,74483],{"class":78,"line":74482},247,[76,74484,74485],{"class":146},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[76,74487,74489],{"class":78,"line":74488},248,[76,74490,74491],{"class":146},"        \u002F\u002F 对象的序号应为数组长度+1\n",[76,74493,74495],{"class":78,"line":74494},249,[76,74496,74497],{"class":146},"        \u002F\u002F unameId: arr.length + 1,\n",[76,74499,74501],{"class":78,"line":74500},250,[76,74502,2365],{"emptyLinePlaceholder":2364},[76,74504,74506],{"class":78,"line":74505},251,[76,74507,74508],{"class":146},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[76,74510,74512],{"class":78,"line":74511},252,[76,74513,74514],{"class":146},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[76,74516,74518],{"class":78,"line":74517},253,[76,74519,74520],{"class":146},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[76,74522,74524],{"class":78,"line":74523},254,[76,74525,74526],{"class":146},"        \u002F\u002F 0当假看\n",[76,74528,74530,74533,74535,74537,74540,74542,74544,74546,74549,74551,74553,74556,74558],{"class":78,"line":74529},255,[76,74531,74532],{"class":86},"        unameId: arr.",[76,74534,51937],{"class":136},[76,74536,73783],{"class":82},[76,74538,74539],{"class":86}," arr[arr.",[76,74541,51937],{"class":136},[76,74543,52240],{"class":82},[76,74545,25087],{"class":136},[76,74547,74548],{"class":86},"].unameId ",[76,74550,569],{"class":82},[76,74552,25087],{"class":136},[76,74554,74555],{"class":82}," :",[76,74557,25087],{"class":136},[76,74559,31435],{"class":86},[76,74561,74563],{"class":78,"line":74562},256,[76,74564,69962],{"class":86},[76,74566,74568],{"class":78,"line":74567},257,[76,74569,69967],{"class":86},[76,74571,74573],{"class":78,"line":74572},258,[76,74574,69977],{"class":86},[76,74576,74578],{"class":78,"line":74577},259,[76,74579,69972],{"class":86},[76,74581,74583],{"class":78,"line":74582},260,[76,74584,74585],{"class":86},"        city: city.value,\n",[76,74587,74589],{"class":78,"line":74588},261,[76,74590,74591],{"class":146},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[76,74593,74595],{"class":78,"line":74594},262,[76,74596,74597],{"class":146},"        \u002F\u002F time: new Date().toDateString()\n",[76,74599,74601,74604,74607],{"class":78,"line":74600},263,[76,74602,74603],{"class":86},"        time: ",[76,74605,74606],{"class":1927},"getTime",[76,74608,1940],{"class":86},[76,74610,74612],{"class":78,"line":74611},264,[76,74613,64784],{"class":86},[76,74615,74617],{"class":78,"line":74616},265,[76,74618,74619],{"class":146},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[76,74621,74623,74625],{"class":78,"line":74622},266,[76,74624,70037],{"class":1927},[76,74626,1940],{"class":86},[76,74628,74630,74632,74634,74636,74638],{"class":78,"line":74629},267,[76,74631,70020],{"class":136},[76,74633,646],{"class":86},[76,74635,70025],{"class":1927},[76,74637,13017],{"class":86},[76,74639,74640],{"class":146},"\u002F\u002F重置表单\n",[76,74642,74644],{"class":78,"line":74643},268,[76,74645,74646],{"class":146},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[76,74648,74650,74653,74655,74657,74660,74662,74664,74666,74668],{"class":78,"line":74649},269,[76,74651,74652],{"class":86},"      localStorage.",[76,74654,71623],{"class":1927},[76,74656,87],{"class":86},[76,74658,74659],{"class":192},"'data'",[76,74661,12402],{"class":86},[76,74663,71633],{"class":136},[76,74665,646],{"class":86},[76,74667,71638],{"class":1927},[76,74669,74670],{"class":86},"(arr))\n",[76,74672,74674],{"class":78,"line":74673},270,[76,74675,33430],{"class":86},[76,74677,74679],{"class":78,"line":74678},271,[76,74680,2365],{"emptyLinePlaceholder":2364},[76,74682,74684],{"class":78,"line":74683},272,[76,74685,74686],{"class":146},"    \u002F\u002F 3.删除业务\n",[76,74688,74690],{"class":78,"line":74689},273,[76,74691,74692],{"class":146},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[76,74694,74696,74698,74700,74702,74704,74706,74708,74710,74712],{"class":78,"line":74695},274,[76,74697,70310],{"class":86},[76,74699,57782],{"class":1927},[76,74701,87],{"class":86},[76,74703,57787],{"class":192},[76,74705,12402],{"class":86},[76,74707,54418],{"class":82},[76,74709,1622],{"class":86},[76,74711,162],{"class":5183},[76,74713,12409],{"class":86},[76,74715,74717],{"class":78,"line":74716},275,[76,74718,74719],{"class":146},"      \u002F\u002F 判断是否点击的是删除按钮\n",[76,74721,74723,74725,74727,74729,74731],{"class":78,"line":74722},276,[76,74724,54449],{"class":82},[76,74726,67003],{"class":86},[76,74728,54455],{"class":82},[76,74730,68225],{"class":192},[76,74732,12409],{"class":86},[76,74734,74736],{"class":78,"line":74735},277,[76,74737,74738],{"class":146},"        \u002F\u002F alert(1)\n",[76,74740,74742],{"class":78,"line":74741},278,[76,74743,74744],{"class":146},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[76,74746,74748],{"class":78,"line":74747},279,[76,74749,74750],{"class":146},"        \u002F\u002F console.log(e.target)\n",[76,74752,74754],{"class":78,"line":74753},280,[76,74755,74756],{"class":146},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[76,74758,74760],{"class":78,"line":74759},281,[76,74761,2365],{"emptyLinePlaceholder":2364},[76,74763,74765],{"class":78,"line":74764},282,[76,74766,74767],{"class":146},"        \u002F\u002F 确认框，确然是否真的要删除\n",[76,74769,74771],{"class":78,"line":74770},283,[76,74772,74773],{"class":146},"        \u002F\u002F confirm()为确认框\n",[76,74775,74777],{"class":78,"line":74776},284,[76,74778,74779],{"class":146},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[76,74781,74783,74785,74787,74790,74792,74795],{"class":78,"line":74782},285,[76,74784,2462],{"class":82},[76,74786,1622],{"class":86},[76,74788,74789],{"class":1927},"confirm",[76,74791,87],{"class":86},[76,74793,74794],{"class":192},"'您确定要删除这条数据吗？'",[76,74796,74797],{"class":86},")) {\n",[76,74799,74801,74804,74806,74808,74810],{"class":78,"line":74800},286,[76,74802,74803],{"class":86},"          arr.",[76,74805,57979],{"class":1927},[76,74807,70363],{"class":86},[76,74809,305],{"class":136},[76,74811,93],{"class":86},[76,74813,74815],{"class":78,"line":74814},287,[76,74816,74817],{"class":146},"          \u002F\u002F 3.4 重新渲染页面\n",[76,74819,74821,74824],{"class":78,"line":74820},288,[76,74822,74823],{"class":1927},"          render",[76,74825,1940],{"class":86},[76,74827,74829],{"class":78,"line":74828},289,[76,74830,74831],{"class":146},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[76,74833,74835,74838,74840,74842,74844,74846,74848,74850,74852],{"class":78,"line":74834},290,[76,74836,74837],{"class":86},"          localStorage.",[76,74839,71623],{"class":1927},[76,74841,87],{"class":86},[76,74843,74659],{"class":192},[76,74845,12402],{"class":86},[76,74847,71633],{"class":136},[76,74849,646],{"class":86},[76,74851,71638],{"class":1927},[76,74853,74670],{"class":86},[76,74855,74857],{"class":78,"line":74856},291,[76,74858,2494],{"class":86},[76,74860,74862],{"class":78,"line":74861},292,[76,74863,52367],{"class":86},[76,74865,74867],{"class":78,"line":74866},293,[76,74868,2365],{"emptyLinePlaceholder":2364},[76,74870,74872],{"class":78,"line":74871},294,[76,74873,33430],{"class":86},[76,74875,74877],{"class":78,"line":74876},295,[76,74878,2365],{"emptyLinePlaceholder":2364},[76,74880,74882,74884,74886],{"class":78,"line":74881},296,[76,74883,52386],{"class":86},[76,74885,51782],{"class":51269},[76,74887,51276],{"class":86},[76,74889,74891,74893,74895],{"class":78,"line":74890},297,[76,74892,51754],{"class":86},[76,74894,51769],{"class":51269},[76,74896,51276],{"class":86},[76,74898,74900],{"class":78,"line":74899},298,[76,74901,2365],{"emptyLinePlaceholder":2364},[76,74903,74905,74907,74909],{"class":78,"line":74904},299,[76,74906,51754],{"class":86},[76,74908,50604],{"class":51269},[76,74910,51276],{"class":86},[16,74912,74914],{"id":74913},"_36-正则表达式","3.6 正则表达式",[21,74916,74917],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[21,74919,74920],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[21,74922,74923],{},"正则表达式的作用：",[1095,74925,74926,74933,74939],{},[32,74927,74928,74929,74932],{},"表单验证（ ",[237,74930,74931],{},"匹配"," ）",[32,74934,74935,74936,74932],{},"过滤敏感词（ ",[237,74937,74938],{},"替换",[32,74940,74941,74942,74932],{},"字符串中提取我们想要的部分（ ",[237,74943,74944],{},"提取",[46,74946,74948],{"id":74947},"_361-语法","3.6.1 语法",[21,74950,74951],{},"正则表达式使用步骤：",[29,74953,74954,74957],{},[32,74955,74956],{},"定义规则",[32,74958,74959],{},"查找是否匹配",[21,74961,74962],{},"正则表达式里边不需要写引号",[21,74964,74965],{},[1426,74966],{"alt":71,"src":74967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[21,74969,74970],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[21,74972,74973],{},"reg.test(str)",[21,74975,74976],{},[1426,74977],{"alt":71,"src":74978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[21,74980,74981],{},[1426,74982],{"alt":71,"src":74983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[46,74985,74987],{"id":74986},"_362-元字符","3.6.2 元字符",[29,74989,74990,74993,74996,74999,75006],{},[32,74991,74992],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[32,74994,74995],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[32,74997,74998],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[32,75000,75001,75002],{},"正则验证工具：",[326,75003,75004],{"href":75004,"rel":75005},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23833],[32,75007,75008],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21965,75010,75012],{"id":75011},"_3621-边界符","3.6.2.1 边界符",[21,75014,75015],{},[1426,75016],{"alt":71,"src":75017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[21,75019,75020],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[21,75022,75023],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[21,75025,75026],{},"只匹配一次",[21,75028,75029],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21965,75031,75033],{"id":75032},"_3622-量词","3.6.2.2 量词",[21,75035,75036],{},[1426,75037],{"alt":71,"src":75038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[21,75040,75041],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21965,75043,75045],{"id":75044},"_3623-元字符","3.6.2.3 元字符",[21,75047,75048],{},[1426,75049],{"alt":71,"src":75050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[21,75052,75053],{},"匹配的是a或b或c []只选一个",[21,75055,75056],{},[1426,75057],{"alt":71,"src":75058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[21,75060,75061],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[21,75063,75064],{},[1426,75065],{"alt":71,"src":75066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[21,75068,75069],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[21,75071,75072],{},[1426,75073],{"alt":71,"src":75074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[66,75076,75078],{"className":50602,"code":75077,"language":50604,"meta":71,"style":71},"\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",[73,75079,75080,75090,75104,75108,75116,75130,75150,75162,75170,75174,75182,75190,75195,75226,75253,75281,75285,75290,75318,75349,75354,75359,75390,75422,75454,75458,75463,75494,75524,75554,75558,75563,75594,75625,75655,75685,75689,75694,75727,75731,75736,75767,75798,75802,75807,75838,75868,75899,75903,75908,75940,75971,76002,76029,76060,76092,76125,76156,76187,76219,76250,76258,76266,76270],{"__ignoreMap":71},[76,75081,75082,75084,75086,75088],{"class":78,"line":79},[76,75083,51266],{"class":86},[76,75085,51270],{"class":51269},[76,75087,51273],{"class":1927},[76,75089,51276],{"class":86},[76,75091,75092,75094,75096,75098,75100,75102],{"class":78,"line":96},[76,75093,998],{"class":86},[76,75095,50604],{"class":51269},[76,75097,51285],{"class":1927},[76,75099,133],{"class":86},[76,75101,51290],{"class":192},[76,75103,51276],{"class":86},[76,75105,75106],{"class":78,"line":1143},[76,75107,2365],{"emptyLinePlaceholder":2364},[76,75109,75110,75112,75114],{"class":78,"line":1158},[76,75111,998],{"class":86},[76,75113,51303],{"class":51269},[76,75115,51276],{"class":86},[76,75117,75118,75120,75122,75124,75126,75128],{"class":78,"line":1164},[76,75119,52113],{"class":86},[76,75121,51313],{"class":51269},[76,75123,51316],{"class":1927},[76,75125,133],{"class":86},[76,75127,51321],{"class":192},[76,75129,51276],{"class":86},[76,75131,75132,75134,75136,75138,75140,75142,75144,75146,75148],{"class":78,"line":1178},[76,75133,52113],{"class":86},[76,75135,51313],{"class":51269},[76,75137,14887],{"class":1927},[76,75139,133],{"class":86},[76,75141,51360],{"class":192},[76,75143,51340],{"class":1927},[76,75145,133],{"class":86},[76,75147,51367],{"class":192},[76,75149,51276],{"class":86},[76,75151,75152,75154,75156,75158,75160],{"class":78,"line":1184},[76,75153,52113],{"class":86},[76,75155,51376],{"class":51269},[76,75157,51379],{"class":86},[76,75159,51376],{"class":51269},[76,75161,51276],{"class":86},[76,75163,75164,75166,75168],{"class":78,"line":1275},[76,75165,51754],{"class":86},[76,75167,51303],{"class":51269},[76,75169,51276],{"class":86},[76,75171,75172],{"class":78,"line":1281},[76,75173,2365],{"emptyLinePlaceholder":2364},[76,75175,75176,75178,75180],{"class":78,"line":1293},[76,75177,998],{"class":86},[76,75179,51769],{"class":51269},[76,75181,51276],{"class":86},[76,75183,75184,75186,75188],{"class":78,"line":1576},[76,75185,52113],{"class":86},[76,75187,51782],{"class":51269},[76,75189,51276],{"class":86},[76,75191,75192],{"class":78,"line":1581},[76,75193,75194],{"class":146},"    \u002F\u002F 元字符中\n",[76,75196,75197,75199,75201,75203,75205,75208,75210,75212,75215,75217,75220,75223],{"class":78,"line":1587},[76,75198,73722],{"class":86},[76,75200,58216],{"class":1927},[76,75202,87],{"class":86},[76,75204,672],{"class":192},[76,75206,75207],{"class":47946},"哈",[76,75209,672],{"class":192},[76,75211,646],{"class":86},[76,75213,75214],{"class":1927},"test",[76,75216,87],{"class":86},[76,75218,75219],{"class":192},"'哈'",[76,75221,75222],{"class":86},"))  ",[76,75224,75225],{"class":146},"\u002F\u002Ftrue\n",[76,75227,75228,75230,75232,75234,75236,75238,75240,75242,75244,75246,75249,75251],{"class":78,"line":1592},[76,75229,73722],{"class":86},[76,75231,58216],{"class":1927},[76,75233,87],{"class":86},[76,75235,672],{"class":192},[76,75237,75207],{"class":47946},[76,75239,672],{"class":192},[76,75241,646],{"class":86},[76,75243,75214],{"class":1927},[76,75245,87],{"class":86},[76,75247,75248],{"class":192},"'哈哈'",[76,75250,75222],{"class":86},[76,75252,75225],{"class":146},[76,75254,75255,75257,75259,75261,75263,75265,75267,75269,75271,75273,75276,75279],{"class":78,"line":1606},[76,75256,73722],{"class":86},[76,75258,58216],{"class":1927},[76,75260,87],{"class":86},[76,75262,672],{"class":192},[76,75264,75207],{"class":47946},[76,75266,672],{"class":192},[76,75268,646],{"class":86},[76,75270,75214],{"class":1927},[76,75272,87],{"class":86},[76,75274,75275],{"class":192},"'二哈'",[76,75277,75278],{"class":86},"))   ",[76,75280,75225],{"class":146},[76,75282,75283],{"class":78,"line":1611},[76,75284,2365],{"emptyLinePlaceholder":2364},[76,75286,75287],{"class":78,"line":1617},[76,75288,75289],{"class":146},"    \u002F\u002F 1.边界符\n",[76,75291,75292,75294,75296,75298,75300,75302,75304,75306,75308,75310,75312,75314,75316],{"class":78,"line":1638},[76,75293,73722],{"class":86},[76,75295,58216],{"class":1927},[76,75297,87],{"class":86},[76,75299,672],{"class":192},[76,75301,1054],{"class":82},[76,75303,75207],{"class":47946},[76,75305,672],{"class":192},[76,75307,646],{"class":86},[76,75309,75214],{"class":1927},[76,75311,87],{"class":86},[76,75313,75219],{"class":192},[76,75315,75222],{"class":86},[76,75317,75225],{"class":146},[76,75319,75320,75322,75324,75326,75328,75330,75332,75334,75336,75338,75340,75342,75344,75346],{"class":78,"line":1643},[76,75321,73722],{"class":86},[76,75323,58216],{"class":1927},[76,75325,87],{"class":86},[76,75327,672],{"class":192},[76,75329,1054],{"class":82},[76,75331,75207],{"class":47946},[76,75333,390],{"class":82},[76,75335,672],{"class":192},[76,75337,646],{"class":86},[76,75339,75214],{"class":1927},[76,75341,87],{"class":86},[76,75343,75248],{"class":192},[76,75345,75222],{"class":86},[76,75347,75348],{"class":146},"\u002F\u002Ffalse\n",[76,75350,75351],{"class":78,"line":1657},[76,75352,75353],{"class":146},"    \u002F\u002F 2.量词\n",[76,75355,75356],{"class":78,"line":1662},[76,75357,75358],{"class":146},"    \u002F\u002F 量词 * 类似于 >= 0\n",[76,75360,75361,75363,75365,75367,75369,75371,75373,75376,75378,75380,75382,75384,75386,75388],{"class":78,"line":1691},[76,75362,73722],{"class":86},[76,75364,58216],{"class":1927},[76,75366,87],{"class":86},[76,75368,672],{"class":192},[76,75370,1054],{"class":82},[76,75372,75207],{"class":47946},[76,75374,75375],{"class":82},"*$",[76,75377,672],{"class":192},[76,75379,646],{"class":86},[76,75381,75214],{"class":1927},[76,75383,87],{"class":86},[76,75385,75248],{"class":192},[76,75387,75222],{"class":86},[76,75389,75225],{"class":146},[76,75391,75392,75394,75396,75398,75400,75402,75404,75406,75408,75410,75412,75414,75417,75419],{"class":78,"line":1696},[76,75393,73722],{"class":86},[76,75395,58216],{"class":1927},[76,75397,87],{"class":86},[76,75399,672],{"class":192},[76,75401,1054],{"class":82},[76,75403,75207],{"class":47946},[76,75405,75375],{"class":82},[76,75407,672],{"class":192},[76,75409,646],{"class":86},[76,75411,75214],{"class":1927},[76,75413,87],{"class":86},[76,75415,75416],{"class":192},"'二哈好傻'",[76,75418,75222],{"class":86},[76,75420,75421],{"class":146},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[76,75423,75424,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75446,75449,75451],{"class":78,"line":1713},[76,75425,73722],{"class":86},[76,75427,58216],{"class":1927},[76,75429,87],{"class":86},[76,75431,672],{"class":192},[76,75433,1054],{"class":82},[76,75435,75207],{"class":47946},[76,75437,75375],{"class":82},[76,75439,672],{"class":192},[76,75441,646],{"class":86},[76,75443,75214],{"class":1927},[76,75445,87],{"class":86},[76,75447,75448],{"class":192},"'哈好哈'",[76,75450,75278],{"class":86},[76,75452,75453],{"class":146},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[76,75455,75456],{"class":78,"line":1718},[76,75457,2365],{"emptyLinePlaceholder":2364},[76,75459,75460],{"class":78,"line":1723},[76,75461,75462],{"class":146},"    \u002F\u002F +类似于>=1\n",[76,75464,75465,75467,75469,75471,75473,75475,75477,75480,75482,75484,75486,75488,75490,75492],{"class":78,"line":1728},[76,75466,73722],{"class":86},[76,75468,58216],{"class":1927},[76,75470,87],{"class":86},[76,75472,672],{"class":192},[76,75474,1054],{"class":82},[76,75476,75207],{"class":47946},[76,75478,75479],{"class":82},"+$",[76,75481,672],{"class":192},[76,75483,646],{"class":86},[76,75485,75214],{"class":1927},[76,75487,87],{"class":86},[76,75489,75248],{"class":192},[76,75491,75222],{"class":86},[76,75493,75225],{"class":146},[76,75495,75496,75498,75500,75502,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522],{"class":78,"line":1742},[76,75497,73722],{"class":86},[76,75499,58216],{"class":1927},[76,75501,87],{"class":86},[76,75503,672],{"class":192},[76,75505,1054],{"class":82},[76,75507,75207],{"class":47946},[76,75509,75479],{"class":82},[76,75511,672],{"class":192},[76,75513,646],{"class":86},[76,75515,75214],{"class":1927},[76,75517,87],{"class":86},[76,75519,75416],{"class":192},[76,75521,75222],{"class":86},[76,75523,75421],{"class":146},[76,75525,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552],{"class":78,"line":1747},[76,75527,73722],{"class":86},[76,75529,58216],{"class":1927},[76,75531,87],{"class":86},[76,75533,672],{"class":192},[76,75535,1054],{"class":82},[76,75537,75207],{"class":47946},[76,75539,75479],{"class":82},[76,75541,672],{"class":192},[76,75543,646],{"class":86},[76,75545,75214],{"class":1927},[76,75547,87],{"class":86},[76,75549,75448],{"class":192},[76,75551,75278],{"class":86},[76,75553,75348],{"class":146},[76,75555,75556],{"class":78,"line":2542},[76,75557,2365],{"emptyLinePlaceholder":2364},[76,75559,75560],{"class":78,"line":2556},[76,75561,75562],{"class":146},"    \u002F\u002F ?类似于0次或一次\n",[76,75564,75565,75567,75569,75571,75573,75575,75578,75580,75582,75584,75586,75588,75590,75592],{"class":78,"line":2564},[76,75566,73722],{"class":86},[76,75568,58216],{"class":1927},[76,75570,87],{"class":86},[76,75572,672],{"class":192},[76,75574,1054],{"class":82},[76,75576,75577],{"class":47946},"哈？",[76,75579,390],{"class":82},[76,75581,672],{"class":192},[76,75583,646],{"class":86},[76,75585,75214],{"class":1927},[76,75587,87],{"class":86},[76,75589,74197],{"class":192},[76,75591,75278],{"class":86},[76,75593,75225],{"class":146},[76,75595,75596,75598,75600,75602,75604,75606,75608,75611,75613,75615,75617,75619,75621,75623],{"class":78,"line":2569},[76,75597,73722],{"class":86},[76,75599,58216],{"class":1927},[76,75601,87],{"class":86},[76,75603,672],{"class":192},[76,75605,1054],{"class":82},[76,75607,75207],{"class":47946},[76,75609,75610],{"class":82},"?$",[76,75612,672],{"class":192},[76,75614,646],{"class":86},[76,75616,75214],{"class":1927},[76,75618,87],{"class":86},[76,75620,75248],{"class":192},[76,75622,75222],{"class":86},[76,75624,75348],{"class":146},[76,75626,75627,75629,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653],{"class":78,"line":2575},[76,75628,73722],{"class":86},[76,75630,58216],{"class":1927},[76,75632,87],{"class":86},[76,75634,672],{"class":192},[76,75636,1054],{"class":82},[76,75638,75207],{"class":47946},[76,75640,75610],{"class":82},[76,75642,672],{"class":192},[76,75644,646],{"class":86},[76,75646,75214],{"class":1927},[76,75648,87],{"class":86},[76,75650,75416],{"class":192},[76,75652,75222],{"class":86},[76,75654,75421],{"class":146},[76,75656,75657,75659,75661,75663,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683],{"class":78,"line":2581},[76,75658,73722],{"class":86},[76,75660,58216],{"class":1927},[76,75662,87],{"class":86},[76,75664,672],{"class":192},[76,75666,1054],{"class":82},[76,75668,75207],{"class":47946},[76,75670,75610],{"class":82},[76,75672,672],{"class":192},[76,75674,646],{"class":86},[76,75676,75214],{"class":1927},[76,75678,87],{"class":86},[76,75680,75448],{"class":192},[76,75682,75222],{"class":86},[76,75684,75348],{"class":146},[76,75686,75687],{"class":78,"line":2586},[76,75688,2365],{"emptyLinePlaceholder":2364},[76,75690,75691],{"class":78,"line":7915},[76,75692,75693],{"class":146},"    \u002F\u002F {n}写几，就必须出现几次\n",[76,75695,75696,75698,75700,75702,75704,75706,75708,75711,75713,75715,75717,75719,75722,75725],{"class":78,"line":7939},[76,75697,73722],{"class":86},[76,75699,58216],{"class":1927},[76,75701,87],{"class":86},[76,75703,672],{"class":192},[76,75705,1054],{"class":82},[76,75707,75207],{"class":47946},[76,75709,75710],{"class":82},"{4}$",[76,75712,672],{"class":192},[76,75714,646],{"class":86},[76,75716,75214],{"class":1927},[76,75718,87],{"class":86},[76,75720,75721],{"class":192},"'哈哈哈哈'",[76,75723,75724],{"class":86},")) ",[76,75726,75225],{"class":146},[76,75728,75729],{"class":78,"line":7944},[76,75730,2365],{"emptyLinePlaceholder":2364},[76,75732,75733],{"class":78,"line":7950},[76,75734,75735],{"class":146},"    \u002F\u002F {n,}大于等于n次\n",[76,75737,75738,75740,75742,75744,75746,75748,75750,75753,75755,75757,75759,75761,75763,75765],{"class":78,"line":7977},[76,75739,73722],{"class":86},[76,75741,58216],{"class":1927},[76,75743,87],{"class":86},[76,75745,672],{"class":192},[76,75747,1054],{"class":82},[76,75749,75207],{"class":47946},[76,75751,75752],{"class":82},"{4,}$",[76,75754,672],{"class":192},[76,75756,646],{"class":86},[76,75758,75214],{"class":1927},[76,75760,87],{"class":86},[76,75762,75721],{"class":192},[76,75764,75724],{"class":86},[76,75766,75225],{"class":146},[76,75768,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787,75789,75791,75794,75796],{"class":78,"line":7982},[76,75770,73722],{"class":86},[76,75772,58216],{"class":1927},[76,75774,87],{"class":86},[76,75776,672],{"class":192},[76,75778,1054],{"class":82},[76,75780,75207],{"class":47946},[76,75782,75752],{"class":82},[76,75784,672],{"class":192},[76,75786,646],{"class":86},[76,75788,75214],{"class":1927},[76,75790,87],{"class":86},[76,75792,75793],{"class":192},"'哈哈哈哈哈'",[76,75795,75724],{"class":86},[76,75797,75225],{"class":146},[76,75799,75800],{"class":78,"line":7988},[76,75801,2365],{"emptyLinePlaceholder":2364},[76,75803,75804],{"class":78,"line":8000},[76,75805,75806],{"class":146},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[76,75808,75809,75811,75813,75815,75817,75819,75821,75824,75826,75828,75830,75832,75834,75836],{"class":78,"line":8012},[76,75810,73722],{"class":86},[76,75812,58216],{"class":1927},[76,75814,87],{"class":86},[76,75816,672],{"class":192},[76,75818,1054],{"class":82},[76,75820,75207],{"class":47946},[76,75822,75823],{"class":82},"{4,6}$",[76,75825,672],{"class":192},[76,75827,646],{"class":86},[76,75829,75214],{"class":1927},[76,75831,87],{"class":86},[76,75833,75721],{"class":192},[76,75835,75724],{"class":86},[76,75837,75225],{"class":146},[76,75839,75840,75842,75844,75846,75848,75850,75852,75854,75856,75858,75860,75862,75864,75866],{"class":78,"line":8024},[76,75841,73722],{"class":86},[76,75843,58216],{"class":1927},[76,75845,87],{"class":86},[76,75847,672],{"class":192},[76,75849,1054],{"class":82},[76,75851,75207],{"class":47946},[76,75853,75823],{"class":82},[76,75855,672],{"class":192},[76,75857,646],{"class":86},[76,75859,75214],{"class":1927},[76,75861,87],{"class":86},[76,75863,75793],{"class":192},[76,75865,75724],{"class":86},[76,75867,75225],{"class":146},[76,75869,75870,75872,75874,75876,75878,75880,75882,75884,75886,75888,75890,75892,75895,75897],{"class":78,"line":9683},[76,75871,73722],{"class":86},[76,75873,58216],{"class":1927},[76,75875,87],{"class":86},[76,75877,672],{"class":192},[76,75879,1054],{"class":82},[76,75881,75207],{"class":47946},[76,75883,75823],{"class":82},[76,75885,672],{"class":192},[76,75887,646],{"class":86},[76,75889,75214],{"class":1927},[76,75891,87],{"class":86},[76,75893,75894],{"class":192},"'哈哈哈哈哈哈哈'",[76,75896,75724],{"class":86},[76,75898,75348],{"class":146},[76,75900,75901],{"class":78,"line":9708},[76,75902,2365],{"emptyLinePlaceholder":2364},[76,75904,75905],{"class":78,"line":9731},[76,75906,75907],{"class":146},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[76,75909,75910,75912,75914,75916,75918,75920,75923,75925,75927,75929,75931,75933,75936,75938],{"class":78,"line":9755},[76,75911,73722],{"class":86},[76,75913,58216],{"class":1927},[76,75915,87],{"class":86},[76,75917,672],{"class":192},[76,75919,1054],{"class":82},[76,75921,75922],{"class":136},"[abc]",[76,75924,390],{"class":82},[76,75926,672],{"class":192},[76,75928,646],{"class":86},[76,75930,75214],{"class":1927},[76,75932,87],{"class":86},[76,75934,75935],{"class":192},"'a'",[76,75937,75222],{"class":86},[76,75939,75225],{"class":146},[76,75941,75942,75944,75946,75948,75950,75952,75954,75956,75958,75960,75962,75964,75967,75969],{"class":78,"line":9760},[76,75943,73722],{"class":86},[76,75945,58216],{"class":1927},[76,75947,87],{"class":86},[76,75949,672],{"class":192},[76,75951,1054],{"class":82},[76,75953,75922],{"class":136},[76,75955,390],{"class":82},[76,75957,672],{"class":192},[76,75959,646],{"class":86},[76,75961,75214],{"class":1927},[76,75963,87],{"class":86},[76,75965,75966],{"class":192},"'b'",[76,75968,75222],{"class":86},[76,75970,75225],{"class":146},[76,75972,75973,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993,75995,75998,76000],{"class":78,"line":9765},[76,75974,73722],{"class":86},[76,75976,58216],{"class":1927},[76,75978,87],{"class":86},[76,75980,672],{"class":192},[76,75982,1054],{"class":82},[76,75984,75922],{"class":136},[76,75986,390],{"class":82},[76,75988,672],{"class":192},[76,75990,646],{"class":86},[76,75992,75214],{"class":1927},[76,75994,87],{"class":86},[76,75996,75997],{"class":192},"'c'",[76,75999,75222],{"class":86},[76,76001,75225],{"class":146},[76,76003,76004,76006,76008,76010,76012,76014,76016,76018,76020,76022,76025,76027],{"class":78,"line":9770},[76,76005,73722],{"class":86},[76,76007,58216],{"class":1927},[76,76009,87],{"class":86},[76,76011,672],{"class":192},[76,76013,75922],{"class":136},[76,76015,672],{"class":192},[76,76017,646],{"class":86},[76,76019,75214],{"class":1927},[76,76021,87],{"class":86},[76,76023,76024],{"class":192},"'ab'",[76,76026,75222],{"class":86},[76,76028,75225],{"class":146},[76,76030,76031,76033,76035,76037,76039,76041,76043,76045,76047,76049,76051,76053,76055,76057],{"class":78,"line":9779},[76,76032,73722],{"class":86},[76,76034,58216],{"class":1927},[76,76036,87],{"class":86},[76,76038,672],{"class":192},[76,76040,1054],{"class":82},[76,76042,75922],{"class":136},[76,76044,390],{"class":82},[76,76046,672],{"class":192},[76,76048,646],{"class":86},[76,76050,75214],{"class":1927},[76,76052,87],{"class":86},[76,76054,76024],{"class":192},[76,76056,75222],{"class":86},[76,76058,76059],{"class":146},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[76,76061,76062,76064,76066,76068,76070,76072,76074,76077,76079,76081,76083,76085,76087,76089],{"class":78,"line":9784},[76,76063,73722],{"class":86},[76,76065,58216],{"class":1927},[76,76067,87],{"class":86},[76,76069,672],{"class":192},[76,76071,1054],{"class":82},[76,76073,75922],{"class":136},[76,76075,76076],{"class":82},"{2}$",[76,76078,672],{"class":192},[76,76080,646],{"class":86},[76,76082,75214],{"class":1927},[76,76084,87],{"class":86},[76,76086,76024],{"class":192},[76,76088,75222],{"class":86},[76,76090,76091],{"class":146},"\u002F\u002Ftrue   可以选两个\n",[76,76093,76094,76096,76098,76100,76102,76104,76107,76109,76111,76113,76115,76117,76120,76122],{"class":78,"line":9790},[76,76095,73722],{"class":86},[76,76097,58216],{"class":1927},[76,76099,87],{"class":86},[76,76101,672],{"class":192},[76,76103,1054],{"class":82},[76,76105,76106],{"class":136},"[a-z]",[76,76108,390],{"class":82},[76,76110,672],{"class":192},[76,76112,646],{"class":86},[76,76114,75214],{"class":1927},[76,76116,87],{"class":86},[76,76118,76119],{"class":192},"'p'",[76,76121,75278],{"class":86},[76,76123,76124],{"class":146},"\u002F\u002Ftrue   依然只能选一个\n",[76,76126,76127,76129,76131,76133,76135,76137,76140,76142,76144,76146,76148,76150,76152,76154],{"class":78,"line":9811},[76,76128,73722],{"class":86},[76,76130,58216],{"class":1927},[76,76132,87],{"class":86},[76,76134,672],{"class":192},[76,76136,1054],{"class":82},[76,76138,76139],{"class":136},"[A-Z]",[76,76141,390],{"class":82},[76,76143,672],{"class":192},[76,76145,646],{"class":86},[76,76147,75214],{"class":1927},[76,76149,87],{"class":86},[76,76151,76119],{"class":192},[76,76153,75278],{"class":86},[76,76155,75348],{"class":146},[76,76157,76158,76160,76162,76164,76166,76168,76170,76172,76174,76176,76178,76180,76183,76185],{"class":78,"line":9817},[76,76159,73722],{"class":86},[76,76161,58216],{"class":1927},[76,76163,87],{"class":86},[76,76165,672],{"class":192},[76,76167,1054],{"class":82},[76,76169,76139],{"class":136},[76,76171,390],{"class":82},[76,76173,672],{"class":192},[76,76175,646],{"class":86},[76,76177,75214],{"class":1927},[76,76179,87],{"class":86},[76,76181,76182],{"class":192},"'P'",[76,76184,75278],{"class":86},[76,76186,75225],{"class":146},[76,76188,76189,76191,76193,76195,76197,76199,76202,76204,76206,76208,76210,76212,76215,76217],{"class":78,"line":9831},[76,76190,73722],{"class":86},[76,76192,58216],{"class":1927},[76,76194,87],{"class":86},[76,76196,672],{"class":192},[76,76198,1054],{"class":82},[76,76200,76201],{"class":136},"[0-9]",[76,76203,390],{"class":82},[76,76205,672],{"class":192},[76,76207,646],{"class":86},[76,76209,75214],{"class":1927},[76,76211,87],{"class":86},[76,76213,76214],{"class":192},"'0'",[76,76216,75278],{"class":86},[76,76218,75225],{"class":146},[76,76220,76221,76223,76225,76227,76229,76231,76234,76236,76238,76240,76242,76244,76246,76248],{"class":78,"line":9837},[76,76222,73722],{"class":86},[76,76224,58216],{"class":1927},[76,76226,87],{"class":86},[76,76228,672],{"class":192},[76,76230,1054],{"class":82},[76,76232,76233],{"class":136},"[a-zA-Z0-9]",[76,76235,390],{"class":82},[76,76237,672],{"class":192},[76,76239,646],{"class":86},[76,76241,75214],{"class":1927},[76,76243,87],{"class":86},[76,76245,76119],{"class":192},[76,76247,75222],{"class":86},[76,76249,75225],{"class":146},[76,76251,76252,76254,76256],{"class":78,"line":9864},[76,76253,52386],{"class":86},[76,76255,51782],{"class":51269},[76,76257,51276],{"class":86},[76,76259,76260,76262,76264],{"class":78,"line":9873},[76,76261,51754],{"class":86},[76,76263,51769],{"class":51269},[76,76265,51276],{"class":86},[76,76267,76268],{"class":78,"line":9879},[76,76269,2365],{"emptyLinePlaceholder":2364},[76,76271,76272,76274,76276],{"class":78,"line":9887},[76,76273,51754],{"class":86},[76,76275,50604],{"class":51269},[76,76277,51276],{"class":86},[21965,76279,76281],{"id":76280},"_3624-修饰符","3.6.2.4 修饰符",[21,76283,76284],{},[1426,76285],{"alt":71,"src":76286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[21,76288,76289],{},"replace是个方法，使用的时候一定不要忘记括号()",[21,76291,76292],{},[1426,76293],{"alt":71,"src":76294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[66,76296,76298],{"className":50602,"code":76297,"language":50604,"meta":71,"style":71},"\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",[73,76299,76300,76310,76324,76332,76346,76366,76378,76386,76394,76402,76434,76465,76470,76502,76513,76546,76555,76563,76571],{"__ignoreMap":71},[76,76301,76302,76304,76306,76308],{"class":78,"line":79},[76,76303,51266],{"class":86},[76,76305,51270],{"class":51269},[76,76307,51273],{"class":1927},[76,76309,51276],{"class":86},[76,76311,76312,76314,76316,76318,76320,76322],{"class":78,"line":96},[76,76313,998],{"class":86},[76,76315,50604],{"class":51269},[76,76317,51285],{"class":1927},[76,76319,133],{"class":86},[76,76321,51290],{"class":192},[76,76323,51276],{"class":86},[76,76325,76326,76328,76330],{"class":78,"line":1143},[76,76327,998],{"class":86},[76,76329,51303],{"class":51269},[76,76331,51276],{"class":86},[76,76333,76334,76336,76338,76340,76342,76344],{"class":78,"line":1158},[76,76335,52113],{"class":86},[76,76337,51313],{"class":51269},[76,76339,51316],{"class":1927},[76,76341,133],{"class":86},[76,76343,51321],{"class":192},[76,76345,51276],{"class":86},[76,76347,76348,76350,76352,76354,76356,76358,76360,76362,76364],{"class":78,"line":1164},[76,76349,52113],{"class":86},[76,76351,51313],{"class":51269},[76,76353,14887],{"class":1927},[76,76355,133],{"class":86},[76,76357,51360],{"class":192},[76,76359,51340],{"class":1927},[76,76361,133],{"class":86},[76,76363,51367],{"class":192},[76,76365,51276],{"class":86},[76,76367,76368,76370,76372,76374,76376],{"class":78,"line":1178},[76,76369,52113],{"class":86},[76,76371,51376],{"class":51269},[76,76373,51379],{"class":86},[76,76375,51376],{"class":51269},[76,76377,51276],{"class":86},[76,76379,76380,76382,76384],{"class":78,"line":1184},[76,76381,51754],{"class":86},[76,76383,51303],{"class":51269},[76,76385,51276],{"class":86},[76,76387,76388,76390,76392],{"class":78,"line":1275},[76,76389,998],{"class":86},[76,76391,51769],{"class":51269},[76,76393,51276],{"class":86},[76,76395,76396,76398,76400],{"class":78,"line":1281},[76,76397,52113],{"class":86},[76,76399,51782],{"class":51269},[76,76401,51276],{"class":86},[76,76403,76404,76406,76408,76410,76412,76414,76417,76419,76421,76423,76425,76427,76430,76432],{"class":78,"line":1293},[76,76405,73722],{"class":86},[76,76407,58216],{"class":1927},[76,76409,87],{"class":86},[76,76411,672],{"class":192},[76,76413,1054],{"class":82},[76,76415,76416],{"class":47946},"java",[76,76418,390],{"class":82},[76,76420,672],{"class":192},[76,76422,646],{"class":86},[76,76424,75214],{"class":1927},[76,76426,87],{"class":86},[76,76428,76429],{"class":192},"'java'",[76,76431,75724],{"class":86},[76,76433,75225],{"class":146},[76,76435,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76461,76463],{"class":78,"line":1576},[76,76437,73722],{"class":86},[76,76439,58216],{"class":1927},[76,76441,87],{"class":86},[76,76443,672],{"class":192},[76,76445,1054],{"class":82},[76,76447,76416],{"class":47946},[76,76449,390],{"class":82},[76,76451,672],{"class":192},[76,76453,646],{"class":86},[76,76455,75214],{"class":1927},[76,76457,87],{"class":86},[76,76459,76460],{"class":192},"'Java'",[76,76462,75724],{"class":86},[76,76464,75348],{"class":146},[76,76466,76467],{"class":78,"line":1581},[76,76468,76469],{"class":146},"    \u002F\u002F 不区分大小写、\n",[76,76471,76472,76474,76476,76478,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500],{"class":78,"line":1587},[76,76473,73722],{"class":86},[76,76475,58216],{"class":1927},[76,76477,87],{"class":86},[76,76479,672],{"class":192},[76,76481,1054],{"class":82},[76,76483,76416],{"class":47946},[76,76485,390],{"class":82},[76,76487,672],{"class":192},[76,76489,529],{"class":82},[76,76491,646],{"class":86},[76,76493,75214],{"class":1927},[76,76495,87],{"class":86},[76,76497,76460],{"class":192},[76,76499,75724],{"class":86},[76,76501,75225],{"class":146},[76,76503,76504,76506,76508,76510],{"class":78,"line":1592},[76,76505,11188],{"class":82},[76,76507,73888],{"class":136},[76,76509,13531],{"class":82},[76,76511,76512],{"class":192}," 'java是一门编程语言，学完java工资很高'\n",[76,76514,76515,76517,76520,76522,76525,76528,76530,76532,76534,76536,76539,76541,76544],{"class":78,"line":1606},[76,76516,11188],{"class":82},[76,76518,76519],{"class":136}," result",[76,76521,13531],{"class":82},[76,76523,76524],{"class":86}," str.",[76,76526,76527],{"class":1927},"replace",[76,76529,87],{"class":86},[76,76531,672],{"class":192},[76,76533,76416],{"class":47946},[76,76535,672],{"class":192},[76,76537,76538],{"class":82},"ig",[76,76540,12402],{"class":86},[76,76542,76543],{"class":192},"'前端'",[76,76545,93],{"class":86},[76,76547,76548,76550,76552],{"class":78,"line":1611},[76,76549,73722],{"class":86},[76,76551,58216],{"class":1927},[76,76553,76554],{"class":86},"(result)\n",[76,76556,76557,76559,76561],{"class":78,"line":1617},[76,76558,52386],{"class":86},[76,76560,51782],{"class":51269},[76,76562,51276],{"class":86},[76,76564,76565,76567,76569],{"class":78,"line":1638},[76,76566,51754],{"class":86},[76,76568,51769],{"class":51269},[76,76570,51276],{"class":86},[76,76572,76573,76575,76577],{"class":78,"line":1643},[76,76574,51754],{"class":86},[76,76576,50604],{"class":51269},[76,76578,51276],{"class":86},[5092,76580,76581],{},"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":71,"searchDepth":96,"depth":96,"links":76583},[76584,76594,76606,76623,76630,76638],{"id":53329,"depth":96,"text":53330,"children":76585},[76586,76587,76588,76589,76590,76591,76592,76593],{"id":53333,"depth":1143,"text":53334},{"id":53366,"depth":1143,"text":53367},{"id":53405,"depth":1143,"text":53406},{"id":53563,"depth":1143,"text":53564},{"id":53611,"depth":1143,"text":53612},{"id":53748,"depth":1143,"text":53749},{"id":54070,"depth":1143,"text":54071},{"id":57058,"depth":1143,"text":57059},{"id":57086,"depth":96,"text":57087,"children":76595},[76596,76597,76598,76599,76600,76601,76602,76603,76604,76605],{"id":57090,"depth":1143,"text":57091},{"id":57113,"depth":1143,"text":57114},{"id":58028,"depth":1143,"text":58029},{"id":58718,"depth":1143,"text":58719},{"id":59000,"depth":1143,"text":59001},{"id":63161,"depth":1143,"text":63162},{"id":63331,"depth":1143,"text":63332},{"id":63459,"depth":1143,"text":63460},{"id":63484,"depth":1143,"text":63485},{"id":64873,"depth":1143,"text":64874},{"id":66026,"depth":96,"text":66027,"children":76607},[76608,76609,76610,76611,76612,76613,76614,76615,76616,76617,76618,76619,76620,76621,76622],{"id":66030,"depth":1143,"text":66031},{"id":66684,"depth":1143,"text":66685},{"id":68379,"depth":1143,"text":68380},{"id":68420,"depth":1143,"text":68421},{"id":68462,"depth":1143,"text":68463},{"id":68476,"depth":1143,"text":68477},{"id":68525,"depth":1143,"text":68526},{"id":68537,"depth":1143,"text":68538},{"id":68552,"depth":1143,"text":68553},{"id":68588,"depth":1143,"text":68589},{"id":68669,"depth":1143,"text":68670},{"id":68797,"depth":1143,"text":68798},{"id":68809,"depth":1143,"text":68810},{"id":68828,"depth":1143,"text":68829},{"id":70939,"depth":1143,"text":70940},{"id":70958,"depth":96,"text":70959,"children":76624},[76625,76626,76627,76628,76629],{"id":70979,"depth":1143,"text":70980},{"id":70999,"depth":1143,"text":71000},{"id":71048,"depth":1143,"text":71049},{"id":71173,"depth":1143,"text":71174},{"id":71354,"depth":1143,"text":71355},{"id":71372,"depth":96,"text":71373,"children":76631},[76632,76633,76634,76635,76636,76637],{"id":71387,"depth":1143,"text":71388},{"id":71446,"depth":1143,"text":71447},{"id":71470,"depth":1143,"text":71471},{"id":71790,"depth":1143,"text":71791},{"id":71822,"depth":1143,"text":71823},{"id":71845,"depth":1143,"text":71846},{"id":74913,"depth":96,"text":74914,"children":76639},[76640,76641],{"id":74947,"depth":1143,"text":74948},{"id":74986,"depth":1143,"text":74987},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53301,"description":23344},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76648,"title":76649,"body":76650,"description":23344,"extension":5123,"meta":92787,"navigation":2364,"path":92788,"seo":92789,"stem":92790,"__hash__":92791},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":9,"value":76651,"toc":92723},[76652,76655,76658,76662,76666,76671,76676,76687,76691,76696,76699,76703,76706,76711,76715,76719,76722,76727,76730,76734,76737,76745,76748,76752,76757,76762,76765,76769,76774,76779,76782,76786,76791,76794,76799,76802,76807,76810,76815,76820,76823,76826,76830,76835,76840,76843,76847,76851,76854,76857,76860,76864,76868,76873,76878,76881,76885,76890,76895,76898,76901,76904,76907,76910,76913,76916,76919,76922,76927,76931,76936,76941,76944,76947,76950,76953,76956,76959,76962,76965,76969,76973,76976,76979,76982,76987,76989,76992,76995,76998,77001,77004,77007,77010,77013,77016,77019,77022,77025,77028,77033,77038,77043,77046,77050,77053,77058,77062,77064,77075,77080,77181,77184,77187,77190,77193,77196,77199,77202,77205,77207,77210,77213,77216,77219,77222,77224,77227,77230,77233,77236,77239,77242,77244,77247,77249,77251,77254,77258,77262,77265,77268,77271,77274,77277,77280,77283,77286,77289,77294,77414,77417,77420,77425,77428,77431,77434,77437,77442,77445,77448,77451,77454,77459,77462,77562,77627,77701,77705,77708,77711,77715,77718,77732,77761,77764,77767,77770,77773,77776,77779,77782,77784,77787,77790,77793,77796,77800,77805,77809,77814,77889,77892,78075,78078,78081,78084,78087,78090,78092,78095,78098,78101,78104,78107,78110,78112,78116,78119,78124,78127,78130,78133,78136,78138,78143,78146,78149,78152,78155,78157,78162,78165,78168,78170,78172,78175,78179,78182,78185,78190,78193,78196,78199,78249,78254,78258,78263,78266,78335,78338,78347,78351,78356,78359,78362,78370,78373,78390,80192,80196,80200,80205,80208,80212,80218,80224,80376,80381,80386,80389,80392,80395,80398,80401,80404,80407,80410,80413,80416,80419,80422,80427,80431,80434,80445,80449,80454,80457,80460,80463,80466,80469,80471,80474,80477,80480,80483,80485,80502,80505,80509,80512,80517,80522,80525,80528,80532,80535,80538,80547,80550,80554,80557,80562,80567,80634,80638,80641,80644,80649,80654,80740,80745,80749,80752,80755,80770,80773,80778,80782,80787,80896,80899,80910,81060,81064,81069,81178,81182,81187,81192,81197,81200,81207,81227,81263,81427,81432,81435,81440,81447,81450,81453,81456,81515,81571,81627,81631,81636,81951,81954,81958,81961,81966,82075,82080,82084,82089,82093,82164,82168,82170,82173,82176,82214,82490,82494,82511,82577,82611,82615,82618,82623,82652,82659,82668,82673,82688,82693,82702,82705,82842,82846,82908,82912,82917,83162,83166,83171,83174,83177,83180,83183,83187,83192,84773,84777,84781,84787,84790,84795,84799,84802,84807,84810,84821,84825,84830,84834,84839,84844,84847,84852,84856,84860,84863,84868,84873,84876,84879,84882,85004,85009,85111,85114,85117,85121,85126,85298,85303,85307,85310,85315,85381,85386,85389,85520,85523,85528,85531,85534,85625,85630,85633,85636,85639,85642,85647,85652,85655,85660,85665,85670,85674,85677,85680,85685,85690,85695,85700,85754,85757,85760,85765,85768,85771,85776,85781,85786,85790,85795,85809,85814,85817,85822,85826,85831,85836,85841,85846,85851,85856,85861,85866,85869,85873,85878,85881,85884,85887,85892,85897,85900,85903,85907,85910,85913,85918,85923,85928,85933,85936,85941,85946,86007,86012,86015,86020,87261,87266,87270,87274,87279,87282,87287,87292,87295,87300,87302,87307,87311,87314,87317,87328,87332,87337,87342,87397,87402,87407,87412,87623,87628,87632,87637,87640,87642,87645,87648,88095,88100,88107,88113,88116,88119,88383,88388,88392,88657,88662,88666,88671,88676,88681,88686,89017,89020,89025,89030,89033,89037,89041,89046,89051,89056,89061,89066,89071,89075,89078,89083,89088,89091,89165,89170,89175,89180,89182,89185,89555,89560,89565,89570,89573,89576,89678,89683,89688,89791,89795,89800,89804,89808,89813,89818,89821,89826,89829,89832,90225,90230,90233,90236,90239,90242,90762,90766,90771,90776,90781,90784,90789,90792,90795,91177,91182,91184,91186,91189,91192,91704,91708,91769,91772,91775,91778,91782,91785,91790,91795,92720],[12,76653,76649],{"id":76654},"_4js进阶",[21,76656,76657],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[16,76659,76661],{"id":76660},"_41-作用域","4.1 作用域",[46,76663,76665],{"id":76664},"_411-局部作用域","4.1.1 局部作用域",[21,76667,76668],{},[1426,76669],{"alt":71,"src":76670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[21,76672,76673],{},[1426,76674],{"alt":71,"src":76675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1095,76677,76678,76681,76684],{},[32,76679,76680],{},"函数作用域在函数内部",[32,76682,76683],{},"块级作用域在{}",[32,76685,76686],{},"对象的那个{}不是作用域，不是块作用域",[46,76688,76690],{"id":76689},"_412-全局作用域","4.1.2 全局作用域",[21,76692,76693],{},[1426,76694],{"alt":71,"src":76695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[21,76697,76698],{},"window.a=10不要这样写",[46,76700,76702],{"id":76701},"_413-作用域链","4.1.3 作用域链",[21,76704,76705],{},"变量查找机制",[21,76707,76708],{},[1426,76709],{"alt":71,"src":76710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[16,76712,76714],{"id":76713},"_42-垃圾回收机制","4.2 垃圾回收机制",[46,76716,76718],{"id":76717},"_421-大体介绍","4.2.1 大体介绍",[21,76720,76721],{},"垃圾回收机制(Garbage Collection) 简称 GC",[21,76723,76724],{},[1426,76725],{"alt":71,"src":76726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[21,76728,76729],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[46,76731,76733],{"id":76732},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[21,76735,76736],{},"堆栈空间分配区别：",[29,76738,76739,76742],{},[32,76740,76741],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[32,76743,76744],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[21,76746,76747],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21965,76749,76751],{"id":76750},"_4221-引用计数","4.2.2.1 引用计数",[21,76753,76754],{},[1426,76755],{"alt":71,"src":76756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[21,76758,76759],{},[1426,76760],{"alt":71,"src":76761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[21,76763,76764],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21965,76766,76768],{"id":76767},"_4222-标记清除法","4.2.2.2 标记清除法",[21,76770,76771],{},[1426,76772],{"alt":71,"src":76773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[21,76775,76776],{},[1426,76777],{"alt":71,"src":76778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[21,76780,76781],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[16,76783,76785],{"id":76784},"_43-闭包","4.3 闭包",[21,76787,76788],{},[1426,76789],{"alt":71,"src":76790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[21,76792,76793],{},"闭包：内层函数+外层函数的变量",[21,76795,76796],{},[1426,76797],{"alt":71,"src":76798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[21,76800,76801],{},"closure就是闭包",[21,76803,76804],{},[1426,76805],{"alt":71,"src":76806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[21,76808,76809],{},"内层函数必须包含外层函数的变量才是闭包",[21,76811,76812],{},[1426,76813],{"alt":71,"src":76814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[21,76816,76817],{},[1426,76818],{"alt":71,"src":76819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[21,76821,76822],{},"闭包可能会引起内存泄漏",[21,76824,76825],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[16,76827,76829],{"id":76828},"_44-变量提升","4.4 变量提升",[21,76831,76832],{},[1426,76833],{"alt":71,"src":76834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[21,76836,76837],{},[1426,76838],{"alt":71,"src":76839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[21,76841,76842],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[16,76844,76846],{"id":76845},"_45-函数进阶","4.5 函数进阶",[46,76848,76850],{"id":76849},"_451-函数提升","4.5.1 函数提升",[21,76852,76853],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[21,76855,76856],{},"只提升函数声明，不提升函数调用",[51782,76858,76859],{},"\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",[46,76861,76863],{"id":76862},"_452-函数参数","4.5.2 函数参数",[21965,76865,76867],{"id":76866},"_4521-动态参数","4.5.2.1 动态参数",[21,76869,76870],{},[1426,76871],{"alt":71,"src":76872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[21,76874,76875],{},[1426,76876],{"alt":71,"src":76877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[21,76879,76880],{},"箭头函数里边没有arguments",[21965,76882,76884],{"id":76883},"_4522-剩余参数","4.5.2.2 剩余参数",[21,76886,76887],{},[1426,76888],{"alt":71,"src":76889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[21,76891,76892],{},[1426,76893],{"alt":71,"src":76894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[21,76896,76897],{},"剩余参数使用的时候不需要写...",[21,76899,76900],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[21,76902,76903],{},"  function getSum(a,b,...arr) {",[21,76905,76906],{},"  console.log(11)",[21,76908,76909],{},"  }",[21,76911,76912],{},"  getSum(1,2,3,4)",[21,76914,76915],{},"  将1传给a，2传给b，剩下的传给剩余参数",[21,76917,76918],{},"  getSum(1,2)",[21,76920,76921],{},"  将1传给a，2传给b，剩余参数为一个空数组",[21,76923,76924],{},[1426,76925],{"alt":71,"src":76926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21965,76928,76930],{"id":76929},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[21,76932,76933],{},[1426,76934],{"alt":71,"src":76935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[21,76937,76938],{},[1426,76939],{"alt":71,"src":76940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[21,76942,76943],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[21,76945,76946],{},"展开运算符可以用于数组之间的合并：",[21,76948,76949],{},"const arr1 = [1, 2, 3]",[21,76951,76952],{},"const arr2 = [3, 4, 5]",[21,76954,76955],{},"const arr = [...arr1, ...arr2]",[21,76957,76958],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[21,76960,76961],{},"剩余参数：函数参数使用，得到真数组",[21,76963,76964],{},"展开运算符：数组中使用，数组展开",[46,76966,76968],{"id":76967},"_453-箭头函数","4.5.3 箭头函数",[21965,76970,76972],{"id":76971},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[21,76974,76975],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[21,76977,76978],{},"它不是万能的！！！",[21,76980,76981],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[21,76983,76984],{},[1426,76985],{"alt":71,"src":76986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[21,76988,117],{},[21,76990,76991],{},"① 只有一个形参的时候，可以省略小括号：",[21,76993,76994],{},"const fn=x=>{console.log(x)}",[21,76996,76997],{},"② 只有一行代码时可以省略大括号：",[21,76999,77000],{},"const fn=x=>console.log(11)",[21,77002,77003],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[21,77005,77006],{},"const fn=x=>x+x",[21,77008,77009],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[21,77011,77012],{},"⑤ 阻止表单默认提交：",[21,77014,77015],{},"const form = document.querySelector('form')",[21,77017,77018],{},"form.addEventListener('click', ev => ev.preventDefault())",[21,77020,77021],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[21,77023,77024],{},"const fn=uname=>({uname:uname})",[21,77026,77027],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[21,77029,77030],{},[1426,77031],{"alt":71,"src":77032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[21,77034,77035],{},[1426,77036],{"alt":71,"src":77037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[21,77039,77040],{},[1426,77041],{"alt":71,"src":77042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[21,77044,77045],{},"一定不要忘记用()，有()就理解为自带return",[21965,77047,77049],{"id":77048},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[21,77051,77052],{},"箭头函数是没有动态参数的arguments",[21,77054,77055],{},[1426,77056],{"alt":71,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21965,77059,77061],{"id":77060},"_4533-箭头函数this","4.5.3.3 箭头函数this",[21,77063,11299],{},[29,77065,77066,77069,77072],{},[32,77067,77068],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[32,77070,77071],{},"事件回调函数使用箭头函数时，this 为全局的 window",[32,77073,77074],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[21,77076,77077],{},[1426,77078],{"alt":71,"src":77079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[66,77081,77083],{"className":53036,"code":77082,"language":53038,"meta":71,"style":71},"  \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",[73,77084,77085,77093,77098,77103,77108,77113,77118,77122,77127,77131,77135,77140,77145,77150,77154,77158,77163,77168,77173],{"__ignoreMap":71},[76,77086,77087,77089,77091],{"class":78,"line":79},[76,77088,52113],{"class":86},[76,77090,51782],{"class":51269},[76,77092,51276],{"class":86},[76,77094,77095],{"class":78,"line":96},[76,77096,77097],{"class":86},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[76,77099,77100],{"class":78,"line":1143},[76,77101,77102],{"class":86},"    console.log(this) \u002F\u002F指向window\n",[76,77104,77105],{"class":78,"line":1158},[76,77106,77107],{"class":86},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[76,77109,77110],{"class":78,"line":1164},[76,77111,77112],{"class":86},"    function fn() {\n",[76,77114,77115],{"class":78,"line":1178},[76,77116,77117],{"class":86},"      console.log(this)  \u002F\u002F指向window\n",[76,77119,77120],{"class":78,"line":1184},[76,77121,2151],{"class":86},[76,77123,77124],{"class":78,"line":1275},[76,77125,77126],{"class":86},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[76,77128,77129],{"class":78,"line":1281},[76,77130,2365],{"emptyLinePlaceholder":2364},[76,77132,77133],{"class":78,"line":1293},[76,77134,71492],{"class":86},[76,77136,77137],{"class":78,"line":1576},[76,77138,77139],{"class":86},"      name: 'andy',\n",[76,77141,77142],{"class":78,"line":1581},[76,77143,77144],{"class":86},"      sayHai: function () {\n",[76,77146,77147],{"class":78,"line":1587},[76,77148,77149],{"class":86},"        console.log(this)\n",[76,77151,77152],{"class":78,"line":1592},[76,77153,52367],{"class":86},[76,77155,77156],{"class":78,"line":1606},[76,77157,2151],{"class":86},[76,77159,77160],{"class":78,"line":1611},[76,77161,77162],{"class":86},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[76,77164,77165],{"class":78,"line":1617},[76,77166,77167],{"class":86},"    \u002F\u002F 2.箭头函数的this\n",[76,77169,77170],{"class":78,"line":1638},[76,77171,77172],{"class":86},"    const fn = () => console.log(this)\n",[76,77174,77175,77177,77179],{"class":78,"line":1643},[76,77176,52386],{"class":86},[76,77178,51782],{"class":51269},[76,77180,51276],{"class":86},[21,77182,77183],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[21,77185,77186],{},"const fn = () => console.log(this)",[21,77188,77189],{},"fn() \u002F\u002F指向window",[21,77191,77192],{},"\u002F\u002F 3.对象方法箭头函数 this",[21,77194,77195],{},"①",[21,77197,77198],{},"const obj = {",[21,77200,77201],{},"uname: 'pink老师',",[21,77203,77204],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[21,77206,1034],{},[21,77208,77209],{},"调用对象里边的函数",[21,77211,77212],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[21,77214,77215],{},"obj.sayHai()",[21,77217,77218],{},"②",[21,77220,77221],{},"const obj1 = {",[21,77223,77201],{},[21,77225,77226],{},"sayHai: function () {",[21,77228,77229],{},"let i = 10",[21,77231,77232],{},"const count = () => {",[21,77234,77235],{},"console.log(this)",[21,77237,77238],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[21,77240,77241],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[21,77243,1034],{},[21,77245,77246],{},"count()",[21,77248,1034],{},[21,77250,1034],{},[21,77252,77253],{},"obj1.sayHai()",[16,77255,77257],{"id":77256},"_46-解构赋值","4.6 解构赋值",[46,77259,77261],{"id":77260},"_461-数组解构","4.6.1 数组解构",[21,77263,77264],{},"以前要是使用数组中的值的话：",[21,77266,77267],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[21,77269,77270],{},"const arr=[100,60,80]",[21,77272,77273],{},"const max=arr[0]",[21,77275,77276],{},"const min=arr[1]",[21,77278,77279],{},"const avg=arr[2]",[21,77281,77282],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[21,77284,77285],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[21,77287,77288],{},"这个写法就类似于上边的那种用很多const的方法",[21,77290,77291],{},[1426,77292],{"alt":71,"src":77293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[66,77295,77297],{"className":50602,"code":77296,"language":50604,"meta":71,"style":71},"①变量之间交换值:\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",[73,77298,77299,77304,77309,77314,77319,77324,77328,77332,77337,77341,77346,77351,77355,77360,77365,77376,77386,77391,77396,77401,77405,77409],{"__ignoreMap":71},[76,77300,77301],{"class":78,"line":79},[76,77302,77303],{"class":86},"①变量之间交换值:\n",[76,77305,77306],{"class":78,"line":96},[76,77307,77308],{"class":86},"let a=1\n",[76,77310,77311],{"class":78,"line":1143},[76,77312,77313],{"class":86},"let b=2;\n",[76,77315,77316],{"class":78,"line":1158},[76,77317,77318],{"class":86},"必须加这行代码，不然就会报错\n",[76,77320,77321],{"class":78,"line":1164},[76,77322,77323],{"class":86},"[b,a]=[a,b]\n",[76,77325,77326],{"class":78,"line":1178},[76,77327,2365],{"emptyLinePlaceholder":2364},[76,77329,77330],{"class":78,"line":1184},[76,77331,2365],{"emptyLinePlaceholder":2364},[76,77333,77334],{"class":78,"line":1275},[76,77335,77336],{"class":86},"可以写成下面的方式：\n",[76,77338,77339],{"class":78,"line":1281},[76,77340,77308],{"class":86},[76,77342,77343],{"class":78,"line":1293},[76,77344,77345],{"class":86},"let b=2\n",[76,77347,77348],{"class":78,"line":1576},[76,77349,77350],{"class":86},";[b,a]=[a,b]\n",[76,77352,77353],{"class":78,"line":1581},[76,77354,2365],{"emptyLinePlaceholder":2364},[76,77356,77357],{"class":78,"line":1587},[76,77358,77359],{"class":86},"②排序\n",[76,77361,77362],{"class":78,"line":1592},[76,77363,77364],{"class":86},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[76,77366,77367,77370,77373],{"class":78,"line":1606},[76,77368,77369],{"class":86},"for (let i = 0; i ",[76,77371,998],{"class":77372},"s7hpK",[76,77374,77375],{"class":86}," arr1.length; i++) {\n",[76,77377,77378,77381,77383],{"class":78,"line":1611},[76,77379,77380],{"class":86},"   for (let j = 0; j ",[76,77382,998],{"class":77372},[76,77384,77385],{"class":86}," arr1.length - 1; j++) {\n",[76,77387,77388],{"class":78,"line":1617},[76,77389,77390],{"class":86},"      if (arr1[j] > arr1[j + 1]) {\n",[76,77392,77393],{"class":78,"line":1638},[76,77394,77395],{"class":86},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[76,77397,77398],{"class":78,"line":1643},[76,77399,77400],{"class":86},"       }\n",[76,77402,77403],{"class":78,"line":1657},[76,77404,4274],{"class":86},[76,77406,77407],{"class":78,"line":1662},[76,77408,1529],{"class":86},[76,77410,77411],{"class":78,"line":1691},[76,77412,77413],{"class":86},"console.log(arr1)\n",[21,77415,77416],{},"数组解构的细节：",[21,77418,77419],{},"①变量多，单元值少",[21,77421,77422],{},[1426,77423],{"alt":71,"src":77424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[21,77426,77427],{},"防止出现undefined的方法：",[21,77429,77430],{},"const [a=0,b=0] =[1]",[21,77432,77433],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[21,77435,77436],{},"②变量少，单元值多",[21,77438,77439],{},[1426,77440],{"alt":71,"src":77441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[21,77443,77444],{},"此时可以使用剩余参数来接收多余的值",[21,77446,77447],{},"const [a,b,...c]=[1,2,3,4]",[21,77449,77450],{},"console.log(c) 输出[3,4]",[21,77452,77453],{},"③可以按需导入，忽略某些返回值",[21,77455,77456],{},[1426,77457],{"alt":71,"src":77458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[21,77460,77461],{},"④支持多维数组的结构",[66,77463,77467],{"className":77464,"code":77465,"language":77466,"meta":71,"style":71},"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",[73,77468,77469,77497,77513,77528,77543],{"__ignoreMap":71},[76,77470,77471,77473,77475,77477,77479,77481,77483,77485,77488,77490,77492,77494],{"class":78,"line":79},[76,77472,6759],{"class":82},[76,77474,51802],{"class":86},[76,77476,133],{"class":82},[76,77478,52195],{"class":86},[76,77480,305],{"class":136},[76,77482,12402],{"class":86},[76,77484,165],{"class":136},[76,77486,77487],{"class":86},", [",[76,77489,159],{"class":136},[76,77491,12402],{"class":86},[76,77493,381],{"class":136},[76,77495,77496],{"class":86},"]]\n",[76,77498,77499,77502,77504,77506,77508,77510],{"class":78,"line":96},[76,77500,77501],{"class":86},"console.",[76,77503,58216],{"class":1927},[76,77505,3816],{"class":86},[76,77507,279],{"class":136},[76,77509,4181],{"class":86},[76,77511,77512],{"class":146},"  \u002F\u002F1\n",[76,77514,77515,77517,77519,77521,77523,77525],{"class":78,"line":1143},[76,77516,77501],{"class":86},[76,77518,58216],{"class":1927},[76,77520,3816],{"class":86},[76,77522,305],{"class":136},[76,77524,4181],{"class":86},[76,77526,77527],{"class":146},"  \u002F\u002F2\n",[76,77529,77530,77532,77534,77536,77538,77540],{"class":78,"line":1158},[76,77531,77501],{"class":86},[76,77533,58216],{"class":1927},[76,77535,3816],{"class":86},[76,77537,165],{"class":136},[76,77539,4181],{"class":86},[76,77541,77542],{"class":146},"  \u002F\u002F[3,4]\n",[76,77544,77545,77547,77549,77551,77553,77555,77557,77559],{"class":78,"line":1164},[76,77546,77501],{"class":86},[76,77548,58216],{"class":1927},[76,77550,3816],{"class":86},[76,77552,165],{"class":136},[76,77554,4866],{"class":86},[76,77556,279],{"class":136},[76,77558,4181],{"class":86},[76,77560,77561],{"class":146},"  \u002F\u002F3\n",[66,77563,77565],{"className":77464,"code":77564,"language":77466,"meta":71,"style":71},"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",[73,77566,77567,77594,77605,77616],{"__ignoreMap":71},[76,77568,77569,77571,77574,77576,77578,77580,77582,77584,77586,77588,77590,77592],{"class":78,"line":79},[76,77570,6759],{"class":82},[76,77572,77573],{"class":86}," [a, b, c] ",[76,77575,133],{"class":82},[76,77577,52195],{"class":86},[76,77579,305],{"class":136},[76,77581,12402],{"class":86},[76,77583,165],{"class":136},[76,77585,77487],{"class":86},[76,77587,159],{"class":136},[76,77589,12402],{"class":86},[76,77591,381],{"class":136},[76,77593,77496],{"class":86},[76,77595,77596,77598,77600,77603],{"class":78,"line":96},[76,77597,77501],{"class":86},[76,77599,58216],{"class":1927},[76,77601,77602],{"class":86},"(a)",[76,77604,77512],{"class":146},[76,77606,77607,77609,77611,77614],{"class":78,"line":1143},[76,77608,77501],{"class":86},[76,77610,58216],{"class":1927},[76,77612,77613],{"class":86},"(b)",[76,77615,77527],{"class":146},[76,77617,77618,77620,77622,77625],{"class":78,"line":1158},[76,77619,77501],{"class":86},[76,77621,58216],{"class":1927},[76,77623,77624],{"class":86},"(c)",[76,77626,77542],{"class":146},[66,77628,77630],{"className":77464,"code":77629,"language":77466,"meta":71,"style":71},"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",[73,77631,77632,77659,77669,77679,77689],{"__ignoreMap":71},[76,77633,77634,77636,77639,77641,77643,77645,77647,77649,77651,77653,77655,77657],{"class":78,"line":79},[76,77635,6759],{"class":82},[76,77637,77638],{"class":86}," [a, b, [c, d]] ",[76,77640,133],{"class":82},[76,77642,52195],{"class":86},[76,77644,305],{"class":136},[76,77646,12402],{"class":86},[76,77648,165],{"class":136},[76,77650,77487],{"class":86},[76,77652,159],{"class":136},[76,77654,12402],{"class":86},[76,77656,381],{"class":136},[76,77658,77496],{"class":86},[76,77660,77661,77663,77665,77667],{"class":78,"line":96},[76,77662,77501],{"class":86},[76,77664,58216],{"class":1927},[76,77666,77602],{"class":86},[76,77668,77512],{"class":146},[76,77670,77671,77673,77675,77677],{"class":78,"line":1143},[76,77672,77501],{"class":86},[76,77674,58216],{"class":1927},[76,77676,77613],{"class":86},[76,77678,77527],{"class":146},[76,77680,77681,77683,77685,77687],{"class":78,"line":1158},[76,77682,77501],{"class":86},[76,77684,58216],{"class":1927},[76,77686,77624],{"class":86},[76,77688,77561],{"class":146},[76,77690,77691,77693,77695,77698],{"class":78,"line":1164},[76,77692,77501],{"class":86},[76,77694,58216],{"class":1927},[76,77696,77697],{"class":86},"(d)",[76,77699,77700],{"class":146},"  \u002F\u002F4\n",[46,77702,77704],{"id":77703},"_462-对象解构","4.6.2 对象解构",[21,77706,77707],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[21,77709,77710],{},"用的非常非常多！！！！！！",[21965,77712,77714],{"id":77713},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[21,77716,77717],{},"基本语法：",[29,77719,77720,77723,77726,77729],{},[32,77721,77722],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[32,77724,77725],{},"对象属性的值将被赋值给与属性名相同的变量",[32,77727,77728],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[32,77730,77731],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[66,77733,77735],{"className":50602,"code":77734,"language":50604,"meta":71,"style":71},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[73,77736,77737,77742,77747,77752,77756],{"__ignoreMap":71},[76,77738,77739],{"class":78,"line":79},[76,77740,77741],{"class":86},"const obj = {\n",[76,77743,77744],{"class":78,"line":96},[76,77745,77746],{"class":86},"   uname: 'pink老师',\n",[76,77748,77749],{"class":78,"line":1143},[76,77750,77751],{"class":86},"   age: 18,\n",[76,77753,77754],{"class":78,"line":1158},[76,77755,1529],{"class":86},[76,77757,77758],{"class":78,"line":1164},[76,77759,77760],{"class":86},"const { uname, age } = obj\n",[21,77762,77763],{},"上方代码这样写等价于：",[21,77765,77766],{},"const uname等价于obj.uname",[21,77768,77769],{},"变量名可以重新改名：",[21,77771,77772],{},"const uname='red老师'",[21,77774,77775],{},"const user={",[21,77777,77778],{},"  uname:'pink老师',",[21,77780,77781],{},"  age:18",[21,77783,1034],{},[21,77785,77786],{},"const {uname,age}=user",[21,77788,77789],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[21,77791,77792],{},"const {旧变量名：新变量名}=对象",[21,77794,77795],{},"const {uname:username,age}=user",[21965,77797,77799],{"id":77798},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[21,77801,77802],{},[1426,77803],{"alt":71,"src":77804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21965,77806,77808],{"id":77807},"_4623-多级对象解构","4.6.2.3 多级对象解构",[21,77810,77811],{},[1426,77812],{"alt":71,"src":77813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[66,77815,77817],{"className":53036,"code":77816,"language":53038,"meta":71,"style":71},"  \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",[73,77818,77819,77827,77832,77837,77842,77847,77852,77857,77862,77867,77871,77876,77881],{"__ignoreMap":71},[76,77820,77821,77823,77825],{"class":78,"line":79},[76,77822,52113],{"class":86},[76,77824,51782],{"class":51269},[76,77826,51276],{"class":86},[76,77828,77829],{"class":78,"line":96},[76,77830,77831],{"class":86},"    const pig = {\n",[76,77833,77834],{"class":78,"line":1143},[76,77835,77836],{"class":86},"      name: '佩奇',\n",[76,77838,77839],{"class":78,"line":1158},[76,77840,77841],{"class":86},"      family: {\n",[76,77843,77844],{"class":78,"line":1164},[76,77845,77846],{"class":86},"        mother: '猪妈妈',\n",[76,77848,77849],{"class":78,"line":1178},[76,77850,77851],{"class":86},"        father: '猪爸爸',\n",[76,77853,77854],{"class":78,"line":1184},[76,77855,77856],{"class":86},"        sister: '乔治'\n",[76,77858,77859],{"class":78,"line":1275},[76,77860,77861],{"class":86},"      },\n",[76,77863,77864],{"class":78,"line":1281},[76,77865,77866],{"class":86},"      age: 6\n",[76,77868,77869],{"class":78,"line":1293},[76,77870,2151],{"class":86},[76,77872,77873],{"class":78,"line":1576},[76,77874,77875],{"class":86},"    \u002F\u002F 多级对象解构\n",[76,77877,77878],{"class":78,"line":1581},[76,77879,77880],{"class":86},"    const { name, family: { mother, father, sister }, age } = pig\n",[76,77882,77883,77885,77887],{"class":78,"line":1587},[76,77884,52386],{"class":86},[76,77886,51782],{"class":51269},[76,77888,51276],{"class":86},[21,77890,77891],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[66,77893,77896],{"className":77894,"code":77895,"language":76416,"meta":71,"style":71},"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",[73,77897,77898,77903,77914,77926,77938,77947,77951,77962,77974,77984,77989,77993,78003,78014,78023,78027,78031,78042,78053,78062,78066,78071],{"__ignoreMap":71},[76,77899,77900],{"class":78,"line":79},[76,77901,77902],{"class":146},"    \u002F\u002F 这是后台传递过来的数据\n",[76,77904,77905,77907,77910,77912],{"class":78,"line":96},[76,77906,11188],{"class":82},[76,77908,77909],{"class":86}," msg ",[76,77911,133],{"class":82},[76,77913,15539],{"class":86},[76,77915,77916,77919,77921,77924],{"class":78,"line":1143},[76,77917,77918],{"class":192},"      \"code\"",[76,77920,947],{"class":82},[76,77922,77923],{"class":136}," 200",[76,77925,31435],{"class":86},[76,77927,77928,77931,77933,77936],{"class":78,"line":1158},[76,77929,77930],{"class":192},"      \"msg\"",[76,77932,947],{"class":82},[76,77934,77935],{"class":192}," \"获取新闻列表成功\"",[76,77937,31435],{"class":86},[76,77939,77940,77943,77945],{"class":78,"line":1164},[76,77941,77942],{"class":192},"      \"data\"",[76,77944,947],{"class":82},[76,77946,55416],{"class":86},[76,77948,77949],{"class":78,"line":1178},[76,77950,2475],{"class":86},[76,77952,77953,77956,77958,77960],{"class":78,"line":1184},[76,77954,77955],{"class":192},"          \"id\"",[76,77957,947],{"class":82},[76,77959,25087],{"class":136},[76,77961,31435],{"class":86},[76,77963,77964,77967,77969,77972],{"class":78,"line":1275},[76,77965,77966],{"class":192},"          \"title\"",[76,77968,947],{"class":82},[76,77970,77971],{"class":192}," \"5G商用自己，三大运用商收入下降\"",[76,77973,31435],{"class":86},[76,77975,77976,77979,77981],{"class":78,"line":1281},[76,77977,77978],{"class":192},"          \"count\"",[76,77980,947],{"class":82},[76,77982,77983],{"class":136}," 58\n",[76,77985,77986],{"class":78,"line":1293},[76,77987,77988],{"class":86},"        },\n",[76,77990,77991],{"class":78,"line":1576},[76,77992,2475],{"class":86},[76,77994,77995,77997,77999,78001],{"class":78,"line":1581},[76,77996,77955],{"class":192},[76,77998,947],{"class":82},[76,78000,14722],{"class":136},[76,78002,31435],{"class":86},[76,78004,78005,78007,78009,78012],{"class":78,"line":1587},[76,78006,77966],{"class":192},[76,78008,947],{"class":82},[76,78010,78011],{"class":192}," \"国际媒体头条速览\"",[76,78013,31435],{"class":86},[76,78015,78016,78018,78020],{"class":78,"line":1592},[76,78017,77978],{"class":192},[76,78019,947],{"class":82},[76,78021,78022],{"class":136}," 56\n",[76,78024,78025],{"class":78,"line":1606},[76,78026,77988],{"class":86},[76,78028,78029],{"class":78,"line":1611},[76,78030,2475],{"class":86},[76,78032,78033,78035,78037,78040],{"class":78,"line":1617},[76,78034,77955],{"class":192},[76,78036,947],{"class":82},[76,78038,78039],{"class":136}," 3",[76,78041,31435],{"class":86},[76,78043,78044,78046,78048,78051],{"class":78,"line":1638},[76,78045,77966],{"class":192},[76,78047,947],{"class":82},[76,78049,78050],{"class":192}," \"乌克兰和俄罗斯持续冲突\"",[76,78052,31435],{"class":86},[76,78054,78055,78057,78059],{"class":78,"line":1643},[76,78056,77978],{"class":192},[76,78058,947],{"class":82},[76,78060,78061],{"class":136}," 1669\n",[76,78063,78064],{"class":78,"line":1657},[76,78065,77988],{"class":86},[76,78067,78068],{"class":78,"line":1662},[76,78069,78070],{"class":86},"      ]\n",[76,78072,78073],{"class":78,"line":1691},[76,78074,2151],{"class":86},[21,78076,78077],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[21,78079,78080],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[21,78082,78083],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[21,78085,78086],{},"function({data}) {",[21,78088,78089],{},"console.log(data)",[21,78091,1034],{},[21,78093,78094],{},"render(msg)",[21,78096,78097],{},"实参传递给形参的时候解构了",[21,78099,78100],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[21,78102,78103],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[21,78105,78106],{},"function render({data:mydata}) {",[21,78108,78109],{},"  console.log(data)",[21,78111,1034],{},[46,78113,78115],{"id":78114},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[21,78117,78118],{},"有两种情况：一个是数组结构，一个是立即执行函数",[29,78120,78121],{},[32,78122,78123],{},"如果对一个数组进行遍历，有两种方式：",[21,78125,78126],{},"①法1",[21,78128,78129],{},"const arr=[1,2,3]",[21,78131,78132],{},"arr.map(function(item,index) {",[21,78134,78135],{},"  console.log(item)",[21,78137,52433],{},[21,78139,78140],{},[1426,78141],{"alt":71,"src":78142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[21,78144,78145],{},"②法2",[21,78147,78148],{},"const str='pink'",[21,78150,78151],{},"[1,2,3].map(function(item,index) {",[21,78153,78154],{},"console.log(item)",[21,78156,52433],{},[21,78158,78159],{},[1426,78160],{"alt":71,"src":78161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[21,78163,78164],{},"此时会报错",[21,78166,78167],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[21,78169,78154],{},[21,78171,52433],{},[21,78173,78174],{},"内部会当成这样处理，所以我们用分号进行隔开",[16,78176,78178],{"id":78177},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[21,78180,78181],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[21,78183,78184],{},"可以理解为加强版的for循环",[21,78186,78187],{},[1426,78188],{"alt":71,"src":78189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[21,78191,78192],{},"里边不写return，不返回数组，只遍历不返回",[21,78194,78195],{},"map是返回数组",[21,78197,78198],{},"forEach主要用于遍历数组对象",[66,78200,78202],{"className":53036,"code":78201,"language":53038,"meta":71,"style":71},"  \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",[73,78203,78204,78212,78217,78222,78227,78232,78236,78241],{"__ignoreMap":71},[76,78205,78206,78208,78210],{"class":78,"line":79},[76,78207,52113],{"class":86},[76,78209,51782],{"class":51269},[76,78211,51276],{"class":86},[76,78213,78214],{"class":78,"line":96},[76,78215,78216],{"class":86},"    const arr = ['red', 'green', 'pink']\n",[76,78218,78219],{"class":78,"line":1143},[76,78220,78221],{"class":86},"    const result = arr.forEach(function (item, index) {\n",[76,78223,78224],{"class":78,"line":1158},[76,78225,78226],{"class":86},"      console.log(item)\n",[76,78228,78229],{"class":78,"line":1164},[76,78230,78231],{"class":86},"      console.log(index)\n",[76,78233,78234],{"class":78,"line":1178},[76,78235,33430],{"class":86},[76,78237,78238],{"class":78,"line":1184},[76,78239,78240],{"class":86},"    console.log(result)\n",[76,78242,78243,78245,78247],{"class":78,"line":1275},[76,78244,52386],{"class":86},[76,78246,51782],{"class":51269},[76,78248,51276],{"class":86},[21,78250,78251],{},[1426,78252],{"alt":71,"src":78253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[16,78255,78257],{"id":78256},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[21,78259,78260],{},[1426,78261],{"alt":71,"src":78262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[21,78264,78265],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[66,78267,78269],{"className":53036,"code":78268,"language":53038,"meta":71,"style":71},"\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",[73,78270,78271,78279,78287,78292,78297,78301,78305,78310,78314,78319,78327],{"__ignoreMap":71},[76,78272,78273,78275,78277],{"class":78,"line":79},[76,78274,998],{"class":86},[76,78276,51769],{"class":51269},[76,78278,51276],{"class":86},[76,78280,78281,78283,78285],{"class":78,"line":96},[76,78282,52113],{"class":86},[76,78284,51782],{"class":51269},[76,78286,51276],{"class":86},[76,78288,78289],{"class":78,"line":1143},[76,78290,78291],{"class":86},"    const arr = [10, 20, 30]\n",[76,78293,78294],{"class":78,"line":1158},[76,78295,78296],{"class":86},"    const newArr = arr.filter(function (item, index) {\n",[76,78298,78299],{"class":78,"line":1164},[76,78300,78226],{"class":86},[76,78302,78303],{"class":78,"line":1178},[76,78304,78231],{"class":86},[76,78306,78307],{"class":78,"line":1184},[76,78308,78309],{"class":86},"      return item >= 20\n",[76,78311,78312],{"class":78,"line":1275},[76,78313,33430],{"class":86},[76,78315,78316],{"class":78,"line":1281},[76,78317,78318],{"class":86},"    console.log(newArr)\n",[76,78320,78321,78323,78325],{"class":78,"line":1293},[76,78322,52386],{"class":86},[76,78324,51782],{"class":51269},[76,78326,51276],{"class":86},[76,78328,78329,78331,78333],{"class":78,"line":1576},[76,78330,51754],{"class":86},[76,78332,51769],{"class":51269},[76,78334,51276],{"class":86},[21,78336,78337],{},"这个也可以写成箭头函数：",[66,78339,78341],{"className":50602,"code":78340,"language":50604,"meta":71,"style":71},"const newArr = arr.filter(item => item >= 20)\n",[73,78342,78343],{"__ignoreMap":71},[76,78344,78345],{"class":78,"line":79},[76,78346,78340],{"class":86},[16,78348,78350],{"id":78349},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[21,78352,78353],{},[1426,78354],{"alt":71,"src":78355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[21,78357,78358],{},"步骤：",[21,78360,78361],{},"①：渲染页面模块",[1095,78363,78364,78367],{},[32,78365,78366],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[32,78368,78369],{},"用forEach+字符串的形式",[21,78371,78372],{},"②：点击不同需求，显示不同页面内容",[1095,78374,78375,78378,78381,78384,78387],{},[32,78376,78377],{},"点击采取事件委托方式 .filter",[32,78379,78380],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[32,78382,78383],{},"筛选条件是根据点击的 data-index 来判断",[32,78385,78386],{},"可以使用对象解构，把事件对象解构",[32,78388,78389],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[66,78391,78393],{"className":50602,"code":78392,"language":50604,"meta":71,"style":71},"\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",[73,78394,78395,78405,78419,78423,78431,78445,78465,78477,78485,78491,78501,78511,78521,78525,78529,78535,78548,78560,78570,78582,78586,78590,78597,78610,78622,78639,78657,78670,78674,78678,78690,78700,78704,78708,78715,78756,78783,78793,78797,78801,78809,78821,78825,78829,78837,78849,78861,78872,78876,78880,78889,78901,78912,78916,78920,78929,78941,78953,78957,78961,78968,78978,78990,79002,79017,79021,79025,79033,79049,79059,79069,79079,79091,79095,79099,79109,79120,79130,79134,79142,79150,79154,79162,79177,79203,79228,79253,79272,79280,79294,79299,79304,79309,79314,79319,79327,79335,79340,79351,79356,79366,79376,79386,79396,79400,79404,79413,79422,79431,79440,79444,79448,79457,79466,79475,79484,79488,79492,79501,79510,79519,79528,79532,79536,79545,79554,79563,79572,79576,79580,79589,79598,79607,79616,79620,79624,79633,79642,79651,79660,79664,79668,79677,79686,79694,79703,79707,79711,79715,79720,79732,79737,79749,79753,79770,79798,79807,79812,79822,79832,79841,79846,79851,79855,79860,79877,79881,79886,79894,79899,79926,79931,79951,79956,79968,79973,79978,79983,79994,80008,80045,80063,80096,80113,80137,80141,80146,80152,80156,80160,80164,80172,80180,80184],{"__ignoreMap":71},[76,78396,78397,78399,78401,78403],{"class":78,"line":79},[76,78398,51266],{"class":86},[76,78400,51270],{"class":51269},[76,78402,51273],{"class":1927},[76,78404,51276],{"class":86},[76,78406,78407,78409,78411,78413,78415,78417],{"class":78,"line":96},[76,78408,998],{"class":86},[76,78410,50604],{"class":51269},[76,78412,51285],{"class":1927},[76,78414,133],{"class":86},[76,78416,51290],{"class":192},[76,78418,51276],{"class":86},[76,78420,78421],{"class":78,"line":1143},[76,78422,2365],{"emptyLinePlaceholder":2364},[76,78424,78425,78427,78429],{"class":78,"line":1158},[76,78426,998],{"class":86},[76,78428,51303],{"class":51269},[76,78430,51276],{"class":86},[76,78432,78433,78435,78437,78439,78441,78443],{"class":78,"line":1164},[76,78434,52113],{"class":86},[76,78436,51313],{"class":51269},[76,78438,51316],{"class":1927},[76,78440,133],{"class":86},[76,78442,51321],{"class":192},[76,78444,51276],{"class":86},[76,78446,78447,78449,78451,78453,78455,78457,78459,78461,78463],{"class":78,"line":1178},[76,78448,52113],{"class":86},[76,78450,51313],{"class":51269},[76,78452,14887],{"class":1927},[76,78454,133],{"class":86},[76,78456,51360],{"class":192},[76,78458,51340],{"class":1927},[76,78460,133],{"class":86},[76,78462,51367],{"class":192},[76,78464,51276],{"class":86},[76,78466,78467,78469,78471,78473,78475],{"class":78,"line":1184},[76,78468,52113],{"class":86},[76,78470,51376],{"class":51269},[76,78472,51379],{"class":86},[76,78474,51376],{"class":51269},[76,78476,51276],{"class":86},[76,78478,78479,78481,78483],{"class":78,"line":1275},[76,78480,52113],{"class":86},[76,78482,5092],{"class":51269},[76,78484,51276],{"class":86},[76,78486,78487,78489],{"class":78,"line":1281},[76,78488,6370],{"class":51269},[76,78490,15539],{"class":86},[76,78492,78493,78495,78497,78499],{"class":78,"line":1293},[76,78494,54664],{"class":136},[76,78496,51406],{"class":86},[76,78498,279],{"class":136},[76,78500,1254],{"class":86},[76,78502,78503,78505,78507,78509],{"class":78,"line":1576},[76,78504,54675],{"class":136},[76,78506,51406],{"class":86},[76,78508,279],{"class":136},[76,78510,1254],{"class":86},[76,78512,78513,78515,78517,78519],{"class":78,"line":1581},[76,78514,72565],{"class":136},[76,78516,51406],{"class":86},[76,78518,60474],{"class":136},[76,78520,1254],{"class":86},[76,78522,78523],{"class":78,"line":1587},[76,78524,2151],{"class":86},[76,78526,78527],{"class":78,"line":1592},[76,78528,2365],{"emptyLinePlaceholder":2364},[76,78530,78531,78533],{"class":78,"line":1606},[76,78532,62092],{"class":1927},[76,78534,15539],{"class":86},[76,78536,78537,78539,78541,78544,78546],{"class":78,"line":1611},[76,78538,54740],{"class":136},[76,78540,51406],{"class":86},[76,78542,78543],{"class":136},"990",[76,78545,51461],{"class":82},[76,78547,1254],{"class":86},[76,78549,78550,78552,78554,78556,78558],{"class":78,"line":1617},[76,78551,54675],{"class":136},[76,78553,51406],{"class":86},[76,78555,279],{"class":136},[76,78557,51525],{"class":136},[76,78559,1254],{"class":86},[76,78561,78562,78564,78566,78568],{"class":78,"line":1638},[76,78563,54978],{"class":136},[76,78565,51406],{"class":86},[76,78567,51446],{"class":136},[76,78569,1254],{"class":86},[76,78571,78572,78575,78577,78580],{"class":78,"line":1643},[76,78573,78574],{"class":136},"      flex-wrap",[76,78576,51406],{"class":86},[76,78578,78579],{"class":136},"wrap",[76,78581,1254],{"class":86},[76,78583,78584],{"class":78,"line":1657},[76,78585,2151],{"class":86},[76,78587,78588],{"class":78,"line":1662},[76,78589,2365],{"emptyLinePlaceholder":2364},[76,78591,78592,78595],{"class":78,"line":1691},[76,78593,78594],{"class":1927},"    .item",[76,78596,15539],{"class":86},[76,78598,78599,78601,78603,78606,78608],{"class":78,"line":1696},[76,78600,54740],{"class":136},[76,78602,51406],{"class":86},[76,78604,78605],{"class":136},"240",[76,78607,51461],{"class":82},[76,78609,1254],{"class":86},[76,78611,78612,78614,78616,78618,78620],{"class":78,"line":1713},[76,78613,61969],{"class":136},[76,78615,51406],{"class":86},[76,78617,534],{"class":136},[76,78619,51461],{"class":82},[76,78621,1254],{"class":86},[76,78623,78624,78626,78628,78630,78632,78635,78637],{"class":78,"line":1718},[76,78625,54664],{"class":136},[76,78627,51406],{"class":86},[76,78629,788],{"class":136},[76,78631,51461],{"class":82},[76,78633,78634],{"class":136}," 30",[76,78636,51461],{"class":82},[76,78638,1254],{"class":86},[76,78640,78641,78643,78645,78647,78650,78653,78655],{"class":78,"line":1723},[76,78642,61829],{"class":136},[76,78644,51406],{"class":86},[76,78646,28090],{"class":136},[76,78648,78649],{"class":136}," ease",[76,78651,78652],{"class":136}," .5",[76,78654,783],{"class":82},[76,78656,1254],{"class":86},[76,78658,78659,78662,78664,78666,78668],{"class":78,"line":1728},[76,78660,78661],{"class":136},"      margin-bottom",[76,78663,51406],{"class":86},[76,78665,788],{"class":136},[76,78667,51461],{"class":82},[76,78669,1254],{"class":86},[76,78671,78672],{"class":78,"line":1742},[76,78673,2151],{"class":86},[76,78675,78676],{"class":78,"line":1747},[76,78677,2365],{"emptyLinePlaceholder":2364},[76,78679,78680,78683,78685,78688],{"class":78,"line":2542},[76,78681,78682],{"class":1927},"    .item:nth-child",[76,78684,87],{"class":86},[76,78686,78687],{"class":136},"4n",[76,78689,12409],{"class":86},[76,78691,78692,78694,78696,78698],{"class":78,"line":2556},[76,78693,61969],{"class":136},[76,78695,51406],{"class":86},[76,78697,279],{"class":136},[76,78699,1254],{"class":86},[76,78701,78702],{"class":78,"line":2564},[76,78703,2151],{"class":86},[76,78705,78706],{"class":78,"line":2569},[76,78707,2365],{"emptyLinePlaceholder":2364},[76,78709,78710,78713],{"class":78,"line":2575},[76,78711,78712],{"class":1927},"    .item:hover",[76,78714,15539],{"class":86},[76,78716,78717,78720,78722,78724,78726,78728,78730,78732,78734,78737,78739,78741,78743,78745,78747,78749,78751,78754],{"class":78,"line":2581},[76,78718,78719],{"class":136},"      box-shadow",[76,78721,51406],{"class":86},[76,78723,279],{"class":136},[76,78725,51461],{"class":82},[76,78727,4058],{"class":136},[76,78729,51461],{"class":82},[76,78731,2112],{"class":136},[76,78733,51461],{"class":82},[76,78735,78736],{"class":136}," rgba",[76,78738,87],{"class":86},[76,78740,279],{"class":136},[76,78742,12402],{"class":86},[76,78744,279],{"class":136},[76,78746,12402],{"class":86},[76,78748,279],{"class":136},[76,78750,12402],{"class":86},[76,78752,78753],{"class":136},".2",[76,78755,2684],{"class":86},[76,78757,78758,78761,78763,78766,78768,78770,78772,78775,78777,78779,78781],{"class":78,"line":2586},[76,78759,78760],{"class":136},"      transform",[76,78762,51406],{"class":86},[76,78764,78765],{"class":136},"translate3d",[76,78767,87],{"class":86},[76,78769,279],{"class":136},[76,78771,12402],{"class":86},[76,78773,78774],{"class":136},"-4",[76,78776,51461],{"class":82},[76,78778,12402],{"class":86},[76,78780,279],{"class":136},[76,78782,2684],{"class":86},[76,78784,78785,78787,78789,78791],{"class":78,"line":7915},[76,78786,61994],{"class":136},[76,78788,51406],{"class":86},[76,78790,61999],{"class":136},[76,78792,1254],{"class":86},[76,78794,78795],{"class":78,"line":7939},[76,78796,2151],{"class":86},[76,78798,78799],{"class":78,"line":7944},[76,78800,2365],{"emptyLinePlaceholder":2364},[76,78802,78803,78805,78807],{"class":78,"line":7950},[76,78804,78594],{"class":1927},[76,78806,55584],{"class":51269},[76,78808,15539],{"class":86},[76,78810,78811,78813,78815,78817,78819],{"class":78,"line":7977},[76,78812,54740],{"class":136},[76,78814,51406],{"class":86},[76,78816,399],{"class":136},[76,78818,416],{"class":82},[76,78820,1254],{"class":86},[76,78822,78823],{"class":78,"line":7982},[76,78824,2151],{"class":86},[76,78826,78827],{"class":78,"line":7988},[76,78828,2365],{"emptyLinePlaceholder":2364},[76,78830,78831,78833,78835],{"class":78,"line":8000},[76,78832,78594],{"class":1927},[76,78834,62273],{"class":1927},[76,78836,15539],{"class":86},[76,78838,78839,78841,78843,78845,78847],{"class":78,"line":8012},[76,78840,54891],{"class":136},[76,78842,51406],{"class":86},[76,78844,738],{"class":136},[76,78846,51461],{"class":82},[76,78848,1254],{"class":86},[76,78850,78851,78853,78855,78857,78859],{"class":78,"line":8024},[76,78852,78661],{"class":136},[76,78854,51406],{"class":86},[76,78856,534],{"class":136},[76,78858,51461],{"class":82},[76,78860,1254],{"class":86},[76,78862,78863,78865,78867,78870],{"class":78,"line":9683},[76,78864,57385],{"class":136},[76,78866,51406],{"class":86},[76,78868,78869],{"class":136},"#666",[76,78871,1254],{"class":86},[76,78873,78874],{"class":78,"line":9708},[76,78875,2151],{"class":86},[76,78877,78878],{"class":78,"line":9731},[76,78879,2365],{"emptyLinePlaceholder":2364},[76,78881,78882,78884,78887],{"class":78,"line":9755},[76,78883,78594],{"class":1927},[76,78885,78886],{"class":1927}," .price",[76,78888,15539],{"class":86},[76,78890,78891,78893,78895,78897,78899],{"class":78,"line":9760},[76,78892,54891],{"class":136},[76,78894,51406],{"class":86},[76,78896,838],{"class":136},[76,78898,51461],{"class":82},[76,78900,1254],{"class":86},[76,78902,78903,78905,78907,78910],{"class":78,"line":9765},[76,78904,57385],{"class":136},[76,78906,51406],{"class":86},[76,78908,78909],{"class":136},"firebrick",[76,78911,1254],{"class":86},[76,78913,78914],{"class":78,"line":9770},[76,78915,2151],{"class":86},[76,78917,78918],{"class":78,"line":9779},[76,78919,2365],{"emptyLinePlaceholder":2364},[76,78921,78922,78924,78927],{"class":78,"line":9784},[76,78923,78594],{"class":1927},[76,78925,78926],{"class":1927}," .price::before",[76,78928,15539],{"class":86},[76,78930,78931,78934,78936,78939],{"class":78,"line":9790},[76,78932,78933],{"class":136},"      content",[76,78935,51406],{"class":86},[76,78937,78938],{"class":192},"'￥'",[76,78940,1254],{"class":86},[76,78942,78943,78945,78947,78949,78951],{"class":78,"line":9811},[76,78944,54891],{"class":136},[76,78946,51406],{"class":86},[76,78948,637],{"class":136},[76,78950,51461],{"class":82},[76,78952,1254],{"class":86},[76,78954,78955],{"class":78,"line":9817},[76,78956,2151],{"class":86},[76,78958,78959],{"class":78,"line":9831},[76,78960,2365],{"emptyLinePlaceholder":2364},[76,78962,78963,78966],{"class":78,"line":9837},[76,78964,78965],{"class":1927},"    .filter",[76,78967,15539],{"class":86},[76,78969,78970,78972,78974,78976],{"class":78,"line":9864},[76,78971,54978],{"class":136},[76,78973,51406],{"class":86},[76,78975,51446],{"class":136},[76,78977,1254],{"class":86},[76,78979,78980,78982,78984,78986,78988],{"class":78,"line":9873},[76,78981,54740],{"class":136},[76,78983,51406],{"class":86},[76,78985,78543],{"class":136},[76,78987,51461],{"class":82},[76,78989,1254],{"class":86},[76,78991,78992,78994,78996,78998,79000],{"class":78,"line":9879},[76,78993,54675],{"class":136},[76,78995,51406],{"class":86},[76,78997,279],{"class":136},[76,78999,51525],{"class":136},[76,79001,1254],{"class":86},[76,79003,79004,79006,79008,79010,79012,79014],{"class":78,"line":9887},[76,79005,54664],{"class":136},[76,79007,51406],{"class":86},[76,79009,744],{"class":136},[76,79011,51461],{"class":82},[76,79013,78634],{"class":136},[76,79015,79016],{"class":82},"px\n",[76,79018,79019],{"class":78,"line":9892},[76,79020,2151],{"class":86},[76,79022,79023],{"class":78,"line":16571},[76,79024,2365],{"emptyLinePlaceholder":2364},[76,79026,79027,79029,79031],{"class":78,"line":16577},[76,79028,78965],{"class":1927},[76,79030,1362],{"class":51269},[76,79032,15539],{"class":86},[76,79034,79035,79037,79039,79041,79043,79045,79047],{"class":78,"line":16600},[76,79036,54664],{"class":136},[76,79038,51406],{"class":86},[76,79040,534],{"class":136},[76,79042,51461],{"class":82},[76,79044,8917],{"class":136},[76,79046,51461],{"class":82},[76,79048,1254],{"class":86},[76,79050,79051,79053,79055,79057],{"class":78,"line":16606},[76,79052,61690],{"class":136},[76,79054,51406],{"class":86},[76,79056,61787],{"class":136},[76,79058,1254],{"class":86},[76,79060,79061,79063,79065,79067],{"class":78,"line":16629},[76,79062,57385],{"class":136},[76,79064,51406],{"class":86},[76,79066,78869],{"class":136},[76,79068,1254],{"class":86},[76,79070,79071,79073,79075,79077],{"class":78,"line":16643},[76,79072,63939],{"class":136},[76,79074,51406],{"class":86},[76,79076,54706],{"class":136},[76,79078,1254],{"class":86},[76,79080,79081,79083,79085,79087,79089],{"class":78,"line":16663},[76,79082,61719],{"class":136},[76,79084,51406],{"class":86},[76,79086,788],{"class":136},[76,79088,51461],{"class":82},[76,79090,1254],{"class":86},[76,79092,79093],{"class":78,"line":16669},[76,79094,2151],{"class":86},[76,79096,79097],{"class":78,"line":16680},[76,79098,2365],{"emptyLinePlaceholder":2364},[76,79100,79101,79103,79105,79107],{"class":78,"line":16703},[76,79102,78965],{"class":1927},[76,79104,1362],{"class":51269},[76,79106,61869],{"class":1927},[76,79108,15539],{"class":86},[76,79110,79111,79113,79115,79118],{"class":78,"line":16725},[76,79112,54853],{"class":136},[76,79114,51406],{"class":86},[76,79116,79117],{"class":136},"#05943c",[76,79119,1254],{"class":86},[76,79121,79122,79124,79126,79128],{"class":78,"line":16730},[76,79123,57385],{"class":136},[76,79125,51406],{"class":86},[76,79127,60811],{"class":136},[76,79129,1254],{"class":86},[76,79131,79132],{"class":78,"line":16736},[76,79133,2151],{"class":86},[76,79135,79136,79138,79140],{"class":78,"line":16750},[76,79137,52386],{"class":86},[76,79139,5092],{"class":51269},[76,79141,51276],{"class":86},[76,79143,79144,79146,79148],{"class":78,"line":16763},[76,79145,51754],{"class":86},[76,79147,51303],{"class":51269},[76,79149,51276],{"class":86},[76,79151,79152],{"class":78,"line":16768},[76,79153,2365],{"emptyLinePlaceholder":2364},[76,79155,79156,79158,79160],{"class":78,"line":16782},[76,79157,998],{"class":86},[76,79159,51769],{"class":51269},[76,79161,51276],{"class":86},[76,79163,79164,79166,79168,79170,79172,79175],{"class":78,"line":16787},[76,79165,52113],{"class":86},[76,79167,51580],{"class":51269},[76,79169,53455],{"class":1927},[76,79171,133],{"class":86},[76,79173,79174],{"class":192},"\"filter\"",[76,79176,51276],{"class":86},[76,79178,79179,79181,79183,79185,79187,79189,79192,79194,79196,79199,79201],{"class":78,"line":16793},[76,79180,51310],{"class":86},[76,79182,326],{"class":51269},[76,79184,61026],{"class":1927},[76,79186,133],{"class":86},[76,79188,61031],{"class":192},[76,79190,79191],{"class":1927}," data-index",[76,79193,133],{"class":86},[76,79195,3643],{"class":192},[76,79197,79198],{"class":86},">0-100元\u003C\u002F",[76,79200,326],{"class":51269},[76,79202,51276],{"class":86},[76,79204,79205,79207,79209,79211,79213,79215,79217,79219,79221,79224,79226],{"class":78,"line":16798},[76,79206,51310],{"class":86},[76,79208,326],{"class":51269},[76,79210,61026],{"class":1927},[76,79212,133],{"class":86},[76,79214,61031],{"class":192},[76,79216,79191],{"class":1927},[76,79218,133],{"class":86},[76,79220,3666],{"class":192},[76,79222,79223],{"class":86},">100-300元\u003C\u002F",[76,79225,326],{"class":51269},[76,79227,51276],{"class":86},[76,79229,79230,79232,79234,79236,79238,79240,79242,79244,79246,79249,79251],{"class":78,"line":16812},[76,79231,51310],{"class":86},[76,79233,326],{"class":51269},[76,79235,61026],{"class":1927},[76,79237,133],{"class":86},[76,79239,61031],{"class":192},[76,79241,79191],{"class":1927},[76,79243,133],{"class":86},[76,79245,3679],{"class":192},[76,79247,79248],{"class":86},">300元以上\u003C\u002F",[76,79250,326],{"class":51269},[76,79252,51276],{"class":86},[76,79254,79255,79257,79259,79261,79263,79265,79268,79270],{"class":78,"line":16817},[76,79256,51310],{"class":86},[76,79258,326],{"class":51269},[76,79260,61026],{"class":1927},[76,79262,133],{"class":86},[76,79264,61031],{"class":192},[76,79266,79267],{"class":86},">全部区间\u003C\u002F",[76,79269,326],{"class":51269},[76,79271,51276],{"class":86},[76,79273,79274,79276,79278],{"class":78,"line":16822},[76,79275,52386],{"class":86},[76,79277,51580],{"class":51269},[76,79279,51276],{"class":86},[76,79281,79282,79284,79286,79288,79290,79292],{"class":78,"line":16836},[76,79283,52113],{"class":86},[76,79285,51580],{"class":51269},[76,79287,53455],{"class":1927},[76,79289,133],{"class":86},[76,79291,62577],{"class":192},[76,79293,51276],{"class":86},[76,79295,79296],{"class":78,"line":16848},[76,79297,79298],{"class":146},"    \u003C!-- \u003Cdiv class=\"item\">\n",[76,79300,79301],{"class":78,"line":16853},[76,79302,79303],{"class":146},"      \u003Cimg src=\"\" alt=\"\">\n",[76,79305,79306],{"class":78,"line":16866},[76,79307,79308],{"class":146},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[76,79310,79311],{"class":78,"line":16871},[76,79312,79313],{"class":146},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[76,79315,79316],{"class":78,"line":16876},[76,79317,79318],{"class":146},"    \u003C\u002Fdiv> -->\n",[76,79320,79321,79323,79325],{"class":78,"line":16881},[76,79322,52386],{"class":86},[76,79324,51580],{"class":51269},[76,79326,51276],{"class":86},[76,79328,79329,79331,79333],{"class":78,"line":16894},[76,79330,52113],{"class":86},[76,79332,51782],{"class":51269},[76,79334,51276],{"class":86},[76,79336,79337],{"class":78,"line":16899},[76,79338,79339],{"class":146},"    \u002F\u002F 2. 初始化数据\n",[76,79341,79342,79344,79347,79349],{"class":78,"line":32602},[76,79343,11188],{"class":82},[76,79345,79346],{"class":136}," goodsList",[76,79348,13531],{"class":82},[76,79350,55416],{"class":86},[76,79352,79353],{"class":78,"line":32608},[76,79354,79355],{"class":86},"      {\n",[76,79357,79358,79361,79364],{"class":78,"line":32614},[76,79359,79360],{"class":86},"        id: ",[76,79362,79363],{"class":192},"'4001172'",[76,79365,31435],{"class":86},[76,79367,79368,79371,79374],{"class":78,"line":32620},[76,79369,79370],{"class":86},"        name: ",[76,79372,79373],{"class":192},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[76,79375,31435],{"class":86},[76,79377,79378,79381,79384],{"class":78,"line":32626},[76,79379,79380],{"class":86},"        price: ",[76,79382,79383],{"class":192},"'289.00'",[76,79385,31435],{"class":86},[76,79387,79388,79391,79394],{"class":78,"line":32637},[76,79389,79390],{"class":86},"        picture: ",[76,79392,79393],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[76,79395,31435],{"class":86},[76,79397,79398],{"class":78,"line":32643},[76,79399,77861],{"class":86},[76,79401,79402],{"class":78,"line":32663},[76,79403,79355],{"class":86},[76,79405,79406,79408,79411],{"class":78,"line":32669},[76,79407,79360],{"class":86},[76,79409,79410],{"class":192},"'4001594'",[76,79412,31435],{"class":86},[76,79414,79415,79417,79420],{"class":78,"line":32680},[76,79416,79370],{"class":86},[76,79418,79419],{"class":192},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[76,79421,31435],{"class":86},[76,79423,79424,79426,79429],{"class":78,"line":32686},[76,79425,79380],{"class":86},[76,79427,79428],{"class":192},"'288.00'",[76,79430,31435],{"class":86},[76,79432,79433,79435,79438],{"class":78,"line":32692},[76,79434,79390],{"class":86},[76,79436,79437],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[76,79439,31435],{"class":86},[76,79441,79442],{"class":78,"line":32698},[76,79443,77861],{"class":86},[76,79445,79446],{"class":78,"line":32704},[76,79447,79355],{"class":86},[76,79449,79450,79452,79455],{"class":78,"line":32710},[76,79451,79360],{"class":86},[76,79453,79454],{"class":192},"'4001009'",[76,79456,31435],{"class":86},[76,79458,79459,79461,79464],{"class":78,"line":32716},[76,79460,79370],{"class":86},[76,79462,79463],{"class":192},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[76,79465,31435],{"class":86},[76,79467,79468,79470,79473],{"class":78,"line":32722},[76,79469,79380],{"class":86},[76,79471,79472],{"class":192},"'109.00'",[76,79474,31435],{"class":86},[76,79476,79477,79479,79482],{"class":78,"line":32742},[76,79478,79390],{"class":86},[76,79480,79481],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[76,79483,31435],{"class":86},[76,79485,79486],{"class":78,"line":32748},[76,79487,77861],{"class":86},[76,79489,79490],{"class":78,"line":32764},[76,79491,79355],{"class":86},[76,79493,79494,79496,79499],{"class":78,"line":32770},[76,79495,79360],{"class":86},[76,79497,79498],{"class":192},"'4001874'",[76,79500,31435],{"class":86},[76,79502,79503,79505,79508],{"class":78,"line":32784},[76,79504,79370],{"class":86},[76,79506,79507],{"class":192},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[76,79509,31435],{"class":86},[76,79511,79512,79514,79517],{"class":78,"line":32790},[76,79513,79380],{"class":86},[76,79515,79516],{"class":192},"'488.00'",[76,79518,31435],{"class":86},[76,79520,79521,79523,79526],{"class":78,"line":32805},[76,79522,79390],{"class":86},[76,79524,79525],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[76,79527,31435],{"class":86},[76,79529,79530],{"class":78,"line":32811},[76,79531,77861],{"class":86},[76,79533,79534],{"class":78,"line":32820},[76,79535,79355],{"class":86},[76,79537,79538,79540,79543],{"class":78,"line":32826},[76,79539,79360],{"class":86},[76,79541,79542],{"class":192},"'4001649'",[76,79544,31435],{"class":86},[76,79546,79547,79549,79552],{"class":78,"line":32835},[76,79548,79370],{"class":86},[76,79550,79551],{"class":192},"'大师监制龙泉青瓷茶叶罐'",[76,79553,31435],{"class":86},[76,79555,79556,79558,79561],{"class":78,"line":32841},[76,79557,79380],{"class":86},[76,79559,79560],{"class":192},"'139.00'",[76,79562,31435],{"class":86},[76,79564,79565,79567,79570],{"class":78,"line":32847},[76,79566,79390],{"class":86},[76,79568,79569],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[76,79571,31435],{"class":86},[76,79573,79574],{"class":78,"line":32856},[76,79575,77861],{"class":86},[76,79577,79578],{"class":78,"line":32862},[76,79579,79355],{"class":86},[76,79581,79582,79584,79587],{"class":78,"line":32873},[76,79583,79360],{"class":86},[76,79585,79586],{"class":192},"'3997185'",[76,79588,31435],{"class":86},[76,79590,79591,79593,79596],{"class":78,"line":32879},[76,79592,79370],{"class":86},[76,79594,79595],{"class":192},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[76,79597,31435],{"class":86},[76,79599,79600,79602,79605],{"class":78,"line":32898},[76,79601,79380],{"class":86},[76,79603,79604],{"class":192},"'108.00'",[76,79606,31435],{"class":86},[76,79608,79609,79611,79614],{"class":78,"line":32904},[76,79610,79390],{"class":86},[76,79612,79613],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[76,79615,31435],{"class":86},[76,79617,79618],{"class":78,"line":32915},[76,79619,77861],{"class":86},[76,79621,79622],{"class":78,"line":32921},[76,79623,79355],{"class":86},[76,79625,79626,79628,79631],{"class":78,"line":32941},[76,79627,79360],{"class":86},[76,79629,79630],{"class":192},"'3997403'",[76,79632,31435],{"class":86},[76,79634,79635,79637,79640],{"class":78,"line":32957},[76,79636,79370],{"class":86},[76,79638,79639],{"class":192},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[76,79641,31435],{"class":86},[76,79643,79644,79646,79649],{"class":78,"line":32963},[76,79645,79380],{"class":86},[76,79647,79648],{"class":192},"'100.00'",[76,79650,31435],{"class":86},[76,79652,79653,79655,79658],{"class":78,"line":32977},[76,79654,79390],{"class":86},[76,79656,79657],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[76,79659,31435],{"class":86},[76,79661,79662],{"class":78,"line":32983},[76,79663,77861],{"class":86},[76,79665,79666],{"class":78,"line":32989},[76,79667,79355],{"class":86},[76,79669,79670,79672,79675],{"class":78,"line":33000},[76,79671,79360],{"class":86},[76,79673,79674],{"class":192},"'3998274'",[76,79676,31435],{"class":86},[76,79678,79679,79681,79684],{"class":78,"line":33006},[76,79680,79370],{"class":86},[76,79682,79683],{"class":192},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[76,79685,31435],{"class":86},[76,79687,79688,79690,79692],{"class":78,"line":33012},[76,79689,79380],{"class":86},[76,79691,79560],{"class":192},[76,79693,31435],{"class":86},[76,79695,79696,79698,79701],{"class":78,"line":33022},[76,79697,79390],{"class":86},[76,79699,79700],{"class":192},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[76,79702,31435],{"class":86},[76,79704,79705],{"class":78,"line":33028},[76,79706,77861],{"class":86},[76,79708,79709],{"class":78,"line":33039},[76,79710,53078],{"class":86},[76,79712,79713],{"class":78,"line":33045},[76,79714,2365],{"emptyLinePlaceholder":2364},[76,79716,79717],{"class":78,"line":33055},[76,79718,79719],{"class":146},"    \u002F\u002F 1.渲染函数\n",[76,79721,79722,79724,79726,79728,79730],{"class":78,"line":33060},[76,79723,70053],{"class":82},[76,79725,70056],{"class":1927},[76,79727,87],{"class":86},[76,79729,3845],{"class":5183},[76,79731,12409],{"class":86},[76,79733,79734],{"class":78,"line":33066},[76,79735,79736],{"class":146},"      \u002F\u002F 声明空字符串\n",[76,79738,79739,79742,79745,79747],{"class":78,"line":33115},[76,79740,79741],{"class":82},"      let",[76,79743,79744],{"class":86}," str ",[76,79746,133],{"class":82},[76,79748,70073],{"class":192},[76,79750,79751],{"class":78,"line":33162},[76,79752,70078],{"class":146},[76,79754,79755,79757,79760,79762,79765,79768],{"class":78,"line":33167},[76,79756,57976],{"class":86},[76,79758,79759],{"class":1927},"forEach",[76,79761,87],{"class":86},[76,79763,79764],{"class":5183},"item",[76,79766,79767],{"class":82}," =>",[76,79769,15539],{"class":86},[76,79771,79772,79774,79777,79780,79782,79785,79787,79790,79793,79795],{"class":78,"line":33173},[76,79773,61239],{"class":82},[76,79775,79776],{"class":86}," { ",[76,79778,79779],{"class":136},"name",[76,79781,12402],{"class":86},[76,79783,79784],{"class":136},"price",[76,79786,12402],{"class":86},[76,79788,79789],{"class":136},"picture",[76,79791,79792],{"class":86}," } ",[76,79794,133],{"class":82},[76,79796,79797],{"class":86}," item\n",[76,79799,79800,79803,79805],{"class":78,"line":33192},[76,79801,79802],{"class":86},"        str ",[76,79804,9444],{"class":82},[76,79806,70137],{"class":192},[76,79808,79809],{"class":78,"line":33198},[76,79810,79811],{"class":192},"          \u003Cdiv class=\"item\">\n",[76,79813,79814,79817,79819],{"class":78,"line":33218},[76,79815,79816],{"class":192},"            \u003Cimg src=\"${",[76,79818,79789],{"class":86},[76,79820,79821],{"class":192},"}\" alt=\"\">\n",[76,79823,79824,79827,79829],{"class":78,"line":33224},[76,79825,79826],{"class":192},"            \u003Cp class=\"name\">${",[76,79828,79779],{"class":86},[76,79830,79831],{"class":192},"}\u003C\u002Fp>\n",[76,79833,79834,79837,79839],{"class":78,"line":33230},[76,79835,79836],{"class":192},"            \u003Cp class=\"price\">${",[76,79838,79784],{"class":86},[76,79840,79831],{"class":192},[76,79842,79843],{"class":78,"line":33240},[76,79844,79845],{"class":192},"          \u003C\u002Fdiv>\n",[76,79847,79848],{"class":78,"line":33245},[76,79849,79850],{"class":192},"        `\n",[76,79852,79853],{"class":78,"line":33251},[76,79854,64784],{"class":86},[76,79856,79857],{"class":78,"line":33267},[76,79858,79859],{"class":146},"      \u002F\u002F 追加给List\n",[76,79861,79862,79864,79866,79868,79871,79873,79875],{"class":78,"line":33312},[76,79863,55740],{"class":86},[76,79865,54368],{"class":1927},[76,79867,87],{"class":86},[76,79869,79870],{"class":192},"'.list'",[76,79872,74218],{"class":86},[76,79874,133],{"class":82},[76,79876,73954],{"class":86},[76,79878,79879],{"class":78,"line":33318},[76,79880,2151],{"class":86},[76,79882,79883],{"class":78,"line":33324},[76,79884,79885],{"class":146},"    \u002F\u002F 页面一打开就需要渲染\n",[76,79887,79888,79891],{"class":78,"line":33330},[76,79889,79890],{"class":1927},"    render",[76,79892,79893],{"class":86},"(goodsList)\n",[76,79895,79896],{"class":78,"line":33341},[76,79897,79898],{"class":146},"    \u002F\u002F 2.过滤筛选\n",[76,79900,79901,79903,79905,79907,79910,79912,79914,79916,79918,79920,79922,79924],{"class":78,"line":33347},[76,79902,52376],{"class":86},[76,79904,54368],{"class":1927},[76,79906,87],{"class":86},[76,79908,79909],{"class":192},"'.filter'",[76,79911,30795],{"class":86},[76,79913,57782],{"class":1927},[76,79915,87],{"class":86},[76,79917,57787],{"class":192},[76,79919,12402],{"class":86},[76,79921,162],{"class":5183},[76,79923,79767],{"class":82},[76,79925,15539],{"class":86},[76,79927,79928],{"class":78,"line":33353},[76,79929,79930],{"class":146},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[76,79932,79933,79935,79937,79940,79942,79944,79946,79948],{"class":78,"line":33359},[76,79934,58197],{"class":82},[76,79936,79776],{"class":86},[76,79938,79939],{"class":136},"tagName",[76,79941,12402],{"class":86},[76,79943,31506],{"class":136},[76,79945,79792],{"class":86},[76,79947,133],{"class":82},[76,79949,79950],{"class":86}," e.target\n",[76,79952,79953],{"class":78,"line":33377},[76,79954,79955],{"class":146},"      \u002F\u002F 判断\n",[76,79957,79958,79960,79962,79964,79966],{"class":78,"line":33391},[76,79959,54449],{"class":82},[76,79961,67003],{"class":86},[76,79963,54455],{"class":82},[76,79965,68225],{"class":192},[76,79967,12409],{"class":86},[76,79969,79970],{"class":78,"line":33400},[76,79971,79972],{"class":146},"        \u002F\u002F console.log(11)\n",[76,79974,79975],{"class":78,"line":33409},[76,79976,79977],{"class":146},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[76,79979,79980],{"class":78,"line":33418},[76,79981,79982],{"class":146},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[76,79984,79985,79987,79989,79991],{"class":78,"line":33427},[76,79986,51799],{"class":82},[76,79988,51802],{"class":86},[76,79990,133],{"class":82},[76,79992,79993],{"class":86}," goodsList\n",[76,79995,79996,79998,80001,80003,80006],{"class":78,"line":33433},[76,79997,2462],{"class":82},[76,79999,80000],{"class":86}," (dataset.index ",[76,80002,54455],{"class":82},[76,80004,80005],{"class":192}," '1'",[76,80007,12409],{"class":86},[76,80009,80010,80013,80015,80018,80021,80023,80025,80027,80030,80032,80034,80037,80039,80041,80043],{"class":78,"line":33439},[76,80011,80012],{"class":86},"          arr ",[76,80014,133],{"class":82},[76,80016,80017],{"class":86}," goodsList.",[76,80019,80020],{"class":1927},"filter",[76,80022,87],{"class":86},[76,80024,79764],{"class":5183},[76,80026,79767],{"class":82},[76,80028,80029],{"class":86}," item.price ",[76,80031,1674],{"class":82},[76,80033,4058],{"class":136},[76,80035,80036],{"class":82}," &&",[76,80038,80029],{"class":86},[76,80040,1552],{"class":82},[76,80042,5721],{"class":136},[76,80044,93],{"class":86},[76,80046,80047,80050,80052,80054,80056,80058,80061],{"class":78,"line":33447},[76,80048,80049],{"class":86},"        } ",[76,80051,1665],{"class":82},[76,80053,1668],{"class":82},[76,80055,80000],{"class":86},[76,80057,54455],{"class":82},[76,80059,80060],{"class":192}," '2'",[76,80062,12409],{"class":86},[76,80064,80065,80067,80069,80071,80073,80075,80077,80079,80081,80083,80085,80087,80089,80091,80094],{"class":78,"line":33452},[76,80066,80012],{"class":86},[76,80068,133],{"class":82},[76,80070,80017],{"class":86},[76,80072,80020],{"class":1927},[76,80074,87],{"class":86},[76,80076,79764],{"class":5183},[76,80078,79767],{"class":82},[76,80080,80029],{"class":86},[76,80082,1674],{"class":82},[76,80084,5721],{"class":136},[76,80086,80036],{"class":82},[76,80088,80029],{"class":86},[76,80090,1552],{"class":82},[76,80092,80093],{"class":136}," 300",[76,80095,93],{"class":86},[76,80097,80098,80100,80102,80104,80106,80108,80111],{"class":78,"line":33458},[76,80099,80049],{"class":86},[76,80101,1665],{"class":82},[76,80103,1668],{"class":82},[76,80105,80000],{"class":86},[76,80107,54455],{"class":82},[76,80109,80110],{"class":192}," '3'",[76,80112,12409],{"class":86},[76,80114,80115,80117,80119,80121,80123,80125,80127,80129,80131,80133,80135],{"class":78,"line":33469},[76,80116,80012],{"class":86},[76,80118,133],{"class":82},[76,80120,80017],{"class":86},[76,80122,80020],{"class":1927},[76,80124,87],{"class":86},[76,80126,79764],{"class":5183},[76,80128,79767],{"class":82},[76,80130,80029],{"class":86},[76,80132,1674],{"class":82},[76,80134,80093],{"class":136},[76,80136,93],{"class":86},[76,80138,80139],{"class":78,"line":33475},[76,80140,2494],{"class":86},[76,80142,80143],{"class":78,"line":33495},[76,80144,80145],{"class":146},"        \u002F\u002F 渲染函数\n",[76,80147,80148,80150],{"class":78,"line":33501},[76,80149,70377],{"class":1927},[76,80151,52381],{"class":86},[76,80153,80154],{"class":78,"line":33507},[76,80155,52367],{"class":86},[76,80157,80158],{"class":78,"line":33513},[76,80159,2365],{"emptyLinePlaceholder":2364},[76,80161,80162],{"class":78,"line":33530},[76,80163,33430],{"class":86},[76,80165,80166,80168,80170],{"class":78,"line":33536},[76,80167,52386],{"class":86},[76,80169,51782],{"class":51269},[76,80171,51276],{"class":86},[76,80173,80174,80176,80178],{"class":78,"line":33542},[76,80175,51754],{"class":86},[76,80177,51769],{"class":51269},[76,80179,51276],{"class":86},[76,80181,80182],{"class":78,"line":33548},[76,80183,2365],{"emptyLinePlaceholder":2364},[76,80185,80186,80188,80190],{"class":78,"line":33554},[76,80187,51754],{"class":86},[76,80189,50604],{"class":51269},[76,80191,51276],{"class":86},[16,80193,80195],{"id":80194},"_410-深入了解对象","4.10 深入了解对象",[46,80197,80199],{"id":80198},"_4101-创建对象","4.10.1 创建对象",[21,80201,80202],{},[1426,80203],{"alt":71,"src":80204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[21,80206,80207],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[46,80209,80211],{"id":80210},"_4102-构造函数","4.10.2 构造函数",[21,80213,80214,80217],{},[237,80215,80216],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[21,80219,80220,80223],{},[237,80221,80222],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[66,80225,80227],{"className":50602,"code":80226,"language":50604,"meta":71,"style":71},"\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",[73,80228,80229,80237,80242,80263,80276,80288,80300,80304,80309,80336,80341,80368],{"__ignoreMap":71},[76,80230,80231,80233,80235],{"class":78,"line":79},[76,80232,998],{"class":86},[76,80234,51782],{"class":51269},[76,80236,51276],{"class":86},[76,80238,80239],{"class":78,"line":96},[76,80240,80241],{"class":146},"\u002F\u002F例：\n",[76,80243,80244,80246,80249,80251,80253,80255,80257,80259,80261],{"class":78,"line":1143},[76,80245,54418],{"class":82},[76,80247,80248],{"class":1927}," Pig",[76,80250,87],{"class":86},[76,80252,79779],{"class":5183},[76,80254,466],{"class":86},[76,80256,70190],{"class":5183},[76,80258,466],{"class":86},[76,80260,70207],{"class":5183},[76,80262,12409],{"class":86},[76,80264,80265,80268,80271,80273],{"class":78,"line":1158},[76,80266,80267],{"class":136},"    this",[76,80269,80270],{"class":86},".name",[76,80272,133],{"class":82},[76,80274,80275],{"class":86},"name\n",[76,80277,80278,80280,80283,80285],{"class":78,"line":1164},[76,80279,80267],{"class":136},[76,80281,80282],{"class":86},".age",[76,80284,133],{"class":82},[76,80286,80287],{"class":86},"age\n",[76,80289,80290,80292,80295,80297],{"class":78,"line":1178},[76,80291,80267],{"class":136},[76,80293,80294],{"class":86},".gender",[76,80296,133],{"class":82},[76,80298,80299],{"class":86},"gender    \n",[76,80301,80302],{"class":78,"line":1184},[76,80303,1529],{"class":86},[76,80305,80306],{"class":78,"line":1275},[76,80307,80308],{"class":146},"\u002F\u002F创建佩奇对象\n",[76,80310,80311,80313,80316,80318,80320,80322,80325,80327,80329,80331,80334],{"class":78,"line":1281},[76,80312,6759],{"class":82},[76,80314,80315],{"class":136}," Peppa",[76,80317,11684],{"class":82},[76,80319,80248],{"class":1927},[76,80321,87],{"class":86},[76,80323,80324],{"class":192},"'佩奇'",[76,80326,466],{"class":86},[76,80328,432],{"class":136},[76,80330,466],{"class":86},[76,80332,80333],{"class":192},"'女'",[76,80335,93],{"class":86},[76,80337,80338],{"class":78,"line":1293},[76,80339,80340],{"class":146},"\u002F\u002F创建乔治对象\n",[76,80342,80343,80345,80348,80350,80352,80354,80357,80359,80361,80363,80366],{"class":78,"line":1576},[76,80344,6759],{"class":82},[76,80346,80347],{"class":136}," George",[76,80349,11684],{"class":82},[76,80351,80248],{"class":1927},[76,80353,87],{"class":86},[76,80355,80356],{"class":192},"'乔治'",[76,80358,466],{"class":86},[76,80360,159],{"class":136},[76,80362,466],{"class":86},[76,80364,80365],{"class":192},"'男'",[76,80367,93],{"class":86},[76,80369,80370,80372,80374],{"class":78,"line":1581},[76,80371,51754],{"class":86},[76,80373,51782],{"class":51269},[76,80375,51276],{"class":86},[21,80377,80378],{},[1426,80379],{"alt":71,"src":80380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[21,80382,80383],{},[1426,80384],{"alt":71,"src":80385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[21,80387,80388],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[21,80390,80391],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[21,80393,80394],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[21,80396,80397],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[21,80399,80400],{},"这里用等号是因为：对象.属性=值",[21,80402,80403],{},"①利用对象字面量创建对象",[21,80405,80406],{},"const o={",[21,80408,80409],{},"name:'pink'",[21,80411,80412],{},"} ②利用new Object创建对象",[21,80414,80415],{},"const o=new Object({name:'pink'})",[21,80417,80418],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[21,80420,80421],{},"构造函数创建对象的执行过程：",[21,80423,80424],{},[1426,80425],{"alt":71,"src":80426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[46,80428,80430],{"id":80429},"_4103-实例成员","4.10.3 实例成员",[21,80432,80433],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[29,80435,80436,80439,80442],{},[32,80437,80438],{},"实例对象的属性和方法即为实例成员",[32,80440,80441],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[32,80443,80444],{},"构造函数创建的实例对象彼此独立互不影响",[46,80446,80448],{"id":80447},"_4104-静态成员","4.10.4 静态成员",[21,80450,80451],{},[1426,80452],{"alt":71,"src":80453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[21,80455,80456],{},"静态成员有Date.now() Math.PI Math.random()",[21,80458,80459],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[21,80461,80462],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[21,80464,80465],{},"function Pig(name) n {",[21,80467,80468],{},"this.name=name",[21,80470,1034],{},[21,80472,80473],{},"Pig.eyes=2",[21,80475,80476],{},"Pig.sayHai=function () { console.log(this) }",[21,80478,80479],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[21,80481,80482],{},"console.log(Pig.eyes) \u002F\u002F2",[21,80484,11299],{},[29,80486,80487,80490,80493,80496,80499],{},[32,80488,80489],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[32,80491,80492],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[32,80494,80495],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[32,80497,80498],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[32,80500,80501],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[21,80503,80504],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[46,80506,80508],{"id":80507},"_4105-内置构造函数","4.10.5 内置构造函数",[21,80510,80511],{},"内置构造函数包含：",[21,80513,80514],{},[1426,80515],{"alt":71,"src":80516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[21,80518,80519],{},[1426,80520],{"alt":71,"src":80521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[21,80523,80524],{},"这些基本数据类型，js对他们进行了包装",[51782,80526,80527],{},"\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",[21965,80529,80531],{"id":80530},"_41051-object","4.10.5.1 Object",[21,80533,80534],{},"Object 是内置的构造函数，用于创建普通对象",[21,80536,80537],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[66,80539,80541],{"className":50602,"code":80540,"language":50604,"meta":71,"style":71},"const user=new Object({name:'小明',age:15})\n",[73,80542,80543],{"__ignoreMap":71},[76,80544,80545],{"class":78,"line":79},[76,80546,80540],{"class":86},[21,80548,80549],{},"三个常用的静态方法：",[22877,80551,80553],{"id":80552},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[21,80555,80556],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[21,80558,80559],{},[1426,80560],{"alt":71,"src":80561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[21,80563,80564],{},[1426,80565],{"alt":71,"src":80566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[66,80568,80570],{"className":53036,"code":80569,"language":53038,"meta":71,"style":71},"\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",[73,80571,80572,80580,80588,80593,80598,80603,80608,80613,80618,80626],{"__ignoreMap":71},[76,80573,80574,80576,80578],{"class":78,"line":79},[76,80575,998],{"class":86},[76,80577,51769],{"class":51269},[76,80579,51276],{"class":86},[76,80581,80582,80584,80586],{"class":78,"line":96},[76,80583,52113],{"class":86},[76,80585,51782],{"class":51269},[76,80587,51276],{"class":86},[76,80589,80590],{"class":78,"line":1143},[76,80591,80592],{"class":86},"    const o = { name: 'pink', age: 6 }\n",[76,80594,80595],{"class":78,"line":1158},[76,80596,80597],{"class":86},"    \u002F\u002F 获得所有属性名\n",[76,80599,80600],{"class":78,"line":1164},[76,80601,80602],{"class":86},"    const arr = Object.keys(o)\n",[76,80604,80605],{"class":78,"line":1178},[76,80606,80607],{"class":86},"    console.log(arr)\n",[76,80609,80610],{"class":78,"line":1184},[76,80611,80612],{"class":86},"    \u002F\u002F 获得所有属性值\n",[76,80614,80615],{"class":78,"line":1275},[76,80616,80617],{"class":86},"    console.log(Object.values(o))\n",[76,80619,80620,80622,80624],{"class":78,"line":1281},[76,80621,52386],{"class":86},[76,80623,51782],{"class":51269},[76,80625,51276],{"class":86},[76,80627,80628,80630,80632],{"class":78,"line":1293},[76,80629,51754],{"class":86},[76,80631,51769],{"class":51269},[76,80633,51276],{"class":86},[22877,80635,80637],{"id":80636},"_410512-object-assign","4.10.5.1.2 Object. assign",[21,80639,80640],{},"Object.assign(oo,o)",[21,80642,80643],{},"后的东西添加给前 是追加",[21,80645,80646],{},[1426,80647],{"alt":71,"src":80648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[21,80650,80651],{},[1426,80652],{"alt":71,"src":80653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[66,80655,80657],{"className":53036,"code":80656,"language":53038,"meta":71,"style":71},"\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",[73,80658,80659,80667,80675,80679,80683,80687,80691,80695,80699,80704,80709,80714,80719,80724,80732],{"__ignoreMap":71},[76,80660,80661,80663,80665],{"class":78,"line":79},[76,80662,998],{"class":86},[76,80664,51769],{"class":51269},[76,80666,51276],{"class":86},[76,80668,80669,80671,80673],{"class":78,"line":96},[76,80670,52113],{"class":86},[76,80672,51782],{"class":51269},[76,80674,51276],{"class":86},[76,80676,80677],{"class":78,"line":1143},[76,80678,80592],{"class":86},[76,80680,80681],{"class":78,"line":1158},[76,80682,80597],{"class":86},[76,80684,80685],{"class":78,"line":1164},[76,80686,80602],{"class":86},[76,80688,80689],{"class":78,"line":1178},[76,80690,80607],{"class":86},[76,80692,80693],{"class":78,"line":1184},[76,80694,80612],{"class":86},[76,80696,80697],{"class":78,"line":1275},[76,80698,80617],{"class":86},[76,80700,80701],{"class":78,"line":1281},[76,80702,80703],{"class":86},"    const oo = {}\n",[76,80705,80706],{"class":78,"line":1293},[76,80707,80708],{"class":86},"    Object.assign(oo, o)\n",[76,80710,80711],{"class":78,"line":1576},[76,80712,80713],{"class":86},"    console.log(oo)\n",[76,80715,80716],{"class":78,"line":1581},[76,80717,80718],{"class":86},"    Object.assign(o, { gender: '女' })\n",[76,80720,80721],{"class":78,"line":1587},[76,80722,80723],{"class":86},"    console.log(o)\n",[76,80725,80726,80728,80730],{"class":78,"line":1592},[76,80727,52386],{"class":86},[76,80729,51782],{"class":51269},[76,80731,51276],{"class":86},[76,80733,80734,80736,80738],{"class":78,"line":1606},[76,80735,51754],{"class":86},[76,80737,51769],{"class":51269},[76,80739,51276],{"class":86},[21,80741,80742],{},[1426,80743],{"alt":71,"src":80744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21965,80746,80748],{"id":80747},"_41052-array","4.10.5.2 Array",[21,80750,80751],{},"Array 是内置的构造函数，用于创建数组",[21,80753,80754],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[66,80756,80758],{"className":50602,"code":80757,"language":50604,"meta":71,"style":71},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[73,80759,80760,80765],{"__ignoreMap":71},[76,80761,80762],{"class":78,"line":79},[76,80763,80764],{"class":86},"const arr=new Array(3,5)\n",[76,80766,80767],{"class":78,"line":96},[76,80768,80769],{"class":86},"console.log(arr)  \u002F\u002F[3,5]\n",[21,80771,80772],{},"Array的实例方法，这个方法是实例成员",[21,80774,80775],{},[1426,80776],{"alt":71,"src":80777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22877,80779,80781],{"id":80780},"_410521-reduce","4.10.5.2.1 reduce",[21,80783,80784],{},[1426,80785],{"alt":71,"src":80786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[66,80788,80790],{"className":53036,"code":80789,"language":53038,"meta":71,"style":71},"\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",[73,80791,80792,80800,80808,80813,80818,80823,80828,80832,80837,80842,80847,80851,80856,80861,80865,80870,80875,80880,80888],{"__ignoreMap":71},[76,80793,80794,80796,80798],{"class":78,"line":79},[76,80795,998],{"class":86},[76,80797,51769],{"class":51269},[76,80799,51276],{"class":86},[76,80801,80802,80804,80806],{"class":78,"line":96},[76,80803,52113],{"class":86},[76,80805,51782],{"class":51269},[76,80807,51276],{"class":86},[76,80809,80810],{"class":78,"line":1143},[76,80811,80812],{"class":86},"    const arr = [1, 5, 8]\n",[76,80814,80815],{"class":78,"line":1158},[76,80816,80817],{"class":86},"    \u002F\u002F 1.没有初始值\n",[76,80819,80820],{"class":78,"line":1164},[76,80821,80822],{"class":86},"    const total = arr.reduce(function (prev, current) {\n",[76,80824,80825],{"class":78,"line":1178},[76,80826,80827],{"class":86},"      return prev + current\n",[76,80829,80830],{"class":78,"line":1184},[76,80831,33430],{"class":86},[76,80833,80834],{"class":78,"line":1275},[76,80835,80836],{"class":86},"    console.log(total)   \u002F\u002F14\n",[76,80838,80839],{"class":78,"line":1281},[76,80840,80841],{"class":86},"    \u002F\u002F 2.有初始值\n",[76,80843,80844],{"class":78,"line":1293},[76,80845,80846],{"class":86},"    const total1 = arr.reduce(function (prev, current) {\n",[76,80848,80849],{"class":78,"line":1576},[76,80850,80827],{"class":86},[76,80852,80853],{"class":78,"line":1581},[76,80854,80855],{"class":86},"    }, 10)\n",[76,80857,80858],{"class":78,"line":1587},[76,80859,80860],{"class":86},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[76,80862,80863],{"class":78,"line":1592},[76,80864,2365],{"emptyLinePlaceholder":2364},[76,80866,80867],{"class":78,"line":1606},[76,80868,80869],{"class":86},"    \u002F\u002F 3.箭头函数写法\n",[76,80871,80872],{"class":78,"line":1611},[76,80873,80874],{"class":86},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[76,80876,80877],{"class":78,"line":1617},[76,80878,80879],{"class":86},"    console.log(total2)   \u002F\u002F24\n",[76,80881,80882,80884,80886],{"class":78,"line":1638},[76,80883,52386],{"class":86},[76,80885,51782],{"class":51269},[76,80887,51276],{"class":86},[76,80889,80890,80892,80894],{"class":78,"line":1643},[76,80891,51754],{"class":86},[76,80893,51769],{"class":51269},[76,80895,51276],{"class":86},[21,80897,80898],{},"执行过程：",[29,80900,80901,80904,80907],{},[32,80902,80903],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[32,80905,80906],{},"每一次循环，把返回值给作为下一次循环的上一次值",[32,80908,80909],{},"如果有起始值，则起始值作为上一次值",[66,80911,80913],{"className":53036,"code":80912,"language":53038,"meta":71,"style":71},"\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",[73,80914,80915,80923,80931,80935,80939,80943,80947,80951,80955,80960,80965,80970,80975,80980,80984,80988,80992,80996,81000,81004,81009,81013,81018,81022,81027,81032,81036,81040,81044,81052],{"__ignoreMap":71},[76,80916,80917,80919,80921],{"class":78,"line":79},[76,80918,998],{"class":86},[76,80920,51769],{"class":51269},[76,80922,51276],{"class":86},[76,80924,80925,80927,80929],{"class":78,"line":96},[76,80926,52113],{"class":86},[76,80928,51782],{"class":51269},[76,80930,51276],{"class":86},[76,80932,80933],{"class":78,"line":1143},[76,80934,80812],{"class":86},[76,80936,80937],{"class":78,"line":1158},[76,80938,80817],{"class":86},[76,80940,80941],{"class":78,"line":1164},[76,80942,80822],{"class":86},[76,80944,80945],{"class":78,"line":1178},[76,80946,80827],{"class":86},[76,80948,80949],{"class":78,"line":1184},[76,80950,33430],{"class":86},[76,80952,80953],{"class":78,"line":1275},[76,80954,80836],{"class":86},[76,80956,80957],{"class":78,"line":1281},[76,80958,80959],{"class":86},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[76,80961,80962],{"class":78,"line":1293},[76,80963,80964],{"class":86},"    \u002F\u002F     1              5                    6\n",[76,80966,80967],{"class":78,"line":1576},[76,80968,80969],{"class":86},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[76,80971,80972],{"class":78,"line":1581},[76,80973,80974],{"class":86},"    \u002F\u002F     6              8                    14\n",[76,80976,80977],{"class":78,"line":1587},[76,80978,80979],{"class":86},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[76,80981,80982],{"class":78,"line":1592},[76,80983,80841],{"class":86},[76,80985,80986],{"class":78,"line":1606},[76,80987,80846],{"class":86},[76,80989,80990],{"class":78,"line":1611},[76,80991,80827],{"class":86},[76,80993,80994],{"class":78,"line":1617},[76,80995,80855],{"class":86},[76,80997,80998],{"class":78,"line":1638},[76,80999,80860],{"class":86},[76,81001,81002],{"class":78,"line":1643},[76,81003,80959],{"class":86},[76,81005,81006],{"class":78,"line":1657},[76,81007,81008],{"class":86},"    \u002F\u002F     10             1                     11\n",[76,81010,81011],{"class":78,"line":1662},[76,81012,80969],{"class":86},[76,81014,81015],{"class":78,"line":1691},[76,81016,81017],{"class":86},"    \u002F\u002F     11             5                    16\n",[76,81019,81020],{"class":78,"line":1696},[76,81021,80969],{"class":86},[76,81023,81024],{"class":78,"line":1713},[76,81025,81026],{"class":86},"    \u002F\u002F     16             8                    24\n",[76,81028,81029],{"class":78,"line":1718},[76,81030,81031],{"class":86},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[76,81033,81034],{"class":78,"line":1723},[76,81035,80869],{"class":86},[76,81037,81038],{"class":78,"line":1728},[76,81039,80874],{"class":86},[76,81041,81042],{"class":78,"line":1742},[76,81043,80879],{"class":86},[76,81045,81046,81048,81050],{"class":78,"line":1747},[76,81047,52386],{"class":86},[76,81049,51782],{"class":51269},[76,81051,51276],{"class":86},[76,81053,81054,81056,81058],{"class":78,"line":2542},[76,81055,51754],{"class":86},[76,81057,51769],{"class":51269},[76,81059,51276],{"class":86},[22877,81061,81063],{"id":81062},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[21,81065,81066],{},[1426,81067],{"alt":71,"src":81068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[66,81070,81072],{"className":53036,"code":81071,"language":53038,"meta":71,"style":71},"\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",[73,81073,81074,81082,81090,81095,81100,81105,81110,81114,81119,81124,81129,81134,81139,81144,81148,81153,81157,81162,81170],{"__ignoreMap":71},[76,81075,81076,81078,81080],{"class":78,"line":79},[76,81077,998],{"class":86},[76,81079,51769],{"class":51269},[76,81081,51276],{"class":86},[76,81083,81084,81086,81088],{"class":78,"line":96},[76,81085,52113],{"class":86},[76,81087,51782],{"class":51269},[76,81089,51276],{"class":86},[76,81091,81092],{"class":78,"line":1143},[76,81093,81094],{"class":86},"    const arr = [\n",[76,81096,81097],{"class":78,"line":1158},[76,81098,81099],{"class":86},"      { name: '张三', salary: 10000 },\n",[76,81101,81102],{"class":78,"line":1164},[76,81103,81104],{"class":86},"      { name: '李四', salary: 10000 },\n",[76,81106,81107],{"class":78,"line":1178},[76,81108,81109],{"class":86},"      { name: '王五', salary: 10000 }\n",[76,81111,81112],{"class":78,"line":1184},[76,81113,53078],{"class":86},[76,81115,81116],{"class":78,"line":1275},[76,81117,81118],{"class":86},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[76,81120,81121],{"class":78,"line":1281},[76,81122,81123],{"class":86},"    \u002F\u002F prev是累计值\n",[76,81125,81126],{"class":78,"line":1293},[76,81127,81128],{"class":86},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[76,81130,81131],{"class":78,"line":1576},[76,81132,81133],{"class":86},"    console.log(total)\n",[76,81135,81136],{"class":78,"line":1581},[76,81137,81138],{"class":86},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[76,81140,81141],{"class":78,"line":1587},[76,81142,81143],{"class":86},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[76,81145,81146],{"class":78,"line":1592},[76,81147,81138],{"class":86},[76,81149,81150],{"class":78,"line":1606},[76,81151,81152],{"class":86},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[76,81154,81155],{"class":78,"line":1611},[76,81156,81138],{"class":86},[76,81158,81159],{"class":78,"line":1617},[76,81160,81161],{"class":86},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[76,81163,81164,81166,81168],{"class":78,"line":1638},[76,81165,52386],{"class":86},[76,81167,51782],{"class":51269},[76,81169,51276],{"class":86},[76,81171,81172,81174,81176],{"class":78,"line":1643},[76,81173,51754],{"class":86},[76,81175,51769],{"class":51269},[76,81177,51276],{"class":86},[22877,81179,81181],{"id":81180},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[21,81183,81184],{},[1426,81185],{"alt":71,"src":81186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[21,81188,81189],{},[1426,81190],{"alt":71,"src":81191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[29,81193,81194],{},[32,81195,81196],{},"find()",[21,81198,81199],{},"循环查找，找到第一个就ok",[21,81201,81202],{},[326,81203,81206],{"href":81204,"rel":81205},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23833],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[66,81208,81210],{"className":50602,"code":81209,"language":50604,"meta":71,"style":71},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[73,81211,81212,81217,81222],{"__ignoreMap":71},[76,81213,81214],{"class":78,"line":79},[76,81215,81216],{"class":86},"const array1 = [5, 12, 8, 130, 44]\n",[76,81218,81219],{"class":78,"line":96},[76,81220,81221],{"class":86},"const found = array1.find((element) => element > 10)\n",[76,81223,81224],{"class":78,"line":1143},[76,81225,81226],{"class":86},"console.log(found)  \u002F\u002F12\n",[21,81228,81229,81231,81232,81237,81238,81241,81242,81244,81245,81250,81251,81253,81254,81256,81257,81259,81260],{},[73,81230,81196],{}," 方法是一个",[326,81233,81236],{"href":81234,"rel":81235},"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",[23833],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[73,81239,81240],{},"callbackFn"," 函数，直到 ",[73,81243,81240],{}," 返回一个",[326,81246,81249],{"href":81247,"rel":81248},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23833],"真值","。然后 ",[73,81252,81196],{}," 返回该元素并停止迭代数组。如果 ",[73,81255,81240],{}," 从未返回真值，则 ",[73,81258,81196],{}," 返回 ",[73,81261,81262],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[66,81264,81266],{"className":53036,"code":81265,"language":53038,"meta":71,"style":71},"\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",[73,81267,81268,81276,81284,81289,81294,81299,81303,81308,81313,81317,81322,81327,81331,81335,81340,81345,81349,81353,81358,81363,81368,81373,81378,81382,81387,81392,81397,81402,81406,81411,81419],{"__ignoreMap":71},[76,81269,81270,81272,81274],{"class":78,"line":79},[76,81271,998],{"class":86},[76,81273,51769],{"class":51269},[76,81275,51276],{"class":86},[76,81277,81278,81280,81282],{"class":78,"line":96},[76,81279,52113],{"class":86},[76,81281,51782],{"class":51269},[76,81283,51276],{"class":86},[76,81285,81286],{"class":78,"line":1143},[76,81287,81288],{"class":86},"    const arr = ['red', 'blue', 'green']\n",[76,81290,81291],{"class":78,"line":1158},[76,81292,81293],{"class":86},"    const found = arr.find(item => item === 'pink')\n",[76,81295,81296],{"class":78,"line":1164},[76,81297,81298],{"class":86},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[76,81300,81301],{"class":78,"line":1178},[76,81302,2365],{"emptyLinePlaceholder":2364},[76,81304,81305],{"class":78,"line":1184},[76,81306,81307],{"class":86},"    \u002F\u002F 使用场景，用于查找数据\n",[76,81309,81310],{"class":78,"line":1275},[76,81311,81312],{"class":86},"    const arr1 = [\n",[76,81314,81315],{"class":78,"line":1281},[76,81316,79355],{"class":86},[76,81318,81319],{"class":78,"line":1293},[76,81320,81321],{"class":86},"        name: '小米',\n",[76,81323,81324],{"class":78,"line":1576},[76,81325,81326],{"class":86},"        price: 1999\n",[76,81328,81329],{"class":78,"line":1581},[76,81330,77861],{"class":86},[76,81332,81333],{"class":78,"line":1587},[76,81334,79355],{"class":86},[76,81336,81337],{"class":78,"line":1592},[76,81338,81339],{"class":86},"        name: '华为',\n",[76,81341,81342],{"class":78,"line":1606},[76,81343,81344],{"class":86},"        price: 3999\n",[76,81346,81347],{"class":78,"line":1611},[76,81348,52367],{"class":86},[76,81350,81351],{"class":78,"line":1617},[76,81352,53078],{"class":86},[76,81354,81355],{"class":78,"line":1638},[76,81356,81357],{"class":86},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[76,81359,81360],{"class":78,"line":1643},[76,81361,81362],{"class":86},"    \u002F\u002F const found1 = arr1.find(item => {\n",[76,81364,81365],{"class":78,"line":1657},[76,81366,81367],{"class":86},"    \u002F\u002F   if (item.name === '小米') {\n",[76,81369,81370],{"class":78,"line":1662},[76,81371,81372],{"class":86},"    \u002F\u002F     return item\n",[76,81374,81375],{"class":78,"line":1691},[76,81376,81377],{"class":86},"    \u002F\u002F   }\n",[76,81379,81380],{"class":78,"line":1696},[76,81381,63259],{"class":86},[76,81383,81384],{"class":78,"line":1713},[76,81385,81386],{"class":86},"    \u002F\u002F 另一种写法\n",[76,81388,81389],{"class":78,"line":1718},[76,81390,81391],{"class":86},"    const found1 = arr1.find(item => {\n",[76,81393,81394],{"class":78,"line":1723},[76,81395,81396],{"class":86},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[76,81398,81399],{"class":78,"line":1728},[76,81400,81401],{"class":86},"      return item.name = '小米'\n",[76,81403,81404],{"class":78,"line":1742},[76,81405,33430],{"class":86},[76,81407,81408],{"class":78,"line":1747},[76,81409,81410],{"class":86},"    console.log(found1)\n",[76,81412,81413,81415,81417],{"class":78,"line":2542},[76,81414,52386],{"class":86},[76,81416,51782],{"class":51269},[76,81418,51276],{"class":86},[76,81420,81421,81423,81425],{"class":78,"line":2556},[76,81422,51754],{"class":86},[76,81424,51769],{"class":51269},[76,81426,51276],{"class":86},[21,81428,81429],{},[1426,81430],{"alt":71,"src":81431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[21,81433,81434],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[29,81436,81437],{"start":96},[32,81438,81439],{},"every()返回的是布尔值",[21,81441,81442],{},[326,81443,81446],{"href":81444,"rel":81445},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23833],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[21,81448,81449],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[21,81451,81452],{},"some是只有有一个就没问题",[21,81454,81455],{},"every是必须全是才行",[66,81457,81461],{"className":81458,"code":81459,"language":81460,"meta":71,"style":71},"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",[73,81462,81463,81479,81493,81497,81506],{"__ignoreMap":71},[76,81464,81465,81467,81470,81472,81474,81477],{"class":78,"line":79},[76,81466,54418],{"class":82},[76,81468,81469],{"class":86}," isBigEnough(element, ",[76,81471,74027],{"class":82},[76,81473,12402],{"class":86},[76,81475,81476],{"class":82},"array",[76,81478,12409],{"class":86},[76,81480,81481,81484,81487,81489,81491],{"class":78,"line":96},[76,81482,81483],{"class":82},"  return",[76,81485,81486],{"class":86}," element ",[76,81488,1674],{"class":82},[76,81490,2002],{"class":136},[76,81492,1254],{"class":86},[76,81494,81495],{"class":78,"line":1143},[76,81496,1529],{"class":86},[76,81498,81499,81502,81504],{"class":78,"line":1158},[76,81500,81501],{"class":86},"[12, 5, 8, 130, 44].every(isBigEnough); ",[76,81503,33298],{"class":82},[76,81505,54485],{"class":86},[76,81507,81508,81511,81513],{"class":78,"line":1164},[76,81509,81510],{"class":86},"[12, 54, 18, 130, 44].every(isBigEnough); ",[76,81512,33298],{"class":82},[76,81514,57909],{"class":86},[66,81516,81518],{"className":53036,"code":81517,"language":53038,"meta":71,"style":71},"\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",[73,81519,81520,81528,81536,81541,81545,81550,81555,81563],{"__ignoreMap":71},[76,81521,81522,81524,81526],{"class":78,"line":79},[76,81523,998],{"class":86},[76,81525,51769],{"class":51269},[76,81527,51276],{"class":86},[76,81529,81530,81532,81534],{"class":78,"line":96},[76,81531,52113],{"class":86},[76,81533,51782],{"class":51269},[76,81535,51276],{"class":86},[76,81537,81538],{"class":78,"line":1143},[76,81539,81540],{"class":86},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[76,81542,81543],{"class":78,"line":1158},[76,81544,78291],{"class":86},[76,81546,81547],{"class":78,"line":1164},[76,81548,81549],{"class":86},"    const flag = arr.every(item => item >= 10)\n",[76,81551,81552],{"class":78,"line":1178},[76,81553,81554],{"class":86},"    console.log(flag)    \u002F\u002Ftrue\n",[76,81556,81557,81559,81561],{"class":78,"line":1184},[76,81558,52386],{"class":86},[76,81560,51782],{"class":51269},[76,81562,51276],{"class":86},[76,81564,81565,81567,81569],{"class":78,"line":1275},[76,81566,51754],{"class":86},[76,81568,51769],{"class":51269},[76,81570,51276],{"class":86},[66,81572,81574],{"className":53036,"code":81573,"language":53038,"meta":71,"style":71},"\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",[73,81575,81576,81584,81592,81596,81601,81606,81611,81619],{"__ignoreMap":71},[76,81577,81578,81580,81582],{"class":78,"line":79},[76,81579,998],{"class":86},[76,81581,51769],{"class":51269},[76,81583,51276],{"class":86},[76,81585,81586,81588,81590],{"class":78,"line":96},[76,81587,52113],{"class":86},[76,81589,51782],{"class":51269},[76,81591,51276],{"class":86},[76,81593,81594],{"class":78,"line":1143},[76,81595,81540],{"class":86},[76,81597,81598],{"class":78,"line":1158},[76,81599,81600],{"class":86},"    const arr = [10, 0, 5]\n",[76,81602,81603],{"class":78,"line":1164},[76,81604,81605],{"class":86},"    const flag = arr.some(item => item >= 10)\n",[76,81607,81608],{"class":78,"line":1178},[76,81609,81610],{"class":86},"    console.log(flag)   \u002F\u002Ftrue\n",[76,81612,81613,81615,81617],{"class":78,"line":1184},[76,81614,52386],{"class":86},[76,81616,51782],{"class":51269},[76,81618,51276],{"class":86},[76,81620,81621,81623,81625],{"class":78,"line":1275},[76,81622,51754],{"class":86},[76,81624,51769],{"class":51269},[76,81626,51276],{"class":86},[22877,81628,81630],{"id":81629},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[21,81632,81633],{},[1426,81634],{"alt":71,"src":81635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[66,81637,81639],{"className":50602,"code":81638,"language":50604,"meta":71,"style":71},"\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",[73,81640,81641,81651,81665,81669,81677,81691,81711,81723,81731,81738,81750,81762,81774,81786,81796,81806,81810,81818,81826,81830,81838,81850,81858,81880,81885,81890,81923,81931,81939,81943],{"__ignoreMap":71},[76,81642,81643,81645,81647,81649],{"class":78,"line":79},[76,81644,51266],{"class":86},[76,81646,51270],{"class":51269},[76,81648,51273],{"class":1927},[76,81650,51276],{"class":86},[76,81652,81653,81655,81657,81659,81661,81663],{"class":78,"line":96},[76,81654,998],{"class":86},[76,81656,50604],{"class":51269},[76,81658,51285],{"class":1927},[76,81660,133],{"class":86},[76,81662,51290],{"class":192},[76,81664,51276],{"class":86},[76,81666,81667],{"class":78,"line":1143},[76,81668,2365],{"emptyLinePlaceholder":2364},[76,81670,81671,81673,81675],{"class":78,"line":1158},[76,81672,998],{"class":86},[76,81674,51303],{"class":51269},[76,81676,51276],{"class":86},[76,81678,81679,81681,81683,81685,81687,81689],{"class":78,"line":1164},[76,81680,52113],{"class":86},[76,81682,51313],{"class":51269},[76,81684,51316],{"class":1927},[76,81686,133],{"class":86},[76,81688,51321],{"class":192},[76,81690,51276],{"class":86},[76,81692,81693,81695,81697,81699,81701,81703,81705,81707,81709],{"class":78,"line":1178},[76,81694,52113],{"class":86},[76,81696,51313],{"class":51269},[76,81698,14887],{"class":1927},[76,81700,133],{"class":86},[76,81702,51360],{"class":192},[76,81704,51340],{"class":1927},[76,81706,133],{"class":86},[76,81708,51367],{"class":192},[76,81710,51276],{"class":86},[76,81712,81713,81715,81717,81719,81721],{"class":78,"line":1184},[76,81714,52113],{"class":86},[76,81716,51376],{"class":51269},[76,81718,51379],{"class":86},[76,81720,51376],{"class":51269},[76,81722,51276],{"class":86},[76,81724,81725,81727,81729],{"class":78,"line":1275},[76,81726,52113],{"class":86},[76,81728,5092],{"class":51269},[76,81730,51276],{"class":86},[76,81732,81733,81736],{"class":78,"line":1281},[76,81734,81735],{"class":51269},"    div",[76,81737,15539],{"class":86},[76,81739,81740,81742,81744,81746,81748],{"class":78,"line":1293},[76,81741,54740],{"class":136},[76,81743,51406],{"class":86},[76,81745,1686],{"class":136},[76,81747,51461],{"class":82},[76,81749,1254],{"class":86},[76,81751,81752,81754,81756,81758,81760],{"class":78,"line":1576},[76,81753,54754],{"class":136},[76,81755,51406],{"class":86},[76,81757,489],{"class":136},[76,81759,51461],{"class":82},[76,81761,1254],{"class":86},[76,81763,81764,81766,81768,81770,81772],{"class":78,"line":1581},[76,81765,57328],{"class":136},[76,81767,51406],{"class":86},[76,81769,489],{"class":136},[76,81771,51461],{"class":82},[76,81773,1254],{"class":86},[76,81775,81776,81778,81780,81782,81784],{"class":78,"line":1587},[76,81777,65102],{"class":136},[76,81779,51406],{"class":86},[76,81781,586],{"class":136},[76,81783,51461],{"class":82},[76,81785,1254],{"class":86},[76,81787,81788,81790,81792,81794],{"class":78,"line":1592},[76,81789,57255],{"class":136},[76,81791,51406],{"class":86},[76,81793,51561],{"class":136},[76,81795,1254],{"class":86},[76,81797,81798,81800,81802,81804],{"class":78,"line":1606},[76,81799,54853],{"class":136},[76,81801,51406],{"class":86},[76,81803,51614],{"class":136},[76,81805,1254],{"class":86},[76,81807,81808],{"class":78,"line":1611},[76,81809,2151],{"class":86},[76,81811,81812,81814,81816],{"class":78,"line":1617},[76,81813,52386],{"class":86},[76,81815,5092],{"class":51269},[76,81817,51276],{"class":86},[76,81819,81820,81822,81824],{"class":78,"line":1638},[76,81821,51754],{"class":86},[76,81823,51303],{"class":51269},[76,81825,51276],{"class":86},[76,81827,81828],{"class":78,"line":1643},[76,81829,2365],{"emptyLinePlaceholder":2364},[76,81831,81832,81834,81836],{"class":78,"line":1657},[76,81833,998],{"class":86},[76,81835,51769],{"class":51269},[76,81837,51276],{"class":86},[76,81839,81840,81842,81844,81846,81848],{"class":78,"line":1662},[76,81841,52113],{"class":86},[76,81843,51580],{"class":51269},[76,81845,55283],{"class":86},[76,81847,51580],{"class":51269},[76,81849,51276],{"class":86},[76,81851,81852,81854,81856],{"class":78,"line":1691},[76,81853,52113],{"class":86},[76,81855,51782],{"class":51269},[76,81857,51276],{"class":86},[76,81859,81860,81862,81865,81867,81870,81873,81875,81878],{"class":78,"line":1696},[76,81861,11188],{"class":82},[76,81863,81864],{"class":136}," spec",[76,81866,13531],{"class":82},[76,81868,81869],{"class":86}," { size: ",[76,81871,81872],{"class":192},"'40cm*40cm'",[76,81874,55433],{"class":86},[76,81876,81877],{"class":192},"'黑色'",[76,81879,55573],{"class":86},[76,81881,81882],{"class":78,"line":1713},[76,81883,81884],{"class":146},"    \u002F\u002F const arr = Object.values(spec)\n",[76,81886,81887],{"class":78,"line":1718},[76,81888,81889],{"class":146},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[76,81891,81892,81894,81896,81898,81901,81903,81905,81908,81911,81914,81916,81918,81921],{"class":78,"line":1723},[76,81893,52376],{"class":86},[76,81895,54368],{"class":1927},[76,81897,87],{"class":86},[76,81899,81900],{"class":192},"'div'",[76,81902,74218],{"class":86},[76,81904,133],{"class":82},[76,81906,81907],{"class":86}," Object.",[76,81909,81910],{"class":1927},"values",[76,81912,81913],{"class":86},"(spec).",[76,81915,74192],{"class":1927},[76,81917,87],{"class":86},[76,81919,81920],{"class":192},"'\u002F'",[76,81922,93],{"class":86},[76,81924,81925,81927,81929],{"class":78,"line":1728},[76,81926,52386],{"class":86},[76,81928,51782],{"class":51269},[76,81930,51276],{"class":86},[76,81932,81933,81935,81937],{"class":78,"line":1742},[76,81934,51754],{"class":86},[76,81936,51769],{"class":51269},[76,81938,51276],{"class":86},[76,81940,81941],{"class":78,"line":1747},[76,81942,2365],{"emptyLinePlaceholder":2364},[76,81944,81945,81947,81949],{"class":78,"line":2542},[76,81946,51754],{"class":86},[76,81948,50604],{"class":51269},[76,81950,51276],{"class":86},[21,81952,81953],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22877,81955,81957],{"id":81956},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[21,81959,81960],{},"静态方法，将伪数组转换为真数组",[21,81962,81963],{},[1426,81964],{"alt":71,"src":81965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[66,81967,81969],{"className":53036,"code":81968,"language":53038,"meta":71,"style":71},"\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",[73,81970,81971,81979,81987,81999,82011,82023,82031,82039,82044,82049,82054,82059,82067],{"__ignoreMap":71},[76,81972,81973,81975,81977],{"class":78,"line":79},[76,81974,998],{"class":86},[76,81976,51769],{"class":51269},[76,81978,51276],{"class":86},[76,81980,81981,81983,81985],{"class":78,"line":96},[76,81982,52113],{"class":86},[76,81984,1095],{"class":51269},[76,81986,51276],{"class":86},[76,81988,81989,81991,81993,81995,81997],{"class":78,"line":1143},[76,81990,51310],{"class":86},[76,81992,32],{"class":51269},[76,81994,55283],{"class":86},[76,81996,32],{"class":51269},[76,81998,51276],{"class":86},[76,82000,82001,82003,82005,82007,82009],{"class":78,"line":1158},[76,82002,51310],{"class":86},[76,82004,32],{"class":51269},[76,82006,55283],{"class":86},[76,82008,32],{"class":51269},[76,82010,51276],{"class":86},[76,82012,82013,82015,82017,82019,82021],{"class":78,"line":1164},[76,82014,51310],{"class":86},[76,82016,32],{"class":51269},[76,82018,55283],{"class":86},[76,82020,32],{"class":51269},[76,82022,51276],{"class":86},[76,82024,82025,82027,82029],{"class":78,"line":1178},[76,82026,52386],{"class":86},[76,82028,1095],{"class":51269},[76,82030,51276],{"class":86},[76,82032,82033,82035,82037],{"class":78,"line":1184},[76,82034,52113],{"class":86},[76,82036,51782],{"class":51269},[76,82038,51276],{"class":86},[76,82040,82041],{"class":78,"line":1275},[76,82042,82043],{"class":86},"    const lis = document.querySelectorAll('li')\n",[76,82045,82046],{"class":78,"line":1281},[76,82047,82048],{"class":86},"    const liss = Array.from(lis)\n",[76,82050,82051],{"class":78,"line":1293},[76,82052,82053],{"class":86},"    liss.pop()\n",[76,82055,82056],{"class":78,"line":1576},[76,82057,82058],{"class":86},"    console.log(liss)\n",[76,82060,82061,82063,82065],{"class":78,"line":1581},[76,82062,52386],{"class":86},[76,82064,51782],{"class":51269},[76,82066,51276],{"class":86},[76,82068,82069,82071,82073],{"class":78,"line":1587},[76,82070,51754],{"class":86},[76,82072,51769],{"class":51269},[76,82074,51276],{"class":86},[21,82076,82077],{},[1426,82078],{"alt":71,"src":82079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21965,82081,82083],{"id":82082},"_41053-string","4.10.5.3 String",[21,82085,82086],{},[1426,82087],{"alt":71,"src":82088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22877,82090,82092],{"id":82091},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[66,82094,82096],{"className":53036,"code":82095,"language":53038,"meta":71,"style":71},"\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",[73,82097,82098,82106,82114,82119,82124,82129,82133,82138,82143,82148,82156],{"__ignoreMap":71},[76,82099,82100,82102,82104],{"class":78,"line":79},[76,82101,998],{"class":86},[76,82103,51769],{"class":51269},[76,82105,51276],{"class":86},[76,82107,82108,82110,82112],{"class":78,"line":96},[76,82109,52113],{"class":86},[76,82111,51782],{"class":51269},[76,82113,51276],{"class":86},[76,82115,82116],{"class":78,"line":1143},[76,82117,82118],{"class":86},"    \u002F\u002F 把字符串转化为数组\n",[76,82120,82121],{"class":78,"line":1158},[76,82122,82123],{"class":86},"    const str = 'pink,red'\n",[76,82125,82126],{"class":78,"line":1164},[76,82127,82128],{"class":86},"    const arr = str.split(',')\n",[76,82130,82131],{"class":78,"line":1178},[76,82132,80607],{"class":86},[76,82134,82135],{"class":78,"line":1184},[76,82136,82137],{"class":86},"    const str1 = '2025-8-25'\n",[76,82139,82140],{"class":78,"line":1275},[76,82141,82142],{"class":86},"    const arr1 = str1.split('-')\n",[76,82144,82145],{"class":78,"line":1281},[76,82146,82147],{"class":86},"    console.log(arr1)\n",[76,82149,82150,82152,82154],{"class":78,"line":1293},[76,82151,52386],{"class":86},[76,82153,51782],{"class":51269},[76,82155,51276],{"class":86},[76,82157,82158,82160,82162],{"class":78,"line":1576},[76,82159,51754],{"class":86},[76,82161,51769],{"class":51269},[76,82163,51276],{"class":86},[22877,82165,82167],{"id":82166},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[21,82169,5148],{},[21,82171,82172],{},"substring(indexStart)",[21,82174,82175],{},"substring(indexStart, indexEnd)",[1095,82177,82178,82189,82201,82211],{},[32,82179,82180,82181,82184,82185,82188],{},"如果省略了 ",[73,82182,82183],{},"indexEnd","，则 ",[73,82186,82187],{},"substring()"," 提取字符直到字符串的末尾",[32,82190,82191,82192,82195,82196,82184,82198,82200],{},"如果 ",[73,82193,82194],{},"indexStart"," 等于 ",[73,82197,82183],{},[73,82199,82187],{}," 返回一个空字符串",[32,82202,82191,82203,82205,82206,82184,82208,82210],{},[73,82204,82194],{}," 大于 ",[73,82207,82183],{},[73,82209,82187],{}," 的效果就像交换了这两个参数一样",[32,82212,82213],{},"结束的索引号不包含想要截取的部分",[66,82215,82217],{"className":81458,"code":82216,"language":81460,"meta":71,"style":71},"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",[73,82218,82219,82231,82235,82269,82299,82303,82334,82338,82365,82395,82425,82429,82460],{"__ignoreMap":71},[76,82220,82221,82224,82226,82229],{"class":78,"line":79},[76,82222,82223],{"class":86},"const anyString ",[76,82225,133],{"class":82},[76,82227,82228],{"class":192}," \"Mozilla\"",[76,82230,1254],{"class":86},[76,82232,82233],{"class":78,"line":96},[76,82234,2365],{"emptyLinePlaceholder":2364},[76,82236,82237,82240,82242,82244,82246,82249,82251,82254,82256,82258,82260,82262,82264,82266],{"class":78,"line":1143},[76,82238,82239],{"class":136},"console",[76,82241,646],{"class":86},[76,82243,58216],{"class":136},[76,82245,87],{"class":86},[76,82247,82248],{"class":136},"anyString",[76,82250,646],{"class":86},[76,82252,82253],{"class":136},"substring",[76,82255,87],{"class":86},[76,82257,279],{"class":136},[76,82259,12402],{"class":86},[76,82261,305],{"class":136},[76,82263,75222],{"class":86},[76,82265,33298],{"class":82},[76,82267,82268],{"class":192}," 'M'\n",[76,82270,82271,82273,82275,82277,82279,82281,82283,82285,82287,82289,82291,82293,82295,82297],{"class":78,"line":1158},[76,82272,82239],{"class":136},[76,82274,646],{"class":86},[76,82276,58216],{"class":136},[76,82278,87],{"class":86},[76,82280,82248],{"class":136},[76,82282,646],{"class":86},[76,82284,82253],{"class":136},[76,82286,87],{"class":86},[76,82288,305],{"class":136},[76,82290,12402],{"class":86},[76,82292,279],{"class":136},[76,82294,75222],{"class":86},[76,82296,33298],{"class":82},[76,82298,82268],{"class":192},[76,82300,82301],{"class":78,"line":1164},[76,82302,2365],{"emptyLinePlaceholder":2364},[76,82304,82305,82307,82309,82311,82313,82315,82317,82319,82321,82323,82325,82327,82329,82331],{"class":78,"line":1178},[76,82306,82239],{"class":136},[76,82308,646],{"class":86},[76,82310,58216],{"class":136},[76,82312,87],{"class":86},[76,82314,82248],{"class":136},[76,82316,646],{"class":86},[76,82318,82253],{"class":136},[76,82320,87],{"class":86},[76,82322,279],{"class":136},[76,82324,12402],{"class":86},[76,82326,432],{"class":136},[76,82328,75222],{"class":86},[76,82330,33298],{"class":82},[76,82332,82333],{"class":192}," 'Mozill'\n",[76,82335,82336],{"class":78,"line":1184},[76,82337,2365],{"emptyLinePlaceholder":2364},[76,82339,82340,82342,82344,82346,82348,82350,82352,82354,82356,82358,82360,82362],{"class":78,"line":1275},[76,82341,82239],{"class":136},[76,82343,646],{"class":86},[76,82345,58216],{"class":136},[76,82347,87],{"class":86},[76,82349,82248],{"class":136},[76,82351,646],{"class":86},[76,82353,82253],{"class":136},[76,82355,87],{"class":86},[76,82357,381],{"class":136},[76,82359,75222],{"class":86},[76,82361,33298],{"class":82},[76,82363,82364],{"class":192}," 'lla'\n",[76,82366,82367,82369,82371,82373,82375,82377,82379,82381,82383,82385,82387,82389,82391,82393],{"class":78,"line":1281},[76,82368,82239],{"class":136},[76,82370,646],{"class":86},[76,82372,58216],{"class":136},[76,82374,87],{"class":86},[76,82376,82248],{"class":136},[76,82378,646],{"class":86},[76,82380,82253],{"class":136},[76,82382,87],{"class":86},[76,82384,381],{"class":136},[76,82386,12402],{"class":86},[76,82388,457],{"class":136},[76,82390,75278],{"class":86},[76,82392,33298],{"class":82},[76,82394,82364],{"class":192},[76,82396,82397,82399,82401,82403,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423],{"class":78,"line":1293},[76,82398,82239],{"class":136},[76,82400,646],{"class":86},[76,82402,58216],{"class":136},[76,82404,87],{"class":86},[76,82406,82248],{"class":136},[76,82408,646],{"class":86},[76,82410,82253],{"class":136},[76,82412,87],{"class":86},[76,82414,457],{"class":136},[76,82416,12402],{"class":86},[76,82418,381],{"class":136},[76,82420,75222],{"class":86},[76,82422,33298],{"class":82},[76,82424,82364],{"class":192},[76,82426,82427],{"class":78,"line":1576},[76,82428,2365],{"emptyLinePlaceholder":2364},[76,82430,82431,82433,82435,82437,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457],{"class":78,"line":1581},[76,82432,82239],{"class":136},[76,82434,646],{"class":86},[76,82436,58216],{"class":136},[76,82438,87],{"class":86},[76,82440,82248],{"class":136},[76,82442,646],{"class":86},[76,82444,82253],{"class":136},[76,82446,87],{"class":86},[76,82448,279],{"class":136},[76,82450,12402],{"class":86},[76,82452,457],{"class":136},[76,82454,75222],{"class":86},[76,82456,33298],{"class":82},[76,82458,82459],{"class":192}," 'Mozilla'\n",[76,82461,82462,82464,82466,82468,82470,82472,82474,82476,82478,82480,82482,82484,82486,82488],{"class":78,"line":1587},[76,82463,82239],{"class":136},[76,82465,646],{"class":86},[76,82467,58216],{"class":136},[76,82469,87],{"class":86},[76,82471,82248],{"class":136},[76,82473,646],{"class":86},[76,82475,82253],{"class":136},[76,82477,87],{"class":86},[76,82479,279],{"class":136},[76,82481,12402],{"class":86},[76,82483,534],{"class":136},[76,82485,75222],{"class":86},[76,82487,33298],{"class":82},[76,82489,82459],{"class":192},[22877,82491,82493],{"id":82492},"_410533-startswith","4.10.5.3.3 startsWith",[21,82495,82496,82499,82500,82505,82506,82508,82509],{},[73,82497,82498],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[237,82501,82502],{},[73,82503,82504],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[73,82507,1326],{}," 或 ",[73,82510,65989],{},[66,82512,82514],{"className":77464,"code":82513,"language":77466,"meta":71,"style":71},"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",[73,82515,82516,82528,82547,82552,82572],{"__ignoreMap":71},[76,82517,82518,82520,82523,82525],{"class":78,"line":79},[76,82519,6759],{"class":82},[76,82521,82522],{"class":86}," str1 ",[76,82524,133],{"class":82},[76,82526,82527],{"class":192}," \"Saturday night plans\"\n",[76,82529,82530,82532,82534,82537,82540,82542,82545],{"class":78,"line":96},[76,82531,77501],{"class":86},[76,82533,58216],{"class":1927},[76,82535,82536],{"class":86},"(str1.",[76,82538,82539],{"class":1927},"startsWith",[76,82541,87],{"class":86},[76,82543,82544],{"class":192},"\"Sat\"",[76,82546,30466],{"class":86},[76,82548,82549],{"class":78,"line":1143},[76,82550,82551],{"class":146},"\u002F\u002F Expected output: true\n",[76,82553,82554,82556,82558,82560,82562,82564,82566,82568,82570],{"class":78,"line":1158},[76,82555,77501],{"class":86},[76,82557,58216],{"class":1927},[76,82559,82536],{"class":86},[76,82561,82539],{"class":1927},[76,82563,87],{"class":86},[76,82565,82544],{"class":192},[76,82567,12402],{"class":86},[76,82569,159],{"class":136},[76,82571,30466],{"class":86},[76,82573,82574],{"class":78,"line":1164},[76,82575,82576],{"class":146},"\u002F\u002F Expected output: false\n",[66,82578,82580],{"className":50602,"code":82579,"language":50604,"meta":71,"style":71},"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",[73,82581,82582,82587,82592,82596,82601,82606],{"__ignoreMap":71},[76,82583,82584],{"class":78,"line":79},[76,82585,82586],{"class":86},"startsWith(searchString)\n",[76,82588,82589],{"class":78,"line":96},[76,82590,82591],{"class":86},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[76,82593,82594],{"class":78,"line":1143},[76,82595,2365],{"emptyLinePlaceholder":2364},[76,82597,82598],{"class":78,"line":1158},[76,82599,82600],{"class":86},"const str3 = 'pink老师上课中'\n",[76,82602,82603],{"class":78,"line":1164},[76,82604,82605],{"class":86},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[76,82607,82608],{"class":78,"line":1178},[76,82609,82610],{"class":86},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22877,82612,82614],{"id":82613},"_410534-includes","4.10.5.3.4 includes",[21,82616,82617],{},"includes(searchString) includes(searchString, position)",[29,82619,82620],{},[32,82621,82622],{},"searchString:",[21,82624,82625,82626,82628,82629,82634,82635,82640,82641,21467,82644,82647,82648,82651],{},"一个要在 ",[73,82627,1263],{}," 中查找的字符串。",[326,82630,82633],{"href":82631,"rel":82632},"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",[23833],"不能是正则表达式","。所有非正则表达式的值都会被",[326,82636,82639],{"href":82637,"rel":82638},"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",[23833],"强制转换为字符串","，因此如果该参数被省略或传入 ",[73,82642,82643],{},"undefined",[73,82645,82646],{},"includes()"," 方法会在字符串中搜索 ",[73,82649,82650],{},"\"undefined\"","，这通常不是你想要的",[29,82653,82654],{"start":96},[32,82655,82656,947],{},[73,82657,82658],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[21,82660,82661,82662,82665,82666],{},"在字符串中开始搜索 ",[73,82663,82664],{},"searchString"," 的位置。默认值为 ",[73,82667,279],{},[29,82669,82670],{"start":1143},[32,82671,82672],{},"返回值：",[21,82674,82675,82676,82678,82679,82683,82684],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[73,82677,82664],{}," 为空字符串的情况），则返回 ",[237,82680,82681],{},[73,82682,1326],{}," ，否则返回 ",[237,82685,82686],{},[73,82687,65989],{},[29,82689,82690],{"start":1158},[32,82691,82692],{},"异常：",[21,82694,82191,82695,13762,82697,82701],{},[73,82696,82664],{},[326,82698,82700],{"href":82631,"rel":82699},[23833],"是一个正则表达式","，则会抛出",[21,82703,82704],{},"只要是有就是true，不需要非得以谁开头结尾",[66,82706,82708],{"className":77464,"code":82707,"language":77466,"meta":71,"style":71},"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",[73,82709,82710,82721,82744,82763,82783,82805,82824],{"__ignoreMap":71},[76,82711,82712,82714,82716,82718],{"class":78,"line":79},[76,82713,6759],{"class":82},[76,82715,79744],{"class":86},[76,82717,133],{"class":82},[76,82719,82720],{"class":192}," \"To be, or not to be, that is the question.\"\n",[76,82722,82723,82725,82727,82730,82733,82735,82738,82741],{"class":78,"line":96},[76,82724,77501],{"class":86},[76,82726,58216],{"class":1927},[76,82728,82729],{"class":86},"(str.",[76,82731,82732],{"class":1927},"includes",[76,82734,87],{"class":86},[76,82736,82737],{"class":192},"\"To be\"",[76,82739,82740],{"class":86},"))",[76,82742,82743],{"class":146},"  \u002F\u002F true\n",[76,82745,82746,82748,82750,82752,82754,82756,82759,82761],{"class":78,"line":1143},[76,82747,77501],{"class":86},[76,82749,58216],{"class":1927},[76,82751,82729],{"class":86},[76,82753,82732],{"class":1927},[76,82755,87],{"class":86},[76,82757,82758],{"class":192},"\"question\"",[76,82760,82740],{"class":86},[76,82762,82743],{"class":146},[76,82764,82765,82767,82769,82771,82773,82775,82778,82780],{"class":78,"line":1158},[76,82766,77501],{"class":86},[76,82768,58216],{"class":1927},[76,82770,82729],{"class":86},[76,82772,82732],{"class":1927},[76,82774,87],{"class":86},[76,82776,82777],{"class":192},"\"nonexistent\"",[76,82779,82740],{"class":86},[76,82781,82782],{"class":146},"  \u002F\u002F false\n",[76,82784,82785,82787,82789,82791,82793,82795,82797,82799,82801,82803],{"class":78,"line":1164},[76,82786,77501],{"class":86},[76,82788,58216],{"class":1927},[76,82790,82729],{"class":86},[76,82792,82732],{"class":1927},[76,82794,87],{"class":86},[76,82796,82737],{"class":192},[76,82798,12402],{"class":86},[76,82800,305],{"class":136},[76,82802,82740],{"class":86},[76,82804,82782],{"class":146},[76,82806,82807,82809,82811,82813,82815,82817,82820,82822],{"class":78,"line":1178},[76,82808,77501],{"class":86},[76,82810,58216],{"class":1927},[76,82812,82729],{"class":86},[76,82814,82732],{"class":1927},[76,82816,87],{"class":86},[76,82818,82819],{"class":192},"\"TO BE\"",[76,82821,82740],{"class":86},[76,82823,82782],{"class":146},[76,82825,82826,82828,82830,82832,82834,82836,82838,82840],{"class":78,"line":1184},[76,82827,77501],{"class":86},[76,82829,58216],{"class":1927},[76,82831,82729],{"class":86},[76,82833,82732],{"class":1927},[76,82835,87],{"class":86},[76,82837,7619],{"class":192},[76,82839,82740],{"class":86},[76,82841,82743],{"class":146},[22877,82843,82845],{"id":82844},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[66,82847,82849],{"className":53036,"code":82848,"language":53038,"meta":71,"style":71},"\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",[73,82850,82851,82859,82867,82872,82877,82882,82887,82892,82900],{"__ignoreMap":71},[76,82852,82853,82855,82857],{"class":78,"line":79},[76,82854,998],{"class":86},[76,82856,51769],{"class":51269},[76,82858,51276],{"class":86},[76,82860,82861,82863,82865],{"class":78,"line":96},[76,82862,52113],{"class":86},[76,82864,51782],{"class":51269},[76,82866,51276],{"class":86},[76,82868,82869],{"class":78,"line":1143},[76,82870,82871],{"class":86},"    const num = 10\n",[76,82873,82874],{"class":78,"line":1158},[76,82875,82876],{"class":86},"    \u002F\u002F 强制转换\n",[76,82878,82879],{"class":78,"line":1164},[76,82880,82881],{"class":86},"    console.log(String(num))\n",[76,82883,82884],{"class":78,"line":1178},[76,82885,82886],{"class":86},"    \u002F\u002F toString()方法转换\n",[76,82888,82889],{"class":78,"line":1184},[76,82890,82891],{"class":86},"    console.log(num.toString())\n",[76,82893,82894,82896,82898],{"class":78,"line":1275},[76,82895,52386],{"class":86},[76,82897,51782],{"class":51269},[76,82899,51276],{"class":86},[76,82901,82902,82904,82906],{"class":78,"line":1281},[76,82903,51754],{"class":86},[76,82905,51769],{"class":51269},[76,82907,51276],{"class":86},[22877,82909,82911],{"id":82910},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[21,82913,82914],{},[1426,82915],{"alt":71,"src":82916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[66,82918,82920],{"className":50602,"code":82919,"language":50604,"meta":71,"style":71},"\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",[73,82921,82922,82932,82946,82950,82958,82972,82992,83004,83012,83016,83024,83036,83044,83056,83061,83066,83071,83118,83134,83142,83150,83154],{"__ignoreMap":71},[76,82923,82924,82926,82928,82930],{"class":78,"line":79},[76,82925,51266],{"class":86},[76,82927,51270],{"class":51269},[76,82929,51273],{"class":1927},[76,82931,51276],{"class":86},[76,82933,82934,82936,82938,82940,82942,82944],{"class":78,"line":96},[76,82935,998],{"class":86},[76,82937,50604],{"class":51269},[76,82939,51285],{"class":1927},[76,82941,133],{"class":86},[76,82943,51290],{"class":192},[76,82945,51276],{"class":86},[76,82947,82948],{"class":78,"line":1143},[76,82949,2365],{"emptyLinePlaceholder":2364},[76,82951,82952,82954,82956],{"class":78,"line":1158},[76,82953,998],{"class":86},[76,82955,51303],{"class":51269},[76,82957,51276],{"class":86},[76,82959,82960,82962,82964,82966,82968,82970],{"class":78,"line":1164},[76,82961,52113],{"class":86},[76,82963,51313],{"class":51269},[76,82965,51316],{"class":1927},[76,82967,133],{"class":86},[76,82969,51321],{"class":192},[76,82971,51276],{"class":86},[76,82973,82974,82976,82978,82980,82982,82984,82986,82988,82990],{"class":78,"line":1178},[76,82975,52113],{"class":86},[76,82977,51313],{"class":51269},[76,82979,14887],{"class":1927},[76,82981,133],{"class":86},[76,82983,51360],{"class":192},[76,82985,51340],{"class":1927},[76,82987,133],{"class":86},[76,82989,51367],{"class":192},[76,82991,51276],{"class":86},[76,82993,82994,82996,82998,83000,83002],{"class":78,"line":1184},[76,82995,52113],{"class":86},[76,82997,51376],{"class":51269},[76,82999,51379],{"class":86},[76,83001,51376],{"class":51269},[76,83003,51276],{"class":86},[76,83005,83006,83008,83010],{"class":78,"line":1275},[76,83007,51754],{"class":86},[76,83009,51303],{"class":51269},[76,83011,51276],{"class":86},[76,83013,83014],{"class":78,"line":1281},[76,83015,2365],{"emptyLinePlaceholder":2364},[76,83017,83018,83020,83022],{"class":78,"line":1293},[76,83019,998],{"class":86},[76,83021,51769],{"class":51269},[76,83023,51276],{"class":86},[76,83025,83026,83028,83030,83032,83034],{"class":78,"line":1576},[76,83027,52113],{"class":86},[76,83029,51580],{"class":51269},[76,83031,55283],{"class":86},[76,83033,51580],{"class":51269},[76,83035,51276],{"class":86},[76,83037,83038,83040,83042],{"class":78,"line":1581},[76,83039,52113],{"class":86},[76,83041,51782],{"class":51269},[76,83043,51276],{"class":86},[76,83045,83046,83048,83051,83053],{"class":78,"line":1587},[76,83047,11188],{"class":82},[76,83049,83050],{"class":136}," gift",[76,83052,13531],{"class":82},[76,83054,83055],{"class":192}," '50g的茶叶，清洗球'\n",[76,83057,83058],{"class":78,"line":1592},[76,83059,83060],{"class":146},"    \u002F\u002F 1.把字符串拆分为数组\n",[76,83062,83063],{"class":78,"line":1606},[76,83064,83065],{"class":146},"    \u002F\u002F console.log(gift.split(','))\n",[76,83067,83068],{"class":78,"line":1611},[76,83069,83070],{"class":146},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[76,83072,83073,83075,83077,83079,83082,83085,83087,83090,83092,83094,83096,83098,83100,83103,83105,83108,83110,83112,83114,83116],{"class":78,"line":1617},[76,83074,11188],{"class":82},[76,83076,73888],{"class":136},[76,83078,13531],{"class":82},[76,83080,83081],{"class":86}," gift.",[76,83083,83084],{"class":1927},"split",[76,83086,87],{"class":86},[76,83088,83089],{"class":192},"'，'",[76,83091,30795],{"class":86},[76,83093,74013],{"class":1927},[76,83095,87],{"class":86},[76,83097,79764],{"class":5183},[76,83099,79767],{"class":82},[76,83101,83102],{"class":192}," `\u003Cspan>【赠品】${",[76,83104,79764],{"class":86},[76,83106,83107],{"class":192},"}\u003C\u002Fspan>\u003Cbr>`",[76,83109,30795],{"class":86},[76,83111,74192],{"class":1927},[76,83113,87],{"class":86},[76,83115,74197],{"class":192},[76,83117,93],{"class":86},[76,83119,83120,83122,83124,83126,83128,83130,83132],{"class":78,"line":1638},[76,83121,52376],{"class":86},[76,83123,54368],{"class":1927},[76,83125,87],{"class":86},[76,83127,81900],{"class":192},[76,83129,74218],{"class":86},[76,83131,133],{"class":82},[76,83133,73954],{"class":86},[76,83135,83136,83138,83140],{"class":78,"line":1643},[76,83137,52386],{"class":86},[76,83139,51782],{"class":51269},[76,83141,51276],{"class":86},[76,83143,83144,83146,83148],{"class":78,"line":1657},[76,83145,51754],{"class":86},[76,83147,51769],{"class":51269},[76,83149,51276],{"class":86},[76,83151,83152],{"class":78,"line":1662},[76,83153,2365],{"emptyLinePlaceholder":2364},[76,83155,83156,83158,83160],{"class":78,"line":1691},[76,83157,51754],{"class":86},[76,83159,50604],{"class":51269},[76,83161,51276],{"class":86},[21965,83163,83165],{"id":83164},"_41054-number","4.10.5.4 Number",[21,83167,83168],{},[1426,83169],{"alt":71,"src":83170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[21,83172,83173],{},"整数也可以进行toFixed来保留小数",[21,83175,83176],{},"比如：",[21,83178,83179],{},"const price=10",[21,83181,83182],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21965,83184,83186],{"id":83185},"_41055-购物车展示","4.10.5.5 购物车展示",[21,83188,83189],{},[1426,83190],{"alt":71,"src":83191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[66,83193,83195],{"className":50602,"code":83194,"language":50604,"meta":71,"style":71},"\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",[73,83196,83197,83207,83221,83225,83233,83247,83267,83279,83287,83293,83303,83313,83323,83327,83331,83337,83349,83363,83367,83371,83377,83389,83405,83415,83431,83435,83439,83445,83455,83465,83469,83473,83481,83493,83505,83517,83521,83525,83533,83545,83549,83553,83564,83574,83586,83598,83608,83612,83616,83624,83633,83645,83655,83665,83669,83673,83681,83690,83697,83707,83719,83723,83727,83736,83746,83757,83769,83781,83785,83789,83798,83808,83819,83823,83827,83833,83845,83857,83867,83877,83895,83907,83911,83915,83924,83936,83946,83956,83968,83972,83980,83988,83992,84000,84014,84022,84036,84064,84072,84080,84090,84094,84102,84110,84119,84127,84136,84146,84150,84154,84162,84170,84179,84187,84195,84208,84212,84216,84224,84232,84241,84249,84257,84272,84276,84280,84288,84296,84305,84313,84321,84335,84343,84347,84351,84356,84382,84387,84424,84429,84452,84457,84511,84516,84552,84556,84562,84567,84576,84590,84599,84618,84627,84637,84642,84647,84660,84665,84719,84745,84753,84761,84765],{"__ignoreMap":71},[76,83198,83199,83201,83203,83205],{"class":78,"line":79},[76,83200,51266],{"class":86},[76,83202,51270],{"class":51269},[76,83204,51273],{"class":1927},[76,83206,51276],{"class":86},[76,83208,83209,83211,83213,83215,83217,83219],{"class":78,"line":96},[76,83210,998],{"class":86},[76,83212,50604],{"class":51269},[76,83214,51285],{"class":1927},[76,83216,133],{"class":86},[76,83218,51290],{"class":192},[76,83220,51276],{"class":86},[76,83222,83223],{"class":78,"line":1143},[76,83224,2365],{"emptyLinePlaceholder":2364},[76,83226,83227,83229,83231],{"class":78,"line":1158},[76,83228,998],{"class":86},[76,83230,51303],{"class":51269},[76,83232,51276],{"class":86},[76,83234,83235,83237,83239,83241,83243,83245],{"class":78,"line":1164},[76,83236,52113],{"class":86},[76,83238,51313],{"class":51269},[76,83240,51316],{"class":1927},[76,83242,133],{"class":86},[76,83244,51321],{"class":192},[76,83246,51276],{"class":86},[76,83248,83249,83251,83253,83255,83257,83259,83261,83263,83265],{"class":78,"line":1178},[76,83250,52113],{"class":86},[76,83252,51313],{"class":51269},[76,83254,14887],{"class":1927},[76,83256,133],{"class":86},[76,83258,51360],{"class":192},[76,83260,51340],{"class":1927},[76,83262,133],{"class":86},[76,83264,51367],{"class":192},[76,83266,51276],{"class":86},[76,83268,83269,83271,83273,83275,83277],{"class":78,"line":1184},[76,83270,52113],{"class":86},[76,83272,51376],{"class":51269},[76,83274,51379],{"class":86},[76,83276,51376],{"class":51269},[76,83278,51276],{"class":86},[76,83280,83281,83283,83285],{"class":78,"line":1275},[76,83282,52113],{"class":86},[76,83284,5092],{"class":51269},[76,83286,51276],{"class":86},[76,83288,83289,83291],{"class":78,"line":1281},[76,83290,6370],{"class":51269},[76,83292,15539],{"class":86},[76,83294,83295,83297,83299,83301],{"class":78,"line":1293},[76,83296,54664],{"class":136},[76,83298,51406],{"class":86},[76,83300,279],{"class":136},[76,83302,1254],{"class":86},[76,83304,83305,83307,83309,83311],{"class":78,"line":1576},[76,83306,54675],{"class":136},[76,83308,51406],{"class":86},[76,83310,279],{"class":136},[76,83312,1254],{"class":86},[76,83314,83315,83317,83319,83321],{"class":78,"line":1581},[76,83316,72565],{"class":136},[76,83318,51406],{"class":86},[76,83320,60474],{"class":136},[76,83322,1254],{"class":86},[76,83324,83325],{"class":78,"line":1587},[76,83326,2151],{"class":86},[76,83328,83329],{"class":78,"line":1592},[76,83330,2365],{"emptyLinePlaceholder":2364},[76,83332,83333,83335],{"class":78,"line":1606},[76,83334,62092],{"class":1927},[76,83336,15539],{"class":86},[76,83338,83339,83341,83343,83345,83347],{"class":78,"line":1611},[76,83340,54740],{"class":136},[76,83342,51406],{"class":86},[76,83344,78543],{"class":136},[76,83346,51461],{"class":82},[76,83348,1254],{"class":86},[76,83350,83351,83353,83355,83357,83359,83361],{"class":78,"line":1617},[76,83352,54675],{"class":136},[76,83354,51406],{"class":86},[76,83356,399],{"class":136},[76,83358,51461],{"class":82},[76,83360,51525],{"class":136},[76,83362,1254],{"class":86},[76,83364,83365],{"class":78,"line":1638},[76,83366,2151],{"class":86},[76,83368,83369],{"class":78,"line":1643},[76,83370,2365],{"emptyLinePlaceholder":2364},[76,83372,83373,83375],{"class":78,"line":1657},[76,83374,78594],{"class":1927},[76,83376,15539],{"class":86},[76,83378,83379,83381,83383,83385,83387],{"class":78,"line":1662},[76,83380,54664],{"class":136},[76,83382,51406],{"class":86},[76,83384,663],{"class":136},[76,83386,51461],{"class":82},[76,83388,1254],{"class":86},[76,83390,83391,83393,83395,83397,83399,83401,83403],{"class":78,"line":1691},[76,83392,61829],{"class":136},[76,83394,51406],{"class":86},[76,83396,28090],{"class":136},[76,83398,78649],{"class":136},[76,83400,78652],{"class":136},[76,83402,783],{"class":82},[76,83404,1254],{"class":86},[76,83406,83407,83409,83411,83413],{"class":78,"line":1696},[76,83408,54978],{"class":136},[76,83410,51406],{"class":86},[76,83412,51446],{"class":136},[76,83414,1254],{"class":86},[76,83416,83417,83419,83421,83423,83425,83427,83429],{"class":78,"line":1713},[76,83418,61946],{"class":136},[76,83420,51406],{"class":86},[76,83422,305],{"class":136},[76,83424,51461],{"class":82},[76,83426,51490],{"class":136},[76,83428,62213],{"class":136},[76,83430,1254],{"class":86},[76,83432,83433],{"class":78,"line":1718},[76,83434,2151],{"class":86},[76,83436,83437],{"class":78,"line":1723},[76,83438,2365],{"emptyLinePlaceholder":2364},[76,83440,83441,83443],{"class":78,"line":1728},[76,83442,78712],{"class":1927},[76,83444,15539],{"class":86},[76,83446,83447,83449,83451,83453],{"class":78,"line":1742},[76,83448,61994],{"class":136},[76,83450,51406],{"class":86},[76,83452,61999],{"class":136},[76,83454,1254],{"class":86},[76,83456,83457,83459,83461,83463],{"class":78,"line":1747},[76,83458,54853],{"class":136},[76,83460,51406],{"class":86},[76,83462,61787],{"class":136},[76,83464,1254],{"class":86},[76,83466,83467],{"class":78,"line":2542},[76,83468,2151],{"class":86},[76,83470,83471],{"class":78,"line":2556},[76,83472,2365],{"emptyLinePlaceholder":2364},[76,83474,83475,83477,83479],{"class":78,"line":2564},[76,83476,78594],{"class":1927},[76,83478,55584],{"class":51269},[76,83480,15539],{"class":86},[76,83482,83483,83485,83487,83489,83491],{"class":78,"line":2569},[76,83484,54740],{"class":136},[76,83486,51406],{"class":86},[76,83488,700],{"class":136},[76,83490,51461],{"class":82},[76,83492,1254],{"class":86},[76,83494,83495,83497,83499,83501,83503],{"class":78,"line":2575},[76,83496,54754],{"class":136},[76,83498,51406],{"class":86},[76,83500,700],{"class":136},[76,83502,51461],{"class":82},[76,83504,1254],{"class":86},[76,83506,83507,83509,83511,83513,83515],{"class":78,"line":2581},[76,83508,61719],{"class":136},[76,83510,51406],{"class":86},[76,83512,407],{"class":136},[76,83514,51461],{"class":82},[76,83516,1254],{"class":86},[76,83518,83519],{"class":78,"line":2586},[76,83520,2151],{"class":86},[76,83522,83523],{"class":78,"line":7915},[76,83524,2365],{"emptyLinePlaceholder":2364},[76,83526,83527,83529,83531],{"class":78,"line":7939},[76,83528,78594],{"class":1927},[76,83530,62273],{"class":1927},[76,83532,15539],{"class":86},[76,83534,83535,83537,83539,83541,83543],{"class":78,"line":7944},[76,83536,54740],{"class":136},[76,83538,51406],{"class":86},[76,83540,1686],{"class":136},[76,83542,51461],{"class":82},[76,83544,1254],{"class":86},[76,83546,83547],{"class":78,"line":7950},[76,83548,2151],{"class":86},[76,83550,83551],{"class":78,"line":7977},[76,83552,2365],{"emptyLinePlaceholder":2364},[76,83554,83555,83557,83559,83562],{"class":78,"line":7982},[76,83556,78594],{"class":1927},[76,83558,62273],{"class":1927},[76,83560,83561],{"class":1927}," .tag",[76,83563,15539],{"class":86},[76,83565,83566,83568,83570,83572],{"class":78,"line":7988},[76,83567,54978],{"class":136},[76,83569,51406],{"class":86},[76,83571,60838],{"class":136},[76,83573,1254],{"class":86},[76,83575,83576,83578,83580,83582,83584],{"class":78,"line":8000},[76,83577,54664],{"class":136},[76,83579,51406],{"class":86},[76,83581,165],{"class":136},[76,83583,51461],{"class":82},[76,83585,1254],{"class":86},[76,83587,83588,83590,83592,83594,83596],{"class":78,"line":8012},[76,83589,54891],{"class":136},[76,83591,51406],{"class":86},[76,83593,586],{"class":136},[76,83595,51461],{"class":82},[76,83597,1254],{"class":86},[76,83599,83600,83602,83604,83606],{"class":78,"line":8024},[76,83601,57385],{"class":136},[76,83603,51406],{"class":86},[76,83605,62039],{"class":136},[76,83607,1254],{"class":86},[76,83609,83610],{"class":78,"line":9683},[76,83611,2151],{"class":86},[76,83613,83614],{"class":78,"line":9708},[76,83615,2365],{"emptyLinePlaceholder":2364},[76,83617,83618,83620,83622],{"class":78,"line":9731},[76,83619,78594],{"class":1927},[76,83621,78886],{"class":1927},[76,83623,31435],{"class":86},[76,83625,83626,83628,83631],{"class":78,"line":9755},[76,83627,78594],{"class":1927},[76,83629,83630],{"class":1927}," .sub-total",[76,83632,15539],{"class":86},[76,83634,83635,83637,83639,83641,83643],{"class":78,"line":9760},[76,83636,54891],{"class":136},[76,83638,51406],{"class":86},[76,83640,738],{"class":136},[76,83642,51461],{"class":82},[76,83644,1254],{"class":86},[76,83646,83647,83649,83651,83653],{"class":78,"line":9765},[76,83648,57385],{"class":136},[76,83650,51406],{"class":86},[76,83652,78909],{"class":136},[76,83654,1254],{"class":86},[76,83656,83657,83659,83661,83663],{"class":78,"line":9770},[76,83658,61806],{"class":136},[76,83660,51406],{"class":86},[76,83662,305],{"class":136},[76,83664,1254],{"class":86},[76,83666,83667],{"class":78,"line":9779},[76,83668,2151],{"class":86},[76,83670,83671],{"class":78,"line":9784},[76,83672,2365],{"emptyLinePlaceholder":2364},[76,83674,83675,83677,83679],{"class":78,"line":9790},[76,83676,78594],{"class":1927},[76,83678,78926],{"class":1927},[76,83680,31435],{"class":86},[76,83682,83683,83685,83688],{"class":78,"line":9811},[76,83684,78594],{"class":1927},[76,83686,83687],{"class":1927}," .sub-total::before",[76,83689,31435],{"class":86},[76,83691,83692,83695],{"class":78,"line":9817},[76,83693,83694],{"class":1927},"    .amount::before",[76,83696,15539],{"class":86},[76,83698,83699,83701,83703,83705],{"class":78,"line":9831},[76,83700,78933],{"class":136},[76,83702,51406],{"class":86},[76,83704,78938],{"class":192},[76,83706,1254],{"class":86},[76,83708,83709,83711,83713,83715,83717],{"class":78,"line":9837},[76,83710,54891],{"class":136},[76,83712,51406],{"class":86},[76,83714,586],{"class":136},[76,83716,51461],{"class":82},[76,83718,1254],{"class":86},[76,83720,83721],{"class":78,"line":9864},[76,83722,2151],{"class":86},[76,83724,83725],{"class":78,"line":9873},[76,83726,2365],{"emptyLinePlaceholder":2364},[76,83728,83729,83731,83734],{"class":78,"line":9879},[76,83730,78594],{"class":1927},[76,83732,83733],{"class":1927}," .spec",[76,83735,15539],{"class":86},[76,83737,83738,83740,83742,83744],{"class":78,"line":9887},[76,83739,61806],{"class":136},[76,83741,51406],{"class":86},[76,83743,165],{"class":136},[76,83745,1254],{"class":86},[76,83747,83748,83750,83752,83755],{"class":78,"line":9892},[76,83749,57385],{"class":136},[76,83751,51406],{"class":86},[76,83753,83754],{"class":136},"#888",[76,83756,1254],{"class":86},[76,83758,83759,83761,83763,83765,83767],{"class":78,"line":16571},[76,83760,54891],{"class":136},[76,83762,51406],{"class":86},[76,83764,637],{"class":136},[76,83766,51461],{"class":82},[76,83768,1254],{"class":86},[76,83770,83771,83773,83775,83777,83779],{"class":78,"line":16577},[76,83772,61969],{"class":136},[76,83774,51406],{"class":86},[76,83776,788],{"class":136},[76,83778,51461],{"class":82},[76,83780,1254],{"class":86},[76,83782,83783],{"class":78,"line":16600},[76,83784,2151],{"class":86},[76,83786,83787],{"class":78,"line":16606},[76,83788,2365],{"emptyLinePlaceholder":2364},[76,83790,83791,83793,83796],{"class":78,"line":16629},[76,83792,78594],{"class":1927},[76,83794,83795],{"class":1927}," .count",[76,83797,15539],{"class":86},[76,83799,83800,83802,83804,83806],{"class":78,"line":16643},[76,83801,61806],{"class":136},[76,83803,51406],{"class":86},[76,83805,305],{"class":136},[76,83807,1254],{"class":86},[76,83809,83810,83812,83814,83817],{"class":78,"line":16663},[76,83811,57385],{"class":136},[76,83813,51406],{"class":86},[76,83815,83816],{"class":136},"#aaa",[76,83818,1254],{"class":86},[76,83820,83821],{"class":78,"line":16669},[76,83822,2151],{"class":86},[76,83824,83825],{"class":78,"line":16680},[76,83826,2365],{"emptyLinePlaceholder":2364},[76,83828,83829,83831],{"class":78,"line":16703},[76,83830,72444],{"class":1927},[76,83832,15539],{"class":86},[76,83834,83835,83837,83839,83841,83843],{"class":78,"line":16725},[76,83836,54740],{"class":136},[76,83838,51406],{"class":86},[76,83840,78543],{"class":136},[76,83842,51461],{"class":82},[76,83844,1254],{"class":86},[76,83846,83847,83849,83851,83853,83855],{"class":78,"line":16730},[76,83848,54675],{"class":136},[76,83850,51406],{"class":86},[76,83852,279],{"class":136},[76,83854,51525],{"class":136},[76,83856,1254],{"class":86},[76,83858,83859,83861,83863,83865],{"class":78,"line":16736},[76,83860,54978],{"class":136},[76,83862,51406],{"class":86},[76,83864,51446],{"class":136},[76,83866,1254],{"class":86},[76,83868,83869,83871,83873,83875],{"class":78,"line":16750},[76,83870,54989],{"class":136},[76,83872,51406],{"class":86},[76,83874,51549],{"class":136},[76,83876,1254],{"class":86},[76,83878,83879,83882,83884,83886,83888,83890,83893],{"class":78,"line":16763},[76,83880,83881],{"class":136},"      border-top",[76,83883,51406],{"class":86},[76,83885,305],{"class":136},[76,83887,51461],{"class":82},[76,83889,51490],{"class":136},[76,83891,83892],{"class":136}," #4e4e4e",[76,83894,1254],{"class":86},[76,83896,83897,83899,83901,83903,83905],{"class":78,"line":16768},[76,83898,54664],{"class":136},[76,83900,51406],{"class":86},[76,83902,788],{"class":136},[76,83904,51461],{"class":82},[76,83906,1254],{"class":86},[76,83908,83909],{"class":78,"line":16782},[76,83910,2151],{"class":86},[76,83912,83913],{"class":78,"line":16787},[76,83914,2365],{"emptyLinePlaceholder":2364},[76,83916,83917,83919,83922],{"class":78,"line":16793},[76,83918,72444],{"class":1927},[76,83920,83921],{"class":1927}," .amount",[76,83923,15539],{"class":86},[76,83925,83926,83928,83930,83932,83934],{"class":78,"line":16798},[76,83927,54891],{"class":136},[76,83929,51406],{"class":86},[76,83931,738],{"class":136},[76,83933,51461],{"class":82},[76,83935,1254],{"class":86},[76,83937,83938,83940,83942,83944],{"class":78,"line":16812},[76,83939,57385],{"class":136},[76,83941,51406],{"class":86},[76,83943,78909],{"class":136},[76,83945,1254],{"class":86},[76,83947,83948,83950,83952,83954],{"class":78,"line":16817},[76,83949,62303],{"class":136},[76,83951,51406],{"class":86},[76,83953,51458],{"class":136},[76,83955,1254],{"class":86},[76,83957,83958,83960,83962,83964,83966],{"class":78,"line":16822},[76,83959,61719],{"class":136},[76,83961,51406],{"class":86},[76,83963,744],{"class":136},[76,83965,51461],{"class":82},[76,83967,1254],{"class":86},[76,83969,83970],{"class":78,"line":16836},[76,83971,2151],{"class":86},[76,83973,83974,83976,83978],{"class":78,"line":16848},[76,83975,52386],{"class":86},[76,83977,5092],{"class":51269},[76,83979,51276],{"class":86},[76,83981,83982,83984,83986],{"class":78,"line":16853},[76,83983,51754],{"class":86},[76,83985,51303],{"class":51269},[76,83987,51276],{"class":86},[76,83989,83990],{"class":78,"line":16866},[76,83991,2365],{"emptyLinePlaceholder":2364},[76,83993,83994,83996,83998],{"class":78,"line":16871},[76,83995,998],{"class":86},[76,83997,51769],{"class":51269},[76,83999,51276],{"class":86},[76,84001,84002,84004,84006,84008,84010,84012],{"class":78,"line":16876},[76,84003,52113],{"class":86},[76,84005,51580],{"class":51269},[76,84007,53455],{"class":1927},[76,84009,133],{"class":86},[76,84011,62577],{"class":192},[76,84013,51276],{"class":86},[76,84015,84016,84018,84020],{"class":78,"line":16881},[76,84017,52386],{"class":86},[76,84019,51580],{"class":51269},[76,84021,51276],{"class":86},[76,84023,84024,84026,84028,84030,84032,84034],{"class":78,"line":16894},[76,84025,52113],{"class":86},[76,84027,51580],{"class":51269},[76,84029,53455],{"class":1927},[76,84031,133],{"class":86},[76,84033,62549],{"class":192},[76,84035,51276],{"class":86},[76,84037,84038,84040,84042,84045,84047,84049,84051,84054,84056,84058,84060,84062],{"class":78,"line":16899},[76,84039,51310],{"class":86},[76,84041,51580],{"class":51269},[76,84043,84044],{"class":86},">合计：\u003C",[76,84046,76],{"class":51269},[76,84048,53455],{"class":1927},[76,84050,133],{"class":86},[76,84052,84053],{"class":192},"\"amount\"",[76,84055,55283],{"class":86},[76,84057,76],{"class":51269},[76,84059,55283],{"class":86},[76,84061,51580],{"class":51269},[76,84063,51276],{"class":86},[76,84065,84066,84068,84070],{"class":78,"line":32602},[76,84067,52386],{"class":86},[76,84069,51580],{"class":51269},[76,84071,51276],{"class":86},[76,84073,84074,84076,84078],{"class":78,"line":32608},[76,84075,52113],{"class":86},[76,84077,51782],{"class":51269},[76,84079,51276],{"class":86},[76,84081,84082,84084,84086,84088],{"class":78,"line":32614},[76,84083,11188],{"class":82},[76,84085,79346],{"class":136},[76,84087,13531],{"class":82},[76,84089,55416],{"class":86},[76,84091,84092],{"class":78,"line":32620},[76,84093,79355],{"class":86},[76,84095,84096,84098,84100],{"class":78,"line":32626},[76,84097,79360],{"class":86},[76,84099,79363],{"class":192},[76,84101,31435],{"class":86},[76,84103,84104,84106,84108],{"class":78,"line":32637},[76,84105,79370],{"class":86},[76,84107,79373],{"class":192},[76,84109,31435],{"class":86},[76,84111,84112,84114,84117],{"class":78,"line":32643},[76,84113,79380],{"class":86},[76,84115,84116],{"class":136},"289.9",[76,84118,31435],{"class":86},[76,84120,84121,84123,84125],{"class":78,"line":32663},[76,84122,79390],{"class":86},[76,84124,79393],{"class":192},[76,84126,31435],{"class":86},[76,84128,84129,84132,84134],{"class":78,"line":32669},[76,84130,84131],{"class":86},"        count: ",[76,84133,165],{"class":136},[76,84135,31435],{"class":86},[76,84137,84138,84141,84144],{"class":78,"line":32680},[76,84139,84140],{"class":86},"        spec: { color: ",[76,84142,84143],{"class":192},"'白色'",[76,84145,55573],{"class":86},[76,84147,84148],{"class":78,"line":32686},[76,84149,77861],{"class":86},[76,84151,84152],{"class":78,"line":32692},[76,84153,79355],{"class":86},[76,84155,84156,84158,84160],{"class":78,"line":32698},[76,84157,79360],{"class":86},[76,84159,79454],{"class":192},[76,84161,31435],{"class":86},[76,84163,84164,84166,84168],{"class":78,"line":32704},[76,84165,79370],{"class":86},[76,84167,79463],{"class":192},[76,84169,31435],{"class":86},[76,84171,84172,84174,84177],{"class":78,"line":32710},[76,84173,79380],{"class":86},[76,84175,84176],{"class":136},"109.8",[76,84178,31435],{"class":86},[76,84180,84181,84183,84185],{"class":78,"line":32716},[76,84182,79390],{"class":86},[76,84184,79481],{"class":192},[76,84186,31435],{"class":86},[76,84188,84189,84191,84193],{"class":78,"line":32722},[76,84190,84131],{"class":86},[76,84192,159],{"class":136},[76,84194,31435],{"class":86},[76,84196,84197,84200,84202,84204,84206],{"class":78,"line":32742},[76,84198,84199],{"class":86},"        spec: { size: ",[76,84201,81872],{"class":192},[76,84203,55433],{"class":86},[76,84205,81877],{"class":192},[76,84207,55573],{"class":86},[76,84209,84210],{"class":78,"line":32748},[76,84211,77861],{"class":86},[76,84213,84214],{"class":78,"line":32764},[76,84215,79355],{"class":86},[76,84217,84218,84220,84222],{"class":78,"line":32770},[76,84219,79360],{"class":86},[76,84221,79498],{"class":192},[76,84223,31435],{"class":86},[76,84225,84226,84228,84230],{"class":78,"line":32784},[76,84227,79370],{"class":86},[76,84229,79507],{"class":192},[76,84231,31435],{"class":86},[76,84233,84234,84236,84239],{"class":78,"line":32790},[76,84235,79380],{"class":86},[76,84237,84238],{"class":136},"488",[76,84240,31435],{"class":86},[76,84242,84243,84245,84247],{"class":78,"line":32805},[76,84244,79390],{"class":86},[76,84246,79525],{"class":192},[76,84248,31435],{"class":86},[76,84250,84251,84253,84255],{"class":78,"line":32811},[76,84252,84131],{"class":86},[76,84254,305],{"class":136},[76,84256,31435],{"class":86},[76,84258,84259,84261,84264,84267,84270],{"class":78,"line":32820},[76,84260,84140],{"class":86},[76,84262,84263],{"class":192},"'青色'",[76,84265,84266],{"class":86},", sum: ",[76,84268,84269],{"class":192},"'一大四小'",[76,84271,55573],{"class":86},[76,84273,84274],{"class":78,"line":32826},[76,84275,77861],{"class":86},[76,84277,84278],{"class":78,"line":32835},[76,84279,79355],{"class":86},[76,84281,84282,84284,84286],{"class":78,"line":32841},[76,84283,79360],{"class":86},[76,84285,79542],{"class":192},[76,84287,31435],{"class":86},[76,84289,84290,84292,84294],{"class":78,"line":32847},[76,84291,79370],{"class":86},[76,84293,79551],{"class":192},[76,84295,31435],{"class":86},[76,84297,84298,84300,84303],{"class":78,"line":32856},[76,84299,79380],{"class":86},[76,84301,84302],{"class":136},"139",[76,84304,31435],{"class":86},[76,84306,84307,84309,84311],{"class":78,"line":32862},[76,84308,79390],{"class":86},[76,84310,79569],{"class":192},[76,84312,31435],{"class":86},[76,84314,84315,84317,84319],{"class":78,"line":32873},[76,84316,84131],{"class":86},[76,84318,305],{"class":136},[76,84320,31435],{"class":86},[76,84322,84323,84325,84328,84330,84333],{"class":78,"line":32879},[76,84324,84199],{"class":86},[76,84326,84327],{"class":192},"'小号'",[76,84329,55433],{"class":86},[76,84331,84332],{"class":192},"'紫色'",[76,84334,55439],{"class":86},[76,84336,84337,84340],{"class":78,"line":32898},[76,84338,84339],{"class":86},"        gift: ",[76,84341,84342],{"class":192},"'50g茶叶,清洗球'\n",[76,84344,84345],{"class":78,"line":32904},[76,84346,52367],{"class":86},[76,84348,84349],{"class":78,"line":32915},[76,84350,53078],{"class":86},[76,84352,84353],{"class":78,"line":32921},[76,84354,84355],{"class":146},"    \u002F\u002F  1.根据数据渲染页面\n",[76,84357,84358,84360,84362,84364,84366,84368,84370,84372,84374,84376,84378,84380],{"class":78,"line":32941},[76,84359,52376],{"class":86},[76,84361,54368],{"class":1927},[76,84363,87],{"class":86},[76,84365,79870],{"class":192},[76,84367,74218],{"class":86},[76,84369,133],{"class":82},[76,84371,80017],{"class":86},[76,84373,74013],{"class":1927},[76,84375,87],{"class":86},[76,84377,79764],{"class":5183},[76,84379,79767],{"class":82},[76,84381,15539],{"class":86},[76,84383,84384],{"class":78,"line":32957},[76,84385,84386],{"class":146},"      \u002F\u002F 对象解构\n",[76,84388,84389,84391,84393,84395,84397,84399,84401,84404,84406,84408,84410,84413,84415,84418,84420,84422],{"class":78,"line":32963},[76,84390,58197],{"class":82},[76,84392,79776],{"class":86},[76,84394,79789],{"class":136},[76,84396,12402],{"class":86},[76,84398,79779],{"class":136},[76,84400,12402],{"class":86},[76,84402,84403],{"class":136},"count",[76,84405,12402],{"class":86},[76,84407,79784],{"class":136},[76,84409,12402],{"class":86},[76,84411,84412],{"class":136},"spec",[76,84414,12402],{"class":86},[76,84416,84417],{"class":136},"gift",[76,84419,79792],{"class":86},[76,84421,133],{"class":82},[76,84423,79797],{"class":86},[76,84425,84426],{"class":78,"line":32977},[76,84427,84428],{"class":146},"      \u002F\u002F 规格文字模块处理\n",[76,84430,84431,84433,84436,84438,84440,84442,84444,84446,84448,84450],{"class":78,"line":32983},[76,84432,58197],{"class":82},[76,84434,84435],{"class":136}," text",[76,84437,13531],{"class":82},[76,84439,81907],{"class":86},[76,84441,81910],{"class":1927},[76,84443,81913],{"class":86},[76,84445,74192],{"class":1927},[76,84447,87],{"class":86},[76,84449,81920],{"class":192},[76,84451,93],{"class":86},[76,84453,84454],{"class":78,"line":32989},[76,84455,84456],{"class":146},"      \u002F\u002F 处理赠品模块\n",[76,84458,84459,84461,84463,84465,84468,84470,84472,84474,84476,84479,84481,84483,84485,84487,84489,84492,84494,84497,84499,84501,84503,84505,84507,84509],{"class":78,"line":33000},[76,84460,58197],{"class":82},[76,84462,73888],{"class":136},[76,84464,13531],{"class":82},[76,84466,84467],{"class":86}," gift ",[76,84469,1074],{"class":82},[76,84471,83081],{"class":86},[76,84473,83084],{"class":1927},[76,84475,87],{"class":86},[76,84477,84478],{"class":192},"','",[76,84480,30795],{"class":86},[76,84482,74013],{"class":1927},[76,84484,87],{"class":86},[76,84486,79764],{"class":5183},[76,84488,79767],{"class":82},[76,84490,84491],{"class":192}," `\u003Cspan class=\"tag\">【赠品】${",[76,84493,79764],{"class":86},[76,84495,84496],{"class":192},"}\u003C\u002Fspan>`",[76,84498,30795],{"class":86},[76,84500,74192],{"class":1927},[76,84502,87],{"class":86},[76,84504,74197],{"class":192},[76,84506,13681],{"class":86},[76,84508,947],{"class":82},[76,84510,70073],{"class":192},[76,84512,84513],{"class":78,"line":33006},[76,84514,84515],{"class":146},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[76,84517,84518,84520,84523,84525,84528,84530,84532,84534,84537,84539,84541,84543,84546,84548,84550],{"class":78,"line":33012},[76,84519,58197],{"class":82},[76,84521,84522],{"class":136}," subtotal",[76,84524,13531],{"class":82},[76,84526,84527],{"class":86}," ((price ",[76,84529,543],{"class":82},[76,84531,5721],{"class":136},[76,84533,6485],{"class":82},[76,84535,84536],{"class":86}," count) ",[76,84538,672],{"class":82},[76,84540,5721],{"class":136},[76,84542,30795],{"class":86},[76,84544,84545],{"class":1927},"toFixed",[76,84547,87],{"class":86},[76,84549,165],{"class":136},[76,84551,93],{"class":86},[76,84553,84554],{"class":78,"line":33022},[76,84555,2365],{"emptyLinePlaceholder":2364},[76,84557,84558,84560],{"class":78,"line":33028},[76,84559,73951],{"class":82},[76,84561,70137],{"class":192},[76,84563,84564],{"class":78,"line":33039},[76,84565,84566],{"class":192},"        \u003Cdiv class=\"item\">\n",[76,84568,84569,84572,84574],{"class":78,"line":33045},[76,84570,84571],{"class":192},"          \u003Cimg src=\"${",[76,84573,79789],{"class":86},[76,84575,79821],{"class":192},[76,84577,84578,84581,84583,84586,84588],{"class":78,"line":33055},[76,84579,84580],{"class":192},"          \u003Cp class=\"name\">${",[76,84582,79779],{"class":86},[76,84584,84585],{"class":192},"}${",[76,84587,1263],{"class":86},[76,84589,79831],{"class":192},[76,84591,84592,84595,84597],{"class":78,"line":33060},[76,84593,84594],{"class":192},"          \u003Cp class=\"spec\">${",[76,84596,5154],{"class":86},[76,84598,79831],{"class":192},[76,84600,84601,84604,84606,84608,84610,84612,84614,84616],{"class":78,"line":33066},[76,84602,84603],{"class":192},"          \u003Cp class=\"price\">${",[76,84605,79784],{"class":86},[76,84607,646],{"class":192},[76,84609,84545],{"class":1927},[76,84611,87],{"class":192},[76,84613,165],{"class":136},[76,84615,517],{"class":192},[76,84617,79831],{"class":192},[76,84619,84620,84623,84625],{"class":78,"line":33115},[76,84621,84622],{"class":192},"          \u003Cp class=\"count\">x${",[76,84624,84403],{"class":86},[76,84626,79831],{"class":192},[76,84628,84629,84632,84635],{"class":78,"line":33162},[76,84630,84631],{"class":192},"          \u003Cp class=\"sub-total\">${",[76,84633,84634],{"class":86},"subtotal",[76,84636,79831],{"class":192},[76,84638,84639],{"class":78,"line":33167},[76,84640,84641],{"class":192},"        \u003C\u002Fdiv> \n",[76,84643,84644],{"class":78,"line":33173},[76,84645,84646],{"class":192},"             `\n",[76,84648,84649,84652,84654,84656,84658],{"class":78,"line":33192},[76,84650,84651],{"class":86},"    }).",[76,84653,74192],{"class":1927},[76,84655,87],{"class":86},[76,84657,74197],{"class":192},[76,84659,93],{"class":86},[76,84661,84662],{"class":78,"line":33198},[76,84663,84664],{"class":146},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[76,84666,84667,84669,84671,84673,84675,84678,84680,84683,84685,84687,84689,84692,84695,84697,84700,84702,84704,84706,84709,84711,84713,84715,84717],{"class":78,"line":33218},[76,84668,11188],{"class":82},[76,84670,62754],{"class":136},[76,84672,13531],{"class":82},[76,84674,80017],{"class":86},[76,84676,84677],{"class":1927},"reduce",[76,84679,2340],{"class":86},[76,84681,84682],{"class":5183},"prev",[76,84684,12402],{"class":86},[76,84686,79764],{"class":5183},[76,84688,13681],{"class":86},[76,84690,84691],{"class":82},"=>",[76,84693,84694],{"class":86}," prev ",[76,84696,569],{"class":82},[76,84698,84699],{"class":86}," (item.price ",[76,84701,543],{"class":82},[76,84703,5721],{"class":136},[76,84705,6485],{"class":82},[76,84707,84708],{"class":86}," item.count) ",[76,84710,672],{"class":82},[76,84712,5721],{"class":136},[76,84714,12402],{"class":86},[76,84716,279],{"class":136},[76,84718,93],{"class":86},[76,84720,84721,84723,84725,84727,84730,84732,84734,84737,84739,84741,84743],{"class":78,"line":33224},[76,84722,52376],{"class":86},[76,84724,54368],{"class":1927},[76,84726,87],{"class":86},[76,84728,84729],{"class":192},"'.amount'",[76,84731,74218],{"class":86},[76,84733,133],{"class":82},[76,84735,84736],{"class":86}," total.",[76,84738,84545],{"class":1927},[76,84740,87],{"class":86},[76,84742,165],{"class":136},[76,84744,93],{"class":86},[76,84746,84747,84749,84751],{"class":78,"line":33230},[76,84748,52386],{"class":86},[76,84750,51782],{"class":51269},[76,84752,51276],{"class":86},[76,84754,84755,84757,84759],{"class":78,"line":33240},[76,84756,51754],{"class":86},[76,84758,51769],{"class":51269},[76,84760,51276],{"class":86},[76,84762,84763],{"class":78,"line":33245},[76,84764,2365],{"emptyLinePlaceholder":2364},[76,84766,84767,84769,84771],{"class":78,"line":33251},[76,84768,51754],{"class":86},[76,84770,50604],{"class":51269},[76,84772,51276],{"class":86},[16,84774,84776],{"id":84775},"_411-编程思想","4.11 编程思想",[46,84778,84780],{"id":84779},"_4111-面向过程介绍","4.11.1 面向过程介绍",[21,84782,84783,84786],{},[237,84784,84785],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[21,84788,84789],{},"调用就可以了",[21,84791,84792],{},[1426,84793],{"alt":71,"src":84794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[46,84796,84798],{"id":84797},"_4112-面向对象","4.11.2 面向对象",[21,84800,84801],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[21,84803,84804],{},[1426,84805],{"alt":71,"src":84806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[21,84808,84809],{},"面向对象的特性：",[1095,84811,84812,84815,84818],{},[32,84813,84814],{},"封装性",[32,84816,84817],{},"继承性",[32,84819,84820],{},"多态性",[46,84822,84824],{"id":84823},"_4113-两者比较","4.11.3 两者比较",[21,84826,84827],{},[1426,84828],{"alt":71,"src":84829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[16,84831,84833],{"id":84832},"_412-构造函数回顾","4.12 构造函数回顾",[21,84835,84836],{},[1426,84837],{"alt":71,"src":84838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[21,84840,84841],{},[1426,84842],{"alt":71,"src":84843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[21,84845,84846],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[21,84848,84849],{},[1426,84850],{"alt":71,"src":84851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[16,84853,84855],{"id":84854},"_413-原型","4.13 原型",[46,84857,84859],{"id":84858},"_4131-原型对象的认识","4.13.1 原型对象的认识",[21,84861,84862],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[21,84864,84865],{},[1426,84866],{"alt":71,"src":84867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[21,84869,84870],{},[1426,84871],{"alt":71,"src":84872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[21,84874,84875],{},"原型是构造函数的属性，它也是一个对象",[21,84877,84878],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[21,84880,84881],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[66,84883,84885],{"className":53036,"code":84884,"language":53038,"meta":71,"style":71},"\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",[73,84886,84887,84895,84900,84908,84913,84918,84923,84928,84933,84937,84941,84945,84950,84955,84959,84964,84969,84974,84979,84984,84988,84996],{"__ignoreMap":71},[76,84888,84889,84891,84893],{"class":78,"line":79},[76,84890,998],{"class":86},[76,84892,51769],{"class":51269},[76,84894,51276],{"class":86},[76,84896,84897],{"class":78,"line":96},[76,84898,84899],{"class":146},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[76,84901,84902,84904,84906],{"class":78,"line":1143},[76,84903,52113],{"class":86},[76,84905,51782],{"class":51269},[76,84907,51276],{"class":86},[76,84909,84910],{"class":78,"line":1158},[76,84911,84912],{"class":86},"    function Star(uname, age) {\n",[76,84914,84915],{"class":78,"line":1164},[76,84916,84917],{"class":86},"      this.uname = uname,\n",[76,84919,84920],{"class":78,"line":1178},[76,84921,84922],{"class":86},"        this.age = age\n",[76,84924,84925],{"class":78,"line":1184},[76,84926,84927],{"class":86},"      \u002F\u002F this.sing = function () {\n",[76,84929,84930],{"class":78,"line":1275},[76,84931,84932],{"class":86},"      \u002F\u002F   console.log('唱歌')\n",[76,84934,84935],{"class":78,"line":1281},[76,84936,2365],{"emptyLinePlaceholder":2364},[76,84938,84939],{"class":78,"line":1293},[76,84940,60006],{"class":86},[76,84942,84943],{"class":78,"line":1576},[76,84944,2151],{"class":86},[76,84946,84947],{"class":78,"line":1581},[76,84948,84949],{"class":86},"    Star.prototype.sing = function () {\n",[76,84951,84952],{"class":78,"line":1587},[76,84953,84954],{"class":86},"      console.log('唱歌')\n",[76,84956,84957],{"class":78,"line":1592},[76,84958,2151],{"class":86},[76,84960,84961],{"class":78,"line":1606},[76,84962,84963],{"class":86},"    \u002F\u002F console.dir(Star.prototype)\n",[76,84965,84966],{"class":78,"line":1611},[76,84967,84968],{"class":86},"    const pink = new Star('pink', 18)\n",[76,84970,84971],{"class":78,"line":1617},[76,84972,84973],{"class":86},"    const red = new Star('red', 20)\n",[76,84975,84976],{"class":78,"line":1638},[76,84977,84978],{"class":86},"    pink.sing()\n",[76,84980,84981],{"class":78,"line":1643},[76,84982,84983],{"class":86},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[76,84985,84986],{"class":78,"line":1657},[76,84987,2365],{"emptyLinePlaceholder":2364},[76,84989,84990,84992,84994],{"class":78,"line":1662},[76,84991,52386],{"class":86},[76,84993,51782],{"class":51269},[76,84995,51276],{"class":86},[76,84997,84998,85000,85002],{"class":78,"line":1691},[76,84999,51754],{"class":86},[76,85001,51769],{"class":51269},[76,85003,51276],{"class":86},[21,85005,85006],{},[1426,85007],{"alt":71,"src":85008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[66,85010,85012],{"className":53036,"code":85011,"language":53038,"meta":71,"style":71},"\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",[73,85013,85014,85022,85030,85035,85040,85045,85050,85054,85059,85064,85069,85073,85078,85082,85086,85091,85095,85103],{"__ignoreMap":71},[76,85015,85016,85018,85020],{"class":78,"line":79},[76,85017,998],{"class":86},[76,85019,51769],{"class":51269},[76,85021,51276],{"class":86},[76,85023,85024,85026,85028],{"class":78,"line":96},[76,85025,52113],{"class":86},[76,85027,51782],{"class":51269},[76,85029,51276],{"class":86},[76,85031,85032],{"class":78,"line":1143},[76,85033,85034],{"class":86},"    let that\n",[76,85036,85037],{"class":78,"line":1158},[76,85038,85039],{"class":86},"    function Star(uname) {\n",[76,85041,85042],{"class":78,"line":1164},[76,85043,85044],{"class":86},"      this.uname = uname\n",[76,85046,85047],{"class":78,"line":1178},[76,85048,85049],{"class":86},"      that = this\n",[76,85051,85052],{"class":78,"line":1184},[76,85053,2151],{"class":86},[76,85055,85056],{"class":78,"line":1275},[76,85057,85058],{"class":86},"    \u002F\u002F 实例对象是 ldh\n",[76,85060,85061],{"class":78,"line":1281},[76,85062,85063],{"class":86},"    const ldh = new Star('刘德华')\n",[76,85065,85066],{"class":78,"line":1293},[76,85067,85068],{"class":86},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[76,85070,85071],{"class":78,"line":1576},[76,85072,2365],{"emptyLinePlaceholder":2364},[76,85074,85075],{"class":78,"line":1581},[76,85076,85077],{"class":86},"    Star.sing = function () {\n",[76,85079,85080],{"class":78,"line":1587},[76,85081,84954],{"class":86},[76,85083,85084],{"class":78,"line":1592},[76,85085,2151],{"class":86},[76,85087,85088],{"class":78,"line":1606},[76,85089,85090],{"class":86},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[76,85092,85093],{"class":78,"line":1611},[76,85094,2365],{"emptyLinePlaceholder":2364},[76,85096,85097,85099,85101],{"class":78,"line":1617},[76,85098,52386],{"class":86},[76,85100,51782],{"class":51269},[76,85102,51276],{"class":86},[76,85104,85105,85107,85109],{"class":78,"line":1638},[76,85106,51754],{"class":86},[76,85108,51769],{"class":51269},[76,85110,51276],{"class":86},[21,85112,85113],{},"构造函数的this指向的是实例对象；",[21,85115,85116],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[46,85118,85120],{"id":85119},"_4132-数组扩展方法","4.13.2 数组扩展方法",[21,85122,85123],{},[1426,85124],{"alt":71,"src":85125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[66,85127,85129],{"className":53036,"code":85128,"language":53038,"meta":71,"style":71},"\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",[73,85130,85131,85139,85147,85152,85157,85162,85167,85172,85177,85182,85187,85192,85197,85201,85206,85211,85216,85221,85225,85230,85235,85240,85245,85249,85254,85259,85264,85269,85273,85278,85282,85290],{"__ignoreMap":71},[76,85132,85133,85135,85137],{"class":78,"line":79},[76,85134,998],{"class":86},[76,85136,51769],{"class":51269},[76,85138,51276],{"class":86},[76,85140,85141,85143,85145],{"class":78,"line":96},[76,85142,52113],{"class":86},[76,85144,51782],{"class":51269},[76,85146,51276],{"class":86},[76,85148,85149],{"class":78,"line":1143},[76,85150,85151],{"class":86},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[76,85153,85154],{"class":78,"line":1158},[76,85155,85156],{"class":86},"    const arr = [1, 2, 3]\n",[76,85158,85159],{"class":78,"line":1164},[76,85160,85161],{"class":86},"    \u002F\u002F 自己定义数组的扩展方法\n",[76,85163,85164],{"class":78,"line":1178},[76,85165,85166],{"class":86},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[76,85168,85169],{"class":78,"line":1184},[76,85170,85171],{"class":86},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[76,85173,85174],{"class":78,"line":1275},[76,85175,85176],{"class":86},"    \u002F\u002F ①.最大值\n",[76,85178,85179],{"class":78,"line":1281},[76,85180,85181],{"class":86},"    Array.prototype.max = function () {\n",[76,85183,85184],{"class":78,"line":1293},[76,85185,85186],{"class":86},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[76,85188,85189],{"class":78,"line":1576},[76,85190,85191],{"class":86},"      return Math.max(...this)\n",[76,85193,85194],{"class":78,"line":1581},[76,85195,85196],{"class":86},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[76,85198,85199],{"class":78,"line":1587},[76,85200,2151],{"class":86},[76,85202,85203],{"class":78,"line":1592},[76,85204,85205],{"class":86},"    console.log(arr.max())\n",[76,85207,85208],{"class":78,"line":1606},[76,85209,85210],{"class":86},"    \u002F\u002F ②最小值\n",[76,85212,85213],{"class":78,"line":1611},[76,85214,85215],{"class":86},"    Array.prototype.min = function () {\n",[76,85217,85218],{"class":78,"line":1617},[76,85219,85220],{"class":86},"      return Math.min(...this)\n",[76,85222,85223],{"class":78,"line":1638},[76,85224,2151],{"class":86},[76,85226,85227],{"class":78,"line":1643},[76,85228,85229],{"class":86},"    console.log(arr.min())\n",[76,85231,85232],{"class":78,"line":1657},[76,85233,85234],{"class":86},"    \u002F\u002F③求和\n",[76,85236,85237],{"class":78,"line":1662},[76,85238,85239],{"class":86},"    Array.prototype.sum = function () {\n",[76,85241,85242],{"class":78,"line":1691},[76,85243,85244],{"class":86},"      return this.reduce((prev, current) => prev + current, 0)\n",[76,85246,85247],{"class":78,"line":1696},[76,85248,2151],{"class":86},[76,85250,85251],{"class":78,"line":1713},[76,85252,85253],{"class":86},"    console.log(arr.sum())\n",[76,85255,85256],{"class":78,"line":1718},[76,85257,85258],{"class":86},"    \u002F\u002F ③排序\n",[76,85260,85261],{"class":78,"line":1723},[76,85262,85263],{"class":86},"    Array.prototype.rever = function () {\n",[76,85265,85266],{"class":78,"line":1728},[76,85267,85268],{"class":86},"      return this.reverse()\n",[76,85270,85271],{"class":78,"line":1742},[76,85272,2151],{"class":86},[76,85274,85275],{"class":78,"line":1747},[76,85276,85277],{"class":86},"    console.log(arr.rever())\n",[76,85279,85280],{"class":78,"line":2542},[76,85281,2365],{"emptyLinePlaceholder":2364},[76,85283,85284,85286,85288],{"class":78,"line":2556},[76,85285,52386],{"class":86},[76,85287,51782],{"class":51269},[76,85289,51276],{"class":86},[76,85291,85292,85294,85296],{"class":78,"line":2564},[76,85293,51754],{"class":86},[76,85295,51769],{"class":51269},[76,85297,51276],{"class":86},[21,85299,85300],{},[1426,85301],{"alt":71,"src":85302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[46,85304,85306],{"id":85305},"_4133-constructor-属性","4.13.3 constructor 属性",[21,85308,85309],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[21,85311,85312],{},[1426,85313],{"alt":71,"src":85314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[66,85316,85318],{"className":53036,"code":85317,"language":53038,"meta":71,"style":71},"\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",[73,85319,85320,85328,85336,85341,85346,85350,85355,85360,85365,85373],{"__ignoreMap":71},[76,85321,85322,85324,85326],{"class":78,"line":79},[76,85323,998],{"class":86},[76,85325,51769],{"class":51269},[76,85327,51276],{"class":86},[76,85329,85330,85332,85334],{"class":78,"line":96},[76,85331,52113],{"class":86},[76,85333,51782],{"class":51269},[76,85335,51276],{"class":86},[76,85337,85338],{"class":78,"line":1143},[76,85339,85340],{"class":86},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[76,85342,85343],{"class":78,"line":1158},[76,85344,85345],{"class":86},"    function Star() {\n",[76,85347,85348],{"class":78,"line":1164},[76,85349,2151],{"class":86},[76,85351,85352],{"class":78,"line":1178},[76,85353,85354],{"class":86},"    const ldh = new Star()\n",[76,85356,85357],{"class":78,"line":1184},[76,85358,85359],{"class":86},"    console.log(Star.prototype)\n",[76,85361,85362],{"class":78,"line":1275},[76,85363,85364],{"class":86},"    console.log(Star.prototype.constructor === Star)\n",[76,85366,85367,85369,85371],{"class":78,"line":1281},[76,85368,52386],{"class":86},[76,85370,51782],{"class":51269},[76,85372,51276],{"class":86},[76,85374,85375,85377,85379],{"class":78,"line":1293},[76,85376,51754],{"class":86},[76,85378,51769],{"class":51269},[76,85380,51276],{"class":86},[21,85382,85383],{},[1426,85384],{"alt":71,"src":85385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[21,85387,85388],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[66,85390,85392],{"className":53036,"code":85391,"language":53038,"meta":71,"style":71},"  \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",[73,85393,85394,85402,85406,85410,85414,85419,85424,85429,85433,85438,85443,85448,85453,85458,85463,85467,85471,85476,85481,85486,85490,85495,85500,85504,85508,85512],{"__ignoreMap":71},[76,85395,85396,85398,85400],{"class":78,"line":79},[76,85397,52113],{"class":86},[76,85399,51782],{"class":51269},[76,85401,51276],{"class":86},[76,85403,85404],{"class":78,"line":96},[76,85405,85340],{"class":86},[76,85407,85408],{"class":78,"line":1143},[76,85409,85345],{"class":86},[76,85411,85412],{"class":78,"line":1158},[76,85413,2151],{"class":86},[76,85415,85416],{"class":78,"line":1164},[76,85417,85418],{"class":86},"    \u002F\u002F const ldh = new Star()\n",[76,85420,85421],{"class":78,"line":1178},[76,85422,85423],{"class":86},"    \u002F\u002F console.log(Star.prototype)\n",[76,85425,85426],{"class":78,"line":1184},[76,85427,85428],{"class":86},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[76,85430,85431],{"class":78,"line":1275},[76,85432,2365],{"emptyLinePlaceholder":2364},[76,85434,85435],{"class":78,"line":1281},[76,85436,85437],{"class":86},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[76,85439,85440],{"class":78,"line":1293},[76,85441,85442],{"class":86},"    \u002F\u002F Star.prototype.sing = function () {\n",[76,85444,85445],{"class":78,"line":1576},[76,85446,85447],{"class":86},"    \u002F\u002F   console.log('唱歌')\n",[76,85449,85450],{"class":78,"line":1581},[76,85451,85452],{"class":86},"    \u002F\u002F }\n",[76,85454,85455],{"class":78,"line":1587},[76,85456,85457],{"class":86},"    \u002F\u002F Star.prototype.dance = function () {\n",[76,85459,85460],{"class":78,"line":1592},[76,85461,85462],{"class":86},"    \u002F\u002F   console.log('跳舞')\n",[76,85464,85465],{"class":78,"line":1606},[76,85466,85452],{"class":86},[76,85468,85469],{"class":78,"line":1611},[76,85470,85359],{"class":86},[76,85472,85473],{"class":78,"line":1617},[76,85474,85475],{"class":86},"    Star.prototype = {\n",[76,85477,85478],{"class":78,"line":1638},[76,85479,85480],{"class":86},"      sing: function () {\n",[76,85482,85483],{"class":78,"line":1643},[76,85484,85485],{"class":86},"        console.log('唱歌')\n",[76,85487,85488],{"class":78,"line":1657},[76,85489,77861],{"class":86},[76,85491,85492],{"class":78,"line":1662},[76,85493,85494],{"class":86},"      dance: function () {\n",[76,85496,85497],{"class":78,"line":1691},[76,85498,85499],{"class":86},"        console.log('跳舞')\n",[76,85501,85502],{"class":78,"line":1696},[76,85503,52367],{"class":86},[76,85505,85506],{"class":78,"line":1713},[76,85507,2151],{"class":86},[76,85509,85510],{"class":78,"line":1718},[76,85511,85359],{"class":86},[76,85513,85514,85516,85518],{"class":78,"line":1723},[76,85515,52386],{"class":86},[76,85517,51782],{"class":51269},[76,85519,51276],{"class":86},[21,85521,85522],{},"进行输出结果后会发现：",[21,85524,85525],{},[1426,85526],{"alt":71,"src":85527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[21,85529,85530],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[21,85532,85533],{},"所以，要重新指回创造这个原型对象的构造函数",[66,85535,85537],{"className":71182,"code":85536,"language":71184,"meta":71,"style":71},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[73,85538,85539,85553,85558,85563,85574,85587,85592,85603,85617,85621],{"__ignoreMap":71},[76,85540,85541,85544,85546,85549,85551],{"class":78,"line":79},[76,85542,85543],{"class":136},"Star",[76,85545,646],{"class":86},[76,85547,85548],{"class":136},"prototype",[76,85550,13531],{"class":82},[76,85552,15539],{"class":86},[76,85554,85555],{"class":78,"line":96},[76,85556,85557],{"class":146},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[76,85559,85560],{"class":78,"line":1143},[76,85561,85562],{"class":86},"  constructor: Star,\n",[76,85564,85565,85568,85570,85572],{"class":78,"line":1158},[76,85566,85567],{"class":1927},"  sing",[76,85569,51406],{"class":86},[76,85571,54418],{"class":82},[76,85573,54421],{"class":86},[76,85575,85576,85578,85580,85582,85585],{"class":78,"line":1164},[76,85577,73722],{"class":86},[76,85579,58216],{"class":1927},[76,85581,87],{"class":86},[76,85583,85584],{"class":192},"'唱歌'",[76,85586,93],{"class":86},[76,85588,85589],{"class":78,"line":1178},[76,85590,85591],{"class":86},"   },\n",[76,85593,85594,85597,85599,85601],{"class":78,"line":1184},[76,85595,85596],{"class":1927},"   dance",[76,85598,51406],{"class":86},[76,85600,54418],{"class":82},[76,85602,54421],{"class":86},[76,85604,85605,85608,85610,85612,85615],{"class":78,"line":1275},[76,85606,85607],{"class":86},"     console.",[76,85609,58216],{"class":1927},[76,85611,87],{"class":86},[76,85613,85614],{"class":192},"'跳舞'",[76,85616,93],{"class":86},[76,85618,85619],{"class":78,"line":1281},[76,85620,4274],{"class":86},[76,85622,85623],{"class":78,"line":1293},[76,85624,1529],{"class":86},[21,85626,85627],{},[1426,85628],{"alt":71,"src":85629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[21,85631,85632],{},"总结1：",[21,85634,85635],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[21,85637,85638],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[21,85640,85641],{},"constructor指的是他的来源",[21,85643,85644],{},[1426,85645],{"alt":71,"src":85646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[21,85648,85649],{},[1426,85650],{"alt":71,"src":85651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[21,85653,85654],{},"总结2：",[21,85656,85657],{},[1426,85658],{"alt":71,"src":85659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[21,85661,85662],{},[1426,85663],{"alt":71,"src":85664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[21,85666,85667],{},[1426,85668],{"alt":71,"src":85669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[46,85671,85673],{"id":85672},"_4134-对象原型","4.13.4 对象原型",[21,85675,85676],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[21,85678,85679],{},"对象原型就是__proto__这个属性",[21,85681,85682],{},[1426,85683],{"alt":71,"src":85684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[21,85686,85687],{},[1426,85688],{"alt":71,"src":85689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[21,85691,85692],{},[1426,85693],{"alt":71,"src":85694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[21,85696,85697],{},[1426,85698],{"alt":71,"src":85699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[66,85701,85703],{"className":53036,"code":85702,"language":53038,"meta":71,"style":71},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[73,85704,85705,85713,85721,85725,85729,85733,85738,85746],{"__ignoreMap":71},[76,85706,85707,85709,85711],{"class":78,"line":79},[76,85708,998],{"class":86},[76,85710,51769],{"class":51269},[76,85712,51276],{"class":86},[76,85714,85715,85717,85719],{"class":78,"line":96},[76,85716,52113],{"class":86},[76,85718,51782],{"class":51269},[76,85720,51276],{"class":86},[76,85722,85723],{"class":78,"line":1143},[76,85724,85345],{"class":86},[76,85726,85727],{"class":78,"line":1158},[76,85728,2151],{"class":86},[76,85730,85731],{"class":78,"line":1164},[76,85732,85354],{"class":86},[76,85734,85735],{"class":78,"line":1178},[76,85736,85737],{"class":86},"    console.log(ldh)\n",[76,85739,85740,85742,85744],{"class":78,"line":1184},[76,85741,52386],{"class":86},[76,85743,51782],{"class":51269},[76,85745,51276],{"class":86},[76,85747,85748,85750,85752],{"class":78,"line":1275},[76,85749,51754],{"class":86},[76,85751,51769],{"class":51269},[76,85753,51276],{"class":86},[21,85755,85756],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[21,85758,85759],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[21,85761,85762],{},[1426,85763],{"alt":71,"src":85764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[21,85766,85767],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[21,85769,85770],{},"对象原型指向原型对象",[21,85772,85773],{},[1426,85774],{"alt":71,"src":85775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[21,85777,85778],{},[1426,85779],{"alt":71,"src":85780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[21,85782,85783],{},[1426,85784],{"alt":71,"src":85785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[46,85787,85789],{"id":85788},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[21,85791,85792],{},[1426,85793],{"alt":71,"src":85794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[29,85796,85797,85800,85803,85806],{},[32,85798,85799],{},"构造函数通过new的形式实例化得到实例对象",[32,85801,85802],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[32,85804,85805],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[32,85807,85808],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[21,85810,85811],{},[1426,85812],{"alt":71,"src":85813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[21,85815,85816],{},"题目梳理：",[21,85818,85819],{},[1426,85820],{"alt":71,"src":85821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[46,85823,85825],{"id":85824},"_4136-原型继承","4.13.6 原型继承",[21,85827,85828],{},[1426,85829],{"alt":71,"src":85830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[21,85832,85833],{},[1426,85834],{"alt":71,"src":85835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[21,85837,85838],{},[1426,85839],{"alt":71,"src":85840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[21,85842,85843],{},[1426,85844],{"alt":71,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[21,85847,85848],{},[1426,85849],{"alt":71,"src":85850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[21,85852,85853],{},[1426,85854],{"alt":71,"src":85855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[21,85857,85858],{},[1426,85859],{"alt":71,"src":85860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[21,85862,85863],{},[1426,85864],{"alt":71,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[21,85867,85868],{},"回顾：构造函数每次new得到对象都是不同的",[46,85870,85872],{"id":85871},"_4137-原型链","4.13.7 原型链",[21,85874,85875],{},[1426,85876],{"alt":71,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[21,85879,85880],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[21,85882,85883],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[21,85885,85886],{},"大哥是Object",[21,85888,85889],{},[1426,85890],{"alt":71,"src":85891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[21,85893,85894],{},[1426,85895],{"alt":71,"src":85896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[21,85898,85899],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[21,85901,85902],{},"万物皆对象",[46,85904,85906],{"id":85905},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[21,85908,85909],{},"模态框",[21,85911,85912],{},"以后遇见这个效果直接使用这个就行",[21,85914,85915],{},[1426,85916],{"alt":71,"src":85917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[21,85919,85920],{},[1426,85921],{"alt":71,"src":85922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[21,85924,85925],{},[1426,85926],{"alt":71,"src":85927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[21,85929,85930],{},[1426,85931],{"alt":71,"src":85932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[21,85934,85935],{},"补充知识点：",[29,85937,85938],{},[32,85939,85940],{},"append()",[21,85942,85943],{},[1426,85944],{"alt":71,"src":85945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[66,85947,85949],{"className":50602,"code":85948,"language":50604,"meta":71,"style":71},"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",[73,85950,85951,85956,85961,85966,85970,85974,85978,85983,85988,85993,85997],{"__ignoreMap":71},[76,85952,85953],{"class":78,"line":79},[76,85954,85955],{"class":86},"append(param1)\n",[76,85957,85958],{"class":78,"line":96},[76,85959,85960],{"class":86},"append(param1, param2)\n",[76,85962,85963],{"class":78,"line":1143},[76,85964,85965],{"class":86},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[76,85967,85968],{"class":78,"line":1158},[76,85969,2365],{"emptyLinePlaceholder":2364},[76,85971,85972],{"class":78,"line":1164},[76,85973,2365],{"emptyLinePlaceholder":2364},[76,85975,85976],{"class":78,"line":1178},[76,85977,2365],{"emptyLinePlaceholder":2364},[76,85979,85980],{"class":78,"line":1184},[76,85981,85982],{"class":86},"let div = document.createElement(\"div\");\n",[76,85984,85985],{"class":78,"line":1275},[76,85986,85987],{"class":86},"let p = document.createElement(\"p\");\n",[76,85989,85990],{"class":78,"line":1281},[76,85991,85992],{"class":86},"div.append(p);\n",[76,85994,85995],{"class":78,"line":1293},[76,85996,2365],{"emptyLinePlaceholder":2364},[76,85998,85999,86002,86004],{"class":78,"line":1576},[76,86000,86001],{"class":86},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[76,86003,21],{"class":51269},[76,86005,86006],{"class":86},"> ]\n",[29,86008,86009],{"start":96},[32,86010,86011],{},"remove()",[21,86013,86014],{},"自己删自己",[21,86016,86017],{},[1426,86018],{"alt":71,"src":86019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[66,86021,86023],{"className":50602,"code":86022,"language":50604,"meta":71,"style":71},"\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",[73,86024,86025,86035,86049,86053,86061,86075,86095,86107,86115,86122,86134,86147,86182,86194,86205,86217,86229,86241,86268,86278,86282,86286,86295,86307,86321,86331,86343,86347,86351,86361,86372,86382,86392,86405,86418,86428,86432,86436,86445,86455,86467,86471,86475,86484,86494,86504,86516,86520,86524,86534,86550,86561,86571,86581,86593,86605,86617,86621,86625,86638,86649,86653,86661,86669,86673,86681,86701,86721,86729,86734,86760,86765,86770,86789,86794,86806,86811,86822,86832,86842,86847,86852,86856,86861,86866,86871,86891,86896,86916,86921,86935,86940,86945,86950,86966,86970,86975,87004,87009,87014,87019,87030,87034,87038,87042,87047,87072,87077,87102,87107,87116,87120,87125,87150,87154,87179,87183,87192,87196,87201,87219,87229,87233,87241,87249,87253],{"__ignoreMap":71},[76,86026,86027,86029,86031,86033],{"class":78,"line":79},[76,86028,51266],{"class":86},[76,86030,51270],{"class":51269},[76,86032,51273],{"class":1927},[76,86034,51276],{"class":86},[76,86036,86037,86039,86041,86043,86045,86047],{"class":78,"line":96},[76,86038,998],{"class":86},[76,86040,50604],{"class":51269},[76,86042,51285],{"class":1927},[76,86044,133],{"class":86},[76,86046,51290],{"class":192},[76,86048,51276],{"class":86},[76,86050,86051],{"class":78,"line":1143},[76,86052,2365],{"emptyLinePlaceholder":2364},[76,86054,86055,86057,86059],{"class":78,"line":1158},[76,86056,998],{"class":86},[76,86058,51303],{"class":51269},[76,86060,51276],{"class":86},[76,86062,86063,86065,86067,86069,86071,86073],{"class":78,"line":1164},[76,86064,52113],{"class":86},[76,86066,51313],{"class":51269},[76,86068,51316],{"class":1927},[76,86070,133],{"class":86},[76,86072,51321],{"class":192},[76,86074,51276],{"class":86},[76,86076,86077,86079,86081,86083,86085,86087,86089,86091,86093],{"class":78,"line":1178},[76,86078,52113],{"class":86},[76,86080,51313],{"class":51269},[76,86082,14887],{"class":1927},[76,86084,133],{"class":86},[76,86086,51360],{"class":192},[76,86088,51340],{"class":1927},[76,86090,133],{"class":86},[76,86092,51367],{"class":192},[76,86094,51276],{"class":86},[76,86096,86097,86099,86101,86103,86105],{"class":78,"line":1184},[76,86098,52113],{"class":86},[76,86100,51376],{"class":51269},[76,86102,51379],{"class":86},[76,86104,51376],{"class":51269},[76,86106,51276],{"class":86},[76,86108,86109,86111,86113],{"class":78,"line":1275},[76,86110,52113],{"class":86},[76,86112,5092],{"class":51269},[76,86114,51276],{"class":86},[76,86116,86117,86120],{"class":78,"line":1281},[76,86118,86119],{"class":1927},"    .modal",[76,86121,15539],{"class":86},[76,86123,86124,86126,86128,86130,86132],{"class":78,"line":1293},[76,86125,54740],{"class":136},[76,86127,51406],{"class":86},[76,86129,3938],{"class":136},[76,86131,51461],{"class":82},[76,86133,1254],{"class":86},[76,86135,86136,86139,86141,86143,86145],{"class":78,"line":1576},[76,86137,86138],{"class":136},"      min-height",[76,86140,51406],{"class":86},[76,86142,399],{"class":136},[76,86144,51461],{"class":82},[76,86146,1254],{"class":86},[76,86148,86149,86151,86153,86155,86157,86159,86161,86163,86165,86167,86169,86171,86173,86175,86177,86180],{"class":78,"line":1581},[76,86150,78719],{"class":136},[76,86152,51406],{"class":86},[76,86154,279],{"class":136},[76,86156,4058],{"class":136},[76,86158,2002],{"class":136},[76,86160,51461],{"class":82},[76,86162,78736],{"class":136},[76,86164,87],{"class":86},[76,86166,279],{"class":136},[76,86168,12402],{"class":86},[76,86170,279],{"class":136},[76,86172,12402],{"class":86},[76,86174,279],{"class":136},[76,86176,12402],{"class":86},[76,86178,86179],{"class":136},"0.1",[76,86181,2684],{"class":86},[76,86183,86184,86186,86188,86190,86192],{"class":78,"line":1587},[76,86185,55103],{"class":136},[76,86187,51406],{"class":86},[76,86189,381],{"class":136},[76,86191,51461],{"class":82},[76,86193,1254],{"class":86},[76,86195,86196,86198,86200,86203],{"class":78,"line":1592},[76,86197,54728],{"class":136},[76,86199,51406],{"class":86},[76,86201,86202],{"class":136},"fixed",[76,86204,1254],{"class":86},[76,86206,86207,86210,86212,86215],{"class":78,"line":1606},[76,86208,86209],{"class":136},"      z-index",[76,86211,51406],{"class":86},[76,86213,86214],{"class":136},"999",[76,86216,1254],{"class":86},[76,86218,86219,86221,86223,86225,86227],{"class":78,"line":1611},[76,86220,54807],{"class":136},[76,86222,51406],{"class":86},[76,86224,744],{"class":136},[76,86226,416],{"class":82},[76,86228,1254],{"class":86},[76,86230,86231,86233,86235,86237,86239],{"class":78,"line":1617},[76,86232,54916],{"class":136},[76,86234,51406],{"class":86},[76,86236,744],{"class":136},[76,86238,416],{"class":82},[76,86240,1254],{"class":86},[76,86242,86243,86245,86247,86249,86251,86254,86256,86258,86260,86262,86264,86266],{"class":78,"line":1638},[76,86244,78760],{"class":136},[76,86246,51406],{"class":86},[76,86248,78765],{"class":136},[76,86250,87],{"class":86},[76,86252,86253],{"class":136},"-50",[76,86255,416],{"class":82},[76,86257,12402],{"class":86},[76,86259,86253],{"class":136},[76,86261,416],{"class":82},[76,86263,12402],{"class":86},[76,86265,279],{"class":136},[76,86267,2684],{"class":86},[76,86269,86270,86272,86274,86276],{"class":78,"line":1643},[76,86271,54853],{"class":136},[76,86273,51406],{"class":86},[76,86275,60811],{"class":136},[76,86277,1254],{"class":86},[76,86279,86280],{"class":78,"line":1657},[76,86281,2151],{"class":86},[76,86283,86284],{"class":78,"line":1662},[76,86285,2365],{"emptyLinePlaceholder":2364},[76,86287,86288,86290,86293],{"class":78,"line":1691},[76,86289,86119],{"class":1927},[76,86291,86292],{"class":1927}," .header",[76,86294,15539],{"class":86},[76,86296,86297,86299,86301,86303,86305],{"class":78,"line":1696},[76,86298,57328],{"class":136},[76,86300,51406],{"class":86},[76,86302,489],{"class":136},[76,86304,51461],{"class":82},[76,86306,1254],{"class":86},[76,86308,86309,86311,86313,86315,86317,86319],{"class":78,"line":1713},[76,86310,54664],{"class":136},[76,86312,51406],{"class":86},[76,86314,279],{"class":136},[76,86316,2002],{"class":136},[76,86318,51461],{"class":82},[76,86320,1254],{"class":86},[76,86322,86323,86325,86327,86329],{"class":78,"line":1718},[76,86324,54728],{"class":136},[76,86326,51406],{"class":86},[76,86328,54733],{"class":136},[76,86330,1254],{"class":86},[76,86332,86333,86335,86337,86339,86341],{"class":78,"line":1723},[76,86334,54891],{"class":136},[76,86336,51406],{"class":86},[76,86338,788],{"class":136},[76,86340,51461],{"class":82},[76,86342,1254],{"class":86},[76,86344,86345],{"class":78,"line":1728},[76,86346,2151],{"class":86},[76,86348,86349],{"class":78,"line":1742},[76,86350,2365],{"emptyLinePlaceholder":2364},[76,86352,86353,86355,86357,86359],{"class":78,"line":1747},[76,86354,86119],{"class":1927},[76,86356,86292],{"class":1927},[76,86358,2997],{"class":51269},[76,86360,15539],{"class":86},[76,86362,86363,86366,86368,86370],{"class":78,"line":2542},[76,86364,86365],{"class":136},"      font-style",[76,86367,51406],{"class":86},[76,86369,63810],{"class":136},[76,86371,1254],{"class":86},[76,86373,86374,86376,86378,86380],{"class":78,"line":2556},[76,86375,57385],{"class":136},[76,86377,51406],{"class":86},[76,86379,62039],{"class":136},[76,86381,1254],{"class":86},[76,86383,86384,86386,86388,86390],{"class":78,"line":2564},[76,86385,54728],{"class":136},[76,86387,51406],{"class":86},[76,86389,54800],{"class":136},[76,86391,1254],{"class":86},[76,86393,86394,86397,86399,86401,86403],{"class":78,"line":2569},[76,86395,86396],{"class":136},"      right",[76,86398,51406],{"class":86},[76,86400,663],{"class":136},[76,86402,51461],{"class":82},[76,86404,1254],{"class":86},[76,86406,86407,86409,86411,86414,86416],{"class":78,"line":2575},[76,86408,54916],{"class":136},[76,86410,51406],{"class":86},[76,86412,86413],{"class":136},"-2",[76,86415,51461],{"class":82},[76,86417,1254],{"class":86},[76,86419,86420,86422,86424,86426],{"class":78,"line":2581},[76,86421,61994],{"class":136},[76,86423,51406],{"class":86},[76,86425,61999],{"class":136},[76,86427,1254],{"class":86},[76,86429,86430],{"class":78,"line":2586},[76,86431,2151],{"class":86},[76,86433,86434],{"class":78,"line":7915},[76,86435,2365],{"emptyLinePlaceholder":2364},[76,86437,86438,86440,86443],{"class":78,"line":7939},[76,86439,86119],{"class":1927},[76,86441,86442],{"class":1927}," .body",[76,86444,15539],{"class":86},[76,86446,86447,86449,86451,86453],{"class":78,"line":7944},[76,86448,57255],{"class":136},[76,86450,51406],{"class":86},[76,86452,51561],{"class":136},[76,86454,1254],{"class":86},[76,86456,86457,86459,86461,86463,86465],{"class":78,"line":7950},[76,86458,54664],{"class":136},[76,86460,51406],{"class":86},[76,86462,534],{"class":136},[76,86464,51461],{"class":82},[76,86466,1254],{"class":86},[76,86468,86469],{"class":78,"line":7977},[76,86470,2151],{"class":86},[76,86472,86473],{"class":78,"line":7982},[76,86474,2365],{"emptyLinePlaceholder":2364},[76,86476,86477,86479,86482],{"class":78,"line":7988},[76,86478,86119],{"class":1927},[76,86480,86481],{"class":1927}," .footer",[76,86483,15539],{"class":86},[76,86485,86486,86488,86490,86492],{"class":78,"line":8000},[76,86487,54978],{"class":136},[76,86489,51406],{"class":86},[76,86491,51446],{"class":136},[76,86493,1254],{"class":86},[76,86495,86496,86498,86500,86502],{"class":78,"line":8012},[76,86497,54989],{"class":136},[76,86499,51406],{"class":86},[76,86501,51549],{"class":136},[76,86503,1254],{"class":86},[76,86505,86506,86508,86510,86512,86514],{"class":78,"line":8024},[76,86507,54664],{"class":136},[76,86509,51406],{"class":86},[76,86511,534],{"class":136},[76,86513,51461],{"class":82},[76,86515,1254],{"class":86},[76,86517,86518],{"class":78,"line":9683},[76,86519,2151],{"class":86},[76,86521,86522],{"class":78,"line":9708},[76,86523,2365],{"emptyLinePlaceholder":2364},[76,86525,86526,86528,86530,86532],{"class":78,"line":9731},[76,86527,86119],{"class":1927},[76,86529,86481],{"class":1927},[76,86531,1362],{"class":51269},[76,86533,15539],{"class":86},[76,86535,86536,86538,86540,86542,86544,86546,86548],{"class":78,"line":9755},[76,86537,54664],{"class":136},[76,86539,51406],{"class":86},[76,86541,159],{"class":136},[76,86543,51461],{"class":82},[76,86545,2047],{"class":136},[76,86547,51461],{"class":82},[76,86549,1254],{"class":86},[76,86551,86552,86554,86556,86559],{"class":78,"line":9760},[76,86553,61690],{"class":136},[76,86555,51406],{"class":86},[76,86557,86558],{"class":136},"#ccc",[76,86560,1254],{"class":86},[76,86562,86563,86565,86567,86569],{"class":78,"line":9765},[76,86564,63939],{"class":136},[76,86566,51406],{"class":86},[76,86568,54706],{"class":136},[76,86570,1254],{"class":86},[76,86572,86573,86575,86577,86579],{"class":78,"line":9770},[76,86574,57385],{"class":136},[76,86576,51406],{"class":86},[76,86578,60811],{"class":136},[76,86580,1254],{"class":86},[76,86582,86583,86585,86587,86589,86591],{"class":78,"line":9779},[76,86584,55103],{"class":136},[76,86586,51406],{"class":86},[76,86588,165],{"class":136},[76,86590,51461],{"class":82},[76,86592,1254],{"class":86},[76,86594,86595,86597,86599,86601,86603],{"class":78,"line":9784},[76,86596,61719],{"class":136},[76,86598,51406],{"class":86},[76,86600,534],{"class":136},[76,86602,51461],{"class":82},[76,86604,1254],{"class":86},[76,86606,86607,86609,86611,86613,86615],{"class":78,"line":9790},[76,86608,54891],{"class":136},[76,86610,51406],{"class":86},[76,86612,637],{"class":136},[76,86614,51461],{"class":82},[76,86616,1254],{"class":86},[76,86618,86619],{"class":78,"line":9811},[76,86620,2151],{"class":86},[76,86622,86623],{"class":78,"line":9817},[76,86624,2365],{"emptyLinePlaceholder":2364},[76,86626,86627,86629,86631,86633,86636],{"class":78,"line":9831},[76,86628,86119],{"class":1927},[76,86630,86481],{"class":1927},[76,86632,1362],{"class":51269},[76,86634,86635],{"class":1927},".submit",[76,86637,15539],{"class":86},[76,86639,86640,86642,86644,86647],{"class":78,"line":9837},[76,86641,54853],{"class":136},[76,86643,51406],{"class":86},[76,86645,86646],{"class":136},"#369",[76,86648,1254],{"class":86},[76,86650,86651],{"class":78,"line":9864},[76,86652,2151],{"class":86},[76,86654,86655,86657,86659],{"class":78,"line":9873},[76,86656,52386],{"class":86},[76,86658,5092],{"class":51269},[76,86660,51276],{"class":86},[76,86662,86663,86665,86667],{"class":78,"line":9879},[76,86664,51754],{"class":86},[76,86666,51303],{"class":51269},[76,86668,51276],{"class":86},[76,86670,86671],{"class":78,"line":9887},[76,86672,2365],{"emptyLinePlaceholder":2364},[76,86674,86675,86677,86679],{"class":78,"line":9892},[76,86676,998],{"class":86},[76,86678,51769],{"class":51269},[76,86680,51276],{"class":86},[76,86682,86683,86685,86687,86689,86691,86694,86697,86699],{"class":78,"line":16571},[76,86684,52113],{"class":86},[76,86686,53856],{"class":51269},[76,86688,14926],{"class":1927},[76,86690,133],{"class":86},[76,86692,86693],{"class":192},"\"delete\"",[76,86695,86696],{"class":86},">删除\u003C\u002F",[76,86698,53856],{"class":51269},[76,86700,51276],{"class":86},[76,86702,86703,86705,86707,86709,86711,86714,86717,86719],{"class":78,"line":16577},[76,86704,52113],{"class":86},[76,86706,53856],{"class":51269},[76,86708,14926],{"class":1927},[76,86710,133],{"class":86},[76,86712,86713],{"class":192},"\"login\"",[76,86715,86716],{"class":86},">登录\u003C\u002F",[76,86718,53856],{"class":51269},[76,86720,51276],{"class":86},[76,86722,86723,86725,86727],{"class":78,"line":16600},[76,86724,52113],{"class":86},[76,86726,51782],{"class":51269},[76,86728,51276],{"class":86},[76,86730,86731],{"class":78,"line":16606},[76,86732,86733],{"class":146},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[76,86735,86736,86738,86741,86743,86745,86747,86749,86751,86754,86756,86758],{"class":78,"line":16629},[76,86737,70053],{"class":82},[76,86739,86740],{"class":1927}," Modal",[76,86742,87],{"class":86},[76,86744,51376],{"class":5183},[76,86746,13531],{"class":82},[76,86748,69899],{"class":192},[76,86750,12402],{"class":86},[76,86752,86753],{"class":5183},"message",[76,86755,13531],{"class":82},[76,86757,69899],{"class":192},[76,86759,12409],{"class":86},[76,86761,86762],{"class":78,"line":16643},[76,86763,86764],{"class":146},"      \u002F\u002F 创建Model 模态框盒子\n",[76,86766,86767],{"class":78,"line":16663},[76,86768,86769],{"class":146},"      \u002F\u002F 1.1 创建div标签\n",[76,86771,86772,86774,86777,86779,86781,86783,86785,86787],{"class":78,"line":16669},[76,86773,70020],{"class":136},[76,86775,86776],{"class":86},".modalBox ",[76,86778,133],{"class":82},[76,86780,54365],{"class":86},[76,86782,70120],{"class":1927},[76,86784,87],{"class":86},[76,86786,81900],{"class":192},[76,86788,93],{"class":86},[76,86790,86791],{"class":78,"line":16680},[76,86792,86793],{"class":146},"      \u002F\u002F 1.2 给div 添加类名为model\n",[76,86795,86796,86798,86801,86803],{"class":78,"line":16703},[76,86797,70020],{"class":136},[76,86799,86800],{"class":86},".modalBox.className ",[76,86802,133],{"class":82},[76,86804,86805],{"class":192}," 'modal'\n",[76,86807,86808],{"class":78,"line":16725},[76,86809,86810],{"class":146},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[76,86812,86813,86815,86818,86820],{"class":78,"line":16730},[76,86814,70020],{"class":136},[76,86816,86817],{"class":86},".modalBox.innerHTML ",[76,86819,133],{"class":82},[76,86821,70137],{"class":192},[76,86823,86824,86827,86829],{"class":78,"line":16736},[76,86825,86826],{"class":192},"        \u003Cdiv class=\"header\">${",[76,86828,51376],{"class":86},[76,86830,86831],{"class":192},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[76,86833,86834,86837,86839],{"class":78,"line":16750},[76,86835,86836],{"class":192},"        \u003Cdiv class=\"body\">${",[76,86838,86753],{"class":86},[76,86840,86841],{"class":192},"}\u003C\u002Fdiv>\n",[76,86843,86844],{"class":78,"line":16763},[76,86845,86846],{"class":192},"      `\n",[76,86848,86849],{"class":78,"line":16768},[76,86850,86851],{"class":146},"      \u002F\u002F console.log(this.modalBox)\n",[76,86853,86854],{"class":78,"line":16782},[76,86855,2151],{"class":86},[76,86857,86858],{"class":78,"line":16787},[76,86859,86860],{"class":146},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[76,86862,86863],{"class":78,"line":16793},[76,86864,86865],{"class":146},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[76,86867,86868],{"class":78,"line":16798},[76,86869,86870],{"class":146},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[76,86872,86873,86876,86878,86880,86882,86885,86887,86889],{"class":78,"line":16812},[76,86874,86875],{"class":136},"    Modal",[76,86877,646],{"class":86},[76,86879,85548],{"class":136},[76,86881,646],{"class":86},[76,86883,86884],{"class":1927},"open",[76,86886,13531],{"class":82},[76,86888,58887],{"class":82},[76,86890,54421],{"class":86},[76,86892,86893],{"class":78,"line":16817},[76,86894,86895],{"class":146},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[76,86897,86898,86900,86903,86905,86907,86909,86911,86914],{"class":78,"line":16822},[76,86899,58197],{"class":82},[76,86901,86902],{"class":136}," box",[76,86904,13531],{"class":82},[76,86906,54365],{"class":86},[76,86908,54368],{"class":1927},[76,86910,87],{"class":86},[76,86912,86913],{"class":192},"'.modal'",[76,86915,93],{"class":86},[76,86917,86918],{"class":78,"line":16836},[76,86919,86920],{"class":146},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[76,86922,86923,86926,86928,86931,86933],{"class":78,"line":16848},[76,86924,86925],{"class":86},"      box ",[76,86927,1679],{"class":82},[76,86929,86930],{"class":86}," box.",[76,86932,56975],{"class":1927},[76,86934,1940],{"class":86},[76,86936,86937],{"class":78,"line":16853},[76,86938,86939],{"class":146},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[76,86941,86942],{"class":78,"line":16866},[76,86943,86944],{"class":146},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[76,86946,86947],{"class":78,"line":16871},[76,86948,86949],{"class":146},"      \u002F\u002F append可以增加对象\n",[76,86951,86952,86955,86958,86960,86963],{"class":78,"line":16876},[76,86953,86954],{"class":86},"      document.body.",[76,86956,86957],{"class":1927},"append",[76,86959,87],{"class":86},[76,86961,86962],{"class":136},"this",[76,86964,86965],{"class":86},".modalBox)\n",[76,86967,86968],{"class":78,"line":16881},[76,86969,2365],{"emptyLinePlaceholder":2364},[76,86971,86972],{"class":78,"line":16894},[76,86973,86974],{"class":146},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[76,86976,86977,86979,86982,86984,86986,86989,86991,86993,86995,86997,87000,87002],{"class":78,"line":16899},[76,86978,70020],{"class":136},[76,86980,86981],{"class":86},".modalBox.",[76,86983,54368],{"class":1927},[76,86985,87],{"class":86},[76,86987,86988],{"class":192},"'i'",[76,86990,30795],{"class":86},[76,86992,57782],{"class":1927},[76,86994,87],{"class":86},[76,86996,57787],{"class":192},[76,86998,86999],{"class":86},", () ",[76,87001,84691],{"class":82},[76,87003,15539],{"class":86},[76,87005,87006],{"class":78,"line":32602},[76,87007,87008],{"class":146},"        \u002F\u002F 这个地方需要用到箭头函数\n",[76,87010,87011],{"class":78,"line":32608},[76,87012,87013],{"class":146},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[76,87015,87016],{"class":78,"line":32614},[76,87017,87018],{"class":146},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[76,87020,87021,87023,87025,87028],{"class":78,"line":32620},[76,87022,64695],{"class":136},[76,87024,646],{"class":86},[76,87026,87027],{"class":1927},"close",[76,87029,1940],{"class":86},[76,87031,87032],{"class":78,"line":32626},[76,87033,64784],{"class":86},[76,87035,87036],{"class":78,"line":32637},[76,87037,2151],{"class":86},[76,87039,87040],{"class":78,"line":32643},[76,87041,2365],{"emptyLinePlaceholder":2364},[76,87043,87044],{"class":78,"line":32663},[76,87045,87046],{"class":146},"    \u002F\u002F 测试一下 点击 删除按钮\n",[76,87048,87049,87051,87053,87055,87058,87060,87062,87064,87066,87068,87070],{"class":78,"line":32669},[76,87050,52376],{"class":86},[76,87052,54368],{"class":1927},[76,87054,87],{"class":86},[76,87056,87057],{"class":192},"'#delete'",[76,87059,30795],{"class":86},[76,87061,57782],{"class":1927},[76,87063,87],{"class":86},[76,87065,57787],{"class":192},[76,87067,86999],{"class":86},[76,87069,84691],{"class":82},[76,87071,15539],{"class":86},[76,87073,87074],{"class":78,"line":32680},[76,87075,87076],{"class":146},"      \u002F\u002F 先调用Model构造函数\n",[76,87078,87079,87081,87084,87086,87088,87090,87092,87095,87097,87100],{"class":78,"line":32686},[76,87080,58197],{"class":82},[76,87082,87083],{"class":136}," del",[76,87085,13531],{"class":82},[76,87087,11545],{"class":82},[76,87089,86740],{"class":1927},[76,87091,87],{"class":86},[76,87093,87094],{"class":192},"'温馨的提示'",[76,87096,12402],{"class":86},[76,87098,87099],{"class":192},"'您没有删除权限操作'",[76,87101,93],{"class":86},[76,87103,87104],{"class":78,"line":32692},[76,87105,87106],{"class":146},"      \u002F\u002F 实例对象调用open方法\n",[76,87108,87109,87112,87114],{"class":78,"line":32698},[76,87110,87111],{"class":86},"      del.",[76,87113,86884],{"class":1927},[76,87115,1940],{"class":86},[76,87117,87118],{"class":78,"line":32704},[76,87119,33430],{"class":86},[76,87121,87122],{"class":78,"line":32710},[76,87123,87124],{"class":146},"    \u002F\u002F 测试一下 点击 登录按钮\n",[76,87126,87127,87129,87131,87133,87136,87138,87140,87142,87144,87146,87148],{"class":78,"line":32716},[76,87128,52376],{"class":86},[76,87130,54368],{"class":1927},[76,87132,87],{"class":86},[76,87134,87135],{"class":192},"'#login'",[76,87137,30795],{"class":86},[76,87139,57782],{"class":1927},[76,87141,87],{"class":86},[76,87143,57787],{"class":192},[76,87145,86999],{"class":86},[76,87147,84691],{"class":82},[76,87149,15539],{"class":86},[76,87151,87152],{"class":78,"line":32722},[76,87153,87076],{"class":146},[76,87155,87156,87158,87161,87163,87165,87167,87169,87172,87174,87177],{"class":78,"line":32742},[76,87157,58197],{"class":82},[76,87159,87160],{"class":136}," log",[76,87162,13531],{"class":82},[76,87164,11545],{"class":82},[76,87166,86740],{"class":1927},[76,87168,87],{"class":86},[76,87170,87171],{"class":192},"'友情提示'",[76,87173,12402],{"class":86},[76,87175,87176],{"class":192},"'您还没有登录呢'",[76,87178,93],{"class":86},[76,87180,87181],{"class":78,"line":32748},[76,87182,87106],{"class":146},[76,87184,87185,87188,87190],{"class":78,"line":32764},[76,87186,87187],{"class":86},"      log.",[76,87189,86884],{"class":1927},[76,87191,1940],{"class":86},[76,87193,87194],{"class":78,"line":32770},[76,87195,33430],{"class":86},[76,87197,87198],{"class":78,"line":32784},[76,87199,87200],{"class":146},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[76,87202,87203,87205,87207,87209,87211,87213,87215,87217],{"class":78,"line":32790},[76,87204,86875],{"class":136},[76,87206,646],{"class":86},[76,87208,85548],{"class":136},[76,87210,646],{"class":86},[76,87212,87027],{"class":1927},[76,87214,13531],{"class":82},[76,87216,58887],{"class":82},[76,87218,54421],{"class":86},[76,87220,87221,87223,87225,87227],{"class":78,"line":32805},[76,87222,70020],{"class":136},[76,87224,86981],{"class":86},[76,87226,56975],{"class":1927},[76,87228,1940],{"class":86},[76,87230,87231],{"class":78,"line":32811},[76,87232,2151],{"class":86},[76,87234,87235,87237,87239],{"class":78,"line":32820},[76,87236,52386],{"class":86},[76,87238,51782],{"class":51269},[76,87240,51276],{"class":86},[76,87242,87243,87245,87247],{"class":78,"line":32826},[76,87244,51754],{"class":86},[76,87246,51769],{"class":51269},[76,87248,51276],{"class":86},[76,87250,87251],{"class":78,"line":32835},[76,87252,2365],{"emptyLinePlaceholder":2364},[76,87254,87255,87257,87259],{"class":78,"line":32841},[76,87256,51754],{"class":86},[76,87258,50604],{"class":51269},[76,87260,51276],{"class":86},[21,87262,87263],{},[1426,87264],{"alt":71,"src":87265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[16,87267,87269],{"id":87268},"_414-深浅拷贝","4.14 深浅拷贝",[46,87271,87273],{"id":87272},"_4141-浅拷贝","4.14.1 浅拷贝",[21,87275,87276],{},[1426,87277],{"alt":71,"src":87278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[21,87280,87281],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[21,87283,87284],{},[1426,87285],{"alt":71,"src":87286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[21,87288,87289],{},[1426,87290],{"alt":71,"src":87291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[21,87293,87294],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[21,87296,87297],{},[1426,87298],{"alt":71,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[21,87301,11299],{},[21,87303,87304],{},[1426,87305],{"alt":71,"src":87306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[46,87308,87310],{"id":87309},"_4142-深拷贝","4.14.2 深拷贝",[21,87312,87313],{},"深拷贝：拷贝的是对象，不是地址",[21,87315,87316],{},"常用的三种方法：",[29,87318,87319,87322,87325],{},[32,87320,87321],{},"通过递归实现深拷贝",[32,87323,87324],{},"lodash\u002FcloneDeep",[32,87326,87327],{},"通过JSON.stringify()实现",[21965,87329,87331],{"id":87330},"_41421-递归函数","4.14.2.1 递归函数",[21,87333,87334],{},[1426,87335],{"alt":71,"src":87336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[29,87338,87339],{},[32,87340,87341],{},"死递归占溢出：",[66,87343,87345],{"className":53036,"code":87344,"language":53038,"meta":71,"style":71},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[73,87346,87347,87355,87363,87367,87372,87376,87381,87389],{"__ignoreMap":71},[76,87348,87349,87351,87353],{"class":78,"line":79},[76,87350,998],{"class":86},[76,87352,51769],{"class":51269},[76,87354,51276],{"class":86},[76,87356,87357,87359,87361],{"class":78,"line":96},[76,87358,52113],{"class":86},[76,87360,51782],{"class":51269},[76,87362,51276],{"class":86},[76,87364,87365],{"class":78,"line":1143},[76,87366,77112],{"class":86},[76,87368,87369],{"class":78,"line":1158},[76,87370,87371],{"class":86},"      fn()\n",[76,87373,87374],{"class":78,"line":1164},[76,87375,2151],{"class":86},[76,87377,87378],{"class":78,"line":1178},[76,87379,87380],{"class":86},"    fn()\n",[76,87382,87383,87385,87387],{"class":78,"line":1184},[76,87384,52386],{"class":86},[76,87386,51782],{"class":51269},[76,87388,51276],{"class":86},[76,87390,87391,87393,87395],{"class":78,"line":1275},[76,87392,51754],{"class":86},[76,87394,51769],{"class":51269},[76,87396,51276],{"class":86},[29,87398,87399],{"start":96},[32,87400,87401],{},"递归函数要加判断条件：",[21,87403,87404],{},[1426,87405],{"alt":71,"src":87406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[29,87408,87409],{"start":1143},[32,87410,87411],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[66,87413,87415],{"className":50602,"code":87414,"language":50604,"meta":71,"style":71},"\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",[73,87416,87417,87427,87441,87445,87453,87467,87487,87499,87507,87511,87519,87531,87539,87547,87572,87584,87588,87595,87603,87611,87615],{"__ignoreMap":71},[76,87418,87419,87421,87423,87425],{"class":78,"line":79},[76,87420,51266],{"class":86},[76,87422,51270],{"class":51269},[76,87424,51273],{"class":1927},[76,87426,51276],{"class":86},[76,87428,87429,87431,87433,87435,87437,87439],{"class":78,"line":96},[76,87430,998],{"class":86},[76,87432,50604],{"class":51269},[76,87434,51285],{"class":1927},[76,87436,133],{"class":86},[76,87438,51290],{"class":192},[76,87440,51276],{"class":86},[76,87442,87443],{"class":78,"line":1143},[76,87444,2365],{"emptyLinePlaceholder":2364},[76,87446,87447,87449,87451],{"class":78,"line":1158},[76,87448,998],{"class":86},[76,87450,51303],{"class":51269},[76,87452,51276],{"class":86},[76,87454,87455,87457,87459,87461,87463,87465],{"class":78,"line":1164},[76,87456,52113],{"class":86},[76,87458,51313],{"class":51269},[76,87460,51316],{"class":1927},[76,87462,133],{"class":86},[76,87464,51321],{"class":192},[76,87466,51276],{"class":86},[76,87468,87469,87471,87473,87475,87477,87479,87481,87483,87485],{"class":78,"line":1178},[76,87470,52113],{"class":86},[76,87472,51313],{"class":51269},[76,87474,14887],{"class":1927},[76,87476,133],{"class":86},[76,87478,51360],{"class":192},[76,87480,51340],{"class":1927},[76,87482,133],{"class":86},[76,87484,51367],{"class":192},[76,87486,51276],{"class":86},[76,87488,87489,87491,87493,87495,87497],{"class":78,"line":1184},[76,87490,52113],{"class":86},[76,87492,51376],{"class":51269},[76,87494,51379],{"class":86},[76,87496,51376],{"class":51269},[76,87498,51276],{"class":86},[76,87500,87501,87503,87505],{"class":78,"line":1275},[76,87502,51754],{"class":86},[76,87504,51303],{"class":51269},[76,87506,51276],{"class":86},[76,87508,87509],{"class":78,"line":1281},[76,87510,2365],{"emptyLinePlaceholder":2364},[76,87512,87513,87515,87517],{"class":78,"line":1293},[76,87514,998],{"class":86},[76,87516,51769],{"class":51269},[76,87518,51276],{"class":86},[76,87520,87521,87523,87525,87527,87529],{"class":78,"line":1576},[76,87522,52113],{"class":86},[76,87524,51580],{"class":51269},[76,87526,55283],{"class":86},[76,87528,51580],{"class":51269},[76,87530,51276],{"class":86},[76,87532,87533,87535,87537],{"class":78,"line":1581},[76,87534,52113],{"class":86},[76,87536,51782],{"class":51269},[76,87538,51276],{"class":86},[76,87540,87541,87543,87545],{"class":78,"line":1587},[76,87542,70053],{"class":82},[76,87544,73742],{"class":1927},[76,87546,10820],{"class":86},[76,87548,87549,87551,87553,87555,87557,87559,87561,87563,87565,87567,87570],{"class":78,"line":1592},[76,87550,55740],{"class":86},[76,87552,54368],{"class":1927},[76,87554,87],{"class":86},[76,87556,81900],{"class":192},[76,87558,74218],{"class":86},[76,87560,133],{"class":82},[76,87562,11545],{"class":82},[76,87564,73758],{"class":1927},[76,87566,17228],{"class":86},[76,87568,87569],{"class":1927},"toLocaleString",[76,87571,1940],{"class":86},[76,87573,87574,87577,87580,87582],{"class":78,"line":1606},[76,87575,87576],{"class":1927},"      setTimeout",[76,87578,87579],{"class":86},"(getTime, ",[76,87581,6377],{"class":136},[76,87583,93],{"class":86},[76,87585,87586],{"class":78,"line":1611},[76,87587,2151],{"class":86},[76,87589,87590,87593],{"class":78,"line":1617},[76,87591,87592],{"class":1927},"    getTime",[76,87594,1940],{"class":86},[76,87596,87597,87599,87601],{"class":78,"line":1638},[76,87598,52386],{"class":86},[76,87600,51782],{"class":51269},[76,87602,51276],{"class":86},[76,87604,87605,87607,87609],{"class":78,"line":1643},[76,87606,51754],{"class":86},[76,87608,51769],{"class":51269},[76,87610,51276],{"class":86},[76,87612,87613],{"class":78,"line":1657},[76,87614,2365],{"emptyLinePlaceholder":2364},[76,87616,87617,87619,87621],{"class":78,"line":1662},[76,87618,51754],{"class":86},[76,87620,50604],{"class":51269},[76,87622,51276],{"class":86},[21,87624,87625],{},[1426,87626],{"alt":71,"src":87627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[29,87629,87630],{"start":1158},[32,87631,87321],{},[21,87633,87634],{},[1426,87635],{"alt":71,"src":87636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[21,87638,87639],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[21,87641,39158],{},[21,87643,87644],{},"这个是简易版的递归函数深拷贝",[21,87646,87647],{},"一定要注意先数组再对象，因为万物皆可对象",[66,87649,87651],{"className":50602,"code":87650,"language":50604,"meta":71,"style":71},"\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",[73,87652,87653,87663,87677,87681,87689,87703,87723,87735,87743,87747,87755,87763,87773,87782,87790,87806,87810,87818,87822,87826,87838,87843,87862,87878,87883,87888,87893,87908,87913,87918,87927,87935,87952,87960,87966,87974,87979,87984,87993,87997,88001,88005,88016,88025,88035,88049,88059,88067,88075,88083,88087],{"__ignoreMap":71},[76,87654,87655,87657,87659,87661],{"class":78,"line":79},[76,87656,51266],{"class":86},[76,87658,51270],{"class":51269},[76,87660,51273],{"class":1927},[76,87662,51276],{"class":86},[76,87664,87665,87667,87669,87671,87673,87675],{"class":78,"line":96},[76,87666,998],{"class":86},[76,87668,50604],{"class":51269},[76,87670,51285],{"class":1927},[76,87672,133],{"class":86},[76,87674,51290],{"class":192},[76,87676,51276],{"class":86},[76,87678,87679],{"class":78,"line":1143},[76,87680,2365],{"emptyLinePlaceholder":2364},[76,87682,87683,87685,87687],{"class":78,"line":1158},[76,87684,998],{"class":86},[76,87686,51303],{"class":51269},[76,87688,51276],{"class":86},[76,87690,87691,87693,87695,87697,87699,87701],{"class":78,"line":1164},[76,87692,52113],{"class":86},[76,87694,51313],{"class":51269},[76,87696,51316],{"class":1927},[76,87698,133],{"class":86},[76,87700,51321],{"class":192},[76,87702,51276],{"class":86},[76,87704,87705,87707,87709,87711,87713,87715,87717,87719,87721],{"class":78,"line":1178},[76,87706,52113],{"class":86},[76,87708,51313],{"class":51269},[76,87710,14887],{"class":1927},[76,87712,133],{"class":86},[76,87714,51360],{"class":192},[76,87716,51340],{"class":1927},[76,87718,133],{"class":86},[76,87720,51367],{"class":192},[76,87722,51276],{"class":86},[76,87724,87725,87727,87729,87731,87733],{"class":78,"line":1184},[76,87726,52113],{"class":86},[76,87728,51376],{"class":51269},[76,87730,51379],{"class":86},[76,87732,51376],{"class":51269},[76,87734,51276],{"class":86},[76,87736,87737,87739,87741],{"class":78,"line":1275},[76,87738,51754],{"class":86},[76,87740,51303],{"class":51269},[76,87742,51276],{"class":86},[76,87744,87745],{"class":78,"line":1281},[76,87746,2365],{"emptyLinePlaceholder":2364},[76,87748,87749,87751,87753],{"class":78,"line":1293},[76,87750,998],{"class":86},[76,87752,51769],{"class":51269},[76,87754,51276],{"class":86},[76,87756,87757,87759,87761],{"class":78,"line":1576},[76,87758,52113],{"class":86},[76,87760,51782],{"class":51269},[76,87762,51276],{"class":86},[76,87764,87765,87767,87769,87771],{"class":78,"line":1581},[76,87766,11188],{"class":82},[76,87768,69940],{"class":136},[76,87770,13531],{"class":82},[76,87772,15539],{"class":86},[76,87774,87775,87777,87780],{"class":78,"line":1587},[76,87776,71585],{"class":86},[76,87778,87779],{"class":192},"'pink'",[76,87781,31435],{"class":86},[76,87783,87784,87786,87788],{"class":78,"line":1592},[76,87785,71595],{"class":86},[76,87787,738],{"class":136},[76,87789,31435],{"class":86},[76,87791,87792,87795,87798,87800,87803],{"class":78,"line":1606},[76,87793,87794],{"class":86},"      hobby: [",[76,87796,87797],{"class":192},"'乒乓球'",[76,87799,12402],{"class":86},[76,87801,87802],{"class":192},"'足球'",[76,87804,87805],{"class":86},"],\n",[76,87807,87808],{"class":78,"line":1611},[76,87809,77841],{"class":86},[76,87811,87812,87815],{"class":78,"line":1617},[76,87813,87814],{"class":86},"        baby: ",[76,87816,87817],{"class":192},"'小pink'\n",[76,87819,87820],{"class":78,"line":1638},[76,87821,52367],{"class":86},[76,87823,87824],{"class":78,"line":1643},[76,87825,2151],{"class":86},[76,87827,87828,87830,87833,87835],{"class":78,"line":1657},[76,87829,11188],{"class":82},[76,87831,87832],{"class":136}," o",[76,87834,13531],{"class":82},[76,87836,87837],{"class":86}," {}\n",[76,87839,87840],{"class":78,"line":1662},[76,87841,87842],{"class":146},"    \u002F\u002F 拷贝函数\n",[76,87844,87845,87847,87850,87852,87855,87857,87860],{"class":78,"line":1691},[76,87846,70053],{"class":82},[76,87848,87849],{"class":1927}," deepCopy",[76,87851,87],{"class":86},[76,87853,87854],{"class":5183},"newObj",[76,87856,12402],{"class":86},[76,87858,87859],{"class":5183},"oldObj",[76,87861,12409],{"class":86},[76,87863,87864,87866,87868,87870,87873,87875],{"class":78,"line":1696},[76,87865,52253],{"class":82},[76,87867,1622],{"class":86},[76,87869,51816],{"class":82},[76,87871,87872],{"class":86}," k ",[76,87874,26012],{"class":82},[76,87876,87877],{"class":86}," oldObj) {\n",[76,87879,87880],{"class":78,"line":1713},[76,87881,87882],{"class":146},"        \u002F\u002F 处理数组的问题\n",[76,87884,87885],{"class":78,"line":1718},[76,87886,87887],{"class":146},"        \u002F\u002F 判断是否属于数组\n",[76,87889,87890],{"class":78,"line":1723},[76,87891,87892],{"class":146},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[76,87894,87895,87897,87900,87903,87906],{"class":78,"line":1728},[76,87896,2462],{"class":82},[76,87898,87899],{"class":86}," (oldObj[k] ",[76,87901,87902],{"class":82},"instanceof",[76,87904,87905],{"class":1927}," Array",[76,87907,12409],{"class":86},[76,87909,87910],{"class":78,"line":1742},[76,87911,87912],{"class":146},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[76,87914,87915],{"class":78,"line":1747},[76,87916,87917],{"class":146},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[76,87919,87920,87923,87925],{"class":78,"line":2542},[76,87921,87922],{"class":86},"          newObj[k] ",[76,87924,133],{"class":82},[76,87926,51807],{"class":86},[76,87928,87929,87932],{"class":78,"line":2556},[76,87930,87931],{"class":1927},"          deepCopy",[76,87933,87934],{"class":86},"(newObj[k], oldObj[k])\n",[76,87936,87937,87939,87941,87943,87945,87947,87950],{"class":78,"line":2564},[76,87938,80049],{"class":86},[76,87940,1665],{"class":82},[76,87942,1668],{"class":82},[76,87944,87899],{"class":86},[76,87946,87902],{"class":82},[76,87948,87949],{"class":1927}," Object",[76,87951,12409],{"class":86},[76,87953,87954,87956,87958],{"class":78,"line":2569},[76,87955,87922],{"class":86},[76,87957,133],{"class":82},[76,87959,87837],{"class":86},[76,87961,87962,87964],{"class":78,"line":2575},[76,87963,87931],{"class":1927},[76,87965,87934],{"class":86},[76,87967,87968,87970,87972],{"class":78,"line":2581},[76,87969,80049],{"class":86},[76,87971,1665],{"class":82},[76,87973,15539],{"class":86},[76,87975,87976],{"class":78,"line":2586},[76,87977,87978],{"class":146},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[76,87980,87981],{"class":78,"line":7915},[76,87982,87983],{"class":146},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[76,87985,87986,87988,87990],{"class":78,"line":7939},[76,87987,87922],{"class":86},[76,87989,133],{"class":82},[76,87991,87992],{"class":86}," oldObj[k]\n",[76,87994,87995],{"class":78,"line":7944},[76,87996,2494],{"class":86},[76,87998,87999],{"class":78,"line":7950},[76,88000,52367],{"class":86},[76,88002,88003],{"class":78,"line":7977},[76,88004,2151],{"class":86},[76,88006,88007,88010,88013],{"class":78,"line":7982},[76,88008,88009],{"class":1927},"    deepCopy",[76,88011,88012],{"class":86},"(o, obj) ",[76,88014,88015],{"class":146},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[76,88017,88018,88020,88022],{"class":78,"line":7988},[76,88019,73722],{"class":86},[76,88021,58216],{"class":1927},[76,88023,88024],{"class":86},"(o)\n",[76,88026,88027,88030,88032],{"class":78,"line":8000},[76,88028,88029],{"class":86},"    o.age ",[76,88031,133],{"class":82},[76,88033,88034],{"class":136}," 20\n",[76,88036,88037,88040,88042,88044,88046],{"class":78,"line":8012},[76,88038,88039],{"class":86},"    o.hobby[",[76,88041,279],{"class":136},[76,88043,4408],{"class":86},[76,88045,133],{"class":82},[76,88047,88048],{"class":192}," '篮球'\n",[76,88050,88051,88054,88056],{"class":78,"line":8024},[76,88052,88053],{"class":86},"    o.family ",[76,88055,133],{"class":82},[76,88057,88058],{"class":192}," '老pink'\n",[76,88060,88061,88063,88065],{"class":78,"line":9683},[76,88062,73722],{"class":86},[76,88064,58216],{"class":1927},[76,88066,70005],{"class":86},[76,88068,88069,88071,88073],{"class":78,"line":9708},[76,88070,52386],{"class":86},[76,88072,51782],{"class":51269},[76,88074,51276],{"class":86},[76,88076,88077,88079,88081],{"class":78,"line":9731},[76,88078,51754],{"class":86},[76,88080,51769],{"class":51269},[76,88082,51276],{"class":86},[76,88084,88085],{"class":78,"line":9755},[76,88086,2365],{"emptyLinePlaceholder":2364},[76,88088,88089,88091,88093],{"class":78,"line":9760},[76,88090,51754],{"class":86},[76,88092,50604],{"class":51269},[76,88094,51276],{"class":86},[21,88096,88097],{},[1426,88098],{"alt":71,"src":88099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21965,88101,88103,88104],{"id":88102},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[237,88105,88106],{},"js库lodash里面cloneDeep内部实现了深拷贝",[21,88108,88109],{},[326,88110,88111],{"href":88111,"rel":88112},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23833],[21,88114,88115],{},"lodash里边的方法都要加上一个下划线_",[21,88117,88118],{},"_.cloneDeep()",[66,88120,88122],{"className":50602,"code":88121,"language":50604,"meta":71,"style":71},"\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",[73,88123,88124,88134,88148,88152,88160,88174,88194,88206,88214,88218,88226,88231,88250,88258,88268,88276,88284,88296,88300,88306,88310,88314,88330,88338,88347,88355,88363,88371,88375],{"__ignoreMap":71},[76,88125,88126,88128,88130,88132],{"class":78,"line":79},[76,88127,51266],{"class":86},[76,88129,51270],{"class":51269},[76,88131,51273],{"class":1927},[76,88133,51276],{"class":86},[76,88135,88136,88138,88140,88142,88144,88146],{"class":78,"line":96},[76,88137,998],{"class":86},[76,88139,50604],{"class":51269},[76,88141,51285],{"class":1927},[76,88143,133],{"class":86},[76,88145,51290],{"class":192},[76,88147,51276],{"class":86},[76,88149,88150],{"class":78,"line":1143},[76,88151,2365],{"emptyLinePlaceholder":2364},[76,88153,88154,88156,88158],{"class":78,"line":1158},[76,88155,998],{"class":86},[76,88157,51303],{"class":51269},[76,88159,51276],{"class":86},[76,88161,88162,88164,88166,88168,88170,88172],{"class":78,"line":1164},[76,88163,52113],{"class":86},[76,88165,51313],{"class":51269},[76,88167,51316],{"class":1927},[76,88169,133],{"class":86},[76,88171,51321],{"class":192},[76,88173,51276],{"class":86},[76,88175,88176,88178,88180,88182,88184,88186,88188,88190,88192],{"class":78,"line":1178},[76,88177,52113],{"class":86},[76,88179,51313],{"class":51269},[76,88181,14887],{"class":1927},[76,88183,133],{"class":86},[76,88185,51360],{"class":192},[76,88187,51340],{"class":1927},[76,88189,133],{"class":86},[76,88191,51367],{"class":192},[76,88193,51276],{"class":86},[76,88195,88196,88198,88200,88202,88204],{"class":78,"line":1184},[76,88197,52113],{"class":86},[76,88199,51376],{"class":51269},[76,88201,51379],{"class":86},[76,88203,51376],{"class":51269},[76,88205,51276],{"class":86},[76,88207,88208,88210,88212],{"class":78,"line":1275},[76,88209,51754],{"class":86},[76,88211,51303],{"class":51269},[76,88213,51276],{"class":86},[76,88215,88216],{"class":78,"line":1281},[76,88217,2365],{"emptyLinePlaceholder":2364},[76,88219,88220,88222,88224],{"class":78,"line":1293},[76,88221,998],{"class":86},[76,88223,51769],{"class":51269},[76,88225,51276],{"class":86},[76,88227,88228],{"class":78,"line":1576},[76,88229,88230],{"class":146},"  \u003C!-- 先引用这个库 -->\n",[76,88232,88233,88235,88237,88239,88241,88244,88246,88248],{"class":78,"line":1581},[76,88234,52113],{"class":86},[76,88236,51782],{"class":51269},[76,88238,55208],{"class":1927},[76,88240,133],{"class":86},[76,88242,88243],{"class":192},"\"lodash.min.js\"",[76,88245,55283],{"class":86},[76,88247,51782],{"class":51269},[76,88249,51276],{"class":86},[76,88251,88252,88254,88256],{"class":78,"line":1587},[76,88253,52113],{"class":86},[76,88255,51782],{"class":51269},[76,88257,51276],{"class":86},[76,88259,88260,88262,88264,88266],{"class":78,"line":1592},[76,88261,11188],{"class":82},[76,88263,69940],{"class":136},[76,88265,13531],{"class":82},[76,88267,15539],{"class":86},[76,88269,88270,88272,88274],{"class":78,"line":1606},[76,88271,71585],{"class":86},[76,88273,87779],{"class":192},[76,88275,31435],{"class":86},[76,88277,88278,88280,88282],{"class":78,"line":1611},[76,88279,71595],{"class":86},[76,88281,738],{"class":136},[76,88283,31435],{"class":86},[76,88285,88286,88288,88290,88292,88294],{"class":78,"line":1617},[76,88287,87794],{"class":86},[76,88289,87797],{"class":192},[76,88291,12402],{"class":86},[76,88293,87802],{"class":192},[76,88295,87805],{"class":86},[76,88297,88298],{"class":78,"line":1638},[76,88299,77841],{"class":86},[76,88301,88302,88304],{"class":78,"line":1643},[76,88303,87814],{"class":86},[76,88305,87817],{"class":192},[76,88307,88308],{"class":78,"line":1657},[76,88309,52367],{"class":86},[76,88311,88312],{"class":78,"line":1662},[76,88313,2151],{"class":86},[76,88315,88316,88318,88320,88322,88325,88328],{"class":78,"line":1691},[76,88317,11188],{"class":82},[76,88319,87832],{"class":136},[76,88321,13531],{"class":82},[76,88323,88324],{"class":86}," _.",[76,88326,88327],{"class":1927},"cloneDeep",[76,88329,70005],{"class":86},[76,88331,88332,88334,88336],{"class":78,"line":1696},[76,88333,73722],{"class":86},[76,88335,58216],{"class":1927},[76,88337,88024],{"class":86},[76,88339,88340,88343,88345],{"class":78,"line":1713},[76,88341,88342],{"class":86},"    o.family.baby ",[76,88344,133],{"class":82},[76,88346,88058],{"class":192},[76,88348,88349,88351,88353],{"class":78,"line":1718},[76,88350,73722],{"class":86},[76,88352,58216],{"class":1927},[76,88354,70005],{"class":86},[76,88356,88357,88359,88361],{"class":78,"line":1723},[76,88358,52386],{"class":86},[76,88360,51782],{"class":51269},[76,88362,51276],{"class":86},[76,88364,88365,88367,88369],{"class":78,"line":1728},[76,88366,51754],{"class":86},[76,88368,51769],{"class":51269},[76,88370,51276],{"class":86},[76,88372,88373],{"class":78,"line":1742},[76,88374,2365],{"emptyLinePlaceholder":2364},[76,88376,88377,88379,88381],{"class":78,"line":1747},[76,88378,51754],{"class":86},[76,88380,50604],{"class":51269},[76,88382,51276],{"class":86},[21,88384,88385],{},[1426,88386],{"alt":71,"src":88387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21965,88389,88391],{"id":88390},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[66,88393,88395],{"className":50602,"code":88394,"language":50604,"meta":71,"style":71},"\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",[73,88396,88397,88407,88421,88425,88433,88447,88467,88479,88487,88491,88499,88507,88517,88525,88533,88545,88549,88555,88559,88563,88568,88573,88578,88604,88612,88621,88629,88637,88645,88649],{"__ignoreMap":71},[76,88398,88399,88401,88403,88405],{"class":78,"line":79},[76,88400,51266],{"class":86},[76,88402,51270],{"class":51269},[76,88404,51273],{"class":1927},[76,88406,51276],{"class":86},[76,88408,88409,88411,88413,88415,88417,88419],{"class":78,"line":96},[76,88410,998],{"class":86},[76,88412,50604],{"class":51269},[76,88414,51285],{"class":1927},[76,88416,133],{"class":86},[76,88418,51290],{"class":192},[76,88420,51276],{"class":86},[76,88422,88423],{"class":78,"line":1143},[76,88424,2365],{"emptyLinePlaceholder":2364},[76,88426,88427,88429,88431],{"class":78,"line":1158},[76,88428,998],{"class":86},[76,88430,51303],{"class":51269},[76,88432,51276],{"class":86},[76,88434,88435,88437,88439,88441,88443,88445],{"class":78,"line":1164},[76,88436,52113],{"class":86},[76,88438,51313],{"class":51269},[76,88440,51316],{"class":1927},[76,88442,133],{"class":86},[76,88444,51321],{"class":192},[76,88446,51276],{"class":86},[76,88448,88449,88451,88453,88455,88457,88459,88461,88463,88465],{"class":78,"line":1178},[76,88450,52113],{"class":86},[76,88452,51313],{"class":51269},[76,88454,14887],{"class":1927},[76,88456,133],{"class":86},[76,88458,51360],{"class":192},[76,88460,51340],{"class":1927},[76,88462,133],{"class":86},[76,88464,51367],{"class":192},[76,88466,51276],{"class":86},[76,88468,88469,88471,88473,88475,88477],{"class":78,"line":1184},[76,88470,52113],{"class":86},[76,88472,51376],{"class":51269},[76,88474,51379],{"class":86},[76,88476,51376],{"class":51269},[76,88478,51276],{"class":86},[76,88480,88481,88483,88485],{"class":78,"line":1275},[76,88482,51754],{"class":86},[76,88484,51303],{"class":51269},[76,88486,51276],{"class":86},[76,88488,88489],{"class":78,"line":1281},[76,88490,2365],{"emptyLinePlaceholder":2364},[76,88492,88493,88495,88497],{"class":78,"line":1293},[76,88494,998],{"class":86},[76,88496,51769],{"class":51269},[76,88498,51276],{"class":86},[76,88500,88501,88503,88505],{"class":78,"line":1576},[76,88502,52113],{"class":86},[76,88504,51782],{"class":51269},[76,88506,51276],{"class":86},[76,88508,88509,88511,88513,88515],{"class":78,"line":1581},[76,88510,11188],{"class":82},[76,88512,69940],{"class":136},[76,88514,13531],{"class":82},[76,88516,15539],{"class":86},[76,88518,88519,88521,88523],{"class":78,"line":1587},[76,88520,71585],{"class":86},[76,88522,87779],{"class":192},[76,88524,31435],{"class":86},[76,88526,88527,88529,88531],{"class":78,"line":1592},[76,88528,71595],{"class":86},[76,88530,738],{"class":136},[76,88532,31435],{"class":86},[76,88534,88535,88537,88539,88541,88543],{"class":78,"line":1606},[76,88536,87794],{"class":86},[76,88538,87797],{"class":192},[76,88540,12402],{"class":86},[76,88542,87802],{"class":192},[76,88544,87805],{"class":86},[76,88546,88547],{"class":78,"line":1611},[76,88548,77841],{"class":86},[76,88550,88551,88553],{"class":78,"line":1617},[76,88552,87814],{"class":86},[76,88554,87817],{"class":192},[76,88556,88557],{"class":78,"line":1638},[76,88558,52367],{"class":86},[76,88560,88561],{"class":78,"line":1643},[76,88562,2151],{"class":86},[76,88564,88565],{"class":78,"line":1657},[76,88566,88567],{"class":146},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[76,88569,88570],{"class":78,"line":1662},[76,88571,88572],{"class":146},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[76,88574,88575],{"class":78,"line":1691},[76,88576,88577],{"class":146},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[76,88579,88580,88582,88584,88586,88589,88591,88594,88596,88598,88600,88602],{"class":78,"line":1696},[76,88581,11188],{"class":82},[76,88583,87832],{"class":136},[76,88585,13531],{"class":82},[76,88587,88588],{"class":136}," JSON",[76,88590,646],{"class":86},[76,88592,88593],{"class":1927},"parse",[76,88595,87],{"class":86},[76,88597,71633],{"class":136},[76,88599,646],{"class":86},[76,88601,71638],{"class":1927},[76,88603,71641],{"class":86},[76,88605,88606,88608,88610],{"class":78,"line":1713},[76,88607,73722],{"class":86},[76,88609,58216],{"class":1927},[76,88611,88024],{"class":86},[76,88613,88614,88616,88618],{"class":78,"line":1718},[76,88615,88342],{"class":86},[76,88617,133],{"class":82},[76,88619,88620],{"class":192}," '123'\n",[76,88622,88623,88625,88627],{"class":78,"line":1723},[76,88624,73722],{"class":86},[76,88626,58216],{"class":1927},[76,88628,70005],{"class":86},[76,88630,88631,88633,88635],{"class":78,"line":1728},[76,88632,52386],{"class":86},[76,88634,51782],{"class":51269},[76,88636,51276],{"class":86},[76,88638,88639,88641,88643],{"class":78,"line":1742},[76,88640,51754],{"class":86},[76,88642,51769],{"class":51269},[76,88644,51276],{"class":86},[76,88646,88647],{"class":78,"line":1747},[76,88648,2365],{"emptyLinePlaceholder":2364},[76,88650,88651,88653,88655],{"class":78,"line":2542},[76,88652,51754],{"class":86},[76,88654,50604],{"class":51269},[76,88656,51276],{"class":86},[21,88658,88659],{},[1426,88660],{"alt":71,"src":88661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[16,88663,88665],{"id":88664},"_415-异常处理","4.15 异常处理",[29,88667,88668],{},[32,88669,88670],{},"throw抛异常",[21,88672,88673],{},[1426,88674],{"alt":71,"src":88675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[29,88677,88678],{"start":96},[32,88679,88680],{},"try\u002Fcatch 捕获错误信息",[21,88682,88683],{},[1426,88684],{"alt":71,"src":88685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[66,88687,88689],{"className":50602,"code":88688,"language":50604,"meta":71,"style":71},"\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",[73,88690,88691,88701,88715,88719,88727,88741,88761,88773,88781,88785,88793,88805,88813,88822,88829,88834,88853,88862,88873,88878,88888,88893,88898,88903,88920,88924,88929,88936,88948,88952,88964,88968,88972,88977,88982,88989,88997,89005,89009],{"__ignoreMap":71},[76,88692,88693,88695,88697,88699],{"class":78,"line":79},[76,88694,51266],{"class":86},[76,88696,51270],{"class":51269},[76,88698,51273],{"class":1927},[76,88700,51276],{"class":86},[76,88702,88703,88705,88707,88709,88711,88713],{"class":78,"line":96},[76,88704,998],{"class":86},[76,88706,50604],{"class":51269},[76,88708,51285],{"class":1927},[76,88710,133],{"class":86},[76,88712,51290],{"class":192},[76,88714,51276],{"class":86},[76,88716,88717],{"class":78,"line":1143},[76,88718,2365],{"emptyLinePlaceholder":2364},[76,88720,88721,88723,88725],{"class":78,"line":1158},[76,88722,998],{"class":86},[76,88724,51303],{"class":51269},[76,88726,51276],{"class":86},[76,88728,88729,88731,88733,88735,88737,88739],{"class":78,"line":1164},[76,88730,52113],{"class":86},[76,88732,51313],{"class":51269},[76,88734,51316],{"class":1927},[76,88736,133],{"class":86},[76,88738,51321],{"class":192},[76,88740,51276],{"class":86},[76,88742,88743,88745,88747,88749,88751,88753,88755,88757,88759],{"class":78,"line":1178},[76,88744,52113],{"class":86},[76,88746,51313],{"class":51269},[76,88748,14887],{"class":1927},[76,88750,133],{"class":86},[76,88752,51360],{"class":192},[76,88754,51340],{"class":1927},[76,88756,133],{"class":86},[76,88758,51367],{"class":192},[76,88760,51276],{"class":86},[76,88762,88763,88765,88767,88769,88771],{"class":78,"line":1184},[76,88764,52113],{"class":86},[76,88766,51376],{"class":51269},[76,88768,51379],{"class":86},[76,88770,51376],{"class":51269},[76,88772,51276],{"class":86},[76,88774,88775,88777,88779],{"class":78,"line":1275},[76,88776,51754],{"class":86},[76,88778,51303],{"class":51269},[76,88780,51276],{"class":86},[76,88782,88783],{"class":78,"line":1281},[76,88784,2365],{"emptyLinePlaceholder":2364},[76,88786,88787,88789,88791],{"class":78,"line":1293},[76,88788,998],{"class":86},[76,88790,51769],{"class":51269},[76,88792,51276],{"class":86},[76,88794,88795,88797,88799,88801,88803],{"class":78,"line":1576},[76,88796,52113],{"class":86},[76,88798,21],{"class":51269},[76,88800,53463],{"class":86},[76,88802,21],{"class":51269},[76,88804,51276],{"class":86},[76,88806,88807,88809,88811],{"class":78,"line":1581},[76,88808,52113],{"class":86},[76,88810,51782],{"class":51269},[76,88812,51276],{"class":86},[76,88814,88815,88817,88820],{"class":78,"line":1587},[76,88816,70053],{"class":82},[76,88818,88819],{"class":1927}," fn",[76,88821,10820],{"class":86},[76,88823,88824,88827],{"class":78,"line":1592},[76,88825,88826],{"class":82},"      try",[76,88828,15539],{"class":86},[76,88830,88831],{"class":78,"line":1606},[76,88832,88833],{"class":146},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[76,88835,88836,88838,88840,88842,88844,88846,88848,88851],{"class":78,"line":1611},[76,88837,61239],{"class":82},[76,88839,6792],{"class":136},[76,88841,13531],{"class":82},[76,88843,54365],{"class":86},[76,88845,54368],{"class":1927},[76,88847,87],{"class":86},[76,88849,88850],{"class":192},"'.p'",[76,88852,93],{"class":86},[76,88854,88855,88858,88860],{"class":78,"line":1617},[76,88856,88857],{"class":86},"        p.style.color ",[76,88859,133],{"class":82},[76,88861,67020],{"class":192},[76,88863,88864,88867,88870],{"class":78,"line":1638},[76,88865,88866],{"class":86},"      } ",[76,88868,88869],{"class":82},"catch",[76,88871,88872],{"class":86}," (err) {\n",[76,88874,88875],{"class":78,"line":1643},[76,88876,88877],{"class":146},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[76,88879,88880,88883,88885],{"class":78,"line":1657},[76,88881,88882],{"class":86},"        console.",[76,88884,58216],{"class":1927},[76,88886,88887],{"class":86},"(err.message)\n",[76,88889,88890],{"class":78,"line":1662},[76,88891,88892],{"class":146},"        \u002F\u002F 想要中断程序，需要加return\n",[76,88894,88895],{"class":78,"line":1691},[76,88896,88897],{"class":146},"        \u002F\u002F return\n",[76,88899,88900],{"class":78,"line":1696},[76,88901,88902],{"class":146},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[76,88904,88905,88908,88910,88913,88915,88918],{"class":78,"line":1713},[76,88906,88907],{"class":82},"        throw",[76,88909,11545],{"class":82},[76,88911,88912],{"class":1927}," Error",[76,88914,87],{"class":86},[76,88916,88917],{"class":192},"'你看看，选择器错误了吧'",[76,88919,93],{"class":86},[76,88921,88922],{"class":78,"line":1718},[76,88923,52367],{"class":86},[76,88925,88926],{"class":78,"line":1723},[76,88927,88928],{"class":146},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[76,88930,88931,88934],{"class":78,"line":1728},[76,88932,88933],{"class":82},"      finally",[76,88935,15539],{"class":86},[76,88937,88938,88941,88943,88946],{"class":78,"line":1742},[76,88939,88940],{"class":1927},"        alert",[76,88942,87],{"class":86},[76,88944,88945],{"class":192},"'弹出对话框'",[76,88947,93],{"class":86},[76,88949,88950],{"class":78,"line":1747},[76,88951,52367],{"class":86},[76,88953,88954,88956,88958,88960,88962],{"class":78,"line":2542},[76,88955,58213],{"class":86},[76,88957,58216],{"class":1927},[76,88959,87],{"class":86},[76,88961,560],{"class":136},[76,88963,93],{"class":86},[76,88965,88966],{"class":78,"line":2556},[76,88967,2365],{"emptyLinePlaceholder":2364},[76,88969,88970],{"class":78,"line":2564},[76,88971,2151],{"class":86},[76,88973,88974],{"class":78,"line":2569},[76,88975,88976],{"class":146},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[76,88978,88979],{"class":78,"line":2575},[76,88980,88981],{"class":146},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[76,88983,88984,88987],{"class":78,"line":2581},[76,88985,88986],{"class":1927},"    fn",[76,88988,1940],{"class":86},[76,88990,88991,88993,88995],{"class":78,"line":2586},[76,88992,52386],{"class":86},[76,88994,51782],{"class":51269},[76,88996,51276],{"class":86},[76,88998,88999,89001,89003],{"class":78,"line":7915},[76,89000,51754],{"class":86},[76,89002,51769],{"class":51269},[76,89004,51276],{"class":86},[76,89006,89007],{"class":78,"line":7939},[76,89008,2365],{"emptyLinePlaceholder":2364},[76,89010,89011,89013,89015],{"class":78,"line":7944},[76,89012,51754],{"class":86},[76,89014,50604],{"class":51269},[76,89016,51276],{"class":86},[21,89018,89019],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[29,89021,89022],{"start":1143},[32,89023,89024],{},"debugger",[21,89026,89027],{},[1426,89028],{"alt":71,"src":89029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[21,89031,89032],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[16,89034,89036],{"id":89035},"_416-处理this","4.16 处理this",[46,89038,89040],{"id":89039},"_4161-this的指向","4.16.1 this的指向",[29,89042,89043],{},[32,89044,89045],{},"普通函数的this",[21,89047,89048],{},[1426,89049],{"alt":71,"src":89050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[29,89052,89053],{"start":96},[32,89054,89055],{},"箭头函数的this",[21,89057,89058],{},[1426,89059],{"alt":71,"src":89060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[21,89062,89063],{},[1426,89064],{"alt":71,"src":89065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[21,89067,89068],{},[1426,89069],{"alt":71,"src":89070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[46,89072,89074],{"id":89073},"_4162-this的改变","4.16.2 this的改变",[21,89076,89077],{},"call() apply() bind()",[29,89079,89080],{},[32,89081,89082],{},"call()",[21,89084,89085],{},[1426,89086],{"alt":71,"src":89087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[21,89089,89090],{},"两个作用：①调用函数；②改变this指向",[66,89092,89094],{"className":53036,"code":89093,"language":53038,"meta":71,"style":71},"\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",[73,89095,89096,89104,89112,89116,89121,89125,89130,89135,89140,89144,89149,89157],{"__ignoreMap":71},[76,89097,89098,89100,89102],{"class":78,"line":79},[76,89099,998],{"class":86},[76,89101,51769],{"class":51269},[76,89103,51276],{"class":86},[76,89105,89106,89108,89110],{"class":78,"line":96},[76,89107,52113],{"class":86},[76,89109,51782],{"class":51269},[76,89111,51276],{"class":86},[76,89113,89114],{"class":78,"line":1143},[76,89115,71492],{"class":86},[76,89117,89118],{"class":78,"line":1158},[76,89119,89120],{"class":86},"      uname: 'pink'\n",[76,89122,89123],{"class":78,"line":1164},[76,89124,2151],{"class":86},[76,89126,89127],{"class":78,"line":1178},[76,89128,89129],{"class":86},"    function fn(x, y) {\n",[76,89131,89132],{"class":78,"line":1184},[76,89133,89134],{"class":86},"      console.log(this)  \u002F\u002Fwindow\n",[76,89136,89137],{"class":78,"line":1275},[76,89138,89139],{"class":86},"      console.log(x + y)\n",[76,89141,89142],{"class":78,"line":1281},[76,89143,2151],{"class":86},[76,89145,89146],{"class":78,"line":1293},[76,89147,89148],{"class":86},"    fn.call(obj, 1, 2)\n",[76,89150,89151,89153,89155],{"class":78,"line":1576},[76,89152,52386],{"class":86},[76,89154,51782],{"class":51269},[76,89156,51276],{"class":86},[76,89158,89159,89161,89163],{"class":78,"line":1581},[76,89160,51754],{"class":86},[76,89162,51769],{"class":51269},[76,89164,51276],{"class":86},[21,89166,89167],{},[1426,89168],{"alt":71,"src":89169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[29,89171,89172],{"start":96},[32,89173,89174],{},"apply()",[21,89176,89177],{},[1426,89178],{"alt":71,"src":89179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[21,89181,89090],{},[21,89183,89184],{},"call传递的是普通参数，而apply必须传递的是数组",[66,89186,89188],{"className":50602,"code":89187,"language":50604,"meta":71,"style":71},"\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",[73,89189,89190,89200,89214,89218,89226,89240,89260,89272,89280,89284,89292,89300,89310,89317,89321,89326,89342,89354,89368,89372,89377,89396,89401,89405,89410,89415,89423,89428,89450,89455,89471,89487,89499,89503,89508,89527,89535,89543,89547],{"__ignoreMap":71},[76,89191,89192,89194,89196,89198],{"class":78,"line":79},[76,89193,51266],{"class":86},[76,89195,51270],{"class":51269},[76,89197,51273],{"class":1927},[76,89199,51276],{"class":86},[76,89201,89202,89204,89206,89208,89210,89212],{"class":78,"line":96},[76,89203,998],{"class":86},[76,89205,50604],{"class":51269},[76,89207,51285],{"class":1927},[76,89209,133],{"class":86},[76,89211,51290],{"class":192},[76,89213,51276],{"class":86},[76,89215,89216],{"class":78,"line":1143},[76,89217,2365],{"emptyLinePlaceholder":2364},[76,89219,89220,89222,89224],{"class":78,"line":1158},[76,89221,998],{"class":86},[76,89223,51303],{"class":51269},[76,89225,51276],{"class":86},[76,89227,89228,89230,89232,89234,89236,89238],{"class":78,"line":1164},[76,89229,52113],{"class":86},[76,89231,51313],{"class":51269},[76,89233,51316],{"class":1927},[76,89235,133],{"class":86},[76,89237,51321],{"class":192},[76,89239,51276],{"class":86},[76,89241,89242,89244,89246,89248,89250,89252,89254,89256,89258],{"class":78,"line":1178},[76,89243,52113],{"class":86},[76,89245,51313],{"class":51269},[76,89247,14887],{"class":1927},[76,89249,133],{"class":86},[76,89251,51360],{"class":192},[76,89253,51340],{"class":1927},[76,89255,133],{"class":86},[76,89257,51367],{"class":192},[76,89259,51276],{"class":86},[76,89261,89262,89264,89266,89268,89270],{"class":78,"line":1184},[76,89263,52113],{"class":86},[76,89265,51376],{"class":51269},[76,89267,51379],{"class":86},[76,89269,51376],{"class":51269},[76,89271,51276],{"class":86},[76,89273,89274,89276,89278],{"class":78,"line":1275},[76,89275,51754],{"class":86},[76,89277,51303],{"class":51269},[76,89279,51276],{"class":86},[76,89281,89282],{"class":78,"line":1281},[76,89283,2365],{"emptyLinePlaceholder":2364},[76,89285,89286,89288,89290],{"class":78,"line":1293},[76,89287,998],{"class":86},[76,89289,51769],{"class":51269},[76,89291,51276],{"class":86},[76,89293,89294,89296,89298],{"class":78,"line":1576},[76,89295,52113],{"class":86},[76,89297,51782],{"class":51269},[76,89299,51276],{"class":86},[76,89301,89302,89304,89306,89308],{"class":78,"line":1581},[76,89303,11188],{"class":82},[76,89305,69940],{"class":136},[76,89307,13531],{"class":82},[76,89309,15539],{"class":86},[76,89311,89312,89314],{"class":78,"line":1587},[76,89313,71595],{"class":86},[76,89315,89316],{"class":136},"18\n",[76,89318,89319],{"class":78,"line":1592},[76,89320,2151],{"class":86},[76,89322,89323],{"class":78,"line":1606},[76,89324,89325],{"class":146},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[76,89327,89328,89330,89332,89334,89336,89338,89340],{"class":78,"line":1611},[76,89329,70053],{"class":82},[76,89331,88819],{"class":1927},[76,89333,87],{"class":86},[76,89335,908],{"class":5183},[76,89337,12402],{"class":86},[76,89339,933],{"class":5183},[76,89341,12409],{"class":86},[76,89343,89344,89346,89348,89350,89352],{"class":78,"line":1617},[76,89345,58213],{"class":86},[76,89347,58216],{"class":1927},[76,89349,87],{"class":86},[76,89351,86962],{"class":136},[76,89353,93],{"class":86},[76,89355,89356,89358,89360,89363,89365],{"class":78,"line":1638},[76,89357,58213],{"class":86},[76,89359,58216],{"class":1927},[76,89361,89362],{"class":86},"(x ",[76,89364,569],{"class":82},[76,89366,89367],{"class":86}," y)\n",[76,89369,89370],{"class":78,"line":1643},[76,89371,2151],{"class":86},[76,89373,89374],{"class":78,"line":1657},[76,89375,89376],{"class":146},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[76,89378,89379,89382,89385,89388,89390,89392,89394],{"class":78,"line":1662},[76,89380,89381],{"class":86},"    fn.",[76,89383,89384],{"class":1927},"apply",[76,89386,89387],{"class":86},"(obj, [",[76,89389,305],{"class":136},[76,89391,12402],{"class":86},[76,89393,165],{"class":136},[76,89395,4622],{"class":86},[76,89397,89398],{"class":78,"line":1691},[76,89399,89400],{"class":146},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[76,89402,89403],{"class":78,"line":1696},[76,89404,2365],{"emptyLinePlaceholder":2364},[76,89406,89407],{"class":78,"line":1713},[76,89408,89409],{"class":146},"    \u002F\u002F 使用场景：求数组最大值\n",[76,89411,89412],{"class":78,"line":1718},[76,89413,89414],{"class":146},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[76,89416,89417,89420],{"class":78,"line":1723},[76,89418,89419],{"class":146},"    \u002F\u002F console.log(max)",[76,89421,89422],{"class":146},"   \u002F\u002F3\n",[76,89424,89425],{"class":78,"line":1728},[76,89426,89427],{"class":146},"    \u002F\u002F 指向空或者Math都是可以的\n",[76,89429,89430,89432,89434,89436,89438,89440,89442,89444,89446,89448],{"class":78,"line":1742},[76,89431,11188],{"class":82},[76,89433,57664],{"class":136},[76,89435,13531],{"class":82},[76,89437,52195],{"class":86},[76,89439,399],{"class":136},[76,89441,12402],{"class":86},[76,89443,592],{"class":136},[76,89445,12402],{"class":86},[76,89447,623],{"class":136},[76,89449,33215],{"class":86},[76,89451,89452],{"class":78,"line":1747},[76,89453,89454],{"class":146},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[76,89456,89457,89459,89461,89463,89466,89468],{"class":78,"line":2542},[76,89458,11188],{"class":82},[76,89460,5918],{"class":136},[76,89462,13531],{"class":82},[76,89464,89465],{"class":86}," Math.max.",[76,89467,89384],{"class":1927},[76,89469,89470],{"class":86},"(Math, arr)\n",[76,89472,89473,89475,89478,89480,89483,89485],{"class":78,"line":2556},[76,89474,11188],{"class":82},[76,89476,89477],{"class":136}," min",[76,89479,13531],{"class":82},[76,89481,89482],{"class":86}," Math.min.",[76,89484,89384],{"class":1927},[76,89486,89470],{"class":86},[76,89488,89489,89491,89493,89496],{"class":78,"line":2564},[76,89490,73722],{"class":86},[76,89492,58216],{"class":1927},[76,89494,89495],{"class":86},"(max, min)     ",[76,89497,89498],{"class":146},"\u002F\u002F100,4\n",[76,89500,89501],{"class":78,"line":2569},[76,89502,2365],{"emptyLinePlaceholder":2364},[76,89504,89505],{"class":78,"line":2575},[76,89506,89507],{"class":146},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[76,89509,89510,89512,89514,89517,89519,89521,89524],{"class":78,"line":2581},[76,89511,73722],{"class":86},[76,89513,58216],{"class":1927},[76,89515,89516],{"class":86},"(Max.",[76,89518,5982],{"class":1927},[76,89520,87],{"class":86},[76,89522,89523],{"class":82},"...",[76,89525,89526],{"class":86},"arr))\n",[76,89528,89529,89531,89533],{"class":78,"line":2586},[76,89530,52386],{"class":86},[76,89532,51782],{"class":51269},[76,89534,51276],{"class":86},[76,89536,89537,89539,89541],{"class":78,"line":7915},[76,89538,51754],{"class":86},[76,89540,51769],{"class":51269},[76,89542,51276],{"class":86},[76,89544,89545],{"class":78,"line":7939},[76,89546,2365],{"emptyLinePlaceholder":2364},[76,89548,89549,89551,89553],{"class":78,"line":7944},[76,89550,51754],{"class":86},[76,89552,50604],{"class":51269},[76,89554,51276],{"class":86},[21,89556,89557],{},[1426,89558],{"alt":71,"src":89559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[29,89561,89562],{"start":1143},[32,89563,89564],{},"bind()",[21,89566,89567],{},[1426,89568],{"alt":71,"src":89569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[21,89571,89572],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[21,89574,89575],{},"bind的语法跟call很相似",[66,89577,89579],{"className":53036,"code":89578,"language":53038,"meta":71,"style":71},"\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",[73,89580,89581,89589,89597,89601,89606,89610,89614,89619,89623,89628,89633,89638,89643,89648,89653,89658,89662,89670],{"__ignoreMap":71},[76,89582,89583,89585,89587],{"class":78,"line":79},[76,89584,998],{"class":86},[76,89586,51769],{"class":51269},[76,89588,51276],{"class":86},[76,89590,89591,89593,89595],{"class":78,"line":96},[76,89592,52113],{"class":86},[76,89594,51782],{"class":51269},[76,89596,51276],{"class":86},[76,89598,89599],{"class":78,"line":1143},[76,89600,71492],{"class":86},[76,89602,89603],{"class":78,"line":1158},[76,89604,89605],{"class":86},"      age: 18\n",[76,89607,89608],{"class":78,"line":1164},[76,89609,2151],{"class":86},[76,89611,89612],{"class":78,"line":1178},[76,89613,77112],{"class":86},[76,89615,89616],{"class":78,"line":1184},[76,89617,89618],{"class":86},"      console.log(this)\n",[76,89620,89621],{"class":78,"line":1275},[76,89622,2151],{"class":86},[76,89624,89625],{"class":78,"line":1281},[76,89626,89627],{"class":86},"    \u002F\u002F 1.bind 不会调用函数\n",[76,89629,89630],{"class":78,"line":1293},[76,89631,89632],{"class":86},"    \u002F\u002F 2.bind能改变this的指向\n",[76,89634,89635],{"class":78,"line":1576},[76,89636,89637],{"class":86},"    fn.bind()\n",[76,89639,89640],{"class":78,"line":1581},[76,89641,89642],{"class":86},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[76,89644,89645],{"class":78,"line":1587},[76,89646,89647],{"class":86},"    const fun = fn.bind(obj)\n",[76,89649,89650],{"class":78,"line":1592},[76,89651,89652],{"class":86},"    \u002F\u002F console.log(fun)\n",[76,89654,89655],{"class":78,"line":1606},[76,89656,89657],{"class":86},"    \u002F\u002F 调用,查看this的指向\n",[76,89659,89660],{"class":78,"line":1611},[76,89661,52620],{"class":86},[76,89663,89664,89666,89668],{"class":78,"line":1617},[76,89665,52386],{"class":86},[76,89667,51782],{"class":51269},[76,89669,51276],{"class":86},[76,89671,89672,89674,89676],{"class":78,"line":1638},[76,89673,51754],{"class":86},[76,89675,51769],{"class":51269},[76,89677,51276],{"class":86},[21,89679,89680],{},[1426,89681],{"alt":71,"src":89682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[29,89684,89685],{"start":1158},[32,89686,89687],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[66,89689,89691],{"className":53036,"code":89690,"language":53038,"meta":71,"style":71},"\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",[73,89692,89693,89701,89714,89722,89727,89731,89736,89741,89746,89751,89756,89761,89766,89771,89775,89783],{"__ignoreMap":71},[76,89694,89695,89697,89699],{"class":78,"line":79},[76,89696,998],{"class":86},[76,89698,51769],{"class":51269},[76,89700,51276],{"class":86},[76,89702,89703,89705,89707,89710,89712],{"class":78,"line":96},[76,89704,52113],{"class":86},[76,89706,53856],{"class":51269},[76,89708,89709],{"class":86},">禁用\u003C\u002F",[76,89711,53856],{"class":51269},[76,89713,51276],{"class":86},[76,89715,89716,89718,89720],{"class":78,"line":1143},[76,89717,52113],{"class":86},[76,89719,51782],{"class":51269},[76,89721,51276],{"class":86},[76,89723,89724],{"class":78,"line":1158},[76,89725,89726],{"class":86},"    const btn = document.querySelector('button')\n",[76,89728,89729],{"class":78,"line":1164},[76,89730,58985],{"class":86},[76,89732,89733],{"class":78,"line":1178},[76,89734,89735],{"class":86},"      this.disabled = true\n",[76,89737,89738],{"class":78,"line":1184},[76,89739,89740],{"class":86},"      \u002F\u002F 定时器是window进行调用的\n",[76,89742,89743],{"class":78,"line":1275},[76,89744,89745],{"class":86},"      setTimeout(function () {\n",[76,89747,89748],{"class":78,"line":1281},[76,89749,89750],{"class":86},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[76,89752,89753],{"class":78,"line":1293},[76,89754,89755],{"class":86},"        this.disabled = false\n",[76,89757,89758],{"class":78,"line":1576},[76,89759,89760],{"class":86},"      }.bind(this), 2000)\n",[76,89762,89763],{"class":78,"line":1581},[76,89764,89765],{"class":86},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[76,89767,89768],{"class":78,"line":1587},[76,89769,89770],{"class":86},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[76,89772,89773],{"class":78,"line":1592},[76,89774,33430],{"class":86},[76,89776,89777,89779,89781],{"class":78,"line":1606},[76,89778,52386],{"class":86},[76,89780,51782],{"class":51269},[76,89782,51276],{"class":86},[76,89784,89785,89787,89789],{"class":78,"line":1611},[76,89786,51754],{"class":86},[76,89788,51769],{"class":51269},[76,89790,51276],{"class":86},[29,89792,89793],{"start":1164},[32,89794,21920],{},[21,89796,89797],{},[1426,89798],{"alt":71,"src":89799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[16,89801,89803],{"id":89802},"_417-性能优化","4.17 性能优化",[46,89805,89807],{"id":89806},"_4171-防抖","4.17.1 防抖",[21,89809,89810],{},[1426,89811],{"alt":71,"src":89812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[21,89814,89815],{},[237,89816,89817],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[21,89819,89820],{},"防抖实现方式：",[1095,89822,89823],{},[32,89824,89825],{},"lodash 提供了防抖处理",[21,89827,89828],{},"_.debounce(func,[wait=0],[options={}])",[21,89830,89831],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[66,89833,89835],{"className":50602,"code":89834,"language":50604,"meta":71,"style":71},"\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",[73,89836,89837,89847,89861,89865,89873,89887,89907,89919,89927,89933,89943,89955,89967,89978,89990,90000,90010,90023,90027,90035,90043,90047,90055,90073,90091,90099,90118,90128,90137,90148,90153,90157,90162,90167,90172,90197,90205,90213,90217],{"__ignoreMap":71},[76,89838,89839,89841,89843,89845],{"class":78,"line":79},[76,89840,51266],{"class":86},[76,89842,51270],{"class":51269},[76,89844,51273],{"class":1927},[76,89846,51276],{"class":86},[76,89848,89849,89851,89853,89855,89857,89859],{"class":78,"line":96},[76,89850,998],{"class":86},[76,89852,50604],{"class":51269},[76,89854,51285],{"class":1927},[76,89856,133],{"class":86},[76,89858,51290],{"class":192},[76,89860,51276],{"class":86},[76,89862,89863],{"class":78,"line":1143},[76,89864,2365],{"emptyLinePlaceholder":2364},[76,89866,89867,89869,89871],{"class":78,"line":1158},[76,89868,998],{"class":86},[76,89870,51303],{"class":51269},[76,89872,51276],{"class":86},[76,89874,89875,89877,89879,89881,89883,89885],{"class":78,"line":1164},[76,89876,52113],{"class":86},[76,89878,51313],{"class":51269},[76,89880,51316],{"class":1927},[76,89882,133],{"class":86},[76,89884,51321],{"class":192},[76,89886,51276],{"class":86},[76,89888,89889,89891,89893,89895,89897,89899,89901,89903,89905],{"class":78,"line":1178},[76,89890,52113],{"class":86},[76,89892,51313],{"class":51269},[76,89894,14887],{"class":1927},[76,89896,133],{"class":86},[76,89898,51360],{"class":192},[76,89900,51340],{"class":1927},[76,89902,133],{"class":86},[76,89904,51367],{"class":192},[76,89906,51276],{"class":86},[76,89908,89909,89911,89913,89915,89917],{"class":78,"line":1184},[76,89910,52113],{"class":86},[76,89912,51376],{"class":51269},[76,89914,51379],{"class":86},[76,89916,51376],{"class":51269},[76,89918,51276],{"class":86},[76,89920,89921,89923,89925],{"class":78,"line":1275},[76,89922,52113],{"class":86},[76,89924,5092],{"class":51269},[76,89926,51276],{"class":86},[76,89928,89929,89931],{"class":78,"line":1281},[76,89930,54721],{"class":1927},[76,89932,15539],{"class":86},[76,89934,89935,89937,89939,89941],{"class":78,"line":1293},[76,89936,72565],{"class":136},[76,89938,51406],{"class":86},[76,89940,60474],{"class":136},[76,89942,1254],{"class":86},[76,89944,89945,89947,89949,89951,89953],{"class":78,"line":1576},[76,89946,54740],{"class":136},[76,89948,51406],{"class":86},[76,89950,1686],{"class":136},[76,89952,51461],{"class":82},[76,89954,1254],{"class":86},[76,89956,89957,89959,89961,89963,89965],{"class":78,"line":1581},[76,89958,54754],{"class":136},[76,89960,51406],{"class":86},[76,89962,1686],{"class":136},[76,89964,51461],{"class":82},[76,89966,1254],{"class":86},[76,89968,89969,89971,89973,89976],{"class":78,"line":1587},[76,89970,54853],{"class":136},[76,89972,51406],{"class":86},[76,89974,89975],{"class":136},"gray",[76,89977,1254],{"class":86},[76,89979,89980,89982,89984,89986,89988],{"class":78,"line":1592},[76,89981,54891],{"class":136},[76,89983,51406],{"class":86},[76,89985,913],{"class":136},[76,89987,51461],{"class":82},[76,89989,1254],{"class":86},[76,89991,89992,89994,89996,89998],{"class":78,"line":1606},[76,89993,57385],{"class":136},[76,89995,51406],{"class":86},[76,89997,60811],{"class":136},[76,89999,1254],{"class":86},[76,90001,90002,90004,90006,90008],{"class":78,"line":1611},[76,90003,57255],{"class":136},[76,90005,51406],{"class":86},[76,90007,51561],{"class":136},[76,90009,1254],{"class":86},[76,90011,90012,90015,90017,90019,90021],{"class":78,"line":1617},[76,90013,90014],{"class":136},"      padding-top",[76,90016,51406],{"class":86},[76,90018,407],{"class":136},[76,90020,51461],{"class":82},[76,90022,1254],{"class":86},[76,90024,90025],{"class":78,"line":1638},[76,90026,2151],{"class":86},[76,90028,90029,90031,90033],{"class":78,"line":1643},[76,90030,52386],{"class":86},[76,90032,5092],{"class":51269},[76,90034,51276],{"class":86},[76,90036,90037,90039,90041],{"class":78,"line":1657},[76,90038,51754],{"class":86},[76,90040,51303],{"class":51269},[76,90042,51276],{"class":86},[76,90044,90045],{"class":78,"line":1662},[76,90046,2365],{"emptyLinePlaceholder":2364},[76,90048,90049,90051,90053],{"class":78,"line":1691},[76,90050,998],{"class":86},[76,90052,51769],{"class":51269},[76,90054,51276],{"class":86},[76,90056,90057,90059,90061,90063,90065,90067,90069,90071],{"class":78,"line":1696},[76,90058,52113],{"class":86},[76,90060,51580],{"class":51269},[76,90062,53455],{"class":1927},[76,90064,133],{"class":86},[76,90066,53460],{"class":192},[76,90068,55283],{"class":86},[76,90070,51580],{"class":51269},[76,90072,51276],{"class":86},[76,90074,90075,90077,90079,90081,90083,90085,90087,90089],{"class":78,"line":1713},[76,90076,52113],{"class":86},[76,90078,51782],{"class":51269},[76,90080,55208],{"class":1927},[76,90082,133],{"class":86},[76,90084,88243],{"class":192},[76,90086,55283],{"class":86},[76,90088,51782],{"class":51269},[76,90090,51276],{"class":86},[76,90092,90093,90095,90097],{"class":78,"line":1718},[76,90094,52113],{"class":86},[76,90096,51782],{"class":51269},[76,90098,51276],{"class":86},[76,90100,90101,90103,90105,90107,90109,90111,90113,90116],{"class":78,"line":1723},[76,90102,11188],{"class":82},[76,90104,86902],{"class":136},[76,90106,13531],{"class":82},[76,90108,54365],{"class":86},[76,90110,54368],{"class":1927},[76,90112,87],{"class":86},[76,90114,90115],{"class":192},"'.box'",[76,90117,93],{"class":86},[76,90119,90120,90122,90124,90126],{"class":78,"line":1728},[76,90121,52188],{"class":82},[76,90123,9405],{"class":86},[76,90125,133],{"class":82},[76,90127,47302],{"class":136},[76,90129,90130,90132,90135],{"class":78,"line":1742},[76,90131,70053],{"class":82},[76,90133,90134],{"class":1927}," mouseMove",[76,90136,10820],{"class":86},[76,90138,90139,90142,90144,90146],{"class":78,"line":1747},[76,90140,90141],{"class":86},"      box.innerHTML ",[76,90143,133],{"class":82},[76,90145,2997],{"class":86},[76,90147,2667],{"class":82},[76,90149,90150],{"class":78,"line":2542},[76,90151,90152],{"class":146},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[76,90154,90155],{"class":78,"line":2556},[76,90156,2151],{"class":86},[76,90158,90159],{"class":78,"line":2564},[76,90160,90161],{"class":146},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[76,90163,90164],{"class":78,"line":2569},[76,90165,90166],{"class":146},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[76,90168,90169],{"class":78,"line":2575},[76,90170,90171],{"class":146},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[76,90173,90174,90177,90179,90181,90184,90187,90190,90193,90195],{"class":78,"line":2581},[76,90175,90176],{"class":86},"    box.",[76,90178,57782],{"class":1927},[76,90180,87],{"class":86},[76,90182,90183],{"class":192},"'mousemove'",[76,90185,90186],{"class":86},", _.",[76,90188,90189],{"class":1927},"debounce",[76,90191,90192],{"class":86},"(mouseMove, ",[76,90194,65043],{"class":136},[76,90196,30466],{"class":86},[76,90198,90199,90201,90203],{"class":78,"line":2586},[76,90200,52386],{"class":86},[76,90202,51782],{"class":51269},[76,90204,51276],{"class":86},[76,90206,90207,90209,90211],{"class":78,"line":7915},[76,90208,51754],{"class":86},[76,90210,51769],{"class":51269},[76,90212,51276],{"class":86},[76,90214,90215],{"class":78,"line":7939},[76,90216,2365],{"emptyLinePlaceholder":2364},[76,90218,90219,90221,90223],{"class":78,"line":7944},[76,90220,51754],{"class":86},[76,90222,50604],{"class":51269},[76,90224,51276],{"class":86},[1095,90226,90227],{},[32,90228,90229],{},"手写一个防抖函数来处理",[21,90231,90232],{},"防抖的核心就是利用定时器来实现的：",[21,90234,90235],{},"①声明一个定时器变量",[21,90237,90238],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[21,90240,90241],{},"③如果没有定时器则开启定时器，记得存到变量里面",[66,90243,90245],{"className":50602,"code":90244,"language":50604,"meta":71,"style":71},"\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",[73,90246,90247,90257,90271,90275,90283,90297,90317,90329,90337,90343,90353,90365,90377,90387,90399,90409,90419,90431,90435,90443,90451,90455,90463,90481,90499,90507,90525,90535,90543,90553,90557,90561,90565,90570,90575,90580,90585,90590,90595,90613,90620,90625,90633,90638,90651,90667,90677,90682,90686,90690,90710,90714,90719,90724,90729,90734,90742,90750,90754],{"__ignoreMap":71},[76,90248,90249,90251,90253,90255],{"class":78,"line":79},[76,90250,51266],{"class":86},[76,90252,51270],{"class":51269},[76,90254,51273],{"class":1927},[76,90256,51276],{"class":86},[76,90258,90259,90261,90263,90265,90267,90269],{"class":78,"line":96},[76,90260,998],{"class":86},[76,90262,50604],{"class":51269},[76,90264,51285],{"class":1927},[76,90266,133],{"class":86},[76,90268,51290],{"class":192},[76,90270,51276],{"class":86},[76,90272,90273],{"class":78,"line":1143},[76,90274,2365],{"emptyLinePlaceholder":2364},[76,90276,90277,90279,90281],{"class":78,"line":1158},[76,90278,998],{"class":86},[76,90280,51303],{"class":51269},[76,90282,51276],{"class":86},[76,90284,90285,90287,90289,90291,90293,90295],{"class":78,"line":1164},[76,90286,52113],{"class":86},[76,90288,51313],{"class":51269},[76,90290,51316],{"class":1927},[76,90292,133],{"class":86},[76,90294,51321],{"class":192},[76,90296,51276],{"class":86},[76,90298,90299,90301,90303,90305,90307,90309,90311,90313,90315],{"class":78,"line":1178},[76,90300,52113],{"class":86},[76,90302,51313],{"class":51269},[76,90304,14887],{"class":1927},[76,90306,133],{"class":86},[76,90308,51360],{"class":192},[76,90310,51340],{"class":1927},[76,90312,133],{"class":86},[76,90314,51367],{"class":192},[76,90316,51276],{"class":86},[76,90318,90319,90321,90323,90325,90327],{"class":78,"line":1184},[76,90320,52113],{"class":86},[76,90322,51376],{"class":51269},[76,90324,51379],{"class":86},[76,90326,51376],{"class":51269},[76,90328,51276],{"class":86},[76,90330,90331,90333,90335],{"class":78,"line":1275},[76,90332,52113],{"class":86},[76,90334,5092],{"class":51269},[76,90336,51276],{"class":86},[76,90338,90339,90341],{"class":78,"line":1281},[76,90340,54721],{"class":1927},[76,90342,15539],{"class":86},[76,90344,90345,90347,90349,90351],{"class":78,"line":1293},[76,90346,72565],{"class":136},[76,90348,51406],{"class":86},[76,90350,60474],{"class":136},[76,90352,1254],{"class":86},[76,90354,90355,90357,90359,90361,90363],{"class":78,"line":1576},[76,90356,54740],{"class":136},[76,90358,51406],{"class":86},[76,90360,1686],{"class":136},[76,90362,51461],{"class":82},[76,90364,1254],{"class":86},[76,90366,90367,90369,90371,90373,90375],{"class":78,"line":1581},[76,90368,54754],{"class":136},[76,90370,51406],{"class":86},[76,90372,1686],{"class":136},[76,90374,51461],{"class":82},[76,90376,1254],{"class":86},[76,90378,90379,90381,90383,90385],{"class":78,"line":1587},[76,90380,54853],{"class":136},[76,90382,51406],{"class":86},[76,90384,89975],{"class":136},[76,90386,1254],{"class":86},[76,90388,90389,90391,90393,90395,90397],{"class":78,"line":1592},[76,90390,54891],{"class":136},[76,90392,51406],{"class":86},[76,90394,913],{"class":136},[76,90396,51461],{"class":82},[76,90398,1254],{"class":86},[76,90400,90401,90403,90405,90407],{"class":78,"line":1606},[76,90402,57385],{"class":136},[76,90404,51406],{"class":86},[76,90406,60811],{"class":136},[76,90408,1254],{"class":86},[76,90410,90411,90413,90415,90417],{"class":78,"line":1611},[76,90412,57255],{"class":136},[76,90414,51406],{"class":86},[76,90416,51561],{"class":136},[76,90418,1254],{"class":86},[76,90420,90421,90423,90425,90427,90429],{"class":78,"line":1617},[76,90422,90014],{"class":136},[76,90424,51406],{"class":86},[76,90426,407],{"class":136},[76,90428,51461],{"class":82},[76,90430,1254],{"class":86},[76,90432,90433],{"class":78,"line":1638},[76,90434,2151],{"class":86},[76,90436,90437,90439,90441],{"class":78,"line":1643},[76,90438,52386],{"class":86},[76,90440,5092],{"class":51269},[76,90442,51276],{"class":86},[76,90444,90445,90447,90449],{"class":78,"line":1657},[76,90446,51754],{"class":86},[76,90448,51303],{"class":51269},[76,90450,51276],{"class":86},[76,90452,90453],{"class":78,"line":1662},[76,90454,2365],{"emptyLinePlaceholder":2364},[76,90456,90457,90459,90461],{"class":78,"line":1691},[76,90458,998],{"class":86},[76,90460,51769],{"class":51269},[76,90462,51276],{"class":86},[76,90464,90465,90467,90469,90471,90473,90475,90477,90479],{"class":78,"line":1696},[76,90466,52113],{"class":86},[76,90468,51580],{"class":51269},[76,90470,53455],{"class":1927},[76,90472,133],{"class":86},[76,90474,53460],{"class":192},[76,90476,55283],{"class":86},[76,90478,51580],{"class":51269},[76,90480,51276],{"class":86},[76,90482,90483,90485,90487,90489,90491,90493,90495,90497],{"class":78,"line":1713},[76,90484,52113],{"class":86},[76,90486,51782],{"class":51269},[76,90488,55208],{"class":1927},[76,90490,133],{"class":86},[76,90492,88243],{"class":192},[76,90494,55283],{"class":86},[76,90496,51782],{"class":51269},[76,90498,51276],{"class":86},[76,90500,90501,90503,90505],{"class":78,"line":1718},[76,90502,52113],{"class":86},[76,90504,51782],{"class":51269},[76,90506,51276],{"class":86},[76,90508,90509,90511,90513,90515,90517,90519,90521,90523],{"class":78,"line":1723},[76,90510,11188],{"class":82},[76,90512,86902],{"class":136},[76,90514,13531],{"class":82},[76,90516,54365],{"class":86},[76,90518,54368],{"class":1927},[76,90520,87],{"class":86},[76,90522,90115],{"class":192},[76,90524,93],{"class":86},[76,90526,90527,90529,90531,90533],{"class":78,"line":1728},[76,90528,52188],{"class":82},[76,90530,9405],{"class":86},[76,90532,133],{"class":82},[76,90534,47302],{"class":136},[76,90536,90537,90539,90541],{"class":78,"line":1742},[76,90538,70053],{"class":82},[76,90540,90134],{"class":1927},[76,90542,10820],{"class":86},[76,90544,90545,90547,90549,90551],{"class":78,"line":1747},[76,90546,90141],{"class":86},[76,90548,133],{"class":82},[76,90550,2997],{"class":86},[76,90552,2667],{"class":82},[76,90554,90555],{"class":78,"line":2542},[76,90556,90152],{"class":146},[76,90558,90559],{"class":78,"line":2556},[76,90560,2151],{"class":86},[76,90562,90563],{"class":78,"line":2564},[76,90564,90161],{"class":146},[76,90566,90567],{"class":78,"line":2569},[76,90568,90569],{"class":146},"    \u002F\u002F 手写防抖函数\n",[76,90571,90572],{"class":78,"line":2575},[76,90573,90574],{"class":146},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[76,90576,90577],{"class":78,"line":2581},[76,90578,90579],{"class":146},"    \u002F\u002F 1.声明定时器变量\n",[76,90581,90582],{"class":78,"line":2586},[76,90583,90584],{"class":146},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[76,90586,90587],{"class":78,"line":7915},[76,90588,90589],{"class":146},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[76,90591,90592],{"class":78,"line":7939},[76,90593,90594],{"class":146},"    \u002F\u002F 4.定时器里面写函数调用\n",[76,90596,90597,90599,90602,90604,90607,90609,90611],{"class":78,"line":7944},[76,90598,70053],{"class":82},[76,90600,90601],{"class":1927}," debounce",[76,90603,87],{"class":86},[76,90605,90606],{"class":5183},"fn",[76,90608,12402],{"class":86},[76,90610,808],{"class":5183},[76,90612,12409],{"class":86},[76,90614,90615,90617],{"class":78,"line":7950},[76,90616,79741],{"class":82},[76,90618,90619],{"class":86}," timer\n",[76,90621,90622],{"class":78,"line":7977},[76,90623,90624],{"class":146},"      \u002F\u002F return 返回一个匿名函数\n",[76,90626,90627,90629,90631],{"class":78,"line":7982},[76,90628,73951],{"class":82},[76,90630,58887],{"class":82},[76,90632,54421],{"class":86},[76,90634,90635],{"class":78,"line":7988},[76,90636,90637],{"class":146},"        \u002F\u002F 这里边写第二三四步\n",[76,90639,90640,90642,90645,90648],{"class":78,"line":8000},[76,90641,2462],{"class":82},[76,90643,90644],{"class":86}," (timer) ",[76,90646,90647],{"class":1927},"clearTimeout",[76,90649,90650],{"class":86},"(timer)\n",[76,90652,90653,90656,90658,90661,90663,90665],{"class":78,"line":8012},[76,90654,90655],{"class":86},"        timer ",[76,90657,133],{"class":82},[76,90659,90660],{"class":1927}," setTimeout",[76,90662,87],{"class":86},[76,90664,54418],{"class":82},[76,90666,54421],{"class":86},[76,90668,90669,90672,90674],{"class":78,"line":8024},[76,90670,90671],{"class":1927},"          fn",[76,90673,13017],{"class":86},[76,90675,90676],{"class":146},"\u002F\u002F加小括号调用fn }, t)\n",[76,90678,90679],{"class":78,"line":9683},[76,90680,90681],{"class":86},"        }, t)\n",[76,90683,90684],{"class":78,"line":9708},[76,90685,52367],{"class":86},[76,90687,90688],{"class":78,"line":9731},[76,90689,2151],{"class":86},[76,90691,90692,90694,90696,90698,90700,90702,90704,90706,90708],{"class":78,"line":9755},[76,90693,90176],{"class":86},[76,90695,57782],{"class":1927},[76,90697,87],{"class":86},[76,90699,90183],{"class":192},[76,90701,12402],{"class":86},[76,90703,90189],{"class":1927},[76,90705,90192],{"class":86},[76,90707,65043],{"class":136},[76,90709,30466],{"class":86},[76,90711,90712],{"class":78,"line":9760},[76,90713,2365],{"emptyLinePlaceholder":2364},[76,90715,90716],{"class":78,"line":9765},[76,90717,90718],{"class":146},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[76,90720,90721],{"class":78,"line":9770},[76,90722,90723],{"class":146},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[76,90725,90726],{"class":78,"line":9779},[76,90727,90728],{"class":146},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[76,90730,90731],{"class":78,"line":9784},[76,90732,90733],{"class":146},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[76,90735,90736,90738,90740],{"class":78,"line":9790},[76,90737,52386],{"class":86},[76,90739,51782],{"class":51269},[76,90741,51276],{"class":86},[76,90743,90744,90746,90748],{"class":78,"line":9811},[76,90745,51754],{"class":86},[76,90747,51769],{"class":51269},[76,90749,51276],{"class":86},[76,90751,90752],{"class":78,"line":9817},[76,90753,2365],{"emptyLinePlaceholder":2364},[76,90755,90756,90758,90760],{"class":78,"line":9831},[76,90757,51754],{"class":86},[76,90759,50604],{"class":51269},[76,90761,51276],{"class":86},[46,90763,90765],{"id":90764},"_4172-节流","4.17.2 节流",[21,90767,90768],{},[1426,90769],{"alt":71,"src":90770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[21,90772,90773],{},[1426,90774],{"alt":71,"src":90775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[21,90777,90778],{},[237,90779,90780],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[21,90782,90783],{},"实现方式：",[1095,90785,90786],{},[32,90787,90788],{},"lodash 提供的节流函数来处理",[21,90790,90791],{},"_.throttle(func,[wait=0],[options=])",[21,90793,90794],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[66,90796,90798],{"className":50602,"code":90797,"language":50604,"meta":71,"style":71},"\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",[73,90799,90800,90810,90824,90828,90836,90850,90870,90882,90890,90896,90906,90918,90930,90940,90952,90962,90972,90984,90988,90996,91004,91008,91016,91034,91052,91060,91078,91088,91096,91106,91110,91114,91118,91123,91128,91149,91157,91165,91169],{"__ignoreMap":71},[76,90801,90802,90804,90806,90808],{"class":78,"line":79},[76,90803,51266],{"class":86},[76,90805,51270],{"class":51269},[76,90807,51273],{"class":1927},[76,90809,51276],{"class":86},[76,90811,90812,90814,90816,90818,90820,90822],{"class":78,"line":96},[76,90813,998],{"class":86},[76,90815,50604],{"class":51269},[76,90817,51285],{"class":1927},[76,90819,133],{"class":86},[76,90821,51290],{"class":192},[76,90823,51276],{"class":86},[76,90825,90826],{"class":78,"line":1143},[76,90827,2365],{"emptyLinePlaceholder":2364},[76,90829,90830,90832,90834],{"class":78,"line":1158},[76,90831,998],{"class":86},[76,90833,51303],{"class":51269},[76,90835,51276],{"class":86},[76,90837,90838,90840,90842,90844,90846,90848],{"class":78,"line":1164},[76,90839,52113],{"class":86},[76,90841,51313],{"class":51269},[76,90843,51316],{"class":1927},[76,90845,133],{"class":86},[76,90847,51321],{"class":192},[76,90849,51276],{"class":86},[76,90851,90852,90854,90856,90858,90860,90862,90864,90866,90868],{"class":78,"line":1178},[76,90853,52113],{"class":86},[76,90855,51313],{"class":51269},[76,90857,14887],{"class":1927},[76,90859,133],{"class":86},[76,90861,51360],{"class":192},[76,90863,51340],{"class":1927},[76,90865,133],{"class":86},[76,90867,51367],{"class":192},[76,90869,51276],{"class":86},[76,90871,90872,90874,90876,90878,90880],{"class":78,"line":1184},[76,90873,52113],{"class":86},[76,90875,51376],{"class":51269},[76,90877,51379],{"class":86},[76,90879,51376],{"class":51269},[76,90881,51276],{"class":86},[76,90883,90884,90886,90888],{"class":78,"line":1275},[76,90885,52113],{"class":86},[76,90887,5092],{"class":51269},[76,90889,51276],{"class":86},[76,90891,90892,90894],{"class":78,"line":1281},[76,90893,54721],{"class":1927},[76,90895,15539],{"class":86},[76,90897,90898,90900,90902,90904],{"class":78,"line":1293},[76,90899,72565],{"class":136},[76,90901,51406],{"class":86},[76,90903,60474],{"class":136},[76,90905,1254],{"class":86},[76,90907,90908,90910,90912,90914,90916],{"class":78,"line":1576},[76,90909,54740],{"class":136},[76,90911,51406],{"class":86},[76,90913,1686],{"class":136},[76,90915,51461],{"class":82},[76,90917,1254],{"class":86},[76,90919,90920,90922,90924,90926,90928],{"class":78,"line":1581},[76,90921,54754],{"class":136},[76,90923,51406],{"class":86},[76,90925,1686],{"class":136},[76,90927,51461],{"class":82},[76,90929,1254],{"class":86},[76,90931,90932,90934,90936,90938],{"class":78,"line":1587},[76,90933,54853],{"class":136},[76,90935,51406],{"class":86},[76,90937,89975],{"class":136},[76,90939,1254],{"class":86},[76,90941,90942,90944,90946,90948,90950],{"class":78,"line":1592},[76,90943,54891],{"class":136},[76,90945,51406],{"class":86},[76,90947,913],{"class":136},[76,90949,51461],{"class":82},[76,90951,1254],{"class":86},[76,90953,90954,90956,90958,90960],{"class":78,"line":1606},[76,90955,57385],{"class":136},[76,90957,51406],{"class":86},[76,90959,60811],{"class":136},[76,90961,1254],{"class":86},[76,90963,90964,90966,90968,90970],{"class":78,"line":1611},[76,90965,57255],{"class":136},[76,90967,51406],{"class":86},[76,90969,51561],{"class":136},[76,90971,1254],{"class":86},[76,90973,90974,90976,90978,90980,90982],{"class":78,"line":1617},[76,90975,90014],{"class":136},[76,90977,51406],{"class":86},[76,90979,407],{"class":136},[76,90981,51461],{"class":82},[76,90983,1254],{"class":86},[76,90985,90986],{"class":78,"line":1638},[76,90987,2151],{"class":86},[76,90989,90990,90992,90994],{"class":78,"line":1643},[76,90991,52386],{"class":86},[76,90993,5092],{"class":51269},[76,90995,51276],{"class":86},[76,90997,90998,91000,91002],{"class":78,"line":1657},[76,90999,51754],{"class":86},[76,91001,51303],{"class":51269},[76,91003,51276],{"class":86},[76,91005,91006],{"class":78,"line":1662},[76,91007,2365],{"emptyLinePlaceholder":2364},[76,91009,91010,91012,91014],{"class":78,"line":1691},[76,91011,998],{"class":86},[76,91013,51769],{"class":51269},[76,91015,51276],{"class":86},[76,91017,91018,91020,91022,91024,91026,91028,91030,91032],{"class":78,"line":1696},[76,91019,52113],{"class":86},[76,91021,51580],{"class":51269},[76,91023,53455],{"class":1927},[76,91025,133],{"class":86},[76,91027,53460],{"class":192},[76,91029,55283],{"class":86},[76,91031,51580],{"class":51269},[76,91033,51276],{"class":86},[76,91035,91036,91038,91040,91042,91044,91046,91048,91050],{"class":78,"line":1713},[76,91037,52113],{"class":86},[76,91039,51782],{"class":51269},[76,91041,55208],{"class":1927},[76,91043,133],{"class":86},[76,91045,88243],{"class":192},[76,91047,55283],{"class":86},[76,91049,51782],{"class":51269},[76,91051,51276],{"class":86},[76,91053,91054,91056,91058],{"class":78,"line":1718},[76,91055,52113],{"class":86},[76,91057,51782],{"class":51269},[76,91059,51276],{"class":86},[76,91061,91062,91064,91066,91068,91070,91072,91074,91076],{"class":78,"line":1723},[76,91063,11188],{"class":82},[76,91065,86902],{"class":136},[76,91067,13531],{"class":82},[76,91069,54365],{"class":86},[76,91071,54368],{"class":1927},[76,91073,87],{"class":86},[76,91075,90115],{"class":192},[76,91077,93],{"class":86},[76,91079,91080,91082,91084,91086],{"class":78,"line":1728},[76,91081,52188],{"class":82},[76,91083,9405],{"class":86},[76,91085,133],{"class":82},[76,91087,47302],{"class":136},[76,91089,91090,91092,91094],{"class":78,"line":1742},[76,91091,70053],{"class":82},[76,91093,90134],{"class":1927},[76,91095,10820],{"class":86},[76,91097,91098,91100,91102,91104],{"class":78,"line":1747},[76,91099,90141],{"class":86},[76,91101,133],{"class":82},[76,91103,2997],{"class":86},[76,91105,2667],{"class":82},[76,91107,91108],{"class":78,"line":2542},[76,91109,90152],{"class":146},[76,91111,91112],{"class":78,"line":2556},[76,91113,2151],{"class":86},[76,91115,91116],{"class":78,"line":2564},[76,91117,90161],{"class":146},[76,91119,91120],{"class":78,"line":2569},[76,91121,91122],{"class":146},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[76,91124,91125],{"class":78,"line":2575},[76,91126,91127],{"class":146},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[76,91129,91130,91132,91134,91136,91138,91140,91143,91145,91147],{"class":78,"line":2581},[76,91131,90176],{"class":86},[76,91133,57782],{"class":1927},[76,91135,87],{"class":86},[76,91137,90183],{"class":192},[76,91139,90186],{"class":86},[76,91141,91142],{"class":1927},"throttle",[76,91144,90192],{"class":86},[76,91146,65043],{"class":136},[76,91148,30466],{"class":86},[76,91150,91151,91153,91155],{"class":78,"line":2586},[76,91152,52386],{"class":86},[76,91154,51782],{"class":51269},[76,91156,51276],{"class":86},[76,91158,91159,91161,91163],{"class":78,"line":7915},[76,91160,51754],{"class":86},[76,91162,51769],{"class":51269},[76,91164,51276],{"class":86},[76,91166,91167],{"class":78,"line":7939},[76,91168,2365],{"emptyLinePlaceholder":2364},[76,91170,91171,91173,91175],{"class":78,"line":7944},[76,91172,51754],{"class":86},[76,91174,50604],{"class":51269},[76,91176,51276],{"class":86},[1095,91178,91179],{},[32,91180,91181],{},"手写一个节流函数来处理",[21,91183,70921],{},[21,91185,90235],{},[21,91187,91188],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[21,91190,91191],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[66,91193,91195],{"className":50602,"code":91194,"language":50604,"meta":71,"style":71},"\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",[73,91196,91197,91207,91221,91225,91233,91247,91267,91279,91287,91293,91303,91315,91327,91337,91349,91359,91369,91381,91385,91393,91401,91405,91413,91431,91449,91457,91475,91485,91493,91503,91507,91511,91515,91520,91525,91530,91535,91540,91545,91562,91568,91576,91587,91602,91609,91614,91619,91629,91634,91639,91644,91648,91652,91656,91676,91684,91692,91696],{"__ignoreMap":71},[76,91198,91199,91201,91203,91205],{"class":78,"line":79},[76,91200,51266],{"class":86},[76,91202,51270],{"class":51269},[76,91204,51273],{"class":1927},[76,91206,51276],{"class":86},[76,91208,91209,91211,91213,91215,91217,91219],{"class":78,"line":96},[76,91210,998],{"class":86},[76,91212,50604],{"class":51269},[76,91214,51285],{"class":1927},[76,91216,133],{"class":86},[76,91218,51290],{"class":192},[76,91220,51276],{"class":86},[76,91222,91223],{"class":78,"line":1143},[76,91224,2365],{"emptyLinePlaceholder":2364},[76,91226,91227,91229,91231],{"class":78,"line":1158},[76,91228,998],{"class":86},[76,91230,51303],{"class":51269},[76,91232,51276],{"class":86},[76,91234,91235,91237,91239,91241,91243,91245],{"class":78,"line":1164},[76,91236,52113],{"class":86},[76,91238,51313],{"class":51269},[76,91240,51316],{"class":1927},[76,91242,133],{"class":86},[76,91244,51321],{"class":192},[76,91246,51276],{"class":86},[76,91248,91249,91251,91253,91255,91257,91259,91261,91263,91265],{"class":78,"line":1178},[76,91250,52113],{"class":86},[76,91252,51313],{"class":51269},[76,91254,14887],{"class":1927},[76,91256,133],{"class":86},[76,91258,51360],{"class":192},[76,91260,51340],{"class":1927},[76,91262,133],{"class":86},[76,91264,51367],{"class":192},[76,91266,51276],{"class":86},[76,91268,91269,91271,91273,91275,91277],{"class":78,"line":1184},[76,91270,52113],{"class":86},[76,91272,51376],{"class":51269},[76,91274,51379],{"class":86},[76,91276,51376],{"class":51269},[76,91278,51276],{"class":86},[76,91280,91281,91283,91285],{"class":78,"line":1275},[76,91282,52113],{"class":86},[76,91284,5092],{"class":51269},[76,91286,51276],{"class":86},[76,91288,91289,91291],{"class":78,"line":1281},[76,91290,54721],{"class":1927},[76,91292,15539],{"class":86},[76,91294,91295,91297,91299,91301],{"class":78,"line":1293},[76,91296,72565],{"class":136},[76,91298,51406],{"class":86},[76,91300,60474],{"class":136},[76,91302,1254],{"class":86},[76,91304,91305,91307,91309,91311,91313],{"class":78,"line":1576},[76,91306,54740],{"class":136},[76,91308,51406],{"class":86},[76,91310,1686],{"class":136},[76,91312,51461],{"class":82},[76,91314,1254],{"class":86},[76,91316,91317,91319,91321,91323,91325],{"class":78,"line":1581},[76,91318,54754],{"class":136},[76,91320,51406],{"class":86},[76,91322,1686],{"class":136},[76,91324,51461],{"class":82},[76,91326,1254],{"class":86},[76,91328,91329,91331,91333,91335],{"class":78,"line":1587},[76,91330,54853],{"class":136},[76,91332,51406],{"class":86},[76,91334,89975],{"class":136},[76,91336,1254],{"class":86},[76,91338,91339,91341,91343,91345,91347],{"class":78,"line":1592},[76,91340,54891],{"class":136},[76,91342,51406],{"class":86},[76,91344,913],{"class":136},[76,91346,51461],{"class":82},[76,91348,1254],{"class":86},[76,91350,91351,91353,91355,91357],{"class":78,"line":1606},[76,91352,57385],{"class":136},[76,91354,51406],{"class":86},[76,91356,60811],{"class":136},[76,91358,1254],{"class":86},[76,91360,91361,91363,91365,91367],{"class":78,"line":1611},[76,91362,57255],{"class":136},[76,91364,51406],{"class":86},[76,91366,51561],{"class":136},[76,91368,1254],{"class":86},[76,91370,91371,91373,91375,91377,91379],{"class":78,"line":1617},[76,91372,90014],{"class":136},[76,91374,51406],{"class":86},[76,91376,407],{"class":136},[76,91378,51461],{"class":82},[76,91380,1254],{"class":86},[76,91382,91383],{"class":78,"line":1638},[76,91384,2151],{"class":86},[76,91386,91387,91389,91391],{"class":78,"line":1643},[76,91388,52386],{"class":86},[76,91390,5092],{"class":51269},[76,91392,51276],{"class":86},[76,91394,91395,91397,91399],{"class":78,"line":1657},[76,91396,51754],{"class":86},[76,91398,51303],{"class":51269},[76,91400,51276],{"class":86},[76,91402,91403],{"class":78,"line":1662},[76,91404,2365],{"emptyLinePlaceholder":2364},[76,91406,91407,91409,91411],{"class":78,"line":1691},[76,91408,998],{"class":86},[76,91410,51769],{"class":51269},[76,91412,51276],{"class":86},[76,91414,91415,91417,91419,91421,91423,91425,91427,91429],{"class":78,"line":1696},[76,91416,52113],{"class":86},[76,91418,51580],{"class":51269},[76,91420,53455],{"class":1927},[76,91422,133],{"class":86},[76,91424,53460],{"class":192},[76,91426,55283],{"class":86},[76,91428,51580],{"class":51269},[76,91430,51276],{"class":86},[76,91432,91433,91435,91437,91439,91441,91443,91445,91447],{"class":78,"line":1713},[76,91434,52113],{"class":86},[76,91436,51782],{"class":51269},[76,91438,55208],{"class":1927},[76,91440,133],{"class":86},[76,91442,88243],{"class":192},[76,91444,55283],{"class":86},[76,91446,51782],{"class":51269},[76,91448,51276],{"class":86},[76,91450,91451,91453,91455],{"class":78,"line":1718},[76,91452,52113],{"class":86},[76,91454,51782],{"class":51269},[76,91456,51276],{"class":86},[76,91458,91459,91461,91463,91465,91467,91469,91471,91473],{"class":78,"line":1723},[76,91460,11188],{"class":82},[76,91462,86902],{"class":136},[76,91464,13531],{"class":82},[76,91466,54365],{"class":86},[76,91468,54368],{"class":1927},[76,91470,87],{"class":86},[76,91472,90115],{"class":192},[76,91474,93],{"class":86},[76,91476,91477,91479,91481,91483],{"class":78,"line":1728},[76,91478,52188],{"class":82},[76,91480,9405],{"class":86},[76,91482,133],{"class":82},[76,91484,47302],{"class":136},[76,91486,91487,91489,91491],{"class":78,"line":1742},[76,91488,70053],{"class":82},[76,91490,90134],{"class":1927},[76,91492,10820],{"class":86},[76,91494,91495,91497,91499,91501],{"class":78,"line":1747},[76,91496,90141],{"class":86},[76,91498,133],{"class":82},[76,91500,2997],{"class":86},[76,91502,2667],{"class":82},[76,91504,91505],{"class":78,"line":2542},[76,91506,90152],{"class":146},[76,91508,91509],{"class":78,"line":2556},[76,91510,2151],{"class":86},[76,91512,91513],{"class":78,"line":2564},[76,91514,90161],{"class":146},[76,91516,91517],{"class":78,"line":2569},[76,91518,91519],{"class":146},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[76,91521,91522],{"class":78,"line":2575},[76,91523,91524],{"class":146},"    \u002F\u002F 1.声明一个定时器变量\n",[76,91526,91527],{"class":78,"line":2581},[76,91528,91529],{"class":146},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[76,91531,91532],{"class":78,"line":2586},[76,91533,91534],{"class":146},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[76,91536,91537],{"class":78,"line":7915},[76,91538,91539],{"class":146},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[76,91541,91542],{"class":78,"line":7939},[76,91543,91544],{"class":146},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[76,91546,91547,91549,91552,91554,91556,91558,91560],{"class":78,"line":7944},[76,91548,70053],{"class":82},[76,91550,91551],{"class":1927}," throttle",[76,91553,87],{"class":86},[76,91555,90606],{"class":5183},[76,91557,12402],{"class":86},[76,91559,808],{"class":5183},[76,91561,12409],{"class":86},[76,91563,91564,91566],{"class":78,"line":7950},[76,91565,79741],{"class":82},[76,91567,90619],{"class":86},[76,91569,91570,91572,91574],{"class":78,"line":7977},[76,91571,73951],{"class":82},[76,91573,58887],{"class":82},[76,91575,54421],{"class":86},[76,91577,91578,91580,91582,91584],{"class":78,"line":7982},[76,91579,2462],{"class":82},[76,91581,1622],{"class":86},[76,91583,314],{"class":82},[76,91585,91586],{"class":86},"timer) {\n",[76,91588,91589,91592,91594,91596,91598,91600],{"class":78,"line":7988},[76,91590,91591],{"class":86},"          timer ",[76,91593,133],{"class":82},[76,91595,90660],{"class":1927},[76,91597,87],{"class":86},[76,91599,54418],{"class":82},[76,91601,54421],{"class":86},[76,91603,91604,91607],{"class":78,"line":8000},[76,91605,91606],{"class":1927},"            fn",[76,91608,1940],{"class":86},[76,91610,91611],{"class":78,"line":8012},[76,91612,91613],{"class":146},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[76,91615,91616],{"class":78,"line":8024},[76,91617,91618],{"class":146},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[76,91620,91621,91624,91626],{"class":78,"line":9683},[76,91622,91623],{"class":86},"            timer ",[76,91625,133],{"class":82},[76,91627,91628],{"class":136}," null\n",[76,91630,91631],{"class":78,"line":9708},[76,91632,91633],{"class":146},"            \u002F\u002F 不能用clearTimeout(timer)\n",[76,91635,91636],{"class":78,"line":9731},[76,91637,91638],{"class":146},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[76,91640,91641],{"class":78,"line":9755},[76,91642,91643],{"class":86},"          }, t)\n",[76,91645,91646],{"class":78,"line":9760},[76,91647,2494],{"class":86},[76,91649,91650],{"class":78,"line":9765},[76,91651,52367],{"class":86},[76,91653,91654],{"class":78,"line":9770},[76,91655,2151],{"class":86},[76,91657,91658,91660,91662,91664,91666,91668,91670,91672,91674],{"class":78,"line":9779},[76,91659,90176],{"class":86},[76,91661,57782],{"class":1927},[76,91663,87],{"class":86},[76,91665,90183],{"class":192},[76,91667,12402],{"class":86},[76,91669,91142],{"class":1927},[76,91671,90192],{"class":86},[76,91673,65043],{"class":136},[76,91675,30466],{"class":86},[76,91677,91678,91680,91682],{"class":78,"line":9784},[76,91679,52386],{"class":86},[76,91681,51782],{"class":51269},[76,91683,51276],{"class":86},[76,91685,91686,91688,91690],{"class":78,"line":9790},[76,91687,51754],{"class":86},[76,91689,51769],{"class":51269},[76,91691,51276],{"class":86},[76,91693,91694],{"class":78,"line":9811},[76,91695,2365],{"emptyLinePlaceholder":2364},[76,91697,91698,91700,91702],{"class":78,"line":9817},[76,91699,51754],{"class":86},[76,91701,50604],{"class":51269},[76,91703,51276],{"class":86},[46,91705,91707],{"id":91706},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[66,91709,91711],{"className":53036,"code":91710,"language":53038,"meta":71,"style":71},"\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",[73,91712,91713,91721,91729,91734,91739,91744,91749,91753,91761],{"__ignoreMap":71},[76,91714,91715,91717,91719],{"class":78,"line":79},[76,91716,998],{"class":86},[76,91718,51769],{"class":51269},[76,91720,51276],{"class":86},[76,91722,91723,91725,91727],{"class":78,"line":96},[76,91724,52113],{"class":86},[76,91726,51782],{"class":51269},[76,91728,51276],{"class":86},[76,91730,91731],{"class":78,"line":1143},[76,91732,91733],{"class":86},"    let timer = null\n",[76,91735,91736],{"class":78,"line":1158},[76,91737,91738],{"class":86},"    timer = setTimeout(() => {\n",[76,91740,91741],{"class":78,"line":1164},[76,91742,91743],{"class":86},"      clearTimeout(timer)\n",[76,91745,91746],{"class":78,"line":1178},[76,91747,91748],{"class":86},"      console.log(timer)\n",[76,91750,91751],{"class":78,"line":1184},[76,91752,60194],{"class":86},[76,91754,91755,91757,91759],{"class":78,"line":1275},[76,91756,52386],{"class":86},[76,91758,51782],{"class":51269},[76,91760,51276],{"class":86},[76,91762,91763,91765,91767],{"class":78,"line":1281},[76,91764,51754],{"class":86},[76,91766,51769],{"class":51269},[76,91768,51276],{"class":86},[21,91770,91771],{},"输出为1",[21,91773,91774],{},"在开启的定时器里边写清除定时器",[21,91776,91777],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[46,91779,91781],{"id":91780},"_4174-节流综合案例","4.17.4 节流综合案例",[21,91783,91784],{},"页面打开，可以记录上一次的视频播放位置",[21,91786,91787],{},[1426,91788],{"alt":71,"src":91789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[21,91791,91792],{},[1426,91793],{"alt":71,"src":91794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[66,91796,91798],{"className":50602,"code":91797,"language":50604,"meta":71,"style":71},"\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",[73,91799,91800,91810,91824,91828,91836,91850,91870,91890,91912,91925,91933,91939,91949,91959,91969,91973,91977,91984,91997,92009,92013,92017,92027,92039,92053,92057,92061,92068,92078,92091,92103,92113,92123,92139,92151,92155,92159,92167,92177,92189,92199,92209,92219,92223,92227,92237,92248,92252,92260,92268,92272,92280,92295,92310,92325,92346,92354,92362,92377,92399,92407,92422,92448,92474,92500,92508,92516,92535,92543,92548,92567,92572,92590,92595,92600,92608,92613,92627,92635,92640,92657,92661,92666,92688,92692,92700,92708,92712],{"__ignoreMap":71},[76,91801,91802,91804,91806,91808],{"class":78,"line":79},[76,91803,51266],{"class":86},[76,91805,51270],{"class":51269},[76,91807,51273],{"class":1927},[76,91809,51276],{"class":86},[76,91811,91812,91814,91816,91818,91820,91822],{"class":78,"line":96},[76,91813,998],{"class":86},[76,91815,50604],{"class":51269},[76,91817,51285],{"class":1927},[76,91819,133],{"class":86},[76,91821,51290],{"class":192},[76,91823,51276],{"class":86},[76,91825,91826],{"class":78,"line":1143},[76,91827,2365],{"emptyLinePlaceholder":2364},[76,91829,91830,91832,91834],{"class":78,"line":1158},[76,91831,998],{"class":86},[76,91833,51303],{"class":51269},[76,91835,51276],{"class":86},[76,91837,91838,91840,91842,91844,91846,91848],{"class":78,"line":1164},[76,91839,52113],{"class":86},[76,91841,51313],{"class":51269},[76,91843,51316],{"class":1927},[76,91845,133],{"class":86},[76,91847,51321],{"class":192},[76,91849,59096],{"class":86},[76,91851,91852,91854,91856,91858,91860,91862,91864,91866,91868],{"class":78,"line":1178},[76,91853,52113],{"class":86},[76,91855,51313],{"class":51269},[76,91857,51332],{"class":1927},[76,91859,133],{"class":86},[76,91861,51337],{"class":192},[76,91863,51340],{"class":1927},[76,91865,133],{"class":86},[76,91867,51345],{"class":192},[76,91869,59096],{"class":86},[76,91871,91872,91874,91876,91878,91880,91882,91884,91886,91888],{"class":78,"line":1184},[76,91873,52113],{"class":86},[76,91875,51313],{"class":51269},[76,91877,14887],{"class":1927},[76,91879,133],{"class":86},[76,91881,51360],{"class":192},[76,91883,51340],{"class":1927},[76,91885,133],{"class":86},[76,91887,51367],{"class":192},[76,91889,59096],{"class":86},[76,91891,91892,91894,91896,91898,91900,91903,91905,91907,91910],{"class":78,"line":1275},[76,91893,52113],{"class":86},[76,91895,51313],{"class":51269},[76,91897,14887],{"class":1927},[76,91899,133],{"class":86},[76,91901,91902],{"class":192},"\"referrer\"",[76,91904,51340],{"class":1927},[76,91906,133],{"class":86},[76,91908,91909],{"class":192},"\"never\"",[76,91911,59096],{"class":86},[76,91913,91914,91916,91918,91921,91923],{"class":78,"line":1281},[76,91915,52113],{"class":86},[76,91917,51376],{"class":51269},[76,91919,91920],{"class":86},">综合案例\u003C\u002F",[76,91922,51376],{"class":51269},[76,91924,51276],{"class":86},[76,91926,91927,91929,91931],{"class":78,"line":1293},[76,91928,52113],{"class":86},[76,91930,5092],{"class":51269},[76,91932,51276],{"class":86},[76,91934,91935,91937],{"class":78,"line":1576},[76,91936,6370],{"class":51269},[76,91938,15539],{"class":86},[76,91940,91941,91943,91945,91947],{"class":78,"line":1581},[76,91942,54664],{"class":136},[76,91944,51406],{"class":86},[76,91946,279],{"class":136},[76,91948,1254],{"class":86},[76,91950,91951,91953,91955,91957],{"class":78,"line":1587},[76,91952,54675],{"class":136},[76,91954,51406],{"class":86},[76,91956,279],{"class":136},[76,91958,1254],{"class":86},[76,91960,91961,91963,91965,91967],{"class":78,"line":1592},[76,91962,72565],{"class":136},[76,91964,51406],{"class":86},[76,91966,60474],{"class":136},[76,91968,1254],{"class":86},[76,91970,91971],{"class":78,"line":1606},[76,91972,2151],{"class":86},[76,91974,91975],{"class":78,"line":1611},[76,91976,2365],{"emptyLinePlaceholder":2364},[76,91978,91979,91982],{"class":78,"line":1617},[76,91980,91981],{"class":1927},"    .container",[76,91983,15539],{"class":86},[76,91985,91986,91988,91990,91993,91995],{"class":78,"line":1638},[76,91987,54740],{"class":136},[76,91989,51406],{"class":86},[76,91991,91992],{"class":136},"1200",[76,91994,51461],{"class":82},[76,91996,1254],{"class":86},[76,91998,91999,92001,92003,92005,92007],{"class":78,"line":1643},[76,92000,54675],{"class":136},[76,92002,51406],{"class":86},[76,92004,279],{"class":136},[76,92006,51525],{"class":136},[76,92008,1254],{"class":86},[76,92010,92011],{"class":78,"line":1657},[76,92012,2151],{"class":86},[76,92014,92015],{"class":78,"line":1662},[76,92016,2365],{"emptyLinePlaceholder":2364},[76,92018,92019,92022,92025],{"class":78,"line":1691},[76,92020,92021],{"class":1927},"    .video",[76,92023,92024],{"class":51269}," video",[76,92026,15539],{"class":86},[76,92028,92029,92031,92033,92035,92037],{"class":78,"line":1696},[76,92030,54740],{"class":136},[76,92032,51406],{"class":86},[76,92034,399],{"class":136},[76,92036,416],{"class":82},[76,92038,1254],{"class":86},[76,92040,92041,92043,92045,92047,92049,92051],{"class":78,"line":1713},[76,92042,54664],{"class":136},[76,92044,51406],{"class":86},[76,92046,788],{"class":136},[76,92048,51461],{"class":82},[76,92050,4058],{"class":136},[76,92052,1254],{"class":86},[76,92054,92055],{"class":78,"line":1718},[76,92056,2151],{"class":86},[76,92058,92059],{"class":78,"line":1723},[76,92060,2365],{"emptyLinePlaceholder":2364},[76,92062,92063,92066],{"class":78,"line":1728},[76,92064,92065],{"class":1927},"    .elevator",[76,92067,15539],{"class":86},[76,92069,92070,92072,92074,92076],{"class":78,"line":1742},[76,92071,54728],{"class":136},[76,92073,51406],{"class":86},[76,92075,86202],{"class":136},[76,92077,1254],{"class":86},[76,92079,92080,92082,92084,92087,92089],{"class":78,"line":1747},[76,92081,54916],{"class":136},[76,92083,51406],{"class":86},[76,92085,92086],{"class":136},"280",[76,92088,51461],{"class":82},[76,92090,1254],{"class":86},[76,92092,92093,92095,92097,92099,92101],{"class":78,"line":2542},[76,92094,86396],{"class":136},[76,92096,51406],{"class":86},[76,92098,788],{"class":136},[76,92100,51461],{"class":82},[76,92102,1254],{"class":86},[76,92104,92105,92107,92109,92111],{"class":78,"line":2556},[76,92106,86209],{"class":136},[76,92108,51406],{"class":86},[76,92110,86214],{"class":136},[76,92112,1254],{"class":86},[76,92114,92115,92117,92119,92121],{"class":78,"line":2564},[76,92116,61690],{"class":136},[76,92118,51406],{"class":86},[76,92120,60811],{"class":136},[76,92122,1254],{"class":86},[76,92124,92125,92127,92129,92131,92133,92135,92137],{"class":78,"line":2569},[76,92126,61946],{"class":136},[76,92128,51406],{"class":86},[76,92130,305],{"class":136},[76,92132,51461],{"class":82},[76,92134,51490],{"class":136},[76,92136,62213],{"class":136},[76,92138,1254],{"class":86},[76,92140,92141,92143,92145,92147,92149],{"class":78,"line":2575},[76,92142,54740],{"class":136},[76,92144,51406],{"class":86},[76,92146,995],{"class":136},[76,92148,51461],{"class":82},[76,92150,1254],{"class":86},[76,92152,92153],{"class":78,"line":2581},[76,92154,2151],{"class":86},[76,92156,92157],{"class":78,"line":2586},[76,92158,2365],{"emptyLinePlaceholder":2364},[76,92160,92161,92163,92165],{"class":78,"line":7915},[76,92162,92065],{"class":1927},[76,92164,1362],{"class":51269},[76,92166,15539],{"class":86},[76,92168,92169,92171,92173,92175],{"class":78,"line":7939},[76,92170,54978],{"class":136},[76,92172,51406],{"class":86},[76,92174,60838],{"class":136},[76,92176,1254],{"class":86},[76,92178,92179,92181,92183,92185,92187],{"class":78,"line":7944},[76,92180,54664],{"class":136},[76,92182,51406],{"class":86},[76,92184,534],{"class":136},[76,92186,51461],{"class":82},[76,92188,1254],{"class":86},[76,92190,92191,92193,92195,92197],{"class":78,"line":7950},[76,92192,63939],{"class":136},[76,92194,51406],{"class":86},[76,92196,54706],{"class":136},[76,92198,1254],{"class":86},[76,92200,92201,92203,92205,92207],{"class":78,"line":7977},[76,92202,57255],{"class":136},[76,92204,51406],{"class":86},[76,92206,51561],{"class":136},[76,92208,1254],{"class":86},[76,92210,92211,92213,92215,92217],{"class":78,"line":7982},[76,92212,57385],{"class":136},[76,92214,51406],{"class":86},[76,92216,62039],{"class":136},[76,92218,1254],{"class":86},[76,92220,92221],{"class":78,"line":7988},[76,92222,2151],{"class":86},[76,92224,92225],{"class":78,"line":8000},[76,92226,2365],{"emptyLinePlaceholder":2364},[76,92228,92229,92231,92233,92235],{"class":78,"line":8012},[76,92230,92065],{"class":1927},[76,92232,1362],{"class":51269},[76,92234,63993],{"class":1927},[76,92236,15539],{"class":86},[76,92238,92239,92241,92243,92246],{"class":78,"line":8024},[76,92240,57385],{"class":136},[76,92242,51406],{"class":86},[76,92244,92245],{"class":136},"#1286ff",[76,92247,1254],{"class":86},[76,92249,92250],{"class":78,"line":9683},[76,92251,2151],{"class":86},[76,92253,92254,92256,92258],{"class":78,"line":9708},[76,92255,52386],{"class":86},[76,92257,5092],{"class":51269},[76,92259,51276],{"class":86},[76,92261,92262,92264,92266],{"class":78,"line":9731},[76,92263,51754],{"class":86},[76,92265,51303],{"class":51269},[76,92267,51276],{"class":86},[76,92269,92270],{"class":78,"line":9755},[76,92271,2365],{"emptyLinePlaceholder":2364},[76,92273,92274,92276,92278],{"class":78,"line":9760},[76,92275,998],{"class":86},[76,92277,51769],{"class":51269},[76,92279,51276],{"class":86},[76,92281,92282,92284,92286,92288,92290,92293],{"class":78,"line":9765},[76,92283,52113],{"class":86},[76,92285,51580],{"class":51269},[76,92287,53455],{"class":1927},[76,92289,133],{"class":86},[76,92291,92292],{"class":192},"\"container\"",[76,92294,51276],{"class":86},[76,92296,92297,92299,92301,92303,92305,92308],{"class":78,"line":9770},[76,92298,51310],{"class":86},[76,92300,51580],{"class":51269},[76,92302,53455],{"class":1927},[76,92304,133],{"class":86},[76,92306,92307],{"class":192},"\"header\"",[76,92309,51276],{"class":86},[76,92311,92312,92314,92316,92318,92320,92323],{"class":78,"line":9779},[76,92313,55203],{"class":86},[76,92315,326],{"class":51269},[76,92317,61026],{"class":1927},[76,92319,133],{"class":86},[76,92321,92322],{"class":192},"\"http:\u002F\u002Fpip.itcast.cn\"",[76,92324,51276],{"class":86},[76,92326,92327,92329,92331,92333,92335,92338,92340,92342,92344],{"class":78,"line":9784},[76,92328,55271],{"class":86},[76,92330,1426],{"class":51269},[76,92332,55208],{"class":1927},[76,92334,133],{"class":86},[76,92336,92337],{"class":192},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[76,92339,55216],{"class":1927},[76,92341,133],{"class":86},[76,92343,7619],{"class":192},[76,92345,59096],{"class":86},[76,92347,92348,92350,92352],{"class":78,"line":9790},[76,92349,55376],{"class":86},[76,92351,326],{"class":51269},[76,92353,51276],{"class":86},[76,92355,92356,92358,92360],{"class":78,"line":9811},[76,92357,51745],{"class":86},[76,92359,51580],{"class":51269},[76,92361,51276],{"class":86},[76,92363,92364,92366,92368,92370,92372,92375],{"class":78,"line":9817},[76,92365,51310],{"class":86},[76,92367,51580],{"class":51269},[76,92369,53455],{"class":1927},[76,92371,133],{"class":86},[76,92373,92374],{"class":192},"\"video\"",[76,92376,51276],{"class":86},[76,92378,92379,92381,92383,92385,92387,92390,92393,92395,92397],{"class":78,"line":9831},[76,92380,55203],{"class":86},[76,92382,28152],{"class":51269},[76,92384,55208],{"class":1927},[76,92386,133],{"class":86},[76,92388,92389],{"class":192},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[76,92391,92392],{"class":1927}," controls",[76,92394,55283],{"class":86},[76,92396,28152],{"class":51269},[76,92398,51276],{"class":86},[76,92400,92401,92403,92405],{"class":78,"line":9837},[76,92402,51745],{"class":86},[76,92404,51580],{"class":51269},[76,92406,51276],{"class":86},[76,92408,92409,92411,92413,92415,92417,92420],{"class":78,"line":9864},[76,92410,51310],{"class":86},[76,92412,51580],{"class":51269},[76,92414,53455],{"class":1927},[76,92416,133],{"class":86},[76,92418,92419],{"class":192},"\"elevator\"",[76,92421,51276],{"class":86},[76,92423,92424,92426,92428,92430,92432,92434,92437,92439,92441,92444,92446],{"class":78,"line":9873},[76,92425,55203],{"class":86},[76,92427,326],{"class":51269},[76,92429,61026],{"class":1927},[76,92431,133],{"class":86},[76,92433,64205],{"class":192},[76,92435,92436],{"class":1927}," data-ref",[76,92438,133],{"class":86},[76,92440,92374],{"class":192},[76,92442,92443],{"class":86},">视频介绍\u003C\u002F",[76,92445,326],{"class":51269},[76,92447,51276],{"class":86},[76,92449,92450,92452,92454,92456,92458,92460,92462,92464,92467,92470,92472],{"class":78,"line":9879},[76,92451,55203],{"class":86},[76,92453,326],{"class":51269},[76,92455,61026],{"class":1927},[76,92457,133],{"class":86},[76,92459,64205],{"class":192},[76,92461,92436],{"class":1927},[76,92463,133],{"class":86},[76,92465,92466],{"class":192},"\"intro\"",[76,92468,92469],{"class":86},">课程简介\u003C\u002F",[76,92471,326],{"class":51269},[76,92473,51276],{"class":86},[76,92475,92476,92478,92480,92482,92484,92486,92488,92490,92493,92496,92498],{"class":78,"line":9887},[76,92477,55203],{"class":86},[76,92479,326],{"class":51269},[76,92481,61026],{"class":1927},[76,92483,133],{"class":86},[76,92485,64205],{"class":192},[76,92487,92436],{"class":1927},[76,92489,133],{"class":86},[76,92491,92492],{"class":192},"\"outline\"",[76,92494,92495],{"class":86},">评论列表\u003C\u002F",[76,92497,326],{"class":51269},[76,92499,51276],{"class":86},[76,92501,92502,92504,92506],{"class":78,"line":9892},[76,92503,51745],{"class":86},[76,92505,51580],{"class":51269},[76,92507,51276],{"class":86},[76,92509,92510,92512,92514],{"class":78,"line":16571},[76,92511,52386],{"class":86},[76,92513,51580],{"class":51269},[76,92515,51276],{"class":86},[76,92517,92518,92520,92522,92524,92526,92529,92531,92533],{"class":78,"line":16577},[76,92519,52113],{"class":86},[76,92521,51782],{"class":51269},[76,92523,55208],{"class":1927},[76,92525,133],{"class":86},[76,92527,92528],{"class":192},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[76,92530,55283],{"class":86},[76,92532,51782],{"class":51269},[76,92534,51276],{"class":86},[76,92536,92537,92539,92541],{"class":78,"line":16600},[76,92538,52113],{"class":86},[76,92540,51782],{"class":51269},[76,92542,51276],{"class":86},[76,92544,92545],{"class":78,"line":16606},[76,92546,92547],{"class":146},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[76,92549,92550,92552,92554,92556,92558,92560,92562,92565],{"class":78,"line":16629},[76,92551,11188],{"class":82},[76,92553,92024],{"class":136},[76,92555,13531],{"class":82},[76,92557,54365],{"class":86},[76,92559,54368],{"class":1927},[76,92561,87],{"class":86},[76,92563,92564],{"class":192},"'video'",[76,92566,93],{"class":86},[76,92568,92569],{"class":78,"line":16643},[76,92570,92571],{"class":146},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[76,92573,92574,92577,92579,92581,92583,92586,92588],{"class":78,"line":16663},[76,92575,92576],{"class":86},"    video.ontimeupdate ",[76,92578,133],{"class":82},[76,92580,88324],{"class":86},[76,92582,91142],{"class":1927},[76,92584,92585],{"class":86},"(() ",[76,92587,84691],{"class":82},[76,92589,15539],{"class":86},[76,92591,92592],{"class":78,"line":16669},[76,92593,92594],{"class":146},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[76,92596,92597],{"class":78,"line":16680},[76,92598,92599],{"class":146},"      \u002F\u002F 控制台输出当前的时间\n",[76,92601,92602,92605],{"class":78,"line":16703},[76,92603,92604],{"class":146},"      \u002F\u002F console.log(video.currentTime)",[76,92606,92607],{"class":146},"  \u002F\u002F获得当前的视频时间\n",[76,92609,92610],{"class":78,"line":16725},[76,92611,92612],{"class":146},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[76,92614,92615,92617,92619,92621,92624],{"class":78,"line":16730},[76,92616,74652],{"class":86},[76,92618,71623],{"class":1927},[76,92620,87],{"class":86},[76,92622,92623],{"class":192},"'currentTime'",[76,92625,92626],{"class":86},", video.currentTime)\n",[76,92628,92629,92631,92633],{"class":78,"line":16736},[76,92630,54504],{"class":86},[76,92632,6377],{"class":136},[76,92634,93],{"class":86},[76,92636,92637],{"class":78,"line":16750},[76,92638,92639],{"class":146},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[76,92641,92642,92645,92648,92650,92653,92655],{"class":78,"line":16763},[76,92643,92644],{"class":86},"    video.",[76,92646,92647],{"class":1927},"onloadeddata",[76,92649,13531],{"class":82},[76,92651,92652],{"class":86}," () ",[76,92654,84691],{"class":82},[76,92656,15539],{"class":86},[76,92658,92659],{"class":78,"line":16768},[76,92660,59981],{"class":146},[76,92662,92663],{"class":78,"line":16782},[76,92664,92665],{"class":146},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[76,92667,92668,92671,92673,92676,92678,92680,92682,92684,92686],{"class":78,"line":16787},[76,92669,92670],{"class":86},"      video.currentTime ",[76,92672,133],{"class":82},[76,92674,92675],{"class":86}," localStorage.",[76,92677,71654],{"class":1927},[76,92679,87],{"class":86},[76,92681,92623],{"class":192},[76,92683,13681],{"class":86},[76,92685,71326],{"class":82},[76,92687,47302],{"class":136},[76,92689,92690],{"class":78,"line":16793},[76,92691,2151],{"class":86},[76,92693,92694,92696,92698],{"class":78,"line":16798},[76,92695,52386],{"class":86},[76,92697,51782],{"class":51269},[76,92699,51276],{"class":86},[76,92701,92702,92704,92706],{"class":78,"line":16812},[76,92703,51754],{"class":86},[76,92705,51769],{"class":51269},[76,92707,51276],{"class":86},[76,92709,92710],{"class":78,"line":16817},[76,92711,2365],{"emptyLinePlaceholder":2364},[76,92713,92714,92716,92718],{"class":78,"line":16822},[76,92715,51754],{"class":86},[76,92717,50604],{"class":51269},[76,92719,51276],{"class":86},[5092,92721,92722],{},"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":71,"searchDepth":96,"depth":96,"links":92724},[92725,92730,92734,92735,92736,92741,92746,92747,92748,92749,92756,92761,92762,92772,92776,92777,92781],{"id":76660,"depth":96,"text":76661,"children":92726},[92727,92728,92729],{"id":76664,"depth":1143,"text":76665},{"id":76689,"depth":1143,"text":76690},{"id":76701,"depth":1143,"text":76702},{"id":76713,"depth":96,"text":76714,"children":92731},[92732,92733],{"id":76717,"depth":1143,"text":76718},{"id":76732,"depth":1143,"text":76733},{"id":76784,"depth":96,"text":76785},{"id":76828,"depth":96,"text":76829},{"id":76845,"depth":96,"text":76846,"children":92737},[92738,92739,92740],{"id":76849,"depth":1143,"text":76850},{"id":76862,"depth":1143,"text":76863},{"id":76967,"depth":1143,"text":76968},{"id":77256,"depth":96,"text":77257,"children":92742},[92743,92744,92745],{"id":77260,"depth":1143,"text":77261},{"id":77703,"depth":1143,"text":77704},{"id":78114,"depth":1143,"text":78115},{"id":78177,"depth":96,"text":78178},{"id":78256,"depth":96,"text":78257},{"id":78349,"depth":96,"text":78350},{"id":80194,"depth":96,"text":80195,"children":92750},[92751,92752,92753,92754,92755],{"id":80198,"depth":1143,"text":80199},{"id":80210,"depth":1143,"text":80211},{"id":80429,"depth":1143,"text":80430},{"id":80447,"depth":1143,"text":80448},{"id":80507,"depth":1143,"text":80508},{"id":84775,"depth":96,"text":84776,"children":92757},[92758,92759,92760],{"id":84779,"depth":1143,"text":84780},{"id":84797,"depth":1143,"text":84798},{"id":84823,"depth":1143,"text":84824},{"id":84832,"depth":96,"text":84833},{"id":84854,"depth":96,"text":84855,"children":92763},[92764,92765,92766,92767,92768,92769,92770,92771],{"id":84858,"depth":1143,"text":84859},{"id":85119,"depth":1143,"text":85120},{"id":85305,"depth":1143,"text":85306},{"id":85672,"depth":1143,"text":85673},{"id":85788,"depth":1143,"text":85789},{"id":85824,"depth":1143,"text":85825},{"id":85871,"depth":1143,"text":85872},{"id":85905,"depth":1143,"text":85906},{"id":87268,"depth":96,"text":87269,"children":92773},[92774,92775],{"id":87272,"depth":1143,"text":87273},{"id":87309,"depth":1143,"text":87310},{"id":88664,"depth":96,"text":88665},{"id":89035,"depth":96,"text":89036,"children":92778},[92779,92780],{"id":89039,"depth":1143,"text":89040},{"id":89073,"depth":1143,"text":89074},{"id":89802,"depth":96,"text":89803,"children":92782},[92783,92784,92785,92786],{"id":89806,"depth":1143,"text":89807},{"id":90764,"depth":1143,"text":90765},{"id":91706,"depth":1143,"text":91707},{"id":91780,"depth":1143,"text":91781},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76649,"description":23344},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92793,"title":92794,"body":92795,"description":92806,"extension":5123,"meta":92807,"navigation":2364,"path":92809,"seo":92810,"stem":92811,"__hash__":92812},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":9,"value":92796,"toc":92804},[92797],[21,92798,92799,92800],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[326,92801,92802],{"href":92802,"rel":92803},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23833],{"title":71,"searchDepth":96,"depth":96,"links":92805},[],"三件套第三套学习",{"category":92808},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92794,"description":92806},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92814,"title":92815,"body":92816,"description":23344,"extension":5123,"meta":92921,"navigation":2364,"path":92922,"seo":92923,"stem":92924,"__hash__":92925},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":9,"value":92817,"toc":92916},[92818,92825,92828,92831,92834,92838,92847,92850,92853,92857,92866,92869,92873,92876,92896,92899,92913],[21,92819,92820],{},[326,92821,92824],{"href":92822,"rel":92823},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23833],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[12,92826,92815],{"id":92827},"_1安装",[21,92829,92830],{},"numpy是科学计算基础库,底层是C语言",[21,92832,92833],{},"三种方式：",[16,92835,92837],{"id":92836},"_11-通过pip安装","1.1 通过pip安装",[66,92839,92841],{"className":30347,"code":92840,"language":30349,"meta":71,"style":71},"pip install numpy\n",[73,92842,92843],{"__ignoreMap":71},[76,92844,92845],{"class":78,"line":79},[76,92846,92840],{"class":86},[21,92848,92849],{},"首选方式，自动处理依赖项",[21,92851,92852],{},"在提示系统命令符中使用cmd",[16,92854,92856],{"id":92855},"_12-通过anaconda安装","1.2 通过Anaconda安装",[66,92858,92860],{"className":30347,"code":92859,"language":30349,"meta":71,"style":71},"conda install numpy\n",[73,92861,92862],{"__ignoreMap":71},[76,92863,92864],{"class":78,"line":79},[76,92865,92859],{"class":86},[21,92867,92868],{},"自动解决环境依赖",[16,92870,92872],{"id":92871},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[21,92874,92875],{},"对于Debian\u002FUbuntu",[66,92877,92879],{"className":30347,"code":92878,"language":30349,"meta":71,"style":71},"sudo apt-get install python3-numpy\n",[73,92880,92881],{"__ignoreMap":71},[76,92882,92883,92886,92888,92891,92893],{"class":78,"line":79},[76,92884,92885],{"class":86},"sudo apt",[76,92887,620],{"class":82},[76,92889,92890],{"class":86},"get install python3",[76,92892,620],{"class":82},[76,92894,92895],{"class":86},"numpy\n",[21,92897,92898],{},"对于Fedora:",[66,92900,92902],{"className":30347,"code":92901,"language":30349,"meta":71,"style":71},"sudo dnf install python3-numpy\n",[73,92903,92904],{"__ignoreMap":71},[76,92905,92906,92909,92911],{"class":78,"line":79},[76,92907,92908],{"class":86},"sudo dnf install python3",[76,92910,620],{"class":82},[76,92912,92895],{"class":86},[5092,92914,92915],{},"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":71,"searchDepth":96,"depth":96,"links":92917},[92918,92919,92920],{"id":92836,"depth":96,"text":92837},{"id":92855,"depth":96,"text":92856},{"id":92871,"depth":96,"text":92872},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92815,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92927,"title":92928,"body":92929,"description":23344,"extension":5123,"meta":93042,"navigation":2364,"path":93043,"seo":93044,"stem":93045,"__hash__":93046},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":9,"value":92930,"toc":93040},[92931,92934,92937,92940,92943,92946,92949,92952,92955,92958,93034,93037],[12,92932,92928],{"id":92933},"_10算数函数",[21,92935,92936],{},"加减乘除运算跟python基础语法没区别",[21,92938,92939],{},"除了python那种方法外还可以使用函数",[21,92941,92942],{},"加：np.add(a,b)",[21,92944,92945],{},"减：np.subtract(a,b)",[21,92947,92948],{},"乘：np.multiply(a,b)",[21,92950,92951],{},"除：np.divide(a,b) == a\u002Fb",[21,92953,92954],{},"取余：np.mod(a,b) == a%b",[21,92956,92957],{},"必须会的用法：",[66,92959,92961],{"className":30347,"code":92960,"language":30349,"meta":71,"style":71},"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",[73,92962,92963,92985,93006,93016,93029],{"__ignoreMap":71},[76,92964,92965,92967,92969,92972,92974,92977,92979,92981,92983],{"class":78,"line":79},[76,92966,326],{"class":86},[76,92968,133],{"class":82},[76,92970,92971],{"class":86},"np.arange(",[76,92973,508],{"class":136},[76,92975,92976],{"class":86},").reshape(",[76,92978,159],{"class":136},[76,92980,466],{"class":86},[76,92982,159],{"class":136},[76,92984,93],{"class":86},[76,92986,92987,92989,92991,92994,92996,92998,93000,93002,93004],{"class":78,"line":96},[76,92988,351],{"class":86},[76,92990,133],{"class":82},[76,92992,92993],{"class":86},"np.array([",[76,92995,534],{"class":136},[76,92997,466],{"class":86},[76,92999,534],{"class":136},[76,93001,466],{"class":86},[76,93003,534],{"class":136},[76,93005,4622],{"class":86},[76,93007,93008,93011,93013],{"class":78,"line":1143},[76,93009,93010],{"class":86},"result",[76,93012,133],{"class":82},[76,93014,93015],{"class":86},"np.empty_like(a)\n",[76,93017,93018,93021,93024,93026],{"class":78,"line":1158},[76,93019,93020],{"class":86},"np.add(a,b,",[76,93022,93023],{"class":5183},"out",[76,93025,133],{"class":82},[76,93027,93028],{"class":86},"result)\n",[76,93030,93031],{"class":78,"line":1164},[76,93032,93033],{"class":86},"result\n",[21,93035,93036],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5092,93038,93039],{},"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":71,"searchDepth":96,"depth":96,"links":93041},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92928,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93048,"title":93049,"body":93050,"description":23344,"extension":5123,"meta":93812,"navigation":2364,"path":93813,"seo":93814,"stem":93815,"__hash__":93816},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":9,"value":93051,"toc":93799},[93052,93055,93058,93061,93065,93104,93108,93152,93212,93216,93219,93258,93261,93306,93310,93346,93350,93419,93423,93487,93491,93494,93497,93500,93503,93539,93543,93583,93587,93659,93662,93666,93729,93733,93796],[12,93053,93049],{"id":93054},"_11统计函数",[21,93056,93057],{},"sum max min mean",[21,93059,93060],{},"这些有axis参数，可以指定方向",[16,93062,93064],{"id":93063},"_111-sum求和函数","11.1 sum()求和函数",[66,93066,93068],{"className":30347,"code":93067,"language":30349,"meta":71,"style":71},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[73,93069,93070,93075,93096],{"__ignoreMap":71},[76,93071,93072],{"class":78,"line":79},[76,93073,93074],{"class":146},"#创建一维数组\n",[76,93076,93077,93079,93081,93084,93086,93088,93090,93092,93094],{"class":78,"line":96},[76,93078,326],{"class":86},[76,93080,133],{"class":82},[76,93082,93083],{"class":86},"np.random.randint(",[76,93085,305],{"class":136},[76,93087,466],{"class":86},[76,93089,399],{"class":136},[76,93091,466],{"class":86},[76,93093,788],{"class":136},[76,93095,93],{"class":86},[76,93097,93098,93101],{"class":78,"line":1143},[76,93099,93100],{"class":86},"np.sum(a)",[76,93102,93103],{"class":146},"#求和\n",[16,93105,93107],{"id":93106},"_112-max求最大值函数","11.2 max()求最大值函数",[66,93109,93111],{"className":30347,"code":93110,"language":30349,"meta":71,"style":71},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[73,93112,93113,93117,93137,93142,93147],{"__ignoreMap":71},[76,93114,93115],{"class":78,"line":79},[76,93116,93074],{"class":146},[76,93118,93119,93121,93123,93125,93127,93129,93131,93133,93135],{"class":78,"line":96},[76,93120,326],{"class":86},[76,93122,133],{"class":82},[76,93124,93083],{"class":86},[76,93126,305],{"class":136},[76,93128,466],{"class":86},[76,93130,399],{"class":136},[76,93132,466],{"class":86},[76,93134,788],{"class":136},[76,93136,93],{"class":86},[76,93138,93139],{"class":78,"line":1143},[76,93140,93141],{"class":86},"np.max(a)\n",[76,93143,93144],{"class":78,"line":1158},[76,93145,93146],{"class":146},"#最大索引(求最大元素的索引)arg\n",[76,93148,93149],{"class":78,"line":1164},[76,93150,93151],{"class":86},"np.argmax(a)\n",[66,93153,93155],{"className":30347,"code":93154,"language":30349,"meta":71,"style":71},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[73,93156,93157,93178,93198,93202],{"__ignoreMap":71},[76,93158,93159,93161,93163,93166,93168,93170,93172,93174,93176],{"class":78,"line":79},[76,93160,10886],{"class":86},[76,93162,133],{"class":82},[76,93164,93165],{"class":86}," np.array([",[76,93167,305],{"class":136},[76,93169,12402],{"class":86},[76,93171,407],{"class":136},[76,93173,12402],{"class":86},[76,93175,159],{"class":136},[76,93177,4622],{"class":86},[76,93179,93180,93182,93184,93186,93188,93190,93192,93194,93196],{"class":78,"line":96},[76,93181,10912],{"class":86},[76,93183,133],{"class":82},[76,93185,93165],{"class":86},[76,93187,159],{"class":136},[76,93189,12402],{"class":86},[76,93191,165],{"class":136},[76,93193,12402],{"class":86},[76,93195,381],{"class":136},[76,93197,4622],{"class":86},[76,93199,93200],{"class":78,"line":1143},[76,93201,2365],{"emptyLinePlaceholder":2364},[76,93203,93204,93206,93209],{"class":78,"line":1158},[76,93205,30384],{"class":136},[76,93207,93208],{"class":86},"(np.maximum(a, b))   ",[76,93210,93211],{"class":146},"# [3 5 4]，每个位置上取较大值\n",[16,93213,93215],{"id":93214},"_113-mean求平均值函数","11.3 mean()求平均值函数",[21,93217,93218],{},"①一维数组：",[66,93220,93222],{"className":30347,"code":93221,"language":30349,"meta":71,"style":71},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[73,93223,93224,93228,93248,93253],{"__ignoreMap":71},[76,93225,93226],{"class":78,"line":79},[76,93227,93074],{"class":146},[76,93229,93230,93232,93234,93236,93238,93240,93242,93244,93246],{"class":78,"line":96},[76,93231,326],{"class":86},[76,93233,133],{"class":82},[76,93235,93083],{"class":86},[76,93237,305],{"class":136},[76,93239,466],{"class":86},[76,93241,399],{"class":136},[76,93243,466],{"class":86},[76,93245,788],{"class":136},[76,93247,93],{"class":86},[76,93249,93250],{"class":78,"line":1143},[76,93251,93252],{"class":146},"#求平均值\n",[76,93254,93255],{"class":78,"line":1158},[76,93256,93257],{"class":86},"np.mean(a)\n",[21,93259,93260],{},"②二维数组",[66,93262,93264],{"className":30347,"code":93263,"language":30349,"meta":71,"style":71},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[73,93265,93266,93271,93296,93301],{"__ignoreMap":71},[76,93267,93268],{"class":78,"line":79},[76,93269,93270],{"class":146},"#二维数组\n",[76,93272,93273,93276,93278,93280,93282,93284,93286,93288,93290,93292,93294],{"class":78,"line":96},[76,93274,93275],{"class":86},"aa",[76,93277,133],{"class":82},[76,93279,92971],{"class":86},[76,93281,305],{"class":136},[76,93283,466],{"class":86},[76,93285,611],{"class":136},[76,93287,92976],{"class":86},[76,93289,159],{"class":136},[76,93291,466],{"class":86},[76,93293,381],{"class":136},[76,93295,93],{"class":86},[76,93297,93298],{"class":78,"line":1143},[76,93299,93300],{"class":146},"#对数组中的所有数求平均\n",[76,93302,93303],{"class":78,"line":1158},[76,93304,93305],{"class":86},"np.mean(aa)\n",[16,93307,93309],{"id":93308},"_114-median求中位数函数","11.4 median()求中位数函数",[66,93311,93313],{"className":30347,"code":93312,"language":30349,"meta":71,"style":71},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[73,93314,93315,93320,93336,93341],{"__ignoreMap":71},[76,93316,93317],{"class":78,"line":79},[76,93318,93319],{"class":146},"#求中位数\n",[76,93321,93322,93324,93326,93328,93330,93332,93334],{"class":78,"line":96},[76,93323,351],{"class":86},[76,93325,133],{"class":82},[76,93327,92971],{"class":86},[76,93329,305],{"class":136},[76,93331,466],{"class":86},[76,93333,534],{"class":136},[76,93335,93],{"class":86},[76,93337,93338],{"class":78,"line":1143},[76,93339,93340],{"class":86},"np.median(b)\n",[76,93342,93343],{"class":78,"line":1158},[76,93344,93345],{"class":146},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[16,93347,93349],{"id":93348},"_115-power求幂运算函数","11.5 power()求幂运算函数",[66,93351,93353],{"className":30347,"code":93352,"language":30349,"meta":71,"style":71},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[73,93354,93355,93371,93376,93381,93390,93395,93404],{"__ignoreMap":71},[76,93356,93357,93359,93361,93363,93365,93367,93369],{"class":78,"line":79},[76,93358,351],{"class":86},[76,93360,133],{"class":82},[76,93362,92971],{"class":86},[76,93364,305],{"class":136},[76,93366,466],{"class":86},[76,93368,534],{"class":136},[76,93370,93],{"class":86},[76,93372,93373],{"class":78,"line":96},[76,93374,93375],{"class":146},"#幂运算\n",[76,93377,93378],{"class":78,"line":1143},[76,93379,93380],{"class":146},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[76,93382,93383,93386,93388],{"class":78,"line":1158},[76,93384,93385],{"class":86},"np.power(b,",[76,93387,165],{"class":136},[76,93389,93],{"class":86},[76,93391,93392],{"class":78,"line":1164},[76,93393,93394],{"class":146},"#或者以下代码，将数据存储起来\n",[76,93396,93397,93399,93401],{"class":78,"line":1178},[76,93398,933],{"class":86},[76,93400,133],{"class":82},[76,93402,93403],{"class":86},"np.empty_like(b)\n",[76,93405,93406,93408,93410,93412,93414,93416],{"class":78,"line":1184},[76,93407,93385],{"class":86},[76,93409,165],{"class":136},[76,93411,466],{"class":86},[76,93413,93023],{"class":5183},[76,93415,133],{"class":82},[76,93417,93418],{"class":86},"y)\n",[16,93420,93422],{"id":93421},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[66,93424,93426],{"className":30347,"code":93425,"language":30349,"meta":71,"style":71},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[73,93427,93428,93444,93449,93454,93458,93476],{"__ignoreMap":71},[76,93429,93430,93432,93434,93436,93438,93440,93442],{"class":78,"line":79},[76,93431,351],{"class":86},[76,93433,133],{"class":82},[76,93435,92971],{"class":86},[76,93437,305],{"class":136},[76,93439,466],{"class":86},[76,93441,534],{"class":136},[76,93443,93],{"class":86},[76,93445,93446],{"class":78,"line":96},[76,93447,93448],{"class":146},"#开方\n",[76,93450,93451],{"class":78,"line":1143},[76,93452,93453],{"class":86},"np.sqrt(b)\n",[76,93455,93456],{"class":78,"line":1158},[76,93457,93394],{"class":146},[76,93459,93460,93462,93464,93467,93470,93472,93474],{"class":78,"line":1164},[76,93461,933],{"class":86},[76,93463,133],{"class":82},[76,93465,93466],{"class":86},"np.empty_like(b,",[76,93468,93469],{"class":5183},"dtype",[76,93471,133],{"class":82},[76,93473,127],{"class":136},[76,93475,93],{"class":86},[76,93477,93478,93481,93483,93485],{"class":78,"line":1178},[76,93479,93480],{"class":86},"np.sqrt(b,",[76,93482,93023],{"class":5183},[76,93484,133],{"class":82},[76,93486,93418],{"class":86},[16,93488,93490],{"id":93489},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[21,93492,93493],{},"对数组中的元素累计求和，可指定轴",[21,93495,93496],{},"#累计求和的意思是：",[21,93498,93499],{},"a = np.array([1, 2, 3, 4])",[21,93501,93502],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[66,93504,93506],{"className":30347,"code":93505,"language":30349,"meta":71,"style":71},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[73,93507,93508,93524,93529,93534],{"__ignoreMap":71},[76,93509,93510,93512,93514,93516,93518,93520,93522],{"class":78,"line":79},[76,93511,351],{"class":86},[76,93513,133],{"class":82},[76,93515,92971],{"class":86},[76,93517,305],{"class":136},[76,93519,466],{"class":86},[76,93521,534],{"class":136},[76,93523,93],{"class":86},[76,93525,93526],{"class":78,"line":96},[76,93527,93528],{"class":86},"np.cumsum(b)\n",[76,93530,93531],{"class":78,"line":1143},[76,93532,93533],{"class":146},"#结果：\n",[76,93535,93536],{"class":78,"line":1158},[76,93537,93538],{"class":146},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[16,93540,93542],{"id":93541},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[66,93544,93546],{"className":30347,"code":93545,"language":30349,"meta":71,"style":71},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[73,93547,93548,93564,93569,93574,93578],{"__ignoreMap":71},[76,93549,93550,93552,93554,93556,93558,93560,93562],{"class":78,"line":79},[76,93551,351],{"class":86},[76,93553,133],{"class":82},[76,93555,92971],{"class":86},[76,93557,305],{"class":136},[76,93559,466],{"class":86},[76,93561,534],{"class":136},[76,93563,93],{"class":86},[76,93565,93566],{"class":78,"line":96},[76,93567,93568],{"class":146},"#对数组中的元素累计求积，可指定轴\n",[76,93570,93571],{"class":78,"line":1143},[76,93572,93573],{"class":86},"np.cumprod(b)\n",[76,93575,93576],{"class":78,"line":1158},[76,93577,93533],{"class":146},[76,93579,93580],{"class":78,"line":1164},[76,93581,93582],{"class":146},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[16,93584,93586],{"id":93585},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[66,93588,93590],{"className":30347,"code":93589,"language":30349,"meta":71,"style":71},"#删除数组中的重复数据，并对数据进行排序\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",[73,93591,93592,93597,93645,93650,93654],{"__ignoreMap":71},[76,93593,93594],{"class":78,"line":79},[76,93595,93596],{"class":146},"#删除数组中的重复数据，并对数据进行排序\n",[76,93598,93599,93601,93603,93605,93607,93609,93611,93613,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643],{"class":78,"line":96},[76,93600,326],{"class":86},[76,93602,133],{"class":82},[76,93604,92993],{"class":86},[76,93606,305],{"class":136},[76,93608,466],{"class":86},[76,93610,165],{"class":136},[76,93612,466],{"class":86},[76,93614,159],{"class":136},[76,93616,466],{"class":86},[76,93618,586],{"class":136},[76,93620,466],{"class":86},[76,93622,159],{"class":136},[76,93624,466],{"class":86},[76,93626,534],{"class":136},[76,93628,466],{"class":86},[76,93630,285],{"class":136},[76,93632,466],{"class":86},[76,93634,279],{"class":136},[76,93636,466],{"class":86},[76,93638,863],{"class":136},[76,93640,466],{"class":86},[76,93642,381],{"class":136},[76,93644,4622],{"class":86},[76,93646,93647],{"class":78,"line":1143},[76,93648,93649],{"class":86},"np.unique(a)\n",[76,93651,93652],{"class":78,"line":1158},[76,93653,93533],{"class":146},[76,93655,93656],{"class":78,"line":1164},[76,93657,93658],{"class":146},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[21,93660,93661],{},"升序形式排序",[16,93663,93665],{"id":93664},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[66,93667,93669],{"className":30347,"code":93668,"language":30349,"meta":71,"style":71},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[73,93670,93671,93719,93724],{"__ignoreMap":71},[76,93672,93673,93675,93677,93679,93681,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717],{"class":78,"line":79},[76,93674,326],{"class":86},[76,93676,133],{"class":82},[76,93678,92993],{"class":86},[76,93680,305],{"class":136},[76,93682,466],{"class":86},[76,93684,165],{"class":136},[76,93686,466],{"class":86},[76,93688,159],{"class":136},[76,93690,466],{"class":86},[76,93692,586],{"class":136},[76,93694,466],{"class":86},[76,93696,159],{"class":136},[76,93698,466],{"class":86},[76,93700,534],{"class":136},[76,93702,466],{"class":86},[76,93704,285],{"class":136},[76,93706,466],{"class":86},[76,93708,279],{"class":136},[76,93710,466],{"class":86},[76,93712,863],{"class":136},[76,93714,466],{"class":86},[76,93716,381],{"class":136},[76,93718,4622],{"class":86},[76,93720,93721],{"class":78,"line":96},[76,93722,93723],{"class":146},"#返回数组中非零元素的索引\n",[76,93725,93726],{"class":78,"line":1143},[76,93727,93728],{"class":86},"np.nonzero(a)\n",[16,93730,93732],{"id":93731},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[66,93734,93736],{"className":30347,"code":93735,"language":30349,"meta":71,"style":71},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[73,93737,93738,93786,93791],{"__ignoreMap":71},[76,93739,93740,93742,93744,93746,93748,93750,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784],{"class":78,"line":79},[76,93741,326],{"class":86},[76,93743,133],{"class":82},[76,93745,92993],{"class":86},[76,93747,305],{"class":136},[76,93749,466],{"class":86},[76,93751,165],{"class":136},[76,93753,466],{"class":86},[76,93755,159],{"class":136},[76,93757,466],{"class":86},[76,93759,586],{"class":136},[76,93761,466],{"class":86},[76,93763,159],{"class":136},[76,93765,466],{"class":86},[76,93767,534],{"class":136},[76,93769,466],{"class":86},[76,93771,285],{"class":136},[76,93773,466],{"class":86},[76,93775,279],{"class":136},[76,93777,466],{"class":86},[76,93779,863],{"class":136},[76,93781,466],{"class":86},[76,93783,381],{"class":136},[76,93785,4622],{"class":86},[76,93787,93788],{"class":78,"line":96},[76,93789,93790],{"class":146},"#计算一组数中最大值与最小值的差，可指定轴\n",[76,93792,93793],{"class":78,"line":1143},[76,93794,93795],{"class":86},"np.ptp(a)\n",[5092,93797,93798],{},"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":71,"searchDepth":96,"depth":96,"links":93800},[93801,93802,93803,93804,93805,93806,93807,93808,93809,93810,93811],{"id":93063,"depth":96,"text":93064},{"id":93106,"depth":96,"text":93107},{"id":93214,"depth":96,"text":93215},{"id":93308,"depth":96,"text":93309},{"id":93348,"depth":96,"text":93349},{"id":93421,"depth":96,"text":93422},{"id":93489,"depth":96,"text":93490},{"id":93541,"depth":96,"text":93542},{"id":93585,"depth":96,"text":93586},{"id":93664,"depth":96,"text":93665},{"id":93731,"depth":96,"text":93732},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93049,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93818,"title":93819,"body":93820,"description":23344,"extension":5123,"meta":94475,"navigation":2364,"path":94476,"seo":94477,"stem":94478,"__hash__":94479},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":9,"value":93821,"toc":94463},[93822,93825,93829,93832,94048,94052,94055,94264,94268,94334,94339,94343,94346,94349,94387,94391,94394,94399,94403,94406,94409,94414,94418,94421,94425,94428,94431,94436,94440,94443,94446,94451,94455,94460],[12,93823,93819],{"id":93824},"_12其他常用函数",[16,93826,93828],{"id":93827},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[21,93830,93831],{},"将数组的数据按照行列复制扩展",[66,93833,93835],{"className":30347,"code":93834,"language":30349,"meta":71,"style":71},"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",[73,93836,93837,93853,93862,93866,93871,93876,93889,93893,93898,93903,93908,93912,93917,93941,93953,93957,93961,93966,93971,93976,93981,93985,93998,94002,94006,94011,94016,94021,94026,94031,94035,94039,94044],{"__ignoreMap":71},[76,93838,93839,93841,93843,93845,93847,93849,93851],{"class":78,"line":79},[76,93840,326],{"class":86},[76,93842,133],{"class":82},[76,93844,92971],{"class":86},[76,93846,305],{"class":136},[76,93848,466],{"class":86},[76,93850,407],{"class":136},[76,93852,93],{"class":86},[76,93854,93855,93858,93860],{"class":78,"line":96},[76,93856,93857],{"class":86},"np.tile(a,",[76,93859,165],{"class":136},[76,93861,93],{"class":86},[76,93863,93864],{"class":78,"line":1143},[76,93865,93533],{"class":146},[76,93867,93868],{"class":78,"line":1158},[76,93869,93870],{"class":146},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[76,93872,93873],{"class":78,"line":1164},[76,93874,93875],{"class":146},"#行复制两次，列复制三次\n",[76,93877,93878,93881,93883,93885,93887],{"class":78,"line":1178},[76,93879,93880],{"class":86},"np.tile(a,(",[76,93882,165],{"class":136},[76,93884,466],{"class":86},[76,93886,159],{"class":136},[76,93888,30466],{"class":86},[76,93890,93891],{"class":78,"line":1184},[76,93892,93533],{"class":146},[76,93894,93895],{"class":78,"line":1275},[76,93896,93897],{"class":192},"'''\n",[76,93899,93900],{"class":78,"line":1281},[76,93901,93902],{"class":192},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[76,93904,93905],{"class":78,"line":1293},[76,93906,93907],{"class":192},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[76,93909,93910],{"class":78,"line":1576},[76,93911,93897],{"class":192},[76,93913,93914],{"class":78,"line":1581},[76,93915,93916],{"class":146},"#创建二维数组\n",[76,93918,93919,93921,93923,93925,93927,93929,93931,93933,93935,93937,93939],{"class":78,"line":1587},[76,93920,93275],{"class":86},[76,93922,133],{"class":82},[76,93924,92971],{"class":86},[76,93926,305],{"class":136},[76,93928,466],{"class":86},[76,93930,611],{"class":136},[76,93932,92976],{"class":86},[76,93934,381],{"class":136},[76,93936,466],{"class":86},[76,93938,159],{"class":136},[76,93940,93],{"class":86},[76,93942,93943,93946,93948,93950],{"class":78,"line":1592},[76,93944,93945],{"class":86},"np.tile(aa,",[76,93947,165],{"class":136},[76,93949,517],{"class":86},[76,93951,93952],{"class":146},"#一个数的时候就是行\n",[76,93954,93955],{"class":78,"line":1606},[76,93956,93533],{"class":146},[76,93958,93959],{"class":78,"line":1611},[76,93960,93897],{"class":192},[76,93962,93963],{"class":78,"line":1617},[76,93964,93965],{"class":192},"array([[ 1,  2,  3,  1,  2,  3],\n",[76,93967,93968],{"class":78,"line":1638},[76,93969,93970],{"class":192},"       [ 4,  5,  6,  4,  5,  6],\n",[76,93972,93973],{"class":78,"line":1643},[76,93974,93975],{"class":192},"       [ 7,  8,  9,  7,  8,  9],\n",[76,93977,93978],{"class":78,"line":1657},[76,93979,93980],{"class":192},"       [10, 11, 12, 10, 11, 12]])\n",[76,93982,93983],{"class":78,"line":1662},[76,93984,93897],{"class":192},[76,93986,93987,93990,93992,93994,93996],{"class":78,"line":1691},[76,93988,93989],{"class":86},"np.tile(aa,(",[76,93991,165],{"class":136},[76,93993,466],{"class":86},[76,93995,159],{"class":136},[76,93997,30466],{"class":86},[76,93999,94000],{"class":78,"line":1696},[76,94001,93533],{"class":146},[76,94003,94004],{"class":78,"line":1713},[76,94005,93897],{"class":192},[76,94007,94008],{"class":78,"line":1718},[76,94009,94010],{"class":192},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[76,94012,94013],{"class":78,"line":1723},[76,94014,94015],{"class":192},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[76,94017,94018],{"class":78,"line":1728},[76,94019,94020],{"class":192},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[76,94022,94023],{"class":78,"line":1742},[76,94024,94025],{"class":192},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[76,94027,94028],{"class":78,"line":1747},[76,94029,94030],{"class":192},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[76,94032,94033],{"class":78,"line":2542},[76,94034,94015],{"class":192},[76,94036,94037],{"class":78,"line":2556},[76,94038,94020],{"class":192},[76,94040,94041],{"class":78,"line":2564},[76,94042,94043],{"class":192},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[76,94045,94046],{"class":78,"line":2569},[76,94047,93897],{"class":192},[16,94049,94051],{"id":94050},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[21,94053,94054],{},"repeat()将数组中的每个元素重复若干次",[66,94056,94058],{"className":30347,"code":94057,"language":30349,"meta":71,"style":71},"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",[73,94059,94060,94076,94085,94089,94094,94118,94123,94132,94136,94141,94145,94150,94166,94170,94174,94179,94184,94189,94193,94198,94202,94207,94212,94216,94232,94236,94240,94245,94250,94255,94260],{"__ignoreMap":71},[76,94061,94062,94064,94066,94068,94070,94072,94074],{"class":78,"line":79},[76,94063,326],{"class":86},[76,94065,133],{"class":82},[76,94067,92971],{"class":86},[76,94069,305],{"class":136},[76,94071,466],{"class":86},[76,94073,407],{"class":136},[76,94075,93],{"class":86},[76,94077,94078,94081,94083],{"class":78,"line":96},[76,94079,94080],{"class":86},"np.repeat(a,",[76,94082,159],{"class":136},[76,94084,93],{"class":86},[76,94086,94087],{"class":78,"line":1143},[76,94088,93533],{"class":146},[76,94090,94091],{"class":78,"line":1158},[76,94092,94093],{"class":146},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[76,94095,94096,94098,94100,94102,94104,94106,94108,94110,94112,94114,94116],{"class":78,"line":1164},[76,94097,93275],{"class":86},[76,94099,133],{"class":82},[76,94101,92971],{"class":86},[76,94103,305],{"class":136},[76,94105,466],{"class":86},[76,94107,611],{"class":136},[76,94109,92976],{"class":86},[76,94111,381],{"class":136},[76,94113,466],{"class":86},[76,94115,159],{"class":136},[76,94117,93],{"class":86},[76,94119,94120],{"class":78,"line":1178},[76,94121,94122],{"class":146},"#这个重复之后二维变成一维\n",[76,94124,94125,94128,94130],{"class":78,"line":1184},[76,94126,94127],{"class":86},"np.repeat(aa,",[76,94129,165],{"class":136},[76,94131,93],{"class":86},[76,94133,94134],{"class":78,"line":1275},[76,94135,93897],{"class":192},[76,94137,94138],{"class":78,"line":1281},[76,94139,94140],{"class":192},"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",[76,94142,94143],{"class":78,"line":1293},[76,94144,93897],{"class":192},[76,94146,94147],{"class":78,"line":1576},[76,94148,94149],{"class":146},"#指定axis\n",[76,94151,94152,94154,94156,94158,94160,94162,94164],{"class":78,"line":1581},[76,94153,94127],{"class":86},[76,94155,165],{"class":136},[76,94157,466],{"class":86},[76,94159,47483],{"class":5183},[76,94161,133],{"class":82},[76,94163,279],{"class":136},[76,94165,93],{"class":86},[76,94167,94168],{"class":78,"line":1587},[76,94169,93533],{"class":146},[76,94171,94172],{"class":78,"line":1592},[76,94173,93897],{"class":192},[76,94175,94176],{"class":78,"line":1606},[76,94177,94178],{"class":192},"array([[ 1,  2,  3],\n",[76,94180,94181],{"class":78,"line":1611},[76,94182,94183],{"class":192},"       [ 1,  2,  3],\n",[76,94185,94186],{"class":78,"line":1617},[76,94187,94188],{"class":192},"       [ 4,  5,  6],\n",[76,94190,94191],{"class":78,"line":1638},[76,94192,94188],{"class":192},[76,94194,94195],{"class":78,"line":1643},[76,94196,94197],{"class":192},"       [ 7,  8,  9],\n",[76,94199,94200],{"class":78,"line":1657},[76,94201,94197],{"class":192},[76,94203,94204],{"class":78,"line":1662},[76,94205,94206],{"class":192},"       [10, 11, 12],\n",[76,94208,94209],{"class":78,"line":1691},[76,94210,94211],{"class":192},"       [10, 11, 12]])\n",[76,94213,94214],{"class":78,"line":1696},[76,94215,93897],{"class":192},[76,94217,94218,94220,94222,94224,94226,94228,94230],{"class":78,"line":1713},[76,94219,94127],{"class":86},[76,94221,165],{"class":136},[76,94223,466],{"class":86},[76,94225,47483],{"class":5183},[76,94227,133],{"class":82},[76,94229,305],{"class":136},[76,94231,93],{"class":86},[76,94233,94234],{"class":78,"line":1718},[76,94235,93533],{"class":146},[76,94237,94238],{"class":78,"line":1723},[76,94239,93897],{"class":192},[76,94241,94242],{"class":78,"line":1728},[76,94243,94244],{"class":192},"array([[ 1,  1,  2,  2,  3,  3],\n",[76,94246,94247],{"class":78,"line":1742},[76,94248,94249],{"class":192},"       [ 4,  4,  5,  5,  6,  6],\n",[76,94251,94252],{"class":78,"line":1747},[76,94253,94254],{"class":192},"       [ 7,  7,  8,  8,  9,  9],\n",[76,94256,94257],{"class":78,"line":2542},[76,94258,94259],{"class":192},"       [10, 10, 11, 11, 12, 12]])\n",[76,94261,94262],{"class":78,"line":2556},[76,94263,93897],{"class":192},[16,94265,94267],{"id":94266},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[66,94269,94271],{"className":30347,"code":94270,"language":30349,"meta":71,"style":71},"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",[73,94272,94273,94289,94294,94306,94310,94315,94325,94329],{"__ignoreMap":71},[76,94274,94275,94277,94279,94281,94283,94285,94287],{"class":78,"line":79},[76,94276,326],{"class":86},[76,94278,133],{"class":82},[76,94280,92971],{"class":86},[76,94282,305],{"class":136},[76,94284,466],{"class":86},[76,94286,407],{"class":136},[76,94288,93],{"class":86},[76,94290,94291],{"class":78,"line":96},[76,94292,94293],{"class":146},"#array([，2，3，4])\n",[76,94295,94296,94299,94301,94303],{"class":78,"line":1143},[76,94297,94298],{"class":86},"np.roll(a,",[76,94300,165],{"class":136},[76,94302,517],{"class":86},[76,94304,94305],{"class":146},"#传正数向后调多少位，传负数向前调多少位\n",[76,94307,94308],{"class":78,"line":1158},[76,94309,93533],{"class":146},[76,94311,94312],{"class":78,"line":1164},[76,94313,94314],{"class":146},"#array([3, 4, 1, 2])\n",[76,94316,94317,94319,94321,94323],{"class":78,"line":1178},[76,94318,94298],{"class":86},[76,94320,620],{"class":82},[76,94322,305],{"class":136},[76,94324,93],{"class":86},[76,94326,94327],{"class":78,"line":1184},[76,94328,93533],{"class":146},[76,94330,94331],{"class":78,"line":1275},[76,94332,94333],{"class":146},"#array([2, 3, 4, 1])\n",[21,94335,94336],{},[1426,94337],{"alt":71,"src":94338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[16,94340,94342],{"id":94341},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[21,94344,94345],{},"resize()重新调整数组的大小",[21,94347,94348],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[66,94350,94352],{"className":30347,"code":94351,"language":30349,"meta":71,"style":71},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[73,94353,94354,94359,94372],{"__ignoreMap":71},[76,94355,94356],{"class":78,"line":79},[76,94357,94358],{"class":146},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[76,94360,94361,94364,94366,94368,94370],{"class":78,"line":96},[76,94362,94363],{"class":86},"np.resize(aa,(",[76,94365,165],{"class":136},[76,94367,466],{"class":86},[76,94369,432],{"class":136},[76,94371,30466],{"class":86},[76,94373,94374,94376,94378,94380,94382,94384],{"class":78,"line":1143},[76,94375,94363],{"class":86},[76,94377,165],{"class":136},[76,94379,466],{"class":86},[76,94381,508],{"class":136},[76,94383,82740],{"class":86},[76,94385,94386],{"class":146},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[16,94388,94390],{"id":94389},"_125-placeput函数","12.5 place()\u002Fput()函数",[21,94392,94393],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[21,94395,94396],{},[1426,94397],{"alt":71,"src":94398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[16,94400,94402],{"id":94401},"_126-保存加载文件","12.6 保存加载文件",[21,94404,94405],{},"savetxt():将数据保存到txt文件中",[21,94407,94408],{},"loadtxt():从文件加载数据",[21,94410,94411],{},[1426,94412],{"alt":71,"src":94413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[16,94415,94417],{"id":94416},"_127-genfromtxt函数","12.7 genfromtxt()函数",[21,94419,94420],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[16,94422,94424],{"id":94423},"_128-anyall函数","12.8 any()\u002Fall()函数",[21,94426,94427],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[21,94429,94430],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[21,94432,94433],{},[1426,94434],{"alt":71,"src":94435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[16,94437,94439],{"id":94438},"_129-where语句","12.9 where语句",[21,94441,94442],{},"np.where(条件,x,y)",[21,94444,94445],{},"如果条件为True,对应值为x,否则对应值为y",[21,94447,94448],{},[1426,94449],{"alt":71,"src":94450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[16,94452,94454],{"id":94453},"_1210-dot矩阵","12.10 dot()矩阵",[21,94456,94457],{},[1426,94458],{"alt":71,"src":94459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5092,94461,94462],{},"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":71,"searchDepth":96,"depth":96,"links":94464},[94465,94466,94467,94468,94469,94470,94471,94472,94473,94474],{"id":93827,"depth":96,"text":93828},{"id":94050,"depth":96,"text":94051},{"id":94266,"depth":96,"text":94267},{"id":94341,"depth":96,"text":94342},{"id":94389,"depth":96,"text":94390},{"id":94401,"depth":96,"text":94402},{"id":94416,"depth":96,"text":94417},{"id":94423,"depth":96,"text":94424},{"id":94438,"depth":96,"text":94439},{"id":94453,"depth":96,"text":94454},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93819,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94481,"title":94482,"body":94483,"description":23344,"extension":5123,"meta":94836,"navigation":2364,"path":94837,"seo":94838,"stem":94839,"__hash__":94840},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":9,"value":94484,"toc":94834},[94485,94488,94491,94494,94497,94500,94565,94567,94831],[12,94486,94482],{"id":94487},"_13数组排序",[21,94489,94490],{},"排序主要用到的方法是np.sort和np.argsort",[21,94492,94493],{},"其中np.sort()对数组直接排序",[21,94495,94496],{},"而np.argsort()是返回排序后的原始索引",[21,94498,94499],{},"①一维数组",[66,94501,94503],{"className":30347,"code":94502,"language":30349,"meta":71,"style":71},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[73,94504,94505,94509,94549,94557],{"__ignoreMap":71},[76,94506,94507],{"class":78,"line":79},[76,94508,93074],{"class":146},[76,94510,94511,94513,94515,94517,94519,94521,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547],{"class":78,"line":96},[76,94512,326],{"class":86},[76,94514,133],{"class":82},[76,94516,92993],{"class":86},[76,94518,159],{"class":136},[76,94520,466],{"class":86},[76,94522,586],{"class":136},[76,94524,466],{"class":86},[76,94526,483],{"class":136},[76,94528,466],{"class":86},[76,94530,863],{"class":136},[76,94532,466],{"class":86},[76,94534,367],{"class":136},[76,94536,466],{"class":86},[76,94538,981],{"class":136},[76,94540,466],{"class":86},[76,94542,432],{"class":136},[76,94544,466],{"class":86},[76,94546,534],{"class":136},[76,94548,4622],{"class":86},[76,94550,94551,94554],{"class":78,"line":1143},[76,94552,94553],{"class":86},"np.sort(a)",[76,94555,94556],{"class":146},"#升序排序\n",[76,94558,94559,94562],{"class":78,"line":1158},[76,94560,94561],{"class":86},"np.argsort(a)",[76,94563,94564],{"class":146},"#按照元素大小来索引排序\n",[21,94566,93260],{},[66,94568,94570],{"className":30347,"code":94569,"language":30349,"meta":71,"style":71},"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",[73,94571,94572,94584,94610,94615,94619,94624,94629,94634,94639,94643,94651,94655,94660,94665,94670,94675,94679,94684,94697,94701,94706,94711,94716,94721,94725,94730,94742,94746,94750,94754,94758,94762,94766,94771,94786,94791,94800,94805,94809,94813,94818,94822,94827],{"__ignoreMap":71},[76,94573,94574,94577,94579,94581],{"class":78,"line":79},[76,94575,94576],{"class":86},"np.random.seed(",[76,94578,279],{"class":136},[76,94580,517],{"class":86},[76,94582,94583],{"class":146},"#保证每次值一样\n",[76,94585,94586,94588,94590,94592,94594,94596,94598,94600,94602,94604,94606,94608],{"class":78,"line":96},[76,94587,93275],{"class":86},[76,94589,133],{"class":82},[76,94591,93083],{"class":86},[76,94593,399],{"class":136},[76,94595,466],{"class":86},[76,94597,31465],{"class":5183},[76,94599,133],{"class":82},[76,94601,87],{"class":86},[76,94603,381],{"class":136},[76,94605,466],{"class":86},[76,94607,432],{"class":136},[76,94609,30466],{"class":86},[76,94611,94612],{"class":78,"line":1143},[76,94613,94614],{"class":146},"#原数组：\n",[76,94616,94617],{"class":78,"line":1158},[76,94618,93897],{"class":192},[76,94620,94621],{"class":78,"line":1164},[76,94622,94623],{"class":192},"array([[44, 47, 64, 67, 67,  9],\n",[76,94625,94626],{"class":78,"line":1178},[76,94627,94628],{"class":192},"       [83, 21, 36, 87, 70, 88],\n",[76,94630,94631],{"class":78,"line":1184},[76,94632,94633],{"class":192},"       [88, 12, 58, 65, 39, 87],\n",[76,94635,94636],{"class":78,"line":1275},[76,94637,94638],{"class":192},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[76,94640,94641],{"class":78,"line":1281},[76,94642,93897],{"class":192},[76,94644,94645,94648],{"class":78,"line":1293},[76,94646,94647],{"class":86},"np.sort(aa)",[76,94649,94650],{"class":146},"#每行进行了排序\n",[76,94652,94653],{"class":78,"line":1576},[76,94654,93897],{"class":192},[76,94656,94657],{"class":78,"line":1581},[76,94658,94659],{"class":192},"array([[ 9, 44, 47, 64, 67, 67],\n",[76,94661,94662],{"class":78,"line":1587},[76,94663,94664],{"class":192},"       [21, 36, 70, 83, 87, 88],\n",[76,94666,94667],{"class":78,"line":1592},[76,94668,94669],{"class":192},"       [12, 39, 58, 65, 87, 88],\n",[76,94671,94672],{"class":78,"line":1606},[76,94673,94674],{"class":192},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[76,94676,94677],{"class":78,"line":1611},[76,94678,93897],{"class":192},[76,94680,94681],{"class":78,"line":1617},[76,94682,94683],{"class":146},"#axis=0时\n",[76,94685,94686,94689,94691,94693,94695],{"class":78,"line":1638},[76,94687,94688],{"class":86},"np.sort(aa,",[76,94690,47483],{"class":5183},[76,94692,133],{"class":82},[76,94694,279],{"class":136},[76,94696,93],{"class":86},[76,94698,94699],{"class":78,"line":1643},[76,94700,93897],{"class":192},[76,94702,94703],{"class":78,"line":1657},[76,94704,94705],{"class":192},"array([[44, 12, 36, 37, 25,  9],\n",[76,94707,94708],{"class":78,"line":1662},[76,94709,94710],{"class":192},"       [46, 21, 58, 65, 39, 77],\n",[76,94712,94713],{"class":78,"line":1691},[76,94714,94715],{"class":192},"       [83, 47, 64, 67, 67, 87],\n",[76,94717,94718],{"class":78,"line":1696},[76,94719,94720],{"class":192},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[76,94722,94723],{"class":78,"line":1713},[76,94724,93897],{"class":192},[76,94726,94727],{"class":78,"line":1718},[76,94728,94729],{"class":146},"#axis=1时,为默认值\n",[76,94731,94732,94734,94736,94738,94740],{"class":78,"line":1723},[76,94733,94688],{"class":86},[76,94735,47483],{"class":5183},[76,94737,133],{"class":82},[76,94739,305],{"class":136},[76,94741,93],{"class":86},[76,94743,94744],{"class":78,"line":1728},[76,94745,93897],{"class":192},[76,94747,94748],{"class":78,"line":1742},[76,94749,94659],{"class":192},[76,94751,94752],{"class":78,"line":1747},[76,94753,94664],{"class":192},[76,94755,94756],{"class":78,"line":2542},[76,94757,94669],{"class":192},[76,94759,94760],{"class":78,"line":2556},[76,94761,94674],{"class":192},[76,94763,94764],{"class":78,"line":2564},[76,94765,93897],{"class":192},[76,94767,94768],{"class":78,"line":2569},[76,94769,94770],{"class":146},"#按最后一列排序\n",[76,94772,94773,94775,94777,94780,94782,94784],{"class":78,"line":2575},[76,94774,351],{"class":86},[76,94776,133],{"class":82},[76,94778,94779],{"class":86},"aa[:,",[76,94781,620],{"class":82},[76,94783,305],{"class":136},[76,94785,33215],{"class":86},[76,94787,94788],{"class":78,"line":2581},[76,94789,94790],{"class":146},"#获取最后一列排好序的索引\n",[76,94792,94793,94795,94797],{"class":78,"line":2586},[76,94794,74027],{"class":86},[76,94796,133],{"class":82},[76,94798,94799],{"class":86},"np.argsort(b)\n",[76,94801,94802],{"class":78,"line":7915},[76,94803,94804],{"class":86},"aa[index]\n",[76,94806,94807],{"class":78,"line":7939},[76,94808,93897],{"class":192},[76,94810,94811],{"class":78,"line":7944},[76,94812,94623],{"class":192},[76,94814,94815],{"class":78,"line":7950},[76,94816,94817],{"class":192},"       [46, 88, 81, 37, 25, 77],\n",[76,94819,94820],{"class":78,"line":7977},[76,94821,94633],{"class":192},[76,94823,94824],{"class":78,"line":7982},[76,94825,94826],{"class":192},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[76,94828,94829],{"class":78,"line":7988},[76,94830,93897],{"class":192},[5092,94832,94833],{},"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":71,"searchDepth":96,"depth":96,"links":94835},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94482,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94842,"title":94843,"body":94844,"description":23344,"extension":5123,"meta":94874,"navigation":2364,"path":94875,"seo":94876,"stem":94877,"__hash__":94878},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":9,"value":94845,"toc":94872},[94846,94849,94852,94855,94858,94861,94864,94867],[12,94847,94843],{"id":94848},"_14广播机制",[21,94850,94851],{},"广播的规则：",[21,94853,94854],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[21,94856,94857],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[21,94859,94860],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[21,94862,94863],{},"3.如果没有维度形状为1，则会引发异常",[21,94865,94866],{},"也就是只有维度或者个数为1才可以进行广播操作",[21,94868,94869],{},[1426,94870],{"alt":71,"src":94871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":71,"searchDepth":96,"depth":96,"links":94873},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94843,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94880,"title":94881,"body":94882,"description":23344,"extension":5123,"meta":94980,"navigation":2364,"path":94981,"seo":94982,"stem":94983,"__hash__":94984},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":9,"value":94883,"toc":94978},[94884,94887,94890,94975],[12,94885,94881],{"id":94886},"_15比较掩码",[21,94888,94889],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[66,94891,94893],{"className":30347,"code":94892,"language":30349,"meta":71,"style":71},"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",[73,94894,94895,94941,94952,94966,94970],{"__ignoreMap":71},[76,94896,94897,94899,94901,94904,94906,94908,94910,94912,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938],{"class":78,"line":79},[76,94898,326],{"class":86},[76,94900,133],{"class":82},[76,94902,94903],{"class":86},"np.array([[",[76,94905,305],{"class":136},[76,94907,466],{"class":86},[76,94909,165],{"class":136},[76,94911,466],{"class":86},[76,94913,159],{"class":136},[76,94915,47999],{"class":86},[76,94917,560],{"class":136},[76,94919,466],{"class":86},[76,94921,586],{"class":136},[76,94923,466],{"class":86},[76,94925,611],{"class":136},[76,94927,47999],{"class":86},[76,94929,813],{"class":136},[76,94931,466],{"class":86},[76,94933,838],{"class":136},[76,94935,466],{"class":86},[76,94937,863],{"class":136},[76,94939,94940],{"class":86},"]])\n",[76,94942,94943,94945,94947,94949],{"class":78,"line":96},[76,94944,326],{"class":86},[76,94946,998],{"class":82},[76,94948,788],{"class":136},[76,94950,94951],{"class":146},"#结果是一个由True,False组成的数组\n",[76,94953,94954,94957,94959,94961,94963],{"class":78,"line":1143},[76,94955,94956],{"class":86},"a[a",[76,94958,998],{"class":82},[76,94960,788],{"class":136},[76,94962,1028],{"class":86},[76,94964,94965],{"class":146},"#小于20的元素会存到这个数组中\n",[76,94967,94968],{"class":78,"line":1158},[76,94969,93533],{"class":146},[76,94971,94972],{"class":78,"line":1164},[76,94973,94974],{"class":146},"#array([ 1,  2,  3, 11, 12, 13])\n",[5092,94976,94977],{},"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":71,"searchDepth":96,"depth":96,"links":94979},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94881,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94986,"title":94987,"body":94988,"description":23344,"extension":5123,"meta":95080,"navigation":2364,"path":95081,"seo":95082,"stem":95083,"__hash__":95084},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":9,"value":94989,"toc":95078},[94990,94993,94996,94999,95002,95005,95070,95075],[12,94991,94987],{"id":94992},"_16魔法命令time",[21,94994,94995],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[21,94997,94998],{},"%:行模式",[21,95000,95001],{},"%%:单元格模式",[21,95003,95004],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[66,95006,95008],{"className":30347,"code":95007,"language":30349,"meta":71,"style":71},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[73,95009,95010,95015,95022,95027,95036,95049,95053,95061],{"__ignoreMap":71},[76,95011,95012],{"class":78,"line":79},[76,95013,95014],{"class":146},"#程序执行时间\n",[76,95016,95017,95019],{"class":78,"line":96},[76,95018,30361],{"class":82},[76,95020,95021],{"class":86}," time \n",[76,95023,95024],{"class":78,"line":1143},[76,95025,95026],{"class":146},"#获取时间\n",[76,95028,95029,95032,95034],{"class":78,"line":1158},[76,95030,95031],{"class":86},"start",[76,95033,133],{"class":82},[76,95035,32387],{"class":86},[76,95037,95038,95041,95044,95046],{"class":78,"line":1164},[76,95039,95040],{"class":86},"time.sleep(",[76,95042,95043],{"class":136},"0.4",[76,95045,517],{"class":86},[76,95047,95048],{"class":146},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[76,95050,95051],{"class":78,"line":1178},[76,95052,95026],{"class":146},[76,95054,95055,95057,95059],{"class":78,"line":1184},[76,95056,45770],{"class":86},[76,95058,133],{"class":82},[76,95060,32387],{"class":86},[76,95062,95063,95065,95067],{"class":78,"line":1275},[76,95064,45770],{"class":86},[76,95066,620],{"class":82},[76,95068,95069],{"class":86},"start\n",[21,95071,95072],{},[1426,95073],{"alt":71,"src":95074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5092,95076,95077],{},"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":71,"searchDepth":96,"depth":96,"links":95079},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94987,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95086,"title":95087,"body":95088,"description":23344,"extension":5123,"meta":95123,"navigation":2364,"path":95124,"seo":95125,"stem":95126,"__hash__":95127},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":9,"value":95089,"toc":95121},[95090,95093,95096,95099,95102,95105,95108,95111,95116],[12,95091,95087],{"id":95092},"_17魔法命令timeit",[21,95094,95095],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[21,95097,95098],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[21,95100,95101],{},"单元格模式：",[21,95103,95104],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[21,95106,95107],{},"初始化语句执行次数由轮数来决定",[21,95109,95110],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[21,95112,95113],{},[1426,95114],{"alt":71,"src":95115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[21,95117,95118],{},[1426,95119],{"alt":71,"src":95120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":71,"searchDepth":96,"depth":96,"links":95122},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95087,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95129,"title":95130,"body":95131,"description":23344,"extension":5123,"meta":95149,"navigation":2364,"path":95150,"seo":95151,"stem":95152,"__hash__":95153},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":9,"value":95132,"toc":95147},[95133,95136,95139,95142],[12,95134,95130],{"id":95135},"_18魔法命令writefile和run",[21,95137,95138],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[21,95140,95141],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[21,95143,95144],{},[1426,95145],{"alt":71,"src":95146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":71,"searchDepth":96,"depth":96,"links":95148},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95130,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95155,"title":95156,"body":95157,"description":23344,"extension":5123,"meta":95210,"navigation":2364,"path":95211,"seo":95212,"stem":95213,"__hash__":95214},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":9,"value":95158,"toc":95208},[95159,95162,95165,95167,95170,95173,95178,95181,95184,95187,95190,95193,95196,95199,95202,95205],[12,95160,95156],{"id":95161},"_19魔法命令memit",[21,95163,95164],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[21,95166,24568],{},[21,95168,95169],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[21,95171,95172],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[21,95174,95175],{},[1426,95176],{"alt":71,"src":95177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[21,95179,95180],{},"补充：",[21,95182,95183],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[21,95185,95186],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[21,95188,95189],{},"解决方法：",[21,95191,95192],{},"1.cmd",[21,95194,95195],{},"2.依次输入以下代码：",[21,95197,95198],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[21,95200,95201],{},"pip install --upgrade ipython",[21,95203,95204],{},"#升级 memory_profiler 和 setuptools",[21,95206,95207],{},"pip install --upgrade memory_profiler setuptools",{"title":71,"searchDepth":96,"depth":96,"links":95209},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95156,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95216,"title":95217,"body":95218,"description":23344,"extension":5123,"meta":96864,"navigation":2364,"path":96865,"seo":96866,"stem":96867,"__hash__":96868},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":9,"value":95219,"toc":96834},[95220,95223,95227,95231,95292,95295,95300,95304,95309,95314,95319,95324,95327,95332,95336,95340,95373,95376,95379,95382,95434,95437,95473,95476,95518,95522,95543,95545,95582,95584,95589,95591,95596,95600,95603,95631,95635,95639,95692,95696,95788,95792,95796,95799,95804,95808,95833,95838,95842,95845,95848,95851,95854,95857,95860,95863,95875,95879,95883,95886,95918,95921,95944,95947,95973,95976,96002,96005,96039,96042,96104,96108,96111,96115,96118,96144,96147,96150,96155,96158,96227,96229,96234,96295,96298,96309,96315,96320,96324,96327,96340,96344,96359,96361,96384,96386,96412,96415,96418,96421,96469,96471,96476,96480,96484,96511,96515,96542,96545,96550,96555,96645,96649,96707,96712,96715,96718,96760,96764,96820,96825,96828,96831],[12,95221,95217],{"id":95222},"_2创建数组",[16,95224,95226],{"id":95225},"_21-array函数创建数组","2.1 array()函数创建数组",[46,95228,95230],{"id":95229},"_221-函数语句","2.2.1 函数语句",[66,95232,95234],{"className":30347,"code":95233,"language":30349,"meta":71,"style":71},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[73,95235,95236],{"__ignoreMap":71},[76,95237,95238,95241,95244,95246,95248,95250,95252,95254,95257,95259,95262,95264,95267,95269,95271,95273,95276,95278,95281,95283,95286,95288,95290],{"class":78,"line":79},[76,95239,95240],{"class":86},"numpy.array(",[76,95242,95243],{"class":136},"object",[76,95245,12402],{"class":86},[76,95247,93469],{"class":5183},[76,95249,13531],{"class":82},[76,95251,38902],{"class":136},[76,95253,12402],{"class":86},[76,95255,95256],{"class":5183},"copy",[76,95258,13531],{"class":82},[76,95260,95261],{"class":136}," True",[76,95263,12402],{"class":86},[76,95265,95266],{"class":5183},"order",[76,95268,13531],{"class":82},[76,95270,38902],{"class":136},[76,95272,12402],{"class":86},[76,95274,95275],{"class":5183},"subok",[76,95277,13531],{"class":82},[76,95279,95280],{"class":136}," False",[76,95282,12402],{"class":86},[76,95284,95285],{"class":5183},"ndmin",[76,95287,13531],{"class":82},[76,95289,4058],{"class":136},[76,95291,93],{"class":86},[21,95293,95294],{},"参数：",[21,95296,95297],{},[1426,95298],{"alt":71,"src":95299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[46,95301,95303],{"id":95302},"_222-实例","2.2.2 实例",[21,95305,95306],{},[1426,95307],{"alt":71,"src":95308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[21,95310,95311],{},[1426,95312],{"alt":71,"src":95313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[21,95315,95316],{},[1426,95317],{"alt":71,"src":95318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[21,95320,95321],{},[1426,95322],{"alt":71,"src":95323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[21,95325,95326],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[21,95328,95329],{},[1426,95330],{"alt":71,"src":95331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[16,95333,95335],{"id":95334},"_22-随机数创建数组","2.2 随机数创建数组",[46,95337,95339],{"id":95338},"_221-random语句","2.2.1 random语句",[66,95341,95343],{"className":30347,"code":95342,"language":30349,"meta":71,"style":71},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[73,95344,95345,95350,95355,95363,95368],{"__ignoreMap":71},[76,95346,95347],{"class":78,"line":79},[76,95348,95349],{"class":146},"#random.random()\n",[76,95351,95352],{"class":78,"line":96},[76,95353,95354],{"class":146},"#确定随机种子,就是每次运行结果是相同的\n",[76,95356,95357,95359,95361],{"class":78,"line":1143},[76,95358,94576],{"class":86},[76,95360,279],{"class":136},[76,95362,93],{"class":86},[76,95364,95365],{"class":78,"line":1158},[76,95366,95367],{"class":86},"np.random.random()\n",[76,95369,95370],{"class":78,"line":1164},[76,95371,95372],{"class":146},"#生成一个随机的数目\n",[21,95374,95375],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[21,95377,95378],{},"可以指定数组形状 size",[21,95380,95381],{},"①生成一维数组",[66,95383,95385],{"className":30347,"code":95384,"language":30349,"meta":71,"style":71},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[73,95386,95387,95392,95405,95410,95426],{"__ignoreMap":71},[76,95388,95389],{"class":78,"line":79},[76,95390,95391],{"class":146},"#random.random(size())\n",[76,95393,95394,95397,95399,95401,95403],{"class":78,"line":96},[76,95395,95396],{"class":86},"np.random.random(",[76,95398,31465],{"class":5183},[76,95400,133],{"class":82},[76,95402,407],{"class":136},[76,95404,93],{"class":86},[76,95406,95407],{"class":78,"line":1143},[76,95408,95409],{"class":146},"#生成一位的五个元素\n",[76,95411,95412,95414,95416,95418,95420,95422,95424],{"class":78,"line":1158},[76,95413,326],{"class":86},[76,95415,133],{"class":82},[76,95417,95396],{"class":86},[76,95419,31465],{"class":5183},[76,95421,133],{"class":82},[76,95423,381],{"class":136},[76,95425,93],{"class":86},[76,95427,95428,95431],{"class":78,"line":1164},[76,95429,95430],{"class":86},"a.shape ",[76,95432,95433],{"class":146},"#输出数组形状\n",[21,95435,95436],{},"②生成二维数组",[66,95438,95440],{"className":30347,"code":95439,"language":30349,"meta":71,"style":71},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[73,95441,95442,95446,95468],{"__ignoreMap":71},[76,95443,95444],{"class":78,"line":79},[76,95445,93270],{"class":146},[76,95447,95448,95450,95452,95454,95456,95458,95460,95462,95464,95466],{"class":78,"line":96},[76,95449,93275],{"class":86},[76,95451,133],{"class":82},[76,95453,95396],{"class":86},[76,95455,31465],{"class":5183},[76,95457,133],{"class":82},[76,95459,87],{"class":86},[76,95461,381],{"class":136},[76,95463,466],{"class":86},[76,95465,407],{"class":136},[76,95467,30466],{"class":86},[76,95469,95470],{"class":78,"line":1143},[76,95471,95472],{"class":146},"#生成四行五列的数组\n",[21,95474,95475],{},"③生成三维数组",[66,95477,95479],{"className":30347,"code":95478,"language":30349,"meta":71,"style":71},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[73,95480,95481,95486,95513],{"__ignoreMap":71},[76,95482,95483],{"class":78,"line":79},[76,95484,95485],{"class":146},"#三维数组\n",[76,95487,95488,95491,95493,95495,95497,95499,95501,95503,95505,95507,95509,95511],{"class":78,"line":96},[76,95489,95490],{"class":86},"aaa",[76,95492,133],{"class":82},[76,95494,95396],{"class":86},[76,95496,31465],{"class":5183},[76,95498,133],{"class":82},[76,95500,87],{"class":86},[76,95502,165],{"class":136},[76,95504,466],{"class":86},[76,95506,159],{"class":136},[76,95508,466],{"class":86},[76,95510,381],{"class":136},[76,95512,30466],{"class":86},[76,95514,95515],{"class":78,"line":1143},[76,95516,95517],{"class":86},"aaa.shape\n",[46,95519,95521],{"id":95520},"_222-randint语句","2.2.2 randint语句",[66,95523,95525],{"className":30347,"code":95524,"language":30349,"meta":71,"style":71},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[73,95526,95527,95532],{"__ignoreMap":71},[76,95528,95529],{"class":78,"line":79},[76,95530,95531],{"class":146},"#生成随机的整数 random.randint(low,high,size)\n",[76,95533,95534,95536,95538,95540],{"class":78,"line":96},[76,95535,93083],{"class":86},[76,95537,407],{"class":136},[76,95539,13681],{"class":86},[76,95541,95542],{"class":146},"#0~5中的随机一个数\n",[21,95544,95381],{},[66,95546,95548],{"className":30347,"code":95547,"language":30349,"meta":71,"style":71},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[73,95549,95550,95555,95577],{"__ignoreMap":71},[76,95551,95552],{"class":78,"line":79},[76,95553,95554],{"class":146},"#一维\n",[76,95556,95557,95559,95561,95563,95565,95567,95569,95571,95573,95575],{"class":78,"line":96},[76,95558,93083],{"class":86},[76,95560,305],{"class":136},[76,95562,466],{"class":86},[76,95564,560],{"class":136},[76,95566,466],{"class":86},[76,95568,31465],{"class":5183},[76,95570,133],{"class":82},[76,95572,87],{"class":86},[76,95574,534],{"class":136},[76,95576,30466],{"class":86},[76,95578,95579],{"class":78,"line":1143},[76,95580,95581],{"class":146},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[21,95583,95436],{},[21,95585,95586],{},[1426,95587],{"alt":71,"src":95588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[21,95590,95475],{},[21,95592,95593],{},[1426,95594],{"alt":71,"src":95595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[46,95597,95599],{"id":95598},"_222-rand语句","2.2.2 rand语句",[21,95601,95602],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[66,95604,95606],{"className":30347,"code":95605,"language":30349,"meta":71,"style":71},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[73,95607,95608,95621,95626],{"__ignoreMap":71},[76,95609,95610,95613,95615,95617,95619],{"class":78,"line":79},[76,95611,95612],{"class":86},"np.random.rand(",[76,95614,399],{"class":136},[76,95616,466],{"class":86},[76,95618,534],{"class":136},[76,95620,93],{"class":86},[76,95622,95623],{"class":78,"line":96},[76,95624,95625],{"class":146},"#第一个参数100：行数，表示有100个样本\n",[76,95627,95628],{"class":78,"line":1143},[76,95629,95630],{"class":146},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[16,95632,95634],{"id":95633},"_23-arange创建数组","2.3 arange()创建数组",[46,95636,95638],{"id":95637},"_231-函数语句","2.3.1 函数语句",[66,95640,95642],{"className":30347,"code":95641,"language":30349,"meta":71,"style":71},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[73,95643,95644,95658,95663,95668,95673,95678,95683,95688],{"__ignoreMap":71},[76,95645,95646,95649,95651,95653,95656],{"class":78,"line":79},[76,95647,95648],{"class":86},"numpy.arange([start,] stop[, step], ",[76,95650,93469],{"class":5183},[76,95652,133],{"class":82},[76,95654,95655],{"class":136},"None",[76,95657,93],{"class":86},[76,95659,95660],{"class":78,"line":96},[76,95661,95662],{"class":146},"#参数\n",[76,95664,95665],{"class":78,"line":1143},[76,95666,95667],{"class":192},"\"\"\"\n",[76,95669,95670],{"class":78,"line":1158},[76,95671,95672],{"class":192},"start:起始值，可选，默认从 0 开始。\n",[76,95674,95675],{"class":78,"line":1164},[76,95676,95677],{"class":192},"stop:结束值（不包含该值）。\n",[76,95679,95680],{"class":78,"line":1178},[76,95681,95682],{"class":192},"step:步长，可选，默认是 1。可以为浮点数。\n",[76,95684,95685],{"class":78,"line":1184},[76,95686,95687],{"class":192},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[76,95689,95690],{"class":78,"line":1275},[76,95691,95667],{"class":192},[46,95693,95695],{"id":95694},"_232-实例","2.3.2 实例",[66,95697,95699],{"className":30347,"code":95698,"language":30349,"meta":71,"style":71},"#创建一维数组\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",[73,95700,95701,95705,95729,95734,95739,95743,95766,95770,95774,95779,95784],{"__ignoreMap":71},[76,95702,95703],{"class":78,"line":79},[76,95704,93074],{"class":146},[76,95706,95707,95709,95711,95713,95715,95717,95719,95721,95723,95725,95727],{"class":78,"line":96},[76,95708,92971],{"class":86},[76,95710,305],{"class":136},[76,95712,466],{"class":86},[76,95714,813],{"class":136},[76,95716,466],{"class":86},[76,95718,305],{"class":136},[76,95720,466],{"class":86},[76,95722,93469],{"class":5183},[76,95724,133],{"class":82},[76,95726,90],{"class":136},[76,95728,93],{"class":86},[76,95730,95731],{"class":78,"line":1143},[76,95732,95733],{"class":146},"#输出结果：\n",[76,95735,95736],{"class":78,"line":1158},[76,95737,95738],{"class":146},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[76,95740,95741],{"class":78,"line":1164},[76,95742,93916],{"class":146},[76,95744,95745,95748,95750,95752,95754,95757,95759,95761,95763],{"class":78,"line":1178},[76,95746,95747],{"class":86},"np.array([np.arange(",[76,95749,305],{"class":136},[76,95751,466],{"class":86},[76,95753,381],{"class":136},[76,95755,95756],{"class":86},"),np.arange(",[76,95758,381],{"class":136},[76,95760,466],{"class":86},[76,95762,457],{"class":136},[76,95764,95765],{"class":86},")])\n",[76,95767,95768],{"class":78,"line":1184},[76,95769,93533],{"class":146},[76,95771,95772],{"class":78,"line":1275},[76,95773,95667],{"class":192},[76,95775,95776],{"class":78,"line":1281},[76,95777,95778],{"class":192},"array([[1, 2, 3],\n",[76,95780,95781],{"class":78,"line":1293},[76,95782,95783],{"class":192},"       [4, 5, 6]])\n",[76,95785,95786],{"class":78,"line":1576},[76,95787,95667],{"class":192},[16,95789,95791],{"id":95790},"_24-生态分布","2.4 生态分布",[46,95793,95795],{"id":95794},"_241-标准正态分布","2.4.1 标准正态分布",[21,95797,95798],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[21,95800,95801],{},[1426,95802],{"alt":71,"src":95803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[46,95805,95807],{"id":95806},"_242-常规正态分布","2.4.2 常规正态分布",[66,95809,95811],{"className":30347,"code":95810,"language":30349,"meta":71,"style":71},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[73,95812,95813,95818,95823,95828],{"__ignoreMap":71},[76,95814,95815],{"class":78,"line":79},[76,95816,95817],{"class":86},"random.normal(loc,scale,size)也可以生成正态分布\n",[76,95819,95820],{"class":78,"line":96},[76,95821,95822],{"class":146},"#loc:期望\n",[76,95824,95825],{"class":78,"line":1143},[76,95826,95827],{"class":146},"#scale:方差\n",[76,95829,95830],{"class":78,"line":1158},[76,95831,95832],{"class":146},"#size:用于确定是几维的数列\n",[21,95834,95835],{},[1426,95836],{"alt":71,"src":95837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[16,95839,95841],{"id":95840},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[21,95843,95844],{},"ndim:秩，维度个数",[21,95846,95847],{},"size:数组元素的个数",[21,95849,95850],{},"shape:数组的形状",[21,95852,95853],{},"dtype:数组元素的类型",[21,95855,95856],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[21,95858,95859],{},"他们都是属性，通过数组.属性的形式来确定",[21,95861,95862],{},"如果需要输出多个可以通过以下方式：",[66,95864,95866],{"className":30347,"code":95865,"language":30349,"meta":71,"style":71},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[73,95867,95868],{"__ignoreMap":71},[76,95869,95870,95872],{"class":78,"line":79},[76,95871,30384],{"class":136},[76,95873,95874],{"class":86},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[16,95876,95878],{"id":95877},"_26-其他方式创建数组","2.6 其他方式创建数组",[46,95880,95882],{"id":95881},"_261-zeros创建数组","2.6.1 zeros()创建数组",[21,95884,95885],{},"①创建一维数组",[66,95887,95889],{"className":30347,"code":95888,"language":30349,"meta":71,"style":71},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[73,95890,95891,95900,95904,95909,95914],{"__ignoreMap":71},[76,95892,95893,95896,95898],{"class":78,"line":79},[76,95894,95895],{"class":86},"np.zeros(",[76,95897,534],{"class":136},[76,95899,93],{"class":86},[76,95901,95902],{"class":78,"line":96},[76,95903,95667],{"class":192},[76,95905,95906],{"class":78,"line":1143},[76,95907,95908],{"class":192},"输出结果：\n",[76,95910,95911],{"class":78,"line":1158},[76,95912,95913],{"class":192},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[76,95915,95916],{"class":78,"line":1164},[76,95917,95667],{"class":192},[21,95919,95920],{},"上方代码等价于：",[66,95922,95924],{"className":30347,"code":95923,"language":30349,"meta":71,"style":71},"np.zeros(shape=(10))#创建10个元素的0数组\n",[73,95925,95926],{"__ignoreMap":71},[76,95927,95928,95930,95933,95935,95937,95939,95941],{"class":78,"line":79},[76,95929,95895],{"class":86},[76,95931,95932],{"class":5183},"shape",[76,95934,133],{"class":82},[76,95936,87],{"class":86},[76,95938,534],{"class":136},[76,95940,82740],{"class":86},[76,95942,95943],{"class":146},"#创建10个元素的0数组\n",[21,95945,95946],{},"也可以指定类型",[66,95948,95950],{"className":30347,"code":95949,"language":30349,"meta":71,"style":71},"#指定类型\nnp.zeros(5,dtype=int)\n",[73,95951,95952,95957],{"__ignoreMap":71},[76,95953,95954],{"class":78,"line":79},[76,95955,95956],{"class":146},"#指定类型\n",[76,95958,95959,95961,95963,95965,95967,95969,95971],{"class":78,"line":96},[76,95960,95895],{"class":86},[76,95962,407],{"class":136},[76,95964,466],{"class":86},[76,95966,93469],{"class":5183},[76,95968,133],{"class":82},[76,95970,90],{"class":136},[76,95972,93],{"class":86},[21,95974,95975],{},"②创建二维数组",[66,95977,95979],{"className":30347,"code":95978,"language":30349,"meta":71,"style":71},"np.zeros((3,4),dtype=int)\n",[73,95980,95981],{"__ignoreMap":71},[76,95982,95983,95986,95988,95990,95992,95994,95996,95998,96000],{"class":78,"line":79},[76,95984,95985],{"class":86},"np.zeros((",[76,95987,159],{"class":136},[76,95989,466],{"class":86},[76,95991,381],{"class":136},[76,95993,42225],{"class":86},[76,95995,93469],{"class":5183},[76,95997,133],{"class":82},[76,95999,90],{"class":136},[76,96001,93],{"class":86},[21,96003,96004],{},"③创建三维数组",[66,96006,96008],{"className":30347,"code":96007,"language":30349,"meta":71,"style":71},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[73,96009,96010,96015],{"__ignoreMap":71},[76,96011,96012],{"class":78,"line":79},[76,96013,96014],{"class":146},"#创建三维数组\n",[76,96016,96017,96019,96021,96023,96025,96027,96029,96031,96033,96035,96037],{"class":78,"line":96},[76,96018,95985],{"class":86},[76,96020,159],{"class":136},[76,96022,466],{"class":86},[76,96024,381],{"class":136},[76,96026,466],{"class":86},[76,96028,407],{"class":136},[76,96030,42225],{"class":86},[76,96032,93469],{"class":5183},[76,96034,133],{"class":82},[76,96036,90],{"class":136},[76,96038,93],{"class":86},[21,96040,96041],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[66,96043,96045],{"className":30347,"code":96044,"language":30349,"meta":71,"style":71},"#使用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",[73,96046,96047,96052,96067,96072,96077,96099],{"__ignoreMap":71},[76,96048,96049],{"class":78,"line":79},[76,96050,96051],{"class":146},"#使用zeros_like将创建的一维数组变成全0的数组\n",[76,96053,96054,96056,96058,96060,96062,96064],{"class":78,"line":96},[76,96055,326],{"class":86},[76,96057,133],{"class":82},[76,96059,92971],{"class":86},[76,96061,381],{"class":136},[76,96063,517],{"class":86},[76,96065,96066],{"class":146},"#这个得到的结果：一维数组0，1，2，3\n",[76,96068,96069],{"class":78,"line":1143},[76,96070,96071],{"class":86},"np.zeros_like(a)\n",[76,96073,96074],{"class":78,"line":1158},[76,96075,96076],{"class":146},"#使用zeros_like将创建的二维数组变成全0的数组\n",[76,96078,96079,96081,96083,96085,96087,96089,96091,96093,96095,96097],{"class":78,"line":1164},[76,96080,93275],{"class":86},[76,96082,133],{"class":82},[76,96084,95396],{"class":86},[76,96086,31465],{"class":5183},[76,96088,133],{"class":82},[76,96090,87],{"class":86},[76,96092,381],{"class":136},[76,96094,466],{"class":86},[76,96096,407],{"class":136},[76,96098,30466],{"class":86},[76,96100,96101],{"class":78,"line":1178},[76,96102,96103],{"class":86},"np.zeros_like(aa)\n",[46,96105,96107],{"id":96106},"_262-ones创建数组","2.6.2 ones()创建数组",[21,96109,96110],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[46,96112,96114],{"id":96113},"_263-empty创建数组","2.6.3 empty()创建数组",[21,96116,96117],{},"①empty()用法",[66,96119,96121],{"className":30347,"code":96120,"language":30349,"meta":71,"style":71},"numpy.empty(shape,dtype=float,order='c')\n",[73,96122,96123],{"__ignoreMap":71},[76,96124,96125,96128,96130,96132,96134,96136,96138,96140,96142],{"class":78,"line":79},[76,96126,96127],{"class":86},"numpy.empty(shape,",[76,96129,93469],{"class":5183},[76,96131,133],{"class":82},[76,96133,127],{"class":136},[76,96135,466],{"class":86},[76,96137,95266],{"class":5183},[76,96139,133],{"class":82},[76,96141,75997],{"class":192},[76,96143,93],{"class":86},[21,96145,96146],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[21,96148,96149],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[21,96151,96152],{},[1426,96153],{"alt":71,"src":96154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[21,96156,96157],{},"②empty()用法",[66,96159,96161],{"className":30347,"code":96160,"language":30349,"meta":71,"style":71},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[73,96162,96163,96184,96196,96217,96222],{"__ignoreMap":71},[76,96164,96165,96167,96169,96172,96174,96176,96178,96180,96182],{"class":78,"line":79},[76,96166,933],{"class":86},[76,96168,133],{"class":82},[76,96170,96171],{"class":86},"np.empty(",[76,96173,534],{"class":136},[76,96175,466],{"class":86},[76,96177,93469],{"class":5183},[76,96179,133],{"class":82},[76,96181,90],{"class":136},[76,96183,93],{"class":86},[76,96185,96186,96188,96190,96192,96194],{"class":78,"line":96},[76,96187,908],{"class":86},[76,96189,133],{"class":82},[76,96191,92971],{"class":86},[76,96193,407],{"class":136},[76,96195,93],{"class":86},[76,96197,96198,96201,96203,96206,96208,96210,96213,96215],{"class":78,"line":1143},[76,96199,96200],{"class":86},"np.add(",[76,96202,165],{"class":136},[76,96204,96205],{"class":86},",x,",[76,96207,93023],{"class":5183},[76,96209,133],{"class":82},[76,96211,96212],{"class":86},"y[:",[76,96214,407],{"class":136},[76,96216,4622],{"class":86},[76,96218,96219],{"class":78,"line":1158},[76,96220,96221],{"class":146},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[76,96223,96224],{"class":78,"line":1164},[76,96225,96226],{"class":86},"y\n",[21,96228,11481],{},[21,96230,96231],{},[1426,96232],{"alt":71,"src":96233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[66,96235,96237],{"className":30347,"code":96236,"language":30349,"meta":71,"style":71},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[73,96238,96239,96255,96275,96290],{"__ignoreMap":71},[76,96240,96241,96243,96245,96247,96249,96251,96253],{"class":78,"line":79},[76,96242,908],{"class":86},[76,96244,133],{"class":82},[76,96246,92971],{"class":86},[76,96248,305],{"class":136},[76,96250,466],{"class":86},[76,96252,432],{"class":136},[76,96254,93],{"class":86},[76,96256,96257,96259,96261,96263,96265,96267,96269,96271,96273],{"class":78,"line":96},[76,96258,933],{"class":86},[76,96260,133],{"class":82},[76,96262,96171],{"class":86},[76,96264,407],{"class":136},[76,96266,466],{"class":86},[76,96268,93469],{"class":5183},[76,96270,133],{"class":82},[76,96272,90],{"class":136},[76,96274,93],{"class":86},[76,96276,96277,96280,96282,96284,96286,96288],{"class":78,"line":1143},[76,96278,96279],{"class":86},"np.add(x,",[76,96281,165],{"class":136},[76,96283,466],{"class":86},[76,96285,93023],{"class":5183},[76,96287,133],{"class":82},[76,96289,93418],{"class":86},[76,96291,96292],{"class":78,"line":1158},[76,96293,96294],{"class":146},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[21,96296,96297],{},"③empty_like()",[21,96299,96300],{},[237,96301,96302,96303,96308],{},"创建一个",[237,96304,96305],{},[237,96306,96307],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[21,96310,96311,96314],{},[73,96312,96313],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[21,96316,96317],{},[1426,96318],{"alt":71,"src":96319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[46,96321,96323],{"id":96322},"_264-用法","2.6.4 ？？用法",[21,96325,96326],{},"当想查看一个函数的参数时，可以通过？？来实现",[66,96328,96330],{"className":30347,"code":96329,"language":30349,"meta":71,"style":71},"np.full??\n",[73,96331,96332],{"__ignoreMap":71},[76,96333,96334,96337],{"class":78,"line":79},[76,96335,96336],{"class":86},"np.full",[76,96338,96339],{"class":77372},"??\n",[46,96341,96343],{"id":96342},"_265-full创建数组","2.6.5 full()创建数组",[66,96345,96347],{"className":30347,"code":96346,"language":30349,"meta":71,"style":71},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[73,96348,96349,96354],{"__ignoreMap":71},[76,96350,96351],{"class":78,"line":79},[76,96352,96353],{"class":86},"full(shape,fill_value)\n",[76,96355,96356],{"class":78,"line":96},[76,96357,96358],{"class":86},"创建全为某个指定值的数组\n",[21,96360,94499],{},[66,96362,96364],{"className":30347,"code":96363,"language":30349,"meta":71,"style":71},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[73,96365,96366,96371],{"__ignoreMap":71},[76,96367,96368],{"class":78,"line":79},[76,96369,96370],{"class":146},"#创建一个一维数组,以20进行填充\n",[76,96372,96373,96376,96378,96380,96382],{"class":78,"line":96},[76,96374,96375],{"class":86},"np.full(",[76,96377,534],{"class":136},[76,96379,466],{"class":86},[76,96381,788],{"class":136},[76,96383,93],{"class":86},[21,96385,93260],{},[66,96387,96389],{"className":30347,"code":96388,"language":30349,"meta":71,"style":71},"#创建二维数组\nnp.full((3,5),11)\n",[73,96390,96391,96395],{"__ignoreMap":71},[76,96392,96393],{"class":78,"line":79},[76,96394,93916],{"class":146},[76,96396,96397,96400,96402,96404,96406,96408,96410],{"class":78,"line":96},[76,96398,96399],{"class":86},"np.full((",[76,96401,159],{"class":136},[76,96403,466],{"class":86},[76,96405,407],{"class":136},[76,96407,42225],{"class":86},[76,96409,560],{"class":136},[76,96411,93],{"class":86},[21,96413,96414],{},"③full_like用法",[21,96416,96417],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[21,96419,96420],{},"这里是指定填充而已",[66,96422,96424],{"className":30347,"code":96423,"language":30349,"meta":71,"style":71},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[73,96425,96426,96431,96455,96460],{"__ignoreMap":71},[76,96427,96428],{"class":78,"line":79},[76,96429,96430],{"class":146},"#创建一个指定形状数组\n",[76,96432,96433,96435,96437,96439,96441,96443,96445,96447,96449,96451,96453],{"class":78,"line":96},[76,96434,326],{"class":86},[76,96436,133],{"class":82},[76,96438,92971],{"class":86},[76,96440,305],{"class":136},[76,96442,466],{"class":86},[76,96444,413],{"class":136},[76,96446,92976],{"class":86},[76,96448,381],{"class":136},[76,96450,466],{"class":86},[76,96452,508],{"class":136},[76,96454,93],{"class":86},[76,96456,96457],{"class":78,"line":1143},[76,96458,96459],{"class":146},"#进行指定填充\n",[76,96461,96462,96465,96467],{"class":78,"line":1158},[76,96463,96464],{"class":86},"np.full_like(a,",[76,96466,534],{"class":136},[76,96468,93],{"class":86},[21,96470,11481],{},[21,96472,96473],{},[1426,96474],{"alt":71,"src":96475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[46,96477,96479],{"id":96478},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21965,96481,96483],{"id":96482},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[66,96485,96487],{"className":30347,"code":96486,"language":30349,"meta":71,"style":71},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[73,96488,96489,96506],{"__ignoreMap":71},[76,96490,96491,96494,96496,96498,96500,96502,96504],{"class":78,"line":79},[76,96492,96493],{"class":86},"np.eye(",[76,96495,381],{"class":136},[76,96497,466],{"class":86},[76,96499,93469],{"class":5183},[76,96501,133],{"class":82},[76,96503,90],{"class":136},[76,96505,93],{"class":86},[76,96507,96508],{"class":78,"line":96},[76,96509,96510],{"class":146},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21965,96512,96514],{"id":96513},"_2662-法2identity","2.6.6.2 法2：identity()",[66,96516,96518],{"className":30347,"code":96517,"language":30349,"meta":71,"style":71},"#identity()\nnp.identity(5,dtype=int)\n",[73,96519,96520,96525],{"__ignoreMap":71},[76,96521,96522],{"class":78,"line":79},[76,96523,96524],{"class":146},"#identity()\n",[76,96526,96527,96530,96532,96534,96536,96538,96540],{"class":78,"line":96},[76,96528,96529],{"class":86},"np.identity(",[76,96531,407],{"class":136},[76,96533,466],{"class":86},[76,96535,93469],{"class":5183},[76,96537,133],{"class":82},[76,96539,90],{"class":136},[76,96541,93],{"class":86},[21,96543,96544],{},"两个函数是有区别的",[21,96546,96547],{},[1426,96548],{"alt":71,"src":96549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[21,96551,96552],{},[1426,96553],{"alt":71,"src":96554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[66,96556,96558],{"className":30347,"code":96557,"language":30349,"meta":71,"style":71},"# 创建一个 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",[73,96559,96560,96565,96577,96582,96587,96592,96597,96601,96606,96626,96630,96635,96640],{"__ignoreMap":71},[76,96561,96562],{"class":78,"line":79},[76,96563,96564],{"class":146},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[76,96566,96567,96569,96571,96573,96575],{"class":78,"line":96},[76,96568,96493],{"class":86},[76,96570,159],{"class":136},[76,96572,12402],{"class":86},[76,96574,381],{"class":136},[76,96576,93],{"class":86},[76,96578,96579],{"class":78,"line":1143},[76,96580,96581],{"class":146},"# 输出:\n",[76,96583,96584],{"class":78,"line":1158},[76,96585,96586],{"class":146},"# [[1. 0. 0. 0.]\n",[76,96588,96589],{"class":78,"line":1164},[76,96590,96591],{"class":146},"#  [0. 1. 0. 0.]\n",[76,96593,96594],{"class":78,"line":1178},[76,96595,96596],{"class":146},"#  [0. 0. 1. 0.]]\n",[76,96598,96599],{"class":78,"line":1184},[76,96600,2365],{"emptyLinePlaceholder":2364},[76,96602,96603],{"class":78,"line":1275},[76,96604,96605],{"class":146},"# 对角线向上偏移1\n",[76,96607,96608,96610,96612,96614,96616,96618,96620,96622,96624],{"class":78,"line":1281},[76,96609,96493],{"class":86},[76,96611,159],{"class":136},[76,96613,12402],{"class":86},[76,96615,381],{"class":136},[76,96617,12402],{"class":86},[76,96619,581],{"class":5183},[76,96621,133],{"class":82},[76,96623,305],{"class":136},[76,96625,93],{"class":86},[76,96627,96628],{"class":78,"line":1293},[76,96629,96581],{"class":146},[76,96631,96632],{"class":78,"line":1576},[76,96633,96634],{"class":146},"# [[0. 1. 0. 0.]\n",[76,96636,96637],{"class":78,"line":1581},[76,96638,96639],{"class":146},"#  [0. 0. 1. 0.]\n",[76,96641,96642],{"class":78,"line":1587},[76,96643,96644],{"class":146},"#  [0. 0. 0. 1.]]\n",[46,96646,96648],{"id":96647},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[66,96650,96652],{"className":30347,"code":96651,"language":30349,"meta":71,"style":71},"#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",[73,96653,96654,96659,96663,96668,96673,96678,96683,96688,96693,96698,96703],{"__ignoreMap":71},[76,96655,96656],{"class":78,"line":79},[76,96657,96658],{"class":146},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[76,96660,96661],{"class":78,"line":96},[76,96662,95667],{"class":192},[76,96664,96665],{"class":78,"line":1143},[76,96666,96667],{"class":192},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[76,96669,96670],{"class":78,"line":1158},[76,96671,96672],{"class":192},"参数介绍：\n",[76,96674,96675],{"class":78,"line":1164},[76,96676,96677],{"class":192},"start：序列的起始值\n",[76,96679,96680],{"class":78,"line":1178},[76,96681,96682],{"class":192},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[76,96684,96685],{"class":78,"line":1184},[76,96686,96687],{"class":192},"num：要生长的等步长的样本数量，默认为50\n",[76,96689,96690],{"class":78,"line":1275},[76,96691,96692],{"class":192},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[76,96694,96695],{"class":78,"line":1281},[76,96696,96697],{"class":192},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[76,96699,96700],{"class":78,"line":1293},[76,96701,96702],{"class":192},"dtype：ndarry的数据类型\n",[76,96704,96705],{"class":78,"line":1576},[76,96706,95667],{"class":192},[21,96708,96709],{},[1426,96710],{"alt":71,"src":96711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[21,96713,96714],{},"这里num=是可以省略的",[21,96716,96717],{},"也就是下方两行代码结果是一模一样的",[66,96719,96721],{"className":30347,"code":96720,"language":30349,"meta":71,"style":71},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[73,96722,96723,96740],{"__ignoreMap":71},[76,96724,96725,96728,96730,96732,96734,96736,96738],{"class":78,"line":79},[76,96726,96727],{"class":86},"np.linspace(",[76,96729,305],{"class":136},[76,96731,466],{"class":86},[76,96733,407],{"class":136},[76,96735,466],{"class":86},[76,96737,407],{"class":136},[76,96739,93],{"class":86},[76,96741,96742,96744,96746,96748,96750,96752,96754,96756,96758],{"class":78,"line":96},[76,96743,96727],{"class":86},[76,96745,305],{"class":136},[76,96747,466],{"class":86},[76,96749,407],{"class":136},[76,96751,466],{"class":86},[76,96753,1629],{"class":5183},[76,96755,133],{"class":82},[76,96757,407],{"class":136},[76,96759,93],{"class":86},[46,96761,96763],{"id":96762},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[66,96765,96767],{"className":30347,"code":96766,"language":30349,"meta":71,"style":71},"#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",[73,96768,96769,96774,96778,96783,96788,96793,96798,96802,96807,96812,96816],{"__ignoreMap":71},[76,96770,96771],{"class":78,"line":79},[76,96772,96773],{"class":146},"#logspace函数用于创建一个等比数列，格式如下：\n",[76,96775,96776],{"class":78,"line":96},[76,96777,95667],{"class":192},[76,96779,96780],{"class":78,"line":1143},[76,96781,96782],{"class":192},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[76,96784,96785],{"class":78,"line":1158},[76,96786,96787],{"class":192},"参数为：\n",[76,96789,96790],{"class":78,"line":1164},[76,96791,96792],{"class":192},"start:序列的起始位置为：base**start\n",[76,96794,96795],{"class":78,"line":1178},[76,96796,96797],{"class":192},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[76,96799,96800],{"class":78,"line":1184},[76,96801,96687],{"class":192},[76,96803,96804],{"class":78,"line":1275},[76,96805,96806],{"class":192},"endpoint：是否包含 stop 这个值，默认是 True\n",[76,96808,96809],{"class":78,"line":1281},[76,96810,96811],{"class":192},"base：对数的底数，默认是 10（常见对数）\n",[76,96813,96814],{"class":78,"line":1293},[76,96815,96702],{"class":192},[76,96817,96818],{"class":78,"line":1576},[76,96819,95667],{"class":192},[21,96821,96822],{},[1426,96823],{"alt":71,"src":96824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[21,96826,96827],{},"logspace()函数中的num参数也是可以不写num=的",[21,96829,96830],{},"endpoint是不可以省略的",[5092,96832,96833],{},"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":71,"searchDepth":96,"depth":96,"links":96835},[96836,96840,96845,96849,96853,96854],{"id":95225,"depth":96,"text":95226,"children":96837},[96838,96839],{"id":95229,"depth":1143,"text":95230},{"id":95302,"depth":1143,"text":95303},{"id":95334,"depth":96,"text":95335,"children":96841},[96842,96843,96844],{"id":95338,"depth":1143,"text":95339},{"id":95520,"depth":1143,"text":95521},{"id":95598,"depth":1143,"text":95599},{"id":95633,"depth":96,"text":95634,"children":96846},[96847,96848],{"id":95637,"depth":1143,"text":95638},{"id":95694,"depth":1143,"text":95695},{"id":95790,"depth":96,"text":95791,"children":96850},[96851,96852],{"id":95794,"depth":1143,"text":95795},{"id":95806,"depth":1143,"text":95807},{"id":95840,"depth":96,"text":95841},{"id":95877,"depth":96,"text":95878,"children":96855},[96856,96857,96858,96859,96860,96861,96862,96863],{"id":95881,"depth":1143,"text":95882},{"id":96106,"depth":1143,"text":96107},{"id":96113,"depth":1143,"text":96114},{"id":96322,"depth":1143,"text":96323},{"id":96342,"depth":1143,"text":96343},{"id":96478,"depth":1143,"text":96479},{"id":96647,"depth":1143,"text":96648},{"id":96762,"depth":1143,"text":96763},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95217,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96870,"title":96871,"body":96872,"description":23344,"extension":5123,"meta":96965,"navigation":2364,"path":96966,"seo":96967,"stem":96968,"__hash__":96969},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":9,"value":96873,"toc":96963},[96874,96877,96880,96883,96886,96889,96892,96895,96898,96901,96904,96907,96909,96912,96915,96920,96923,96926,96960],[12,96875,96871],{"id":96876},"_20魔法命令mprun",[21,96878,96879],{},"逐行分析数据内存的使用情况",[21,96881,96882],{},"语法格式：",[21,96884,96885],{},"%mprun -f 模块名.函数名 模块名.函数名()",[21,96887,96888],{},"分析结果列如下：",[21,96890,96891],{},"Line行号",[21,96893,96894],{},"Mem usage内存使用大小",[21,96896,96897],{},"increment内存增量",[21,96899,96900],{},"Line content代码内容",[21,96902,96903],{},"补充说明：",[21,96905,96906],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[21,96908,95172],{},[21,96910,96911],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[21,96913,96914],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[21,96916,96917],{},[1426,96918],{"alt":71,"src":96919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[21,96921,96922],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[21,96924,96925],{},"这时候需要重新加载模块",[66,96927,96929],{"className":30347,"code":96928,"language":30349,"meta":71,"style":71},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[73,96930,96931,96936,96943,96948],{"__ignoreMap":71},[76,96932,96933],{"class":78,"line":79},[76,96934,96935],{"class":146},"#重新加载模块\n",[76,96937,96938,96940],{"class":78,"line":96},[76,96939,30361],{"class":82},[76,96941,96942],{"class":86}," importlib\n",[76,96944,96945],{"class":78,"line":1143},[76,96946,96947],{"class":86},"importlib.reload(mprun_test)\n",[76,96949,96950,96952,96955,96957],{"class":78,"line":1158},[76,96951,416],{"class":82},[76,96953,96954],{"class":86},"mprun ",[76,96956,620],{"class":82},[76,96958,96959],{"class":86},"f mprun_test.fun_test mprun_test.fun_test()\n",[5092,96961,96962],{},"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":71,"searchDepth":96,"depth":96,"links":96964},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96871,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96971,"title":96972,"body":96973,"description":23344,"extension":5123,"meta":96990,"navigation":2364,"path":96991,"seo":96992,"stem":96993,"__hash__":96994},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":9,"value":96974,"toc":96988},[96975,96978,96983],[12,96976,96972],{"id":96977},"_3一维数组的索引和切片",[21,96979,96980],{},[1426,96981],{"alt":71,"src":96982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[21,96984,96985],{},[1426,96986],{"alt":71,"src":96987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":71,"searchDepth":96,"depth":96,"links":96989},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96972,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":96996,"title":96997,"body":96998,"description":23344,"extension":5123,"meta":97481,"navigation":2364,"path":97482,"seo":97483,"stem":97484,"__hash__":97485},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":9,"value":96999,"toc":97479},[97000,97003,97006,97011,97044,97047,97085,97088,97122,97125,97230,97233,97270,97273,97374,97377,97428,97431,97473,97476],[12,97001,96997],{"id":97002},"_4二维数组的索引与切片",[21,97004,97005],{},"①获取指定单个元素",[21,97007,97008],{},[1426,97009],{"alt":71,"src":97010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[66,97012,97014],{"className":30347,"code":97013,"language":30349,"meta":71,"style":71},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[73,97015,97016,97021,97026,97031],{"__ignoreMap":71},[76,97017,97018],{"class":78,"line":79},[76,97019,97020],{"class":146},"#获取元素9\n",[76,97022,97023],{"class":78,"line":96},[76,97024,97025],{"class":146},"#先获取所在行，再获取所在列\n",[76,97027,97028],{"class":78,"line":1143},[76,97029,97030],{"class":146},"#数组[行索引号，列索引号]\n",[76,97032,97033,97036,97038,97040,97042],{"class":78,"line":1158},[76,97034,97035],{"class":86},"a[",[76,97037,305],{"class":136},[76,97039,466],{"class":86},[76,97041,165],{"class":136},[76,97043,33215],{"class":86},[21,97045,97046],{},"②获取整行元素",[66,97048,97050],{"className":30347,"code":97049,"language":30349,"meta":71,"style":71},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[73,97051,97052,97057,97062,97070,97075],{"__ignoreMap":71},[76,97053,97054],{"class":78,"line":79},[76,97055,97056],{"class":146},"#获取整行 数组[行索引号]\n",[76,97058,97059],{"class":78,"line":96},[76,97060,97061],{"class":146},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[76,97063,97064,97066,97068],{"class":78,"line":1143},[76,97065,97035],{"class":86},[76,97067,165],{"class":136},[76,97069,33215],{"class":86},[76,97071,97072],{"class":78,"line":1158},[76,97073,97074],{"class":146},"#也可以负索引获取一行\n",[76,97076,97077,97079,97081,97083],{"class":78,"line":1164},[76,97078,97035],{"class":86},[76,97080,620],{"class":82},[76,97082,305],{"class":136},[76,97084,33215],{"class":86},[21,97086,97087],{},"③获取整列元素",[66,97089,97091],{"className":30347,"code":97090,"language":30349,"meta":71,"style":71},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[73,97092,97093,97098,97107,97112],{"__ignoreMap":71},[76,97094,97095],{"class":78,"line":79},[76,97096,97097],{"class":146},"#获取整列 数组名[:,列索引]\n",[76,97099,97100,97103,97105],{"class":78,"line":96},[76,97101,97102],{"class":86},"a[:,",[76,97104,165],{"class":136},[76,97106,33215],{"class":86},[76,97108,97109],{"class":78,"line":1143},[76,97110,97111],{"class":146},"#也可以负索引获取一列\n",[76,97113,97114,97116,97118,97120],{"class":78,"line":1158},[76,97115,97102],{"class":86},[76,97117,620],{"class":82},[76,97119,305],{"class":136},[76,97121,33215],{"class":86},[21,97123,97124],{},"④部分行部分列的元素",[66,97126,97128],{"className":30347,"code":97127,"language":30349,"meta":71,"style":71},"#部分行部分列 数组名[行切片，列切片]\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",[73,97129,97130,97135,97145,97149,97153,97158,97163,97167,97179,97183,97187,97192,97197,97202,97207,97211,97216],{"__ignoreMap":71},[76,97131,97132],{"class":78,"line":79},[76,97133,97134],{"class":146},"#部分行部分列 数组名[行切片，列切片]\n",[76,97136,97137,97140,97142],{"class":78,"line":96},[76,97138,97139],{"class":86},"a[:",[76,97141,165],{"class":136},[76,97143,97144],{"class":86},",:]\n",[76,97146,97147],{"class":78,"line":1143},[76,97148,93533],{"class":146},[76,97150,97151],{"class":78,"line":1158},[76,97152,93897],{"class":192},[76,97154,97155],{"class":78,"line":1164},[76,97156,97157],{"class":192},"array([[ 1,  2,  3,  4,  5,  6],\n",[76,97159,97160],{"class":78,"line":1178},[76,97161,97162],{"class":192},"       [ 7,  8,  9, 10, 11, 12]])\n",[76,97164,97165],{"class":78,"line":1184},[76,97166,93897],{"class":192},[76,97168,97169,97171,97173,97175,97177],{"class":78,"line":1275},[76,97170,97102],{"class":86},[76,97172,305],{"class":136},[76,97174,947],{"class":86},[76,97176,381],{"class":136},[76,97178,33215],{"class":86},[76,97180,97181],{"class":78,"line":1281},[76,97182,93533],{"class":146},[76,97184,97185],{"class":78,"line":1293},[76,97186,93897],{"class":192},[76,97188,97189],{"class":78,"line":1576},[76,97190,97191],{"class":192},"array([[ 2,  3,  4],\n",[76,97193,97194],{"class":78,"line":1581},[76,97195,97196],{"class":192},"       [ 8,  9, 10],\n",[76,97198,97199],{"class":78,"line":1587},[76,97200,97201],{"class":192},"       [14, 15, 16],\n",[76,97203,97204],{"class":78,"line":1592},[76,97205,97206],{"class":192},"       [20, 21, 22]])\n",[76,97208,97209],{"class":78,"line":1606},[76,97210,93897],{"class":192},[76,97212,97213],{"class":78,"line":1611},[76,97214,97215],{"class":146},"#对列行同时进行切片，使用了step参数\n",[76,97217,97218,97221,97223,97226,97228],{"class":78,"line":1617},[76,97219,97220],{"class":86},"a[::",[76,97222,165],{"class":136},[76,97224,97225],{"class":86},",::",[76,97227,165],{"class":136},[76,97229,33215],{"class":86},[21,97231,97232],{},"⑤同时获取两个元素",[66,97234,97236],{"className":30347,"code":97235,"language":30349,"meta":71,"style":71},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[73,97237,97238,97243,97248],{"__ignoreMap":71},[76,97239,97240],{"class":78,"line":79},[76,97241,97242],{"class":146},"#同时获取第三行第二列，第四行第一列\n",[76,97244,97245],{"class":78,"line":96},[76,97246,97247],{"class":146},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[76,97249,97250,97253,97255,97257,97259,97261,97263,97265,97267],{"class":78,"line":1143},[76,97251,97252],{"class":86},"a[(",[76,97254,165],{"class":136},[76,97256,466],{"class":86},[76,97258,159],{"class":136},[76,97260,42216],{"class":86},[76,97262,305],{"class":136},[76,97264,466],{"class":86},[76,97266,279],{"class":136},[76,97268,97269],{"class":86},")]\n",[21,97271,97272],{},"⑥切片，对行进行反向获取",[66,97274,97276],{"className":30347,"code":97275,"language":30349,"meta":71,"style":71},"#切片 对所有行进行反向获取\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",[73,97277,97278,97283,97293,97297,97301,97306,97311,97316,97321,97325,97330,97346,97350,97355,97360,97365,97370],{"__ignoreMap":71},[76,97279,97280],{"class":78,"line":79},[76,97281,97282],{"class":146},"#切片 对所有行进行反向获取\n",[76,97284,97285,97287,97289,97291],{"class":78,"line":96},[76,97286,97220],{"class":86},[76,97288,620],{"class":82},[76,97290,305],{"class":136},[76,97292,33215],{"class":86},[76,97294,97295],{"class":78,"line":1143},[76,97296,93533],{"class":146},[76,97298,97299],{"class":78,"line":1158},[76,97300,93897],{"class":192},[76,97302,97303],{"class":78,"line":1164},[76,97304,97305],{"class":192},"array([[19, 20, 21, 22, 23, 24],\n",[76,97307,97308],{"class":78,"line":1178},[76,97309,97310],{"class":192},"       [13, 14, 15, 16, 17, 18],\n",[76,97312,97313],{"class":78,"line":1184},[76,97314,97315],{"class":192},"       [ 7,  8,  9, 10, 11, 12],\n",[76,97317,97318],{"class":78,"line":1275},[76,97319,97320],{"class":192},"       [ 1,  2,  3,  4,  5,  6]])\n",[76,97322,97323],{"class":78,"line":1281},[76,97324,93897],{"class":192},[76,97326,97327],{"class":78,"line":1293},[76,97328,97329],{"class":146},"#对行列都进行反向切片获取\n",[76,97331,97332,97334,97336,97338,97340,97342,97344],{"class":78,"line":1576},[76,97333,97220],{"class":86},[76,97335,620],{"class":82},[76,97337,305],{"class":136},[76,97339,97225],{"class":86},[76,97341,620],{"class":82},[76,97343,305],{"class":136},[76,97345,33215],{"class":86},[76,97347,97348],{"class":78,"line":1581},[76,97349,93897],{"class":192},[76,97351,97352],{"class":78,"line":1587},[76,97353,97354],{"class":192},"array([[24, 23, 22, 21, 20, 19],\n",[76,97356,97357],{"class":78,"line":1592},[76,97358,97359],{"class":192},"       [18, 17, 16, 15, 14, 13],\n",[76,97361,97362],{"class":78,"line":1606},[76,97363,97364],{"class":192},"       [12, 11, 10,  9,  8,  7],\n",[76,97366,97367],{"class":78,"line":1611},[76,97368,97369],{"class":192},"       [ 6,  5,  4,  3,  2,  1]])\n",[76,97371,97372],{"class":78,"line":1617},[76,97373,93897],{"class":192},[21,97375,97376],{},"⑦修改元素",[66,97378,97380],{"className":30347,"code":97379,"language":30349,"meta":71,"style":71},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[73,97381,97382,97387,97405,97410],{"__ignoreMap":71},[76,97383,97384],{"class":78,"line":79},[76,97385,97386],{"class":146},"#获取前两行和前两列\n",[76,97388,97389,97392,97394,97396,97398,97401,97403],{"class":78,"line":96},[76,97390,97391],{"class":86},"sub_a",[76,97393,133],{"class":82},[76,97395,97139],{"class":86},[76,97397,165],{"class":136},[76,97399,97400],{"class":86},",:",[76,97402,165],{"class":136},[76,97404,33215],{"class":86},[76,97406,97407],{"class":78,"line":1143},[76,97408,97409],{"class":146},"#修改sub_a第一个元素的值\n",[76,97411,97412,97415,97417,97419,97421,97423,97425],{"class":78,"line":1158},[76,97413,97414],{"class":86},"sub_a[",[76,97416,279],{"class":136},[76,97418,466],{"class":86},[76,97420,279],{"class":136},[76,97422,1028],{"class":86},[76,97424,133],{"class":82},[76,97426,97427],{"class":136},"100\n",[21,97429,97430],{},"⑧数组复制copy()",[66,97432,97434],{"className":30347,"code":97433,"language":30349,"meta":71,"style":71},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[73,97435,97436,97441,97451,97456],{"__ignoreMap":71},[76,97437,97438],{"class":78,"line":79},[76,97439,97440],{"class":146},"#数组复制\n",[76,97442,97443,97446,97448],{"class":78,"line":96},[76,97444,97445],{"class":86},"copy_a",[76,97447,133],{"class":82},[76,97449,97450],{"class":86},"np.copy(sub_a)\n",[76,97452,97453],{"class":78,"line":1143},[76,97454,97455],{"class":146},"#修改copy_a后不影响原数组\n",[76,97457,97458,97461,97463,97465,97467,97469,97471],{"class":78,"line":1158},[76,97459,97460],{"class":86},"copy_a[",[76,97462,279],{"class":136},[76,97464,466],{"class":86},[76,97466,279],{"class":136},[76,97468,1028],{"class":86},[76,97470,133],{"class":82},[76,97472,97427],{"class":136},[21,97474,97475],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5092,97477,97478],{},"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":71,"searchDepth":96,"depth":96,"links":97480},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":96997,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97487,"title":97488,"body":97489,"description":23344,"extension":5123,"meta":97981,"navigation":2364,"path":97982,"seo":97983,"stem":97984,"__hash__":97985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":9,"value":97490,"toc":97973},[97491,97494,97498,97501,97504,97557,97560,97585,97588,97607,97627,97630,97646,97650,97696,97700,97742,97746,97749,97752,97755,97758,97761,97823,97883,97887,97890,97947,97951,97956,97965,97970],[12,97492,97488],{"id":97493},"_5改变数组的维度",[16,97495,97497],{"id":97496},"_51-使用reshape","5.1 使用reshape()",[21,97499,97500],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[21,97502,97503],{},"①一维数组转换为二维数组",[66,97505,97507],{"className":30347,"code":97506,"language":30349,"meta":71,"style":71},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[73,97508,97509,97525,97530,97535,97540],{"__ignoreMap":71},[76,97510,97511,97513,97515,97517,97519,97521,97523],{"class":78,"line":79},[76,97512,326],{"class":86},[76,97514,133],{"class":82},[76,97516,92971],{"class":86},[76,97518,305],{"class":136},[76,97520,466],{"class":86},[76,97522,611],{"class":136},[76,97524,93],{"class":86},[76,97526,97527],{"class":78,"line":96},[76,97528,97529],{"class":146},"#将一维数组进行转换\n",[76,97531,97532],{"class":78,"line":1143},[76,97533,97534],{"class":146},"#注意点：元素个数不可以变\n",[76,97536,97537],{"class":78,"line":1158},[76,97538,97539],{"class":146},"#转换维度要保持一致，不一致就异常！！！\n",[76,97541,97542,97544,97546,97549,97551,97553,97555],{"class":78,"line":1164},[76,97543,93275],{"class":86},[76,97545,133],{"class":82},[76,97547,97548],{"class":86},"a.reshape(",[76,97550,165],{"class":136},[76,97552,466],{"class":86},[76,97554,432],{"class":136},[76,97556,93],{"class":86},[21,97558,97559],{},"②一维数组转换为三维数组",[66,97561,97563],{"className":30347,"code":97562,"language":30349,"meta":71,"style":71},"aaa=a.reshape(2,3,2)\n",[73,97564,97565],{"__ignoreMap":71},[76,97566,97567,97569,97571,97573,97575,97577,97579,97581,97583],{"class":78,"line":79},[76,97568,95490],{"class":86},[76,97570,133],{"class":82},[76,97572,97548],{"class":86},[76,97574,165],{"class":136},[76,97576,466],{"class":86},[76,97578,159],{"class":136},[76,97580,466],{"class":86},[76,97582,165],{"class":136},[76,97584,93],{"class":86},[21,97586,97587],{},"③二维数组转化为一维数组",[66,97589,97591],{"className":30347,"code":97590,"language":30349,"meta":71,"style":71},"#知道元素个数：\naa.reshape(12)\n",[73,97592,97593,97598],{"__ignoreMap":71},[76,97594,97595],{"class":78,"line":79},[76,97596,97597],{"class":146},"#知道元素个数：\n",[76,97599,97600,97603,97605],{"class":78,"line":96},[76,97601,97602],{"class":86},"aa.reshape(",[76,97604,586],{"class":136},[76,97606,93],{"class":86},[66,97608,97610],{"className":30347,"code":97609,"language":30349,"meta":71,"style":71},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[73,97611,97612,97617],{"__ignoreMap":71},[76,97613,97614],{"class":78,"line":79},[76,97615,97616],{"class":146},"#不知道元素个数，参数传递-1\n",[76,97618,97619,97621,97623,97625],{"class":78,"line":96},[76,97620,97602],{"class":86},[76,97622,620],{"class":82},[76,97624,305],{"class":136},[76,97626,93],{"class":86},[21,97628,97629],{},"④三维数组转换为一维数组",[66,97631,97633],{"className":30347,"code":97632,"language":30349,"meta":71,"style":71},"aaa.reshape(-1)\n",[73,97634,97635],{"__ignoreMap":71},[76,97636,97637,97640,97642,97644],{"class":78,"line":79},[76,97638,97639],{"class":86},"aaa.reshape(",[76,97641,620],{"class":82},[76,97643,305],{"class":136},[76,97645,93],{"class":86},[16,97647,97649],{"id":97648},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[66,97651,97653],{"className":30347,"code":97652,"language":30349,"meta":71,"style":71},"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",[73,97654,97655,97682,97687,97691],{"__ignoreMap":71},[76,97656,97657,97659,97661,97663,97665,97667,97669,97671,97673,97675,97677,97679],{"class":78,"line":79},[76,97658,93275],{"class":86},[76,97660,133],{"class":82},[76,97662,92971],{"class":86},[76,97664,305],{"class":136},[76,97666,466],{"class":86},[76,97668,611],{"class":136},[76,97670,92976],{"class":86},[76,97672,165],{"class":136},[76,97674,466],{"class":86},[76,97676,432],{"class":136},[76,97678,517],{"class":86},[76,97680,97681],{"class":146},"#转换为2行6列的数组\n",[76,97683,97684],{"class":78,"line":96},[76,97685,97686],{"class":86},"aa.revel()\n",[76,97688,97689],{"class":78,"line":1143},[76,97690,93533],{"class":146},[76,97692,97693],{"class":78,"line":1158},[76,97694,97695],{"class":146},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[16,97697,97699],{"id":97698},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[66,97701,97703],{"className":30347,"code":97702,"language":30349,"meta":71,"style":71},"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",[73,97704,97705,97729,97734,97738],{"__ignoreMap":71},[76,97706,97707,97709,97711,97713,97715,97717,97719,97721,97723,97725,97727],{"class":78,"line":79},[76,97708,93275],{"class":86},[76,97710,133],{"class":82},[76,97712,92971],{"class":86},[76,97714,305],{"class":136},[76,97716,466],{"class":86},[76,97718,611],{"class":136},[76,97720,92976],{"class":86},[76,97722,165],{"class":136},[76,97724,466],{"class":86},[76,97726,432],{"class":136},[76,97728,93],{"class":86},[76,97730,97731],{"class":78,"line":96},[76,97732,97733],{"class":86},"aa.flatten()\n",[76,97735,97736],{"class":78,"line":1143},[76,97737,93533],{"class":146},[76,97739,97740],{"class":78,"line":1158},[76,97741,97695],{"class":146},[16,97743,97745],{"id":97744},"_54-使用resize","5.4 使用resize()",[21,97747,97748],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[21,97750,97751],{},"通过resize方法可以改变数组的维度",[21,97753,97754],{},"#resize修改数组维度",[21,97756,97757],{},"#以元组的形式指定形状",[21,97759,97760],{},"#改变的是原数组",[66,97762,97764],{"className":30347,"code":97763,"language":30349,"meta":71,"style":71},"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",[73,97765,97766,97782,97802,97815,97819],{"__ignoreMap":71},[76,97767,97768,97770,97772,97774,97776,97778,97780],{"class":78,"line":79},[76,97769,326],{"class":86},[76,97771,133],{"class":82},[76,97773,92971],{"class":86},[76,97775,305],{"class":136},[76,97777,466],{"class":86},[76,97779,611],{"class":136},[76,97781,93],{"class":86},[76,97783,97784,97787,97789,97791,97793,97795,97797,97799],{"class":78,"line":96},[76,97785,97786],{"class":86},"a.shape",[76,97788,133],{"class":82},[76,97790,87],{"class":86},[76,97792,165],{"class":136},[76,97794,466],{"class":86},[76,97796,432],{"class":136},[76,97798,517],{"class":86},[76,97800,97801],{"class":146},"#改变了原数组\n",[76,97803,97804,97806,97808,97811,97813],{"class":78,"line":1143},[76,97805,326],{"class":86},[76,97807,133],{"class":82},[76,97809,97810],{"class":86},"resize((",[76,97812,586],{"class":136},[76,97814,30466],{"class":86},[76,97816,97817],{"class":78,"line":1158},[76,97818,93533],{"class":146},[76,97820,97821],{"class":78,"line":1164},[76,97822,97695],{"class":146},[66,97824,97826],{"className":30347,"code":97825,"language":30349,"meta":71,"style":71},"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",[73,97827,97828,97841,97845,97849,97854,97859,97864,97869,97874,97879],{"__ignoreMap":71},[76,97829,97830,97833,97835,97837,97839],{"class":78,"line":79},[76,97831,97832],{"class":86},"a.resize((",[76,97834,432],{"class":136},[76,97836,466],{"class":86},[76,97838,165],{"class":136},[76,97840,30466],{"class":86},[76,97842,97843],{"class":78,"line":96},[76,97844,93533],{"class":146},[76,97846,97847],{"class":78,"line":1143},[76,97848,93897],{"class":192},[76,97850,97851],{"class":78,"line":1158},[76,97852,97853],{"class":192},"array([[ 1,  2],\n",[76,97855,97856],{"class":78,"line":1164},[76,97857,97858],{"class":192},"       [ 3,  4],\n",[76,97860,97861],{"class":78,"line":1178},[76,97862,97863],{"class":192},"       [ 5,  6],\n",[76,97865,97866],{"class":78,"line":1184},[76,97867,97868],{"class":192},"       [ 7,  8],\n",[76,97870,97871],{"class":78,"line":1275},[76,97872,97873],{"class":192},"       [ 9, 10],\n",[76,97875,97876],{"class":78,"line":1281},[76,97877,97878],{"class":192},"       [11, 12]])\n",[76,97880,97881],{"class":78,"line":1293},[76,97882,93897],{"class":192},[16,97884,97886],{"id":97885},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[21,97888,97889],{},"改变了原数组",[66,97891,97893],{"className":30347,"code":97892,"language":30349,"meta":71,"style":71},"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",[73,97894,97895,97911,97927,97931,97935,97939,97943],{"__ignoreMap":71},[76,97896,97897,97899,97901,97903,97905,97907,97909],{"class":78,"line":79},[76,97898,326],{"class":86},[76,97900,133],{"class":82},[76,97902,92971],{"class":86},[76,97904,305],{"class":136},[76,97906,466],{"class":86},[76,97908,611],{"class":136},[76,97910,93],{"class":86},[76,97912,97913,97915,97917,97919,97921,97923,97925],{"class":78,"line":96},[76,97914,97786],{"class":86},[76,97916,133],{"class":82},[76,97918,87],{"class":86},[76,97920,165],{"class":136},[76,97922,466],{"class":86},[76,97924,432],{"class":136},[76,97926,93],{"class":86},[76,97928,97929],{"class":78,"line":1143},[76,97930,93533],{"class":146},[76,97932,97933],{"class":78,"line":1158},[76,97934,93897],{"class":192},[76,97936,97937],{"class":78,"line":1164},[76,97938,97157],{"class":192},[76,97940,97941],{"class":78,"line":1178},[76,97942,97162],{"class":192},[76,97944,97945],{"class":78,"line":1184},[76,97946,93897],{"class":192},[16,97948,97950],{"id":97949},"_56-重要比较","5.6 重要比较：",[21,97952,97953],{},[1426,97954],{"alt":71,"src":97955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[21,97957,97958,97959,97961,97962,97964],{},"口诀：NumPy 函数要么用 ",[73,97960,95932],{},"，要么用 ",[73,97963,31465],{},"，创建结构用 shape，造数据用 size",[21,97966,97967],{},[1426,97968],{"alt":71,"src":97969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5092,97971,97972],{},"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":71,"searchDepth":96,"depth":96,"links":97974},[97975,97976,97977,97978,97979,97980],{"id":97496,"depth":96,"text":97497},{"id":97648,"depth":96,"text":97649},{"id":97698,"depth":96,"text":97699},{"id":97744,"depth":96,"text":97745},{"id":97885,"depth":96,"text":97886},{"id":97949,"depth":96,"text":97950},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97488,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97987,"title":97988,"body":97989,"description":23344,"extension":5123,"meta":99061,"navigation":2364,"path":99062,"seo":99063,"stem":99064,"__hash__":99065},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":9,"value":97990,"toc":99055},[97991,97994,97998,98001,98004,98007,98072,98075,98115,98118,98200,98203,98208,98230,98232,98237,98242,98245,98248,98403,98406,98608,98612,98615,98618,98686,98688,98693,98696,98699,98779,98783,98786,98788,98861,98863,98868,98870,98950,98954,98957,98960,98963,98966,98969,98972,99052],[12,97992,97988],{"id":97993},"_6数组的拼接",[16,97995,97997],{"id":97996},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[21,97999,98000],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[21,98002,98003],{},"函数内部传两个数列构成的数列或者元组",[21,98005,98006],{},"①一维数组的拼接",[66,98008,98010],{"className":30347,"code":98009,"language":30349,"meta":71,"style":71},"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",[73,98011,98012,98032,98052,98057,98062,98067],{"__ignoreMap":71},[76,98013,98014,98016,98018,98020,98022,98024,98026,98028,98030],{"class":78,"line":79},[76,98015,326],{"class":86},[76,98017,133],{"class":82},[76,98019,92993],{"class":86},[76,98021,305],{"class":136},[76,98023,466],{"class":86},[76,98025,165],{"class":136},[76,98027,466],{"class":86},[76,98029,159],{"class":136},[76,98031,4622],{"class":86},[76,98033,98034,98036,98038,98040,98042,98044,98046,98048,98050],{"class":78,"line":96},[76,98035,351],{"class":86},[76,98037,133],{"class":82},[76,98039,92993],{"class":86},[76,98041,381],{"class":136},[76,98043,466],{"class":86},[76,98045,407],{"class":136},[76,98047,466],{"class":86},[76,98049,432],{"class":136},[76,98051,4622],{"class":86},[76,98053,98054],{"class":78,"line":1143},[76,98055,98056],{"class":146},"#调用concatenate进行数组拼接\n",[76,98058,98059],{"class":78,"line":1158},[76,98060,98061],{"class":86},"np.concatenate((a,b))\n",[76,98063,98064],{"class":78,"line":1164},[76,98065,98066],{"class":146},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[76,98068,98069],{"class":78,"line":1178},[76,98070,98071],{"class":146},"#np.concatenate([a,b])\n",[21,98073,98074],{},"②一维多个数组拼接",[66,98076,98078],{"className":30347,"code":98077,"language":30349,"meta":71,"style":71},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[73,98079,98080,98085,98105,98110],{"__ignoreMap":71},[76,98081,98082],{"class":78,"line":79},[76,98083,98084],{"class":146},"#也可以多个数组进行拼接\n",[76,98086,98087,98089,98091,98093,98095,98097,98099,98101,98103],{"class":78,"line":96},[76,98088,376],{"class":86},[76,98090,133],{"class":82},[76,98092,92993],{"class":86},[76,98094,534],{"class":136},[76,98096,466],{"class":86},[76,98098,560],{"class":136},[76,98100,466],{"class":86},[76,98102,611],{"class":136},[76,98104,4622],{"class":86},[76,98106,98107],{"class":78,"line":1143},[76,98108,98109],{"class":86},"c\n",[76,98111,98112],{"class":78,"line":1158},[76,98113,98114],{"class":86},"np.concatenate((a,b,c))\n",[21,98116,98117],{},"③二维数组拼接",[66,98119,98121],{"className":30347,"code":98120,"language":30349,"meta":71,"style":71},"#二维数组使用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",[73,98122,98123,98128,98152,98177,98182,98187],{"__ignoreMap":71},[76,98124,98125],{"class":78,"line":79},[76,98126,98127],{"class":146},"#二维数组使用concatenate进行拼接\n",[76,98129,98130,98132,98134,98136,98138,98140,98142,98144,98146,98148,98150],{"class":78,"line":96},[76,98131,93275],{"class":86},[76,98133,133],{"class":82},[76,98135,92971],{"class":86},[76,98137,305],{"class":136},[76,98139,466],{"class":86},[76,98141,611],{"class":136},[76,98143,92976],{"class":86},[76,98145,159],{"class":136},[76,98147,466],{"class":86},[76,98149,381],{"class":136},[76,98151,93],{"class":86},[76,98153,98154,98157,98159,98161,98163,98165,98167,98169,98171,98173,98175],{"class":78,"line":1143},[76,98155,98156],{"class":86},"bb",[76,98158,133],{"class":82},[76,98160,92971],{"class":86},[76,98162,425],{"class":136},[76,98164,466],{"class":86},[76,98166,730],{"class":136},[76,98168,92976],{"class":86},[76,98170,159],{"class":136},[76,98172,466],{"class":86},[76,98174,381],{"class":136},[76,98176,93],{"class":86},[76,98178,98179],{"class":78,"line":1158},[76,98180,98181],{"class":146},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[76,98183,98184],{"class":78,"line":1164},[76,98185,98186],{"class":146},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[76,98188,98189,98192,98194,98196,98198],{"class":78,"line":1178},[76,98190,98191],{"class":86},"np.concatenate((aa,bb),",[76,98193,47483],{"class":5183},[76,98195,133],{"class":82},[76,98197,279],{"class":136},[76,98199,93],{"class":86},[21,98201,98202],{},"结果：",[21,98204,98205],{},[1426,98206],{"alt":71,"src":98207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[66,98209,98211],{"className":30347,"code":98210,"language":30349,"meta":71,"style":71},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[73,98212,98213,98218],{"__ignoreMap":71},[76,98214,98215],{"class":78,"line":79},[76,98216,98217],{"class":146},"#指定axis为1进行拼接\n",[76,98219,98220,98222,98224,98226,98228],{"class":78,"line":96},[76,98221,98191],{"class":86},[76,98223,47483],{"class":5183},[76,98225,133],{"class":82},[76,98227,305],{"class":136},[76,98229,93],{"class":86},[21,98231,98202],{},[21,98233,98234],{},[1426,98235],{"alt":71,"src":98236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[21,98238,98239],{},[237,98240,98241],{},"二维数组总结：0竖着方向，1横着方向",[21,98243,98244],{},"④三维数组拼接",[21,98246,98247],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[66,98249,98251],{"className":30347,"code":98250,"language":30349,"meta":71,"style":71},"#两个三行六列\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",[73,98252,98253,98258,98286,98316,98321,98338,98343,98348,98353,98370,98375,98380,98385,98398],{"__ignoreMap":71},[76,98254,98255],{"class":78,"line":79},[76,98256,98257],{"class":146},"#两个三行六列\n",[76,98259,98260,98262,98264,98266,98268,98270,98272,98274,98276,98278,98280,98282,98284],{"class":78,"line":96},[76,98261,95490],{"class":86},[76,98263,133],{"class":82},[76,98265,92971],{"class":86},[76,98267,305],{"class":136},[76,98269,466],{"class":86},[76,98271,413],{"class":136},[76,98273,92976],{"class":86},[76,98275,165],{"class":136},[76,98277,466],{"class":86},[76,98279,159],{"class":136},[76,98281,466],{"class":86},[76,98283,432],{"class":136},[76,98285,93],{"class":86},[76,98287,98288,98291,98293,98295,98297,98299,98302,98304,98306,98308,98310,98312,98314],{"class":78,"line":1143},[76,98289,98290],{"class":86},"bbb",[76,98292,133],{"class":82},[76,98294,92971],{"class":86},[76,98296,425],{"class":136},[76,98298,466],{"class":86},[76,98300,98301],{"class":136},"137",[76,98303,92976],{"class":86},[76,98305,165],{"class":136},[76,98307,466],{"class":86},[76,98309,159],{"class":136},[76,98311,466],{"class":86},[76,98313,432],{"class":136},[76,98315,93],{"class":86},[76,98317,98318],{"class":78,"line":1158},[76,98319,98320],{"class":146},"#axis=0\n",[76,98322,98323,98325,98327,98330,98332,98334,98336],{"class":78,"line":1164},[76,98324,783],{"class":86},[76,98326,133],{"class":82},[76,98328,98329],{"class":86},"np.concatenate((aaa,bbb),",[76,98331,47483],{"class":5183},[76,98333,133],{"class":82},[76,98335,279],{"class":136},[76,98337,93],{"class":86},[76,98339,98340],{"class":78,"line":1178},[76,98341,98342],{"class":86},"s.shape\n",[76,98344,98345],{"class":78,"line":1184},[76,98346,98347],{"class":146},"#输出：(4,3,6)\n",[76,98349,98350],{"class":78,"line":1275},[76,98351,98352],{"class":146},"#axis=1\n",[76,98354,98355,98358,98360,98362,98364,98366,98368],{"class":78,"line":1281},[76,98356,98357],{"class":86},"ss",[76,98359,133],{"class":82},[76,98361,98329],{"class":86},[76,98363,47483],{"class":5183},[76,98365,133],{"class":82},[76,98367,305],{"class":136},[76,98369,93],{"class":86},[76,98371,98372],{"class":78,"line":1293},[76,98373,98374],{"class":86},"ss.shape\n",[76,98376,98377],{"class":78,"line":1576},[76,98378,98379],{"class":146},"#输出：(2,6,6)\n",[76,98381,98382],{"class":78,"line":1581},[76,98383,98384],{"class":146},"#axis=2\n",[76,98386,98387,98389,98391,98393,98395],{"class":78,"line":1587},[76,98388,98329],{"class":86},[76,98390,47483],{"class":5183},[76,98392,133],{"class":82},[76,98394,165],{"class":136},[76,98396,98397],{"class":86},").shape\n",[76,98399,98400],{"class":78,"line":1592},[76,98401,98402],{"class":146},"#输出：（2，3，12）\n",[21,98404,98405],{},"⑤四维数组拼接",[66,98407,98409],{"className":30347,"code":98408,"language":30349,"meta":71,"style":71},"#两个三行六列\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",[73,98410,98411,98415,98443,98471,98496,98522,98526,98539,98544,98548,98560,98565,98569,98581,98586,98591,98603],{"__ignoreMap":71},[76,98412,98413],{"class":78,"line":79},[76,98414,98257],{"class":146},[76,98416,98417,98419,98421,98423,98425,98427,98429,98431,98433,98435,98437,98439,98441],{"class":78,"line":96},[76,98418,95490],{"class":86},[76,98420,133],{"class":82},[76,98422,92971],{"class":86},[76,98424,305],{"class":136},[76,98426,466],{"class":86},[76,98428,413],{"class":136},[76,98430,92976],{"class":86},[76,98432,165],{"class":136},[76,98434,466],{"class":86},[76,98436,159],{"class":136},[76,98438,466],{"class":86},[76,98440,432],{"class":136},[76,98442,93],{"class":86},[76,98444,98445,98447,98449,98451,98453,98455,98457,98459,98461,98463,98465,98467,98469],{"class":78,"line":1143},[76,98446,98290],{"class":86},[76,98448,133],{"class":82},[76,98450,92971],{"class":86},[76,98452,425],{"class":136},[76,98454,466],{"class":86},[76,98456,98301],{"class":136},[76,98458,92976],{"class":86},[76,98460,165],{"class":136},[76,98462,466],{"class":86},[76,98464,159],{"class":136},[76,98466,466],{"class":86},[76,98468,432],{"class":136},[76,98470,93],{"class":86},[76,98472,98473,98476,98478,98480,98482,98484,98486,98488,98490,98492,98494],{"class":78,"line":1158},[76,98474,98475],{"class":86},"aaaa",[76,98477,133],{"class":82},[76,98479,97639],{"class":86},[76,98481,165],{"class":136},[76,98483,466],{"class":86},[76,98485,159],{"class":136},[76,98487,466],{"class":86},[76,98489,159],{"class":136},[76,98491,466],{"class":86},[76,98493,165],{"class":136},[76,98495,93],{"class":86},[76,98497,98498,98501,98503,98506,98508,98510,98512,98514,98516,98518,98520],{"class":78,"line":1164},[76,98499,98500],{"class":86},"bbbb",[76,98502,133],{"class":82},[76,98504,98505],{"class":86},"bbb.reshape(",[76,98507,165],{"class":136},[76,98509,466],{"class":86},[76,98511,159],{"class":136},[76,98513,466],{"class":86},[76,98515,159],{"class":136},[76,98517,466],{"class":86},[76,98519,165],{"class":136},[76,98521,93],{"class":86},[76,98523,98524],{"class":78,"line":1178},[76,98525,98320],{"class":146},[76,98527,98528,98531,98533,98535,98537],{"class":78,"line":1184},[76,98529,98530],{"class":86},"np.concatenate((aaaa,bbbb),",[76,98532,47483],{"class":5183},[76,98534,133],{"class":82},[76,98536,279],{"class":136},[76,98538,98397],{"class":86},[76,98540,98541],{"class":78,"line":1275},[76,98542,98543],{"class":146},"#结果：（4，3，3，2）\n",[76,98545,98546],{"class":78,"line":1281},[76,98547,98352],{"class":146},[76,98549,98550,98552,98554,98556,98558],{"class":78,"line":1293},[76,98551,98530],{"class":86},[76,98553,47483],{"class":5183},[76,98555,133],{"class":82},[76,98557,305],{"class":136},[76,98559,98397],{"class":86},[76,98561,98562],{"class":78,"line":1576},[76,98563,98564],{"class":146},"#结果：（2，6，3，2）\n",[76,98566,98567],{"class":78,"line":1581},[76,98568,98384],{"class":146},[76,98570,98571,98573,98575,98577,98579],{"class":78,"line":1587},[76,98572,98530],{"class":86},[76,98574,47483],{"class":5183},[76,98576,133],{"class":82},[76,98578,165],{"class":136},[76,98580,98397],{"class":86},[76,98582,98583],{"class":78,"line":1592},[76,98584,98585],{"class":146},"#结果：（2，3，6，2）\n",[76,98587,98588],{"class":78,"line":1606},[76,98589,98590],{"class":146},"#axis=3\n",[76,98592,98593,98595,98597,98599,98601],{"class":78,"line":1611},[76,98594,98530],{"class":86},[76,98596,47483],{"class":5183},[76,98598,133],{"class":82},[76,98600,159],{"class":136},[76,98602,98397],{"class":86},[76,98604,98605],{"class":78,"line":1617},[76,98606,98607],{"class":146},"#结果：（2，3，3，4）\n",[16,98609,98611],{"id":98610},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[21,98613,98614],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[21,98616,98617],{},"①二维数组",[66,98619,98621],{"className":30347,"code":98620,"language":30349,"meta":71,"style":71},"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",[73,98622,98623,98647,98671,98676,98681],{"__ignoreMap":71},[76,98624,98625,98627,98629,98631,98633,98635,98637,98639,98641,98643,98645],{"class":78,"line":79},[76,98626,93275],{"class":86},[76,98628,133],{"class":82},[76,98630,92971],{"class":86},[76,98632,305],{"class":136},[76,98634,466],{"class":86},[76,98636,611],{"class":136},[76,98638,92976],{"class":86},[76,98640,159],{"class":136},[76,98642,466],{"class":86},[76,98644,381],{"class":136},[76,98646,93],{"class":86},[76,98648,98649,98651,98653,98655,98657,98659,98661,98663,98665,98667,98669],{"class":78,"line":96},[76,98650,98156],{"class":86},[76,98652,133],{"class":82},[76,98654,92971],{"class":86},[76,98656,425],{"class":136},[76,98658,466],{"class":86},[76,98660,730],{"class":136},[76,98662,92976],{"class":86},[76,98664,159],{"class":136},[76,98666,466],{"class":86},[76,98668,381],{"class":136},[76,98670,93],{"class":86},[76,98672,98673],{"class":78,"line":1143},[76,98674,98675],{"class":86},"np.hstack((aa,bb))\n",[76,98677,98678],{"class":78,"line":1158},[76,98679,98680],{"class":146},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[76,98682,98683],{"class":78,"line":1164},[76,98684,98685],{"class":146},"#np.hstack([aa,bb])\n",[21,98687,98202],{},[21,98689,98690],{},[1426,98691],{"alt":71,"src":98692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[21,98694,98695],{},"等效于concatenate()函数中axis=1时的情况",[21,98697,98698],{},"②三维数组",[66,98700,98702],{"className":30347,"code":98701,"language":30349,"meta":71,"style":71},"#两个三行六列\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",[73,98703,98704,98708,98736,98764,98769,98774],{"__ignoreMap":71},[76,98705,98706],{"class":78,"line":79},[76,98707,98257],{"class":146},[76,98709,98710,98712,98714,98716,98718,98720,98722,98724,98726,98728,98730,98732,98734],{"class":78,"line":96},[76,98711,95490],{"class":86},[76,98713,133],{"class":82},[76,98715,92971],{"class":86},[76,98717,305],{"class":136},[76,98719,466],{"class":86},[76,98721,413],{"class":136},[76,98723,92976],{"class":86},[76,98725,165],{"class":136},[76,98727,466],{"class":86},[76,98729,159],{"class":136},[76,98731,466],{"class":86},[76,98733,432],{"class":136},[76,98735,93],{"class":86},[76,98737,98738,98740,98742,98744,98746,98748,98750,98752,98754,98756,98758,98760,98762],{"class":78,"line":1143},[76,98739,98290],{"class":86},[76,98741,133],{"class":82},[76,98743,92971],{"class":86},[76,98745,425],{"class":136},[76,98747,466],{"class":86},[76,98749,98301],{"class":136},[76,98751,92976],{"class":86},[76,98753,165],{"class":136},[76,98755,466],{"class":86},[76,98757,159],{"class":136},[76,98759,466],{"class":86},[76,98761,432],{"class":136},[76,98763,93],{"class":86},[76,98765,98766],{"class":78,"line":1158},[76,98767,98768],{"class":146},"#使用hstack\n",[76,98770,98771],{"class":78,"line":1164},[76,98772,98773],{"class":86},"np.hstack((aaa,bbb)).shape\n",[76,98775,98776],{"class":78,"line":1178},[76,98777,98778],{"class":146},"#输出：（2，6，6）\n",[16,98780,98782],{"id":98781},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[21,98784,98785],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[21,98787,98617],{},[66,98789,98791],{"className":30347,"code":98790,"language":30349,"meta":71,"style":71},"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",[73,98792,98793,98817,98841,98846,98851,98856],{"__ignoreMap":71},[76,98794,98795,98797,98799,98801,98803,98805,98807,98809,98811,98813,98815],{"class":78,"line":79},[76,98796,93275],{"class":86},[76,98798,133],{"class":82},[76,98800,92971],{"class":86},[76,98802,305],{"class":136},[76,98804,466],{"class":86},[76,98806,611],{"class":136},[76,98808,92976],{"class":86},[76,98810,159],{"class":136},[76,98812,466],{"class":86},[76,98814,381],{"class":136},[76,98816,93],{"class":86},[76,98818,98819,98821,98823,98825,98827,98829,98831,98833,98835,98837,98839],{"class":78,"line":96},[76,98820,98156],{"class":86},[76,98822,133],{"class":82},[76,98824,92971],{"class":86},[76,98826,425],{"class":136},[76,98828,466],{"class":86},[76,98830,730],{"class":136},[76,98832,92976],{"class":86},[76,98834,159],{"class":136},[76,98836,466],{"class":86},[76,98838,381],{"class":136},[76,98840,93],{"class":86},[76,98842,98843],{"class":78,"line":1143},[76,98844,98845],{"class":146},"#vstack 垂直方向进行堆叠\n",[76,98847,98848],{"class":78,"line":1158},[76,98849,98850],{"class":86},"np.vstack((aa,bb))\n",[76,98852,98853],{"class":78,"line":1164},[76,98854,98855],{"class":146},"#与hstack传的参数类似，等价于：\n",[76,98857,98858],{"class":78,"line":1178},[76,98859,98860],{"class":86},"np.vstack([aa,bb])\n",[21,98862,98202],{},[21,98864,98865],{},[1426,98866],{"alt":71,"src":98867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[21,98869,98698],{},[66,98871,98873],{"className":30347,"code":98872,"language":30349,"meta":71,"style":71},"#两个三行六列\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",[73,98874,98875,98879,98907,98935,98940,98945],{"__ignoreMap":71},[76,98876,98877],{"class":78,"line":79},[76,98878,98257],{"class":146},[76,98880,98881,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901,98903,98905],{"class":78,"line":96},[76,98882,95490],{"class":86},[76,98884,133],{"class":82},[76,98886,92971],{"class":86},[76,98888,305],{"class":136},[76,98890,466],{"class":86},[76,98892,413],{"class":136},[76,98894,92976],{"class":86},[76,98896,165],{"class":136},[76,98898,466],{"class":86},[76,98900,159],{"class":136},[76,98902,466],{"class":86},[76,98904,432],{"class":136},[76,98906,93],{"class":86},[76,98908,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933],{"class":78,"line":1143},[76,98910,98290],{"class":86},[76,98912,133],{"class":82},[76,98914,92971],{"class":86},[76,98916,425],{"class":136},[76,98918,466],{"class":86},[76,98920,98301],{"class":136},[76,98922,92976],{"class":86},[76,98924,165],{"class":136},[76,98926,466],{"class":86},[76,98928,159],{"class":136},[76,98930,466],{"class":86},[76,98932,432],{"class":136},[76,98934,93],{"class":86},[76,98936,98937],{"class":78,"line":1158},[76,98938,98939],{"class":146},"#使用vstack\n",[76,98941,98942],{"class":78,"line":1164},[76,98943,98944],{"class":86},"np.vstack((aaa,bbb)).shape\n",[76,98946,98947],{"class":78,"line":1178},[76,98948,98949],{"class":146},"#输出：（4，3，6）\n",[16,98951,98953],{"id":98952},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[21,98955,98956],{},"该方法是三维数组特有的方法",[21,98958,98959],{},"也就是说",[21,98961,98962],{},"一维数组拼接方法用：concatenate()",[21,98964,98965],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[21,98967,98968],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[21,98970,98971],{},"四维数组及多维数组只能用concatenate进行拼接",[66,98973,98975],{"className":30347,"code":98974,"language":30349,"meta":71,"style":71},"#两个三行六列\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",[73,98976,98977,98981,99009,99037,99042,99047],{"__ignoreMap":71},[76,98978,98979],{"class":78,"line":79},[76,98980,98257],{"class":146},[76,98982,98983,98985,98987,98989,98991,98993,98995,98997,98999,99001,99003,99005,99007],{"class":78,"line":96},[76,98984,95490],{"class":86},[76,98986,133],{"class":82},[76,98988,92971],{"class":86},[76,98990,305],{"class":136},[76,98992,466],{"class":86},[76,98994,413],{"class":136},[76,98996,92976],{"class":86},[76,98998,165],{"class":136},[76,99000,466],{"class":86},[76,99002,159],{"class":136},[76,99004,466],{"class":86},[76,99006,432],{"class":136},[76,99008,93],{"class":86},[76,99010,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035],{"class":78,"line":1143},[76,99012,98290],{"class":86},[76,99014,133],{"class":82},[76,99016,92971],{"class":86},[76,99018,425],{"class":136},[76,99020,466],{"class":86},[76,99022,98301],{"class":136},[76,99024,92976],{"class":86},[76,99026,165],{"class":136},[76,99028,466],{"class":86},[76,99030,159],{"class":136},[76,99032,466],{"class":86},[76,99034,432],{"class":136},[76,99036,93],{"class":86},[76,99038,99039],{"class":78,"line":1158},[76,99040,99041],{"class":146},"#使用dstack\n",[76,99043,99044],{"class":78,"line":1164},[76,99045,99046],{"class":86},"np.dstack((aaa,bbb)).shape\n",[76,99048,99049],{"class":78,"line":1178},[76,99050,99051],{"class":146},"#结果：（2，3，12）\n",[5092,99053,99054],{},"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":71,"searchDepth":96,"depth":96,"links":99056},[99057,99058,99059,99060],{"id":97996,"depth":96,"text":97997},{"id":98610,"depth":96,"text":98611},{"id":98781,"depth":96,"text":98782},{"id":98952,"depth":96,"text":98953},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":97988,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99067,"title":99068,"body":99069,"description":23344,"extension":5123,"meta":99344,"navigation":2364,"path":99345,"seo":99346,"stem":99347,"__hash__":99348},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":9,"value":99070,"toc":99342},[99071,99074,99077,99171,99174,99177,99180,99183,99186,99189,99192,99195,99339],[12,99072,99068],{"id":99073},"_7数组转置",[21,99075,99076],{},"使用transpose()函数",[66,99078,99080],{"className":30347,"code":99079,"language":30349,"meta":71,"style":71},"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",[73,99081,99082,99092,99116,99121,99126,99131,99136,99144,99148,99152,99157,99162,99167],{"__ignoreMap":71},[76,99083,99084,99086,99088,99090],{"class":78,"line":79},[76,99085,30361],{"class":82},[76,99087,31349],{"class":86},[76,99089,31352],{"class":82},[76,99091,31355],{"class":86},[76,99093,99094,99096,99098,99100,99102,99104,99106,99108,99110,99112,99114],{"class":78,"line":96},[76,99095,326],{"class":86},[76,99097,133],{"class":82},[76,99099,31686],{"class":86},[76,99101,305],{"class":136},[76,99103,466],{"class":86},[76,99105,611],{"class":136},[76,99107,92976],{"class":86},[76,99109,381],{"class":136},[76,99111,466],{"class":86},[76,99113,159],{"class":136},[76,99115,93],{"class":86},[76,99117,99118],{"class":78,"line":1143},[76,99119,99120],{"class":146},"#二维数组转置\n",[76,99122,99123],{"class":78,"line":1158},[76,99124,99125],{"class":146},"#调用transpose()函数\n",[76,99127,99128],{"class":78,"line":1164},[76,99129,99130],{"class":86},"a.transpose()\n",[76,99132,99133],{"class":78,"line":1178},[76,99134,99135],{"class":146},"#对于二维数组也可以采用.T来实现\n",[76,99137,99138,99141],{"class":78,"line":1184},[76,99139,99140],{"class":86},"a.T",[76,99142,99143],{"class":146},"#与上述代码一样\n",[76,99145,99146],{"class":78,"line":1275},[76,99147,93533],{"class":146},[76,99149,99150],{"class":78,"line":1281},[76,99151,93897],{"class":192},[76,99153,99154],{"class":78,"line":1293},[76,99155,99156],{"class":192},"array([[ 1,  4,  7, 10],\n",[76,99158,99159],{"class":78,"line":1576},[76,99160,99161],{"class":192},"       [ 2,  5,  8, 11],\n",[76,99163,99164],{"class":78,"line":1581},[76,99165,99166],{"class":192},"       [ 3,  6,  9, 12]])\n",[76,99168,99169],{"class":78,"line":1587},[76,99170,93897],{"class":192},[21,99172,99173],{},"也可以使用np.transpose()的形式",[21,99175,99176],{},"#多维数组进行转置 np.transpose()",[21,99178,99179],{},"#对二维数组也可以使用np.transpose()进行转置",[21,99181,99182],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[21,99184,99185],{},"第二个参数，维度可以理解为用axis中的数来理解",[21,99187,99188],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[21,99190,99191],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[21,99193,99194],{},"四维及以上的数组也是一样的道理",[66,99196,99198],{"className":30347,"code":99197,"language":30349,"meta":71,"style":71},"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",[73,99199,99200,99228,99233,99238,99243,99261,99266,99298,99303,99308,99313,99334],{"__ignoreMap":71},[76,99201,99202,99204,99206,99208,99210,99212,99214,99216,99218,99220,99222,99224,99226],{"class":78,"line":79},[76,99203,908],{"class":86},[76,99205,133],{"class":82},[76,99207,92971],{"class":86},[76,99209,305],{"class":136},[76,99211,466],{"class":86},[76,99213,413],{"class":136},[76,99215,92976],{"class":86},[76,99217,159],{"class":136},[76,99219,466],{"class":86},[76,99221,432],{"class":136},[76,99223,466],{"class":86},[76,99225,165],{"class":136},[76,99227,93],{"class":86},[76,99229,99230],{"class":78,"line":96},[76,99231,99232],{"class":86},"x.shape\n",[76,99234,99235],{"class":78,"line":1143},[76,99236,99237],{"class":146},"#结果：（3,6,2）\n",[76,99239,99240],{"class":78,"line":1158},[76,99241,99242],{"class":146},"#使用np.transpose()进行转置 变为(2,6,3)\n",[76,99244,99245,99248,99250,99252,99254,99256,99258],{"class":78,"line":1164},[76,99246,99247],{"class":86},"np.transpose(x,(",[76,99249,165],{"class":136},[76,99251,466],{"class":86},[76,99253,305],{"class":136},[76,99255,466],{"class":86},[76,99257,279],{"class":136},[76,99259,99260],{"class":86},")).shape\n",[76,99262,99263],{"class":78,"line":1178},[76,99264,99265],{"class":146},"#结果：(2,6,3)\n",[76,99267,99268,99270,99272,99274,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296],{"class":78,"line":1184},[76,99269,98475],{"class":86},[76,99271,133],{"class":82},[76,99273,92971],{"class":86},[76,99275,305],{"class":136},[76,99277,466],{"class":86},[76,99279,413],{"class":136},[76,99281,92976],{"class":86},[76,99283,159],{"class":136},[76,99285,466],{"class":86},[76,99287,165],{"class":136},[76,99289,466],{"class":86},[76,99291,305],{"class":136},[76,99293,466],{"class":86},[76,99295,432],{"class":136},[76,99297,93],{"class":86},[76,99299,99300],{"class":78,"line":1275},[76,99301,99302],{"class":86},"aaaa.shape\n",[76,99304,99305],{"class":78,"line":1281},[76,99306,99307],{"class":146},"#结果：（3，2，1，6）\n",[76,99309,99310],{"class":78,"line":1293},[76,99311,99312],{"class":146},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[76,99314,99315,99318,99320,99322,99324,99326,99328,99330,99332],{"class":78,"line":1576},[76,99316,99317],{"class":86},"np.transpose(aaaa,(",[76,99319,305],{"class":136},[76,99321,466],{"class":86},[76,99323,165],{"class":136},[76,99325,466],{"class":86},[76,99327,279],{"class":136},[76,99329,466],{"class":86},[76,99331,159],{"class":136},[76,99333,99260],{"class":86},[76,99335,99336],{"class":78,"line":1581},[76,99337,99338],{"class":146},"#结果：(2,1,3,6)\n",[5092,99340,99341],{},"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":71,"searchDepth":96,"depth":96,"links":99343},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99068,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99350,"title":99351,"body":99352,"description":23344,"extension":5123,"meta":100086,"navigation":2364,"path":100087,"seo":100088,"stem":100089,"__hash__":100090},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":9,"value":99353,"toc":100084},[99354,99357,99360,99363,99366,99369,99372,99375,99378,99487,99490,99493,100081],[12,99355,99351],{"id":99356},"_8数组分割",[21,99358,99359],{},"split分割",[21,99361,99362],{},"numpy.split(ary,indics_or_sections,axis)",[21,99364,99365],{},"解释：",[21,99367,99368],{},"ary:被分割的数组",[21,99370,99371],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[21,99373,99374],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[21,99376,99377],{},"①一维数组的分割",[66,99379,99381],{"className":30347,"code":99380,"language":30349,"meta":71,"style":71},"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",[73,99382,99383,99399,99404,99413,99417,99422,99430,99434,99439,99444,99457,99461,99466,99478,99482],{"__ignoreMap":71},[76,99384,99385,99387,99389,99391,99393,99395,99397],{"class":78,"line":79},[76,99386,326],{"class":86},[76,99388,133],{"class":82},[76,99390,92971],{"class":86},[76,99392,305],{"class":136},[76,99394,466],{"class":86},[76,99396,508],{"class":136},[76,99398,93],{"class":86},[76,99400,99401],{"class":78,"line":96},[76,99402,99403],{"class":146},"#如果传入整数，必须能够平分，否则会报错\n",[76,99405,99406,99409,99411],{"class":78,"line":1143},[76,99407,99408],{"class":86},"np.split(a,",[76,99410,165],{"class":136},[76,99412,93],{"class":86},[76,99414,99415],{"class":78,"line":1158},[76,99416,93533],{"class":146},[76,99418,99419],{"class":78,"line":1164},[76,99420,99421],{"class":146},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[76,99423,99424,99426,99428],{"class":78,"line":1178},[76,99425,99408],{"class":86},[76,99427,381],{"class":136},[76,99429,93],{"class":86},[76,99431,99432],{"class":78,"line":1184},[76,99433,93533],{"class":146},[76,99435,99436],{"class":78,"line":1275},[76,99437,99438],{"class":146},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[76,99440,99441],{"class":78,"line":1281},[76,99442,99443],{"class":146},"#传入数组\n",[76,99445,99446,99449,99451,99453,99455],{"class":78,"line":1293},[76,99447,99448],{"class":86},"np.split(a,[",[76,99450,159],{"class":136},[76,99452,466],{"class":86},[76,99454,407],{"class":136},[76,99456,4622],{"class":86},[76,99458,99459],{"class":78,"line":1576},[76,99460,93533],{"class":146},[76,99462,99463],{"class":78,"line":1581},[76,99464,99465],{"class":146},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[76,99467,99468,99470,99472,99474,99476],{"class":78,"line":1587},[76,99469,99448],{"class":86},[76,99471,407],{"class":136},[76,99473,466],{"class":86},[76,99475,457],{"class":136},[76,99477,4622],{"class":86},[76,99479,99480],{"class":78,"line":1592},[76,99481,93533],{"class":146},[76,99483,99484],{"class":78,"line":1606},[76,99485,99486],{"class":146},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[21,99488,99489],{},"②二维数组的分割",[21,99491,99492],{},"使用split()",[66,99494,99496],{"className":30347,"code":99495,"language":30349,"meta":71,"style":71},"#二维数组分割\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",[73,99497,99498,99503,99527,99532,99541,99545,99549,99554,99559,99564,99569,99574,99579,99584,99588,99601,99605,99609,99613,99617,99621,99626,99631,99636,99640,99645,99661,99665,99669,99674,99679,99684,99689,99694,99699,99704,99709,99714,99719,99724,99729,99734,99739,99744,99749,99754,99759,99763,99767,99787,99791,99795,99800,99805,99810,99815,99820,99825,99830,99835,99840,99845,99850,99855,99860,99865,99870,99875,99880,99885,99889,99894,99903,99907,99911,99915,99919,99923,99927,99931,99935,99939,99948,99952,99956,99960,99964,99968,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100045,100049,100053,100057,100061,100065,100069,100073,100077],{"__ignoreMap":71},[76,99499,99500],{"class":78,"line":79},[76,99501,99502],{"class":146},"#二维数组分割\n",[76,99504,99505,99507,99509,99511,99513,99515,99517,99519,99521,99523,99525],{"class":78,"line":96},[76,99506,93275],{"class":86},[76,99508,133],{"class":82},[76,99510,92971],{"class":86},[76,99512,305],{"class":136},[76,99514,466],{"class":86},[76,99516,413],{"class":136},[76,99518,92976],{"class":86},[76,99520,432],{"class":136},[76,99522,466],{"class":86},[76,99524,432],{"class":136},[76,99526,93],{"class":86},[76,99528,99529],{"class":78,"line":1143},[76,99530,99531],{"class":146},"#默认axis=0  传入整数平均分,按行来的\n",[76,99533,99534,99537,99539],{"class":78,"line":1158},[76,99535,99536],{"class":86},"np.split(aa,",[76,99538,159],{"class":136},[76,99540,93],{"class":86},[76,99542,99543],{"class":78,"line":1164},[76,99544,95733],{"class":146},[76,99546,99547],{"class":78,"line":1178},[76,99548,93897],{"class":192},[76,99550,99551],{"class":78,"line":1184},[76,99552,99553],{"class":192},"[array([[ 1,  2,  3,  4,  5,  6],\n",[76,99555,99556],{"class":78,"line":1275},[76,99557,99558],{"class":192},"        [ 7,  8,  9, 10, 11, 12]]),\n",[76,99560,99561],{"class":78,"line":1281},[76,99562,99563],{"class":192}," array([[13, 14, 15, 16, 17, 18],\n",[76,99565,99566],{"class":78,"line":1293},[76,99567,99568],{"class":192},"        [19, 20, 21, 22, 23, 24]]),\n",[76,99570,99571],{"class":78,"line":1576},[76,99572,99573],{"class":192}," array([[25, 26, 27, 28, 29, 30],\n",[76,99575,99576],{"class":78,"line":1581},[76,99577,99578],{"class":192},"        [31, 32, 33, 34, 35, 36]])]\n",[76,99580,99581],{"class":78,"line":1587},[76,99582,99583],{"class":192}," '''\n",[76,99585,99586],{"class":78,"line":1592},[76,99587,99443],{"class":146},[76,99589,99590,99593,99595,99597,99599],{"class":78,"line":1606},[76,99591,99592],{"class":86},"np.split(aa,[",[76,99594,165],{"class":136},[76,99596,466],{"class":86},[76,99598,407],{"class":136},[76,99600,4622],{"class":86},[76,99602,99603],{"class":78,"line":1611},[76,99604,95733],{"class":146},[76,99606,99607],{"class":78,"line":1617},[76,99608,93897],{"class":192},[76,99610,99611],{"class":78,"line":1638},[76,99612,99553],{"class":192},[76,99614,99615],{"class":78,"line":1643},[76,99616,99558],{"class":192},[76,99618,99619],{"class":78,"line":1657},[76,99620,99563],{"class":192},[76,99622,99623],{"class":78,"line":1662},[76,99624,99625],{"class":192},"        [19, 20, 21, 22, 23, 24],\n",[76,99627,99628],{"class":78,"line":1691},[76,99629,99630],{"class":192},"        [25, 26, 27, 28, 29, 30]]),\n",[76,99632,99633],{"class":78,"line":1696},[76,99634,99635],{"class":192}," array([[31, 32, 33, 34, 35, 36]])]\n",[76,99637,99638],{"class":78,"line":1713},[76,99639,93897],{"class":192},[76,99641,99642],{"class":78,"line":1718},[76,99643,99644],{"class":146},"#axis=1 按照列来分\n",[76,99646,99647,99649,99651,99653,99655,99657,99659],{"class":78,"line":1723},[76,99648,99536],{"class":86},[76,99650,159],{"class":136},[76,99652,466],{"class":86},[76,99654,47483],{"class":5183},[76,99656,133],{"class":82},[76,99658,305],{"class":136},[76,99660,93],{"class":86},[76,99662,99663],{"class":78,"line":1728},[76,99664,95733],{"class":146},[76,99666,99667],{"class":78,"line":1742},[76,99668,93897],{"class":192},[76,99670,99671],{"class":78,"line":1747},[76,99672,99673],{"class":192},"[array([[ 1,  2],\n",[76,99675,99676],{"class":78,"line":2542},[76,99677,99678],{"class":192},"        [ 7,  8],\n",[76,99680,99681],{"class":78,"line":2556},[76,99682,99683],{"class":192},"        [13, 14],\n",[76,99685,99686],{"class":78,"line":2564},[76,99687,99688],{"class":192},"        [19, 20],\n",[76,99690,99691],{"class":78,"line":2569},[76,99692,99693],{"class":192},"        [25, 26],\n",[76,99695,99696],{"class":78,"line":2575},[76,99697,99698],{"class":192},"        [31, 32]]),\n",[76,99700,99701],{"class":78,"line":2581},[76,99702,99703],{"class":192}," array([[ 3,  4],\n",[76,99705,99706],{"class":78,"line":2586},[76,99707,99708],{"class":192},"        [ 9, 10],\n",[76,99710,99711],{"class":78,"line":7915},[76,99712,99713],{"class":192},"        [15, 16],\n",[76,99715,99716],{"class":78,"line":7939},[76,99717,99718],{"class":192},"        [21, 22],\n",[76,99720,99721],{"class":78,"line":7944},[76,99722,99723],{"class":192},"        [27, 28],\n",[76,99725,99726],{"class":78,"line":7950},[76,99727,99728],{"class":192},"        [33, 34]]),\n",[76,99730,99731],{"class":78,"line":7977},[76,99732,99733],{"class":192}," array([[ 5,  6],\n",[76,99735,99736],{"class":78,"line":7982},[76,99737,99738],{"class":192},"        [11, 12],\n",[76,99740,99741],{"class":78,"line":7988},[76,99742,99743],{"class":192},"        [17, 18],\n",[76,99745,99746],{"class":78,"line":8000},[76,99747,99748],{"class":192},"        [23, 24],\n",[76,99750,99751],{"class":78,"line":8012},[76,99752,99753],{"class":192},"        [29, 30],\n",[76,99755,99756],{"class":78,"line":8024},[76,99757,99758],{"class":192},"        [35, 36]])]\n",[76,99760,99761],{"class":78,"line":9683},[76,99762,99583],{"class":192},[76,99764,99765],{"class":78,"line":9708},[76,99766,99443],{"class":146},[76,99768,99769,99771,99773,99775,99777,99779,99781,99783,99785],{"class":78,"line":9731},[76,99770,99592],{"class":86},[76,99772,305],{"class":136},[76,99774,466],{"class":86},[76,99776,165],{"class":136},[76,99778,41578],{"class":86},[76,99780,47483],{"class":5183},[76,99782,133],{"class":82},[76,99784,305],{"class":136},[76,99786,93],{"class":86},[76,99788,99789],{"class":78,"line":9755},[76,99790,93533],{"class":146},[76,99792,99793],{"class":78,"line":9760},[76,99794,93897],{"class":192},[76,99796,99797],{"class":78,"line":9765},[76,99798,99799],{"class":192},"[array([[ 1],\n",[76,99801,99802],{"class":78,"line":9770},[76,99803,99804],{"class":192},"        [ 7],\n",[76,99806,99807],{"class":78,"line":9779},[76,99808,99809],{"class":192},"        [13],\n",[76,99811,99812],{"class":78,"line":9784},[76,99813,99814],{"class":192},"        [19],\n",[76,99816,99817],{"class":78,"line":9790},[76,99818,99819],{"class":192},"        [25],\n",[76,99821,99822],{"class":78,"line":9811},[76,99823,99824],{"class":192},"        [31]]),\n",[76,99826,99827],{"class":78,"line":9817},[76,99828,99829],{"class":192}," array([[ 2],\n",[76,99831,99832],{"class":78,"line":9831},[76,99833,99834],{"class":192},"        [ 8],\n",[76,99836,99837],{"class":78,"line":9837},[76,99838,99839],{"class":192},"        [14],\n",[76,99841,99842],{"class":78,"line":9864},[76,99843,99844],{"class":192},"        [20],\n",[76,99846,99847],{"class":78,"line":9873},[76,99848,99849],{"class":192},"        [26],\n",[76,99851,99852],{"class":78,"line":9879},[76,99853,99854],{"class":192},"        [32]]),\n",[76,99856,99857],{"class":78,"line":9887},[76,99858,99859],{"class":192}," array([[ 3,  4,  5,  6],\n",[76,99861,99862],{"class":78,"line":9892},[76,99863,99864],{"class":192},"        [ 9, 10, 11, 12],\n",[76,99866,99867],{"class":78,"line":16571},[76,99868,99869],{"class":192},"        [15, 16, 17, 18],\n",[76,99871,99872],{"class":78,"line":16577},[76,99873,99874],{"class":192},"        [21, 22, 23, 24],\n",[76,99876,99877],{"class":78,"line":16600},[76,99878,99879],{"class":192},"        [27, 28, 29, 30],\n",[76,99881,99882],{"class":78,"line":16606},[76,99883,99884],{"class":192},"        [33, 34, 35, 36]])]\n",[76,99886,99887],{"class":78,"line":16629},[76,99888,93897],{"class":192},[76,99890,99891],{"class":78,"line":16643},[76,99892,99893],{"class":146},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[76,99895,99896,99899,99901],{"class":78,"line":16663},[76,99897,99898],{"class":86},"np.vsplit(aa,",[76,99900,159],{"class":136},[76,99902,93],{"class":86},[76,99904,99905],{"class":78,"line":16669},[76,99906,93533],{"class":146},[76,99908,99909],{"class":78,"line":16680},[76,99910,93897],{"class":192},[76,99912,99913],{"class":78,"line":16703},[76,99914,99553],{"class":192},[76,99916,99917],{"class":78,"line":16725},[76,99918,99558],{"class":192},[76,99920,99921],{"class":78,"line":16730},[76,99922,99563],{"class":192},[76,99924,99925],{"class":78,"line":16736},[76,99926,99568],{"class":192},[76,99928,99929],{"class":78,"line":16750},[76,99930,99573],{"class":192},[76,99932,99933],{"class":78,"line":16763},[76,99934,99578],{"class":192},[76,99936,99937],{"class":78,"line":16768},[76,99938,93897],{"class":192},[76,99940,99941,99944,99946],{"class":78,"line":16782},[76,99942,99943],{"class":86},"np.hsplit(aa,",[76,99945,159],{"class":136},[76,99947,93],{"class":86},[76,99949,99950],{"class":78,"line":16787},[76,99951,93533],{"class":146},[76,99953,99954],{"class":78,"line":16793},[76,99955,93897],{"class":192},[76,99957,99958],{"class":78,"line":16798},[76,99959,99673],{"class":192},[76,99961,99962],{"class":78,"line":16812},[76,99963,99678],{"class":192},[76,99965,99966],{"class":78,"line":16817},[76,99967,99683],{"class":192},[76,99969,99970],{"class":78,"line":16822},[76,99971,99688],{"class":192},[76,99973,99974],{"class":78,"line":16836},[76,99975,99693],{"class":192},[76,99977,99978],{"class":78,"line":16848},[76,99979,99698],{"class":192},[76,99981,99982],{"class":78,"line":16853},[76,99983,99703],{"class":192},[76,99985,99986],{"class":78,"line":16866},[76,99987,99708],{"class":192},[76,99989,99990],{"class":78,"line":16871},[76,99991,99713],{"class":192},[76,99993,99994],{"class":78,"line":16876},[76,99995,99718],{"class":192},[76,99997,99998],{"class":78,"line":16881},[76,99999,99723],{"class":192},[76,100001,100002],{"class":78,"line":16894},[76,100003,99728],{"class":192},[76,100005,100006],{"class":78,"line":16899},[76,100007,99733],{"class":192},[76,100009,100010],{"class":78,"line":32602},[76,100011,99738],{"class":192},[76,100013,100014],{"class":78,"line":32608},[76,100015,99743],{"class":192},[76,100017,100018],{"class":78,"line":32614},[76,100019,99748],{"class":192},[76,100021,100022],{"class":78,"line":32620},[76,100023,99753],{"class":192},[76,100025,100026],{"class":78,"line":32626},[76,100027,99758],{"class":192},[76,100029,100030],{"class":78,"line":32637},[76,100031,93897],{"class":192},[76,100033,100034,100037,100039,100041,100043],{"class":78,"line":32643},[76,100035,100036],{"class":86},"np.vsplit(aa,[",[76,100038,165],{"class":136},[76,100040,466],{"class":86},[76,100042,407],{"class":136},[76,100044,4622],{"class":86},[76,100046,100047],{"class":78,"line":32663},[76,100048,93533],{"class":146},[76,100050,100051],{"class":78,"line":32669},[76,100052,93897],{"class":192},[76,100054,100055],{"class":78,"line":32680},[76,100056,99553],{"class":192},[76,100058,100059],{"class":78,"line":32686},[76,100060,99558],{"class":192},[76,100062,100063],{"class":78,"line":32692},[76,100064,99563],{"class":192},[76,100066,100067],{"class":78,"line":32698},[76,100068,99625],{"class":192},[76,100070,100071],{"class":78,"line":32704},[76,100072,99630],{"class":192},[76,100074,100075],{"class":78,"line":32710},[76,100076,99635],{"class":192},[76,100078,100079],{"class":78,"line":32716},[76,100080,99583],{"class":192},[5092,100082,100083],{},"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":71,"searchDepth":96,"depth":96,"links":100085},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99351,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100092,"title":100093,"body":100094,"description":23344,"extension":5123,"meta":100588,"navigation":2364,"path":100589,"seo":100590,"stem":100591,"__hash__":100592},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":9,"value":100095,"toc":100579},[100096,100099,100102,100127,100131,100190,100242,100246,100248,100284,100338,100340,100378,100449,100453,100458,100462,100465,100498,100501,100505,100508,100511,100514,100517,100522,100526,100529,100532,100535,100538,100543,100547,100552,100555,100576],[12,100097,100093],{"id":100098},"_9数学函数",[21,100100,100101],{},"补充回顾：python的列表推导式",[66,100103,100105],{"className":30347,"code":100104,"language":30349,"meta":71,"style":71},"[1\u002Fi for i in a]\n",[73,100106,100107],{"__ignoreMap":71},[76,100108,100109,100111,100113,100115,100118,100120,100122,100124],{"class":78,"line":79},[76,100110,978],{"class":86},[76,100112,305],{"class":136},[76,100114,672],{"class":82},[76,100116,100117],{"class":86},"i ",[76,100119,2990],{"class":82},[76,100121,9405],{"class":86},[76,100123,26012],{"class":82},[76,100125,100126],{"class":86}," a]\n",[16,100128,100130],{"id":100129},"_91-求倒数","9.1 求倒数",[66,100132,100134],{"className":30347,"code":100133,"language":30349,"meta":71,"style":71},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[73,100135,100136,100141,100169,100181],{"__ignoreMap":71},[76,100137,100138],{"class":78,"line":79},[76,100139,100140],{"class":146},"#数组求倒数\n",[76,100142,100143,100145,100147,100149,100151,100153,100155,100157,100159,100161,100163,100165,100167],{"class":78,"line":96},[76,100144,326],{"class":86},[76,100146,133],{"class":82},[76,100148,978],{"class":86},[76,100150,305],{"class":136},[76,100152,466],{"class":86},[76,100154,165],{"class":136},[76,100156,466],{"class":86},[76,100158,159],{"class":136},[76,100160,466],{"class":86},[76,100162,381],{"class":136},[76,100164,466],{"class":86},[76,100166,407],{"class":136},[76,100168,33215],{"class":86},[76,100170,100171,100173,100175,100178],{"class":78,"line":1143},[76,100172,351],{"class":86},[76,100174,133],{"class":82},[76,100176,100177],{"class":86},"np.array(a)",[76,100179,100180],{"class":146},"#将列表转换为数组\n",[76,100182,100183,100185,100187],{"class":78,"line":1158},[76,100184,305],{"class":136},[76,100186,672],{"class":82},[76,100188,100189],{"class":86},"b\n",[66,100191,100193],{"className":30347,"code":100192,"language":30349,"meta":71,"style":71},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[73,100194,100195,100223,100232,100237],{"__ignoreMap":71},[76,100196,100197,100199,100201,100203,100205,100207,100209,100211,100213,100215,100217,100219,100221],{"class":78,"line":79},[76,100198,326],{"class":86},[76,100200,133],{"class":82},[76,100202,978],{"class":86},[76,100204,305],{"class":136},[76,100206,466],{"class":86},[76,100208,165],{"class":136},[76,100210,466],{"class":86},[76,100212,159],{"class":136},[76,100214,466],{"class":86},[76,100216,381],{"class":136},[76,100218,466],{"class":86},[76,100220,407],{"class":136},[76,100222,33215],{"class":86},[76,100224,100225,100227,100229],{"class":78,"line":96},[76,100226,351],{"class":86},[76,100228,133],{"class":82},[76,100230,100231],{"class":86},"np.array(a)\n",[76,100233,100234],{"class":78,"line":1143},[76,100235,100236],{"class":146},"#调用numpy中的函数reciprocal()\n",[76,100238,100239],{"class":78,"line":1158},[76,100240,100241],{"class":86},"np.reciprocal(b)\n",[16,100243,100245],{"id":100244},"_92-求平方","9.2 求平方",[21,100247,94499],{},[66,100249,100251],{"className":30347,"code":100250,"language":30349,"meta":71,"style":71},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[73,100252,100253,100258,100263,100279],{"__ignoreMap":71},[76,100254,100255],{"class":78,"line":79},[76,100256,100257],{"class":146},"#square()，求平方\n",[76,100259,100260],{"class":78,"line":96},[76,100261,100262],{"class":146},"#一维数组\n",[76,100264,100265,100267,100269,100271,100273,100275,100277],{"class":78,"line":1143},[76,100266,326],{"class":86},[76,100268,133],{"class":82},[76,100270,92971],{"class":86},[76,100272,305],{"class":136},[76,100274,466],{"class":86},[76,100276,534],{"class":136},[76,100278,93],{"class":86},[76,100280,100281],{"class":78,"line":1158},[76,100282,100283],{"class":86},"np.square(a)\n",[66,100285,100287],{"className":30347,"code":100286,"language":30349,"meta":71,"style":71},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[73,100288,100289,100294,100299,100320],{"__ignoreMap":71},[76,100290,100291],{"class":78,"line":79},[76,100292,100293],{"class":146},"#或者通过循环遍历的形式来计算\n",[76,100295,100296],{"class":78,"line":96},[76,100297,100298],{"class":146},"#这是一个列表\n",[76,100300,100301,100304,100306,100308,100310,100312,100314,100317],{"class":78,"line":1143},[76,100302,100303],{"class":86},"[i",[76,100305,543],{"class":82},[76,100307,100117],{"class":86},[76,100309,2990],{"class":82},[76,100311,9405],{"class":86},[76,100313,26012],{"class":82},[76,100315,100316],{"class":86}," a]",[76,100318,100319],{"class":146},"#这个求完之后在数列当中\n",[76,100321,100322,100325,100327,100329,100331,100333,100335],{"class":78,"line":1158},[76,100323,100324],{"class":86},"np.array([i",[76,100326,543],{"class":82},[76,100328,100117],{"class":86},[76,100330,2990],{"class":82},[76,100332,9405],{"class":86},[76,100334,26012],{"class":82},[76,100336,100337],{"class":86}," a])\n",[21,100339,93260],{},[66,100341,100343],{"className":30347,"code":100342,"language":30349,"meta":71,"style":71},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[73,100344,100345,100349,100373],{"__ignoreMap":71},[76,100346,100347],{"class":78,"line":79},[76,100348,93270],{"class":146},[76,100350,100351,100353,100355,100357,100359,100361,100363,100365,100367,100369,100371],{"class":78,"line":96},[76,100352,93275],{"class":86},[76,100354,133],{"class":82},[76,100356,92971],{"class":86},[76,100358,305],{"class":136},[76,100360,466],{"class":86},[76,100362,611],{"class":136},[76,100364,92976],{"class":86},[76,100366,381],{"class":136},[76,100368,466],{"class":86},[76,100370,159],{"class":136},[76,100372,93],{"class":86},[76,100374,100375],{"class":78,"line":1143},[76,100376,100377],{"class":86},"np.square(aa)\n",[66,100379,100381],{"className":30347,"code":100380,"language":30349,"meta":71,"style":71},"#传统的方式\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",[73,100382,100383,100388,100397,100413,100429,100444],{"__ignoreMap":71},[76,100384,100385],{"class":78,"line":79},[76,100386,100387],{"class":146},"#传统的方式\n",[76,100389,100390,100392,100394],{"class":78,"line":96},[76,100391,98156],{"class":86},[76,100393,133],{"class":82},[76,100395,100396],{"class":86},"np.empty_like(aa)\n",[76,100398,100399,100401,100403,100405,100407,100409,100411],{"class":78,"line":1143},[76,100400,2990],{"class":82},[76,100402,9405],{"class":86},[76,100404,26012],{"class":82},[76,100406,32412],{"class":136},[76,100408,87],{"class":86},[76,100410,381],{"class":136},[76,100412,30755],{"class":86},[76,100414,100415,100417,100419,100421,100423,100425,100427],{"class":78,"line":1158},[76,100416,3166],{"class":82},[76,100418,9467],{"class":86},[76,100420,26012],{"class":82},[76,100422,32412],{"class":136},[76,100424,87],{"class":86},[76,100426,159],{"class":136},[76,100428,30755],{"class":86},[76,100430,100431,100434,100436,100439,100441],{"class":78,"line":1164},[76,100432,100433],{"class":86},"        bb[i,j]",[76,100435,133],{"class":82},[76,100437,100438],{"class":86},"aa[i,j]",[76,100440,543],{"class":82},[76,100442,100443],{"class":86},"aa[i,j]\n",[76,100445,100446],{"class":78,"line":1178},[76,100447,100448],{"class":86},"bb\n",[16,100450,100452],{"id":100451},"_93-求各元素的符号","9.3 求各元素的符号",[21,100454,100455],{},[1426,100456],{"alt":71,"src":100457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[16,100459,100461],{"id":100460},"_94-modf函数","9.4 modf函数",[21,100463,100464],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[66,100466,100468],{"className":30347,"code":100467,"language":30349,"meta":71,"style":71},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[73,100469,100470,100493],{"__ignoreMap":71},[76,100471,100472,100474,100476,100478,100480,100482,100484,100486,100488,100491],{"class":78,"line":79},[76,100473,326],{"class":86},[76,100475,133],{"class":82},[76,100477,92971],{"class":86},[76,100479,620],{"class":82},[76,100481,534],{"class":136},[76,100483,466],{"class":86},[76,100485,534],{"class":136},[76,100487,466],{"class":86},[76,100489,100490],{"class":136},"0.3",[76,100492,93],{"class":86},[76,100494,100495],{"class":78,"line":96},[76,100496,100497],{"class":86},"np.modf(a)\n",[21,100499,100500],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[16,100502,100504],{"id":100503},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[21,100506,100507],{},"np.cell()",[21,100509,100510],{},"np.floor()",[21,100512,100513],{},"np.rint()",[21,100515,100516],{},"对各元素分别向上取整、向下取整、四舍五入",[21,100518,100519],{},[1426,100520],{"alt":71,"src":100521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[16,100523,100525],{"id":100524},"_96-around函数","9.6 around()函数",[21,100527,100528],{},"around()函数也可以实现对数的小数位数进行操作",[21,100530,100531],{},"其中的参数：",[21,100533,100534],{},"1.要传的数组",[21,100536,100537],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[21,100539,100540],{},[1426,100541],{"alt":71,"src":100542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[16,100544,100546],{"id":100545},"_97-三角函数","9.7 三角函数",[21,100548,100549],{},[1426,100550],{"alt":71,"src":100551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[21,100553,100554],{},"引入图像模块非常重要",[66,100556,100558],{"className":30347,"code":100557,"language":30349,"meta":71,"style":71},"from matplotlib import pyplot as plt\n",[73,100559,100560],{"__ignoreMap":71},[76,100561,100562,100564,100567,100569,100572,100574],{"class":78,"line":79},[76,100563,30706],{"class":82},[76,100565,100566],{"class":86}," matplotlib ",[76,100568,30361],{"class":82},[76,100570,100571],{"class":86}," pyplot ",[76,100573,31352],{"class":82},[76,100575,31406],{"class":86},[5092,100577,100578],{},"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":71,"searchDepth":96,"depth":96,"links":100580},[100581,100582,100583,100584,100585,100586,100587],{"id":100129,"depth":96,"text":100130},{"id":100244,"depth":96,"text":100245},{"id":100451,"depth":96,"text":100452},{"id":100460,"depth":96,"text":100461},{"id":100503,"depth":96,"text":100504},{"id":100524,"depth":96,"text":100525},{"id":100545,"depth":96,"text":100546},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100093,"description":23344},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100594,"title":100595,"body":100596,"description":23344,"extension":5123,"meta":100600,"navigation":2364,"path":100601,"seo":100602,"stem":100603,"__hash__":100604},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":9,"value":100597,"toc":100598},[],{"title":71,"searchDepth":96,"depth":96,"links":100599},[],{"category":50389},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100595,"description":23344},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100606,"title":100607,"body":100608,"description":71,"extension":5123,"meta":102616,"navigation":2364,"path":102617,"seo":102618,"stem":102619,"__hash__":102620},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":9,"value":100609,"toc":102592},[100610,100613,100617,100620,100623,100629,100632,100655,100658,100692,100695,100736,100740,100743,100836,100839,100883,100886,100903,100906,100920,100923,100926,100971,100974,101011,101015,101018,101024,101029,101049,101053,101056,101122,101125,101143,101147,101150,101179,101189,101195,101199,101202,101208,101219,101223,101226,101256,101259,101539,101542,101545,101556,101559,101562,101584,101591,101594,101612,101615,101618,101632,101640,101643,101669,101675,101678,101681,101691,101703,101723,101732,101752,101762,101786,101799,101813,101818,101859,101876,101901,101913,101933,101939,101984,102003,102020,102033,102049,102056,102068,102077,102112,102133,102158,102171,102195,102210,102235,102238,102259,102268,102271,102282,102286,102289,102295,102307,102314,102318,102321,102333,102336,102350,102353,102363,102373,102376,102416,102419,102423,102429,102432,102446,102450,102453,102486,102490,102493,102516,102524,102527,102533,102539,102542,102545,102573,102577,102580,102586,102589],[12,100611,100607],{"id":100612},"_1环境安装与第一个-mujoco-程序",[16,100614,100616],{"id":100615},"_1目标说明","1.目标说明",[21,100618,100619],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[21,100621,100622],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[66,100624,100627],{"className":100625,"code":100626,"language":5154,"meta":71},[5152],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[73,100628,100626],{"__ignoreMap":71},[21,100630,100631],{},"需要掌握:",[29,100633,100634,100637,100640,100645,100650],{},[32,100635,100636],{},"Fedora 44 下 MuJoCo 的系统依赖",[32,100638,100639],{},"Python 虚拟环境创建",[32,100641,100642],{},[73,100643,100644],{},"mujoco.MjModel",[32,100646,100647],{},[73,100648,100649],{},"mujoco.MjData",[32,100651,100652],{},[73,100653,100654],{},"mujoco.mj_step(model, data)",[21,100656,100657],{},"MuJoCo 中最重要的两个对象:",[225,100659,100660,100670],{},[228,100661,100662],{},[231,100663,100664,100667],{},[234,100665,100666],{"align":23704},"对象",[234,100668,100669],{"align":23704},"含义",[272,100671,100672,100682],{},[231,100673,100674,100679],{},[277,100675,100676],{"align":23704},[73,100677,100678],{},"MjModel",[277,100680,100681],{"align":23704},"模型结构，来自 XML，基本不随时间变化",[231,100683,100684,100689],{},[277,100685,100686],{"align":23704},[73,100687,100688],{},"MjData",[277,100690,100691],{"align":23704},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[21,100693,100694],{},"可以先用一个类比理解：",[225,100696,100697,100707],{},[228,100698,100699],{},[231,100700,100701,100704],{},[234,100702,100703],{"align":23704},"类比",[234,100705,100706],{"align":23704},"MuJoCo 对象",[272,100708,100709,100718,100727],{},[231,100710,100711,100714],{},[277,100712,100713],{"align":23704},"游戏地图和角色配置",[277,100715,100716],{"align":23704},[73,100717,100678],{},[231,100719,100720,100723],{},[277,100721,100722],{"align":23704},"游戏运行到当前帧的状态",[277,100724,100725],{"align":23704},[73,100726,100688],{},[231,100728,100729,100732],{},[277,100730,100731],{"align":23704},"前进一帧",[277,100733,100734],{"align":23704},[73,100735,100654],{},[16,100737,100739],{"id":100738},"_2环境与依赖安装","2.环境与依赖安装",[21,100741,100742],{},"Fedora 44 系统依赖:",[66,100744,100746],{"className":23790,"code":100745,"language":23792,"meta":71,"style":71},"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",[73,100747,100748,100760,100773,100786,100796,100806,100825],{"__ignoreMap":71},[76,100749,100750,100752,100754,100756,100758],{"class":78,"line":79},[76,100751,24545],{"class":1927},[76,100753,26284],{"class":192},[76,100755,23802],{"class":192},[76,100757,26369],{"class":136},[76,100759,24647],{"class":136},[76,100761,100762,100765,100768,100771],{"class":78,"line":96},[76,100763,100764],{"class":192},"  python3",[76,100766,100767],{"class":192}," python3-pip",[76,100769,100770],{"class":192}," python3-virtualenv",[76,100772,24647],{"class":136},[76,100774,100775,100778,100781,100784],{"class":78,"line":1143},[76,100776,100777],{"class":192},"  mesa-libGL",[76,100779,100780],{"class":192}," mesa-libGLU",[76,100782,100783],{"class":192}," mesa-dri-drivers",[76,100785,24647],{"class":136},[76,100787,100788,100791,100794],{"class":78,"line":1158},[76,100789,100790],{"class":192},"  libglvnd-glx",[76,100792,100793],{"class":192}," libglvnd-opengl",[76,100795,24647],{"class":136},[76,100797,100798,100801,100804],{"class":78,"line":1164},[76,100799,100800],{"class":192},"  glfw",[76,100802,100803],{"class":192}," glfw-devel",[76,100805,24647],{"class":136},[76,100807,100808,100811,100814,100817,100820,100823],{"class":78,"line":1178},[76,100809,100810],{"class":192},"  libX11",[76,100812,100813],{"class":192}," libXcursor",[76,100815,100816],{"class":192}," libXi",[76,100818,100819],{"class":192}," libXinerama",[76,100821,100822],{"class":192}," libXrandr",[76,100824,24647],{"class":136},[76,100826,100827,100830,100833],{"class":78,"line":1184},[76,100828,100829],{"class":192},"  gcc",[76,100831,100832],{"class":192}," gcc-c++",[76,100834,100835],{"class":192}," make\n",[21,100837,100838],{},"创建 Python 环境:",[66,100840,100842],{"className":23790,"code":100841,"language":23792,"meta":71,"style":71},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[73,100843,100844,100858,100866],{"__ignoreMap":71},[76,100845,100846,100849,100852,100855],{"class":78,"line":79},[76,100847,100848],{"class":1927},"python3",[76,100850,100851],{"class":136}," -m",[76,100853,100854],{"class":192}," venv",[76,100856,100857],{"class":192}," .venv\n",[76,100859,100860,100863],{"class":78,"line":96},[76,100861,100862],{"class":136},"source",[76,100864,100865],{"class":192}," .venv\u002Fbin\u002Factivate\n",[76,100867,100868,100870,100872,100875,100877,100880],{"class":78,"line":1143},[76,100869,30349],{"class":1927},[76,100871,100851],{"class":136},[76,100873,100874],{"class":192}," pip",[76,100876,23802],{"class":192},[76,100878,100879],{"class":136}," --upgrade",[76,100881,100882],{"class":192}," pip\n",[21,100884,100885],{},"pip 安装:",[66,100887,100889],{"className":23790,"code":100888,"language":23792,"meta":71,"style":71},"pip install \"mujoco>=2.3\" numpy\n",[73,100890,100891],{"__ignoreMap":71},[76,100892,100893,100895,100897,100900],{"class":78,"line":79},[76,100894,23799],{"class":1927},[76,100896,23802],{"class":192},[76,100898,100899],{"class":192}," \"mujoco>=2.3\"",[76,100901,100902],{"class":192}," numpy\n",[21,100904,100905],{},"安装完成后，先做最小检查：",[66,100907,100909],{"className":23790,"code":100908,"language":23792,"meta":71,"style":71},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[73,100910,100911],{"__ignoreMap":71},[76,100912,100913,100915,100917],{"class":78,"line":79},[76,100914,30349],{"class":1927},[76,100916,30327],{"class":136},[76,100918,100919],{"class":192}," \"import mujoco; print(mujoco.__version__)\"\n",[21,100921,100922],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[21,100924,100925],{},"conda 安装:",[66,100927,100929],{"className":23790,"code":100928,"language":23792,"meta":71,"style":71},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[73,100930,100931,100951,100961],{"__ignoreMap":71},[76,100932,100933,100935,100937,100939,100942,100945,100948],{"class":78,"line":79},[76,100934,30299],{"class":1927},[76,100936,29145],{"class":192},[76,100938,25084],{"class":136},[76,100940,100941],{"class":192}," mujoco-study",[76,100943,100944],{"class":192}," python=",[76,100946,100947],{"class":136},"3.10",[76,100949,100950],{"class":136}," -y\n",[76,100952,100953,100955,100958],{"class":78,"line":96},[76,100954,30299],{"class":1927},[76,100956,100957],{"class":192}," activate",[76,100959,100960],{"class":192}," mujoco-study\n",[76,100962,100963,100965,100967,100969],{"class":78,"line":1143},[76,100964,23799],{"class":1927},[76,100966,23802],{"class":192},[76,100968,100899],{"class":192},[76,100970,100902],{"class":192},[21,100972,100973],{},"版本冲突说明:",[29,100975,100976,100982,100992,101001],{},[32,100977,100978,100979,28354],{},"不要安装 ",[73,100980,100981],{},"mujoco-py",[32,100983,100984,100985,100987,100988,100991],{},"如果旧项目里同时安装了 ",[73,100986,100981],{}," 和 ",[73,100989,100990],{},"mujoco","，建议新建干净虚拟环境。",[32,100993,100994,100997,100998,28354],{},[73,100995,100996],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[73,100999,101000],{},"~\u002F.mujoco\u002Fmujoco210",[32,101002,101003,101004,82508,101007,101010],{},"离屏渲染可能涉及 OpenGL 后端，",[73,101005,101006],{},"MUJOCO_GL=egl",[73,101008,101009],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[16,101012,101014],{"id":101013},"_3核心概念解释","3.核心概念解释",[21,101016,101017],{},"MuJoCo 的基本执行流程:",[66,101019,101022],{"className":101020,"code":101021,"language":5154,"meta":71},[5152],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[73,101023,101021],{"__ignoreMap":71},[21,101025,101026,101028],{},[73,101027,100678],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[21,101030,101031,101033,101034,300,101037,300,101040,300,101043,300,101046,28354],{},[73,101032,100688],{}," 存放仿真运行时状态，例如 ",[73,101035,101036],{},"data.time",[73,101038,101039],{},"data.qpos",[73,101041,101042],{},"data.qvel",[73,101044,101045],{},"data.ctrl",[73,101047,101048],{},"data.xpos",[46,101050,101052],{"id":101051},"xml-是什么","XML 是什么",[21,101054,101055],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[66,101057,101059],{"className":53036,"code":101058,"language":53038,"meta":71,"style":71},"\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",[73,101060,101061,101083,101114],{"__ignoreMap":71},[76,101062,101063,101065,101067,101069,101071,101073,101076,101078,101081],{"class":78,"line":79},[76,101064,998],{"class":86},[76,101066,51769],{"class":51269},[76,101068,14887],{"class":1927},[76,101070,133],{"class":86},[76,101072,53460],{"class":192},[76,101074,101075],{"class":1927}," pos",[76,101077,133],{"class":86},[76,101079,101080],{"class":192},"\"0 0 1\"",[76,101082,51276],{"class":86},[76,101084,101085,101087,101090,101092,101094,101097,101099,101101,101103,101106,101108,101111],{"class":78,"line":96},[76,101086,52113],{"class":86},[76,101088,101089],{"class":51269},"geom",[76,101091,14887],{"class":1927},[76,101093,133],{"class":86},[76,101095,101096],{"class":192},"\"box_geom\"",[76,101098,53793],{"class":1927},[76,101100,133],{"class":86},[76,101102,53460],{"class":192},[76,101104,101105],{"class":1927}," size",[76,101107,133],{"class":86},[76,101109,101110],{"class":192},"\"0.1 0.1 0.1\"",[76,101112,101113],{"class":86},"\u002F>\n",[76,101115,101116,101118,101120],{"class":78,"line":1143},[76,101117,51754],{"class":86},[76,101119,51769],{"class":51269},[76,101121,51276],{"class":86},[21,101123,101124],{},"这段意思是：",[29,101126,101127,101133,101140],{},[32,101128,101129,101130,101132],{},"创建一个叫 ",[73,101131,53683],{}," 的刚体。",[32,101134,101135,101136,101139],{},"它初始放在 ",[73,101137,101138],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[32,101141,101142],{},"它里面有一个盒子形状的几何体。",[46,101144,101146],{"id":101145},"timestep-是什么","timestep 是什么",[21,101148,101149],{},"XML 里的：",[66,101151,101153],{"className":53036,"code":101152,"language":53038,"meta":71,"style":71},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[73,101154,101155],{"__ignoreMap":71},[76,101156,101157,101159,101161,101164,101166,101169,101172,101174,101177],{"class":78,"line":79},[76,101158,998],{"class":86},[76,101160,69135],{"class":51269},[76,101162,101163],{"class":1927}," timestep",[76,101165,133],{"class":86},[76,101167,101168],{"class":192},"\"0.01\"",[76,101170,101171],{"class":1927}," gravity",[76,101173,133],{"class":86},[76,101175,101176],{"class":192},"\"0 0 -9.81\"",[76,101178,101113],{"class":86},[21,101180,101181,101182,101185,101186,101188],{},"表示每调用一次 ",[73,101183,101184],{},"mj_step","，仿真时间前进 ",[73,101187,38955],{}," 秒。循环 100 次，大约就是 1 秒：",[66,101190,101193],{"className":101191,"code":101192,"language":5154,"meta":71},[5152],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[73,101194,101192],{"__ignoreMap":71},[46,101196,101198],{"id":101197},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[21,101200,101201],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[66,101203,101206],{"className":101204,"code":101205,"language":5154,"meta":71},[5152],"x y z qw qx qy qz\n",[73,101207,101205],{"__ignoreMap":71},[21,101209,101210,101211,101214,101215,101218],{},"表示一个自由刚体的位置和姿态。其中 ",[73,101212,101213],{},"x y z"," 是位置，",[73,101216,101217],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[16,101220,101222],{"id":101221},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[21,101224,101225],{},"新建文件:",[66,101227,101229],{"className":23790,"code":101228,"language":23792,"meta":71,"style":71},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[73,101230,101231,101241,101248],{"__ignoreMap":71},[76,101232,101233,101236,101238],{"class":78,"line":79},[76,101234,101235],{"class":1927},"mkdir",[76,101237,29185],{"class":136},[76,101239,101240],{"class":192}," mujoco_tutorial\n",[76,101242,101243,101246],{"class":78,"line":96},[76,101244,101245],{"class":136},"cd",[76,101247,101240],{"class":192},[76,101249,101250,101253],{"class":78,"line":1143},[76,101251,101252],{"class":1927},"touch",[76,101254,101255],{"class":192}," ch1_first_sim.py\n",[21,101257,101258],{},"写入:",[66,101260,101262],{"className":30347,"code":101261,"language":30349,"meta":71,"style":71},"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",[73,101263,101264,101271,101275,101279,101289,101294,101299,101303,101308,101313,101317,101322,101327,101332,101337,101342,101347,101351,101355,101359,101372,101386,101396,101400,101412,101424,101436,101448,101460,101464,101481,101486,101490,101501,101512,101516,101520,101534],{"__ignoreMap":71},[76,101265,101266,101268],{"class":78,"line":79},[76,101267,30361],{"class":82},[76,101269,101270],{"class":86}," mujoco\n",[76,101272,101273],{"class":78,"line":96},[76,101274,2365],{"emptyLinePlaceholder":2364},[76,101276,101277],{"class":78,"line":1143},[76,101278,2365],{"emptyLinePlaceholder":2364},[76,101280,101281,101284,101286],{"class":78,"line":1158},[76,101282,101283],{"class":136},"XML",[76,101285,13531],{"class":82},[76,101287,101288],{"class":192}," \"\"\"\n",[76,101290,101291],{"class":78,"line":1164},[76,101292,101293],{"class":192},"\u003Cmujoco model=\"first_sim\">\n",[76,101295,101296],{"class":78,"line":1178},[76,101297,101298],{"class":192},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[76,101300,101301],{"class":78,"line":1184},[76,101302,2365],{"emptyLinePlaceholder":2364},[76,101304,101305],{"class":78,"line":1275},[76,101306,101307],{"class":192},"  \u003Cworldbody>\n",[76,101309,101310],{"class":78,"line":1281},[76,101311,101312],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,101314,101315],{"class":78,"line":1293},[76,101316,2365],{"emptyLinePlaceholder":2364},[76,101318,101319],{"class":78,"line":1576},[76,101320,101321],{"class":192},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[76,101323,101324],{"class":78,"line":1581},[76,101325,101326],{"class":192},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[76,101328,101329],{"class":78,"line":1587},[76,101330,101331],{"class":192},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,101333,101334],{"class":78,"line":1592},[76,101335,101336],{"class":192},"    \u003C\u002Fbody>\n",[76,101338,101339],{"class":78,"line":1606},[76,101340,101341],{"class":192},"  \u003C\u002Fworldbody>\n",[76,101343,101344],{"class":78,"line":1611},[76,101345,101346],{"class":192},"\u003C\u002Fmujoco>\n",[76,101348,101349],{"class":78,"line":1617},[76,101350,95667],{"class":192},[76,101352,101353],{"class":78,"line":1638},[76,101354,2365],{"emptyLinePlaceholder":2364},[76,101356,101357],{"class":78,"line":1643},[76,101358,2365],{"emptyLinePlaceholder":2364},[76,101360,101361,101363,101365,101368,101370],{"class":78,"line":1657},[76,101362,31916],{"class":82},[76,101364,1937],{"class":1927},[76,101366,101367],{"class":86},"() -> ",[76,101369,95655],{"class":136},[76,101371,3704],{"class":86},[76,101373,101374,101377,101379,101382,101384],{"class":78,"line":1662},[76,101375,101376],{"class":86},"    model ",[76,101378,133],{"class":82},[76,101380,101381],{"class":86}," mujoco.MjModel.from_xml_string(",[76,101383,101283],{"class":136},[76,101385,93],{"class":86},[76,101387,101388,101391,101393],{"class":78,"line":1691},[76,101389,101390],{"class":86},"    data ",[76,101392,133],{"class":82},[76,101394,101395],{"class":86}," mujoco.MjData(model)\n",[76,101397,101398],{"class":78,"line":1696},[76,101399,2365],{"emptyLinePlaceholder":2364},[76,101401,101402,101404,101406,101409],{"class":78,"line":1713},[76,101403,31268],{"class":136},[76,101405,87],{"class":86},[76,101407,101408],{"class":192},"\"nq:\"",[76,101410,101411],{"class":86},", model.nq)\n",[76,101413,101414,101416,101418,101421],{"class":78,"line":1718},[76,101415,31268],{"class":136},[76,101417,87],{"class":86},[76,101419,101420],{"class":192},"\"nv:\"",[76,101422,101423],{"class":86},", model.nv)\n",[76,101425,101426,101428,101430,101433],{"class":78,"line":1723},[76,101427,31268],{"class":136},[76,101429,87],{"class":86},[76,101431,101432],{"class":192},"\"nu:\"",[76,101434,101435],{"class":86},", model.nu)\n",[76,101437,101438,101440,101442,101445],{"class":78,"line":1728},[76,101439,31268],{"class":136},[76,101441,87],{"class":86},[76,101443,101444],{"class":192},"\"initial time:\"",[76,101446,101447],{"class":86},", data.time)\n",[76,101449,101450,101452,101454,101457],{"class":78,"line":1742},[76,101451,31268],{"class":136},[76,101453,87],{"class":86},[76,101455,101456],{"class":192},"\"initial qpos:\"",[76,101458,101459],{"class":86},", data.qpos.copy())\n",[76,101461,101462],{"class":78,"line":1747},[76,101463,2365],{"emptyLinePlaceholder":2364},[76,101465,101466,101468,101471,101473,101475,101477,101479],{"class":78,"line":2542},[76,101467,3166],{"class":82},[76,101469,101470],{"class":86}," _ ",[76,101472,26012],{"class":82},[76,101474,32412],{"class":136},[76,101476,87],{"class":86},[76,101478,399],{"class":136},[76,101480,30755],{"class":86},[76,101482,101483],{"class":78,"line":2556},[76,101484,101485],{"class":86},"        mujoco.mj_step(model, data)\n",[76,101487,101488],{"class":78,"line":2564},[76,101489,2365],{"emptyLinePlaceholder":2364},[76,101491,101492,101494,101496,101499],{"class":78,"line":2569},[76,101493,31268],{"class":136},[76,101495,87],{"class":86},[76,101497,101498],{"class":192},"\"final time:\"",[76,101500,101447],{"class":86},[76,101502,101503,101505,101507,101510],{"class":78,"line":2575},[76,101504,31268],{"class":136},[76,101506,87],{"class":86},[76,101508,101509],{"class":192},"\"final qpos:\"",[76,101511,101459],{"class":86},[76,101513,101514],{"class":78,"line":2581},[76,101515,2365],{"emptyLinePlaceholder":2364},[76,101517,101518],{"class":78,"line":2586},[76,101519,2365],{"emptyLinePlaceholder":2364},[76,101521,101522,101524,101526,101529,101532],{"class":78,"line":7915},[76,101523,1495],{"class":82},[76,101525,31189],{"class":136},[76,101527,101528],{"class":82}," ==",[76,101530,101531],{"class":192}," \"__main__\"",[76,101533,3704],{"class":86},[76,101535,101536],{"class":78,"line":7939},[76,101537,101538],{"class":86},"    main()\n",[46,101540,101541],{"id":101541},"代码逐段解释",[21,101543,101544],{},"导入库：",[66,101546,101548],{"className":30347,"code":101547,"language":30349,"meta":71,"style":71},"import mujoco\n",[73,101549,101550],{"__ignoreMap":71},[76,101551,101552,101554],{"class":78,"line":79},[76,101553,30361],{"class":82},[76,101555,101270],{"class":86},[21,101557,101558],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[21,101560,101561],{},"定义 XML：",[66,101563,101565],{"className":30347,"code":101564,"language":30349,"meta":71,"style":71},"XML = \"\"\"\n...\n\"\"\"\n",[73,101566,101567,101575,101580],{"__ignoreMap":71},[76,101568,101569,101571,101573],{"class":78,"line":79},[76,101570,101283],{"class":136},[76,101572,13531],{"class":82},[76,101574,101288],{"class":192},[76,101576,101577],{"class":78,"line":96},[76,101578,101579],{"class":192},"...\n",[76,101581,101582],{"class":78,"line":1143},[76,101583,95667],{"class":192},[21,101585,101586,101587,101590],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[73,101588,101589],{},"freejoint"," 的方块。",[21,101592,101593],{},"编译模型：",[66,101595,101597],{"className":30347,"code":101596,"language":30349,"meta":71,"style":71},"model = mujoco.MjModel.from_xml_string(XML)\n",[73,101598,101599],{"__ignoreMap":71},[76,101600,101601,101604,101606,101608,101610],{"class":78,"line":79},[76,101602,101603],{"class":86},"model ",[76,101605,133],{"class":82},[76,101607,101381],{"class":86},[76,101609,101283],{"class":136},[76,101611,93],{"class":86},[21,101613,101614],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[21,101616,101617],{},"创建数据：",[66,101619,101621],{"className":30347,"code":101620,"language":30349,"meta":71,"style":71},"data = mujoco.MjData(model)\n",[73,101622,101623],{"__ignoreMap":71},[76,101624,101625,101628,101630],{"class":78,"line":79},[76,101626,101627],{"class":86},"data ",[76,101629,133],{"class":82},[76,101631,101395],{"class":86},[21,101633,101634,101636,101637,101639],{},[73,101635,33370],{}," 会保存仿真当前状态。刚创建时，时间是 ",[73,101638,279],{},"，方块还在初始位置。",[21,101641,101642],{},"推进仿真：",[66,101644,101646],{"className":30347,"code":101645,"language":30349,"meta":71,"style":71},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[73,101647,101648,101664],{"__ignoreMap":71},[76,101649,101650,101652,101654,101656,101658,101660,101662],{"class":78,"line":79},[76,101651,2990],{"class":82},[76,101653,101470],{"class":86},[76,101655,26012],{"class":82},[76,101657,32412],{"class":136},[76,101659,87],{"class":86},[76,101661,399],{"class":136},[76,101663,30755],{"class":86},[76,101665,101666],{"class":78,"line":96},[76,101667,101668],{"class":86},"    mujoco.mj_step(model, data)\n",[21,101670,101671,101672,101674],{},"每次 ",[73,101673,101184],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[46,101676,101677],{"id":101677},"代码逐行细讲",[21,101679,101680],{},"下面把完整代码按新手视角拆开讲。",[66,101682,101683],{"className":30347,"code":101547,"language":30349,"meta":71,"style":71},[73,101684,101685],{"__ignoreMap":71},[76,101686,101687,101689],{"class":78,"line":79},[76,101688,30361],{"class":82},[76,101690,101270],{"class":86},[21,101692,101693,101695,101696,300,101698,300,101700,28354],{},[73,101694,30361],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[73,101697,100644],{},[73,101699,100649],{},[73,101701,101702],{},"mujoco.mj_step",[66,101704,101705],{"className":30347,"code":101564,"language":30349,"meta":71,"style":71},[73,101706,101707,101715,101719],{"__ignoreMap":71},[76,101708,101709,101711,101713],{"class":78,"line":79},[76,101710,101283],{"class":136},[76,101712,13531],{"class":82},[76,101714,101288],{"class":192},[76,101716,101717],{"class":78,"line":96},[76,101718,101579],{"class":192},[76,101720,101721],{"class":78,"line":1143},[76,101722,95667],{"class":192},[21,101724,101725,101727,101728,101731],{},[73,101726,101283],{}," 是一个变量名。右边的三引号 ",[73,101729,101730],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[66,101733,101734],{"className":53036,"code":101293,"language":53038,"meta":71,"style":71},[73,101735,101736],{"__ignoreMap":71},[76,101737,101738,101740,101742,101745,101747,101750],{"class":78,"line":79},[76,101739,998],{"class":86},[76,101741,100990],{"class":51269},[76,101743,101744],{"class":1927}," model",[76,101746,133],{"class":86},[76,101748,101749],{"class":192},"\"first_sim\"",[76,101751,51276],{"class":86},[21,101753,101754,101755,101758,101759,28354],{},"这是 XML 的根标签。",[73,101756,101757],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[73,101760,101761],{},"first_sim",[66,101763,101764],{"className":53036,"code":101152,"language":53038,"meta":71,"style":71},[73,101765,101766],{"__ignoreMap":71},[76,101767,101768,101770,101772,101774,101776,101778,101780,101782,101784],{"class":78,"line":79},[76,101769,998],{"class":86},[76,101771,69135],{"class":51269},[76,101773,101163],{"class":1927},[76,101775,133],{"class":86},[76,101777,101168],{"class":192},[76,101779,101171],{"class":1927},[76,101781,133],{"class":86},[76,101783,101176],{"class":192},[76,101785,101113],{"class":86},[21,101787,101788,101790,101791,101794,101795,101798],{},[73,101789,69135],{}," 用来设置仿真参数。",[73,101792,101793],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[73,101796,101797],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[66,101800,101802],{"className":53036,"code":101801,"language":53038,"meta":71,"style":71},"\u003Cworldbody>\n",[73,101803,101804],{"__ignoreMap":71},[76,101805,101806,101808,101811],{"class":78,"line":79},[76,101807,998],{"class":86},[76,101809,101810],{"class":51269},"worldbody",[76,101812,51276],{"class":86},[21,101814,101815,101817],{},[73,101816,101810],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[66,101819,101821],{"className":53036,"code":101820,"language":53038,"meta":71,"style":71},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[73,101822,101823],{"__ignoreMap":71},[76,101824,101825,101827,101829,101831,101833,101836,101838,101840,101843,101845,101847,101850,101852,101854,101857],{"class":78,"line":79},[76,101826,998],{"class":86},[76,101828,101089],{"class":51269},[76,101830,14887],{"class":1927},[76,101832,133],{"class":86},[76,101834,101835],{"class":192},"\"floor\"",[76,101837,53793],{"class":1927},[76,101839,133],{"class":86},[76,101841,101842],{"class":192},"\"plane\"",[76,101844,101105],{"class":1927},[76,101846,133],{"class":86},[76,101848,101849],{"class":192},"\"2 2 0.1\"",[76,101851,78736],{"class":1927},[76,101853,133],{"class":86},[76,101855,101856],{"class":192},"\"0.8 0.8 0.8 1\"",[76,101858,101113],{"class":86},[21,101860,101861,101862,101864,101865,101868,101869,101872,101873,101875],{},"这行创建地面。",[73,101863,101089],{}," 是几何体。",[73,101866,101867],{},"name=\"floor\""," 是名字。",[73,101870,101871],{},"type=\"plane\""," 表示平面。",[73,101874,55079],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[66,101877,101879],{"className":53036,"code":101878,"language":53038,"meta":71,"style":71},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[73,101880,101881],{"__ignoreMap":71},[76,101882,101883,101885,101887,101889,101891,101893,101895,101897,101899],{"class":78,"line":79},[76,101884,998],{"class":86},[76,101886,51769],{"class":51269},[76,101888,14887],{"class":1927},[76,101890,133],{"class":86},[76,101892,53460],{"class":192},[76,101894,101075],{"class":1927},[76,101896,133],{"class":86},[76,101898,101080],{"class":192},[76,101900,51276],{"class":86},[21,101902,101903,101904,28354,101906,101909,101910,101912],{},"这行创建一个刚体，名字叫 ",[73,101905,53683],{},[73,101907,101908],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[73,101911,101138],{},"，也就是离地面 1 米高。",[66,101914,101916],{"className":53036,"code":101915,"language":53038,"meta":71,"style":71},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[73,101917,101918],{"__ignoreMap":71},[76,101919,101920,101922,101924,101926,101928,101931],{"class":78,"line":79},[76,101921,998],{"class":86},[76,101923,101589],{"class":51269},[76,101925,14887],{"class":1927},[76,101927,133],{"class":86},[76,101929,101930],{"class":192},"\"box_free\"",[76,101932,101113],{"class":86},[21,101934,101935,101936,101938],{},"这行很重要。",[73,101937,101589],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[66,101940,101942],{"className":53036,"code":101941,"language":53038,"meta":71,"style":71},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[73,101943,101944],{"__ignoreMap":71},[76,101945,101946,101948,101950,101952,101954,101956,101958,101960,101962,101964,101966,101968,101971,101973,101975,101977,101979,101982],{"class":78,"line":79},[76,101947,998],{"class":86},[76,101949,101089],{"class":51269},[76,101951,14887],{"class":1927},[76,101953,133],{"class":86},[76,101955,101096],{"class":192},[76,101957,53793],{"class":1927},[76,101959,133],{"class":86},[76,101961,53460],{"class":192},[76,101963,101105],{"class":1927},[76,101965,133],{"class":86},[76,101967,101110],{"class":192},[76,101969,101970],{"class":1927}," mass",[76,101972,133],{"class":86},[76,101974,3643],{"class":192},[76,101976,78736],{"class":1927},[76,101978,133],{"class":86},[76,101980,101981],{"class":192},"\"1 0 0 1\"",[76,101983,101113],{"class":86},[21,101985,101986,101987,101990,101991,101994,101995,101998,101999,102002],{},"这行给 box body 添加一个盒子形状。",[73,101988,101989],{},"type=\"box\""," 表示形状是盒子。",[73,101992,101993],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[73,101996,101997],{},"mass=\"1\""," 表示质量是 1。",[73,102000,102001],{},"rgba=\"1 0 0 1\""," 表示红色。",[66,102004,102006],{"className":30347,"code":102005,"language":30349,"meta":71,"style":71},"def main() -> None:\n",[73,102007,102008],{"__ignoreMap":71},[76,102009,102010,102012,102014,102016,102018],{"class":78,"line":79},[76,102011,31916],{"class":82},[76,102013,1937],{"class":1927},[76,102015,101367],{"class":86},[76,102017,95655],{"class":136},[76,102019,3704],{"class":86},[21,102021,102022,102024,102025,102028,102029,102032],{},[73,102023,31916],{}," 用来定义函数。这里定义了一个叫 ",[73,102026,102027],{},"main"," 的函数。",[73,102030,102031],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[66,102034,102035],{"className":30347,"code":101596,"language":30349,"meta":71,"style":71},[73,102036,102037],{"__ignoreMap":71},[76,102038,102039,102041,102043,102045,102047],{"class":78,"line":79},[76,102040,101603],{"class":86},[76,102042,133],{"class":82},[76,102044,101381],{"class":86},[76,102046,101283],{"class":136},[76,102048,93],{"class":86},[21,102050,102051,102052,102055],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[73,102053,102054],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[66,102057,102058],{"className":30347,"code":101620,"language":30349,"meta":71,"style":71},[73,102059,102060],{"__ignoreMap":71},[76,102061,102062,102064,102066],{"class":78,"line":79},[76,102063,101627],{"class":86},[76,102065,133],{"class":82},[76,102067,101395],{"class":86},[21,102069,102070,102071,102073,102074,102076],{},"这行创建仿真数据。",[73,102072,33370],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[73,102075,33370],{}," 都会变化。",[66,102078,102080],{"className":30347,"code":102079,"language":30349,"meta":71,"style":71},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[73,102081,102082,102092,102102],{"__ignoreMap":71},[76,102083,102084,102086,102088,102090],{"class":78,"line":79},[76,102085,30384],{"class":136},[76,102087,87],{"class":86},[76,102089,101408],{"class":192},[76,102091,101411],{"class":86},[76,102093,102094,102096,102098,102100],{"class":78,"line":96},[76,102095,30384],{"class":136},[76,102097,87],{"class":86},[76,102099,101420],{"class":192},[76,102101,101423],{"class":86},[76,102103,102104,102106,102108,102110],{"class":78,"line":1143},[76,102105,30384],{"class":136},[76,102107,87],{"class":86},[76,102109,101432],{"class":192},[76,102111,101435],{"class":86},[21,102113,102114,102116,102117,102120,102121,102124,102125,102128,102129,102132],{},[73,102115,30384],{}," 用来输出信息。",[73,102118,102119],{},"model.nq"," 是位置变量数量，",[73,102122,102123],{},"model.nv"," 是速度变量数量，",[73,102126,102127],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[73,102130,102131],{},"nu"," 是 0。",[66,102134,102136],{"className":30347,"code":102135,"language":30349,"meta":71,"style":71},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[73,102137,102138,102148],{"__ignoreMap":71},[76,102139,102140,102142,102144,102146],{"class":78,"line":79},[76,102141,30384],{"class":136},[76,102143,87],{"class":86},[76,102145,101444],{"class":192},[76,102147,101447],{"class":86},[76,102149,102150,102152,102154,102156],{"class":78,"line":96},[76,102151,30384],{"class":136},[76,102153,87],{"class":86},[76,102155,101456],{"class":192},[76,102157,101459],{"class":86},[21,102159,102160,102161,102163,102164,102166,102167,102170],{},"这里打印初始时间和初始位置。",[73,102162,101036],{}," 一开始是 0。",[73,102165,101039],{}," 是位置数组。",[73,102168,102169],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[66,102172,102173],{"className":30347,"code":101645,"language":30349,"meta":71,"style":71},[73,102174,102175,102191],{"__ignoreMap":71},[76,102176,102177,102179,102181,102183,102185,102187,102189],{"class":78,"line":79},[76,102178,2990],{"class":82},[76,102180,101470],{"class":86},[76,102182,26012],{"class":82},[76,102184,32412],{"class":136},[76,102186,87],{"class":86},[76,102188,399],{"class":136},[76,102190,30755],{"class":86},[76,102192,102193],{"class":78,"line":96},[76,102194,101668],{"class":86},[21,102196,102197,102199,102200,102203,102204,102206,102207,102209],{},[73,102198,2990],{}," 是循环。",[73,102201,102202],{},"range(100)"," 表示循环 100 次。",[73,102205,1080],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[73,102208,101184],{},"，仿真就前进一步。",[66,102211,102213],{"className":30347,"code":102212,"language":30349,"meta":71,"style":71},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[73,102214,102215,102225],{"__ignoreMap":71},[76,102216,102217,102219,102221,102223],{"class":78,"line":79},[76,102218,30384],{"class":136},[76,102220,87],{"class":86},[76,102222,101498],{"class":192},[76,102224,101447],{"class":86},[76,102226,102227,102229,102231,102233],{"class":78,"line":96},[76,102228,30384],{"class":136},[76,102230,87],{"class":86},[76,102232,101509],{"class":192},[76,102234,101459],{"class":86},[21,102236,102237],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[66,102239,102241],{"className":30347,"code":102240,"language":30349,"meta":71,"style":71},"if __name__ == \"__main__\":\n    main()\n",[73,102242,102243,102255],{"__ignoreMap":71},[76,102244,102245,102247,102249,102251,102253],{"class":78,"line":79},[76,102246,1495],{"class":82},[76,102248,31189],{"class":136},[76,102250,101528],{"class":82},[76,102252,101531],{"class":192},[76,102254,3704],{"class":86},[76,102256,102257],{"class":78,"line":96},[76,102258,101538],{"class":86},[21,102260,102261,102262,102265,102266,28354],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[73,102263,102264],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[73,102267,102264],{},[21,102269,102270],{},"运行:",[66,102272,102274],{"className":23790,"code":102273,"language":23792,"meta":71,"style":71},"python ch1_first_sim.py\n",[73,102275,102276],{"__ignoreMap":71},[76,102277,102278,102280],{"class":78,"line":79},[76,102279,30349],{"class":1927},[76,102281,101255],{"class":192},[16,102283,102285],{"id":102284},"_5运行结果说明","5.运行结果说明",[21,102287,102288],{},"你应该看到类似输出:",[66,102290,102293],{"className":102291,"code":102292,"language":5154,"meta":71},[5152],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[73,102294,102292],{"__ignoreMap":71},[21,102296,102297,102299,102300,102303,102304,28354],{},[73,102298,101589],{}," 有 7 个位置变量: ",[73,102301,102302],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[73,102305,102306],{},"vx vy vz wx wy wz",[21,102308,102309,102310,102313],{},"你还会看到 ",[73,102311,102312],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[16,102315,102317],{"id":102316},"_6验证步骤","6.验证步骤",[21,102319,102320],{},"确认版本:",[66,102322,102323],{"className":23790,"code":100908,"language":23792,"meta":71,"style":71},[73,102324,102325],{"__ignoreMap":71},[76,102326,102327,102329,102331],{"class":78,"line":79},[76,102328,30349],{"class":1927},[76,102330,30327],{"class":136},[76,102332,100919],{"class":192},[21,102334,102335],{},"确认导入的是官方 bindings:",[66,102337,102339],{"className":23790,"code":102338,"language":23792,"meta":71,"style":71},"python -c \"import mujoco; print(mujoco)\"\n",[73,102340,102341],{"__ignoreMap":71},[76,102342,102343,102345,102347],{"class":78,"line":79},[76,102344,30349],{"class":1927},[76,102346,30327],{"class":136},[76,102348,102349],{"class":192}," \"import mujoco; print(mujoco)\"\n",[21,102351,102352],{},"运行程序:",[66,102354,102355],{"className":23790,"code":102273,"language":23792,"meta":71,"style":71},[73,102356,102357],{"__ignoreMap":71},[76,102358,102359,102361],{"class":78,"line":79},[76,102360,30349],{"class":1927},[76,102362,101255],{"class":192},[21,102364,102365,102366,102369,102370,28354],{},"检查 ",[73,102367,102368],{},"final time"," 是否约等于 ",[73,102371,102372],{},"1.0",[21,102374,102375],{},"再做几个小实验：",[29,102377,102378,102388,102396,102409],{},[32,102379,102380,102381,102383,102384,102387],{},"把 ",[73,102382,101908],{}," 改成 ",[73,102385,102386],{},"pos=\"0 0 2\"","，观察初始高度变化。",[32,102389,102380,102390,102383,102392,102395],{},[73,102391,101797],{},[73,102393,102394],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[32,102397,102380,102398,102383,102400,102403,102404,102406,102407,28354],{},[73,102399,101793],{},[73,102401,102402],{},"timestep=\"0.005\"","，观察 100 步后的 ",[73,102405,102368],{}," 是否变成约 ",[73,102408,35298],{},[32,102410,102411,102412,102415],{},"删除 ",[73,102413,102414],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[21,102417,102418],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[16,102420,102422],{"id":102421},"_7常见错误与解决方案","7.常见错误与解决方案",[46,102424,102426],{"id":102425},"modulenotfounderror-no-module-named-mujoco",[73,102427,102428],{},"ModuleNotFoundError: No module named 'mujoco'",[21,102430,102431],{},"解决:",[66,102433,102435],{"className":23790,"code":102434,"language":23792,"meta":71,"style":71},"pip install \"mujoco>=2.3\"\n",[73,102436,102437],{"__ignoreMap":71},[76,102438,102439,102441,102443],{"class":78,"line":79},[76,102440,23799],{"class":1927},[76,102442,23802],{"class":192},[76,102444,102445],{"class":192}," \"mujoco>=2.3\"\n",[46,102447,102449],{"id":102448},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[21,102451,102452],{},"先安装系统依赖:",[66,102454,102456],{"className":23790,"code":102455,"language":23792,"meta":71,"style":71},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[73,102457,102458],{"__ignoreMap":71},[76,102459,102460,102462,102464,102466,102468,102471,102473,102476,102478,102481,102483],{"class":78,"line":79},[76,102461,24545],{"class":1927},[76,102463,26284],{"class":192},[76,102465,23802],{"class":192},[76,102467,26369],{"class":136},[76,102469,102470],{"class":192}," mesa-libGL",[76,102472,100783],{"class":192},[76,102474,102475],{"class":192}," glfw",[76,102477,100803],{"class":192},[76,102479,102480],{"class":192}," libX11",[76,102482,100816],{"class":192},[76,102484,102485],{"class":192}," libXrandr\n",[46,102487,102489],{"id":102488},"xml-解析失败","XML 解析失败",[21,102491,102492],{},"检查:",[29,102494,102495,102498,102501,102507],{},[32,102496,102497],{},"标签是否闭合",[32,102499,102500],{},"属性是否带引号",[32,102502,102503,102504],{},"根节点是否是 ",[73,102505,102506],{},"\u003Cmujoco>",[32,102508,102509,102511,102512,102515],{},[73,102510,51769],{}," 是否放在 ",[73,102513,102514],{},"\u003Cworldbody>"," 内部",[46,102517,102519,102521,102522],{"id":102518},"final-time-不是严格等于-10",[73,102520,102368],{}," 不是严格等于 ",[73,102523,102372],{},[21,102525,102526],{},"这通常不是错误。浮点数计算可能得到：",[66,102528,102531],{"className":102529,"code":102530,"language":5154,"meta":71},[5152],"1.0000000000000007\n",[73,102532,102530],{"__ignoreMap":71},[21,102534,102535,102536,102538],{},"只要接近 ",[73,102537,102372],{}," 就正常。",[46,102540,102541],{"id":102541},"方块没有掉下来",[21,102543,102544],{},"检查：",[29,102546,102547,102553,102559,102564],{},[32,102548,102549,102550],{},"方块 body 里是否有 ",[73,102551,102552],{},"\u003Cfreejoint\u002F>",[32,102554,102555,102556],{},"重力是否是 ",[73,102557,102558],{},"0 0 -9.81",[32,102560,102561,102562],{},"是否真的调用了 ",[73,102563,100654],{},[32,102565,102566,102567,102569,102570],{},"你看的是否是 ",[73,102568,102312],{},"，不是 ",[73,102571,102572],{},"initial qpos",[16,102574,102576],{"id":102575},"_8本章小结","8.本章小结",[21,102578,102579],{},"本章你已经完成了 MuJoCo 的最小闭环：",[66,102581,102584],{"className":102582,"code":102583,"language":5154,"meta":71},[5152],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[73,102585,102583],{"__ignoreMap":71},[21,102587,102588],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5092,102590,102591],{},"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":71,"searchDepth":96,"depth":96,"links":102593},[102594,102595,102596,102601,102605,102606,102607,102615],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":102597},[102598,102599,102600],{"id":101051,"depth":1143,"text":101052},{"id":101145,"depth":1143,"text":101146},{"id":101197,"depth":1143,"text":101198},{"id":101221,"depth":96,"text":101222,"children":102602},[102603,102604],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":102608},[102609,102610,102611,102612,102614],{"id":102425,"depth":1143,"text":102428},{"id":102448,"depth":1143,"text":102449},{"id":102488,"depth":1143,"text":102489},{"id":102518,"depth":1143,"text":102613},"final time 不是严格等于 1.0",{"id":102541,"depth":1143,"text":102541},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100607,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102622,"title":102623,"body":102624,"description":71,"extension":5123,"meta":104280,"navigation":2364,"path":104281,"seo":104282,"stem":104283,"__hash__":104284},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":9,"value":102625,"toc":104256},[102626,102629,102631,102634,102637,102654,102749,102752,102758,102760,102762,102786,102789,102803,102806,102847,102849,102862,102864,102867,102915,102927,102930,102933,102939,102952,103019,103022,103041,103044,103047,103053,103055,103064,103067,103071,103080,103162,103171,103175,103181,103195,103205,103207,103537,103540,103552,103554,103565,103567,103570,103588,103591,103594,103612,103623,103626,103641,103651,103653,103674,103691,103711,103717,103757,103773,103789,103795,103798,103822,103838,103843,103873,103890,103915,103918,103933,103942,103957,103966,103981,103988,103990,104000,104013,104020,104023,104062,104069,104071,104123,104125,104131,104134,104141,104148,104151,104153,104171,104174,104177,104211,104223,104225,104228,104250,104253],[12,102627,102623],{"id":102628},"_2xml-与-mjcf-物理建模基础",[16,102630,100616],{"id":100615},[21,102632,102633],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[21,102635,102636],{},"本章结束后，你应该能看懂一个简单模型里：",[29,102638,102639,102642,102645,102648,102651],{},[32,102640,102641],{},"地面在哪里。",[32,102643,102644],{},"物体初始位置在哪里。",[32,102646,102647],{},"几何体是什么形状。",[32,102649,102650],{},"哪些 body 可以自由运动。",[32,102652,102653],{},"如何用名字在 Python 里找到 XML 中的对象。",[225,102655,102656,102666],{},[228,102657,102658],{},[231,102659,102660,102663],{},[234,102661,102662],{"align":23704},"标签",[234,102664,102665],{"align":23704},"作用",[272,102667,102668,102677,102687,102696,102706,102716,102729,102739],{},[231,102669,102670,102674],{},[277,102671,102672],{"align":23704},[73,102673,102506],{},[277,102675,102676],{"align":23704},"根节点",[231,102678,102679,102684],{},[277,102680,102681],{"align":23704},[73,102682,102683],{},"\u003Coption>",[277,102685,102686],{"align":23704},"仿真参数",[231,102688,102689,102693],{},[277,102690,102691],{"align":23704},[73,102692,102514],{},[277,102694,102695],{"align":23704},"世界中的物体",[231,102697,102698,102703],{},[277,102699,102700],{"align":23704},[73,102701,102702],{},"\u003Cbody>",[277,102704,102705],{"align":23704},"刚体",[231,102707,102708,102713],{},[277,102709,102710],{"align":23704},[73,102711,102712],{},"\u003Cgeom>",[277,102714,102715],{"align":23704},"几何体、碰撞体、可视体",[231,102717,102718,102726],{},[277,102719,102720,24947,102723],{"align":23704},[73,102721,102722],{},"\u003Cjoint>",[73,102724,102725],{},"\u003Cfreejoint>",[277,102727,102728],{"align":23704},"关节",[231,102730,102731,102736],{},[277,102732,102733],{"align":23704},[73,102734,102735],{},"\u003Csite>",[277,102737,102738],{"align":23704},"标记点",[231,102740,102741,102746],{},[277,102742,102743],{"align":23704},[73,102744,102745],{},"\u003Cactuator>",[277,102747,102748],{"align":23704},"控制器",[21,102750,102751],{},"初学时可以先记住：",[66,102753,102756],{"className":102754,"code":102755,"language":5154,"meta":71},[5152],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[73,102757,102755],{"__ignoreMap":71},[16,102759,100739],{"id":100738},[21,102761,100742],{},[66,102763,102765],{"className":23790,"code":102764,"language":23792,"meta":71,"style":71},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[73,102766,102767],{"__ignoreMap":71},[76,102768,102769,102771,102773,102775,102777,102779,102781,102783],{"class":78,"line":79},[76,102770,24545],{"class":1927},[76,102772,26284],{"class":192},[76,102774,23802],{"class":192},[76,102776,26369],{"class":136},[76,102778,102470],{"class":192},[76,102780,100783],{"class":192},[76,102782,102475],{"class":192},[76,102784,102785],{"class":192}," glfw-devel\n",[21,102787,102788],{},"pip:",[66,102790,102791],{"className":23790,"code":100888,"language":23792,"meta":71,"style":71},[73,102792,102793],{"__ignoreMap":71},[76,102794,102795,102797,102799,102801],{"class":78,"line":79},[76,102796,23799],{"class":1927},[76,102798,23802],{"class":192},[76,102800,100899],{"class":192},[76,102802,100902],{"class":192},[21,102804,102805],{},"conda:",[66,102807,102809],{"className":23790,"code":102808,"language":23792,"meta":71,"style":71},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[73,102810,102811,102828,102837],{"__ignoreMap":71},[76,102812,102813,102815,102817,102819,102822,102824,102826],{"class":78,"line":79},[76,102814,30299],{"class":1927},[76,102816,29145],{"class":192},[76,102818,25084],{"class":136},[76,102820,102821],{"class":192}," mujoco-xml",[76,102823,100944],{"class":192},[76,102825,100947],{"class":136},[76,102827,100950],{"class":136},[76,102829,102830,102832,102834],{"class":78,"line":96},[76,102831,30299],{"class":1927},[76,102833,100957],{"class":192},[76,102835,102836],{"class":192}," mujoco-xml\n",[76,102838,102839,102841,102843,102845],{"class":78,"line":1143},[76,102840,23799],{"class":1927},[76,102842,23802],{"class":192},[76,102844,100899],{"class":192},[76,102846,100902],{"class":192},[21,102848,100973],{},[29,102850,102851,102854,102859],{},[32,102852,102853],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[32,102855,102856,102857,28354],{},"本章使用基础标签，适用于 ",[73,102858,100996],{},[32,102860,102861],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[16,102863,101014],{"id":101013},[21,102865,102866],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[66,102868,102870],{"className":53036,"code":102869,"language":53038,"meta":71,"style":71},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[73,102871,102872,102886,102894,102899,102907],{"__ignoreMap":71},[76,102873,102874,102876,102878,102880,102882,102884],{"class":78,"line":79},[76,102875,998],{"class":86},[76,102877,100990],{"class":51269},[76,102879,101744],{"class":1927},[76,102881,133],{"class":86},[76,102883,62648],{"class":192},[76,102885,51276],{"class":86},[76,102887,102888,102890,102892],{"class":78,"line":96},[76,102889,52113],{"class":86},[76,102891,101810],{"class":51269},[76,102893,51276],{"class":86},[76,102895,102896],{"class":78,"line":1143},[76,102897,102898],{"class":86},"    ...\n",[76,102900,102901,102903,102905],{"class":78,"line":1158},[76,102902,52386],{"class":86},[76,102904,101810],{"class":51269},[76,102906,51276],{"class":86},[76,102908,102909,102911,102913],{"class":78,"line":1164},[76,102910,51754],{"class":86},[76,102912,100990],{"class":51269},[76,102914,51276],{"class":86},[21,102916,102917,102919,102920,102922,102923,102926],{},[73,102918,51769],{}," 表示刚体。",[73,102921,101089],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[73,102924,102925],{},"joint"," 表示刚体相对父刚体如何运动。",[46,102928,102929],{"id":102929},"层级结构非常重要",[21,102931,102932],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[66,102934,102937],{"className":102935,"code":102936,"language":5154,"meta":71},[5152],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[73,102938,102936],{"__ignoreMap":71},[21,102940,102941,100987,102944,102947,102948,102951],{},[73,102942,102943],{},"red_box_geom",[73,102945,102946],{},"box_center"," 都属于 ",[73,102949,102950],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[66,102953,102955],{"className":53036,"code":102954,"language":53038,"meta":71,"style":71},"\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",[73,102956,102957,102977,102991,103011],{"__ignoreMap":71},[76,102958,102959,102961,102963,102965,102967,102969,102971,102973,102975],{"class":78,"line":79},[76,102960,998],{"class":86},[76,102962,51769],{"class":51269},[76,102964,14887],{"class":1927},[76,102966,133],{"class":86},[76,102968,53460],{"class":192},[76,102970,101075],{"class":1927},[76,102972,133],{"class":86},[76,102974,101080],{"class":192},[76,102976,51276],{"class":86},[76,102978,102979,102981,102983,102985,102987,102989],{"class":78,"line":96},[76,102980,52113],{"class":86},[76,102982,101589],{"class":51269},[76,102984,14887],{"class":1927},[76,102986,133],{"class":86},[76,102988,101930],{"class":192},[76,102990,101113],{"class":86},[76,102992,102993,102995,102997,102999,103001,103003,103005,103007,103009],{"class":78,"line":1143},[76,102994,52113],{"class":86},[76,102996,101089],{"class":51269},[76,102998,53793],{"class":1927},[76,103000,133],{"class":86},[76,103002,53460],{"class":192},[76,103004,101105],{"class":1927},[76,103006,133],{"class":86},[76,103008,101110],{"class":192},[76,103010,101113],{"class":86},[76,103012,103013,103015,103017],{"class":78,"line":1158},[76,103014,51754],{"class":86},[76,103016,51769],{"class":51269},[76,103018,51276],{"class":86},[21,103020,103021],{},"含义:",[29,103023,103024,103030,103035,103038],{},[32,103025,103026,103027,103029],{},"创建名为 ",[73,103028,53683],{}," 的刚体",[32,103031,103032,103033],{},"初始位置在世界坐标 ",[73,103034,101138],{},[32,103036,103037],{},"它有一个自由关节",[32,103039,103040],{},"它有一个盒子几何体",[46,103042,103043],{"id":103043},"坐标怎么理解",[21,103045,103046],{},"MuJoCo 默认使用三维坐标：",[66,103048,103051],{"className":103049,"code":103050,"language":5154,"meta":71},[5152],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[73,103052,103050],{"__ignoreMap":71},[21,103054,14600],{},[66,103056,103058],{"className":53036,"code":103057,"language":53038,"meta":71,"style":71},"pos=\"0 0 1\"\n",[73,103059,103060],{"__ignoreMap":71},[76,103061,103062],{"class":78,"line":79},[76,103063,103057],{"class":86},[21,103065,103066],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[46,103068,103070],{"id":103069},"geom-的-size-怎么理解","geom 的 size 怎么理解",[21,103072,103073,103074,82499,103077,103079],{},"不同 ",[73,103075,103076],{},"type",[73,103078,31465],{}," 含义不同：",[225,103081,103082,103097],{},[228,103083,103084],{},[231,103085,103086,103090,103095],{},[234,103087,103088],{"align":23704},[73,103089,103076],{},[234,103091,103092,103094],{"align":23704},[73,103093,31465],{}," 示例",[234,103096,100669],{"align":23704},[272,103098,103099,103113,103128,103147],{},[231,103100,103101,103105,103110],{},[277,103102,103103],{"align":23704},[73,103104,53683],{},[277,103106,103107],{"align":23704},[73,103108,103109],{},"size=\"0.1 0.2 0.3\"",[277,103111,103112],{"align":23704},"x\u002Fy\u002Fz 半边长，不是完整长度",[231,103114,103115,103120,103125],{},[277,103116,103117],{"align":23704},[73,103118,103119],{},"sphere",[277,103121,103122],{"align":23704},[73,103123,103124],{},"size=\"0.1\"",[277,103126,103127],{"align":23704},"球半径",[231,103129,103130,103135,103140],{},[277,103131,103132],{"align":23704},[73,103133,103134],{},"capsule",[277,103136,103137],{"align":23704},[73,103138,103139],{},"size=\"0.03\"",[277,103141,103142,103143,103146],{"align":23704},"胶囊半径，长度常用 ",[73,103144,103145],{},"fromto"," 指定",[231,103148,103149,103154,103159],{},[277,103150,103151],{"align":23704},[73,103152,103153],{},"plane",[277,103155,103156],{"align":23704},[73,103157,103158],{},"size=\"3 3 0.1\"",[277,103160,103161],{"align":23704},"可视平面大小，通常当地面",[21,103163,103164,103165,103167,103168,103170],{},"最容易踩坑的是 box：",[73,103166,101993],{}," 表示边长大约是 ",[73,103169,32006],{},"，因为 MuJoCo 用的是半边长。",[46,103172,103174],{"id":103173},"site-是什么","site 是什么",[21,103176,103177,103180],{},[73,103178,103179],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[29,103182,103183,103186,103189,103192],{},[32,103184,103185],{},"标记机械臂末端。",[32,103187,103188],{},"标记目标位置。",[32,103190,103191],{},"放传感器或相机参考点。",[32,103193,103194],{},"在 Python 中读取某个关键点的世界坐标。",[21,103196,103197,103198,100987,103201,103204],{},"在后面的 Reacher 任务中，",[73,103199,103200],{},"tip",[73,103202,103203],{},"target"," 就会用 site 表示。",[16,103206,101222],{"id":101221},[66,103208,103210],{"className":30347,"code":103209,"language":30349,"meta":71,"style":71},"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",[73,103211,103212,103218,103228,103232,103236,103244,103249,103253,103257,103261,103266,103270,103275,103280,103285,103290,103294,103298,103302,103306,103310,103314,103326,103338,103346,103350,103365,103380,103384,103397,103412,103425,103438,103442,103458,103462,103466,103477,103489,103501,103513,103517,103521,103533],{"__ignoreMap":71},[76,103213,103214,103216],{"class":78,"line":79},[76,103215,30361],{"class":82},[76,103217,101270],{"class":86},[76,103219,103220,103222,103224,103226],{"class":78,"line":96},[76,103221,30361],{"class":82},[76,103223,31349],{"class":86},[76,103225,31352],{"class":82},[76,103227,31355],{"class":86},[76,103229,103230],{"class":78,"line":1143},[76,103231,2365],{"emptyLinePlaceholder":2364},[76,103233,103234],{"class":78,"line":1158},[76,103235,2365],{"emptyLinePlaceholder":2364},[76,103237,103238,103240,103242],{"class":78,"line":1164},[76,103239,101283],{"class":136},[76,103241,13531],{"class":82},[76,103243,101288],{"class":192},[76,103245,103246],{"class":78,"line":1178},[76,103247,103248],{"class":192},"\u003Cmujoco model=\"xml_basic\">\n",[76,103250,103251],{"class":78,"line":1184},[76,103252,101298],{"class":192},[76,103254,103255],{"class":78,"line":1275},[76,103256,2365],{"emptyLinePlaceholder":2364},[76,103258,103259],{"class":78,"line":1281},[76,103260,101307],{"class":192},[76,103262,103263],{"class":78,"line":1293},[76,103264,103265],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[76,103267,103268],{"class":78,"line":1576},[76,103269,2365],{"emptyLinePlaceholder":2364},[76,103271,103272],{"class":78,"line":1581},[76,103273,103274],{"class":192},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[76,103276,103277],{"class":78,"line":1587},[76,103278,103279],{"class":192},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[76,103281,103282],{"class":78,"line":1592},[76,103283,103284],{"class":192},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,103286,103287],{"class":78,"line":1606},[76,103288,103289],{"class":192},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[76,103291,103292],{"class":78,"line":1611},[76,103293,101336],{"class":192},[76,103295,103296],{"class":78,"line":1617},[76,103297,101341],{"class":192},[76,103299,103300],{"class":78,"line":1638},[76,103301,101346],{"class":192},[76,103303,103304],{"class":78,"line":1643},[76,103305,95667],{"class":192},[76,103307,103308],{"class":78,"line":1657},[76,103309,2365],{"emptyLinePlaceholder":2364},[76,103311,103312],{"class":78,"line":1662},[76,103313,2365],{"emptyLinePlaceholder":2364},[76,103315,103316,103318,103320,103322,103324],{"class":78,"line":1691},[76,103317,31916],{"class":82},[76,103319,1937],{"class":1927},[76,103321,101367],{"class":86},[76,103323,95655],{"class":136},[76,103325,3704],{"class":86},[76,103327,103328,103330,103332,103334,103336],{"class":78,"line":1696},[76,103329,101376],{"class":86},[76,103331,133],{"class":82},[76,103333,101381],{"class":86},[76,103335,101283],{"class":136},[76,103337,93],{"class":86},[76,103339,103340,103342,103344],{"class":78,"line":1713},[76,103341,101390],{"class":86},[76,103343,133],{"class":82},[76,103345,101395],{"class":86},[76,103347,103348],{"class":78,"line":1718},[76,103349,2365],{"emptyLinePlaceholder":2364},[76,103351,103352,103355,103357,103360,103363],{"class":78,"line":1723},[76,103353,103354],{"class":86},"    box_body_id ",[76,103356,133],{"class":82},[76,103358,103359],{"class":86}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[76,103361,103362],{"class":192},"\"red_box\"",[76,103364,93],{"class":86},[76,103366,103367,103370,103372,103375,103378],{"class":78,"line":1728},[76,103368,103369],{"class":86},"    site_id ",[76,103371,133],{"class":82},[76,103373,103374],{"class":86}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[76,103376,103377],{"class":192},"\"box_center\"",[76,103379,93],{"class":86},[76,103381,103382],{"class":78,"line":1742},[76,103383,2365],{"emptyLinePlaceholder":2364},[76,103385,103386,103388,103391,103393,103395],{"class":78,"line":1747},[76,103387,3066],{"class":82},[76,103389,103390],{"class":86}," box_body_id ",[76,103392,998],{"class":82},[76,103394,4058],{"class":136},[76,103396,3704],{"class":86},[76,103398,103399,103402,103405,103407,103410],{"class":78,"line":2542},[76,103400,103401],{"class":82},"        raise",[76,103403,103404],{"class":136}," RuntimeError",[76,103406,87],{"class":86},[76,103408,103409],{"class":192},"\"body red_box not found\"",[76,103411,93],{"class":86},[76,103413,103414,103416,103419,103421,103423],{"class":78,"line":2556},[76,103415,3066],{"class":82},[76,103417,103418],{"class":86}," site_id ",[76,103420,998],{"class":82},[76,103422,4058],{"class":136},[76,103424,3704],{"class":86},[76,103426,103427,103429,103431,103433,103436],{"class":78,"line":2564},[76,103428,103401],{"class":82},[76,103430,103404],{"class":136},[76,103432,87],{"class":86},[76,103434,103435],{"class":192},"\"site box_center not found\"",[76,103437,93],{"class":86},[76,103439,103440],{"class":78,"line":2569},[76,103441,2365],{"emptyLinePlaceholder":2364},[76,103443,103444,103446,103448,103450,103452,103454,103456],{"class":78,"line":2575},[76,103445,3166],{"class":82},[76,103447,101470],{"class":86},[76,103449,26012],{"class":82},[76,103451,32412],{"class":136},[76,103453,87],{"class":86},[76,103455,1686],{"class":136},[76,103457,30755],{"class":86},[76,103459,103460],{"class":78,"line":2581},[76,103461,101485],{"class":86},[76,103463,103464],{"class":78,"line":2586},[76,103465,2365],{"emptyLinePlaceholder":2364},[76,103467,103468,103470,103472,103475],{"class":78,"line":7915},[76,103469,31268],{"class":136},[76,103471,87],{"class":86},[76,103473,103474],{"class":192},"\"simulation time:\"",[76,103476,101447],{"class":86},[76,103478,103479,103481,103483,103486],{"class":78,"line":7939},[76,103480,31268],{"class":136},[76,103482,87],{"class":86},[76,103484,103485],{"class":192},"\"box body position:\"",[76,103487,103488],{"class":86},", data.xpos[box_body_id].copy())\n",[76,103490,103491,103493,103495,103498],{"class":78,"line":7944},[76,103492,31268],{"class":136},[76,103494,87],{"class":86},[76,103496,103497],{"class":192},"\"site position:\"",[76,103499,103500],{"class":86},", data.site_xpos[site_id].copy())\n",[76,103502,103503,103505,103507,103510],{"class":78,"line":7950},[76,103504,31268],{"class":136},[76,103506,87],{"class":86},[76,103508,103509],{"class":192},"\"box qpos:\"",[76,103511,103512],{"class":86},", np.array(data.qpos))\n",[76,103514,103515],{"class":78,"line":7977},[76,103516,2365],{"emptyLinePlaceholder":2364},[76,103518,103519],{"class":78,"line":7982},[76,103520,2365],{"emptyLinePlaceholder":2364},[76,103522,103523,103525,103527,103529,103531],{"class":78,"line":7988},[76,103524,1495],{"class":82},[76,103526,31189],{"class":136},[76,103528,101528],{"class":82},[76,103530,101531],{"class":192},[76,103532,3704],{"class":86},[76,103534,103535],{"class":78,"line":8000},[76,103536,101538],{"class":86},[21,103538,103539],{},"保存为：",[66,103541,103543],{"className":23790,"code":103542,"language":23792,"meta":71,"style":71},"touch ch2_xml_basic.py\n",[73,103544,103545],{"__ignoreMap":71},[76,103546,103547,103549],{"class":78,"line":79},[76,103548,101252],{"class":1927},[76,103550,103551],{"class":192}," ch2_xml_basic.py\n",[21,103553,102270],{},[66,103555,103557],{"className":23790,"code":103556,"language":23792,"meta":71,"style":71},"python ch2_xml_basic.py\n",[73,103558,103559],{"__ignoreMap":71},[76,103560,103561,103563],{"class":78,"line":79},[76,103562,30349],{"class":1927},[76,103564,103551],{"class":192},[46,103566,101541],{"id":101541},[21,103568,103569],{},"用名字查找 body：",[66,103571,103573],{"className":30347,"code":103572,"language":30349,"meta":71,"style":71},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[73,103574,103575],{"__ignoreMap":71},[76,103576,103577,103580,103582,103584,103586],{"class":78,"line":79},[76,103578,103579],{"class":86},"box_body_id ",[76,103581,133],{"class":82},[76,103583,103359],{"class":86},[76,103585,103362],{"class":192},[76,103587,93],{"class":86},[21,103589,103590],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[21,103592,103593],{},"用名字查找 site：",[66,103595,103597],{"className":30347,"code":103596,"language":30349,"meta":71,"style":71},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[73,103598,103599],{"__ignoreMap":71},[76,103600,103601,103604,103606,103608,103610],{"class":78,"line":79},[76,103602,103603],{"class":86},"site_id ",[76,103605,133],{"class":82},[76,103607,103374],{"class":86},[76,103609,103377],{"class":192},[76,103611,93],{"class":86},[21,103613,103614,103615,103618,103619,103622],{},"注意第二个参数是对象类型。查 body 就用 ",[73,103616,103617],{},"mjOBJ_BODY","，查 site 就用 ",[73,103620,103621],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[21,103624,103625],{},"读取世界坐标：",[66,103627,103629],{"className":30347,"code":103628,"language":30349,"meta":71,"style":71},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[73,103630,103631,103636],{"__ignoreMap":71},[76,103632,103633],{"class":78,"line":79},[76,103634,103635],{"class":86},"data.xpos[box_body_id]\n",[76,103637,103638],{"class":78,"line":96},[76,103639,103640],{"class":86},"data.site_xpos[site_id]\n",[21,103642,103643,103646,103647,103650],{},[73,103644,103645],{},"xpos"," 是 body 的世界坐标，",[73,103648,103649],{},"site_xpos"," 是 site 的世界坐标。",[46,103652,101677],{"id":101677},[66,103654,103656],{"className":30347,"code":103655,"language":30349,"meta":71,"style":71},"import mujoco\nimport numpy as np\n",[73,103657,103658,103664],{"__ignoreMap":71},[76,103659,103660,103662],{"class":78,"line":79},[76,103661,30361],{"class":82},[76,103663,101270],{"class":86},[76,103665,103666,103668,103670,103672],{"class":78,"line":96},[76,103667,30361],{"class":82},[76,103669,31349],{"class":86},[76,103671,31352],{"class":82},[76,103673,31355],{"class":86},[21,103675,103676,103677,103680,103681,103684,103685,300,103688,28354],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[73,103678,103679],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[73,103682,103683],{},"as np"," 是习惯写法，后面就可以写 ",[73,103686,103687],{},"np.array(...)",[73,103689,103690],{},"np.round(...)",[66,103692,103693],{"className":30347,"code":101564,"language":30349,"meta":71,"style":71},[73,103694,103695,103703,103707],{"__ignoreMap":71},[76,103696,103697,103699,103701],{"class":78,"line":79},[76,103698,101283],{"class":136},[76,103700,13531],{"class":82},[76,103702,101288],{"class":192},[76,103704,103705],{"class":78,"line":96},[76,103706,101579],{"class":192},[76,103708,103709],{"class":78,"line":1143},[76,103710,95667],{"class":192},[21,103712,103713,103714,28354],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[73,103715,103716],{},"mujoco.MjModel.from_xml_string(XML)",[66,103718,103720],{"className":53036,"code":103719,"language":53038,"meta":71,"style":71},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[73,103721,103722],{"__ignoreMap":71},[76,103723,103724,103726,103728,103730,103732,103734,103736,103738,103741,103743,103745,103748,103750,103752,103755],{"class":78,"line":79},[76,103725,998],{"class":86},[76,103727,103179],{"class":51269},[76,103729,14887],{"class":1927},[76,103731,133],{"class":86},[76,103733,103377],{"class":192},[76,103735,101075],{"class":1927},[76,103737,133],{"class":86},[76,103739,103740],{"class":192},"\"0 0 0\"",[76,103742,101105],{"class":1927},[76,103744,133],{"class":86},[76,103746,103747],{"class":192},"\"0.03\"",[76,103749,78736],{"class":1927},[76,103751,133],{"class":86},[76,103753,103754],{"class":192},"\"0 1 0 1\"",[76,103756,101113],{"class":86},[21,103758,103759,103761,103762,103765,103766,103768,103769,103772],{},[73,103760,103179],{}," 是标记点。",[73,103763,103764],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[73,103767,103139],{}," 表示显示出来的小球大小。",[73,103770,103771],{},"rgba=\"0 1 0 1\""," 表示绿色。",[66,103774,103775],{"className":30347,"code":103572,"language":30349,"meta":71,"style":71},[73,103776,103777],{"__ignoreMap":71},[76,103778,103779,103781,103783,103785,103787],{"class":78,"line":79},[76,103780,103579],{"class":86},[76,103782,133],{"class":82},[76,103784,103359],{"class":86},[76,103786,103362],{"class":192},[76,103788,93],{"class":86},[21,103790,103791,103792,103794],{},"这行的作用是：根据名字 ",[73,103793,103362],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[21,103796,103797],{},"拆开看：",[29,103799,103800,103806,103811,103817],{},[32,103801,103802,103805],{},[73,103803,103804],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[32,103807,103808,103810],{},[73,103809,102054],{}," 是被查询的模型。",[32,103812,103813,103816],{},[73,103814,103815],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[32,103818,103819,103821],{},[73,103820,103362],{}," 是 XML 里写的名字。",[66,103823,103824],{"className":30347,"code":103596,"language":30349,"meta":71,"style":71},[73,103825,103826],{"__ignoreMap":71},[76,103827,103828,103830,103832,103834,103836],{"class":78,"line":79},[76,103829,103603],{"class":86},[76,103831,133],{"class":82},[76,103833,103374],{"class":86},[76,103835,103377],{"class":192},[76,103837,93],{"class":86},[21,103839,103840,103841,28354],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[73,103842,103377],{},[66,103844,103846],{"className":30347,"code":103845,"language":30349,"meta":71,"style":71},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[73,103847,103848,103860],{"__ignoreMap":71},[76,103849,103850,103852,103854,103856,103858],{"class":78,"line":79},[76,103851,1495],{"class":82},[76,103853,103390],{"class":86},[76,103855,998],{"class":82},[76,103857,4058],{"class":136},[76,103859,3704],{"class":86},[76,103861,103862,103865,103867,103869,103871],{"class":78,"line":96},[76,103863,103864],{"class":82},"    raise",[76,103866,103404],{"class":136},[76,103868,87],{"class":86},[76,103870,103409],{"class":192},[76,103872,93],{"class":86},[21,103874,103875,103877,103878,103881,103882,103885,103886,103889],{},[73,103876,1495],{}," 是条件判断。",[73,103879,103880],{},"mj_name2id"," 找不到对象时会返回 ",[73,103883,103884],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[73,103887,103888],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[66,103891,103893],{"className":30347,"code":103892,"language":30349,"meta":71,"style":71},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[73,103894,103895,103911],{"__ignoreMap":71},[76,103896,103897,103899,103901,103903,103905,103907,103909],{"class":78,"line":79},[76,103898,2990],{"class":82},[76,103900,101470],{"class":86},[76,103902,26012],{"class":82},[76,103904,32412],{"class":136},[76,103906,87],{"class":86},[76,103908,1686],{"class":136},[76,103910,30755],{"class":86},[76,103912,103913],{"class":78,"line":96},[76,103914,101668],{"class":86},[21,103916,103917],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[66,103919,103921],{"className":30347,"code":103920,"language":30349,"meta":71,"style":71},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[73,103922,103923],{"__ignoreMap":71},[76,103924,103925,103927,103929,103931],{"class":78,"line":79},[76,103926,30384],{"class":136},[76,103928,87],{"class":86},[76,103930,103485],{"class":192},[76,103932,103488],{"class":86},[21,103934,103935,103937,103938,103941],{},[73,103936,101048],{}," 保存所有 body 的世界坐标。",[73,103939,103940],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[66,103943,103945],{"className":30347,"code":103944,"language":30349,"meta":71,"style":71},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[73,103946,103947],{"__ignoreMap":71},[76,103948,103949,103951,103953,103955],{"class":78,"line":79},[76,103950,30384],{"class":136},[76,103952,87],{"class":86},[76,103954,103497],{"class":192},[76,103956,103500],{"class":86},[21,103958,103959,103962,103963,103965],{},[73,103960,103961],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[73,103964,102946],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[66,103967,103969],{"className":30347,"code":103968,"language":30349,"meta":71,"style":71},"print(\"box qpos:\", np.array(data.qpos))\n",[73,103970,103971],{"__ignoreMap":71},[76,103972,103973,103975,103977,103979],{"class":78,"line":79},[76,103974,30384],{"class":136},[76,103976,87],{"class":86},[76,103978,103509],{"class":192},[76,103980,103512],{"class":86},[21,103982,103983,103984,103987],{},"这里打印广义位置数组。",[73,103985,103986],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[16,103989,102285],{"id":102284},[21,103991,103992,103993,103996,103997,28354],{},"程序会输出 ",[73,103994,103995],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[73,103998,103999],{},"qpos",[21,104001,104002,104004,104005,104008,104009,104012],{},[73,104003,103940],{}," 是 body 的世界坐标位置。",[73,104006,104007],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[73,104010,104011],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[21,104014,82191,104015,82499,104017,104019],{},[73,104016,102946],{},[73,104018,103764],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[21,104021,104022],{},"如果你把 site 改成：",[66,104024,104026],{"className":53036,"code":104025,"language":53038,"meta":71,"style":71},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[73,104027,104028],{"__ignoreMap":71},[76,104029,104030,104032,104034,104036,104038,104041,104043,104045,104048,104050,104052,104054,104056,104058,104060],{"class":78,"line":79},[76,104031,998],{"class":86},[76,104033,103179],{"class":51269},[76,104035,14887],{"class":1927},[76,104037,133],{"class":86},[76,104039,104040],{"class":192},"\"box_top\"",[76,104042,101075],{"class":1927},[76,104044,133],{"class":86},[76,104046,104047],{"class":192},"\"0 0 0.15\"",[76,104049,101105],{"class":1927},[76,104051,133],{"class":86},[76,104053,103747],{"class":192},[76,104055,78736],{"class":1927},[76,104057,133],{"class":86},[76,104059,103754],{"class":192},[76,104061,101113],{"class":86},[21,104063,104064,104065,104068],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[73,104066,104067],{},"site position"," 就会比 body position 的 z 坐标更高。",[16,104070,102317],{"id":102316},[29,104072,104073,104082,104085,104092,104098,104109],{},[32,104074,102380,104075,104077,104078,102383,104080,28354],{},[73,104076,102950],{}," 的初始高度从 ",[73,104079,305],{},[73,104081,165],{},[32,104083,104084],{},"重新运行程序。",[32,104086,104087,104088,104091],{},"观察 ",[73,104089,104090],{},"box qpos"," 和最终位置是否变化。",[32,104093,104094,104095,104097],{},"故意把 ",[73,104096,103179],{}," 名称改错，确认程序能报错。",[32,104099,102380,104100,104102,104103,102383,104105,104108],{},[73,104101,101089],{}," 的颜色 ",[73,104104,102001],{},[73,104106,104107],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[32,104110,102380,104111,82499,104113,102383,104116,104119,104120,104122],{},[73,104112,102946],{},[73,104114,104115],{},"pos",[73,104117,104118],{},"0 0 0.2","，观察 ",[73,104121,104067],{}," 如何变化。",[16,104124,102422],{"id":102421},[46,104126,104128],{"id":104127},"xml-error-schema-violation",[73,104129,104130],{},"XML Error: Schema violation",[21,104132,104133],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[46,104135,104137,81259,104139],{"id":104136},"mj_name2id-返回-1",[73,104138,103880],{},[73,104140,103884],{},[21,104142,104143,104144,104147],{},"说明名字没有找到。检查 XML 中 ",[73,104145,104146],{},"name=\"...\"","，并确认对象类型正确。",[46,104149,104150],{"id":104150},"物体不下落",[21,104152,102492],{},[29,104154,104155,104160,104165],{},[32,104156,104157,104158],{},"body 是否有 ",[73,104159,101589],{},[32,104161,104162,104163],{},"gravity 是否为 ",[73,104164,102558],{},[32,104166,104167,104168,104170],{},"body 是否被固定在 ",[73,104169,101810],{}," 中",[46,104172,104173],{"id":104173},"坐标看起来不符合预期",[21,104175,104176],{},"先区分两种坐标：",[225,104178,104179,104188],{},[228,104180,104181],{},[231,104182,104183,104186],{},[234,104184,104185],{"align":23704},"坐标",[234,104187,100669],{"align":23704},[272,104189,104190,104200],{},[231,104191,104192,104197],{},[277,104193,104194,104195],{"align":23704},"XML 里的 ",[73,104196,104115],{},[277,104198,104199],{"align":23704},"相对父 body 的局部坐标",[231,104201,104202,104208],{},[277,104203,104204,24947,104206],{"align":23704},[73,104205,101048],{},[73,104207,103961],{},[277,104209,104210],{"align":23704},"仿真更新后的世界坐标",[21,104212,104213,104214,104216,104217,82508,104220,104222],{},"如果你修改了 ",[73,104215,101039],{},"，但还没调用 ",[73,104218,104219],{},"mj_forward",[73,104221,101184],{},"，世界坐标可能还没有更新。",[16,104224,102576],{"id":102575},[21,104226,104227],{},"MJCF 建模先掌握四件事：",[29,104229,104230,104235,104240,104245],{},[32,104231,104232,104234],{},[73,104233,51769],{}," 表示刚体层级。",[32,104236,104237,104239],{},[73,104238,101089],{}," 表示形状、碰撞和质量。",[32,104241,104242,104244],{},[73,104243,102925],{}," 决定 body 能不能动、怎么动。",[32,104246,104247,104249],{},[73,104248,103179],{}," 用来标记关键点，方便 Python 读取位置。",[21,104251,104252],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5092,104254,104255],{},"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":71,"searchDepth":96,"depth":96,"links":104257},[104258,104259,104260,104266,104270,104271,104272,104279],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":104261},[104262,104263,104264,104265],{"id":102929,"depth":1143,"text":102929},{"id":103043,"depth":1143,"text":103043},{"id":103069,"depth":1143,"text":103070},{"id":103173,"depth":1143,"text":103174},{"id":101221,"depth":96,"text":101222,"children":104267},[104268,104269],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":104273},[104274,104275,104277,104278],{"id":104127,"depth":1143,"text":104130},{"id":104136,"depth":1143,"text":104276},"mj_name2id 返回 -1",{"id":104150,"depth":1143,"text":104150},{"id":104173,"depth":1143,"text":104173},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102623,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104286,"title":104287,"body":104288,"description":71,"extension":5123,"meta":105783,"navigation":2364,"path":105784,"seo":105785,"stem":105786,"__hash__":105787},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":9,"value":104289,"toc":105755},[104290,104293,104295,104298,104301,104339,104342,104348,104351,104353,104355,104382,104384,104398,104400,104441,104443,104467,104469,104472,104481,104490,104493,104502,104510,104519,104522,104532,104535,104587,104594,104600,104608,104656,104659,104678,104681,104689,104693,104702,104735,104737,105085,105087,105099,105101,105112,105114,105117,105138,105144,105147,105172,105182,105185,105193,105196,105199,105220,105231,105233,105253,105256,105277,105286,105305,105311,105336,105339,105353,105360,105384,105387,105395,105404,105420,105432,105440,105449,105451,105454,105478,105483,105486,105508,105510,105549,105551,105558,105560,105568,105571,105574,105586,105627,105634,105645,105652,105655,105704,105707,105710,105716,105718,105723,105749,105752],[12,104291,104287],{"id":104292},"_3python-控制接口读取状态与推进仿真",[16,104294,100616],{"id":100615},[21,104296,104297],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[21,104299,104300],{},"你将学习:",[29,104302,104303,104308,104313,104317,104322,104333],{},[32,104304,104305],{},[73,104306,104307],{},"MjModel.from_xml_string",[32,104309,104310],{},[73,104311,104312],{},"MjData(model)",[32,104314,104315],{},[73,104316,101184],{},[32,104318,104319],{},[73,104320,104321],{},"mj_resetData",[32,104323,104324,104325,300,104327,300,104330],{},"读取 ",[73,104326,103999],{},[73,104328,104329],{},"qvel",[73,104331,104332],{},"ctrl",[32,104334,104335,104336],{},"使用 ",[73,104337,104338],{},"model.opt.timestep",[21,104340,104341],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[66,104343,104346],{"className":104344,"code":104345,"language":5154,"meta":71},[5152],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[73,104347,104345],{"__ignoreMap":71},[21,104349,104350],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[16,104352,100739],{"id":100738},[21,104354,100742],{},[66,104356,104358],{"className":23790,"code":104357,"language":23792,"meta":71,"style":71},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[73,104359,104360],{"__ignoreMap":71},[76,104361,104362,104364,104366,104368,104370,104373,104375,104377,104379],{"class":78,"line":79},[76,104363,24545],{"class":1927},[76,104365,26284],{"class":192},[76,104367,23802],{"class":192},[76,104369,26369],{"class":136},[76,104371,104372],{"class":192}," python3",[76,104374,100767],{"class":192},[76,104376,102470],{"class":192},[76,104378,100783],{"class":192},[76,104380,104381],{"class":192}," glfw\n",[21,104383,102788],{},[66,104385,104386],{"className":23790,"code":100888,"language":23792,"meta":71,"style":71},[73,104387,104388],{"__ignoreMap":71},[76,104389,104390,104392,104394,104396],{"class":78,"line":79},[76,104391,23799],{"class":1927},[76,104393,23802],{"class":192},[76,104395,100899],{"class":192},[76,104397,100902],{"class":192},[21,104399,102805],{},[66,104401,104403],{"className":23790,"code":104402,"language":23792,"meta":71,"style":71},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[73,104404,104405,104422,104431],{"__ignoreMap":71},[76,104406,104407,104409,104411,104413,104416,104418,104420],{"class":78,"line":79},[76,104408,30299],{"class":1927},[76,104410,29145],{"class":192},[76,104412,25084],{"class":136},[76,104414,104415],{"class":192}," mujoco-python-api",[76,104417,100944],{"class":192},[76,104419,100947],{"class":136},[76,104421,100950],{"class":136},[76,104423,104424,104426,104428],{"class":78,"line":96},[76,104425,30299],{"class":1927},[76,104427,100957],{"class":192},[76,104429,104430],{"class":192}," mujoco-python-api\n",[76,104432,104433,104435,104437,104439],{"class":78,"line":1143},[76,104434,23799],{"class":1927},[76,104436,23802],{"class":192},[76,104438,100899],{"class":192},[76,104440,100902],{"class":192},[21,104442,100973],{},[29,104444,104445,104452,104461],{},[32,104446,104447,100987,104449,104451],{},[73,104448,100644],{},[73,104450,100649],{}," 是官方 Python bindings 的类名。",[32,104453,104454,104455,104458,104459,28354],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[73,104456,104457],{},"mjModel"," 在 Python 中是 ",[73,104460,100678],{},[32,104462,104463,104464,28354],{},"不要使用 ",[73,104465,104466],{},"sim = mujoco_py.MjSim(...)",[16,104468,101014],{"id":101013},[21,104470,104471],{},"仿真推进核心代码:",[66,104473,104475],{"className":30347,"code":104474,"language":30349,"meta":71,"style":71},"mujoco.mj_step(model, data)\n",[73,104476,104477],{"__ignoreMap":71},[76,104478,104479],{"class":78,"line":79},[76,104480,104474],{"class":86},[21,104482,104483,104484,300,104486,300,104488,28354],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[73,104485,101039],{},[73,104487,101042],{},[73,104489,101036],{},[21,104491,104492],{},"重置仿真:",[66,104494,104496],{"className":30347,"code":104495,"language":30349,"meta":71,"style":71},"mujoco.mj_resetData(model, data)\n",[73,104497,104498],{"__ignoreMap":71},[76,104499,104500],{"class":78,"line":79},[76,104501,104495],{"class":86},[21,104503,104504,104505,82508,104507,104509],{},"如果手动修改了 ",[73,104506,101039],{},[73,104508,101042],{},"，通常应调用:",[66,104511,104513],{"className":30347,"code":104512,"language":30349,"meta":71,"style":71},"mujoco.mj_forward(model, data)\n",[73,104514,104515],{"__ignoreMap":71},[76,104516,104517],{"class":78,"line":79},[76,104518,104512],{"class":86},[21,104520,104521],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[46,104523,104525,300,104527,300,104529,104531],{"id":104524},"qposqvelctrl-是什么",[73,104526,103999],{},[73,104528,104329],{},[73,104530,104332],{}," 是什么",[21,104533,104534],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[225,104536,104537,104549],{},[228,104538,104539],{},[231,104540,104541,104544,104546],{},[234,104542,104543],{"align":23704},"字段",[234,104545,100669],{"align":23704},[234,104547,104548],{"align":23704},"谁来修改",[272,104550,104551,104563,104575],{},[231,104552,104553,104557,104560],{},[277,104554,104555],{"align":23704},[73,104556,101039],{},[277,104558,104559],{"align":23704},"广义位置，例如小车位置、关节角、自由物体位置姿态",[277,104561,104562],{"align":23704},"MuJoCo 更新，也可以手动设置初始状态",[231,104564,104565,104569,104572],{},[277,104566,104567],{"align":23704},[73,104568,101042],{},[277,104570,104571],{"align":23704},"广义速度，例如小车速度、关节角速度",[277,104573,104574],{"align":23704},"MuJoCo 更新，也可以手动清零",[231,104576,104577,104581,104584],{},[277,104578,104579],{"align":23704},[73,104580,101045],{},[277,104582,104583],{"align":23704},"actuator 的控制输入",[277,104585,104586],{"align":23704},"主要由你的控制代码写入",[21,104588,8992,104589,100987,104591,104593],{},[73,104590,103999],{},[73,104592,104329],{}," 不一定同维。自由刚体就是典型例子：",[66,104595,104598],{"className":104596,"code":104597,"language":5154,"meta":71},[5152],"freejoint: qpos 7 维，qvel 6 维\n",[73,104599,104597],{"__ignoreMap":71},[46,104601,104603,100987,104605,104607],{"id":104602},"mj_step-和-mj_forward-的区别",[73,104604,101184],{},[73,104606,104219],{}," 的区别",[225,104609,104610,104623],{},[228,104611,104612],{},[231,104613,104614,104617,104620],{},[234,104615,104616],{"align":23704},"函数",[234,104618,104619],{"align":23704},"是否推进时间",[234,104621,104622],{"align":23704},"什么时候用",[272,104624,104625,104638],{},[231,104626,104627,104632,104635],{},[277,104628,104629],{"align":23704},[73,104630,104631],{},"mj_step(model, data)",[277,104633,104634],{"align":23704},"是",[277,104636,104637],{"align":23704},"正常仿真循环，每调用一次前进一步",[231,104639,104640,104645,104648],{},[277,104641,104642],{"align":23704},[73,104643,104644],{},"mj_forward(model, data)",[277,104646,104647],{"align":23704},"否",[277,104649,104650,104651,300,104653,104655],{"align":23704},"手动改了 ",[73,104652,103999],{},[73,104654,104329],{}," 后，刷新派生量",[21,104657,104658],{},"例如你写：",[66,104660,104662],{"className":30347,"code":104661,"language":30349,"meta":71,"style":71},"data.qpos[2] = 2.0\n",[73,104663,104664],{"__ignoreMap":71},[76,104665,104666,104669,104671,104673,104675],{"class":78,"line":79},[76,104667,104668],{"class":86},"data.qpos[",[76,104670,165],{"class":136},[76,104672,4408],{"class":86},[76,104674,133],{"class":82},[76,104676,104677],{"class":136}," 2.0\n",[21,104679,104680],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[66,104682,104683],{"className":30347,"code":104512,"language":30349,"meta":71,"style":71},[73,104684,104685],{"__ignoreMap":71},[76,104686,104687],{"class":78,"line":79},[76,104688,104512],{"class":86},[46,104690,104692],{"id":104691},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[21,104694,104695,104698,104699,104701],{},[73,104696,104697],{},"mujoco.mj_resetData(model, data)"," 会把 ",[73,104700,33370],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[66,104703,104705],{"className":30347,"code":104704,"language":30349,"meta":71,"style":71},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[73,104706,104707,104711,104721,104731],{"__ignoreMap":71},[76,104708,104709],{"class":78,"line":79},[76,104710,104495],{"class":86},[76,104712,104713,104716,104718],{"class":78,"line":96},[76,104714,104715],{"class":86},"data.qpos[:] ",[76,104717,133],{"class":82},[76,104719,104720],{"class":86}," random_qpos\n",[76,104722,104723,104726,104728],{"class":78,"line":1143},[76,104724,104725],{"class":86},"data.qvel[:] ",[76,104727,133],{"class":82},[76,104729,104730],{"class":136}," 0.0\n",[76,104732,104733],{"class":78,"line":1158},[76,104734,104512],{"class":86},[16,104736,101222],{"id":101221},[66,104738,104740],{"className":30347,"code":104739,"language":30349,"meta":71,"style":71},"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",[73,104741,104742,104748,104758,104762,104766,104774,104779,104783,104787,104791,104796,104800,104805,104810,104815,104819,104823,104827,104831,104835,104839,104858,104865,104877,104888,104904,104920,104924,104928,104940,104952,104960,104964,104975,104979,104995,104999,105003,105012,105016,105021,105030,105034,105047,105052,105061,105065,105069,105081],{"__ignoreMap":71},[76,104743,104744,104746],{"class":78,"line":79},[76,104745,30361],{"class":82},[76,104747,101270],{"class":86},[76,104749,104750,104752,104754,104756],{"class":78,"line":96},[76,104751,30361],{"class":82},[76,104753,31349],{"class":86},[76,104755,31352],{"class":82},[76,104757,31355],{"class":86},[76,104759,104760],{"class":78,"line":1143},[76,104761,2365],{"emptyLinePlaceholder":2364},[76,104763,104764],{"class":78,"line":1158},[76,104765,2365],{"emptyLinePlaceholder":2364},[76,104767,104768,104770,104772],{"class":78,"line":1164},[76,104769,101283],{"class":136},[76,104771,13531],{"class":82},[76,104773,101288],{"class":192},[76,104775,104776],{"class":78,"line":1178},[76,104777,104778],{"class":192},"\u003Cmujoco model=\"state_api\">\n",[76,104780,104781],{"class":78,"line":1184},[76,104782,101298],{"class":192},[76,104784,104785],{"class":78,"line":1275},[76,104786,2365],{"emptyLinePlaceholder":2364},[76,104788,104789],{"class":78,"line":1281},[76,104790,101307],{"class":192},[76,104792,104793],{"class":78,"line":1293},[76,104794,104795],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[76,104797,104798],{"class":78,"line":1576},[76,104799,2365],{"emptyLinePlaceholder":2364},[76,104801,104802],{"class":78,"line":1581},[76,104803,104804],{"class":192},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[76,104806,104807],{"class":78,"line":1587},[76,104808,104809],{"class":192},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[76,104811,104812],{"class":78,"line":1592},[76,104813,104814],{"class":192},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[76,104816,104817],{"class":78,"line":1606},[76,104818,101336],{"class":192},[76,104820,104821],{"class":78,"line":1611},[76,104822,101341],{"class":192},[76,104824,104825],{"class":78,"line":1617},[76,104826,101346],{"class":192},[76,104828,104829],{"class":78,"line":1638},[76,104830,95667],{"class":192},[76,104832,104833],{"class":78,"line":1643},[76,104834,2365],{"emptyLinePlaceholder":2364},[76,104836,104837],{"class":78,"line":1657},[76,104838,2365],{"emptyLinePlaceholder":2364},[76,104840,104841,104843,104846,104849,104851,104854,104856],{"class":78,"line":1662},[76,104842,31916],{"class":82},[76,104844,104845],{"class":1927}," print_state",[76,104847,104848],{"class":86},"(prefix: ",[76,104850,1263],{"class":136},[76,104852,104853],{"class":86},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[76,104855,95655],{"class":136},[76,104857,3704],{"class":86},[76,104859,104860,104862],{"class":78,"line":1691},[76,104861,31268],{"class":136},[76,104863,104864],{"class":86},"(prefix)\n",[76,104866,104867,104869,104871,104874],{"class":78,"line":1696},[76,104868,31268],{"class":136},[76,104870,87],{"class":86},[76,104872,104873],{"class":192},"\"  timestep:\"",[76,104875,104876],{"class":86},", model.opt.timestep)\n",[76,104878,104879,104881,104883,104886],{"class":78,"line":1713},[76,104880,31268],{"class":136},[76,104882,87],{"class":86},[76,104884,104885],{"class":192},"\"  time:\"",[76,104887,101447],{"class":86},[76,104889,104890,104892,104894,104897,104900,104902],{"class":78,"line":1718},[76,104891,31268],{"class":136},[76,104893,87],{"class":86},[76,104895,104896],{"class":192},"\"  qpos:\"",[76,104898,104899],{"class":86},", np.round(data.qpos.copy(), ",[76,104901,381],{"class":136},[76,104903,30466],{"class":86},[76,104905,104906,104908,104910,104913,104916,104918],{"class":78,"line":1723},[76,104907,31268],{"class":136},[76,104909,87],{"class":86},[76,104911,104912],{"class":192},"\"  qvel:\"",[76,104914,104915],{"class":86},", np.round(data.qvel.copy(), ",[76,104917,381],{"class":136},[76,104919,30466],{"class":86},[76,104921,104922],{"class":78,"line":1728},[76,104923,2365],{"emptyLinePlaceholder":2364},[76,104925,104926],{"class":78,"line":1742},[76,104927,2365],{"emptyLinePlaceholder":2364},[76,104929,104930,104932,104934,104936,104938],{"class":78,"line":1747},[76,104931,31916],{"class":82},[76,104933,1937],{"class":1927},[76,104935,101367],{"class":86},[76,104937,95655],{"class":136},[76,104939,3704],{"class":86},[76,104941,104942,104944,104946,104948,104950],{"class":78,"line":2542},[76,104943,101376],{"class":86},[76,104945,133],{"class":82},[76,104947,101381],{"class":86},[76,104949,101283],{"class":136},[76,104951,93],{"class":86},[76,104953,104954,104956,104958],{"class":78,"line":2556},[76,104955,101390],{"class":86},[76,104957,133],{"class":82},[76,104959,101395],{"class":86},[76,104961,104962],{"class":78,"line":2564},[76,104963,2365],{"emptyLinePlaceholder":2364},[76,104965,104966,104969,104972],{"class":78,"line":2569},[76,104967,104968],{"class":86},"    print_state(",[76,104970,104971],{"class":192},"\"initial\"",[76,104973,104974],{"class":86},", model, data)\n",[76,104976,104977],{"class":78,"line":2575},[76,104978,2365],{"emptyLinePlaceholder":2364},[76,104980,104981,104983,104985,104987,104989,104991,104993],{"class":78,"line":2581},[76,104982,3166],{"class":82},[76,104984,101470],{"class":86},[76,104986,26012],{"class":82},[76,104988,32412],{"class":136},[76,104990,87],{"class":86},[76,104992,744],{"class":136},[76,104994,30755],{"class":86},[76,104996,104997],{"class":78,"line":2586},[76,104998,101485],{"class":86},[76,105000,105001],{"class":78,"line":7915},[76,105002,2365],{"emptyLinePlaceholder":2364},[76,105004,105005,105007,105010],{"class":78,"line":7939},[76,105006,104968],{"class":86},[76,105008,105009],{"class":192},"\"after 50 steps\"",[76,105011,104974],{"class":86},[76,105013,105014],{"class":78,"line":7944},[76,105015,2365],{"emptyLinePlaceholder":2364},[76,105017,105018],{"class":78,"line":7950},[76,105019,105020],{"class":86},"    mujoco.mj_resetData(model, data)\n",[76,105022,105023,105025,105028],{"class":78,"line":7977},[76,105024,104968],{"class":86},[76,105026,105027],{"class":192},"\"after reset\"",[76,105029,104974],{"class":86},[76,105031,105032],{"class":78,"line":7982},[76,105033,2365],{"emptyLinePlaceholder":2364},[76,105035,105036,105039,105041,105043,105045],{"class":78,"line":7988},[76,105037,105038],{"class":86},"    data.qpos[",[76,105040,165],{"class":136},[76,105042,4408],{"class":86},[76,105044,133],{"class":82},[76,105046,104677],{"class":136},[76,105048,105049],{"class":78,"line":8000},[76,105050,105051],{"class":86},"    mujoco.mj_forward(model, data)\n",[76,105053,105054,105056,105059],{"class":78,"line":8012},[76,105055,104968],{"class":86},[76,105057,105058],{"class":192},"\"after manual qpos edit\"",[76,105060,104974],{"class":86},[76,105062,105063],{"class":78,"line":8024},[76,105064,2365],{"emptyLinePlaceholder":2364},[76,105066,105067],{"class":78,"line":9683},[76,105068,2365],{"emptyLinePlaceholder":2364},[76,105070,105071,105073,105075,105077,105079],{"class":78,"line":9708},[76,105072,1495],{"class":82},[76,105074,31189],{"class":136},[76,105076,101528],{"class":82},[76,105078,101531],{"class":192},[76,105080,3704],{"class":86},[76,105082,105083],{"class":78,"line":9731},[76,105084,101538],{"class":86},[21,105086,103539],{},[66,105088,105090],{"className":23790,"code":105089,"language":23792,"meta":71,"style":71},"touch ch3_python_state.py\n",[73,105091,105092],{"__ignoreMap":71},[76,105093,105094,105096],{"class":78,"line":79},[76,105095,101252],{"class":1927},[76,105097,105098],{"class":192}," ch3_python_state.py\n",[21,105100,102270],{},[66,105102,105104],{"className":23790,"code":105103,"language":23792,"meta":71,"style":71},"python ch3_python_state.py\n",[73,105105,105106],{"__ignoreMap":71},[76,105107,105108,105110],{"class":78,"line":79},[76,105109,30349],{"class":1927},[76,105111,105098],{"class":192},[46,105113,101541],{"id":101541},[21,105115,105116],{},"打印状态的函数：",[66,105118,105120],{"className":30347,"code":105119,"language":30349,"meta":71,"style":71},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[73,105121,105122],{"__ignoreMap":71},[76,105123,105124,105126,105128,105130,105132,105134,105136],{"class":78,"line":79},[76,105125,31916],{"class":82},[76,105127,104845],{"class":1927},[76,105129,104848],{"class":86},[76,105131,1263],{"class":136},[76,105133,104853],{"class":86},[76,105135,95655],{"class":136},[76,105137,3704],{"class":86},[21,105139,105140,105141,105143],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[73,105142,33370],{}," 里发生了什么。",[21,105145,105146],{},"推进 50 步：",[66,105148,105150],{"className":30347,"code":105149,"language":30349,"meta":71,"style":71},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[73,105151,105152,105168],{"__ignoreMap":71},[76,105153,105154,105156,105158,105160,105162,105164,105166],{"class":78,"line":79},[76,105155,2990],{"class":82},[76,105157,101470],{"class":86},[76,105159,26012],{"class":82},[76,105161,32412],{"class":136},[76,105163,87],{"class":86},[76,105165,744],{"class":136},[76,105167,30755],{"class":86},[76,105169,105170],{"class":78,"line":96},[76,105171,101668],{"class":86},[21,105173,105174,105175,105178,105179,105181],{},"由于 ",[73,105176,105177],{},"timestep=0.01","，所以 50 步后时间约为 ",[73,105180,35298],{}," 秒。",[21,105183,105184],{},"重置：",[66,105186,105187],{"className":30347,"code":104495,"language":30349,"meta":71,"style":71},[73,105188,105189],{"__ignoreMap":71},[76,105190,105191],{"class":78,"line":79},[76,105192,104495],{"class":86},[21,105194,105195],{},"这会把时间、位置、速度恢复到初始状态。",[21,105197,105198],{},"手动改高度：",[66,105200,105202],{"className":30347,"code":105201,"language":30349,"meta":71,"style":71},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[73,105203,105204,105216],{"__ignoreMap":71},[76,105205,105206,105208,105210,105212,105214],{"class":78,"line":79},[76,105207,104668],{"class":86},[76,105209,165],{"class":136},[76,105211,4408],{"class":86},[76,105213,133],{"class":82},[76,105215,104677],{"class":136},[76,105217,105218],{"class":78,"line":96},[76,105219,104512],{"class":86},[21,105221,105222,105223,105226,105227,105230],{},"这个例子里 ",[73,105224,105225],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[73,105228,105229],{},"2.0"," 表示把小球放到更高的位置。",[46,105232,101677],{"id":101677},[66,105234,105235],{"className":30347,"code":105119,"language":30349,"meta":71,"style":71},[73,105236,105237],{"__ignoreMap":71},[76,105238,105239,105241,105243,105245,105247,105249,105251],{"class":78,"line":79},[76,105240,31916],{"class":82},[76,105242,104845],{"class":1927},[76,105244,104848],{"class":86},[76,105246,1263],{"class":136},[76,105248,104853],{"class":86},[76,105250,95655],{"class":136},[76,105252,3704],{"class":86},[21,105254,105255],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[29,105257,105258,105267,105272],{},[32,105259,105260,105263,105264,105266],{},[73,105261,105262],{},"prefix","：一段文字，比如 ",[73,105265,104971],{},"，用来说明现在打印的是哪个阶段。",[32,105268,105269,105271],{},[73,105270,102054],{},"：MuJoCo 模型。",[32,105273,105274,105276],{},[73,105275,33370],{},"：MuJoCo 当前状态。",[21,105278,105279,300,105282,105285],{},[73,105280,105281],{},"prefix: str",[73,105283,105284],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[66,105287,105289],{"className":30347,"code":105288,"language":30349,"meta":71,"style":71},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[73,105290,105291],{"__ignoreMap":71},[76,105292,105293,105295,105297,105299,105301,105303],{"class":78,"line":79},[76,105294,30384],{"class":136},[76,105296,87],{"class":86},[76,105298,104896],{"class":192},[76,105300,104899],{"class":86},[76,105302,381],{"class":136},[76,105304,30466],{"class":86},[21,105306,105307,105310],{},[73,105308,105309],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[66,105312,105314],{"className":30347,"code":105313,"language":30349,"meta":71,"style":71},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[73,105315,105316,105328],{"__ignoreMap":71},[76,105317,105318,105320,105322,105324,105326],{"class":78,"line":79},[76,105319,101603],{"class":86},[76,105321,133],{"class":82},[76,105323,101381],{"class":86},[76,105325,101283],{"class":136},[76,105327,93],{"class":86},[76,105329,105330,105332,105334],{"class":78,"line":96},[76,105331,101627],{"class":86},[76,105333,133],{"class":82},[76,105335,101395],{"class":86},[21,105337,105338],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[66,105340,105342],{"className":30347,"code":105341,"language":30349,"meta":71,"style":71},"print_state(\"initial\", model, data)\n",[73,105343,105344],{"__ignoreMap":71},[76,105345,105346,105349,105351],{"class":78,"line":79},[76,105347,105348],{"class":86},"print_state(",[76,105350,104971],{"class":192},[76,105352,104974],{"class":86},[21,105354,105355,105356,105359],{},"调用刚才定义的 ",[73,105357,105358],{},"print_state"," 函数，打印初始状态。",[66,105361,105362],{"className":30347,"code":105149,"language":30349,"meta":71,"style":71},[73,105363,105364,105380],{"__ignoreMap":71},[76,105365,105366,105368,105370,105372,105374,105376,105378],{"class":78,"line":79},[76,105367,2990],{"class":82},[76,105369,101470],{"class":86},[76,105371,26012],{"class":82},[76,105373,32412],{"class":136},[76,105375,87],{"class":86},[76,105377,744],{"class":136},[76,105379,30755],{"class":86},[76,105381,105382],{"class":78,"line":96},[76,105383,101668],{"class":86},[21,105385,105386],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[66,105388,105389],{"className":30347,"code":104495,"language":30349,"meta":71,"style":71},[73,105390,105391],{"__ignoreMap":71},[76,105392,105393],{"class":78,"line":79},[76,105394,104495],{"class":86},[21,105396,105397,105398,105400,105401,105403],{},"重置 ",[73,105399,33370],{},"。注意它不会重新创建 ",[73,105402,102054],{},"，因为模型结构没有变，只是状态回到初始值。",[66,105405,105406],{"className":30347,"code":104661,"language":30349,"meta":71,"style":71},[73,105407,105408],{"__ignoreMap":71},[76,105409,105410,105412,105414,105416,105418],{"class":78,"line":79},[76,105411,104668],{"class":86},[76,105413,165],{"class":136},[76,105415,4408],{"class":86},[76,105417,133],{"class":82},[76,105419,104677],{"class":136},[21,105421,105422,105423,300,105426,300,105429,105431],{},"这行是“手动改状态”。在 freejoint 中，",[73,105424,105425],{},"qpos[0]",[73,105427,105428],{},"qpos[1]",[73,105430,105225],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[66,105433,105434],{"className":30347,"code":104512,"language":30349,"meta":71,"style":71},[73,105435,105436],{"__ignoreMap":71},[76,105437,105438],{"class":78,"line":79},[76,105439,104512],{"class":86},[21,105441,105442,105443,105445,105446,105448],{},"手动改完 ",[73,105444,103999],{}," 后，调用 ",[73,105447,104219],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[16,105450,102285],{"id":102284},[21,105452,105453],{},"你会看到:",[29,105455,105456,105461,105466,105469],{},[32,105457,105458,105459],{},"初始时间为 ",[73,105460,279],{},[32,105462,105463,105464],{},"50 步后时间约为 ",[73,105465,35298],{},[32,105467,105468],{},"reset 后状态恢复",[32,105470,105471,105472,105475,105476],{},"手动修改 ",[73,105473,105474],{},"data.qpos[2]"," 后，小球高度变为 ",[73,105477,105229],{},[21,105479,105480,105482],{},[73,105481,105225],{}," 在这个例子中表示自由刚体的 z 坐标。",[21,105484,105485],{},"输出里可以重点看三件事：",[29,105487,105488,105496,105501],{},[32,105489,105490,105492,105493,105495],{},[73,105491,2351],{}," 是否随着 ",[73,105494,101184],{}," 增加。",[32,105497,105498,105500],{},[73,105499,103999],{}," 的 z 坐标是否因为下落而变化。",[32,105502,105503,105505,105506,28354],{},[73,105504,104321],{}," 后时间是否回到 ",[73,105507,279],{},[16,105509,102317],{"id":102316},[29,105511,105512,105518,105524,105530,105533,105542],{},[32,105513,105514,105515,28354],{},"修改 timestep 为 ",[73,105516,105517],{},"0.005",[32,105519,105520,105521,28354],{},"重新运行，检查 50 步后时间是否约为 ",[73,105522,105523],{},"0.25",[32,105525,105526,105527,28354],{},"修改重力为 ",[73,105528,105529],{},"0 0 -1.0",[32,105531,105532],{},"观察小球下降速度是否变慢。",[32,105534,102380,105535,102383,105538,105541],{},[73,105536,105537],{},"data.qpos[2] = 2.0",[73,105539,105540],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[32,105543,105544,105545,105548],{},"注释掉 ",[73,105546,105547],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[16,105550,102422],{"id":102421},[46,105552,105554,105555,105557],{"id":105553},"修改-dataqpos-后位置没有更新","修改 ",[73,105556,101039],{}," 后位置没有更新",[21,105559,102431],{},[66,105561,105562],{"className":30347,"code":104512,"language":30349,"meta":71,"style":71},[73,105563,105564],{"__ignoreMap":71},[76,105565,105566],{"class":78,"line":79},[76,105567,104512],{"class":86},[46,105569,105570],{"id":105570},"数组维度看不懂",[21,105572,105573],{},"打印模型维度:",[66,105575,105577],{"className":30347,"code":105576,"language":30349,"meta":71,"style":71},"print(model.nq, model.nv, model.nu)\n",[73,105578,105579],{"__ignoreMap":71},[76,105580,105581,105583],{"class":78,"line":79},[76,105582,30384],{"class":136},[76,105584,105585],{"class":86},"(model.nq, model.nv, model.nu)\n",[225,105587,105588,105596],{},[228,105589,105590],{},[231,105591,105592,105594],{},[234,105593,104543],{"align":23704},[234,105595,100669],{"align":23704},[272,105597,105598,105608,105618],{},[231,105599,105600,105605],{},[277,105601,105602],{"align":23704},[73,105603,105604],{},"nq",[277,105606,105607],{"align":23704},"位置变量数量",[231,105609,105610,105615],{},[277,105611,105612],{"align":23704},[73,105613,105614],{},"nv",[277,105616,105617],{"align":23704},"速度变量数量",[231,105619,105620,105624],{},[277,105621,105622],{"align":23704},[73,105623,102131],{},[277,105625,105626],{"align":23704},"控制输入数量",[46,105628,105630,105631,105633],{"id":105629},"误以为-qpos-一定等于关节数","误以为 ",[73,105632,103999],{}," 一定等于关节数",[21,105635,105636,105637,82499,105639,105641,105642,105644],{},"不是。例如 ",[73,105638,101589],{},[73,105640,103999],{}," 是 7 维，但 ",[73,105643,104329],{}," 是 6 维。",[46,105646,105648,105649,105651],{"id":105647},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[73,105650,103999],{}," 的第几位",[21,105653,105654],{},"初学时可以先打印：",[66,105656,105658],{"className":30347,"code":105657,"language":30349,"meta":71,"style":71},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[73,105659,105660,105670,105680,105692],{"__ignoreMap":71},[76,105661,105662,105664,105666,105668],{"class":78,"line":79},[76,105663,30384],{"class":136},[76,105665,87],{"class":86},[76,105667,101408],{"class":192},[76,105669,101411],{"class":86},[76,105671,105672,105674,105676,105678],{"class":78,"line":96},[76,105673,30384],{"class":136},[76,105675,87],{"class":86},[76,105677,101420],{"class":192},[76,105679,101423],{"class":86},[76,105681,105682,105684,105686,105689],{"class":78,"line":1143},[76,105683,30384],{"class":136},[76,105685,87],{"class":86},[76,105687,105688],{"class":192},"\"qpos:\"",[76,105690,105691],{"class":86},", data.qpos)\n",[76,105693,105694,105696,105698,105701],{"class":78,"line":1158},[76,105695,30384],{"class":136},[76,105697,87],{"class":86},[76,105699,105700],{"class":192},"\"qvel:\"",[76,105702,105703],{"class":86},", data.qvel)\n",[21,105705,105706],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[46,105708,105709],{"id":105709},"仿真结果每次都一样",[21,105711,105712,105713,105715],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[73,105714,103999],{},"、目标点或控制输入。",[16,105717,102576],{"id":102575},[21,105719,105720,105721,24587],{},"Python 控制 MuJoCo 的核心就是读写 ",[73,105722,33370],{},[29,105724,105725,105733,105738,105743],{},[32,105726,105727,105728,100987,105730,105732],{},"用 ",[73,105729,101039],{},[73,105731,101042],{}," 读取状态。",[32,105734,105727,105735,105737],{},[73,105736,101045],{}," 写入控制。",[32,105739,105727,105740,105742],{},[73,105741,101184],{}," 推进时间。",[32,105744,105745,105746,105748],{},"手动改状态后用 ",[73,105747,104219],{}," 刷新派生量。",[21,105750,105751],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5092,105753,105754],{},"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":71,"searchDepth":96,"depth":96,"links":105756},[105757,105758,105759,105766,105770,105771,105772,105782],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":105760},[105761,105763,105765],{"id":104524,"depth":1143,"text":105762},"qpos、qvel、ctrl 是什么",{"id":104602,"depth":1143,"text":105764},"mj_step 和 mj_forward 的区别",{"id":104691,"depth":1143,"text":104692},{"id":101221,"depth":96,"text":101222,"children":105767},[105768,105769],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":105773},[105774,105776,105777,105779,105781],{"id":105553,"depth":1143,"text":105775},"修改 data.qpos 后位置没有更新",{"id":105570,"depth":1143,"text":105570},{"id":105629,"depth":1143,"text":105778},"误以为 qpos 一定等于关节数",{"id":105647,"depth":1143,"text":105780},"不知道某个元素在 qpos 的第几位",{"id":105709,"depth":1143,"text":105709},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104287,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105789,"title":105790,"body":105791,"description":71,"extension":5123,"meta":107481,"navigation":2364,"path":107482,"seo":107483,"stem":107484,"__hash__":107485},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":9,"value":105792,"toc":107457},[105793,105796,105798,105801,105803,105828,105831,105850,105853,105855,105857,105881,105883,105897,105899,105940,105942,105966,105968,105971,106005,106007,106020,106023,106091,106100,106104,106107,106141,106147,106150,106154,106193,106196,106216,106220,106263,106265,106294,106297,106303,106306,106308,106702,106704,106716,106718,106729,106731,106734,106763,106771,106774,106809,106812,106814,106822,106825,106827,106838,106848,106868,106871,106907,106919,106967,106986,107028,107041,107069,107074,107095,107105,107123,107126,107160,107163,107183,107186,107205,107211,107213,107216,107222,107228,107238,107241,107247,107256,107258,107304,107306,107312,107318,107321,107324,107344,107347,107353,107359,107361,107384,107387,107390,107399,107402,107440,107442,107445,107451,107454],[12,105794,105790],{"id":105795},"_4关节actuator-与力控制",[16,105797,100616],{"id":100615},[21,105799,105800],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[21,105802,104300],{},[29,105804,105805,105811,105816,105820,105825],{},[32,105806,105807,105810],{},[73,105808,105809],{},"hinge"," 关节",[32,105812,105813],{},[73,105814,105815],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[32,105817,105818],{},[73,105819,101045],{},[32,105821,105822],{},[73,105823,105824],{},"ctrlrange",[32,105826,105827],{},"读取关节角和角速度",[21,105829,105830],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[66,105832,105834],{"className":30347,"code":105833,"language":30349,"meta":71,"style":71},"data.ctrl[0] = ...\n",[73,105835,105836],{"__ignoreMap":71},[76,105837,105838,105841,105843,105845,105847],{"class":78,"line":79},[76,105839,105840],{"class":86},"data.ctrl[",[76,105842,279],{"class":136},[76,105844,4408],{"class":86},[76,105846,133],{"class":82},[76,105848,105849],{"class":136}," ...\n",[21,105851,105852],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[16,105854,100739],{"id":100738},[21,105856,100742],{},[66,105858,105859],{"className":23790,"code":104357,"language":23792,"meta":71,"style":71},[73,105860,105861],{"__ignoreMap":71},[76,105862,105863,105865,105867,105869,105871,105873,105875,105877,105879],{"class":78,"line":79},[76,105864,24545],{"class":1927},[76,105866,26284],{"class":192},[76,105868,23802],{"class":192},[76,105870,26369],{"class":136},[76,105872,104372],{"class":192},[76,105874,100767],{"class":192},[76,105876,102470],{"class":192},[76,105878,100783],{"class":192},[76,105880,104381],{"class":192},[21,105882,102788],{},[66,105884,105885],{"className":23790,"code":100888,"language":23792,"meta":71,"style":71},[73,105886,105887],{"__ignoreMap":71},[76,105888,105889,105891,105893,105895],{"class":78,"line":79},[76,105890,23799],{"class":1927},[76,105892,23802],{"class":192},[76,105894,100899],{"class":192},[76,105896,100902],{"class":192},[21,105898,102805],{},[66,105900,105902],{"className":23790,"code":105901,"language":23792,"meta":71,"style":71},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[73,105903,105904,105921,105930],{"__ignoreMap":71},[76,105905,105906,105908,105910,105912,105915,105917,105919],{"class":78,"line":79},[76,105907,30299],{"class":1927},[76,105909,29145],{"class":192},[76,105911,25084],{"class":136},[76,105913,105914],{"class":192}," mujoco-control",[76,105916,100944],{"class":192},[76,105918,100947],{"class":136},[76,105920,100950],{"class":136},[76,105922,105923,105925,105927],{"class":78,"line":96},[76,105924,30299],{"class":1927},[76,105926,100957],{"class":192},[76,105928,105929],{"class":192}," mujoco-control\n",[76,105931,105932,105934,105936,105938],{"class":78,"line":1143},[76,105933,23799],{"class":1927},[76,105935,23802],{"class":192},[76,105937,100899],{"class":192},[76,105939,100902],{"class":192},[21,105941,100973],{},[29,105943,105944,105950,105957,105963],{},[32,105945,105946,105949],{},[73,105947,105948],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[32,105951,105952,105954,105955,28354],{},[73,105953,101045],{}," 长度等于 ",[73,105956,102127],{},[32,105958,82191,105959,105962],{},[73,105960,105961],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[32,105964,105965],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[16,105967,101014],{"id":101013},[21,105969,105970],{},"关节决定 body 如何运动:",[66,105972,105974],{"className":53036,"code":105973,"language":53038,"meta":71,"style":71},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[73,105975,105976],{"__ignoreMap":71},[76,105977,105978,105980,105982,105984,105986,105989,105991,105993,105995,105998,106000,106003],{"class":78,"line":79},[76,105979,998],{"class":86},[76,105981,102925],{"class":51269},[76,105983,14887],{"class":1927},[76,105985,133],{"class":86},[76,105987,105988],{"class":192},"\"hinge\"",[76,105990,53793],{"class":1927},[76,105992,133],{"class":86},[76,105994,105988],{"class":192},[76,105996,105997],{"class":1927}," axis",[76,105999,133],{"class":86},[76,106001,106002],{"class":192},"\"0 1 0\"",[76,106004,101113],{"class":86},[21,106006,103021],{},[29,106008,106009,106014,106017],{},[32,106010,106011,106012],{},"名字是 ",[73,106013,105809],{},[32,106015,106016],{},"类型是旋转关节",[32,106018,106019],{},"绕 y 轴旋转",[21,106021,106022],{},"actuator 决定如何施加控制:",[66,106024,106026],{"className":53036,"code":106025,"language":53038,"meta":71,"style":71},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[73,106027,106028,106037,106083],{"__ignoreMap":71},[76,106029,106030,106032,106035],{"class":78,"line":79},[76,106031,998],{"class":86},[76,106033,106034],{"class":51269},"actuator",[76,106036,51276],{"class":86},[76,106038,106039,106041,106044,106046,106048,106051,106054,106056,106058,106061,106063,106065,106068,106070,106073,106076,106078,106081],{"class":78,"line":96},[76,106040,52113],{"class":86},[76,106042,106043],{"class":51269},"motor",[76,106045,14887],{"class":1927},[76,106047,133],{"class":86},[76,106049,106050],{"class":192},"\"hinge_motor\"",[76,106052,106053],{"class":1927}," joint",[76,106055,133],{"class":86},[76,106057,105988],{"class":192},[76,106059,106060],{"class":1927}," gear",[76,106062,133],{"class":86},[76,106064,3643],{"class":192},[76,106066,106067],{"class":1927}," ctrlrange",[76,106069,133],{"class":86},[76,106071,106072],{"class":192},"\"-2 2\"",[76,106074,106075],{"class":1927}," ctrllimited",[76,106077,133],{"class":86},[76,106079,106080],{"class":192},"\"true\"",[76,106082,101113],{"class":86},[76,106084,106085,106087,106089],{"class":78,"line":1143},[76,106086,51754],{"class":86},[76,106088,106034],{"class":51269},[76,106090,51276],{"class":86},[21,106092,106093,106096,106097,28354],{},[73,106094,106095],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[73,106098,106099],{},"[-2, 2]",[46,106101,106103],{"id":106102},"joint-和-actuator-的关系","joint 和 actuator 的关系",[21,106105,106106],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[225,106108,106109,106119],{},[228,106110,106111],{},[231,106112,106113,106115,106117],{},[234,106114,25722],{"align":23704},[234,106116,102665],{"align":23704},[234,106118,100703],{"align":23704},[272,106120,106121,106131],{},[231,106122,106123,106125,106128],{},[277,106124,102925],{"align":23704},[277,106126,106127],{"align":23704},"定义能怎么动",[277,106129,106130],{"align":23704},"门轴允许门旋转",[231,106132,106133,106135,106138],{},[277,106134,106034],{"align":23704},[277,106136,106137],{"align":23704},"定义怎么施力或控制",[277,106139,106140],{"align":23704},"人推门、马达带动门",[21,106142,106143,106144,106146],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[73,106145,101045],{}," 主动控制它。",[21,106148,106149],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[46,106151,106153],{"id":106152},"hinge-joint","hinge joint",[66,106155,106157],{"className":53036,"code":106156,"language":53038,"meta":71,"style":71},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[73,106158,106159],{"__ignoreMap":71},[76,106160,106161,106163,106165,106167,106169,106171,106173,106175,106177,106179,106181,106183,106186,106188,106191],{"class":78,"line":79},[76,106162,998],{"class":86},[76,106164,102925],{"class":51269},[76,106166,14887],{"class":1927},[76,106168,133],{"class":86},[76,106170,105988],{"class":192},[76,106172,53793],{"class":1927},[76,106174,133],{"class":86},[76,106176,105988],{"class":192},[76,106178,105997],{"class":1927},[76,106180,133],{"class":86},[76,106182,106002],{"class":192},[76,106184,106185],{"class":1927}," damping",[76,106187,133],{"class":86},[76,106189,106190],{"class":192},"\"0.1\"",[76,106192,101113],{"class":86},[21,106194,106195],{},"含义：",[29,106197,106198,106204,106210],{},[32,106199,106200,106203],{},[73,106201,106202],{},"type=\"hinge\"","：只能绕一个轴旋转。",[32,106205,106206,106209],{},[73,106207,106208],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[32,106211,106212,106215],{},[73,106213,106214],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[46,106217,106219],{"id":106218},"motor-actuator","motor actuator",[66,106221,106223],{"className":53036,"code":106222,"language":53038,"meta":71,"style":71},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[73,106224,106225],{"__ignoreMap":71},[76,106226,106227,106229,106231,106233,106235,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261],{"class":78,"line":79},[76,106228,998],{"class":86},[76,106230,106043],{"class":51269},[76,106232,14887],{"class":1927},[76,106234,133],{"class":86},[76,106236,106050],{"class":192},[76,106238,106053],{"class":1927},[76,106240,133],{"class":86},[76,106242,105988],{"class":192},[76,106244,106060],{"class":1927},[76,106246,133],{"class":86},[76,106248,3643],{"class":192},[76,106250,106067],{"class":1927},[76,106252,133],{"class":86},[76,106254,106072],{"class":192},[76,106256,106075],{"class":1927},[76,106258,133],{"class":86},[76,106260,106080],{"class":192},[76,106262,101113],{"class":86},[21,106264,106195],{},[29,106266,106267,106276,106282,106288],{},[32,106268,106269,106272,106273,106275],{},[73,106270,106271],{},"joint=\"hinge\"","：这个电机作用在名为 ",[73,106274,105809],{}," 的关节上。",[32,106277,106278,106281],{},[73,106279,106280],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[32,106283,106284,106287],{},[73,106285,106286],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[32,106289,106290,106293],{},[73,106291,106292],{},"ctrllimited=\"true\"","：启用控制范围限制。",[21,106295,106296],{},"简单理解：",[66,106298,106301],{"className":106299,"code":106300,"language":5154,"meta":71},[5152],"实际施加效果 ≈ data.ctrl[0] * gear\n",[73,106302,106300],{"__ignoreMap":71},[21,106304,106305],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[16,106307,101222],{"id":101221},[66,106309,106311],{"className":30347,"code":106310,"language":30349,"meta":71,"style":71},"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",[73,106312,106313,106320,106324,106330,106340,106344,106348,106356,106361,106366,106370,106374,106379,106384,106388,106393,106398,106403,106408,106412,106416,106420,106425,106430,106435,106439,106443,106447,106451,106463,106475,106483,106487,106497,106507,106517,106521,106534,106547,106551,106568,106582,106617,106621,106625,106636,106651,106666,106678,106682,106686,106698],{"__ignoreMap":71},[76,106314,106315,106317],{"class":78,"line":79},[76,106316,30361],{"class":82},[76,106318,106319],{"class":86}," math\n",[76,106321,106322],{"class":78,"line":96},[76,106323,2365],{"emptyLinePlaceholder":2364},[76,106325,106326,106328],{"class":78,"line":1143},[76,106327,30361],{"class":82},[76,106329,101270],{"class":86},[76,106331,106332,106334,106336,106338],{"class":78,"line":1158},[76,106333,30361],{"class":82},[76,106335,31349],{"class":86},[76,106337,31352],{"class":82},[76,106339,31355],{"class":86},[76,106341,106342],{"class":78,"line":1164},[76,106343,2365],{"emptyLinePlaceholder":2364},[76,106345,106346],{"class":78,"line":1178},[76,106347,2365],{"emptyLinePlaceholder":2364},[76,106349,106350,106352,106354],{"class":78,"line":1184},[76,106351,101283],{"class":136},[76,106353,13531],{"class":82},[76,106355,101288],{"class":192},[76,106357,106358],{"class":78,"line":1275},[76,106359,106360],{"class":192},"\u003Cmujoco model=\"one_link_motor\">\n",[76,106362,106363],{"class":78,"line":1281},[76,106364,106365],{"class":192},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[76,106367,106368],{"class":78,"line":1293},[76,106369,2365],{"emptyLinePlaceholder":2364},[76,106371,106372],{"class":78,"line":1576},[76,106373,101307],{"class":192},[76,106375,106376],{"class":78,"line":1581},[76,106377,106378],{"class":192},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[76,106380,106381],{"class":78,"line":1587},[76,106382,106383],{"class":192},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[76,106385,106386],{"class":78,"line":1592},[76,106387,2365],{"emptyLinePlaceholder":2364},[76,106389,106390],{"class":78,"line":1606},[76,106391,106392],{"class":192},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[76,106394,106395],{"class":78,"line":1611},[76,106396,106397],{"class":192},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,106399,106400],{"class":78,"line":1617},[76,106401,106402],{"class":192},"        \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",[76,106404,106405],{"class":78,"line":1638},[76,106406,106407],{"class":192},"      \u003C\u002Fbody>\n",[76,106409,106410],{"class":78,"line":1643},[76,106411,101336],{"class":192},[76,106413,106414],{"class":78,"line":1657},[76,106415,101341],{"class":192},[76,106417,106418],{"class":78,"line":1662},[76,106419,2365],{"emptyLinePlaceholder":2364},[76,106421,106422],{"class":78,"line":1691},[76,106423,106424],{"class":192},"  \u003Cactuator>\n",[76,106426,106427],{"class":78,"line":1696},[76,106428,106429],{"class":192},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[76,106431,106432],{"class":78,"line":1713},[76,106433,106434],{"class":192},"  \u003C\u002Factuator>\n",[76,106436,106437],{"class":78,"line":1718},[76,106438,101346],{"class":192},[76,106440,106441],{"class":78,"line":1723},[76,106442,95667],{"class":192},[76,106444,106445],{"class":78,"line":1728},[76,106446,2365],{"emptyLinePlaceholder":2364},[76,106448,106449],{"class":78,"line":1742},[76,106450,2365],{"emptyLinePlaceholder":2364},[76,106452,106453,106455,106457,106459,106461],{"class":78,"line":1747},[76,106454,31916],{"class":82},[76,106456,1937],{"class":1927},[76,106458,101367],{"class":86},[76,106460,95655],{"class":136},[76,106462,3704],{"class":86},[76,106464,106465,106467,106469,106471,106473],{"class":78,"line":2542},[76,106466,101376],{"class":86},[76,106468,133],{"class":82},[76,106470,101381],{"class":86},[76,106472,101283],{"class":136},[76,106474,93],{"class":86},[76,106476,106477,106479,106481],{"class":78,"line":2556},[76,106478,101390],{"class":86},[76,106480,133],{"class":82},[76,106482,101395],{"class":86},[76,106484,106485],{"class":78,"line":2564},[76,106486,2365],{"emptyLinePlaceholder":2364},[76,106488,106489,106491,106493,106495],{"class":78,"line":2569},[76,106490,31268],{"class":136},[76,106492,87],{"class":86},[76,106494,101408],{"class":192},[76,106496,101411],{"class":86},[76,106498,106499,106501,106503,106505],{"class":78,"line":2575},[76,106500,31268],{"class":136},[76,106502,87],{"class":86},[76,106504,101420],{"class":192},[76,106506,101423],{"class":86},[76,106508,106509,106511,106513,106515],{"class":78,"line":2581},[76,106510,31268],{"class":136},[76,106512,87],{"class":86},[76,106514,101432],{"class":192},[76,106516,101435],{"class":86},[76,106518,106519],{"class":78,"line":2586},[76,106520,2365],{"emptyLinePlaceholder":2364},[76,106522,106523,106525,106528,106530,106532],{"class":78,"line":7915},[76,106524,3066],{"class":82},[76,106526,106527],{"class":86}," model.nu ",[76,106529,20915],{"class":82},[76,106531,25087],{"class":136},[76,106533,3704],{"class":86},[76,106535,106536,106538,106540,106542,106545],{"class":78,"line":7939},[76,106537,103401],{"class":82},[76,106539,103404],{"class":136},[76,106541,87],{"class":86},[76,106543,106544],{"class":192},"\"expected exactly one actuator\"",[76,106546,93],{"class":86},[76,106548,106549],{"class":78,"line":7944},[76,106550,2365],{"emptyLinePlaceholder":2364},[76,106552,106553,106555,106557,106559,106561,106563,106566],{"class":78,"line":7950},[76,106554,3166],{"class":82},[76,106556,31585],{"class":86},[76,106558,26012],{"class":82},[76,106560,32412],{"class":136},[76,106562,87],{"class":86},[76,106564,106565],{"class":136},"2000",[76,106567,30755],{"class":86},[76,106569,106570,106573,106575,106577,106579],{"class":78,"line":7977},[76,106571,106572],{"class":86},"        t ",[76,106574,133],{"class":82},[76,106576,31585],{"class":86},[76,106578,543],{"class":82},[76,106580,106581],{"class":86}," model.opt.timestep\n",[76,106583,106584,106587,106589,106591,106593,106596,106598,106601,106603,106605,106608,106610,106612,106614],{"class":78,"line":7982},[76,106585,106586],{"class":86},"        data.ctrl[",[76,106588,279],{"class":136},[76,106590,4408],{"class":86},[76,106592,133],{"class":82},[76,106594,106595],{"class":136}," 1.5",[76,106597,6485],{"class":82},[76,106599,106600],{"class":86}," math.sin(",[76,106602,105229],{"class":136},[76,106604,6485],{"class":82},[76,106606,106607],{"class":86}," math.pi ",[76,106609,543],{"class":82},[76,106611,61836],{"class":136},[76,106613,6485],{"class":82},[76,106615,106616],{"class":86}," t)\n",[76,106618,106619],{"class":78,"line":7988},[76,106620,101485],{"class":86},[76,106622,106623],{"class":78,"line":8000},[76,106624,2365],{"emptyLinePlaceholder":2364},[76,106626,106627,106629,106631,106634],{"class":78,"line":8012},[76,106628,31268],{"class":136},[76,106630,87],{"class":86},[76,106632,106633],{"class":192},"\"time:\"",[76,106635,101447],{"class":86},[76,106637,106638,106640,106642,106645,106647,106649],{"class":78,"line":8024},[76,106639,31268],{"class":136},[76,106641,87],{"class":86},[76,106643,106644],{"class":192},"\"joint qpos:\"",[76,106646,104899],{"class":86},[76,106648,381],{"class":136},[76,106650,30466],{"class":86},[76,106652,106653,106655,106657,106660,106662,106664],{"class":78,"line":9683},[76,106654,31268],{"class":136},[76,106656,87],{"class":86},[76,106658,106659],{"class":192},"\"joint qvel:\"",[76,106661,104915],{"class":86},[76,106663,381],{"class":136},[76,106665,30466],{"class":86},[76,106667,106668,106670,106672,106675],{"class":78,"line":9708},[76,106669,31268],{"class":136},[76,106671,87],{"class":86},[76,106673,106674],{"class":192},"\"last ctrl:\"",[76,106676,106677],{"class":86},", data.ctrl.copy())\n",[76,106679,106680],{"class":78,"line":9731},[76,106681,2365],{"emptyLinePlaceholder":2364},[76,106683,106684],{"class":78,"line":9755},[76,106685,2365],{"emptyLinePlaceholder":2364},[76,106687,106688,106690,106692,106694,106696],{"class":78,"line":9760},[76,106689,1495],{"class":82},[76,106691,31189],{"class":136},[76,106693,101528],{"class":82},[76,106695,101531],{"class":192},[76,106697,3704],{"class":86},[76,106699,106700],{"class":78,"line":9765},[76,106701,101538],{"class":86},[21,106703,103539],{},[66,106705,106707],{"className":23790,"code":106706,"language":23792,"meta":71,"style":71},"touch ch4_joint_motor.py\n",[73,106708,106709],{"__ignoreMap":71},[76,106710,106711,106713],{"class":78,"line":79},[76,106712,101252],{"class":1927},[76,106714,106715],{"class":192}," ch4_joint_motor.py\n",[21,106717,102270],{},[66,106719,106721],{"className":23790,"code":106720,"language":23792,"meta":71,"style":71},"python ch4_joint_motor.py\n",[73,106722,106723],{"__ignoreMap":71},[76,106724,106725,106727],{"class":78,"line":79},[76,106726,30349],{"class":1927},[76,106728,106715],{"class":192},[46,106730,101541],{"id":101541},[21,106732,106733],{},"检查 actuator 数量：",[66,106735,106737],{"className":30347,"code":106736,"language":30349,"meta":71,"style":71},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[73,106738,106739,106751],{"__ignoreMap":71},[76,106740,106741,106743,106745,106747,106749],{"class":78,"line":79},[76,106742,1495],{"class":82},[76,106744,106527],{"class":86},[76,106746,20915],{"class":82},[76,106748,25087],{"class":136},[76,106750,3704],{"class":86},[76,106752,106753,106755,106757,106759,106761],{"class":78,"line":96},[76,106754,103864],{"class":82},[76,106756,103404],{"class":136},[76,106758,87],{"class":86},[76,106760,106544],{"class":192},[76,106762,93],{"class":86},[21,106764,106765,106767,106768,106770],{},[73,106766,102127],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[73,106769,101045],{}," 长度应该是 1。",[21,106772,106773],{},"产生正弦控制信号：",[66,106775,106777],{"className":30347,"code":106776,"language":30349,"meta":71,"style":71},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[73,106778,106779],{"__ignoreMap":71},[76,106780,106781,106783,106785,106787,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807],{"class":78,"line":79},[76,106782,105840],{"class":86},[76,106784,279],{"class":136},[76,106786,4408],{"class":86},[76,106788,133],{"class":82},[76,106790,106595],{"class":136},[76,106792,6485],{"class":82},[76,106794,106600],{"class":86},[76,106796,105229],{"class":136},[76,106798,6485],{"class":82},[76,106800,106607],{"class":86},[76,106802,543],{"class":82},[76,106804,61836],{"class":136},[76,106806,6485],{"class":82},[76,106808,106616],{"class":86},[21,106810,106811],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[21,106813,101642],{},[66,106815,106816],{"className":30347,"code":104474,"language":30349,"meta":71,"style":71},[73,106817,106818],{"__ignoreMap":71},[76,106819,106820],{"class":78,"line":79},[76,106821,104474],{"class":86},[21,106823,106824],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[46,106826,101677],{"id":101677},[66,106828,106830],{"className":30347,"code":106829,"language":30349,"meta":71,"style":71},"import math\n",[73,106831,106832],{"__ignoreMap":71},[76,106833,106834,106836],{"class":78,"line":79},[76,106835,30361],{"class":82},[76,106837,106319],{"class":86},[21,106839,106840,106841,100987,106844,106847],{},"导入 Python 标准库里的数学模块。后面要用 ",[73,106842,106843],{},"math.sin",[73,106845,106846],{},"math.pi"," 生成周期变化的控制信号。",[66,106849,106850],{"className":30347,"code":103655,"language":30349,"meta":71,"style":71},[73,106851,106852,106858],{"__ignoreMap":71},[76,106853,106854,106856],{"class":78,"line":79},[76,106855,30361],{"class":82},[76,106857,101270],{"class":86},[76,106859,106860,106862,106864,106866],{"class":78,"line":96},[76,106861,30361],{"class":82},[76,106863,31349],{"class":86},[76,106865,31352],{"class":82},[76,106867,31355],{"class":86},[21,106869,106870],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[66,106872,106873],{"className":53036,"code":106156,"language":53038,"meta":71,"style":71},[73,106874,106875],{"__ignoreMap":71},[76,106876,106877,106879,106881,106883,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905],{"class":78,"line":79},[76,106878,998],{"class":86},[76,106880,102925],{"class":51269},[76,106882,14887],{"class":1927},[76,106884,133],{"class":86},[76,106886,105988],{"class":192},[76,106888,53793],{"class":1927},[76,106890,133],{"class":86},[76,106892,105988],{"class":192},[76,106894,105997],{"class":1927},[76,106896,133],{"class":86},[76,106898,106002],{"class":192},[76,106900,106185],{"class":1927},[76,106902,133],{"class":86},[76,106904,106190],{"class":192},[76,106906,101113],{"class":86},[21,106908,106909,106910,106912,106913,106915,106916,106918],{},"这行定义关节。",[73,106911,105809],{}," 表示旋转关节。",[73,106914,106208],{}," 表示绕 y 轴旋转。",[73,106917,106214],{}," 表示有一点阻尼，运动不会完全无损耗。",[66,106920,106922],{"className":53036,"code":106921,"language":53038,"meta":71,"style":71},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[73,106923,106924],{"__ignoreMap":71},[76,106925,106926,106928,106930,106932,106934,106937,106939,106941,106944,106947,106949,106952,106954,106956,106958,106960,106962,106965],{"class":78,"line":79},[76,106927,998],{"class":86},[76,106929,101089],{"class":51269},[76,106931,14887],{"class":1927},[76,106933,133],{"class":86},[76,106935,106936],{"class":192},"\"link_geom\"",[76,106938,53793],{"class":1927},[76,106940,133],{"class":86},[76,106942,106943],{"class":192},"\"capsule\"",[76,106945,106946],{"class":1927}," fromto",[76,106948,133],{"class":86},[76,106950,106951],{"class":192},"\"0 0 0 0 0 0.5\"",[76,106953,101105],{"class":1927},[76,106955,133],{"class":86},[76,106957,103747],{"class":192},[76,106959,101970],{"class":1927},[76,106961,133],{"class":86},[76,106963,106964],{"class":192},"\"0.5\"",[76,106966,101113],{"class":86},[21,106968,106969,106970,106972,106973,106975,106976,106979,106980,28354,106983,106985],{},"这行定义摆杆的形状。",[73,106971,103134],{}," 是胶囊体，适合表示杆子。",[73,106974,103145],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[73,106977,106978],{},"(0,0,0)"," 延伸到 ",[73,106981,106982],{},"(0,0,0.5)",[73,106984,103139],{}," 是半径。",[66,106987,106988],{"className":53036,"code":106222,"language":53038,"meta":71,"style":71},[73,106989,106990],{"__ignoreMap":71},[76,106991,106992,106994,106996,106998,107000,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026],{"class":78,"line":79},[76,106993,998],{"class":86},[76,106995,106043],{"class":51269},[76,106997,14887],{"class":1927},[76,106999,133],{"class":86},[76,107001,106050],{"class":192},[76,107003,106053],{"class":1927},[76,107005,133],{"class":86},[76,107007,105988],{"class":192},[76,107009,106060],{"class":1927},[76,107011,133],{"class":86},[76,107013,3643],{"class":192},[76,107015,106067],{"class":1927},[76,107017,133],{"class":86},[76,107019,106072],{"class":192},[76,107021,106075],{"class":1927},[76,107023,133],{"class":86},[76,107025,106080],{"class":192},[76,107027,101113],{"class":86},[21,107029,107030,107031,107033,107034,107037,107038,107040],{},"这行定义电机。它作用在 ",[73,107032,105809],{}," 关节上。",[73,107035,107036],{},"gear"," 可以理解成放大倍数。",[73,107039,105824],{}," 限制控制输入范围。",[66,107042,107043],{"className":30347,"code":106736,"language":30349,"meta":71,"style":71},[73,107044,107045,107057],{"__ignoreMap":71},[76,107046,107047,107049,107051,107053,107055],{"class":78,"line":79},[76,107048,1495],{"class":82},[76,107050,106527],{"class":86},[76,107052,20915],{"class":82},[76,107054,25087],{"class":136},[76,107056,3704],{"class":86},[76,107058,107059,107061,107063,107065,107067],{"class":78,"line":96},[76,107060,103864],{"class":82},[76,107062,103404],{"class":136},[76,107064,87],{"class":86},[76,107066,106544],{"class":192},[76,107068,93],{"class":86},[21,107070,107071,107073],{},[73,107072,102127],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[66,107075,107077],{"className":30347,"code":107076,"language":30349,"meta":71,"style":71},"for step in range(2000):\n",[73,107078,107079],{"__ignoreMap":71},[76,107080,107081,107083,107085,107087,107089,107091,107093],{"class":78,"line":79},[76,107082,2990],{"class":82},[76,107084,31585],{"class":86},[76,107086,26012],{"class":82},[76,107088,32412],{"class":136},[76,107090,87],{"class":86},[76,107092,106565],{"class":136},[76,107094,30755],{"class":86},[21,107096,107097,107098,107100,107101,107104],{},"循环 2000 步。这里没有用 ",[73,107099,1080],{},"，而是用 ",[73,107102,107103],{},"step","，因为后面要用当前步数计算时间。",[66,107106,107108],{"className":30347,"code":107107,"language":30349,"meta":71,"style":71},"t = step * model.opt.timestep\n",[73,107109,107110],{"__ignoreMap":71},[76,107111,107112,107115,107117,107119,107121],{"class":78,"line":79},[76,107113,107114],{"class":86},"t ",[76,107116,133],{"class":82},[76,107118,31585],{"class":86},[76,107120,543],{"class":82},[76,107122,106581],{"class":86},[21,107124,107125],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[66,107127,107128],{"className":30347,"code":106776,"language":30349,"meta":71,"style":71},[73,107129,107130],{"__ignoreMap":71},[76,107131,107132,107134,107136,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158],{"class":78,"line":79},[76,107133,105840],{"class":86},[76,107135,279],{"class":136},[76,107137,4408],{"class":86},[76,107139,133],{"class":82},[76,107141,106595],{"class":136},[76,107143,6485],{"class":82},[76,107145,106600],{"class":86},[76,107147,105229],{"class":136},[76,107149,6485],{"class":82},[76,107151,106607],{"class":86},[76,107153,543],{"class":82},[76,107155,61836],{"class":136},[76,107157,6485],{"class":82},[76,107159,106616],{"class":86},[21,107161,107162],{},"这行给电机输入一个正弦波。拆开看：",[29,107164,107165,107171,107177],{},[32,107166,107167,107170],{},[73,107168,107169],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[32,107172,107173,107176],{},[73,107174,107175],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[32,107178,107179,107182],{},[73,107180,107181],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[21,107184,107185],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[66,107187,107189],{"className":30347,"code":107188,"language":30349,"meta":71,"style":71},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[73,107190,107191],{"__ignoreMap":71},[76,107192,107193,107195,107197,107199,107201,107203],{"class":78,"line":79},[76,107194,30384],{"class":136},[76,107196,87],{"class":86},[76,107198,106644],{"class":192},[76,107200,104899],{"class":86},[76,107202,381],{"class":136},[76,107204,30466],{"class":86},[21,107206,107207,107208,107210],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[73,107209,101039],{}," 只有一个数。",[16,107212,102285],{"id":102284},[21,107214,107215],{},"输出类似:",[66,107217,107220],{"className":107218,"code":107219,"language":5154,"meta":71},[5152],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[73,107221,107219],{"__ignoreMap":71},[21,107223,107224,107225,107227],{},"这里 ",[73,107226,106095],{}," 是电机输入。",[21,107229,107230,107233,107234,107237],{},[73,107231,107232],{},"joint qpos"," 是关节角度，单位通常是弧度。",[73,107235,107236],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[21,107239,107240],{},"角度单位提示：",[66,107242,107245],{"className":107243,"code":107244,"language":5154,"meta":71},[5152],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[73,107246,107244],{"__ignoreMap":71},[21,107248,107249,107250,107252,107253,107255],{},"如果你看到 ",[73,107251,103999],{}," 是 ",[73,107254,35298],{},"，大约就是 28.6 度。",[16,107257,102317],{"id":102316},[29,107259,107260,107267,107270,107277,107280,107288,107296],{},[32,107261,102380,107262,102383,107264,28354],{},[73,107263,106280],{},[73,107265,107266],{},"gear=\"5\"",[32,107268,107269],{},"重新运行，观察关节运动是否更剧烈。",[32,107271,102380,107272,102383,107274,28354],{},[73,107273,105824],{},[73,107275,107276],{},"-0.2 0.2",[32,107278,107279],{},"重新运行，观察控制能力是否变弱。",[32,107281,107282,107283,107285,107286,28354],{},"去掉 actuator，确认 ",[73,107284,102127],{}," 变成 ",[73,107287,279],{},[32,107289,102380,107290,102383,107292,107295],{},[73,107291,106214],{},[73,107293,107294],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[32,107297,102380,107298,102383,107300,107303],{},[73,107299,106208],{},[73,107301,107302],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[16,107305,102422],{"id":102421},[46,107307,107309],{"id":107308},"indexerror-index-0-is-out-of-bounds",[73,107310,107311],{},"IndexError: index 0 is out of bounds",[21,107313,107314,107315,107317],{},"原因是 ",[73,107316,105961],{},"，没有 actuator。",[46,107319,107320],{"id":107320},"关节几乎不动",[21,107322,107323],{},"可能原因:",[29,107325,107326,107331,107335,107341],{},[32,107327,107328,107330],{},[73,107329,107036],{}," 太小",[32,107332,107333,107330],{},[73,107334,105824],{},[32,107336,107337,107340],{},[73,107338,107339],{},"damping"," 太大",[32,107342,107343],{},"重力方向导致运动不明显",[46,107345,107346],{"id":107346},"模型编译失败",[21,107348,107349,107350,107352],{},"检查 actuator 引用的 ",[73,107351,106271],{}," 是否存在，joint 名称是否拼写一致。",[46,107354,107356,107358],{"id":107355},"datactrl0-写了但没有效果",[73,107357,106095],{}," 写了但没有效果",[21,107360,102544],{},[29,107362,107363,107368,107371,107376,107381],{},[32,107364,107365,107367],{},[73,107366,102127],{}," 是否大于 0。",[32,107369,107370],{},"motor 是否引用了正确 joint。",[32,107372,107373,107375],{},[73,107374,107036],{}," 是否太小。",[32,107377,107378,107380],{},[73,107379,105824],{}," 是否把输入限制得太小。",[32,107382,107383],{},"body 是否真的有可动 joint。",[46,107385,107386],{"id":107386},"控制输入超过范围会怎样",[21,107388,107389],{},"如果设置了：",[66,107391,107393],{"className":53036,"code":107392,"language":53038,"meta":71,"style":71},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[73,107394,107395],{"__ignoreMap":71},[76,107396,107397],{"class":78,"line":79},[76,107398,107392],{"class":86},[21,107400,107401],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[66,107403,107405],{"className":30347,"code":107404,"language":30349,"meta":71,"style":71},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[73,107406,107407,107427],{"__ignoreMap":71},[76,107408,107409,107412,107414,107417,107419,107421,107423,107425],{"class":78,"line":79},[76,107410,107411],{"class":86},"action ",[76,107413,133],{"class":82},[76,107415,107416],{"class":86}," np.clip(action, ",[76,107418,620],{"class":82},[76,107420,105229],{"class":136},[76,107422,12402],{"class":86},[76,107424,105229],{"class":136},[76,107426,93],{"class":86},[76,107428,107429,107431,107433,107435,107437],{"class":78,"line":96},[76,107430,105840],{"class":86},[76,107432,279],{"class":136},[76,107434,4408],{"class":86},[76,107436,133],{"class":82},[76,107438,107439],{"class":86}," action\n",[16,107441,102576],{"id":102575},[21,107443,107444],{},"这一章建立了控制任务的基本形式：",[66,107446,107449],{"className":107447,"code":107448,"language":5154,"meta":71},[5152],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[73,107450,107448],{"__ignoreMap":71},[21,107452,107453],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5092,107455,107456],{},"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":71,"searchDepth":96,"depth":96,"links":107458},[107459,107460,107461,107466,107470,107471,107472,107480],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":107462},[107463,107464,107465],{"id":106102,"depth":1143,"text":106103},{"id":106152,"depth":1143,"text":106153},{"id":106218,"depth":1143,"text":106219},{"id":101221,"depth":96,"text":101222,"children":107467},[107468,107469],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":107473},[107474,107475,107476,107477,107479],{"id":107308,"depth":1143,"text":107311},{"id":107320,"depth":1143,"text":107320},{"id":107346,"depth":1143,"text":107346},{"id":107355,"depth":1143,"text":107478},"data.ctrl[0] 写了但没有效果",{"id":107386,"depth":1143,"text":107386},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105790,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107487,"title":107488,"body":107489,"description":71,"extension":5123,"meta":109398,"navigation":2364,"path":109399,"seo":109400,"stem":109401,"__hash__":109402},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":9,"value":107490,"toc":109374},[107491,107494,107496,107499,107507,107510,107527,107530,107555,107558,107604,107606,107608,107663,107665,107684,107686,107729,107732,107749,107752,107768,107778,107785,107787,107790,107793,107827,107830,107878,107882,107885,107899,107908,107912,107915,107940,107943,107947,107960,107963,107969,107972,107987,107989,107992,108252,108254,108266,108269,108581,108583,108595,108597,108600,108615,108620,108623,108645,108648,108651,108685,108688,108692,108703,108706,108723,108726,108740,108747,108767,108774,108788,108791,108803,108818,108838,108841,108863,108866,108870,108885,108896,108911,108914,108944,108960,108989,108997,109021,109024,109042,109052,109064,109071,109080,109086,109095,109098,109100,109109,109112,109127,109129,109132,109143,109146,109157,109160,109178,109180,109197,109200,109228,109230,109234,109237,109267,109273,109276,109280,109288,109291,109293,109314,109317,109320,109336,109339,109355,109357,109360,109371],[12,107492,107488],{"id":107493},"_5viewer-可视化与-renderer-离屏渲染",[16,107495,100616],{"id":100615},[21,107497,107498],{},"本章掌握两类可视化方式:",[29,107500,107501,107504],{},[32,107502,107503],{},"交互式 viewer: 适合人工观察仿真",[32,107505,107506],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[21,107508,107509],{},"使用官方接口:",[66,107511,107513],{"className":30347,"code":107512,"language":30349,"meta":71,"style":71},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[73,107514,107515,107522],{"__ignoreMap":71},[76,107516,107517,107519],{"class":78,"line":79},[76,107518,30361],{"class":82},[76,107520,107521],{"class":86}," mujoco.viewer\n",[76,107523,107524],{"class":78,"line":96},[76,107525,107526],{"class":86},"mujoco.viewer.launch_passive(model, data)\n",[21,107528,107529],{},"以及:",[66,107531,107533],{"className":30347,"code":107532,"language":30349,"meta":71,"style":71},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[73,107534,107535,107545],{"__ignoreMap":71},[76,107536,107537,107540,107542],{"class":78,"line":79},[76,107538,107539],{"class":86},"renderer ",[76,107541,133],{"class":82},[76,107543,107544],{"class":86}," mujoco.Renderer(model)\n",[76,107546,107547,107550,107552],{"class":78,"line":96},[76,107548,107549],{"class":86},"image ",[76,107551,133],{"class":82},[76,107553,107554],{"class":86}," renderer.render()\n",[21,107556,107557],{},"新手建议先理解二者区别：",[225,107559,107560,107576],{},[228,107561,107562],{},[231,107563,107564,107567,107570,107573],{},[234,107565,107566],{"align":23704},"工具",[234,107568,107569],{"align":23704},"用途",[234,107571,107572],{"align":23704},"是否打开窗口",[234,107574,107575],{"align":23704},"常见场景",[272,107577,107578,107591],{},[231,107579,107580,107583,107586,107588],{},[277,107581,107582],{"align":23704},"Viewer",[277,107584,107585],{"align":23704},"人眼实时观察仿真",[277,107587,104634],{"align":23704},[277,107589,107590],{"align":23704},"调试模型、看控制效果",[231,107592,107593,107596,107599,107601],{},[277,107594,107595],{"align":23704},"Renderer",[277,107597,107598],{"align":23704},"生成图像数组",[277,107600,104647],{"align":23704},[277,107602,107603],{"align":23704},"保存图片、训练视觉策略、服务器批量采集",[16,107605,100739],{"id":100738},[21,107607,100742],{},[66,107609,107611],{"className":23790,"code":107610,"language":23792,"meta":71,"style":71},"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",[73,107612,107613,107625,107635,107643,107651],{"__ignoreMap":71},[76,107614,107615,107617,107619,107621,107623],{"class":78,"line":79},[76,107616,24545],{"class":1927},[76,107618,26284],{"class":192},[76,107620,23802],{"class":192},[76,107622,26369],{"class":136},[76,107624,24647],{"class":136},[76,107626,107627,107629,107631,107633],{"class":78,"line":96},[76,107628,100777],{"class":192},[76,107630,100780],{"class":192},[76,107632,100783],{"class":192},[76,107634,24647],{"class":136},[76,107636,107637,107639,107641],{"class":78,"line":1143},[76,107638,100790],{"class":192},[76,107640,100793],{"class":192},[76,107642,24647],{"class":136},[76,107644,107645,107647,107649],{"class":78,"line":1158},[76,107646,100800],{"class":192},[76,107648,100803],{"class":192},[76,107650,24647],{"class":136},[76,107652,107653,107655,107657,107659,107661],{"class":78,"line":1164},[76,107654,100810],{"class":192},[76,107656,100813],{"class":192},[76,107658,100816],{"class":192},[76,107660,100819],{"class":192},[76,107662,102485],{"class":192},[21,107664,102788],{},[66,107666,107668],{"className":23790,"code":107667,"language":23792,"meta":71,"style":71},"pip install \"mujoco>=2.3\" numpy pillow\n",[73,107669,107670],{"__ignoreMap":71},[76,107671,107672,107674,107676,107678,107681],{"class":78,"line":79},[76,107673,23799],{"class":1927},[76,107675,23802],{"class":192},[76,107677,100899],{"class":192},[76,107679,107680],{"class":192}," numpy",[76,107682,107683],{"class":192}," pillow\n",[21,107685,102805],{},[66,107687,107689],{"className":23790,"code":107688,"language":23792,"meta":71,"style":71},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[73,107690,107691,107708,107717],{"__ignoreMap":71},[76,107692,107693,107695,107697,107699,107702,107704,107706],{"class":78,"line":79},[76,107694,30299],{"class":1927},[76,107696,29145],{"class":192},[76,107698,25084],{"class":136},[76,107700,107701],{"class":192}," mujoco-render",[76,107703,100944],{"class":192},[76,107705,100947],{"class":136},[76,107707,100950],{"class":136},[76,107709,107710,107712,107714],{"class":78,"line":96},[76,107711,30299],{"class":1927},[76,107713,100957],{"class":192},[76,107715,107716],{"class":192}," mujoco-render\n",[76,107718,107719,107721,107723,107725,107727],{"class":78,"line":1143},[76,107720,23799],{"class":1927},[76,107722,23802],{"class":192},[76,107724,100899],{"class":192},[76,107726,107680],{"class":192},[76,107728,107683],{"class":192},[21,107730,107731],{},"离屏渲染后端:",[66,107733,107735],{"className":23790,"code":107734,"language":23792,"meta":71,"style":71},"export MUJOCO_GL=egl\n",[73,107736,107737],{"__ignoreMap":71},[76,107738,107739,107741,107744,107746],{"class":78,"line":79},[76,107740,25011],{"class":82},[76,107742,107743],{"class":86}," MUJOCO_GL",[76,107745,133],{"class":82},[76,107747,107748],{"class":86},"egl\n",[21,107750,107751],{},"或:",[66,107753,107755],{"className":23790,"code":107754,"language":23792,"meta":71,"style":71},"export MUJOCO_GL=osmesa\n",[73,107756,107757],{"__ignoreMap":71},[76,107758,107759,107761,107763,107765],{"class":78,"line":79},[76,107760,25011],{"class":82},[76,107762,107743],{"class":86},[76,107764,133],{"class":82},[76,107766,107767],{"class":86},"osmesa\n",[21,107769,107770,107771,107774,107775,28354],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[73,107772,107773],{},"egl"," 失败，再尝试 ",[73,107776,107777],{},"osmesa",[21,107779,107780,107781,107784],{},"如果你在本机桌面环境运行，通常先不要设置 ",[73,107782,107783],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[16,107786,101014],{"id":101013},[21,107788,107789],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[21,107791,107792],{},"典型 viewer 流程:",[66,107794,107796],{"className":30347,"code":107795,"language":30349,"meta":71,"style":71},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[73,107797,107798,107811,107818,107822],{"__ignoreMap":71},[76,107799,107800,107803,107806,107808],{"class":78,"line":79},[76,107801,107802],{"class":82},"with",[76,107804,107805],{"class":86}," mujoco.viewer.launch_passive(model, data) ",[76,107807,31352],{"class":82},[76,107809,107810],{"class":86}," viewer:\n",[76,107812,107813,107815],{"class":78,"line":96},[76,107814,2215],{"class":82},[76,107816,107817],{"class":86}," viewer.is_running():\n",[76,107819,107820],{"class":78,"line":1143},[76,107821,101485],{"class":86},[76,107823,107824],{"class":78,"line":1158},[76,107825,107826],{"class":86},"        viewer.sync()\n",[21,107828,107829],{},"典型 renderer 流程:",[66,107831,107833],{"className":30347,"code":107832,"language":30349,"meta":71,"style":71},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[73,107834,107835,107861,107865,107870],{"__ignoreMap":71},[76,107836,107837,107839,107841,107844,107846,107848,107850,107852,107854,107856,107859],{"class":78,"line":79},[76,107838,107539],{"class":86},[76,107840,133],{"class":82},[76,107842,107843],{"class":86}," mujoco.Renderer(model, ",[76,107845,24950],{"class":5183},[76,107847,133],{"class":82},[76,107849,42311],{"class":136},[76,107851,12402],{"class":86},[76,107853,24946],{"class":5183},[76,107855,133],{"class":82},[76,107857,107858],{"class":136},"640",[76,107860,93],{"class":86},[76,107862,107863],{"class":78,"line":96},[76,107864,104474],{"class":86},[76,107866,107867],{"class":78,"line":1143},[76,107868,107869],{"class":86},"renderer.update_scene(data)\n",[76,107871,107872,107874,107876],{"class":78,"line":1158},[76,107873,107549],{"class":86},[76,107875,133],{"class":82},[76,107877,107554],{"class":86},[46,107879,107881],{"id":107880},"viewer-的同步逻辑","viewer 的同步逻辑",[21,107883,107884],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[66,107886,107888],{"className":30347,"code":107887,"language":30349,"meta":71,"style":71},"mujoco.mj_step(model, data)\nviewer.sync()\n",[73,107889,107890,107894],{"__ignoreMap":71},[76,107891,107892],{"class":78,"line":79},[76,107893,104474],{"class":86},[76,107895,107896],{"class":78,"line":96},[76,107897,107898],{"class":86},"viewer.sync()\n",[21,107900,107901,107903,107904,107907],{},[73,107902,101184],{}," 负责算物理，",[73,107905,107906],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[46,107909,107911],{"id":107910},"为什么要-sleep","为什么要 sleep",[21,107913,107914],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[66,107916,107918],{"className":30347,"code":107917,"language":30349,"meta":71,"style":71},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[73,107919,107920],{"__ignoreMap":71},[76,107921,107922,107925,107927,107930,107932,107935,107937],{"class":78,"line":79},[76,107923,107924],{"class":86},"sleep_time ",[76,107926,133],{"class":82},[76,107928,107929],{"class":86}," model.opt.timestep ",[76,107931,620],{"class":82},[76,107933,107934],{"class":86}," (time.time() ",[76,107936,620],{"class":82},[76,107938,107939],{"class":86}," step_start)\n",[21,107941,107942],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[46,107944,107946],{"id":107945},"renderer-输出是什么","renderer 输出是什么",[66,107948,107950],{"className":30347,"code":107949,"language":30349,"meta":71,"style":71},"image = renderer.render()\n",[73,107951,107952],{"__ignoreMap":71},[76,107953,107954,107956,107958],{"class":78,"line":79},[76,107955,107549],{"class":86},[76,107957,133],{"class":82},[76,107959,107554],{"class":86},[21,107961,107962],{},"得到的是 NumPy 数组，形状通常是：",[66,107964,107967],{"className":107965,"code":107966,"language":5154,"meta":71},[5152],"(height, width, 3)\n",[73,107968,107966],{"__ignoreMap":71},[21,107970,107971],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[66,107973,107975],{"className":30347,"code":107974,"language":30349,"meta":71,"style":71},"Image.fromarray(image).save(\"render_output.png\")\n",[73,107976,107977],{"__ignoreMap":71},[76,107978,107979,107982,107985],{"class":78,"line":79},[76,107980,107981],{"class":86},"Image.fromarray(image).save(",[76,107983,107984],{"class":192},"\"render_output.png\"",[76,107986,93],{"class":86},[16,107988,101222],{"id":101221},[21,107990,107991],{},"交互式 Viewer:",[66,107993,107995],{"className":30347,"code":107994,"language":30349,"meta":71,"style":71},"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",[73,107996,107997,108003,108007,108013,108019,108023,108027,108035,108040,108044,108048,108052,108057,108062,108066,108070,108074,108079,108083,108087,108091,108095,108099,108103,108115,108127,108135,108139,108149,108169,108179,108184,108189,108193,108210,108223,108228,108232,108236,108248],{"__ignoreMap":71},[76,107998,107999,108001],{"class":78,"line":79},[76,108000,30361],{"class":82},[76,108002,31798],{"class":86},[76,108004,108005],{"class":78,"line":96},[76,108006,2365],{"emptyLinePlaceholder":2364},[76,108008,108009,108011],{"class":78,"line":1143},[76,108010,30361],{"class":82},[76,108012,101270],{"class":86},[76,108014,108015,108017],{"class":78,"line":1158},[76,108016,30361],{"class":82},[76,108018,107521],{"class":86},[76,108020,108021],{"class":78,"line":1164},[76,108022,2365],{"emptyLinePlaceholder":2364},[76,108024,108025],{"class":78,"line":1178},[76,108026,2365],{"emptyLinePlaceholder":2364},[76,108028,108029,108031,108033],{"class":78,"line":1184},[76,108030,101283],{"class":136},[76,108032,13531],{"class":82},[76,108034,101288],{"class":192},[76,108036,108037],{"class":78,"line":1275},[76,108038,108039],{"class":192},"\u003Cmujoco model=\"viewer_demo\">\n",[76,108041,108042],{"class":78,"line":1281},[76,108043,101298],{"class":192},[76,108045,108046],{"class":78,"line":1293},[76,108047,2365],{"emptyLinePlaceholder":2364},[76,108049,108050],{"class":78,"line":1576},[76,108051,101307],{"class":192},[76,108053,108054],{"class":78,"line":1581},[76,108055,108056],{"class":192},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[76,108058,108059],{"class":78,"line":1587},[76,108060,108061],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,108063,108064],{"class":78,"line":1592},[76,108065,2365],{"emptyLinePlaceholder":2364},[76,108067,108068],{"class":78,"line":1606},[76,108069,101321],{"class":192},[76,108071,108072],{"class":78,"line":1611},[76,108073,101326],{"class":192},[76,108075,108076],{"class":78,"line":1617},[76,108077,108078],{"class":192},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,108080,108081],{"class":78,"line":1638},[76,108082,101336],{"class":192},[76,108084,108085],{"class":78,"line":1643},[76,108086,101341],{"class":192},[76,108088,108089],{"class":78,"line":1657},[76,108090,101346],{"class":192},[76,108092,108093],{"class":78,"line":1662},[76,108094,95667],{"class":192},[76,108096,108097],{"class":78,"line":1691},[76,108098,2365],{"emptyLinePlaceholder":2364},[76,108100,108101],{"class":78,"line":1696},[76,108102,2365],{"emptyLinePlaceholder":2364},[76,108104,108105,108107,108109,108111,108113],{"class":78,"line":1713},[76,108106,31916],{"class":82},[76,108108,1937],{"class":1927},[76,108110,101367],{"class":86},[76,108112,95655],{"class":136},[76,108114,3704],{"class":86},[76,108116,108117,108119,108121,108123,108125],{"class":78,"line":1718},[76,108118,101376],{"class":86},[76,108120,133],{"class":82},[76,108122,101381],{"class":86},[76,108124,101283],{"class":136},[76,108126,93],{"class":86},[76,108128,108129,108131,108133],{"class":78,"line":1723},[76,108130,101390],{"class":86},[76,108132,133],{"class":82},[76,108134,101395],{"class":86},[76,108136,108137],{"class":78,"line":1728},[76,108138,2365],{"emptyLinePlaceholder":2364},[76,108140,108141,108143,108145,108147],{"class":78,"line":1742},[76,108142,34147],{"class":82},[76,108144,107805],{"class":86},[76,108146,31352],{"class":82},[76,108148,107810],{"class":86},[76,108150,108151,108154,108157,108159,108162,108164,108167],{"class":78,"line":1747},[76,108152,108153],{"class":82},"        while",[76,108155,108156],{"class":86}," viewer.is_running() ",[76,108158,30431],{"class":82},[76,108160,108161],{"class":86}," data.time ",[76,108163,998],{"class":82},[76,108165,108166],{"class":136}," 5.0",[76,108168,3704],{"class":86},[76,108170,108171,108174,108176],{"class":78,"line":2542},[76,108172,108173],{"class":86},"            step_start ",[76,108175,133],{"class":82},[76,108177,108178],{"class":86}," time.time()\n",[76,108180,108181],{"class":78,"line":2556},[76,108182,108183],{"class":86},"            mujoco.mj_step(model, data)\n",[76,108185,108186],{"class":78,"line":2564},[76,108187,108188],{"class":86},"            viewer.sync()\n",[76,108190,108191],{"class":78,"line":2569},[76,108192,2365],{"emptyLinePlaceholder":2364},[76,108194,108195,108198,108200,108202,108204,108206,108208],{"class":78,"line":2575},[76,108196,108197],{"class":86},"            sleep_time ",[76,108199,133],{"class":82},[76,108201,107929],{"class":86},[76,108203,620],{"class":82},[76,108205,107934],{"class":86},[76,108207,620],{"class":82},[76,108209,107939],{"class":86},[76,108211,108212,108214,108217,108219,108221],{"class":78,"line":2581},[76,108213,4607],{"class":82},[76,108215,108216],{"class":86}," sleep_time ",[76,108218,1048],{"class":82},[76,108220,4058],{"class":136},[76,108222,3704],{"class":86},[76,108224,108225],{"class":78,"line":2586},[76,108226,108227],{"class":86},"                time.sleep(sleep_time)\n",[76,108229,108230],{"class":78,"line":7915},[76,108231,2365],{"emptyLinePlaceholder":2364},[76,108233,108234],{"class":78,"line":7939},[76,108235,2365],{"emptyLinePlaceholder":2364},[76,108237,108238,108240,108242,108244,108246],{"class":78,"line":7944},[76,108239,1495],{"class":82},[76,108241,31189],{"class":136},[76,108243,101528],{"class":82},[76,108245,101531],{"class":192},[76,108247,3704],{"class":86},[76,108249,108250],{"class":78,"line":7950},[76,108251,101538],{"class":86},[21,108253,103539],{},[66,108255,108257],{"className":23790,"code":108256,"language":23792,"meta":71,"style":71},"touch ch5_viewer.py\n",[73,108258,108259],{"__ignoreMap":71},[76,108260,108261,108263],{"class":78,"line":79},[76,108262,101252],{"class":1927},[76,108264,108265],{"class":192}," ch5_viewer.py\n",[21,108267,108268],{},"离屏 Renderer 保存图片:",[66,108270,108272],{"className":30347,"code":108271,"language":30349,"meta":71,"style":71},"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",[73,108273,108274,108286,108290,108296,108306,108310,108314,108322,108327,108331,108335,108339,108343,108348,108352,108356,108360,108364,108368,108372,108376,108380,108384,108388,108392,108404,108416,108424,108449,108453,108469,108473,108477,108492,108501,108505,108519,108524,108529,108533,108545,108557,108561,108565,108577],{"__ignoreMap":71},[76,108275,108276,108278,108281,108283],{"class":78,"line":79},[76,108277,30706],{"class":82},[76,108279,108280],{"class":86}," pathlib ",[76,108282,30361],{"class":82},[76,108284,108285],{"class":86}," Path\n",[76,108287,108288],{"class":78,"line":96},[76,108289,2365],{"emptyLinePlaceholder":2364},[76,108291,108292,108294],{"class":78,"line":1143},[76,108293,30361],{"class":82},[76,108295,101270],{"class":86},[76,108297,108298,108300,108302,108304],{"class":78,"line":1158},[76,108299,30706],{"class":82},[76,108301,47232],{"class":136},[76,108303,47235],{"class":82},[76,108305,47238],{"class":86},[76,108307,108308],{"class":78,"line":1164},[76,108309,2365],{"emptyLinePlaceholder":2364},[76,108311,108312],{"class":78,"line":1178},[76,108313,2365],{"emptyLinePlaceholder":2364},[76,108315,108316,108318,108320],{"class":78,"line":1184},[76,108317,101283],{"class":136},[76,108319,13531],{"class":82},[76,108321,101288],{"class":192},[76,108323,108324],{"class":78,"line":1275},[76,108325,108326],{"class":192},"\u003Cmujoco model=\"renderer_demo\">\n",[76,108328,108329],{"class":78,"line":1281},[76,108330,101298],{"class":192},[76,108332,108333],{"class":78,"line":1293},[76,108334,2365],{"emptyLinePlaceholder":2364},[76,108336,108337],{"class":78,"line":1576},[76,108338,101307],{"class":192},[76,108340,108341],{"class":78,"line":1581},[76,108342,108056],{"class":192},[76,108344,108345],{"class":78,"line":1587},[76,108346,108347],{"class":192},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[76,108349,108350],{"class":78,"line":1592},[76,108351,108061],{"class":192},[76,108353,108354],{"class":78,"line":1606},[76,108355,2365],{"emptyLinePlaceholder":2364},[76,108357,108358],{"class":78,"line":1611},[76,108359,101321],{"class":192},[76,108361,108362],{"class":78,"line":1617},[76,108363,101326],{"class":192},[76,108365,108366],{"class":78,"line":1638},[76,108367,108078],{"class":192},[76,108369,108370],{"class":78,"line":1643},[76,108371,101336],{"class":192},[76,108373,108374],{"class":78,"line":1657},[76,108375,101341],{"class":192},[76,108377,108378],{"class":78,"line":1662},[76,108379,101346],{"class":192},[76,108381,108382],{"class":78,"line":1691},[76,108383,95667],{"class":192},[76,108385,108386],{"class":78,"line":1696},[76,108387,2365],{"emptyLinePlaceholder":2364},[76,108389,108390],{"class":78,"line":1713},[76,108391,2365],{"emptyLinePlaceholder":2364},[76,108393,108394,108396,108398,108400,108402],{"class":78,"line":1718},[76,108395,31916],{"class":82},[76,108397,1937],{"class":1927},[76,108399,101367],{"class":86},[76,108401,95655],{"class":136},[76,108403,3704],{"class":86},[76,108405,108406,108408,108410,108412,108414],{"class":78,"line":1723},[76,108407,101376],{"class":86},[76,108409,133],{"class":82},[76,108411,101381],{"class":86},[76,108413,101283],{"class":136},[76,108415,93],{"class":86},[76,108417,108418,108420,108422],{"class":78,"line":1728},[76,108419,101390],{"class":86},[76,108421,133],{"class":82},[76,108423,101395],{"class":86},[76,108425,108426,108429,108431,108433,108435,108437,108439,108441,108443,108445,108447],{"class":78,"line":1742},[76,108427,108428],{"class":86},"    renderer ",[76,108430,133],{"class":82},[76,108432,107843],{"class":86},[76,108434,24950],{"class":5183},[76,108436,133],{"class":82},[76,108438,42311],{"class":136},[76,108440,12402],{"class":86},[76,108442,24946],{"class":5183},[76,108444,133],{"class":82},[76,108446,107858],{"class":136},[76,108448,93],{"class":86},[76,108450,108451],{"class":78,"line":1747},[76,108452,2365],{"emptyLinePlaceholder":2364},[76,108454,108455,108457,108459,108461,108463,108465,108467],{"class":78,"line":2542},[76,108456,3166],{"class":82},[76,108458,101470],{"class":86},[76,108460,26012],{"class":82},[76,108462,32412],{"class":136},[76,108464,87],{"class":86},[76,108466,399],{"class":136},[76,108468,30755],{"class":86},[76,108470,108471],{"class":78,"line":2556},[76,108472,101485],{"class":86},[76,108474,108475],{"class":78,"line":2564},[76,108476,2365],{"emptyLinePlaceholder":2364},[76,108478,108479,108482,108485,108487,108490],{"class":78,"line":2569},[76,108480,108481],{"class":86},"    renderer.update_scene(data, ",[76,108483,108484],{"class":5183},"camera",[76,108486,133],{"class":82},[76,108488,108489],{"class":192},"\"fixed_camera\"",[76,108491,93],{"class":86},[76,108493,108494,108497,108499],{"class":78,"line":2575},[76,108495,108496],{"class":86},"    image ",[76,108498,133],{"class":82},[76,108500,107554],{"class":86},[76,108502,108503],{"class":78,"line":2581},[76,108504,2365],{"emptyLinePlaceholder":2364},[76,108506,108507,108510,108512,108515,108517],{"class":78,"line":2586},[76,108508,108509],{"class":86},"    output_path ",[76,108511,133],{"class":82},[76,108513,108514],{"class":86}," Path(",[76,108516,107984],{"class":192},[76,108518,93],{"class":86},[76,108520,108521],{"class":78,"line":7915},[76,108522,108523],{"class":86},"    Image.fromarray(image).save(output_path)\n",[76,108525,108526],{"class":78,"line":7939},[76,108527,108528],{"class":86},"    renderer.close()\n",[76,108530,108531],{"class":78,"line":7944},[76,108532,2365],{"emptyLinePlaceholder":2364},[76,108534,108535,108537,108539,108542],{"class":78,"line":7950},[76,108536,31268],{"class":136},[76,108538,87],{"class":86},[76,108540,108541],{"class":192},"\"saved:\"",[76,108543,108544],{"class":86},", output_path.resolve())\n",[76,108546,108547,108549,108551,108554],{"class":78,"line":7977},[76,108548,31268],{"class":136},[76,108550,87],{"class":86},[76,108552,108553],{"class":192},"\"image shape:\"",[76,108555,108556],{"class":86},", image.shape)\n",[76,108558,108559],{"class":78,"line":7982},[76,108560,2365],{"emptyLinePlaceholder":2364},[76,108562,108563],{"class":78,"line":7988},[76,108564,2365],{"emptyLinePlaceholder":2364},[76,108566,108567,108569,108571,108573,108575],{"class":78,"line":8000},[76,108568,1495],{"class":82},[76,108570,31189],{"class":136},[76,108572,101528],{"class":82},[76,108574,101531],{"class":192},[76,108576,3704],{"class":86},[76,108578,108579],{"class":78,"line":8012},[76,108580,101538],{"class":86},[21,108582,103539],{},[66,108584,108586],{"className":23790,"code":108585,"language":23792,"meta":71,"style":71},"touch ch5_renderer.py\n",[73,108587,108588],{"__ignoreMap":71},[76,108589,108590,108592],{"class":78,"line":79},[76,108591,101252],{"class":1927},[76,108593,108594],{"class":192}," ch5_renderer.py\n",[46,108596,101541],{"id":101541},[21,108598,108599],{},"viewer 上下文：",[66,108601,108603],{"className":30347,"code":108602,"language":30349,"meta":71,"style":71},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[73,108604,108605],{"__ignoreMap":71},[76,108606,108607,108609,108611,108613],{"class":78,"line":79},[76,108608,107802],{"class":82},[76,108610,107805],{"class":86},[76,108612,31352],{"class":82},[76,108614,107810],{"class":86},[21,108616,108617,108619],{},[73,108618,107802],{}," 语句会创建窗口，并在退出时自动清理资源。",[21,108621,108622],{},"窗口循环：",[66,108624,108626],{"className":30347,"code":108625,"language":30349,"meta":71,"style":71},"while viewer.is_running() and data.time \u003C 5.0:\n",[73,108627,108628],{"__ignoreMap":71},[76,108629,108630,108633,108635,108637,108639,108641,108643],{"class":78,"line":79},[76,108631,108632],{"class":82},"while",[76,108634,108156],{"class":86},[76,108636,30431],{"class":82},[76,108638,108161],{"class":86},[76,108640,998],{"class":82},[76,108642,108166],{"class":136},[76,108644,3704],{"class":86},[21,108646,108647],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[21,108649,108650],{},"固定相机：",[66,108652,108654],{"className":53036,"code":108653,"language":53038,"meta":71,"style":71},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[73,108655,108656],{"__ignoreMap":71},[76,108657,108658,108660,108662,108664,108666,108668,108670,108672,108675,108678,108680,108683],{"class":78,"line":79},[76,108659,998],{"class":86},[76,108661,108484],{"class":51269},[76,108663,14887],{"class":1927},[76,108665,133],{"class":86},[76,108667,108489],{"class":192},[76,108669,101075],{"class":1927},[76,108671,133],{"class":86},[76,108673,108674],{"class":192},"\"1.5 -2.0 1.2\"",[76,108676,108677],{"class":1927}," xyaxes",[76,108679,133],{"class":86},[76,108681,108682],{"class":192},"\"1 0.75 0 0 0 1\"",[76,108684,101113],{"class":86},[21,108686,108687],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[46,108689,108691],{"id":108690},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[66,108693,108695],{"className":30347,"code":108694,"language":30349,"meta":71,"style":71},"import time\n",[73,108696,108697],{"__ignoreMap":71},[76,108698,108699,108701],{"class":78,"line":79},[76,108700,30361],{"class":82},[76,108702,31798],{"class":86},[21,108704,108705],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[66,108707,108709],{"className":30347,"code":108708,"language":30349,"meta":71,"style":71},"import mujoco\nimport mujoco.viewer\n",[73,108710,108711,108717],{"__ignoreMap":71},[76,108712,108713,108715],{"class":78,"line":79},[76,108714,30361],{"class":82},[76,108716,101270],{"class":86},[76,108718,108719,108721],{"class":78,"line":96},[76,108720,30361],{"class":82},[76,108722,107521],{"class":86},[21,108724,108725],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[66,108727,108728],{"className":30347,"code":108602,"language":30349,"meta":71,"style":71},[73,108729,108730],{"__ignoreMap":71},[76,108731,108732,108734,108736,108738],{"class":78,"line":79},[76,108733,107802],{"class":82},[76,108735,107805],{"class":86},[76,108737,31352],{"class":82},[76,108739,107810],{"class":86},[21,108741,108742,108743,108746],{},"打开一个 viewer 窗口。",[73,108744,108745],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[66,108748,108749],{"className":30347,"code":108625,"language":30349,"meta":71,"style":71},[73,108750,108751],{"__ignoreMap":71},[76,108752,108753,108755,108757,108759,108761,108763,108765],{"class":78,"line":79},[76,108754,108632],{"class":82},[76,108756,108156],{"class":86},[76,108758,30431],{"class":82},[76,108760,108161],{"class":86},[76,108762,998],{"class":82},[76,108764,108166],{"class":136},[76,108766,3704],{"class":86},[21,108768,108769,108770,108773],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[73,108771,108772],{},"viewer.is_running()"," 会变成 false，循环结束。",[66,108775,108777],{"className":30347,"code":108776,"language":30349,"meta":71,"style":71},"step_start = time.time()\n",[73,108778,108779],{"__ignoreMap":71},[76,108780,108781,108784,108786],{"class":78,"line":79},[76,108782,108783],{"class":86},"step_start ",[76,108785,133],{"class":82},[76,108787,108178],{"class":86},[21,108789,108790],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[66,108792,108793],{"className":30347,"code":107887,"language":30349,"meta":71,"style":71},[73,108794,108795,108799],{"__ignoreMap":71},[76,108796,108797],{"class":78,"line":79},[76,108798,104474],{"class":86},[76,108800,108801],{"class":78,"line":96},[76,108802,107898],{"class":86},[21,108804,108805,108807,108808,108810,108811,108813,108814,108817],{},[73,108806,101184],{}," 推进物理仿真。",[73,108809,107906],{}," 把最新的 ",[73,108812,33370],{}," 同步到窗口里显示。没有 ",[73,108815,108816],{},"sync()","，窗口可能看不到最新状态。",[66,108819,108820],{"className":30347,"code":107917,"language":30349,"meta":71,"style":71},[73,108821,108822],{"__ignoreMap":71},[76,108823,108824,108826,108828,108830,108832,108834,108836],{"class":78,"line":79},[76,108825,107924],{"class":86},[76,108827,133],{"class":82},[76,108829,107929],{"class":86},[76,108831,620],{"class":82},[76,108833,107934],{"class":86},[76,108835,620],{"class":82},[76,108837,107939],{"class":86},[21,108839,108840],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[66,108842,108844],{"className":30347,"code":108843,"language":30349,"meta":71,"style":71},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[73,108845,108846,108858],{"__ignoreMap":71},[76,108847,108848,108850,108852,108854,108856],{"class":78,"line":79},[76,108849,1495],{"class":82},[76,108851,108216],{"class":86},[76,108853,1048],{"class":82},[76,108855,4058],{"class":136},[76,108857,3704],{"class":86},[76,108859,108860],{"class":78,"line":96},[76,108861,108862],{"class":86},"    time.sleep(sleep_time)\n",[21,108864,108865],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[46,108867,108869],{"id":108868},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[66,108871,108873],{"className":30347,"code":108872,"language":30349,"meta":71,"style":71},"from pathlib import Path\n",[73,108874,108875],{"__ignoreMap":71},[76,108876,108877,108879,108881,108883],{"class":78,"line":79},[76,108878,30706],{"class":82},[76,108880,108280],{"class":86},[76,108882,30361],{"class":82},[76,108884,108285],{"class":86},[21,108886,108887,108888,108891,108892,108895],{},"导入 ",[73,108889,108890],{},"Path","，用来处理文件路径。相比直接写字符串，",[73,108893,108894],{},"Path(\"render_output.png\")"," 更清晰。",[66,108897,108899],{"className":30347,"code":108898,"language":30349,"meta":71,"style":71},"from PIL import Image\n",[73,108900,108901],{"__ignoreMap":71},[76,108902,108903,108905,108907,108909],{"class":78,"line":79},[76,108904,30706],{"class":82},[76,108906,47232],{"class":136},[76,108908,47235],{"class":82},[76,108910,47238],{"class":86},[21,108912,108913],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[66,108915,108916],{"className":53036,"code":108653,"language":53038,"meta":71,"style":71},[73,108917,108918],{"__ignoreMap":71},[76,108919,108920,108922,108924,108926,108928,108930,108932,108934,108936,108938,108940,108942],{"class":78,"line":79},[76,108921,998],{"class":86},[76,108923,108484],{"class":51269},[76,108925,14887],{"class":1927},[76,108927,133],{"class":86},[76,108929,108489],{"class":192},[76,108931,101075],{"class":1927},[76,108933,133],{"class":86},[76,108935,108674],{"class":192},[76,108937,108677],{"class":1927},[76,108939,133],{"class":86},[76,108941,108682],{"class":192},[76,108943,101113],{"class":86},[21,108945,108946,108947,108949,108950,108952,108953,108956,108957,108959],{},"定义一个相机。",[73,108948,79779],{}," 是相机名字。",[73,108951,104115],{}," 是相机在世界里的位置。",[73,108954,108955],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[73,108958,104115],{}," 来调视角。",[66,108961,108963],{"className":30347,"code":108962,"language":30349,"meta":71,"style":71},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[73,108964,108965],{"__ignoreMap":71},[76,108966,108967,108969,108971,108973,108975,108977,108979,108981,108983,108985,108987],{"class":78,"line":79},[76,108968,107539],{"class":86},[76,108970,133],{"class":82},[76,108972,107843],{"class":86},[76,108974,24950],{"class":5183},[76,108976,133],{"class":82},[76,108978,42311],{"class":136},[76,108980,12402],{"class":86},[76,108982,24946],{"class":5183},[76,108984,133],{"class":82},[76,108986,107858],{"class":136},[76,108988,93],{"class":86},[21,108990,108991,108992,100987,108994,108996],{},"创建离屏渲染器。",[73,108993,24950],{},[73,108995,24946],{}," 决定输出图片大小。",[66,108998,108999],{"className":30347,"code":101645,"language":30349,"meta":71,"style":71},[73,109000,109001,109017],{"__ignoreMap":71},[76,109002,109003,109005,109007,109009,109011,109013,109015],{"class":78,"line":79},[76,109004,2990],{"class":82},[76,109006,101470],{"class":86},[76,109008,26012],{"class":82},[76,109010,32412],{"class":136},[76,109012,87],{"class":86},[76,109014,399],{"class":136},[76,109016,30755],{"class":86},[76,109018,109019],{"class":78,"line":96},[76,109020,101668],{"class":86},[21,109022,109023],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[66,109025,109027],{"className":30347,"code":109026,"language":30349,"meta":71,"style":71},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[73,109028,109029],{"__ignoreMap":71},[76,109030,109031,109034,109036,109038,109040],{"class":78,"line":79},[76,109032,109033],{"class":86},"renderer.update_scene(data, ",[76,109035,108484],{"class":5183},[76,109037,133],{"class":82},[76,109039,108489],{"class":192},[76,109041,93],{"class":86},[21,109043,109044,109045,109047,109048,109051],{},"告诉 renderer：用当前 ",[73,109046,33370],{}," 的状态更新画面，并使用名为 ",[73,109049,109050],{},"fixed_camera"," 的相机视角。",[66,109053,109054],{"className":30347,"code":107949,"language":30349,"meta":71,"style":71},[73,109055,109056],{"__ignoreMap":71},[76,109057,109058,109060,109062],{"class":78,"line":79},[76,109059,107549],{"class":86},[76,109061,133],{"class":82},[76,109063,107554],{"class":86},[21,109065,109066,109067,109070],{},"真正渲染出图像。",[73,109068,109069],{},"image"," 是一个 NumPy 数组，不是文件。",[66,109072,109074],{"className":30347,"code":109073,"language":30349,"meta":71,"style":71},"Image.fromarray(image).save(output_path)\n",[73,109075,109076],{"__ignoreMap":71},[76,109077,109078],{"class":78,"line":79},[76,109079,109073],{"class":86},[21,109081,109082,109083,28354],{},"把数组转换成图片，并保存到 ",[73,109084,109085],{},"render_output.png",[66,109087,109089],{"className":30347,"code":109088,"language":30349,"meta":71,"style":71},"renderer.close()\n",[73,109090,109091],{"__ignoreMap":71},[76,109092,109093],{"class":78,"line":79},[76,109094,109088],{"class":86},[21,109096,109097],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[16,109099,102285],{"id":102284},[21,109101,109102,109103,109105,109106,28354],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[73,109104,109085],{},"，并输出图像数组形状，例如 ",[73,109107,109108],{},"(480, 640, 3)",[21,109110,109111],{},"如果图片里看不到方块，先检查：",[29,109113,109114,109117,109120],{},[32,109115,109116],{},"方块是否掉到相机视野外。",[32,109118,109119],{},"camera 位置是否合理。",[32,109121,109122,109123,109126],{},"是否在 ",[73,109124,109125],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[16,109128,102317],{"id":102316},[21,109130,109131],{},"运行 viewer:",[66,109133,109135],{"className":23790,"code":109134,"language":23792,"meta":71,"style":71},"python ch5_viewer.py\n",[73,109136,109137],{"__ignoreMap":71},[76,109138,109139,109141],{"class":78,"line":79},[76,109140,30349],{"class":1927},[76,109142,108265],{"class":192},[21,109144,109145],{},"运行 renderer:",[66,109147,109149],{"className":23790,"code":109148,"language":23792,"meta":71,"style":71},"python ch5_renderer.py\n",[73,109150,109151],{"__ignoreMap":71},[76,109152,109153,109155],{"class":78,"line":79},[76,109154,30349],{"class":1927},[76,109156,108594],{"class":192},[21,109158,109159],{},"如果在服务器上运行:",[66,109161,109163],{"className":23790,"code":109162,"language":23792,"meta":71,"style":71},"MUJOCO_GL=egl python ch5_renderer.py\n",[73,109164,109165],{"__ignoreMap":71},[76,109166,109167,109169,109171,109173,109176],{"class":78,"line":79},[76,109168,107783],{"class":86},[76,109170,133],{"class":82},[76,109172,107773],{"class":192},[76,109174,109175],{"class":1927}," python",[76,109177,108594],{"class":192},[21,109179,107751],{},[66,109181,109183],{"className":23790,"code":109182,"language":23792,"meta":71,"style":71},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[73,109184,109185],{"__ignoreMap":71},[76,109186,109187,109189,109191,109193,109195],{"class":78,"line":79},[76,109188,107783],{"class":86},[76,109190,133],{"class":82},[76,109192,107777],{"class":192},[76,109194,109175],{"class":1927},[76,109196,108594],{"class":192},[21,109198,109199],{},"再做几个练习：",[29,109201,109202,109209,109212,109218],{},[32,109203,109204,109205,109208],{},"把 renderer 分辨率改成 ",[73,109206,109207],{},"height=240, width=320","，观察输出 shape。",[32,109210,109211],{},"把方块颜色改成蓝色，重新保存图片。",[32,109213,109214,109215,109217],{},"把相机 ",[73,109216,104115],{}," 改远一点，观察画面中物体是否变小。",[32,109219,109220,109221,102383,109224,109227],{},"把 viewer 示例中的 ",[73,109222,109223],{},"data.time \u003C 5.0",[73,109225,109226],{},"data.time \u003C 20.0","，观察更长时间。",[16,109229,102422],{"id":102421},[46,109231,109233],{"id":109232},"viewer-窗口打不开","viewer 窗口打不开",[21,109235,109236],{},"安装:",[66,109238,109240],{"className":23790,"code":109239,"language":23792,"meta":71,"style":71},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[73,109241,109242],{"__ignoreMap":71},[76,109243,109244,109246,109248,109250,109252,109254,109256,109258,109260,109262,109264],{"class":78,"line":79},[76,109245,24545],{"class":1927},[76,109247,26284],{"class":192},[76,109249,23802],{"class":192},[76,109251,26369],{"class":136},[76,109253,102475],{"class":192},[76,109255,100803],{"class":192},[76,109257,102480],{"class":192},[76,109259,100816],{"class":192},[76,109261,100822],{"class":192},[76,109263,100813],{"class":192},[76,109265,109266],{"class":192}," libXinerama\n",[46,109268,109270],{"id":109269},"glfwerror",[73,109271,109272],{},"GLFWError",[21,109274,109275],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[46,109277,109279],{"id":109278},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[21,109281,109282,109283,82508,109285,109287],{},"尝试 ",[73,109284,101006],{},[73,109286,101009],{},"。可能存在版本差异。",[46,109289,109290],{"id":109290},"保存图片是黑的",[21,109292,102544],{},[29,109294,109295,109298,109301,109311],{},[32,109296,109297],{},"XML 里是否有 light。",[32,109299,109300],{},"相机是否对着模型。",[32,109302,109303,109304,109307,109308,28354],{},"是否先 ",[73,109305,109306],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[73,109309,109310],{},"renderer.render()",[32,109312,109313],{},"物体是否已经掉出视野。",[46,109315,109316],{"id":109316},"远程服务器没有显示器",[21,109318,109319],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[66,109321,109322],{"className":23790,"code":109162,"language":23792,"meta":71,"style":71},[73,109323,109324],{"__ignoreMap":71},[76,109325,109326,109328,109330,109332,109334],{"class":78,"line":79},[76,109327,107783],{"class":86},[76,109329,133],{"class":82},[76,109331,107773],{"class":192},[76,109333,109175],{"class":1927},[76,109335,108594],{"class":192},[21,109337,109338],{},"如果 EGL 不可用，再尝试：",[66,109340,109341],{"className":23790,"code":109182,"language":23792,"meta":71,"style":71},[73,109342,109343],{"__ignoreMap":71},[76,109344,109345,109347,109349,109351,109353],{"class":78,"line":79},[76,109346,107783],{"class":86},[76,109348,133],{"class":82},[76,109350,107777],{"class":192},[76,109352,109175],{"class":1927},[76,109354,108594],{"class":192},[16,109356,102576],{"id":102575},[21,109358,109359],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[29,109361,109362,109365,109368],{},[32,109363,109364],{},"先用 viewer 看模型和控制是否正常。",[32,109366,109367],{},"再用 renderer 保存图片或构造视觉观测。",[32,109369,109370],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5092,109372,109373],{},"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":71,"searchDepth":96,"depth":96,"links":109375},[109376,109377,109378,109383,109388,109389,109390,109397],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":109379},[109380,109381,109382],{"id":107880,"depth":1143,"text":107881},{"id":107910,"depth":1143,"text":107911},{"id":107945,"depth":1143,"text":107946},{"id":101221,"depth":96,"text":101222,"children":109384},[109385,109386,109387],{"id":101541,"depth":1143,"text":101541},{"id":108690,"depth":1143,"text":108691},{"id":108868,"depth":1143,"text":108869},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":109391},[109392,109393,109394,109395,109396],{"id":109232,"depth":1143,"text":109233},{"id":109269,"depth":1143,"text":109272},{"id":109278,"depth":1143,"text":109279},{"id":109290,"depth":1143,"text":109290},{"id":109316,"depth":1143,"text":109316},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107488,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109404,"title":109405,"body":109406,"description":71,"extension":5123,"meta":111317,"navigation":2364,"path":111318,"seo":111319,"stem":111320,"__hash__":111321},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":9,"value":109407,"toc":111293},[109408,109411,109413,109416,109418,109437,109440,109446,109449,109451,109453,109477,109479,109493,109495,109536,109538,109549,109551,109554,109560,109563,109597,109600,109632,109635,109667,109671,109674,109714,109717,109723,109726,109732,109736,109739,109745,109748,109752,109755,109795,109797,109810,109813,109815,110397,110399,110411,110414,110425,110427,110430,110449,110461,110464,110485,110488,110491,110534,110537,110540,110560,110567,110569,110587,110602,110605,110611,110614,110620,110637,110644,110675,110686,110720,110731,110748,110757,110765,110770,110784,110787,110808,110814,110828,110833,110863,110873,110898,110906,110929,110932,110948,110951,110959,110965,110987,111000,111021,111030,111069,111080,111082,111085,111091,111094,111097,111103,111106,111126,111129,111131,111170,111172,111175,111183,111186,111189,111216,111219,111229,111235,111238,111244,111246,111252,111256,111259,111261,111264,111288,111291],[12,109409,109405],{"id":109410},"_6控制任务cartpole",[16,109412,100616],{"id":100615},[21,109414,109415],{},"本章搭建一个最小 Cartpole 控制任务。",[21,109417,104300],{},[29,109419,109420,109423,109425,109428,109431,109434],{},[32,109421,109422],{},"slide joint",[32,109424,106153],{},[32,109426,109427],{},"cart force actuator",[32,109429,109430],{},"状态观测",[32,109432,109433],{},"简单控制循环",[32,109435,109436],{},"reward 设计雏形",[21,109438,109439],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[66,109441,109444],{"className":109442,"code":109443,"language":5154,"meta":71},[5152],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[73,109445,109443],{"__ignoreMap":71},[21,109447,109448],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[16,109450,100739],{"id":100738},[21,109452,100742],{},[66,109454,109455],{"className":23790,"code":104357,"language":23792,"meta":71,"style":71},[73,109456,109457],{"__ignoreMap":71},[76,109458,109459,109461,109463,109465,109467,109469,109471,109473,109475],{"class":78,"line":79},[76,109460,24545],{"class":1927},[76,109462,26284],{"class":192},[76,109464,23802],{"class":192},[76,109466,26369],{"class":136},[76,109468,104372],{"class":192},[76,109470,100767],{"class":192},[76,109472,102470],{"class":192},[76,109474,100783],{"class":192},[76,109476,104381],{"class":192},[21,109478,102788],{},[66,109480,109481],{"className":23790,"code":100888,"language":23792,"meta":71,"style":71},[73,109482,109483],{"__ignoreMap":71},[76,109484,109485,109487,109489,109491],{"class":78,"line":79},[76,109486,23799],{"class":1927},[76,109488,23802],{"class":192},[76,109490,100899],{"class":192},[76,109492,100902],{"class":192},[21,109494,102805],{},[66,109496,109498],{"className":23790,"code":109497,"language":23792,"meta":71,"style":71},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[73,109499,109500,109517,109526],{"__ignoreMap":71},[76,109501,109502,109504,109506,109508,109511,109513,109515],{"class":78,"line":79},[76,109503,30299],{"class":1927},[76,109505,29145],{"class":192},[76,109507,25084],{"class":136},[76,109509,109510],{"class":192}," mujoco-cartpole",[76,109512,100944],{"class":192},[76,109514,100947],{"class":136},[76,109516,100950],{"class":136},[76,109518,109519,109521,109523],{"class":78,"line":96},[76,109520,30299],{"class":1927},[76,109522,100957],{"class":192},[76,109524,109525],{"class":192}," mujoco-cartpole\n",[76,109527,109528,109530,109532,109534],{"class":78,"line":1143},[76,109529,23799],{"class":1927},[76,109531,23802],{"class":192},[76,109533,100899],{"class":192},[76,109535,100902],{"class":192},[21,109537,100973],{},[29,109539,109540,109543,109546],{},[32,109541,109542],{},"本章不依赖 Gymnasium。",[32,109544,109545],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[32,109547,109548],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[16,109550,101014],{"id":101013},[21,109552,109553],{},"Cartpole 的模型结构:",[66,109555,109558],{"className":109556,"code":109557,"language":5154,"meta":71},[5152],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[73,109559,109557],{"__ignoreMap":71},[21,109561,109562],{},"小车通过 slide joint 左右移动:",[66,109564,109566],{"className":53036,"code":109565,"language":53038,"meta":71,"style":71},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[73,109567,109568],{"__ignoreMap":71},[76,109569,109570,109572,109574,109576,109578,109581,109583,109585,109588,109590,109592,109595],{"class":78,"line":79},[76,109571,998],{"class":86},[76,109573,102925],{"class":51269},[76,109575,14887],{"class":1927},[76,109577,133],{"class":86},[76,109579,109580],{"class":192},"\"cart_x\"",[76,109582,53793],{"class":1927},[76,109584,133],{"class":86},[76,109586,109587],{"class":192},"\"slide\"",[76,109589,105997],{"class":1927},[76,109591,133],{"class":86},[76,109593,109594],{"class":192},"\"1 0 0\"",[76,109596,101113],{"class":86},[21,109598,109599],{},"杆子通过 hinge joint 旋转:",[66,109601,109603],{"className":53036,"code":109602,"language":53038,"meta":71,"style":71},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[73,109604,109605],{"__ignoreMap":71},[76,109606,109607,109609,109611,109613,109615,109618,109620,109622,109624,109626,109628,109630],{"class":78,"line":79},[76,109608,998],{"class":86},[76,109610,102925],{"class":51269},[76,109612,14887],{"class":1927},[76,109614,133],{"class":86},[76,109616,109617],{"class":192},"\"pole_hinge\"",[76,109619,53793],{"class":1927},[76,109621,133],{"class":86},[76,109623,105988],{"class":192},[76,109625,105997],{"class":1927},[76,109627,133],{"class":86},[76,109629,106002],{"class":192},[76,109631,101113],{"class":86},[21,109633,109634],{},"控制力作用在小车 slide joint 上:",[66,109636,109638],{"className":53036,"code":109637,"language":53038,"meta":71,"style":71},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[73,109639,109640],{"__ignoreMap":71},[76,109641,109642,109644,109646,109648,109650,109653,109655,109657,109659,109661,109663,109665],{"class":78,"line":79},[76,109643,998],{"class":86},[76,109645,106043],{"class":51269},[76,109647,14887],{"class":1927},[76,109649,133],{"class":86},[76,109651,109652],{"class":192},"\"cart_motor\"",[76,109654,106053],{"class":1927},[76,109656,133],{"class":86},[76,109658,109580],{"class":192},[76,109660,106060],{"class":1927},[76,109662,133],{"class":86},[76,109664,54285],{"class":192},[76,109666,101113],{"class":86},[46,109668,109670],{"id":109669},"cartpole-的状态是什么","Cartpole 的状态是什么",[21,109672,109673],{},"这个简化模型有两个关节：",[225,109675,109676,109687],{},[228,109677,109678],{},[231,109679,109680,109682,109684],{},[234,109681,102728],{"align":23704},[234,109683,23705],{"align":23704},[234,109685,109686],{"align":23704},"对应状态",[272,109688,109689,109702],{},[231,109690,109691,109696,109699],{},[277,109692,109693],{"align":23704},[73,109694,109695],{},"cart_x",[277,109697,109698],{"align":23704},"slide",[277,109700,109701],{"align":23704},"小车 x 位置",[231,109703,109704,109709,109711],{},[277,109705,109706],{"align":23704},[73,109707,109708],{},"pole_hinge",[277,109710,105809],{"align":23704},[277,109712,109713],{"align":23704},"杆子角度",[21,109715,109716],{},"所以：",[66,109718,109721],{"className":109719,"code":109720,"language":5154,"meta":71},[5152],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[73,109722,109720],{"__ignoreMap":71},[21,109724,109725],{},"把它们拼起来就是观测：",[66,109727,109730],{"className":109728,"code":109729,"language":5154,"meta":71},[5152],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[73,109731,109729],{"__ignoreMap":71},[46,109733,109735],{"id":109734},"action-是什么","action 是什么",[21,109737,109738],{},"本章只有一个 actuator：",[66,109740,109743],{"className":109741,"code":109742,"language":5154,"meta":71},[5152],"data.ctrl[0] = action\n",[73,109744,109742],{"__ignoreMap":71},[21,109746,109747],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[46,109749,109751],{"id":109750},"reward-是什么","reward 是什么",[21,109753,109754],{},"奖励函数：",[66,109756,109758],{"className":30347,"code":109757,"language":30349,"meta":71,"style":71},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[73,109759,109760],{"__ignoreMap":71},[76,109761,109762,109764,109767,109769,109771,109773,109776,109778,109781,109783,109785,109787,109790,109792],{"class":78,"line":79},[76,109763,17013],{"class":82},[76,109765,109766],{"class":136}," float",[76,109768,87],{"class":86},[76,109770,102372],{"class":136},[76,109772,52240],{"class":82},[76,109774,109775],{"class":136}," 0.1",[76,109777,6485],{"class":82},[76,109779,109780],{"class":86}," cart_x ",[76,109782,543],{"class":82},[76,109784,109780],{"class":86},[76,109786,620],{"class":82},[76,109788,109789],{"class":86}," pole_angle ",[76,109791,543],{"class":82},[76,109793,109794],{"class":86}," pole_angle)\n",[21,109796,106195],{},[29,109798,109799,109804,109807],{},[32,109800,109801,109802,28354],{},"基础奖励是 ",[73,109803,102372],{},[32,109805,109806],{},"小车离中心越远，扣分越多。",[32,109808,109809],{},"杆子角度越大，扣分越多。",[21,109811,109812],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[16,109814,101222],{"id":101221},[66,109816,109818],{"className":30347,"code":109817,"language":30349,"meta":71,"style":71},"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",[73,109819,109820,109826,109836,109840,109844,109852,109857,109861,109865,109869,109874,109878,109883,109888,109893,109897,109902,109907,109912,109916,109920,109924,109928,109932,109937,109941,109945,109949,109953,109957,109967,109974,109978,109982,109996,110010,110023,110053,110057,110061,110073,110085,110093,110097,110110,110114,110118,110127,110131,110147,110157,110170,110183,110187,110210,110228,110232,110244,110248,110252,110262,110272,110276,110292,110333,110337,110357,110373,110377,110381,110393],{"__ignoreMap":71},[76,109821,109822,109824],{"class":78,"line":79},[76,109823,30361],{"class":82},[76,109825,101270],{"class":86},[76,109827,109828,109830,109832,109834],{"class":78,"line":96},[76,109829,30361],{"class":82},[76,109831,31349],{"class":86},[76,109833,31352],{"class":82},[76,109835,31355],{"class":86},[76,109837,109838],{"class":78,"line":1143},[76,109839,2365],{"emptyLinePlaceholder":2364},[76,109841,109842],{"class":78,"line":1158},[76,109843,2365],{"emptyLinePlaceholder":2364},[76,109845,109846,109848,109850],{"class":78,"line":1164},[76,109847,101283],{"class":136},[76,109849,13531],{"class":82},[76,109851,101288],{"class":192},[76,109853,109854],{"class":78,"line":1178},[76,109855,109856],{"class":192},"\u003Cmujoco model=\"cartpole\">\n",[76,109858,109859],{"class":78,"line":1184},[76,109860,101298],{"class":192},[76,109862,109863],{"class":78,"line":1275},[76,109864,2365],{"emptyLinePlaceholder":2364},[76,109866,109867],{"class":78,"line":1281},[76,109868,101307],{"class":192},[76,109870,109871],{"class":78,"line":1293},[76,109872,109873],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,109875,109876],{"class":78,"line":1576},[76,109877,2365],{"emptyLinePlaceholder":2364},[76,109879,109880],{"class":78,"line":1581},[76,109881,109882],{"class":192},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[76,109884,109885],{"class":78,"line":1587},[76,109886,109887],{"class":192},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[76,109889,109890],{"class":78,"line":1592},[76,109891,109892],{"class":192},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[76,109894,109895],{"class":78,"line":1606},[76,109896,2365],{"emptyLinePlaceholder":2364},[76,109898,109899],{"class":78,"line":1611},[76,109900,109901],{"class":192},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[76,109903,109904],{"class":78,"line":1617},[76,109905,109906],{"class":192},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[76,109908,109909],{"class":78,"line":1638},[76,109910,109911],{"class":192},"        \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",[76,109913,109914],{"class":78,"line":1643},[76,109915,106407],{"class":192},[76,109917,109918],{"class":78,"line":1657},[76,109919,101336],{"class":192},[76,109921,109922],{"class":78,"line":1662},[76,109923,101341],{"class":192},[76,109925,109926],{"class":78,"line":1691},[76,109927,2365],{"emptyLinePlaceholder":2364},[76,109929,109930],{"class":78,"line":1696},[76,109931,106424],{"class":192},[76,109933,109934],{"class":78,"line":1713},[76,109935,109936],{"class":192},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,109938,109939],{"class":78,"line":1718},[76,109940,106434],{"class":192},[76,109942,109943],{"class":78,"line":1723},[76,109944,101346],{"class":192},[76,109946,109947],{"class":78,"line":1728},[76,109948,95667],{"class":192},[76,109950,109951],{"class":78,"line":1742},[76,109952,2365],{"emptyLinePlaceholder":2364},[76,109954,109955],{"class":78,"line":1747},[76,109956,2365],{"emptyLinePlaceholder":2364},[76,109958,109959,109961,109964],{"class":78,"line":2542},[76,109960,31916],{"class":82},[76,109962,109963],{"class":1927}," get_observation",[76,109965,109966],{"class":86},"(data: mujoco.MjData) -> np.ndarray:\n",[76,109968,109969,109971],{"class":78,"line":2556},[76,109970,4055],{"class":82},[76,109972,109973],{"class":86}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[76,109975,109976],{"class":78,"line":2564},[76,109977,2365],{"emptyLinePlaceholder":2364},[76,109979,109980],{"class":78,"line":2569},[76,109981,2365],{"emptyLinePlaceholder":2364},[76,109983,109984,109986,109989,109992,109994],{"class":78,"line":2575},[76,109985,31916],{"class":82},[76,109987,109988],{"class":1927}," compute_reward",[76,109990,109991],{"class":86},"(obs: np.ndarray) -> ",[76,109993,127],{"class":136},[76,109995,3704],{"class":86},[76,109997,109998,110001,110003,110006,110008],{"class":78,"line":2581},[76,109999,110000],{"class":86},"    cart_x ",[76,110002,133],{"class":82},[76,110004,110005],{"class":86}," obs[",[76,110007,279],{"class":136},[76,110009,33215],{"class":86},[76,110011,110012,110015,110017,110019,110021],{"class":78,"line":2586},[76,110013,110014],{"class":86},"    pole_angle ",[76,110016,133],{"class":82},[76,110018,110005],{"class":86},[76,110020,305],{"class":136},[76,110022,33215],{"class":86},[76,110024,110025,110027,110029,110031,110033,110035,110037,110039,110041,110043,110045,110047,110049,110051],{"class":78,"line":7915},[76,110026,4055],{"class":82},[76,110028,109766],{"class":136},[76,110030,87],{"class":86},[76,110032,102372],{"class":136},[76,110034,52240],{"class":82},[76,110036,109775],{"class":136},[76,110038,6485],{"class":82},[76,110040,109780],{"class":86},[76,110042,543],{"class":82},[76,110044,109780],{"class":86},[76,110046,620],{"class":82},[76,110048,109789],{"class":86},[76,110050,543],{"class":82},[76,110052,109794],{"class":86},[76,110054,110055],{"class":78,"line":7939},[76,110056,2365],{"emptyLinePlaceholder":2364},[76,110058,110059],{"class":78,"line":7944},[76,110060,2365],{"emptyLinePlaceholder":2364},[76,110062,110063,110065,110067,110069,110071],{"class":78,"line":7950},[76,110064,31916],{"class":82},[76,110066,1937],{"class":1927},[76,110068,101367],{"class":86},[76,110070,95655],{"class":136},[76,110072,3704],{"class":86},[76,110074,110075,110077,110079,110081,110083],{"class":78,"line":7977},[76,110076,101376],{"class":86},[76,110078,133],{"class":82},[76,110080,101381],{"class":86},[76,110082,101283],{"class":136},[76,110084,93],{"class":86},[76,110086,110087,110089,110091],{"class":78,"line":7982},[76,110088,101390],{"class":86},[76,110090,133],{"class":82},[76,110092,101395],{"class":86},[76,110094,110095],{"class":78,"line":7988},[76,110096,2365],{"emptyLinePlaceholder":2364},[76,110098,110099,110101,110103,110105,110107],{"class":78,"line":8000},[76,110100,105038],{"class":86},[76,110102,305],{"class":136},[76,110104,4408],{"class":86},[76,110106,133],{"class":82},[76,110108,110109],{"class":136}," 0.1\n",[76,110111,110112],{"class":78,"line":8012},[76,110113,105051],{"class":86},[76,110115,110116],{"class":78,"line":8024},[76,110117,2365],{"emptyLinePlaceholder":2364},[76,110119,110120,110123,110125],{"class":78,"line":9683},[76,110121,110122],{"class":86},"    total_reward ",[76,110124,133],{"class":82},[76,110126,104730],{"class":136},[76,110128,110129],{"class":78,"line":9708},[76,110130,2365],{"emptyLinePlaceholder":2364},[76,110132,110133,110135,110137,110139,110141,110143,110145],{"class":78,"line":9731},[76,110134,3166],{"class":82},[76,110136,31585],{"class":86},[76,110138,26012],{"class":82},[76,110140,32412],{"class":136},[76,110142,87],{"class":86},[76,110144,6377],{"class":136},[76,110146,30755],{"class":86},[76,110148,110149,110152,110154],{"class":78,"line":9755},[76,110150,110151],{"class":86},"        obs ",[76,110153,133],{"class":82},[76,110155,110156],{"class":86}," get_observation(data)\n",[76,110158,110159,110162,110164,110166,110168],{"class":78,"line":9760},[76,110160,110161],{"class":86},"        pole_angle ",[76,110163,133],{"class":82},[76,110165,110005],{"class":86},[76,110167,305],{"class":136},[76,110169,33215],{"class":86},[76,110171,110172,110175,110177,110179,110181],{"class":78,"line":9765},[76,110173,110174],{"class":86},"        pole_angular_velocity ",[76,110176,133],{"class":82},[76,110178,110005],{"class":86},[76,110180,159],{"class":136},[76,110182,33215],{"class":86},[76,110184,110185],{"class":78,"line":9770},[76,110186,2365],{"emptyLinePlaceholder":2364},[76,110188,110189,110192,110194,110197,110199,110201,110203,110205,110207],{"class":78,"line":9779},[76,110190,110191],{"class":86},"        action ",[76,110193,133],{"class":82},[76,110195,110196],{"class":136}," 2.0",[76,110198,6485],{"class":82},[76,110200,109789],{"class":86},[76,110202,569],{"class":82},[76,110204,61836],{"class":136},[76,110206,6485],{"class":82},[76,110208,110209],{"class":86}," pole_angular_velocity\n",[76,110211,110212,110214,110216,110218,110220,110222,110224,110226],{"class":78,"line":9784},[76,110213,110191],{"class":86},[76,110215,133],{"class":82},[76,110217,107416],{"class":86},[76,110219,620],{"class":82},[76,110221,102372],{"class":136},[76,110223,12402],{"class":86},[76,110225,102372],{"class":136},[76,110227,93],{"class":86},[76,110229,110230],{"class":78,"line":9790},[76,110231,2365],{"emptyLinePlaceholder":2364},[76,110233,110234,110236,110238,110240,110242],{"class":78,"line":9811},[76,110235,106586],{"class":86},[76,110237,279],{"class":136},[76,110239,4408],{"class":86},[76,110241,133],{"class":82},[76,110243,107439],{"class":86},[76,110245,110246],{"class":78,"line":9817},[76,110247,101485],{"class":86},[76,110249,110250],{"class":78,"line":9831},[76,110251,2365],{"emptyLinePlaceholder":2364},[76,110253,110254,110257,110259],{"class":78,"line":9837},[76,110255,110256],{"class":86},"        reward ",[76,110258,133],{"class":82},[76,110260,110261],{"class":86}," compute_reward(get_observation(data))\n",[76,110263,110264,110267,110269],{"class":78,"line":9864},[76,110265,110266],{"class":86},"        total_reward ",[76,110268,9444],{"class":82},[76,110270,110271],{"class":86}," reward\n",[76,110273,110274],{"class":78,"line":9873},[76,110275,2365],{"emptyLinePlaceholder":2364},[76,110277,110278,110280,110282,110284,110286,110288,110290],{"class":78,"line":9879},[76,110279,2462],{"class":82},[76,110281,31585],{"class":86},[76,110283,416],{"class":82},[76,110285,5721],{"class":136},[76,110287,101528],{"class":82},[76,110289,4058],{"class":136},[76,110291,3704],{"class":86},[76,110293,110294,110296,110298,110301,110304,110307,110310,110312,110315,110318,110320,110322,110324,110326,110329,110331],{"class":78,"line":9887},[76,110295,34619],{"class":136},[76,110297,87],{"class":86},[76,110299,110300],{"class":192},"\"step:\"",[76,110302,110303],{"class":86},", step, ",[76,110305,110306],{"class":192},"\"obs:\"",[76,110308,110309],{"class":86},", np.round(obs, ",[76,110311,159],{"class":136},[76,110313,110314],{"class":86},"), ",[76,110316,110317],{"class":192},"\"action:\"",[76,110319,12402],{"class":86},[76,110321,31987],{"class":136},[76,110323,87],{"class":86},[76,110325,127],{"class":136},[76,110327,110328],{"class":86},"(action), ",[76,110330,159],{"class":136},[76,110332,30466],{"class":86},[76,110334,110335],{"class":78,"line":9892},[76,110336,2365],{"emptyLinePlaceholder":2364},[76,110338,110339,110341,110343,110346,110348,110350,110353,110355],{"class":78,"line":16571},[76,110340,31268],{"class":136},[76,110342,87],{"class":86},[76,110344,110345],{"class":192},"\"total_reward:\"",[76,110347,12402],{"class":86},[76,110349,31987],{"class":136},[76,110351,110352],{"class":86},"(total_reward, ",[76,110354,159],{"class":136},[76,110356,30466],{"class":86},[76,110358,110359,110361,110363,110366,110369,110371],{"class":78,"line":16577},[76,110360,31268],{"class":136},[76,110362,87],{"class":86},[76,110364,110365],{"class":192},"\"final obs:\"",[76,110367,110368],{"class":86},", np.round(get_observation(data), ",[76,110370,159],{"class":136},[76,110372,30466],{"class":86},[76,110374,110375],{"class":78,"line":16600},[76,110376,2365],{"emptyLinePlaceholder":2364},[76,110378,110379],{"class":78,"line":16606},[76,110380,2365],{"emptyLinePlaceholder":2364},[76,110382,110383,110385,110387,110389,110391],{"class":78,"line":16629},[76,110384,1495],{"class":82},[76,110386,31189],{"class":136},[76,110388,101528],{"class":82},[76,110390,101531],{"class":192},[76,110392,3704],{"class":86},[76,110394,110395],{"class":78,"line":16643},[76,110396,101538],{"class":86},[21,110398,103539],{},[66,110400,110402],{"className":23790,"code":110401,"language":23792,"meta":71,"style":71},"touch ch6_cartpole.py\n",[73,110403,110404],{"__ignoreMap":71},[76,110405,110406,110408],{"class":78,"line":79},[76,110407,101252],{"class":1927},[76,110409,110410],{"class":192}," ch6_cartpole.py\n",[21,110412,110413],{},"运行：",[66,110415,110417],{"className":23790,"code":110416,"language":23792,"meta":71,"style":71},"python ch6_cartpole.py\n",[73,110418,110419],{"__ignoreMap":71},[76,110420,110421,110423],{"class":78,"line":79},[76,110422,30349],{"class":1927},[76,110424,110410],{"class":192},[46,110426,101541],{"id":101541},[21,110428,110429],{},"构造观测：",[66,110431,110433],{"className":30347,"code":110432,"language":30349,"meta":71,"style":71},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[73,110434,110435,110443],{"__ignoreMap":71},[76,110436,110437,110439,110441],{"class":78,"line":79},[76,110438,31916],{"class":82},[76,110440,109963],{"class":1927},[76,110442,109966],{"class":86},[76,110444,110445,110447],{"class":78,"line":96},[76,110446,4055],{"class":82},[76,110448,109973],{"class":86},[21,110450,110451,110454,110455,110457,110458,110460],{},[73,110452,110453],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[73,110456,103999],{}," 2 维，",[73,110459,104329],{}," 2 维，所以 obs 是 4 维。",[21,110462,110463],{},"设置初始角度：",[66,110465,110467],{"className":30347,"code":110466,"language":30349,"meta":71,"style":71},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[73,110468,110469,110481],{"__ignoreMap":71},[76,110470,110471,110473,110475,110477,110479],{"class":78,"line":79},[76,110472,104668],{"class":86},[76,110474,305],{"class":136},[76,110476,4408],{"class":86},[76,110478,133],{"class":82},[76,110480,110109],{"class":136},[76,110482,110483],{"class":78,"line":96},[76,110484,104512],{"class":86},[21,110486,110487],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[21,110489,110490],{},"简单反馈控制：",[66,110492,110494],{"className":30347,"code":110493,"language":30349,"meta":71,"style":71},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[73,110495,110496,110516],{"__ignoreMap":71},[76,110497,110498,110500,110502,110504,110506,110508,110510,110512,110514],{"class":78,"line":79},[76,110499,107411],{"class":86},[76,110501,133],{"class":82},[76,110503,110196],{"class":136},[76,110505,6485],{"class":82},[76,110507,109789],{"class":86},[76,110509,569],{"class":82},[76,110511,61836],{"class":136},[76,110513,6485],{"class":82},[76,110515,110209],{"class":86},[76,110517,110518,110520,110522,110524,110526,110528,110530,110532],{"class":78,"line":96},[76,110519,107411],{"class":86},[76,110521,133],{"class":82},[76,110523,107416],{"class":86},[76,110525,620],{"class":82},[76,110527,102372],{"class":136},[76,110529,12402],{"class":86},[76,110531,102372],{"class":136},[76,110533,93],{"class":86},[21,110535,110536],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[21,110538,110539],{},"限制动作：",[66,110541,110543],{"className":30347,"code":110542,"language":30349,"meta":71,"style":71},"np.clip(action, -1.0, 1.0)\n",[73,110544,110545],{"__ignoreMap":71},[76,110546,110547,110550,110552,110554,110556,110558],{"class":78,"line":79},[76,110548,110549],{"class":86},"np.clip(action, ",[76,110551,620],{"class":82},[76,110553,102372],{"class":136},[76,110555,12402],{"class":86},[76,110557,102372],{"class":136},[76,110559,93],{"class":86},[21,110561,110562,110563,110566],{},"因为 XML 里 ",[73,110564,110565],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[46,110568,101677],{"id":101677},[66,110570,110571],{"className":30347,"code":110432,"language":30349,"meta":71,"style":71},[73,110572,110573,110581],{"__ignoreMap":71},[76,110574,110575,110577,110579],{"class":78,"line":79},[76,110576,31916],{"class":82},[76,110578,109963],{"class":1927},[76,110580,109966],{"class":86},[76,110582,110583,110585],{"class":78,"line":96},[76,110584,4055],{"class":82},[76,110586,109973],{"class":86},[21,110588,110589,110590,110593,110594,110597,110598,110601],{},"这段定义了一个函数，用来获取当前观测。",[73,110591,110592],{},"data.qpos.copy()"," 是位置数组副本，",[73,110595,110596],{},"data.qvel.copy()"," 是速度数组副本。",[73,110599,110600],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[21,110603,110604],{},"在本章模型里：",[66,110606,110609],{"className":110607,"code":110608,"language":5154,"meta":71},[5152],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[73,110610,110608],{"__ignoreMap":71},[21,110612,110613],{},"所以返回的 obs 是：",[66,110615,110618],{"className":110616,"code":110617,"language":5154,"meta":71},[5152],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[73,110619,110617],{"__ignoreMap":71},[66,110621,110623],{"className":30347,"code":110622,"language":30349,"meta":71,"style":71},"def compute_reward(obs: np.ndarray) -> float:\n",[73,110624,110625],{"__ignoreMap":71},[76,110626,110627,110629,110631,110633,110635],{"class":78,"line":79},[76,110628,31916],{"class":82},[76,110630,109988],{"class":1927},[76,110632,109991],{"class":86},[76,110634,127],{"class":136},[76,110636,3704],{"class":86},[21,110638,110639,110640,110643],{},"这行定义奖励函数。输入是观测 ",[73,110641,110642],{},"obs","，输出是一个浮点数奖励。",[66,110645,110647],{"className":30347,"code":110646,"language":30349,"meta":71,"style":71},"cart_x = obs[0]\npole_angle = obs[1]\n",[73,110648,110649,110662],{"__ignoreMap":71},[76,110650,110651,110654,110656,110658,110660],{"class":78,"line":79},[76,110652,110653],{"class":86},"cart_x ",[76,110655,133],{"class":82},[76,110657,110005],{"class":86},[76,110659,279],{"class":136},[76,110661,33215],{"class":86},[76,110663,110664,110667,110669,110671,110673],{"class":78,"line":96},[76,110665,110666],{"class":86},"pole_angle ",[76,110668,133],{"class":82},[76,110670,110005],{"class":86},[76,110672,305],{"class":136},[76,110674,33215],{"class":86},[21,110676,110677,110678,110681,110682,110685],{},"数组索引从 0 开始。",[73,110679,110680],{},"obs[0]"," 是第一个元素，也就是小车位置。",[73,110683,110684],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[66,110687,110688],{"className":30347,"code":109757,"language":30349,"meta":71,"style":71},[73,110689,110690],{"__ignoreMap":71},[76,110691,110692,110694,110696,110698,110700,110702,110704,110706,110708,110710,110712,110714,110716,110718],{"class":78,"line":79},[76,110693,17013],{"class":82},[76,110695,109766],{"class":136},[76,110697,87],{"class":86},[76,110699,102372],{"class":136},[76,110701,52240],{"class":82},[76,110703,109775],{"class":136},[76,110705,6485],{"class":82},[76,110707,109780],{"class":86},[76,110709,543],{"class":82},[76,110711,109780],{"class":86},[76,110713,620],{"class":82},[76,110715,109789],{"class":86},[76,110717,543],{"class":82},[76,110719,109794],{"class":86},[21,110721,110722,110723,110726,110727,110730],{},"这行计算奖励。",[73,110724,110725],{},"cart_x * cart_x"," 是小车位置的平方，",[73,110728,110729],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[66,110732,110734],{"className":30347,"code":110733,"language":30349,"meta":71,"style":71},"data.qpos[1] = 0.1\n",[73,110735,110736],{"__ignoreMap":71},[76,110737,110738,110740,110742,110744,110746],{"class":78,"line":79},[76,110739,104668],{"class":86},[76,110741,305],{"class":136},[76,110743,4408],{"class":86},[76,110745,133],{"class":82},[76,110747,110109],{"class":136},[21,110749,110750,110751,110753,110754,110756],{},"手动设置杆子的初始角度。因为 ",[73,110752,105425],{}," 是小车位置，",[73,110755,105428],{}," 是杆子角度，所以这里改的是杆子。",[66,110758,110759],{"className":30347,"code":104512,"language":30349,"meta":71,"style":71},[73,110760,110761],{"__ignoreMap":71},[76,110762,110763],{"class":78,"line":79},[76,110764,104512],{"class":86},[21,110766,105471,110767,110769],{},[73,110768,103999],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[66,110771,110773],{"className":30347,"code":110772,"language":30349,"meta":71,"style":71},"total_reward = 0.0\n",[73,110774,110775],{"__ignoreMap":71},[76,110776,110777,110780,110782],{"class":78,"line":79},[76,110778,110779],{"class":86},"total_reward ",[76,110781,133],{"class":82},[76,110783,104730],{"class":136},[21,110785,110786],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[66,110788,110790],{"className":30347,"code":110789,"language":30349,"meta":71,"style":71},"for step in range(1000):\n",[73,110791,110792],{"__ignoreMap":71},[76,110793,110794,110796,110798,110800,110802,110804,110806],{"class":78,"line":79},[76,110795,2990],{"class":82},[76,110797,31585],{"class":86},[76,110799,26012],{"class":82},[76,110801,32412],{"class":136},[76,110803,87],{"class":86},[76,110805,6377],{"class":136},[76,110807,30755],{"class":86},[21,110809,110810,110811,110813],{},"循环 1000 步。",[73,110812,107103],{}," 是当前步数，从 0 到 999。",[66,110815,110817],{"className":30347,"code":110816,"language":30349,"meta":71,"style":71},"obs = get_observation(data)\n",[73,110818,110819],{"__ignoreMap":71},[76,110820,110821,110824,110826],{"class":78,"line":79},[76,110822,110823],{"class":86},"obs ",[76,110825,133],{"class":82},[76,110827,110156],{"class":86},[21,110829,110830,110831,28354],{},"读取当前状态，保存到 ",[73,110832,110642],{},[66,110834,110836],{"className":30347,"code":110835,"language":30349,"meta":71,"style":71},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[73,110837,110838,110850],{"__ignoreMap":71},[76,110839,110840,110842,110844,110846,110848],{"class":78,"line":79},[76,110841,110666],{"class":86},[76,110843,133],{"class":82},[76,110845,110005],{"class":86},[76,110847,305],{"class":136},[76,110849,33215],{"class":86},[76,110851,110852,110855,110857,110859,110861],{"class":78,"line":96},[76,110853,110854],{"class":86},"pole_angular_velocity ",[76,110856,133],{"class":82},[76,110858,110005],{"class":86},[76,110860,159],{"class":136},[76,110862,33215],{"class":86},[21,110864,110865,110866,110869,110870,28354],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[73,110867,110868],{},"obs[3]","？因为 obs 的顺序是 ",[73,110871,110872],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[66,110874,110876],{"className":30347,"code":110875,"language":30349,"meta":71,"style":71},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[73,110877,110878],{"__ignoreMap":71},[76,110879,110880,110882,110884,110886,110888,110890,110892,110894,110896],{"class":78,"line":79},[76,110881,107411],{"class":86},[76,110883,133],{"class":82},[76,110885,110196],{"class":136},[76,110887,6485],{"class":82},[76,110889,109789],{"class":86},[76,110891,569],{"class":82},[76,110893,61836],{"class":136},[76,110895,6485],{"class":82},[76,110897,110209],{"class":86},[21,110899,110900,110901,100987,110903,110905],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[73,110902,105229],{},[73,110904,35298],{}," 是人为设置的系数，不是固定公式。",[66,110907,110909],{"className":30347,"code":110908,"language":30349,"meta":71,"style":71},"action = np.clip(action, -1.0, 1.0)\n",[73,110910,110911],{"__ignoreMap":71},[76,110912,110913,110915,110917,110919,110921,110923,110925,110927],{"class":78,"line":79},[76,110914,107411],{"class":86},[76,110916,133],{"class":82},[76,110918,107416],{"class":86},[76,110920,620],{"class":82},[76,110922,102372],{"class":136},[76,110924,12402],{"class":86},[76,110926,102372],{"class":136},[76,110928,93],{"class":86},[21,110930,110931],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[66,110933,110934],{"className":30347,"code":109742,"language":30349,"meta":71,"style":71},[73,110935,110936],{"__ignoreMap":71},[76,110937,110938,110940,110942,110944,110946],{"class":78,"line":79},[76,110939,105840],{"class":86},[76,110941,279],{"class":136},[76,110943,4408],{"class":86},[76,110945,133],{"class":82},[76,110947,107439],{"class":86},[21,110949,110950],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[66,110952,110953],{"className":30347,"code":104474,"language":30349,"meta":71,"style":71},[73,110954,110955],{"__ignoreMap":71},[76,110956,110957],{"class":78,"line":79},[76,110958,104474],{"class":86},[21,110960,110961,110962,110964],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[73,110963,106095],{}," 计算小车和杆子的下一刻状态。",[66,110966,110968],{"className":30347,"code":110967,"language":30349,"meta":71,"style":71},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[73,110969,110970,110979],{"__ignoreMap":71},[76,110971,110972,110975,110977],{"class":78,"line":79},[76,110973,110974],{"class":86},"reward ",[76,110976,133],{"class":82},[76,110978,110261],{"class":86},[76,110980,110981,110983,110985],{"class":78,"line":96},[76,110982,110779],{"class":86},[76,110984,9444],{"class":82},[76,110986,110271],{"class":86},[21,110988,110989,110990,110992,110993,110996,110997,28354],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[73,110991,9444],{}," 是简写，",[73,110994,110995],{},"total_reward += reward"," 等价于 ",[73,110998,110999],{},"total_reward = total_reward + reward",[66,111001,111003],{"className":30347,"code":111002,"language":30349,"meta":71,"style":71},"if step % 100 == 0:\n",[73,111004,111005],{"__ignoreMap":71},[76,111006,111007,111009,111011,111013,111015,111017,111019],{"class":78,"line":79},[76,111008,1495],{"class":82},[76,111010,31585],{"class":86},[76,111012,416],{"class":82},[76,111014,5721],{"class":136},[76,111016,101528],{"class":82},[76,111018,4058],{"class":136},[76,111020,3704],{"class":86},[21,111022,111023,111025,111026,111029],{},[73,111024,416],{}," 是取余数。",[73,111027,111028],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[66,111031,111033],{"className":30347,"code":111032,"language":30349,"meta":71,"style":71},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[73,111034,111035],{"__ignoreMap":71},[76,111036,111037,111039,111041,111043,111045,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067],{"class":78,"line":79},[76,111038,30384],{"class":136},[76,111040,87],{"class":86},[76,111042,110300],{"class":192},[76,111044,110303],{"class":86},[76,111046,110306],{"class":192},[76,111048,110309],{"class":86},[76,111050,159],{"class":136},[76,111052,110314],{"class":86},[76,111054,110317],{"class":192},[76,111056,12402],{"class":86},[76,111058,31987],{"class":136},[76,111060,87],{"class":86},[76,111062,127],{"class":136},[76,111064,110328],{"class":86},[76,111066,159],{"class":136},[76,111068,30466],{"class":86},[21,111070,111071,111072,111075,111076,111079],{},"打印当前步数、观测和动作。",[73,111073,111074],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[73,111077,111078],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[16,111081,102285],{"id":102284},[21,111083,111084],{},"观测向量:",[66,111086,111089],{"className":111087,"code":111088,"language":5154,"meta":71},[5152],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[73,111090,111088],{"__ignoreMap":71},[21,111092,111093],{},"控制器是教学用的简单线性反馈，不保证最优。",[21,111095,111096],{},"每隔 100 步会打印一次：",[66,111098,111101],{"className":111099,"code":111100,"language":5154,"meta":71},[5152],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[73,111102,111100],{"__ignoreMap":71},[21,111104,111105],{},"重点观察：",[29,111107,111108,111114,111119],{},[32,111109,111110,111113],{},[73,111111,111112],{},"pole_angle"," 是否越来越大。",[32,111115,111116,111118],{},[73,111117,109695],{}," 是否跑得太远。",[32,111120,111121,111122,82508,111124,28354],{},"action 是否经常被 clip 到 ",[73,111123,103884],{},[73,111125,305],{},[21,111127,111128],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[16,111130,102317],{"id":102316},[29,111132,111133,111139,111142,111148,111158,111164,111167],{},[32,111134,111135,111136,28354],{},"把初始角度改为 ",[73,111137,111138],{},"data.qpos[1] = 0.3",[32,111140,111141],{},"重新运行，观察控制是否变差。",[32,111143,111144,111145,111147],{},"把 actuator ",[73,111146,107036],{}," 改小。",[32,111149,111150,111151,111154,111155,28354],{},"打印 ",[73,111152,111153],{},"model.nq, model.nv, model.nu","，应为 ",[73,111156,111157],{},"2 2 1",[32,111159,111160,111161,111163],{},"把 reward 里的 ",[73,111162,110729],{}," 系数改大，观察总奖励变化。",[32,111165,111166],{},"把控制器改成反号，观察杆子是否更容易倒。",[32,111168,111169],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[16,111171,102422],{"id":102421},[46,111173,111174],{"id":111174},"杆子方向和预期不一致",[21,111176,102365,111177,111179,111180,111182],{},[73,111178,106208],{}," 和 capsule 的 ",[73,111181,103145],{},"，必要时用 viewer 可视化确认。",[46,111184,111185],{"id":111185},"控制器越控越倒",[21,111187,111188],{},"说明反馈符号可能反了，尝试:",[66,111190,111192],{"className":30347,"code":111191,"language":30349,"meta":71,"style":71},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[73,111193,111194],{"__ignoreMap":71},[76,111195,111196,111198,111200,111202,111204,111206,111208,111210,111212,111214],{"class":78,"line":79},[76,111197,107411],{"class":86},[76,111199,133],{"class":82},[76,111201,52240],{"class":82},[76,111203,105229],{"class":136},[76,111205,6485],{"class":82},[76,111207,109789],{"class":86},[76,111209,620],{"class":82},[76,111211,61836],{"class":136},[76,111213,6485],{"class":82},[76,111215,110209],{"class":86},[46,111217,111218],{"id":111218},"小车飞走",[21,111220,111221,111222,111224,111225,111228],{},"降低 ",[73,111223,107036],{}," 或缩小 ",[73,111226,111227],{},"action"," 的 clip 范围。",[46,111230,111232,111234],{"id":111231},"obs3-为什么是杆子角速度",[73,111233,110868],{}," 为什么是杆子角速度",[21,111236,111237],{},"因为这个模型里：",[66,111239,111242],{"className":111240,"code":111241,"language":5154,"meta":71},[5152],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[73,111243,111241],{"__ignoreMap":71},[21,111245,109716],{},[66,111247,111250],{"className":111248,"code":111249,"language":5154,"meta":71},[5152],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[73,111251,111249],{"__ignoreMap":71},[46,111253,111255],{"id":111254},"reward-变成负数是否错误","reward 变成负数是否错误",[21,111257,111258],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[16,111260,102576],{"id":102575},[21,111262,111263],{},"一个控制任务通常包含：",[29,111265,111266,111269,111277,111282,111285],{},[32,111267,111268],{},"模型：Cartpole 的 body、joint、actuator。",[32,111270,111271,111272,300,111274,111276],{},"观测：从 ",[73,111273,103999],{},[73,111275,104329],{}," 里取状态。",[32,111278,111279,111280,28354],{},"动作：写入 ",[73,111281,101045],{},[32,111283,111284],{},"奖励：根据任务目标打分。",[32,111286,111287],{},"循环：obs -> action -> step -> reward。",[21,111289,111290],{},"这就是后面 Gymnasium 环境的基本骨架。",[5092,111292,104255],{},{"title":71,"searchDepth":96,"depth":96,"links":111294},[111295,111296,111297,111302,111306,111307,111308,111316],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":111298},[111299,111300,111301],{"id":109669,"depth":1143,"text":109670},{"id":109734,"depth":1143,"text":109735},{"id":109750,"depth":1143,"text":109751},{"id":101221,"depth":96,"text":101222,"children":111303},[111304,111305],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":111309},[111310,111311,111312,111313,111315],{"id":111174,"depth":1143,"text":111174},{"id":111185,"depth":1143,"text":111185},{"id":111218,"depth":1143,"text":111218},{"id":111231,"depth":1143,"text":111314},"obs[3] 为什么是杆子角速度",{"id":111254,"depth":1143,"text":111255},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109405,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111323,"title":111324,"body":111325,"description":71,"extension":5123,"meta":113339,"navigation":2364,"path":113340,"seo":113341,"stem":113342,"__hash__":113343},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":9,"value":111326,"toc":113315},[111327,111330,111332,111335,111337,111354,111357,111360,111366,111369,111371,111373,111397,111399,111413,111415,111456,111458,111476,111478,111481,111487,111490,111518,111522,111528,111553,111556,111587,111594,111597,111600,111606,111609,111615,111618,111624,111628,111631,111656,111659,111661,112421,112423,112435,112437,112448,112450,112453,112470,112473,112475,112486,112489,112491,112537,112540,112553,112556,112638,112641,112643,112659,112669,112682,112685,112724,112734,112745,112755,112768,112771,112800,112803,112813,112816,112822,112839,112850,112852,112858,112875,112886,112907,112910,112922,112925,112946,112949,112957,112965,112982,112985,113054,113061,113069,113072,113085,113092,113094,113097,113103,113106,113109,113115,113121,113123,113163,113165,113171,113180,113183,113185,113205,113208,113211,113217,113221,113223,113250,113253,113256,113283,113289,113292,113295,113297,113300,113303,113309,113312],[12,111328,111324],{"id":111329},"_7控制任务reacher-机械臂到达目标",[16,111331,100616],{"id":100615},[21,111333,111334],{},"本章搭建一个二维两关节 reacher 任务。",[21,111336,104300],{},[29,111338,111339,111342,111345,111348,111351],{},[32,111340,111341],{},"两个 hinge joint",[32,111343,111344],{},"两个 motor actuator",[32,111346,111347],{},"site 作为末端点和目标点",[32,111349,111350],{},"根据末端和目标距离设计 reward",[32,111352,111353],{},"构造机械臂任务的基本形式",[21,111355,111356],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[21,111358,111359],{},"Reacher 任务可以理解为：",[66,111361,111364],{"className":111362,"code":111363,"language":5154,"meta":71},[5152],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[73,111365,111363],{"__ignoreMap":71},[21,111367,111368],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[16,111370,100739],{"id":100738},[21,111372,100742],{},[66,111374,111375],{"className":23790,"code":104357,"language":23792,"meta":71,"style":71},[73,111376,111377],{"__ignoreMap":71},[76,111378,111379,111381,111383,111385,111387,111389,111391,111393,111395],{"class":78,"line":79},[76,111380,24545],{"class":1927},[76,111382,26284],{"class":192},[76,111384,23802],{"class":192},[76,111386,26369],{"class":136},[76,111388,104372],{"class":192},[76,111390,100767],{"class":192},[76,111392,102470],{"class":192},[76,111394,100783],{"class":192},[76,111396,104381],{"class":192},[21,111398,102788],{},[66,111400,111401],{"className":23790,"code":100888,"language":23792,"meta":71,"style":71},[73,111402,111403],{"__ignoreMap":71},[76,111404,111405,111407,111409,111411],{"class":78,"line":79},[76,111406,23799],{"class":1927},[76,111408,23802],{"class":192},[76,111410,100899],{"class":192},[76,111412,100902],{"class":192},[21,111414,102805],{},[66,111416,111418],{"className":23790,"code":111417,"language":23792,"meta":71,"style":71},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[73,111419,111420,111437,111446],{"__ignoreMap":71},[76,111421,111422,111424,111426,111428,111431,111433,111435],{"class":78,"line":79},[76,111423,30299],{"class":1927},[76,111425,29145],{"class":192},[76,111427,25084],{"class":136},[76,111429,111430],{"class":192}," mujoco-reacher",[76,111432,100944],{"class":192},[76,111434,100947],{"class":136},[76,111436,100950],{"class":136},[76,111438,111439,111441,111443],{"class":78,"line":96},[76,111440,30299],{"class":1927},[76,111442,100957],{"class":192},[76,111444,111445],{"class":192}," mujoco-reacher\n",[76,111447,111448,111450,111452,111454],{"class":78,"line":1143},[76,111449,23799],{"class":1927},[76,111451,23802],{"class":192},[76,111453,100899],{"class":192},[76,111455,100902],{"class":192},[21,111457,100973],{},[29,111459,111460,111463,111466],{},[32,111461,111462],{},"本章使用低维状态，不使用图像输入。",[32,111464,111465],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[32,111467,111468,111469,300,111471,300,111473,111475],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[73,111470,103999],{},[73,111472,104329],{},[73,111474,103649],{}," 的方法一致。",[16,111477,101014],{"id":101013},[21,111479,111480],{},"Reacher 任务核心:",[66,111482,111485],{"className":111483,"code":111484,"language":5154,"meta":71},[5152],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[73,111486,111484],{"__ignoreMap":71},[21,111488,111489],{},"读取 site 世界坐标:",[66,111491,111493],{"className":30347,"code":111492,"language":30349,"meta":71,"style":71},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[73,111494,111495,111508],{"__ignoreMap":71},[76,111496,111497,111499,111501,111503,111506],{"class":78,"line":79},[76,111498,103603],{"class":86},[76,111500,133],{"class":82},[76,111502,103374],{"class":86},[76,111504,111505],{"class":192},"\"tip\"",[76,111507,93],{"class":86},[76,111509,111510,111513,111515],{"class":78,"line":96},[76,111511,111512],{"class":86},"tip_pos ",[76,111514,133],{"class":82},[76,111516,111517],{"class":86}," data.site_xpos[site_id]\n",[46,111519,111521],{"id":111520},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[21,111523,111524,111525,111527],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[73,111526,103999],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[66,111529,111531],{"className":30347,"code":111530,"language":30349,"meta":71,"style":71},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[73,111532,111533,111543],{"__ignoreMap":71},[76,111534,111535,111538,111540],{"class":78,"line":79},[76,111536,111537],{"class":86},"tip ",[76,111539,133],{"class":82},[76,111541,111542],{"class":86}," data.site_xpos[tip_site_id]\n",[76,111544,111545,111548,111550],{"class":78,"line":96},[76,111546,111547],{"class":86},"target ",[76,111549,133],{"class":82},[76,111551,111552],{"class":86}," data.site_xpos[target_site_id]\n",[21,111554,111555],{},"这样 reward 就很容易写：",[66,111557,111559],{"className":30347,"code":111558,"language":30349,"meta":71,"style":71},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[73,111560,111561,111576],{"__ignoreMap":71},[76,111562,111563,111566,111568,111571,111573],{"class":78,"line":79},[76,111564,111565],{"class":86},"dist ",[76,111567,133],{"class":82},[76,111569,111570],{"class":86}," np.linalg.norm(tip ",[76,111572,620],{"class":82},[76,111574,111575],{"class":86}," target)\n",[76,111577,111578,111580,111582,111584],{"class":78,"line":96},[76,111579,110974],{"class":86},[76,111581,133],{"class":82},[76,111583,52240],{"class":82},[76,111585,111586],{"class":86},"dist\n",[21,111588,111589,111590,111593],{},"距离越小，",[73,111591,111592],{},"-dist"," 越接近 0，奖励越高。",[46,111595,111596],{"id":111596},"两关节机械臂的状态",[21,111598,111599],{},"这个模型有两个 hinge joint：",[66,111601,111604],{"className":111602,"code":111603,"language":5154,"meta":71},[5152],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[73,111605,111603],{"__ignoreMap":71},[21,111607,111608],{},"再加上末端和目标位置：",[66,111610,111613],{"className":111611,"code":111612,"language":5154,"meta":71},[5152],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[73,111614,111612],{"__ignoreMap":71},[21,111616,111617],{},"总维度：",[66,111619,111622],{"className":111620,"code":111621,"language":5154,"meta":71},[5152],"2 + 2 + 3 + 3 = 10\n",[73,111623,111621],{"__ignoreMap":71},[46,111625,111627],{"id":111626},"为什么-gravity-是-0","为什么 gravity 是 0",[21,111629,111630],{},"本章把重力设为：",[66,111632,111634],{"className":53036,"code":111633,"language":53038,"meta":71,"style":71},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[73,111635,111636],{"__ignoreMap":71},[76,111637,111638,111640,111642,111644,111646,111648,111650,111652,111654],{"class":78,"line":79},[76,111639,998],{"class":86},[76,111641,69135],{"class":51269},[76,111643,101163],{"class":1927},[76,111645,133],{"class":86},[76,111647,101168],{"class":192},[76,111649,101171],{"class":1927},[76,111651,133],{"class":86},[76,111653,103740],{"class":192},[76,111655,101113],{"class":86},[21,111657,111658],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[16,111660,101222],{"id":101221},[66,111662,111664],{"className":30347,"code":111663,"language":30349,"meta":71,"style":71},"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",[73,111665,111666,111672,111682,111686,111690,111698,111703,111708,111712,111716,111721,111726,111730,111735,111740,111745,111749,111754,111759,111764,111769,111773,111777,111781,111785,111789,111794,111799,111803,111807,111811,111815,111819,111834,111843,111855,111878,111885,111889,111893,111903,111917,111931,111938,111942,111946,111960,111972,111984,111997,112012,112029,112033,112037,112049,112061,112069,112077,112081,112097,112102,112115,112128,112143,112147,112182,112214,112218,112222,112231,112235,112251,112261,112272,112288,112304,112320,112336,112340,112358,112378,112397,112401,112405,112417],{"__ignoreMap":71},[76,111667,111668,111670],{"class":78,"line":79},[76,111669,30361],{"class":82},[76,111671,101270],{"class":86},[76,111673,111674,111676,111678,111680],{"class":78,"line":96},[76,111675,30361],{"class":82},[76,111677,31349],{"class":86},[76,111679,31352],{"class":82},[76,111681,31355],{"class":86},[76,111683,111684],{"class":78,"line":1143},[76,111685,2365],{"emptyLinePlaceholder":2364},[76,111687,111688],{"class":78,"line":1158},[76,111689,2365],{"emptyLinePlaceholder":2364},[76,111691,111692,111694,111696],{"class":78,"line":1164},[76,111693,101283],{"class":136},[76,111695,13531],{"class":82},[76,111697,101288],{"class":192},[76,111699,111700],{"class":78,"line":1178},[76,111701,111702],{"class":192},"\u003Cmujoco model=\"two_link_reacher\">\n",[76,111704,111705],{"class":78,"line":1184},[76,111706,111707],{"class":192},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[76,111709,111710],{"class":78,"line":1275},[76,111711,2365],{"emptyLinePlaceholder":2364},[76,111713,111714],{"class":78,"line":1281},[76,111715,101307],{"class":192},[76,111717,111718],{"class":78,"line":1293},[76,111719,111720],{"class":192},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[76,111722,111723],{"class":78,"line":1576},[76,111724,111725],{"class":192},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[76,111727,111728],{"class":78,"line":1581},[76,111729,2365],{"emptyLinePlaceholder":2364},[76,111731,111732],{"class":78,"line":1587},[76,111733,111734],{"class":192},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[76,111736,111737],{"class":78,"line":1592},[76,111738,111739],{"class":192},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,111741,111742],{"class":78,"line":1606},[76,111743,111744],{"class":192},"      \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",[76,111746,111747],{"class":78,"line":1611},[76,111748,2365],{"emptyLinePlaceholder":2364},[76,111750,111751],{"class":78,"line":1617},[76,111752,111753],{"class":192},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[76,111755,111756],{"class":78,"line":1638},[76,111757,111758],{"class":192},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,111760,111761],{"class":78,"line":1643},[76,111762,111763],{"class":192},"        \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",[76,111765,111766],{"class":78,"line":1657},[76,111767,111768],{"class":192},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[76,111770,111771],{"class":78,"line":1662},[76,111772,106407],{"class":192},[76,111774,111775],{"class":78,"line":1691},[76,111776,101336],{"class":192},[76,111778,111779],{"class":78,"line":1696},[76,111780,101341],{"class":192},[76,111782,111783],{"class":78,"line":1713},[76,111784,2365],{"emptyLinePlaceholder":2364},[76,111786,111787],{"class":78,"line":1718},[76,111788,106424],{"class":192},[76,111790,111791],{"class":78,"line":1723},[76,111792,111793],{"class":192},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,111795,111796],{"class":78,"line":1728},[76,111797,111798],{"class":192},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,111800,111801],{"class":78,"line":1742},[76,111802,106434],{"class":192},[76,111804,111805],{"class":78,"line":1747},[76,111806,101346],{"class":192},[76,111808,111809],{"class":78,"line":2542},[76,111810,95667],{"class":192},[76,111812,111813],{"class":78,"line":2556},[76,111814,2365],{"emptyLinePlaceholder":2364},[76,111816,111817],{"class":78,"line":2564},[76,111818,2365],{"emptyLinePlaceholder":2364},[76,111820,111821,111823,111826,111829,111831],{"class":78,"line":2569},[76,111822,31916],{"class":82},[76,111824,111825],{"class":1927}," site_position",[76,111827,111828],{"class":86},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[76,111830,1263],{"class":136},[76,111832,111833],{"class":86},") -> np.ndarray:\n",[76,111835,111836,111838,111840],{"class":78,"line":2575},[76,111837,103369],{"class":86},[76,111839,133],{"class":82},[76,111841,111842],{"class":86}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[76,111844,111845,111847,111849,111851,111853],{"class":78,"line":2581},[76,111846,3066],{"class":82},[76,111848,103418],{"class":86},[76,111850,998],{"class":82},[76,111852,4058],{"class":136},[76,111854,3704],{"class":86},[76,111856,111857,111859,111861,111863,111865,111868,111870,111872,111874,111876],{"class":78,"line":2586},[76,111858,103401],{"class":82},[76,111860,103404],{"class":136},[76,111862,87],{"class":86},[76,111864,140],{"class":82},[76,111866,111867],{"class":192},"\"site not found: ",[76,111869,984],{"class":136},[76,111871,79779],{"class":86},[76,111873,1034],{"class":136},[76,111875,339],{"class":192},[76,111877,93],{"class":86},[76,111879,111880,111882],{"class":78,"line":7915},[76,111881,4055],{"class":82},[76,111883,111884],{"class":86}," data.site_xpos[site_id].copy()\n",[76,111886,111887],{"class":78,"line":7939},[76,111888,2365],{"emptyLinePlaceholder":2364},[76,111890,111891],{"class":78,"line":7944},[76,111892,2365],{"emptyLinePlaceholder":2364},[76,111894,111895,111897,111900],{"class":78,"line":7950},[76,111896,31916],{"class":82},[76,111898,111899],{"class":1927}," get_obs",[76,111901,111902],{"class":86},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[76,111904,111905,111908,111910,111913,111915],{"class":78,"line":7977},[76,111906,111907],{"class":86},"    tip ",[76,111909,133],{"class":82},[76,111911,111912],{"class":86}," site_position(model, data, ",[76,111914,111505],{"class":192},[76,111916,93],{"class":86},[76,111918,111919,111922,111924,111926,111929],{"class":78,"line":7982},[76,111920,111921],{"class":86},"    target ",[76,111923,133],{"class":82},[76,111925,111912],{"class":86},[76,111927,111928],{"class":192},"\"target\"",[76,111930,93],{"class":86},[76,111932,111933,111935],{"class":78,"line":7988},[76,111934,4055],{"class":82},[76,111936,111937],{"class":86}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[76,111939,111940],{"class":78,"line":8000},[76,111941,2365],{"emptyLinePlaceholder":2364},[76,111943,111944],{"class":78,"line":8012},[76,111945,2365],{"emptyLinePlaceholder":2364},[76,111947,111948,111950,111953,111956,111958],{"class":78,"line":8024},[76,111949,31916],{"class":82},[76,111951,111952],{"class":1927}," reward",[76,111954,111955],{"class":86},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[76,111957,127],{"class":136},[76,111959,3704],{"class":86},[76,111961,111962,111964,111966,111968,111970],{"class":78,"line":9683},[76,111963,111907],{"class":86},[76,111965,133],{"class":82},[76,111967,111912],{"class":86},[76,111969,111505],{"class":192},[76,111971,93],{"class":86},[76,111973,111974,111976,111978,111980,111982],{"class":78,"line":9708},[76,111975,111921],{"class":86},[76,111977,133],{"class":82},[76,111979,111912],{"class":86},[76,111981,111928],{"class":192},[76,111983,93],{"class":86},[76,111985,111986,111989,111991,111993,111995],{"class":78,"line":9731},[76,111987,111988],{"class":86},"    dist ",[76,111990,133],{"class":82},[76,111992,111570],{"class":86},[76,111994,620],{"class":82},[76,111996,111575],{"class":86},[76,111998,111999,112002,112004,112007,112009],{"class":78,"line":9755},[76,112000,112001],{"class":86},"    control_cost ",[76,112003,133],{"class":82},[76,112005,112006],{"class":136}," 0.01",[76,112008,6485],{"class":82},[76,112010,112011],{"class":86}," np.sum(np.square(data.ctrl))\n",[76,112013,112014,112016,112018,112020,112022,112024,112026],{"class":78,"line":9760},[76,112015,4055],{"class":82},[76,112017,109766],{"class":136},[76,112019,87],{"class":86},[76,112021,620],{"class":82},[76,112023,111565],{"class":86},[76,112025,620],{"class":82},[76,112027,112028],{"class":86}," control_cost)\n",[76,112030,112031],{"class":78,"line":9765},[76,112032,2365],{"emptyLinePlaceholder":2364},[76,112034,112035],{"class":78,"line":9770},[76,112036,2365],{"emptyLinePlaceholder":2364},[76,112038,112039,112041,112043,112045,112047],{"class":78,"line":9779},[76,112040,31916],{"class":82},[76,112042,1937],{"class":1927},[76,112044,101367],{"class":86},[76,112046,95655],{"class":136},[76,112048,3704],{"class":86},[76,112050,112051,112053,112055,112057,112059],{"class":78,"line":9784},[76,112052,101376],{"class":86},[76,112054,133],{"class":82},[76,112056,101381],{"class":86},[76,112058,101283],{"class":136},[76,112060,93],{"class":86},[76,112062,112063,112065,112067],{"class":78,"line":9790},[76,112064,101390],{"class":86},[76,112066,133],{"class":82},[76,112068,101395],{"class":86},[76,112070,112071,112073,112075],{"class":78,"line":9811},[76,112072,110122],{"class":86},[76,112074,133],{"class":82},[76,112076,104730],{"class":136},[76,112078,112079],{"class":78,"line":9817},[76,112080,2365],{"emptyLinePlaceholder":2364},[76,112082,112083,112085,112087,112089,112091,112093,112095],{"class":78,"line":9831},[76,112084,3166],{"class":82},[76,112086,31585],{"class":86},[76,112088,26012],{"class":82},[76,112090,32412],{"class":136},[76,112092,87],{"class":86},[76,112094,65043],{"class":136},[76,112096,30755],{"class":86},[76,112098,112099],{"class":78,"line":9837},[76,112100,112101],{"class":86},"        mujoco.mj_forward(model, data)\n",[76,112103,112104,112107,112109,112111,112113],{"class":78,"line":9864},[76,112105,112106],{"class":86},"        tip ",[76,112108,133],{"class":82},[76,112110,111912],{"class":86},[76,112112,111505],{"class":192},[76,112114,93],{"class":86},[76,112116,112117,112120,112122,112124,112126],{"class":78,"line":9873},[76,112118,112119],{"class":86},"        target ",[76,112121,133],{"class":82},[76,112123,111912],{"class":86},[76,112125,111928],{"class":192},[76,112127,93],{"class":86},[76,112129,112130,112133,112135,112138,112140],{"class":78,"line":9879},[76,112131,112132],{"class":86},"        error ",[76,112134,133],{"class":82},[76,112136,112137],{"class":86}," target ",[76,112139,620],{"class":82},[76,112141,112142],{"class":86}," tip\n",[76,112144,112145],{"class":78,"line":9887},[76,112146,2365],{"emptyLinePlaceholder":2364},[76,112148,112149,112151,112153,112155,112157,112160,112162,112164,112167,112169,112172,112174,112176,112178,112180],{"class":78,"line":9892},[76,112150,106586],{"class":86},[76,112152,279],{"class":136},[76,112154,4408],{"class":86},[76,112156,133],{"class":82},[76,112158,112159],{"class":86}," np.clip(",[76,112161,105229],{"class":136},[76,112163,6485],{"class":82},[76,112165,112166],{"class":86}," error[",[76,112168,165],{"class":136},[76,112170,112171],{"class":86},"], ",[76,112173,620],{"class":82},[76,112175,102372],{"class":136},[76,112177,12402],{"class":86},[76,112179,102372],{"class":136},[76,112181,93],{"class":86},[76,112183,112184,112186,112188,112190,112192,112194,112196,112198,112200,112202,112204,112206,112208,112210,112212],{"class":78,"line":16571},[76,112185,106586],{"class":86},[76,112187,305],{"class":136},[76,112189,4408],{"class":86},[76,112191,133],{"class":82},[76,112193,112159],{"class":86},[76,112195,105229],{"class":136},[76,112197,6485],{"class":82},[76,112199,112166],{"class":86},[76,112201,279],{"class":136},[76,112203,112171],{"class":86},[76,112205,620],{"class":82},[76,112207,102372],{"class":136},[76,112209,12402],{"class":86},[76,112211,102372],{"class":136},[76,112213,93],{"class":86},[76,112215,112216],{"class":78,"line":16577},[76,112217,2365],{"emptyLinePlaceholder":2364},[76,112219,112220],{"class":78,"line":16600},[76,112221,101485],{"class":86},[76,112223,112224,112226,112228],{"class":78,"line":16606},[76,112225,110266],{"class":86},[76,112227,9444],{"class":82},[76,112229,112230],{"class":86}," reward(model, data)\n",[76,112232,112233],{"class":78,"line":16629},[76,112234,2365],{"emptyLinePlaceholder":2364},[76,112236,112237,112239,112241,112243,112245,112247,112249],{"class":78,"line":16643},[76,112238,2462],{"class":82},[76,112240,31585],{"class":86},[76,112242,416],{"class":82},[76,112244,5721],{"class":136},[76,112246,101528],{"class":82},[76,112248,4058],{"class":136},[76,112250,3704],{"class":86},[76,112252,112253,112256,112258],{"class":78,"line":16663},[76,112254,112255],{"class":86},"            obs ",[76,112257,133],{"class":82},[76,112259,112260],{"class":86}," get_obs(model, data)\n",[76,112262,112263,112265,112267,112269],{"class":78,"line":16669},[76,112264,34619],{"class":136},[76,112266,87],{"class":86},[76,112268,110300],{"class":192},[76,112270,112271],{"class":86},", step)\n",[76,112273,112274,112276,112278,112281,112284,112286],{"class":78,"line":16680},[76,112275,34619],{"class":136},[76,112277,87],{"class":86},[76,112279,112280],{"class":192},"\"  tip:\"",[76,112282,112283],{"class":86},", np.round(tip, ",[76,112285,159],{"class":136},[76,112287,30466],{"class":86},[76,112289,112290,112292,112294,112297,112300,112302],{"class":78,"line":16703},[76,112291,34619],{"class":136},[76,112293,87],{"class":86},[76,112295,112296],{"class":192},"\"  target:\"",[76,112298,112299],{"class":86},", np.round(target, ",[76,112301,159],{"class":136},[76,112303,30466],{"class":86},[76,112305,112306,112308,112310,112313,112316,112318],{"class":78,"line":16725},[76,112307,34619],{"class":136},[76,112309,87],{"class":86},[76,112311,112312],{"class":192},"\"  ctrl:\"",[76,112314,112315],{"class":86},", np.round(data.ctrl.copy(), ",[76,112317,159],{"class":136},[76,112319,30466],{"class":86},[76,112321,112322,112324,112326,112329,112332,112334],{"class":78,"line":16730},[76,112323,34619],{"class":136},[76,112325,87],{"class":86},[76,112327,112328],{"class":192},"\"  obs_dim:\"",[76,112330,112331],{"class":86},", obs.shape[",[76,112333,279],{"class":136},[76,112335,4622],{"class":86},[76,112337,112338],{"class":78,"line":16736},[76,112339,2365],{"emptyLinePlaceholder":2364},[76,112341,112342,112344,112346,112348,112350,112352,112354,112356],{"class":78,"line":16750},[76,112343,31268],{"class":136},[76,112345,87],{"class":86},[76,112347,110345],{"class":192},[76,112349,12402],{"class":86},[76,112351,31987],{"class":136},[76,112353,110352],{"class":86},[76,112355,159],{"class":136},[76,112357,30466],{"class":86},[76,112359,112360,112362,112364,112367,112370,112372,112374,112376],{"class":78,"line":16763},[76,112361,31268],{"class":136},[76,112363,87],{"class":86},[76,112365,112366],{"class":192},"\"final tip:\"",[76,112368,112369],{"class":86},", np.round(site_position(model, data, ",[76,112371,111505],{"class":192},[76,112373,110314],{"class":86},[76,112375,159],{"class":136},[76,112377,30466],{"class":86},[76,112379,112380,112382,112384,112387,112389,112391,112393,112395],{"class":78,"line":16768},[76,112381,31268],{"class":136},[76,112383,87],{"class":86},[76,112385,112386],{"class":192},"\"target:\"",[76,112388,112369],{"class":86},[76,112390,111928],{"class":192},[76,112392,110314],{"class":86},[76,112394,159],{"class":136},[76,112396,30466],{"class":86},[76,112398,112399],{"class":78,"line":16782},[76,112400,2365],{"emptyLinePlaceholder":2364},[76,112402,112403],{"class":78,"line":16787},[76,112404,2365],{"emptyLinePlaceholder":2364},[76,112406,112407,112409,112411,112413,112415],{"class":78,"line":16793},[76,112408,1495],{"class":82},[76,112410,31189],{"class":136},[76,112412,101528],{"class":82},[76,112414,101531],{"class":192},[76,112416,3704],{"class":86},[76,112418,112419],{"class":78,"line":16798},[76,112420,101538],{"class":86},[21,112422,103539],{},[66,112424,112426],{"className":23790,"code":112425,"language":23792,"meta":71,"style":71},"touch ch7_reacher.py\n",[73,112427,112428],{"__ignoreMap":71},[76,112429,112430,112432],{"class":78,"line":79},[76,112431,101252],{"class":1927},[76,112433,112434],{"class":192}," ch7_reacher.py\n",[21,112436,110413],{},[66,112438,112440],{"className":23790,"code":112439,"language":23792,"meta":71,"style":71},"python ch7_reacher.py\n",[73,112441,112442],{"__ignoreMap":71},[76,112443,112444,112446],{"class":78,"line":79},[76,112445,30349],{"class":1927},[76,112447,112434],{"class":192},[46,112449,101541],{"id":101541},[21,112451,112452],{},"读取 site 坐标：",[66,112454,112456],{"className":30347,"code":112455,"language":30349,"meta":71,"style":71},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[73,112457,112458],{"__ignoreMap":71},[76,112459,112460,112462,112464,112466,112468],{"class":78,"line":79},[76,112461,31916],{"class":82},[76,112463,111825],{"class":1927},[76,112465,111828],{"class":86},[76,112467,1263],{"class":136},[76,112469,111833],{"class":86},[21,112471,112472],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[21,112474,110429],{},[66,112476,112478],{"className":30347,"code":112477,"language":30349,"meta":71,"style":71},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[73,112479,112480],{"__ignoreMap":71},[76,112481,112482,112484],{"class":78,"line":79},[76,112483,17013],{"class":82},[76,112485,111937],{"class":86},[21,112487,112488],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[21,112490,109754],{},[66,112492,112494],{"className":30347,"code":112493,"language":30349,"meta":71,"style":71},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[73,112495,112496,112508,112521],{"__ignoreMap":71},[76,112497,112498,112500,112502,112504,112506],{"class":78,"line":79},[76,112499,111565],{"class":86},[76,112501,133],{"class":82},[76,112503,111570],{"class":86},[76,112505,620],{"class":82},[76,112507,111575],{"class":86},[76,112509,112510,112513,112515,112517,112519],{"class":78,"line":96},[76,112511,112512],{"class":86},"control_cost ",[76,112514,133],{"class":82},[76,112516,112006],{"class":136},[76,112518,6485],{"class":82},[76,112520,112011],{"class":86},[76,112522,112523,112525,112527,112529,112531,112533,112535],{"class":78,"line":1143},[76,112524,17013],{"class":82},[76,112526,109766],{"class":136},[76,112528,87],{"class":86},[76,112530,620],{"class":82},[76,112532,111565],{"class":86},[76,112534,620],{"class":82},[76,112536,112028],{"class":86},[21,112538,112539],{},"奖励由两部分组成：",[29,112541,112542,112547],{},[32,112543,112544,112546],{},[73,112545,111592],{},"：末端离目标越远，奖励越低。",[32,112548,112549,112552],{},[73,112550,112551],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[21,112554,112555],{},"简单控制器：",[66,112557,112559],{"className":30347,"code":112558,"language":30349,"meta":71,"style":71},"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",[73,112560,112561,112574,112606],{"__ignoreMap":71},[76,112562,112563,112566,112568,112570,112572],{"class":78,"line":79},[76,112564,112565],{"class":86},"error ",[76,112567,133],{"class":82},[76,112569,112137],{"class":86},[76,112571,620],{"class":82},[76,112573,112142],{"class":86},[76,112575,112576,112578,112580,112582,112584,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604],{"class":78,"line":96},[76,112577,105840],{"class":86},[76,112579,279],{"class":136},[76,112581,4408],{"class":86},[76,112583,133],{"class":82},[76,112585,112159],{"class":86},[76,112587,105229],{"class":136},[76,112589,6485],{"class":82},[76,112591,112166],{"class":86},[76,112593,165],{"class":136},[76,112595,112171],{"class":86},[76,112597,620],{"class":82},[76,112599,102372],{"class":136},[76,112601,12402],{"class":86},[76,112603,102372],{"class":136},[76,112605,93],{"class":86},[76,112607,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636],{"class":78,"line":1143},[76,112609,105840],{"class":86},[76,112611,305],{"class":136},[76,112613,4408],{"class":86},[76,112615,133],{"class":82},[76,112617,112159],{"class":86},[76,112619,105229],{"class":136},[76,112621,6485],{"class":82},[76,112623,112166],{"class":86},[76,112625,279],{"class":136},[76,112627,112171],{"class":86},[76,112629,620],{"class":82},[76,112631,102372],{"class":136},[76,112633,12402],{"class":86},[76,112635,102372],{"class":136},[76,112637,93],{"class":86},[21,112639,112640],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[46,112642,101677],{"id":101677},[66,112644,112645],{"className":30347,"code":112455,"language":30349,"meta":71,"style":71},[73,112646,112647],{"__ignoreMap":71},[76,112648,112649,112651,112653,112655,112657],{"class":78,"line":79},[76,112650,31916],{"class":82},[76,112652,111825],{"class":1927},[76,112654,111828],{"class":86},[76,112656,1263],{"class":136},[76,112658,111833],{"class":86},[21,112660,112661,112662,112664,112665,82508,112667,28354],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[73,112663,79779],{}," 是 site 的名字，比如 ",[73,112666,111505],{},[73,112668,111928],{},[66,112670,112672],{"className":30347,"code":112671,"language":30349,"meta":71,"style":71},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[73,112673,112674],{"__ignoreMap":71},[76,112675,112676,112678,112680],{"class":78,"line":79},[76,112677,103603],{"class":86},[76,112679,133],{"class":82},[76,112681,111842],{"class":86},[21,112683,112684],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[66,112686,112688],{"className":30347,"code":112687,"language":30349,"meta":71,"style":71},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[73,112689,112690,112702],{"__ignoreMap":71},[76,112691,112692,112694,112696,112698,112700],{"class":78,"line":79},[76,112693,1495],{"class":82},[76,112695,103418],{"class":86},[76,112697,998],{"class":82},[76,112699,4058],{"class":136},[76,112701,3704],{"class":86},[76,112703,112704,112706,112708,112710,112712,112714,112716,112718,112720,112722],{"class":78,"line":96},[76,112705,103864],{"class":82},[76,112707,103404],{"class":136},[76,112709,87],{"class":86},[76,112711,140],{"class":82},[76,112713,111867],{"class":192},[76,112715,984],{"class":136},[76,112717,79779],{"class":86},[76,112719,1034],{"class":136},[76,112721,339],{"class":192},[76,112723,93],{"class":86},[21,112725,112726,112727,112730,112731,112733],{},"如果 site 没找到，就主动报错。",[73,112728,112729],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[73,112732,79779],{}," 的值放进字符串里。",[66,112735,112737],{"className":30347,"code":112736,"language":30349,"meta":71,"style":71},"return data.site_xpos[site_id].copy()\n",[73,112738,112739],{"__ignoreMap":71},[76,112740,112741,112743],{"class":78,"line":79},[76,112742,17013],{"class":82},[76,112744,111884],{"class":86},[21,112746,112747,112748,112750,112751,112754],{},"返回这个 site 的世界坐标。",[73,112749,103649],{}," 里的每一行都是一个 site 的 ",[73,112752,112753],{},"(x, y, z)"," 坐标。",[66,112756,112758],{"className":30347,"code":112757,"language":30349,"meta":71,"style":71},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[73,112759,112760],{"__ignoreMap":71},[76,112761,112762,112764,112766],{"class":78,"line":79},[76,112763,31916],{"class":82},[76,112765,111899],{"class":1927},[76,112767,111902],{"class":86},[21,112769,112770],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[66,112772,112774],{"className":30347,"code":112773,"language":30349,"meta":71,"style":71},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[73,112775,112776,112788],{"__ignoreMap":71},[76,112777,112778,112780,112782,112784,112786],{"class":78,"line":79},[76,112779,111537],{"class":86},[76,112781,133],{"class":82},[76,112783,111912],{"class":86},[76,112785,111505],{"class":192},[76,112787,93],{"class":86},[76,112789,112790,112792,112794,112796,112798],{"class":78,"line":96},[76,112791,111547],{"class":86},[76,112793,133],{"class":82},[76,112795,111912],{"class":86},[76,112797,111928],{"class":192},[76,112799,93],{"class":86},[21,112801,112802],{},"分别读取末端点和目标点的世界坐标。",[66,112804,112805],{"className":30347,"code":112477,"language":30349,"meta":71,"style":71},[73,112806,112807],{"__ignoreMap":71},[76,112808,112809,112811],{"class":78,"line":79},[76,112810,17013],{"class":82},[76,112812,111937],{"class":86},[21,112814,112815],{},"把四部分拼成一个观测数组：",[66,112817,112820],{"className":112818,"code":112819,"language":5154,"meta":71},[5152],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[73,112821,112819],{"__ignoreMap":71},[66,112823,112825],{"className":30347,"code":112824,"language":30349,"meta":71,"style":71},"dist = np.linalg.norm(tip - target)\n",[73,112826,112827],{"__ignoreMap":71},[76,112828,112829,112831,112833,112835,112837],{"class":78,"line":79},[76,112830,111565],{"class":86},[76,112832,133],{"class":82},[76,112834,111570],{"class":86},[76,112836,620],{"class":82},[76,112838,111575],{"class":86},[21,112840,112841,112842,112845,112846,112849],{},"计算 tip 到 target 的距离。",[73,112843,112844],{},"tip - target"," 得到一个三维向量，",[73,112847,112848],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[21,112851,14600],{},[66,112853,112856],{"className":112854,"code":112855,"language":5154,"meta":71},[5152],"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",[73,112857,112855],{"__ignoreMap":71},[66,112859,112861],{"className":30347,"code":112860,"language":30349,"meta":71,"style":71},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[73,112862,112863],{"__ignoreMap":71},[76,112864,112865,112867,112869,112871,112873],{"class":78,"line":79},[76,112866,112512],{"class":86},[76,112868,133],{"class":82},[76,112870,112006],{"class":136},[76,112872,6485],{"class":82},[76,112874,112011],{"class":86},[21,112876,112877,112878,112881,112882,112885],{},"计算动作惩罚。",[73,112879,112880],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[73,112883,112884],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[66,112887,112889],{"className":30347,"code":112888,"language":30349,"meta":71,"style":71},"return float(-dist - control_cost)\n",[73,112890,112891],{"__ignoreMap":71},[76,112892,112893,112895,112897,112899,112901,112903,112905],{"class":78,"line":79},[76,112894,17013],{"class":82},[76,112896,109766],{"class":136},[76,112898,87],{"class":86},[76,112900,620],{"class":82},[76,112902,111565],{"class":86},[76,112904,620],{"class":82},[76,112906,112028],{"class":86},[21,112908,112909],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[66,112911,112912],{"className":30347,"code":110772,"language":30349,"meta":71,"style":71},[73,112913,112914],{"__ignoreMap":71},[76,112915,112916,112918,112920],{"class":78,"line":79},[76,112917,110779],{"class":86},[76,112919,133],{"class":82},[76,112921,104730],{"class":136},[21,112923,112924],{},"累计奖励变量，记录整个运行过程的总分。",[66,112926,112928],{"className":30347,"code":112927,"language":30349,"meta":71,"style":71},"for step in range(500):\n",[73,112929,112930],{"__ignoreMap":71},[76,112931,112932,112934,112936,112938,112940,112942,112944],{"class":78,"line":79},[76,112933,2990],{"class":82},[76,112935,31585],{"class":86},[76,112937,26012],{"class":82},[76,112939,32412],{"class":136},[76,112941,87],{"class":86},[76,112943,65043],{"class":136},[76,112945,30755],{"class":86},[21,112947,112948],{},"运行 500 个控制步。",[66,112950,112951],{"className":30347,"code":104512,"language":30349,"meta":71,"style":71},[73,112952,112953],{"__ignoreMap":71},[76,112954,112955],{"class":78,"line":79},[76,112956,104512],{"class":86},[21,112958,112959,112960,100987,112962,112964],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[73,112961,103200],{},[73,112963,103203],{}," 是当前状态下的坐标。",[66,112966,112968],{"className":30347,"code":112967,"language":30349,"meta":71,"style":71},"error = target - tip\n",[73,112969,112970],{"__ignoreMap":71},[76,112971,112972,112974,112976,112978,112980],{"class":78,"line":79},[76,112973,112565],{"class":86},[76,112975,133],{"class":82},[76,112977,112137],{"class":86},[76,112979,620],{"class":82},[76,112981,112142],{"class":86},[21,112983,112984],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[66,112986,112988],{"className":30347,"code":112987,"language":30349,"meta":71,"style":71},"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",[73,112989,112990,113022],{"__ignoreMap":71},[76,112991,112992,112994,112996,112998,113000,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020],{"class":78,"line":79},[76,112993,105840],{"class":86},[76,112995,279],{"class":136},[76,112997,4408],{"class":86},[76,112999,133],{"class":82},[76,113001,112159],{"class":86},[76,113003,105229],{"class":136},[76,113005,6485],{"class":82},[76,113007,112166],{"class":86},[76,113009,165],{"class":136},[76,113011,112171],{"class":86},[76,113013,620],{"class":82},[76,113015,102372],{"class":136},[76,113017,12402],{"class":86},[76,113019,102372],{"class":136},[76,113021,93],{"class":86},[76,113023,113024,113026,113028,113030,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052],{"class":78,"line":96},[76,113025,105840],{"class":86},[76,113027,305],{"class":136},[76,113029,4408],{"class":86},[76,113031,133],{"class":82},[76,113033,112159],{"class":86},[76,113035,105229],{"class":136},[76,113037,6485],{"class":82},[76,113039,112166],{"class":86},[76,113041,279],{"class":136},[76,113043,112171],{"class":86},[76,113045,620],{"class":82},[76,113047,102372],{"class":136},[76,113049,12402],{"class":86},[76,113051,102372],{"class":136},[76,113053,93],{"class":86},[21,113055,113056,113057,113060],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[73,113058,113059],{},"error -> ctrl -> step"," 的流程。",[66,113062,113063],{"className":30347,"code":104474,"language":30349,"meta":71,"style":71},[73,113064,113065],{"__ignoreMap":71},[76,113066,113067],{"class":78,"line":79},[76,113068,104474],{"class":86},[21,113070,113071],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[66,113073,113075],{"className":30347,"code":113074,"language":30349,"meta":71,"style":71},"obs = get_obs(model, data)\n",[73,113076,113077],{"__ignoreMap":71},[76,113078,113079,113081,113083],{"class":78,"line":79},[76,113080,110823],{"class":86},[76,113082,133],{"class":82},[76,113084,112260],{"class":86},[21,113086,113087,113088,113091],{},"读取最新观测。后面打印 ",[73,113089,113090],{},"obs.shape[0]","，用来确认观测维度是 10。",[16,113093,102285],{"id":102284},[21,113095,113096],{},"观测维度为:",[66,113098,113101],{"className":113099,"code":113100,"language":5154,"meta":71},[5152],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[73,113102,113100],{"__ignoreMap":71},[21,113104,113105],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[21,113107,113108],{},"程序每 100 步打印：",[66,113110,113113],{"className":113111,"code":113112,"language":5154,"meta":71},[5152],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[73,113114,113112],{"__ignoreMap":71},[21,113116,113117,113118,113120],{},"如果控制有效，你应该看到最终 ",[73,113119,103200],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[16,113122,102317],{"id":102316},[29,113124,113125,113128,113131,113137,113143,113150,113160],{},[32,113126,113127],{},"修改目标点位置。",[32,113129,113130],{},"重新运行，观察最终 tip 是否变化。",[32,113132,113133,113134,113136],{},"把 gravity 改成 ",[73,113135,102558],{},"，观察控制是否变差。",[32,113138,111150,113139,111154,113141,28354],{},[73,113140,102127],{},[73,113142,165],{},[32,113144,102380,113145,102383,113147,113149],{},[73,113146,110565],{},[73,113148,107276],{},"，观察机械臂是否更难移动。",[32,113151,102380,113152,82499,113154,102383,113156,113159],{},[73,113153,103203],{},[73,113155,104115],{},[73,113157,113158],{},"0.2 0 0.6","，观察 reward 和 final tip。",[32,113161,113162],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[16,113164,102422],{"id":102421},[46,113166,113168],{"id":113167},"site-not-found",[73,113169,113170],{},"site not found",[21,113172,113173,113174,100987,113177,28354],{},"检查 XML 中是否有 ",[73,113175,113176],{},"site name=\"tip\"",[73,113178,113179],{},"site name=\"target\"",[46,113181,113182],{"id":113182},"机械臂完全不动",[21,113184,102492],{},[29,113186,113187,113192,113195,113200],{},[32,113188,113189,113191],{},[73,113190,102127],{}," 是否为 2",[32,113193,113194],{},"actuator 是否引用正确 joint",[32,113196,113197,113199],{},[73,113198,101045],{}," 是否被赋值",[32,113201,113202,113203],{},"是否执行了 ",[73,113204,100654],{},[46,113206,113207],{"id":113207},"控制效果不好",[21,113209,113210],{},"正常。本章重点不是控制器最优，而是任务结构:",[66,113212,113215],{"className":113213,"code":113214,"language":5154,"meta":71},[5152],"obs → action → mj_step → reward → next_obs\n",[73,113216,113214],{"__ignoreMap":71},[46,113218,113220],{"id":113219},"tip-坐标不变化","tip 坐标不变化",[21,113222,102544],{},[29,113224,113225,113230,113238,113247],{},[32,113226,113227,113228,28354],{},"是否每步调用了 ",[73,113229,100654],{},[32,113231,113232,113233,100987,113235,28354],{},"是否写入了 ",[73,113234,106095],{},[73,113236,113237],{},"data.ctrl[1]",[32,113239,113240,113241,300,113244,28354],{},"actuator 是否正确引用 ",[73,113242,113243],{},"joint1",[73,113245,113246],{},"joint2",[32,113248,113249],{},"控制输入是否太小。",[46,113251,113252],{"id":113252},"目标点不会动",[21,113254,113255],{},"本章的 target 是固定 site：",[66,113257,113259],{"className":53036,"code":113258,"language":53038,"meta":71,"style":71},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[73,113260,113261],{"__ignoreMap":71},[76,113262,113263,113265,113267,113269,113271,113273,113275,113277,113280],{"class":78,"line":79},[76,113264,998],{"class":86},[76,113266,103179],{"class":51269},[76,113268,14887],{"class":1927},[76,113270,133],{"class":86},[76,113272,111928],{"class":192},[76,113274,101075],{"class":1927},[76,113276,133],{"class":86},[76,113278,113279],{"class":192},"\"0.5 0 0.4\"",[76,113281,113282],{"class":86}," ...\u002F>\n",[21,113284,113285,113286,113288],{},"它直接挂在 ",[73,113287,101810],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[46,113290,113291],{"id":113291},"机械臂不像真实机械臂",[21,113293,113294],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[16,113296,102576],{"id":102575},[21,113298,113299],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[21,113301,113302],{},"核心公式：",[66,113304,113307],{"className":113305,"code":113306,"language":5154,"meta":71},[5152],"distance = ||tip - target||\nreward = -distance - action_cost\n",[73,113308,113306],{"__ignoreMap":71},[21,113310,113311],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5092,113313,113314],{},"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":71,"searchDepth":96,"depth":96,"links":113316},[113317,113318,113319,113324,113328,113329,113330,113338],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":113320},[113321,113322,113323],{"id":111520,"depth":1143,"text":111521},{"id":111596,"depth":1143,"text":111596},{"id":111626,"depth":1143,"text":111627},{"id":101221,"depth":96,"text":101222,"children":113325},[113326,113327],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":113331},[113332,113333,113334,113335,113336,113337],{"id":113167,"depth":1143,"text":113170},{"id":113182,"depth":1143,"text":113182},{"id":113207,"depth":1143,"text":113207},{"id":113219,"depth":1143,"text":113220},{"id":113252,"depth":1143,"text":113252},{"id":113291,"depth":1143,"text":113291},{"id":102575,"depth":96,"text":102576},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111324,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113345,"title":113346,"body":113347,"description":71,"extension":5123,"meta":116809,"navigation":2364,"path":116810,"seo":116811,"stem":116812,"__hash__":116813},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":9,"value":113348,"toc":116780},[113349,113352,113354,113357,113360,113385,113388,113394,113397,113403,113405,113407,113431,113433,113451,113453,113496,113498,113525,113527,113530,113582,113585,113591,113600,113603,113641,113644,113683,113686,113694,113701,113704,113710,113712,113766,113773,113818,113821,113825,113841,113851,113853,115114,115116,115128,115130,115141,115143,115146,115167,115170,115173,115206,115212,115215,115248,115251,115254,115295,115300,115314,115317,115330,115335,115358,115360,115375,115385,115400,115407,115427,115442,115460,115463,115480,115488,115504,115510,115542,115555,115587,115597,115632,115646,115692,115706,115748,115759,115772,115778,115811,115814,115841,115851,115891,115901,115918,115925,115943,115946,115987,116000,116015,116018,116041,116044,116056,116059,116078,116083,116104,116107,116122,116125,116159,116171,116186,116189,116214,116217,116236,116239,116271,116274,116298,116304,116334,116341,116354,116357,116359,116361,116367,116370,116373,116385,116388,116390,116444,116446,116450,116456,116465,116468,116475,116477,116500,116503,116507,116509,116527,116533,116535,116568,116571,116577,116581,116584,116604,116609,116613,116620,116640,116645,116649,116652,116672,116675,116761,116765,116768,116774,116777],[12,113350,113346],{"id":113351},"_8gymnasium-风格强化学习接口基础",[16,113353,100616],{"id":100615},[21,113355,113356],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[21,113358,113359],{},"你将实现:",[66,113361,113363],{"className":30347,"code":113362,"language":30349,"meta":71,"style":71},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[73,113364,113365,113375],{"__ignoreMap":71},[76,113366,113367,113370,113372],{"class":78,"line":79},[76,113368,113369],{"class":86},"obs, info ",[76,113371,133],{"class":82},[76,113373,113374],{"class":86}," env.reset()\n",[76,113376,113377,113380,113382],{"class":78,"line":96},[76,113378,113379],{"class":86},"obs, reward, terminated, truncated, info ",[76,113381,133],{"class":82},[76,113383,113384],{"class":86}," env.step(action)\n",[21,113386,113387],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[21,113389,113390,113391,113393],{},"前面章节的代码都是“脚本式”的：在 ",[73,113392,102264],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[21,113395,113396],{},"可以先记住 Gymnasium 环境的核心交互：",[66,113398,113401],{"className":113399,"code":113400,"language":5154,"meta":71},[5152],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[73,113402,113400],{"__ignoreMap":71},[16,113404,100739],{"id":100738},[21,113406,100742],{},[66,113408,113409],{"className":23790,"code":104357,"language":23792,"meta":71,"style":71},[73,113410,113411],{"__ignoreMap":71},[76,113412,113413,113415,113417,113419,113421,113423,113425,113427,113429],{"class":78,"line":79},[76,113414,24545],{"class":1927},[76,113416,26284],{"class":192},[76,113418,23802],{"class":192},[76,113420,26369],{"class":136},[76,113422,104372],{"class":192},[76,113424,100767],{"class":192},[76,113426,102470],{"class":192},[76,113428,100783],{"class":192},[76,113430,104381],{"class":192},[21,113432,102788],{},[66,113434,113436],{"className":23790,"code":113435,"language":23792,"meta":71,"style":71},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[73,113437,113438],{"__ignoreMap":71},[76,113439,113440,113442,113444,113446,113448],{"class":78,"line":79},[76,113441,23799],{"class":1927},[76,113443,23802],{"class":192},[76,113445,100899],{"class":192},[76,113447,107680],{"class":192},[76,113449,113450],{"class":192}," gymnasium\n",[21,113452,102805],{},[66,113454,113456],{"className":23790,"code":113455,"language":23792,"meta":71,"style":71},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[73,113457,113458,113475,113484],{"__ignoreMap":71},[76,113459,113460,113462,113464,113466,113469,113471,113473],{"class":78,"line":79},[76,113461,30299],{"class":1927},[76,113463,29145],{"class":192},[76,113465,25084],{"class":136},[76,113467,113468],{"class":192}," mujoco-gym-api",[76,113470,100944],{"class":192},[76,113472,100947],{"class":136},[76,113474,100950],{"class":136},[76,113476,113477,113479,113481],{"class":78,"line":96},[76,113478,30299],{"class":1927},[76,113480,100957],{"class":192},[76,113482,113483],{"class":192}," mujoco-gym-api\n",[76,113485,113486,113488,113490,113492,113494],{"class":78,"line":1143},[76,113487,23799],{"class":1927},[76,113489,23802],{"class":192},[76,113491,100899],{"class":192},[76,113493,107680],{"class":192},[76,113495,113450],{"class":192},[21,113497,100973],{},[29,113499,113500,113510,113513,113519],{},[32,113501,113502,113503,113506,113507,28354],{},"本章使用 ",[73,113504,113505],{},"gymnasium","，不是旧版 ",[73,113508,113509],{},"gym",[32,113511,113512],{},"Gymnasium API 与旧 Gym API 有差异。",[32,113514,113515,113516,28354],{},"旧 Gym 常见返回值是 4 个: ",[73,113517,113518],{},"obs, reward, done, info",[32,113520,113521,113522,28354],{},"Gymnasium 返回值是 5 个: ",[73,113523,113524],{},"obs, reward, terminated, truncated, info",[16,113526,101014],{"id":101013},[21,113528,113529],{},"强化学习环境接口包含:",[225,113531,113532,113541],{},[228,113533,113534],{},[231,113535,113536,113539],{},[234,113537,113538],{"align":23704},"方法",[234,113540,102665],{"align":23704},[272,113542,113543,113553,113563,113573],{},[231,113544,113545,113550],{},[277,113546,113547],{"align":23704},[73,113548,113549],{},"reset()",[277,113551,113552],{"align":23704},"重置环境",[231,113554,113555,113560],{},[277,113556,113557],{"align":23704},[73,113558,113559],{},"step(action)",[277,113561,113562],{"align":23704},"执行动作",[231,113564,113565,113570],{},[277,113566,113567],{"align":23704},[73,113568,113569],{},"observation_space",[277,113571,113572],{"align":23704},"观测空间",[231,113574,113575,113580],{},[277,113576,113577],{"align":23704},[73,113578,113579],{},"action_space",[277,113581,23622],{"align":23704},[21,113583,113584],{},"一个最小环境需要完成:",[66,113586,113589],{"className":113587,"code":113588,"language":5154,"meta":71},[5152],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[73,113590,113588],{"__ignoreMap":71},[46,113592,113594,100987,113597,104607],{"id":113593},"terminated-和-truncated-的区别",[73,113595,113596],{},"terminated",[73,113598,113599],{},"truncated",[21,113601,113602],{},"Gymnasium 把“结束”拆成两个概念：",[225,113604,113605,113615],{},[228,113606,113607],{},[231,113608,113609,113611,113613],{},[234,113610,104543],{"align":23704},[234,113612,100669],{"align":23704},[234,113614,21154],{"align":23704},[272,113616,113617,113629],{},[231,113618,113619,113623,113626],{},[277,113620,113621],{"align":23704},[73,113622,113596],{},[277,113624,113625],{"align":23704},"任务自然结束",[277,113627,113628],{"align":23704},"机械臂到达目标、机器人摔倒",[231,113630,113631,113635,113638],{},[277,113632,113633],{"align":23704},[73,113634,113599],{},[277,113636,113637],{"align":23704},"因外部限制截断",[277,113639,113640],{"align":23704},"达到最大步数、时间限制",[21,113642,113643],{},"本章中：",[66,113645,113647],{"className":30347,"code":113646,"language":30349,"meta":71,"style":71},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[73,113648,113649,113664],{"__ignoreMap":71},[76,113650,113651,113654,113656,113659,113661],{"class":78,"line":79},[76,113652,113653],{"class":86},"terminated ",[76,113655,133],{"class":82},[76,113657,113658],{"class":86}," dist ",[76,113660,998],{"class":82},[76,113662,113663],{"class":136}," 0.05\n",[76,113665,113666,113669,113671,113673,113676,113678,113680],{"class":78,"line":96},[76,113667,113668],{"class":86},"truncated ",[76,113670,133],{"class":82},[76,113672,38842],{"class":136},[76,113674,113675],{"class":86},".steps ",[76,113677,1674],{"class":82},[76,113679,38842],{"class":136},[76,113681,113682],{"class":86},".max_steps\n",[21,113684,113685],{},"也就是：",[29,113687,113688,113691],{},[32,113689,113690],{},"末端距离目标小于 0.05，任务成功结束。",[32,113692,113693],{},"步数超过上限，episode 被截断。",[46,113695,113697,100987,113699],{"id":113696},"observation_space-和-action_space",[73,113698,113569],{},[73,113700,113579],{},[21,113702,113703],{},"这两个对象告诉算法：",[66,113705,113708],{"className":113706,"code":113707,"language":5154,"meta":71},[5152],"观测长什么样\n动作允许多大\n",[73,113709,113707],{"__ignoreMap":71},[21,113711,14600],{},[66,113713,113715],{"className":30347,"code":113714,"language":30349,"meta":71,"style":71},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[73,113716,113717],{"__ignoreMap":71},[76,113718,113719,113721,113724,113726,113729,113732,113735,113737,113739,113742,113744,113746,113748,113750,113752,113754,113756,113759,113761,113763],{"class":78,"line":79},[76,113720,30792],{"class":136},[76,113722,113723],{"class":86},".action_space ",[76,113725,133],{"class":82},[76,113727,113728],{"class":86}," spaces.Box(",[76,113730,113731],{"class":5183},"low",[76,113733,113734],{"class":82},"=-",[76,113736,102372],{"class":136},[76,113738,12402],{"class":86},[76,113740,113741],{"class":5183},"high",[76,113743,133],{"class":82},[76,113745,102372],{"class":136},[76,113747,12402],{"class":86},[76,113749,95932],{"class":5183},[76,113751,133],{"class":82},[76,113753,87],{"class":86},[76,113755,165],{"class":136},[76,113757,113758],{"class":86},",), ",[76,113760,93469],{"class":5183},[76,113762,133],{"class":82},[76,113764,113765],{"class":86},"np.float32)\n",[21,113767,113768,113769,113772],{},"表示动作是 2 维数组，每个值都在 ",[73,113770,113771],{},"[-1, 1]"," 范围内。",[66,113774,113776],{"className":30347,"code":113775,"language":30349,"meta":71,"style":71},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[73,113777,113778],{"__ignoreMap":71},[76,113779,113780,113782,113785,113787,113789,113791,113793,113796,113798,113800,113802,113804,113806,113808,113810,113812,113814,113816],{"class":78,"line":79},[76,113781,30792],{"class":136},[76,113783,113784],{"class":86},".observation_space ",[76,113786,133],{"class":82},[76,113788,113728],{"class":86},[76,113790,113731],{"class":5183},[76,113792,113734],{"class":82},[76,113794,113795],{"class":86},"np.inf, ",[76,113797,113741],{"class":5183},[76,113799,133],{"class":82},[76,113801,113795],{"class":86},[76,113803,95932],{"class":5183},[76,113805,133],{"class":82},[76,113807,87],{"class":86},[76,113809,534],{"class":136},[76,113811,113758],{"class":86},[76,113813,93469],{"class":5183},[76,113815,133],{"class":82},[76,113817,113765],{"class":86},[21,113819,113820],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[46,113822,113824],{"id":113823},"frame_skip-是什么","frame_skip 是什么",[66,113826,113828],{"className":30347,"code":113827,"language":30349,"meta":71,"style":71},"self.frame_skip = 5\n",[73,113829,113830],{"__ignoreMap":71},[76,113831,113832,113834,113837,113839],{"class":78,"line":79},[76,113833,30792],{"class":136},[76,113835,113836],{"class":86},".frame_skip ",[76,113838,133],{"class":82},[76,113840,54396],{"class":136},[21,113842,113843,113844,113847,113848,113850],{},"表示外部调用一次 ",[73,113845,113846],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[73,113849,101184],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[16,113852,101222],{"id":101221},[66,113854,113856],{"className":30347,"code":113855,"language":30349,"meta":71,"style":71},"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",[73,113857,113858,113870,113876,113886,113897,113901,113905,113913,113918,113922,113926,113930,113934,113938,113942,113946,113951,113955,113959,113963,113968,113972,113976,113980,113984,113988,113992,113996,114000,114004,114008,114012,114016,114020,114038,114053,114057,114070,114080,114095,114112,114116,114137,114156,114181,114195,114199,114209,114221,114231,114235,114277,114315,114319,114329,114345,114360,114379,114386,114390,114403,114418,114433,114446,114465,114481,114485,114526,114541,114556,114560,114599,114610,114623,114627,114637,114646,114650,114660,114675,114693,114697,114708,114725,114738,114742,114752,114756,114767,114778,114782,114796,114810,114826,114830,114843,114860,114875,114882,114886,114890,114902,114912,114930,114942,114954,114958,114966,114982,114991,115000,115008,115050,115063,115068,115072,115090,115094,115098,115110],{"__ignoreMap":71},[76,113859,113860,113862,113865,113867],{"class":78,"line":79},[76,113861,30361],{"class":82},[76,113863,113864],{"class":86}," gymnasium ",[76,113866,31352],{"class":82},[76,113868,113869],{"class":86}," gym\n",[76,113871,113872,113874],{"class":78,"line":96},[76,113873,30361],{"class":82},[76,113875,101270],{"class":86},[76,113877,113878,113880,113882,113884],{"class":78,"line":1143},[76,113879,30361],{"class":82},[76,113881,31349],{"class":86},[76,113883,31352],{"class":82},[76,113885,31355],{"class":86},[76,113887,113888,113890,113892,113894],{"class":78,"line":1158},[76,113889,30706],{"class":82},[76,113891,113864],{"class":86},[76,113893,30361],{"class":82},[76,113895,113896],{"class":86}," spaces\n",[76,113898,113899],{"class":78,"line":1164},[76,113900,2365],{"emptyLinePlaceholder":2364},[76,113902,113903],{"class":78,"line":1178},[76,113904,2365],{"emptyLinePlaceholder":2364},[76,113906,113907,113909,113911],{"class":78,"line":1184},[76,113908,101283],{"class":136},[76,113910,13531],{"class":82},[76,113912,101288],{"class":192},[76,113914,113915],{"class":78,"line":1275},[76,113916,113917],{"class":192},"\u003Cmujoco model=\"gym_reacher\">\n",[76,113919,113920],{"class":78,"line":1281},[76,113921,111707],{"class":192},[76,113923,113924],{"class":78,"line":1293},[76,113925,2365],{"emptyLinePlaceholder":2364},[76,113927,113928],{"class":78,"line":1576},[76,113929,101307],{"class":192},[76,113931,113932],{"class":78,"line":1581},[76,113933,111725],{"class":192},[76,113935,113936],{"class":78,"line":1587},[76,113937,2365],{"emptyLinePlaceholder":2364},[76,113939,113940],{"class":78,"line":1592},[76,113941,111734],{"class":192},[76,113943,113944],{"class":78,"line":1606},[76,113945,111739],{"class":192},[76,113947,113948],{"class":78,"line":1611},[76,113949,113950],{"class":192},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[76,113952,113953],{"class":78,"line":1617},[76,113954,2365],{"emptyLinePlaceholder":2364},[76,113956,113957],{"class":78,"line":1638},[76,113958,111753],{"class":192},[76,113960,113961],{"class":78,"line":1643},[76,113962,111758],{"class":192},[76,113964,113965],{"class":78,"line":1657},[76,113966,113967],{"class":192},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[76,113969,113970],{"class":78,"line":1662},[76,113971,111768],{"class":192},[76,113973,113974],{"class":78,"line":1691},[76,113975,106407],{"class":192},[76,113977,113978],{"class":78,"line":1696},[76,113979,101336],{"class":192},[76,113981,113982],{"class":78,"line":1713},[76,113983,101341],{"class":192},[76,113985,113986],{"class":78,"line":1718},[76,113987,2365],{"emptyLinePlaceholder":2364},[76,113989,113990],{"class":78,"line":1723},[76,113991,106424],{"class":192},[76,113993,113994],{"class":78,"line":1728},[76,113995,111793],{"class":192},[76,113997,113998],{"class":78,"line":1742},[76,113999,111798],{"class":192},[76,114001,114002],{"class":78,"line":1747},[76,114003,106434],{"class":192},[76,114005,114006],{"class":78,"line":2542},[76,114007,101346],{"class":192},[76,114009,114010],{"class":78,"line":2556},[76,114011,95667],{"class":192},[76,114013,114014],{"class":78,"line":2564},[76,114015,2365],{"emptyLinePlaceholder":2364},[76,114017,114018],{"class":78,"line":2569},[76,114019,2365],{"emptyLinePlaceholder":2364},[76,114021,114022,114024,114027,114029,114031,114033,114036],{"class":78,"line":2575},[76,114023,14661],{"class":82},[76,114025,114026],{"class":1927}," ReacherEnv",[76,114028,87],{"class":86},[76,114030,113509],{"class":1927},[76,114032,646],{"class":86},[76,114034,114035],{"class":1927},"Env",[76,114037,30755],{"class":86},[76,114039,114040,114043,114045,114047,114050],{"class":78,"line":2581},[76,114041,114042],{"class":86},"    metadata ",[76,114044,133],{"class":82},[76,114046,4413],{"class":86},[76,114048,114049],{"class":192},"\"render_modes\"",[76,114051,114052],{"class":86},": []}\n",[76,114054,114055],{"class":78,"line":2586},[76,114056,2365],{"emptyLinePlaceholder":2364},[76,114058,114059,114061,114063,114066,114068],{"class":78,"line":7915},[76,114060,30770],{"class":82},[76,114062,30773],{"class":136},[76,114064,114065],{"class":86},"(self) -> ",[76,114067,95655],{"class":136},[76,114069,3704],{"class":86},[76,114071,114072,114074,114076,114078],{"class":78,"line":7939},[76,114073,30786],{"class":136},[76,114075,17228],{"class":86},[76,114077,30798],{"class":136},[76,114079,1940],{"class":86},[76,114081,114082,114084,114087,114089,114091,114093],{"class":78,"line":7944},[76,114083,30814],{"class":136},[76,114085,114086],{"class":86},".model ",[76,114088,133],{"class":82},[76,114090,101381],{"class":86},[76,114092,101283],{"class":136},[76,114094,93],{"class":86},[76,114096,114097,114099,114102,114104,114107,114109],{"class":78,"line":7950},[76,114098,30814],{"class":136},[76,114100,114101],{"class":86},".data ",[76,114103,133],{"class":82},[76,114105,114106],{"class":86}," mujoco.MjData(",[76,114108,30792],{"class":136},[76,114110,114111],{"class":86},".model)\n",[76,114113,114114],{"class":78,"line":7977},[76,114115,2365],{"emptyLinePlaceholder":2364},[76,114117,114118,114120,114123,114125,114128,114130,114133,114135],{"class":78,"line":7982},[76,114119,30814],{"class":136},[76,114121,114122],{"class":86},".tip_site_id ",[76,114124,133],{"class":82},[76,114126,114127],{"class":86}," mujoco.mj_name2id(",[76,114129,30792],{"class":136},[76,114131,114132],{"class":86},".model, mujoco.mjtObj.mjOBJ_SITE, ",[76,114134,111505],{"class":192},[76,114136,93],{"class":86},[76,114138,114139,114141,114144,114146,114148,114150,114152,114154],{"class":78,"line":7988},[76,114140,30814],{"class":136},[76,114142,114143],{"class":86},".target_site_id ",[76,114145,133],{"class":82},[76,114147,114127],{"class":86},[76,114149,30792],{"class":136},[76,114151,114132],{"class":86},[76,114153,111928],{"class":192},[76,114155,93],{"class":86},[76,114157,114158,114160,114162,114164,114166,114168,114171,114173,114175,114177,114179],{"class":78,"line":8000},[76,114159,2462],{"class":82},[76,114161,38842],{"class":136},[76,114163,114122],{"class":86},[76,114165,998],{"class":82},[76,114167,4058],{"class":136},[76,114169,114170],{"class":82}," or",[76,114172,38842],{"class":136},[76,114174,114143],{"class":86},[76,114176,998],{"class":82},[76,114178,4058],{"class":136},[76,114180,3704],{"class":86},[76,114182,114183,114186,114188,114190,114193],{"class":78,"line":8012},[76,114184,114185],{"class":82},"            raise",[76,114187,103404],{"class":136},[76,114189,87],{"class":86},[76,114191,114192],{"class":192},"\"required sites not found\"",[76,114194,93],{"class":86},[76,114196,114197],{"class":78,"line":8024},[76,114198,2365],{"emptyLinePlaceholder":2364},[76,114200,114201,114203,114205,114207],{"class":78,"line":9683},[76,114202,30814],{"class":136},[76,114204,113836],{"class":86},[76,114206,133],{"class":82},[76,114208,54396],{"class":136},[76,114210,114211,114213,114216,114218],{"class":78,"line":9708},[76,114212,30814],{"class":136},[76,114214,114215],{"class":86},".max_steps ",[76,114217,133],{"class":82},[76,114219,114220],{"class":136}," 200\n",[76,114222,114223,114225,114227,114229],{"class":78,"line":9731},[76,114224,30814],{"class":136},[76,114226,113675],{"class":86},[76,114228,133],{"class":82},[76,114230,47302],{"class":136},[76,114232,114233],{"class":78,"line":9755},[76,114234,2365],{"emptyLinePlaceholder":2364},[76,114236,114237,114239,114241,114243,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275],{"class":78,"line":9760},[76,114238,30814],{"class":136},[76,114240,113723],{"class":86},[76,114242,133],{"class":82},[76,114244,113728],{"class":86},[76,114246,113731],{"class":5183},[76,114248,113734],{"class":82},[76,114250,102372],{"class":136},[76,114252,12402],{"class":86},[76,114254,113741],{"class":5183},[76,114256,133],{"class":82},[76,114258,102372],{"class":136},[76,114260,12402],{"class":86},[76,114262,95932],{"class":5183},[76,114264,133],{"class":82},[76,114266,87],{"class":86},[76,114268,165],{"class":136},[76,114270,113758],{"class":86},[76,114272,93469],{"class":5183},[76,114274,133],{"class":82},[76,114276,113765],{"class":86},[76,114278,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313],{"class":78,"line":9765},[76,114280,30814],{"class":136},[76,114282,113784],{"class":86},[76,114284,133],{"class":82},[76,114286,113728],{"class":86},[76,114288,113731],{"class":5183},[76,114290,113734],{"class":82},[76,114292,113795],{"class":86},[76,114294,113741],{"class":5183},[76,114296,133],{"class":82},[76,114298,113795],{"class":86},[76,114300,95932],{"class":5183},[76,114302,133],{"class":82},[76,114304,87],{"class":86},[76,114306,534],{"class":136},[76,114308,113758],{"class":86},[76,114310,93469],{"class":5183},[76,114312,133],{"class":82},[76,114314,113765],{"class":86},[76,114316,114317],{"class":78,"line":9770},[76,114318,2365],{"emptyLinePlaceholder":2364},[76,114320,114321,114323,114326],{"class":78,"line":9779},[76,114322,30770],{"class":82},[76,114324,114325],{"class":1927}," _get_obs",[76,114327,114328],{"class":86},"(self) -> np.ndarray:\n",[76,114330,114331,114333,114335,114337,114340,114342],{"class":78,"line":9784},[76,114332,112106],{"class":86},[76,114334,133],{"class":82},[76,114336,38842],{"class":136},[76,114338,114339],{"class":86},".data.site_xpos[",[76,114341,30792],{"class":136},[76,114343,114344],{"class":86},".tip_site_id].copy()\n",[76,114346,114347,114349,114351,114353,114355,114357],{"class":78,"line":9790},[76,114348,112119],{"class":86},[76,114350,133],{"class":82},[76,114352,38842],{"class":136},[76,114354,114339],{"class":86},[76,114356,30792],{"class":136},[76,114358,114359],{"class":86},".target_site_id].copy()\n",[76,114361,114362,114364,114366,114369,114371,114374,114376],{"class":78,"line":9811},[76,114363,110151],{"class":86},[76,114365,133],{"class":82},[76,114367,114368],{"class":86}," np.concatenate([",[76,114370,30792],{"class":136},[76,114372,114373],{"class":86},".data.qpos.copy(), ",[76,114375,30792],{"class":136},[76,114377,114378],{"class":86},".data.qvel.copy(), tip, target])\n",[76,114380,114381,114383],{"class":78,"line":9817},[76,114382,14719],{"class":82},[76,114384,114385],{"class":86}," obs.astype(np.float32)\n",[76,114387,114388],{"class":78,"line":9831},[76,114389,2365],{"emptyLinePlaceholder":2364},[76,114391,114392,114394,114397,114399,114401],{"class":78,"line":9837},[76,114393,30770],{"class":82},[76,114395,114396],{"class":1927}," _get_reward",[76,114398,114065],{"class":86},[76,114400,127],{"class":136},[76,114402,3704],{"class":86},[76,114404,114405,114407,114409,114411,114413,114415],{"class":78,"line":9864},[76,114406,112106],{"class":86},[76,114408,133],{"class":82},[76,114410,38842],{"class":136},[76,114412,114339],{"class":86},[76,114414,30792],{"class":136},[76,114416,114417],{"class":86},".tip_site_id]\n",[76,114419,114420,114422,114424,114426,114428,114430],{"class":78,"line":9873},[76,114421,112119],{"class":86},[76,114423,133],{"class":82},[76,114425,38842],{"class":136},[76,114427,114339],{"class":86},[76,114429,30792],{"class":136},[76,114431,114432],{"class":86},".target_site_id]\n",[76,114434,114435,114438,114440,114442,114444],{"class":78,"line":9879},[76,114436,114437],{"class":86},"        dist ",[76,114439,133],{"class":82},[76,114441,111570],{"class":86},[76,114443,620],{"class":82},[76,114445,111575],{"class":86},[76,114447,114448,114451,114453,114455,114457,114460,114462],{"class":78,"line":9887},[76,114449,114450],{"class":86},"        control_cost ",[76,114452,133],{"class":82},[76,114454,112006],{"class":136},[76,114456,6485],{"class":82},[76,114458,114459],{"class":86}," np.sum(np.square(",[76,114461,30792],{"class":136},[76,114463,114464],{"class":86},".data.ctrl))\n",[76,114466,114467,114469,114471,114473,114475,114477,114479],{"class":78,"line":9892},[76,114468,14719],{"class":82},[76,114470,109766],{"class":136},[76,114472,87],{"class":86},[76,114474,620],{"class":82},[76,114476,111565],{"class":86},[76,114478,620],{"class":82},[76,114480,112028],{"class":86},[76,114482,114483],{"class":78,"line":16571},[76,114484,2365],{"emptyLinePlaceholder":2364},[76,114486,114487,114489,114492,114495,114497,114500,114502,114504,114506,114508,114510,114513,114516,114518,114520,114522,114524],{"class":78,"line":16577},[76,114488,30770],{"class":82},[76,114490,114491],{"class":1927}," reset",[76,114493,114494],{"class":86},"(self, ",[76,114496,543],{"class":82},[76,114498,114499],{"class":86},", seed: ",[76,114501,90],{"class":136},[76,114503,25078],{"class":82},[76,114505,38902],{"class":136},[76,114507,13531],{"class":82},[76,114509,38902],{"class":136},[76,114511,114512],{"class":86},", options: ",[76,114514,114515],{"class":136},"dict",[76,114517,25078],{"class":82},[76,114519,38902],{"class":136},[76,114521,13531],{"class":82},[76,114523,38902],{"class":136},[76,114525,30755],{"class":86},[76,114527,114528,114530,114533,114536,114538],{"class":78,"line":16600},[76,114529,30786],{"class":136},[76,114531,114532],{"class":86},"().reset(",[76,114534,114535],{"class":5183},"seed",[76,114537,133],{"class":82},[76,114539,114540],{"class":86},"seed)\n",[76,114542,114543,114546,114548,114551,114553],{"class":78,"line":16606},[76,114544,114545],{"class":86},"        mujoco.mj_resetData(",[76,114547,30792],{"class":136},[76,114549,114550],{"class":86},".model, ",[76,114552,30792],{"class":136},[76,114554,114555],{"class":86},".data)\n",[76,114557,114558],{"class":78,"line":16629},[76,114559,2365],{"emptyLinePlaceholder":2364},[76,114561,114562,114564,114567,114569,114571,114574,114576,114578,114580,114582,114584,114586,114588,114590,114592,114594,114596],{"class":78,"line":16643},[76,114563,30814],{"class":136},[76,114565,114566],{"class":86},".data.qpos[:] ",[76,114568,133],{"class":82},[76,114570,38842],{"class":136},[76,114572,114573],{"class":86},".np_random.uniform(",[76,114575,113731],{"class":5183},[76,114577,113734],{"class":82},[76,114579,86179],{"class":136},[76,114581,12402],{"class":86},[76,114583,113741],{"class":5183},[76,114585,133],{"class":82},[76,114587,86179],{"class":136},[76,114589,12402],{"class":86},[76,114591,31465],{"class":5183},[76,114593,133],{"class":82},[76,114595,30792],{"class":136},[76,114597,114598],{"class":86},".model.nq)\n",[76,114600,114601,114603,114606,114608],{"class":78,"line":16663},[76,114602,30814],{"class":136},[76,114604,114605],{"class":86},".data.qvel[:] ",[76,114607,133],{"class":82},[76,114609,104730],{"class":136},[76,114611,114612,114615,114617,114619,114621],{"class":78,"line":16669},[76,114613,114614],{"class":86},"        mujoco.mj_forward(",[76,114616,30792],{"class":136},[76,114618,114550],{"class":86},[76,114620,30792],{"class":136},[76,114622,114555],{"class":86},[76,114624,114625],{"class":78,"line":16680},[76,114626,2365],{"emptyLinePlaceholder":2364},[76,114628,114629,114631,114633,114635],{"class":78,"line":16703},[76,114630,30814],{"class":136},[76,114632,113675],{"class":86},[76,114634,133],{"class":82},[76,114636,47302],{"class":136},[76,114638,114639,114641,114643],{"class":78,"line":16725},[76,114640,14719],{"class":82},[76,114642,38842],{"class":136},[76,114644,114645],{"class":86},"._get_obs(), {}\n",[76,114647,114648],{"class":78,"line":16730},[76,114649,2365],{"emptyLinePlaceholder":2364},[76,114651,114652,114654,114657],{"class":78,"line":16736},[76,114653,30770],{"class":82},[76,114655,114656],{"class":1927}," step",[76,114658,114659],{"class":86},"(self, action):\n",[76,114661,114662,114664,114666,114669,114671,114673],{"class":78,"line":16750},[76,114663,110191],{"class":86},[76,114665,133],{"class":82},[76,114667,114668],{"class":86}," np.asarray(action, ",[76,114670,93469],{"class":5183},[76,114672,133],{"class":82},[76,114674,113765],{"class":86},[76,114676,114677,114679,114681,114683,114685,114688,114690],{"class":78,"line":16763},[76,114678,110191],{"class":86},[76,114680,133],{"class":82},[76,114682,107416],{"class":86},[76,114684,30792],{"class":136},[76,114686,114687],{"class":86},".action_space.low, ",[76,114689,30792],{"class":136},[76,114691,114692],{"class":86},".action_space.high)\n",[76,114694,114695],{"class":78,"line":16768},[76,114696,2365],{"emptyLinePlaceholder":2364},[76,114698,114699,114701,114704,114706],{"class":78,"line":16782},[76,114700,30814],{"class":136},[76,114702,114703],{"class":86},".data.ctrl[:] ",[76,114705,133],{"class":82},[76,114707,107439],{"class":86},[76,114709,114710,114712,114714,114716,114718,114720,114722],{"class":78,"line":16787},[76,114711,3368],{"class":82},[76,114713,101470],{"class":86},[76,114715,26012],{"class":82},[76,114717,32412],{"class":136},[76,114719,87],{"class":86},[76,114721,30792],{"class":136},[76,114723,114724],{"class":86},".frame_skip):\n",[76,114726,114727,114730,114732,114734,114736],{"class":78,"line":16793},[76,114728,114729],{"class":86},"            mujoco.mj_step(",[76,114731,30792],{"class":136},[76,114733,114550],{"class":86},[76,114735,30792],{"class":136},[76,114737,114555],{"class":86},[76,114739,114740],{"class":78,"line":16798},[76,114741,2365],{"emptyLinePlaceholder":2364},[76,114743,114744,114746,114748,114750],{"class":78,"line":16812},[76,114745,30814],{"class":136},[76,114747,113675],{"class":86},[76,114749,9444],{"class":82},[76,114751,55668],{"class":136},[76,114753,114754],{"class":78,"line":16817},[76,114755,2365],{"emptyLinePlaceholder":2364},[76,114757,114758,114760,114762,114764],{"class":78,"line":16822},[76,114759,110151],{"class":86},[76,114761,133],{"class":82},[76,114763,38842],{"class":136},[76,114765,114766],{"class":86},"._get_obs()\n",[76,114768,114769,114771,114773,114775],{"class":78,"line":16836},[76,114770,110256],{"class":86},[76,114772,133],{"class":82},[76,114774,38842],{"class":136},[76,114776,114777],{"class":86},"._get_reward()\n",[76,114779,114780],{"class":78,"line":16848},[76,114781,2365],{"emptyLinePlaceholder":2364},[76,114783,114784,114786,114788,114790,114792,114794],{"class":78,"line":16853},[76,114785,112106],{"class":86},[76,114787,133],{"class":82},[76,114789,38842],{"class":136},[76,114791,114339],{"class":86},[76,114793,30792],{"class":136},[76,114795,114417],{"class":86},[76,114797,114798,114800,114802,114804,114806,114808],{"class":78,"line":16866},[76,114799,112119],{"class":86},[76,114801,133],{"class":82},[76,114803,38842],{"class":136},[76,114805,114339],{"class":86},[76,114807,30792],{"class":136},[76,114809,114432],{"class":86},[76,114811,114812,114814,114816,114818,114821,114823],{"class":78,"line":16871},[76,114813,114437],{"class":86},[76,114815,133],{"class":82},[76,114817,109766],{"class":136},[76,114819,114820],{"class":86},"(np.linalg.norm(tip ",[76,114822,620],{"class":82},[76,114824,114825],{"class":86}," target))\n",[76,114827,114828],{"class":78,"line":16876},[76,114829,2365],{"emptyLinePlaceholder":2364},[76,114831,114832,114835,114837,114839,114841],{"class":78,"line":16881},[76,114833,114834],{"class":86},"        terminated ",[76,114836,133],{"class":82},[76,114838,113658],{"class":86},[76,114840,998],{"class":82},[76,114842,113663],{"class":136},[76,114844,114845,114848,114850,114852,114854,114856,114858],{"class":78,"line":16894},[76,114846,114847],{"class":86},"        truncated ",[76,114849,133],{"class":82},[76,114851,38842],{"class":136},[76,114853,113675],{"class":86},[76,114855,1674],{"class":82},[76,114857,38842],{"class":136},[76,114859,113682],{"class":86},[76,114861,114862,114865,114867,114869,114872],{"class":78,"line":16899},[76,114863,114864],{"class":86},"        info ",[76,114866,133],{"class":82},[76,114868,4413],{"class":86},[76,114870,114871],{"class":192},"\"distance\"",[76,114873,114874],{"class":86},": dist}\n",[76,114876,114877,114879],{"class":78,"line":32602},[76,114878,14719],{"class":82},[76,114880,114881],{"class":86}," obs, reward, terminated, truncated, info\n",[76,114883,114884],{"class":78,"line":32608},[76,114885,2365],{"emptyLinePlaceholder":2364},[76,114887,114888],{"class":78,"line":32614},[76,114889,2365],{"emptyLinePlaceholder":2364},[76,114891,114892,114894,114896,114898,114900],{"class":78,"line":32620},[76,114893,31916],{"class":82},[76,114895,1937],{"class":1927},[76,114897,101367],{"class":86},[76,114899,95655],{"class":136},[76,114901,3704],{"class":86},[76,114903,114904,114907,114909],{"class":78,"line":32626},[76,114905,114906],{"class":86},"    env ",[76,114908,133],{"class":82},[76,114910,114911],{"class":86}," ReacherEnv()\n",[76,114913,114914,114917,114919,114922,114924,114926,114928],{"class":78,"line":32637},[76,114915,114916],{"class":86},"    obs, info ",[76,114918,133],{"class":82},[76,114920,114921],{"class":86}," env.reset(",[76,114923,114535],{"class":5183},[76,114925,133],{"class":82},[76,114927,279],{"class":136},[76,114929,93],{"class":86},[76,114931,114932,114934,114936,114939],{"class":78,"line":32643},[76,114933,31268],{"class":136},[76,114935,87],{"class":86},[76,114937,114938],{"class":192},"\"initial obs shape:\"",[76,114940,114941],{"class":86},", obs.shape)\n",[76,114943,114944,114946,114948,114951],{"class":78,"line":32663},[76,114945,31268],{"class":136},[76,114947,87],{"class":86},[76,114949,114950],{"class":192},"\"initial info:\"",[76,114952,114953],{"class":86},", info)\n",[76,114955,114956],{"class":78,"line":32669},[76,114957,2365],{"emptyLinePlaceholder":2364},[76,114959,114960,114962,114964],{"class":78,"line":32680},[76,114961,110122],{"class":86},[76,114963,133],{"class":82},[76,114965,104730],{"class":136},[76,114967,114968,114970,114972,114974,114976,114978,114980],{"class":78,"line":32686},[76,114969,3166],{"class":82},[76,114971,31585],{"class":86},[76,114973,26012],{"class":82},[76,114975,32412],{"class":136},[76,114977,87],{"class":86},[76,114979,788],{"class":136},[76,114981,30755],{"class":86},[76,114983,114984,114986,114988],{"class":78,"line":32692},[76,114985,110191],{"class":86},[76,114987,133],{"class":82},[76,114989,114990],{"class":86}," env.action_space.sample()\n",[76,114992,114993,114996,114998],{"class":78,"line":32698},[76,114994,114995],{"class":86},"        obs, reward, terminated, truncated, info ",[76,114997,133],{"class":82},[76,114999,113384],{"class":86},[76,115001,115002,115004,115006],{"class":78,"line":32704},[76,115003,110266],{"class":86},[76,115005,9444],{"class":82},[76,115007,110271],{"class":86},[76,115009,115010,115012,115014,115016,115018,115021,115023,115025,115028,115030,115032,115035,115037,115039,115042,115044,115046,115048],{"class":78,"line":32710},[76,115011,32420],{"class":136},[76,115013,87],{"class":86},[76,115015,110300],{"class":192},[76,115017,110303],{"class":86},[76,115019,115020],{"class":192},"\"reward:\"",[76,115022,12402],{"class":86},[76,115024,31987],{"class":136},[76,115026,115027],{"class":86},"(reward, ",[76,115029,159],{"class":136},[76,115031,110314],{"class":86},[76,115033,115034],{"class":192},"\"distance:\"",[76,115036,12402],{"class":86},[76,115038,31987],{"class":136},[76,115040,115041],{"class":86},"(info[",[76,115043,114871],{"class":192},[76,115045,112171],{"class":86},[76,115047,159],{"class":136},[76,115049,30466],{"class":86},[76,115051,115052,115054,115057,115060],{"class":78,"line":32716},[76,115053,2462],{"class":82},[76,115055,115056],{"class":86}," terminated ",[76,115058,115059],{"class":82},"or",[76,115061,115062],{"class":86}," truncated:\n",[76,115064,115065],{"class":78,"line":32722},[76,115066,115067],{"class":82},"            break\n",[76,115069,115070],{"class":78,"line":32742},[76,115071,2365],{"emptyLinePlaceholder":2364},[76,115073,115074,115076,115078,115080,115082,115084,115086,115088],{"class":78,"line":32748},[76,115075,31268],{"class":136},[76,115077,87],{"class":86},[76,115079,110345],{"class":192},[76,115081,12402],{"class":86},[76,115083,31987],{"class":136},[76,115085,110352],{"class":86},[76,115087,159],{"class":136},[76,115089,30466],{"class":86},[76,115091,115092],{"class":78,"line":32764},[76,115093,2365],{"emptyLinePlaceholder":2364},[76,115095,115096],{"class":78,"line":32770},[76,115097,2365],{"emptyLinePlaceholder":2364},[76,115099,115100,115102,115104,115106,115108],{"class":78,"line":32784},[76,115101,1495],{"class":82},[76,115103,31189],{"class":136},[76,115105,101528],{"class":82},[76,115107,101531],{"class":192},[76,115109,3704],{"class":86},[76,115111,115112],{"class":78,"line":32790},[76,115113,101538],{"class":86},[21,115115,103539],{},[66,115117,115119],{"className":23790,"code":115118,"language":23792,"meta":71,"style":71},"touch ch8_gym_env.py\n",[73,115120,115121],{"__ignoreMap":71},[76,115122,115123,115125],{"class":78,"line":79},[76,115124,101252],{"class":1927},[76,115126,115127],{"class":192}," ch8_gym_env.py\n",[21,115129,110413],{},[66,115131,115133],{"className":23790,"code":115132,"language":23792,"meta":71,"style":71},"python ch8_gym_env.py\n",[73,115134,115135],{"__ignoreMap":71},[76,115136,115137,115139],{"class":78,"line":79},[76,115138,30349],{"class":1927},[76,115140,115127],{"class":192},[46,115142,101541],{"id":101541},[21,115144,115145],{},"继承 Gymnasium 环境：",[66,115147,115149],{"className":30347,"code":115148,"language":30349,"meta":71,"style":71},"class ReacherEnv(gym.Env):\n",[73,115150,115151],{"__ignoreMap":71},[76,115152,115153,115155,115157,115159,115161,115163,115165],{"class":78,"line":79},[76,115154,14661],{"class":82},[76,115156,114026],{"class":1927},[76,115158,87],{"class":86},[76,115160,113509],{"class":1927},[76,115162,646],{"class":86},[76,115164,114035],{"class":1927},[76,115166,30755],{"class":86},[21,115168,115169],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[21,115171,115172],{},"初始化模型：",[66,115174,115176],{"className":30347,"code":115175,"language":30349,"meta":71,"style":71},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[73,115177,115178,115192],{"__ignoreMap":71},[76,115179,115180,115182,115184,115186,115188,115190],{"class":78,"line":79},[76,115181,30792],{"class":136},[76,115183,114086],{"class":86},[76,115185,133],{"class":82},[76,115187,101381],{"class":86},[76,115189,101283],{"class":136},[76,115191,93],{"class":86},[76,115193,115194,115196,115198,115200,115202,115204],{"class":78,"line":96},[76,115195,30792],{"class":136},[76,115197,114101],{"class":86},[76,115199,133],{"class":82},[76,115201,114106],{"class":86},[76,115203,30792],{"class":136},[76,115205,114111],{"class":86},[21,115207,115208,115209,115211],{},"这和前面章节一样，只是现在放到了类的 ",[73,115210,30798],{}," 里。",[21,115213,115214],{},"缓存 site ID：",[66,115216,115218],{"className":30347,"code":115217,"language":30349,"meta":71,"style":71},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[73,115219,115220,115234],{"__ignoreMap":71},[76,115221,115222,115224,115226,115228,115230,115232],{"class":78,"line":79},[76,115223,30792],{"class":136},[76,115225,114122],{"class":86},[76,115227,133],{"class":82},[76,115229,114127],{"class":86},[76,115231,89523],{"class":136},[76,115233,93],{"class":86},[76,115235,115236,115238,115240,115242,115244,115246],{"class":78,"line":96},[76,115237,30792],{"class":136},[76,115239,114143],{"class":86},[76,115241,133],{"class":82},[76,115243,114127],{"class":86},[76,115245,89523],{"class":136},[76,115247,93],{"class":86},[21,115249,115250],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[21,115252,115253],{},"reset：",[66,115255,115257],{"className":30347,"code":115256,"language":30349,"meta":71,"style":71},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[73,115258,115259],{"__ignoreMap":71},[76,115260,115261,115263,115265,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293],{"class":78,"line":79},[76,115262,31916],{"class":82},[76,115264,114491],{"class":1927},[76,115266,114494],{"class":86},[76,115268,543],{"class":82},[76,115270,114499],{"class":86},[76,115272,90],{"class":136},[76,115274,25078],{"class":82},[76,115276,38902],{"class":136},[76,115278,13531],{"class":82},[76,115280,38902],{"class":136},[76,115282,114512],{"class":86},[76,115284,114515],{"class":136},[76,115286,25078],{"class":82},[76,115288,38902],{"class":136},[76,115290,13531],{"class":82},[76,115292,38902],{"class":136},[76,115294,30755],{"class":86},[21,115296,115297,115299],{},[73,115298,70025],{}," 做四件事：",[29,115301,115302,115305,115308,115311],{},[32,115303,115304],{},"设置随机种子。",[32,115306,115307],{},"重置 MuJoCo data。",[32,115309,115310],{},"随机初始化关节角。",[32,115312,115313],{},"返回初始观测和 info。",[21,115315,115316],{},"step：",[66,115318,115320],{"className":30347,"code":115319,"language":30349,"meta":71,"style":71},"def step(self, action):\n",[73,115321,115322],{"__ignoreMap":71},[76,115323,115324,115326,115328],{"class":78,"line":79},[76,115325,31916],{"class":82},[76,115327,114656],{"class":1927},[76,115329,114659],{"class":86},[21,115331,115332,115334],{},[73,115333,107103],{}," 做六件事：",[29,115336,115337,115340,115346,115349,115352,115355],{},[32,115338,115339],{},"检查并裁剪 action。",[32,115341,115342,115343,28354],{},"写入 ",[73,115344,115345],{},"self.data.ctrl",[32,115347,115348],{},"连续推进若干个 MuJoCo 物理步。",[32,115350,115351],{},"计算新观测。",[32,115353,115354],{},"计算奖励和结束条件。",[32,115356,115357],{},"返回 Gymnasium 标准五元组。",[46,115359,101677],{"id":101677},[66,115361,115363],{"className":30347,"code":115362,"language":30349,"meta":71,"style":71},"import gymnasium as gym\n",[73,115364,115365],{"__ignoreMap":71},[76,115366,115367,115369,115371,115373],{"class":78,"line":79},[76,115368,30361],{"class":82},[76,115370,113864],{"class":86},[76,115372,31352],{"class":82},[76,115374,113869],{"class":86},[21,115376,115377,115378,115380,115381,115384],{},"导入 Gymnasium，并起别名 ",[73,115379,113509],{},"。后面写 ",[73,115382,115383],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[66,115386,115388],{"className":30347,"code":115387,"language":30349,"meta":71,"style":71},"from gymnasium import spaces\n",[73,115389,115390],{"__ignoreMap":71},[76,115391,115392,115394,115396,115398],{"class":78,"line":79},[76,115393,30706],{"class":82},[76,115395,113864],{"class":86},[76,115397,30361],{"class":82},[76,115399,113896],{"class":86},[21,115401,115402,115403,115406],{},"导入空间定义工具。",[73,115404,115405],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[66,115408,115409],{"className":30347,"code":115148,"language":30349,"meta":71,"style":71},[73,115410,115411],{"__ignoreMap":71},[76,115412,115413,115415,115417,115419,115421,115423,115425],{"class":78,"line":79},[76,115414,14661],{"class":82},[76,115416,114026],{"class":1927},[76,115418,87],{"class":86},[76,115420,113509],{"class":1927},[76,115422,646],{"class":86},[76,115424,114035],{"class":1927},[76,115426,30755],{"class":86},[21,115428,115429,115430,115433,115434,115436,115437,100987,115439,115441],{},"定义一个类，名字叫 ",[73,115431,115432],{},"ReacherEnv","。括号里的 ",[73,115435,115383],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[73,115438,70025],{},[73,115440,107103],{}," 这两个核心方法。",[66,115443,115445],{"className":30347,"code":115444,"language":30349,"meta":71,"style":71},"metadata = {\"render_modes\": []}\n",[73,115446,115447],{"__ignoreMap":71},[76,115448,115449,115452,115454,115456,115458],{"class":78,"line":79},[76,115450,115451],{"class":86},"metadata ",[76,115453,133],{"class":82},[76,115455,4413],{"class":86},[76,115457,114049],{"class":192},[76,115459,114052],{"class":86},[21,115461,115462],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[66,115464,115466],{"className":30347,"code":115465,"language":30349,"meta":71,"style":71},"def __init__(self) -> None:\n",[73,115467,115468],{"__ignoreMap":71},[76,115469,115470,115472,115474,115476,115478],{"class":78,"line":79},[76,115471,31916],{"class":82},[76,115473,30773],{"class":136},[76,115475,114065],{"class":86},[76,115477,95655],{"class":136},[76,115479,3704],{"class":86},[21,115481,115482,115484,115485,28354],{},[73,115483,30798],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[73,115486,115487],{},"env = ReacherEnv()",[66,115489,115491],{"className":30347,"code":115490,"language":30349,"meta":71,"style":71},"super().__init__()\n",[73,115492,115493],{"__ignoreMap":71},[76,115494,115495,115498,115500,115502],{"class":78,"line":79},[76,115496,115497],{"class":136},"super",[76,115499,17228],{"class":86},[76,115501,30798],{"class":136},[76,115503,1940],{"class":86},[21,115505,115506,115507,115509],{},"调用父类 ",[73,115508,115383],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[66,115511,115512],{"className":30347,"code":115175,"language":30349,"meta":71,"style":71},[73,115513,115514,115528],{"__ignoreMap":71},[76,115515,115516,115518,115520,115522,115524,115526],{"class":78,"line":79},[76,115517,30792],{"class":136},[76,115519,114086],{"class":86},[76,115521,133],{"class":82},[76,115523,101381],{"class":86},[76,115525,101283],{"class":136},[76,115527,93],{"class":86},[76,115529,115530,115532,115534,115536,115538,115540],{"class":78,"line":96},[76,115531,30792],{"class":136},[76,115533,114101],{"class":86},[76,115535,133],{"class":82},[76,115537,114106],{"class":86},[76,115539,30792],{"class":136},[76,115541,114111],{"class":86},[21,115543,115544,115545,115547,115548,100987,115551,115554],{},"把 MuJoCo 模型和状态保存到 ",[73,115546,30792],{}," 上。",[73,115549,115550],{},"self.model",[73,115552,115553],{},"self.data"," 表示这个环境对象自己的模型和状态。",[66,115556,115557],{"className":30347,"code":115217,"language":30349,"meta":71,"style":71},[73,115558,115559,115573],{"__ignoreMap":71},[76,115560,115561,115563,115565,115567,115569,115571],{"class":78,"line":79},[76,115562,30792],{"class":136},[76,115564,114122],{"class":86},[76,115566,133],{"class":82},[76,115568,114127],{"class":86},[76,115570,89523],{"class":136},[76,115572,93],{"class":86},[76,115574,115575,115577,115579,115581,115583,115585],{"class":78,"line":96},[76,115576,30792],{"class":136},[76,115578,114143],{"class":86},[76,115580,133],{"class":82},[76,115582,114127],{"class":86},[76,115584,89523],{"class":136},[76,115586,93],{"class":86},[21,115588,115589,115590,100987,115593,115596],{},"提前查好 tip 和 target 的 site ID。这样 ",[73,115591,115592],{},"_get_obs",[73,115594,115595],{},"_get_reward"," 里就不用每次按名字查找。",[66,115598,115600],{"className":30347,"code":115599,"language":30349,"meta":71,"style":71},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[73,115601,115602,115612,115622],{"__ignoreMap":71},[76,115603,115604,115606,115608,115610],{"class":78,"line":79},[76,115605,30792],{"class":136},[76,115607,113836],{"class":86},[76,115609,133],{"class":82},[76,115611,54396],{"class":136},[76,115613,115614,115616,115618,115620],{"class":78,"line":96},[76,115615,30792],{"class":136},[76,115617,114215],{"class":86},[76,115619,133],{"class":82},[76,115621,114220],{"class":136},[76,115623,115624,115626,115628,115630],{"class":78,"line":1143},[76,115625,30792],{"class":136},[76,115627,113675],{"class":86},[76,115629,133],{"class":82},[76,115631,47302],{"class":136},[21,115633,115634,115637,115638,115641,115642,115645],{},[73,115635,115636],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[73,115639,115640],{},"max_steps"," 是一个 episode 最多运行多少步。",[73,115643,115644],{},"steps"," 记录当前 episode 已经走了多少步。",[66,115647,115648],{"className":30347,"code":113714,"language":30349,"meta":71,"style":71},[73,115649,115650],{"__ignoreMap":71},[76,115651,115652,115654,115656,115658,115660,115662,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690],{"class":78,"line":79},[76,115653,30792],{"class":136},[76,115655,113723],{"class":86},[76,115657,133],{"class":82},[76,115659,113728],{"class":86},[76,115661,113731],{"class":5183},[76,115663,113734],{"class":82},[76,115665,102372],{"class":136},[76,115667,12402],{"class":86},[76,115669,113741],{"class":5183},[76,115671,133],{"class":82},[76,115673,102372],{"class":136},[76,115675,12402],{"class":86},[76,115677,95932],{"class":5183},[76,115679,133],{"class":82},[76,115681,87],{"class":86},[76,115683,165],{"class":136},[76,115685,113758],{"class":86},[76,115687,93469],{"class":5183},[76,115689,133],{"class":82},[76,115691,113765],{"class":86},[21,115693,115694,115695,115698,115699,100987,115702,115705],{},"定义动作空间。",[73,115696,115697],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[73,115700,115701],{},"low=-1.0",[73,115703,115704],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[66,115707,115708],{"className":30347,"code":113775,"language":30349,"meta":71,"style":71},[73,115709,115710],{"__ignoreMap":71},[76,115711,115712,115714,115716,115718,115720,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746],{"class":78,"line":79},[76,115713,30792],{"class":136},[76,115715,113784],{"class":86},[76,115717,133],{"class":82},[76,115719,113728],{"class":86},[76,115721,113731],{"class":5183},[76,115723,113734],{"class":82},[76,115725,113795],{"class":86},[76,115727,113741],{"class":5183},[76,115729,133],{"class":82},[76,115731,113795],{"class":86},[76,115733,95932],{"class":5183},[76,115735,133],{"class":82},[76,115737,87],{"class":86},[76,115739,534],{"class":136},[76,115741,113758],{"class":86},[76,115743,93469],{"class":5183},[76,115745,133],{"class":82},[76,115747,113765],{"class":86},[21,115749,115750,115751,115754,115755,115758],{},"定义观测空间。",[73,115752,115753],{},"shape=(10,)"," 表示观测是 10 个数。",[73,115756,115757],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[66,115760,115762],{"className":30347,"code":115761,"language":30349,"meta":71,"style":71},"def _get_obs(self) -> np.ndarray:\n",[73,115763,115764],{"__ignoreMap":71},[76,115765,115766,115768,115770],{"class":78,"line":79},[76,115767,31916],{"class":82},[76,115769,114325],{"class":1927},[76,115771,114328],{"class":86},[21,115773,115774,115775,115777],{},"定义内部函数，用来生成观测。函数名前面的 ",[73,115776,1080],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[66,115779,115781],{"className":30347,"code":115780,"language":30349,"meta":71,"style":71},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[73,115782,115783,115797],{"__ignoreMap":71},[76,115784,115785,115787,115789,115791,115793,115795],{"class":78,"line":79},[76,115786,111537],{"class":86},[76,115788,133],{"class":82},[76,115790,38842],{"class":136},[76,115792,114339],{"class":86},[76,115794,30792],{"class":136},[76,115796,114344],{"class":86},[76,115798,115799,115801,115803,115805,115807,115809],{"class":78,"line":96},[76,115800,111547],{"class":86},[76,115802,133],{"class":82},[76,115804,38842],{"class":136},[76,115806,114339],{"class":86},[76,115808,30792],{"class":136},[76,115810,114359],{"class":86},[21,115812,115813],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[66,115815,115817],{"className":30347,"code":115816,"language":30349,"meta":71,"style":71},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[73,115818,115819,115835],{"__ignoreMap":71},[76,115820,115821,115823,115825,115827,115829,115831,115833],{"class":78,"line":79},[76,115822,110823],{"class":86},[76,115824,133],{"class":82},[76,115826,114368],{"class":86},[76,115828,30792],{"class":136},[76,115830,114373],{"class":86},[76,115832,30792],{"class":136},[76,115834,114378],{"class":86},[76,115836,115837,115839],{"class":78,"line":96},[76,115838,17013],{"class":82},[76,115840,114385],{"class":86},[21,115842,115843,115844,115847,115848,115850],{},"拼接观测，并转换成 ",[73,115845,115846],{},"float32","。很多强化学习库默认使用 ",[73,115849,115846],{},"，所以这里主动转换。",[66,115852,115853],{"className":30347,"code":115256,"language":30349,"meta":71,"style":71},[73,115854,115855],{"__ignoreMap":71},[76,115856,115857,115859,115861,115863,115865,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889],{"class":78,"line":79},[76,115858,31916],{"class":82},[76,115860,114491],{"class":1927},[76,115862,114494],{"class":86},[76,115864,543],{"class":82},[76,115866,114499],{"class":86},[76,115868,90],{"class":136},[76,115870,25078],{"class":82},[76,115872,38902],{"class":136},[76,115874,13531],{"class":82},[76,115876,38902],{"class":136},[76,115878,114512],{"class":86},[76,115880,114515],{"class":136},[76,115882,25078],{"class":82},[76,115884,38902],{"class":136},[76,115886,13531],{"class":82},[76,115888,38902],{"class":136},[76,115890,30755],{"class":86},[21,115892,115893,115894,115896,115897,115900],{},"定义 reset。",[73,115895,114535],{}," 用来控制随机数，保证实验可以复现。",[73,115898,115899],{},"options"," 用来接收额外配置，本章暂时不用。",[66,115902,115904],{"className":30347,"code":115903,"language":30349,"meta":71,"style":71},"super().reset(seed=seed)\n",[73,115905,115906],{"__ignoreMap":71},[76,115907,115908,115910,115912,115914,115916],{"class":78,"line":79},[76,115909,115497],{"class":136},[76,115911,114532],{"class":86},[76,115913,114535],{"class":5183},[76,115915,133],{"class":82},[76,115917,114540],{"class":86},[21,115919,115920,115921,115924],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[73,115922,115923],{},"self.np_random"," 生成可复现的随机数。",[66,115926,115928],{"className":30347,"code":115927,"language":30349,"meta":71,"style":71},"mujoco.mj_resetData(self.model, self.data)\n",[73,115929,115930],{"__ignoreMap":71},[76,115931,115932,115935,115937,115939,115941],{"class":78,"line":79},[76,115933,115934],{"class":86},"mujoco.mj_resetData(",[76,115936,30792],{"class":136},[76,115938,114550],{"class":86},[76,115940,30792],{"class":136},[76,115942,114555],{"class":86},[21,115944,115945],{},"把 MuJoCo 状态重置到默认状态。",[66,115947,115949],{"className":30347,"code":115948,"language":30349,"meta":71,"style":71},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[73,115950,115951],{"__ignoreMap":71},[76,115952,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985],{"class":78,"line":79},[76,115954,30792],{"class":136},[76,115956,114566],{"class":86},[76,115958,133],{"class":82},[76,115960,38842],{"class":136},[76,115962,114573],{"class":86},[76,115964,113731],{"class":5183},[76,115966,113734],{"class":82},[76,115968,86179],{"class":136},[76,115970,12402],{"class":86},[76,115972,113741],{"class":5183},[76,115974,133],{"class":82},[76,115976,86179],{"class":136},[76,115978,12402],{"class":86},[76,115980,31465],{"class":5183},[76,115982,133],{"class":82},[76,115984,30792],{"class":136},[76,115986,114598],{"class":86},[21,115988,115310,115989,115992,115993,115996,115997,115999],{},[73,115990,115991],{},"[:]"," 表示修改整个数组。",[73,115994,115995],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[73,115998,102119],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[66,116001,116003],{"className":30347,"code":116002,"language":30349,"meta":71,"style":71},"self.data.qvel[:] = 0.0\n",[73,116004,116005],{"__ignoreMap":71},[76,116006,116007,116009,116011,116013],{"class":78,"line":79},[76,116008,30792],{"class":136},[76,116010,114605],{"class":86},[76,116012,133],{"class":82},[76,116014,104730],{"class":136},[21,116016,116017],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[66,116019,116021],{"className":30347,"code":116020,"language":30349,"meta":71,"style":71},"self.steps = 0\nreturn self._get_obs(), {}\n",[73,116022,116023,116033],{"__ignoreMap":71},[76,116024,116025,116027,116029,116031],{"class":78,"line":79},[76,116026,30792],{"class":136},[76,116028,113675],{"class":86},[76,116030,133],{"class":82},[76,116032,47302],{"class":136},[76,116034,116035,116037,116039],{"class":78,"line":96},[76,116036,17013],{"class":82},[76,116038,38842],{"class":136},[76,116040,114645],{"class":86},[21,116042,116043],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[66,116045,116046],{"className":30347,"code":115319,"language":30349,"meta":71,"style":71},[73,116047,116048],{"__ignoreMap":71},[76,116049,116050,116052,116054],{"class":78,"line":79},[76,116051,31916],{"class":82},[76,116053,114656],{"class":1927},[76,116055,114659],{"class":86},[21,116057,116058],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[66,116060,116062],{"className":30347,"code":116061,"language":30349,"meta":71,"style":71},"action = np.asarray(action, dtype=np.float32)\n",[73,116063,116064],{"__ignoreMap":71},[76,116065,116066,116068,116070,116072,116074,116076],{"class":78,"line":79},[76,116067,107411],{"class":86},[76,116069,133],{"class":82},[76,116071,114668],{"class":86},[76,116073,93469],{"class":5183},[76,116075,133],{"class":82},[76,116077,113765],{"class":86},[21,116079,116080,116081,28354],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[73,116082,115846],{},[66,116084,116086],{"className":30347,"code":116085,"language":30349,"meta":71,"style":71},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[73,116087,116088],{"__ignoreMap":71},[76,116089,116090,116092,116094,116096,116098,116100,116102],{"class":78,"line":79},[76,116091,107411],{"class":86},[76,116093,133],{"class":82},[76,116095,107416],{"class":86},[76,116097,30792],{"class":136},[76,116099,114687],{"class":86},[76,116101,30792],{"class":136},[76,116103,114692],{"class":86},[21,116105,116106],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[66,116108,116110],{"className":30347,"code":116109,"language":30349,"meta":71,"style":71},"self.data.ctrl[:] = action\n",[73,116111,116112],{"__ignoreMap":71},[76,116113,116114,116116,116118,116120],{"class":78,"line":79},[76,116115,30792],{"class":136},[76,116117,114703],{"class":86},[76,116119,133],{"class":82},[76,116121,107439],{"class":86},[21,116123,116124],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[66,116126,116128],{"className":30347,"code":116127,"language":30349,"meta":71,"style":71},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[73,116129,116130,116146],{"__ignoreMap":71},[76,116131,116132,116134,116136,116138,116140,116142,116144],{"class":78,"line":79},[76,116133,2990],{"class":82},[76,116135,101470],{"class":86},[76,116137,26012],{"class":82},[76,116139,32412],{"class":136},[76,116141,87],{"class":86},[76,116143,30792],{"class":136},[76,116145,114724],{"class":86},[76,116147,116148,116151,116153,116155,116157],{"class":78,"line":96},[76,116149,116150],{"class":86},"    mujoco.mj_step(",[76,116152,30792],{"class":136},[76,116154,114550],{"class":86},[76,116156,30792],{"class":136},[76,116158,114555],{"class":86},[21,116160,116161,116162,116165,116166,116168,116169,28354],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[73,116163,116164],{},"frame_skip=5","，所以外部调用一次 ",[73,116167,113846],{},"，内部实际执行 5 次 ",[73,116170,101184],{},[66,116172,116174],{"className":30347,"code":116173,"language":30349,"meta":71,"style":71},"self.steps += 1\n",[73,116175,116176],{"__ignoreMap":71},[76,116177,116178,116180,116182,116184],{"class":78,"line":79},[76,116179,30792],{"class":136},[76,116181,113675],{"class":86},[76,116183,9444],{"class":82},[76,116185,55668],{"class":136},[21,116187,116188],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[66,116190,116192],{"className":30347,"code":116191,"language":30349,"meta":71,"style":71},"obs = self._get_obs()\nreward = self._get_reward()\n",[73,116193,116194,116204],{"__ignoreMap":71},[76,116195,116196,116198,116200,116202],{"class":78,"line":79},[76,116197,110823],{"class":86},[76,116199,133],{"class":82},[76,116201,38842],{"class":136},[76,116203,114766],{"class":86},[76,116205,116206,116208,116210,116212],{"class":78,"line":96},[76,116207,110974],{"class":86},[76,116209,133],{"class":82},[76,116211,38842],{"class":136},[76,116213,114777],{"class":86},[21,116215,116216],{},"计算新的观测和奖励。",[66,116218,116220],{"className":30347,"code":116219,"language":30349,"meta":71,"style":71},"dist = float(np.linalg.norm(tip - target))\n",[73,116221,116222],{"__ignoreMap":71},[76,116223,116224,116226,116228,116230,116232,116234],{"class":78,"line":79},[76,116225,111565],{"class":86},[76,116227,133],{"class":82},[76,116229,109766],{"class":136},[76,116231,114820],{"class":86},[76,116233,620],{"class":82},[76,116235,114825],{"class":86},[21,116237,116238],{},"计算末端到目标的距离，并转换成 Python float。",[66,116240,116241],{"className":30347,"code":113646,"language":30349,"meta":71,"style":71},[73,116242,116243,116255],{"__ignoreMap":71},[76,116244,116245,116247,116249,116251,116253],{"class":78,"line":79},[76,116246,113653],{"class":86},[76,116248,133],{"class":82},[76,116250,113658],{"class":86},[76,116252,998],{"class":82},[76,116254,113663],{"class":136},[76,116256,116257,116259,116261,116263,116265,116267,116269],{"class":78,"line":96},[76,116258,113668],{"class":86},[76,116260,133],{"class":82},[76,116262,38842],{"class":136},[76,116264,113675],{"class":86},[76,116266,1674],{"class":82},[76,116268,38842],{"class":136},[76,116270,113682],{"class":86},[21,116272,116273],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[66,116275,116277],{"className":30347,"code":116276,"language":30349,"meta":71,"style":71},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[73,116278,116279,116292],{"__ignoreMap":71},[76,116280,116281,116284,116286,116288,116290],{"class":78,"line":79},[76,116282,116283],{"class":86},"info ",[76,116285,133],{"class":82},[76,116287,4413],{"class":86},[76,116289,114871],{"class":192},[76,116291,114874],{"class":86},[76,116293,116294,116296],{"class":78,"line":96},[76,116295,17013],{"class":82},[76,116297,114881],{"class":86},[21,116299,116300,116303],{},[73,116301,116302],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[66,116305,116307],{"className":30347,"code":116306,"language":30349,"meta":71,"style":71},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[73,116308,116309,116318],{"__ignoreMap":71},[76,116310,116311,116314,116316],{"class":78,"line":79},[76,116312,116313],{"class":86},"env ",[76,116315,133],{"class":82},[76,116317,114911],{"class":86},[76,116319,116320,116322,116324,116326,116328,116330,116332],{"class":78,"line":96},[76,116321,113369],{"class":86},[76,116323,133],{"class":82},[76,116325,114921],{"class":86},[76,116327,114535],{"class":5183},[76,116329,133],{"class":82},[76,116331,279],{"class":136},[76,116333,93],{"class":86},[21,116335,116336,116337,116340],{},"创建环境并重置。",[73,116338,116339],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[66,116342,116344],{"className":30347,"code":116343,"language":30349,"meta":71,"style":71},"action = env.action_space.sample()\n",[73,116345,116346],{"__ignoreMap":71},[76,116347,116348,116350,116352],{"class":78,"line":79},[76,116349,107411],{"class":86},[76,116351,133],{"class":82},[76,116353,114990],{"class":86},[21,116355,116356],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[16,116358,102285],{"id":102284},[21,116360,105453],{},[66,116362,116365],{"className":116363,"code":116364,"language":5154,"meta":71},[5152],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[73,116366,116364],{"__ignoreMap":71},[21,116368,116369],{},"这个环境已经具备强化学习环境的基本结构。",[21,116371,116372],{},"主函数里使用随机动作：",[66,116374,116375],{"className":30347,"code":116343,"language":30349,"meta":71,"style":71},[73,116376,116377],{"__ignoreMap":71},[76,116378,116379,116381,116383],{"class":78,"line":79},[76,116380,107411],{"class":86},[76,116382,133],{"class":82},[76,116384,114990],{"class":86},[21,116386,116387],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[16,116389,102317],{"id":102316},[29,116391,116392,116395,116401,116410,116419,116428,116434],{},[32,116393,116394],{},"运行程序。",[32,116396,116397,116398,28354],{},"确认 ",[73,116399,116400],{},"obs.shape == (10,)",[32,116402,111150,116403,116406,116407,28354],{},[73,116404,116405],{},"env.action_space","，应类似 ",[73,116408,116409],{},"Box(-1.0, 1.0, (2,), float32)",[32,116411,105554,116412,116415,116416,28354],{},[73,116413,116414],{},"self.max_steps = 10","，确认环境会更快 ",[73,116417,116418],{},"truncated=True",[32,116420,102380,116421,102383,116424,116427],{},[73,116422,116423],{},"terminated = dist \u003C 0.05",[73,116425,116426],{},"dist \u003C 0.2","，观察是否更容易结束。",[32,116429,102380,116430,116433],{},[73,116431,116432],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[32,116435,116436,116437,116439,116440,116443],{},"在 ",[73,116438,116302],{}," 里加入 ",[73,116441,116442],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[16,116445,102422],{"id":102421},[46,116447,116449],{"id":116448},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[21,116451,116452,116453,116455],{},"Gymnasium 的 ",[73,116454,107103],{}," 返回 5 个值:",[66,116457,116459],{"className":30347,"code":116458,"language":30349,"meta":71,"style":71},"obs, reward, terminated, truncated, info\n",[73,116460,116461],{"__ignoreMap":71},[76,116462,116463],{"class":78,"line":79},[76,116464,116458],{"class":86},[21,116466,116467],{},"不是旧 Gym 的 4 个值。",[46,116469,116471,116474],{"id":116470},"datactrl-action-维度错误",[73,116472,116473],{},"data.ctrl[:] = action"," 维度错误",[21,116476,102492],{},[66,116478,116480],{"className":30347,"code":116479,"language":30349,"meta":71,"style":71},"print(self.model.nu)\nprint(action.shape)\n",[73,116481,116482,116493],{"__ignoreMap":71},[76,116483,116484,116486,116488,116490],{"class":78,"line":79},[76,116485,30384],{"class":136},[76,116487,87],{"class":86},[76,116489,30792],{"class":136},[76,116491,116492],{"class":86},".model.nu)\n",[76,116494,116495,116497],{"class":78,"line":96},[76,116496,30384],{"class":136},[76,116498,116499],{"class":86},"(action.shape)\n",[21,116501,116502],{},"两者必须匹配。",[46,116504,116506],{"id":116505},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[21,116508,102431],{},[66,116510,116512],{"className":30347,"code":116511,"language":30349,"meta":71,"style":71},"mujoco.mj_forward(self.model, self.data)\n",[73,116513,116514],{"__ignoreMap":71},[76,116515,116516,116519,116521,116523,116525],{"class":78,"line":79},[76,116517,116518],{"class":86},"mujoco.mj_forward(",[76,116520,30792],{"class":136},[76,116522,114550],{"class":86},[76,116524,30792],{"class":136},[76,116526,114555],{"class":86},[46,116528,116530,116532],{"id":116529},"observation_space-维度和-obs-不一致",[73,116531,113569],{}," 维度和 obs 不一致",[21,116534,102544],{},[66,116536,116538],{"className":30347,"code":116537,"language":30349,"meta":71,"style":71},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[73,116539,116540,116550,116557],{"__ignoreMap":71},[76,116541,116542,116544,116546,116548],{"class":78,"line":79},[76,116543,110823],{"class":86},[76,116545,133],{"class":82},[76,116547,38842],{"class":136},[76,116549,114766],{"class":86},[76,116551,116552,116554],{"class":78,"line":96},[76,116553,30384],{"class":136},[76,116555,116556],{"class":86},"(obs.shape)\n",[76,116558,116559,116561,116563,116565],{"class":78,"line":1143},[76,116560,30384],{"class":136},[76,116562,87],{"class":86},[76,116564,30792],{"class":136},[76,116566,116567],{"class":86},".observation_space.shape)\n",[21,116569,116570],{},"两者必须一致。本章观测是：",[66,116572,116575],{"className":116573,"code":116574,"language":5154,"meta":71},[5152],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[73,116576,116574],{"__ignoreMap":71},[46,116578,116580],{"id":116579},"action-超过范围","action 超过范围",[21,116582,116583],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[66,116585,116586],{"className":30347,"code":116085,"language":30349,"meta":71,"style":71},[73,116587,116588],{"__ignoreMap":71},[76,116589,116590,116592,116594,116596,116598,116600,116602],{"class":78,"line":79},[76,116591,107411],{"class":86},[76,116593,133],{"class":82},[76,116595,107416],{"class":86},[76,116597,30792],{"class":136},[76,116599,114687],{"class":86},[76,116601,30792],{"class":136},[76,116603,114692],{"class":86},[21,116605,116606,116607,28354],{},"这能避免无效动作直接写入 ",[73,116608,101045],{},[46,116610,116612],{"id":116611},"忘记返回-info","忘记返回 info",[21,116614,116452,116615,100987,116617,116619],{},[73,116616,70025],{},[73,116618,107103],{}," 都会返回 info：",[66,116621,116622],{"className":30347,"code":113362,"language":30349,"meta":71,"style":71},[73,116623,116624,116632],{"__ignoreMap":71},[76,116625,116626,116628,116630],{"class":78,"line":79},[76,116627,113369],{"class":86},[76,116629,133],{"class":82},[76,116631,113374],{"class":86},[76,116633,116634,116636,116638],{"class":78,"line":96},[76,116635,113379],{"class":86},[76,116637,133],{"class":82},[76,116639,113384],{"class":86},[21,116641,116642,116643,28354],{},"即使暂时没有额外信息，也返回 ",[73,116644,32428],{},[16,116646,116648],{"id":116647},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[21,116650,116651],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[29,116653,116654,116657,116660,116663,116666,116669],{},[32,116655,116656],{},"更稳定的 reward。",[32,116658,116659],{},"合理的 episode 长度。",[32,116661,116662],{},"可重复的随机目标采样。",[32,116664,116665],{},"render 接口。",[32,116667,116668],{},"环境注册代码。",[32,116670,116671],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[21,116673,116674],{},"如果只是自己写训练循环，最小形式是：",[66,116676,116678],{"className":30347,"code":116677,"language":30349,"meta":71,"style":71},"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",[73,116679,116680,116688,116704,116708,116724,116733,116742,116752],{"__ignoreMap":71},[76,116681,116682,116684,116686],{"class":78,"line":79},[76,116683,116313],{"class":86},[76,116685,133],{"class":82},[76,116687,114911],{"class":86},[76,116689,116690,116692,116694,116696,116698,116700,116702],{"class":78,"line":96},[76,116691,113369],{"class":86},[76,116693,133],{"class":82},[76,116695,114921],{"class":86},[76,116697,114535],{"class":5183},[76,116699,133],{"class":82},[76,116701,279],{"class":136},[76,116703,93],{"class":86},[76,116705,116706],{"class":78,"line":1143},[76,116707,2365],{"emptyLinePlaceholder":2364},[76,116709,116710,116712,116714,116716,116718,116720,116722],{"class":78,"line":1158},[76,116711,2990],{"class":82},[76,116713,101470],{"class":86},[76,116715,26012],{"class":82},[76,116717,32412],{"class":136},[76,116719,87],{"class":86},[76,116721,6377],{"class":136},[76,116723,30755],{"class":86},[76,116725,116726,116729,116731],{"class":78,"line":1164},[76,116727,116728],{"class":86},"    action ",[76,116730,133],{"class":82},[76,116732,114990],{"class":86},[76,116734,116735,116738,116740],{"class":78,"line":1178},[76,116736,116737],{"class":86},"    obs, reward, terminated, truncated, info ",[76,116739,133],{"class":82},[76,116741,113384],{"class":86},[76,116743,116744,116746,116748,116750],{"class":78,"line":1184},[76,116745,3066],{"class":82},[76,116747,115056],{"class":86},[76,116749,115059],{"class":82},[76,116751,115062],{"class":86},[76,116753,116754,116757,116759],{"class":78,"line":1275},[76,116755,116756],{"class":86},"        obs, info ",[76,116758,133],{"class":82},[76,116760,113374],{"class":86},[16,116762,116764],{"id":116763},"_9本章小结","9.本章小结",[21,116766,116767],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[66,116769,116772],{"className":116770,"code":116771,"language":5154,"meta":71},[5152],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[73,116773,116771],{"__ignoreMap":71},[21,116775,116776],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5092,116778,116779],{},"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":71,"searchDepth":96,"depth":96,"links":116781},[116782,116783,116784,116791,116795,116796,116797,116807,116808],{"id":100615,"depth":96,"text":100616},{"id":100738,"depth":96,"text":100739},{"id":101013,"depth":96,"text":101014,"children":116785},[116786,116788,116790],{"id":113593,"depth":1143,"text":116787},"terminated 和 truncated 的区别",{"id":113696,"depth":1143,"text":116789},"observation_space 和 action_space",{"id":113823,"depth":1143,"text":113824},{"id":101221,"depth":96,"text":101222,"children":116792},[116793,116794],{"id":101541,"depth":1143,"text":101541},{"id":101677,"depth":1143,"text":101677},{"id":102284,"depth":96,"text":102285},{"id":102316,"depth":96,"text":102317},{"id":102421,"depth":96,"text":102422,"children":116798},[116799,116800,116802,116803,116805,116806],{"id":116448,"depth":1143,"text":116449},{"id":116470,"depth":1143,"text":116801},"data.ctrl[:] = action 维度错误",{"id":116505,"depth":1143,"text":116506},{"id":116529,"depth":1143,"text":116804},"observation_space 维度和 obs 不一致",{"id":116579,"depth":1143,"text":116580},{"id":116611,"depth":1143,"text":116612},{"id":116647,"depth":96,"text":116648},{"id":116763,"depth":96,"text":116764},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113346,"description":71},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116815,"title":116816,"body":116817,"description":117240,"extension":5123,"meta":117241,"navigation":2364,"path":117242,"seo":117243,"stem":117244,"__hash__":117245},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":9,"value":116818,"toc":117230},[116819,116823,116826,116829,116849,116855,116861,116871,116874,116877,116897,116900,116904,116907,116913,116916,116930,116933,116936,117010,117013,117019,117022,117045,117048,117098,117101,117107,117110,117113,117116,117135,117138,117144,117147,117150,117153,117173,117176,117179,117182,117227],[12,116820,116822],{"id":116821},"mujoco-学习","MuJoCo 学习",[21,116824,116825],{},"初版",[21,116827,116828],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[29,116830,116831,116834,116837,116846],{},[32,116832,116833],{},"MuJoCo 模型文件在描述什么。",[32,116835,116836],{},"Python 代码怎样读取和推进仿真。",[32,116838,116839,300,116841,300,116843,116845],{},[73,116840,103999],{},[73,116842,104329],{},[73,116844,104332],{}," 这些数组为什么重要。",[32,116847,116848],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[21,116850,116851,116852,116854],{},"默认环境为 Fedora 44、Python >= 3.10、",[73,116853,100996],{}," 官方 Python bindings。",[21,116856,116857,116858,116860],{},"注意：本文禁止使用 ",[73,116859,100981],{},"。所有示例均使用：",[66,116862,116863],{"className":30347,"code":101547,"language":30349,"meta":71,"style":71},[73,116864,116865],{"__ignoreMap":71},[76,116866,116867,116869],{"class":78,"line":79},[76,116868,30361],{"class":82},[76,116870,101270],{"class":86},[16,116872,116873],{"id":116873},"适合谁阅读",[21,116875,116876],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[29,116878,116879,116882,116885,116888],{},[32,116880,116881],{},"没学过 MuJoCo，只会一点 Python。",[32,116883,116884],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[32,116886,116887],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[32,116889,116890,116891,116893,116894,116896],{},"以前接触过 ",[73,116892,100981],{},"，现在想迁移到官方 ",[73,116895,100990],{}," Python bindings。",[21,116898,116899],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[16,116901,116903],{"id":116902},"mujoco-到底是什么","MuJoCo 到底是什么",[21,116905,116906],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[66,116908,116911],{"className":116909,"code":116910,"language":5154,"meta":71},[5152],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[73,116912,116910],{"__ignoreMap":71},[21,116914,116915],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[29,116917,116918,116921,116924,116927],{},[32,116919,116920],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[32,116922,116923],{},"快速测试控制算法，不必一开始就上真实机器人。",[32,116925,116926],{},"生成强化学习环境。",[32,116928,116929],{},"采集状态、动作、图像、奖励等训练数据。",[16,116931,116932],{"id":116932},"学习前的心智模型",[21,116934,116935],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[225,116937,116938,116950],{},[228,116939,116940],{},[231,116941,116942,116945,116948],{},[234,116943,116944],{"align":23704},"部分",[234,116946,116947],{"align":23704},"负责什么",[234,116949,21154],{"align":23704},[272,116951,116952,116963,116975,116987,116999],{},[231,116953,116954,116957,116960],{},[277,116955,116956],{"align":23704},"MJCF XML",[277,116958,116959],{"align":23704},"定义世界和机器人结构",[277,116961,116962],{"align":23704},"地面、盒子、关节、电机、摄像头",[231,116964,116965,116969,116972],{},[277,116966,116967],{"align":23704},[73,116968,100678],{},[277,116970,116971],{"align":23704},"编译后的静态模型",[277,116973,116974],{"align":23704},"有几个关节、有几个电机、时间步长是多少",[231,116976,116977,116981,116984],{},[277,116978,116979],{"align":23704},[73,116980,100688],{},[277,116982,116983],{"align":23704},"运行中的动态状态",[277,116985,116986],{"align":23704},"当前时间、位置、速度、电机输入",[231,116988,116989,116993,116996],{},[277,116990,116991],{"align":23704},[73,116992,101184],{},[277,116994,116995],{"align":23704},"推进一步物理仿真",[277,116997,116998],{"align":23704},"根据重力、力、碰撞更新状态",[231,117000,117001,117004,117007],{},[277,117002,117003],{"align":23704},"Viewer \u002F Renderer",[277,117005,117006],{"align":23704},"把仿真显示出来",[277,117008,117009],{"align":23704},"打开窗口或保存图片",[21,117011,117012],{},"一句话总结：",[66,117014,117017],{"className":117015,"code":117016,"language":5154,"meta":71},[5152],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[73,117018,117016],{"__ignoreMap":71},[21,117020,117021],{},"参考来源：",[1095,117023,117024,117031,117038],{},[32,117025,117026,117027],{},"MuJoCo Python 官方文档：",[326,117028,117029],{"href":117029,"rel":117030},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23833],[32,117032,117033,117034],{},"MuJoCo XML Reference：",[326,117035,117036],{"href":117036,"rel":117037},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23833],[32,117039,117040,117041],{},"MuJoCo Overview：",[326,117042,117043],{"href":117043,"rel":117044},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23833],[16,117046,117047],{"id":117047},"章节目录",[29,117049,117050,117056,117062,117068,117074,117080,117086,117092],{},[32,117051,117052],{},[326,117053,117055],{"href":117054},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[32,117057,117058],{},[326,117059,117061],{"href":117060},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[32,117063,117064],{},[326,117065,117067],{"href":117066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[32,117069,117070],{},[326,117071,117073],{"href":117072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[32,117075,117076],{},[326,117077,117079],{"href":117078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[32,117081,117082],{},[326,117083,117085],{"href":117084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[32,117087,117088],{},[326,117089,117091],{"href":117090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[32,117093,117094],{},[326,117095,117097],{"href":117096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[16,117099,117100],{"id":117100},"推荐学习路线",[66,117102,117105],{"className":117103,"code":117104,"language":5154,"meta":71},[5152],"环境安装\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",[73,117106,117104],{"__ignoreMap":71},[21,117108,117109],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[16,117111,117112],{"id":117112},"建议的目录结构",[21,117114,117115],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[66,117117,117119],{"className":23790,"code":117118,"language":23792,"meta":71,"style":71},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[73,117120,117121,117129],{"__ignoreMap":71},[76,117122,117123,117125,117127],{"class":78,"line":79},[76,117124,101235],{"class":1927},[76,117126,29185],{"class":136},[76,117128,101240],{"class":192},[76,117130,117131,117133],{"class":78,"line":96},[76,117132,101245],{"class":136},[76,117134,101240],{"class":192},[21,117136,117137],{},"每一章的代码都单独保存：",[66,117139,117142],{"className":117140,"code":117141,"language":5154,"meta":71},[5152],"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",[73,117143,117141],{"__ignoreMap":71},[21,117145,117146],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[16,117148,117149],{"id":117149},"学习方法",[21,117151,117152],{},"每章建议按这个顺序操作：",[29,117154,117155,117158,117161,117164,117167,117170],{},[32,117156,117157],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[32,117159,117160],{},"复制最小可运行代码，保存成指定文件。",[32,117162,117163],{},"运行代码，确认没有报错。",[32,117165,117166],{},"对照“运行结果说明”理解输出。",[32,117168,117169],{},"做“验证步骤”，主动改一两个参数。",[32,117171,117172],{},"遇到报错先看“常见错误与解决方案”。",[21,117174,117175],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[16,117177,117178],{"id":117178},"全局排错顺序",[21,117180,117181],{},"遇到问题时，按下面顺序查：",[29,117183,117184,117190,117196,117201,117204,117207,117214,117224],{},[32,117185,117186,117187],{},"Python 环境是否激活：",[73,117188,117189],{},"which python",[32,117191,117192,117193],{},"MuJoCo 是否能导入：",[73,117194,117195],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[32,117197,117198,117199],{},"是否误装了 ",[73,117200,100981],{},[32,117202,117203],{},"XML 标签是否闭合、属性是否拼写正确",[32,117205,117206],{},"actuator 引用的 joint 名字是否存在",[32,117208,117209,117211,117212],{},[73,117210,101045],{}," 的长度是否等于 ",[73,117213,102127],{},[32,117215,105554,117216,82508,117218,117220,117221],{},[73,117217,103999],{},[73,117219,104329],{}," 后是否调用了 ",[73,117222,117223],{},"mujoco.mj_forward",[32,117225,117226],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5092,117228,117229],{},"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":71,"searchDepth":96,"depth":96,"links":117231},[117232,117233,117234,117235,117236,117237,117238,117239],{"id":116873,"depth":96,"text":116873},{"id":116902,"depth":96,"text":116903},{"id":116932,"depth":96,"text":116932},{"id":117047,"depth":96,"text":117047},{"id":117100,"depth":96,"text":117100},{"id":117112,"depth":96,"text":117112},{"id":117149,"depth":96,"text":117149},{"id":117178,"depth":96,"text":117178},"仿真搭建。",{"category":23346},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116816,"description":117240},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117247,"title":117248,"body":117249,"description":23344,"extension":5123,"meta":117704,"navigation":2364,"path":117705,"seo":117706,"stem":117707,"__hash__":117708},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":9,"value":117250,"toc":117702},[117251,117254,117257,117263,117699],[12,117252,117248],{"id":117253},"_1-最常用的基本操作更新",[21,117255,117256],{},"装linux系统教程：",[21,117258,117259],{},[326,117260,117261],{"href":117261,"rel":117262},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23833],[66,117264,117268],{"className":117265,"code":117266,"language":117267,"meta":71,"style":71},"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",[73,117269,117270,117275,117280,117289,117294,117303,117308,117328,117333,117344,117349,117358,117363,117391,117396,117415,117420,117439,117443,117448,117464,117468,117473,117503,117507,117512,117528,117532,117537,117552,117556,117561,117577,117581,117586,117598,117610,117614,117619,117636,117640,117645,117663,117667,117672,117681,117685,117690],{"__ignoreMap":71},[76,117271,117272],{"class":78,"line":79},[76,117273,117274],{"class":146},"#更新相关的知识\n",[76,117276,117277],{"class":78,"line":96},[76,117278,117279],{"class":146},"# 更新软件包列表（从服务器获取最新软件信息）\n",[76,117281,117282,117284,117287],{"class":78,"line":1143},[76,117283,24545],{"class":1927},[76,117285,117286],{"class":192}," apt",[76,117288,26211],{"class":192},[76,117290,117291],{"class":78,"line":1158},[76,117292,117293],{"class":146},"# 升级所有可更新的软件包（不删除旧包）\n",[76,117295,117296,117298,117300],{"class":78,"line":1164},[76,117297,24545],{"class":1927},[76,117299,117286],{"class":192},[76,117301,117302],{"class":192}," upgrade\n",[76,117304,117305],{"class":78,"line":1178},[76,117306,117307],{"class":146},"#更新和升级软件包\n",[76,117309,117310,117312,117314,117317,117319,117321,117323,117326],{"class":78,"line":1184},[76,117311,24545],{"class":1927},[76,117313,117286],{"class":192},[76,117315,117316],{"class":192}," update",[76,117318,26159],{"class":86},[76,117320,24545],{"class":1927},[76,117322,117286],{"class":192},[76,117324,117325],{"class":192}," upgrade",[76,117327,100950],{"class":136},[76,117329,117330],{"class":78,"line":1275},[76,117331,117332],{"class":146},"#列出可更新的软件包及版本信息\n",[76,117334,117335,117338,117341],{"class":78,"line":1281},[76,117336,117337],{"class":1927},"apt",[76,117339,117340],{"class":192}," list",[76,117342,117343],{"class":136}," --upgradable\n",[76,117345,117346],{"class":78,"line":1293},[76,117347,117348],{"class":146},"#彻底升级（处理依赖关系，可能删除旧包）\n",[76,117350,117351,117353,117355],{"class":78,"line":1576},[76,117352,24545],{"class":1927},[76,117354,117286],{"class":192},[76,117356,117357],{"class":192}," full-upgrade\n",[76,117359,117360],{"class":78,"line":1581},[76,117361,117362],{"class":146},"#设置指定版本\n",[76,117364,117365,117367,117369,117371,117373,117376,117378,117380,117382,117384,117387,117389],{"class":78,"line":1587},[76,117366,24545],{"class":1927},[76,117368,117286],{"class":192},[76,117370,23802],{"class":192},[76,117372,28871],{"class":82},[76,117374,117375],{"class":192},"package_nam",[76,117377,162],{"class":86},[76,117379,1048],{"class":82},[76,117381,133],{"class":192},[76,117383,998],{"class":82},[76,117385,117386],{"class":192},"version_numbe",[76,117388,758],{"class":86},[76,117390,51276],{"class":82},[76,117392,117393],{"class":78,"line":1592},[76,117394,117395],{"class":146},"#只安装软件包不升级\n",[76,117397,117398,117400,117402,117404,117406,117408,117410,117412],{"class":78,"line":1606},[76,117399,24545],{"class":1927},[76,117401,117286],{"class":192},[76,117403,23802],{"class":192},[76,117405,28871],{"class":82},[76,117407,117375],{"class":192},[76,117409,162],{"class":86},[76,117411,1048],{"class":82},[76,117413,117414],{"class":136}," --no-upgrade\n",[76,117416,117417],{"class":78,"line":1611},[76,117418,117419],{"class":146},"#只升级，不存在就不安装\n",[76,117421,117422,117424,117426,117428,117430,117432,117434,117436],{"class":78,"line":1617},[76,117423,24545],{"class":1927},[76,117425,117286],{"class":192},[76,117427,23802],{"class":192},[76,117429,28871],{"class":82},[76,117431,117375],{"class":192},[76,117433,162],{"class":86},[76,117435,1048],{"class":82},[76,117437,117438],{"class":136}," --only-upgrade\n",[76,117440,117441],{"class":78,"line":1638},[76,117442,2365],{"emptyLinePlaceholder":2364},[76,117444,117445],{"class":78,"line":1643},[76,117446,117447],{"class":146},"#安装指定的软件命令\n",[76,117449,117450,117452,117454,117456,117458,117460,117462],{"class":78,"line":1657},[76,117451,24545],{"class":1927},[76,117453,117286],{"class":192},[76,117455,23802],{"class":192},[76,117457,28871],{"class":82},[76,117459,117375],{"class":192},[76,117461,162],{"class":86},[76,117463,51276],{"class":82},[76,117465,117466],{"class":78,"line":1662},[76,117467,2365],{"emptyLinePlaceholder":2364},[76,117469,117470],{"class":78,"line":1691},[76,117471,117472],{"class":146},"#安装多个软件包\n",[76,117474,117475,117477,117479,117481,117483,117486,117489,117491,117493,117496,117498,117500],{"class":78,"line":1696},[76,117476,24545],{"class":1927},[76,117478,117286],{"class":192},[76,117480,23802],{"class":192},[76,117482,28871],{"class":82},[76,117484,117485],{"class":192},"package_",[76,117487,117488],{"class":82},"1>",[76,117490,28871],{"class":82},[76,117492,117485],{"class":192},[76,117494,117495],{"class":82},"2>",[76,117497,28871],{"class":82},[76,117499,117485],{"class":192},[76,117501,117502],{"class":82},"3>\n",[76,117504,117505],{"class":78,"line":1713},[76,117506,2365],{"emptyLinePlaceholder":2364},[76,117508,117509],{"class":78,"line":1718},[76,117510,117511],{"class":146},"#更新指定的软件命令\n",[76,117513,117514,117516,117518,117520,117522,117524,117526],{"class":78,"line":1723},[76,117515,24545],{"class":1927},[76,117517,117286],{"class":192},[76,117519,117316],{"class":192},[76,117521,28871],{"class":82},[76,117523,117375],{"class":192},[76,117525,162],{"class":86},[76,117527,51276],{"class":82},[76,117529,117530],{"class":78,"line":1728},[76,117531,2365],{"emptyLinePlaceholder":2364},[76,117533,117534],{"class":78,"line":1742},[76,117535,117536],{"class":146},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[76,117538,117539,117541,117544,117546,117548,117550],{"class":78,"line":1747},[76,117540,117337],{"class":1927},[76,117542,117543],{"class":192}," show",[76,117545,28871],{"class":82},[76,117547,117375],{"class":192},[76,117549,162],{"class":86},[76,117551,51276],{"class":82},[76,117553,117554],{"class":78,"line":2542},[76,117555,2365],{"emptyLinePlaceholder":2364},[76,117557,117558],{"class":78,"line":2556},[76,117559,117560],{"class":146},"#删除软件包命令\n",[76,117562,117563,117565,117567,117569,117571,117573,117575],{"class":78,"line":2564},[76,117564,24545],{"class":1927},[76,117566,117286],{"class":192},[76,117568,26048],{"class":192},[76,117570,28871],{"class":82},[76,117572,117375],{"class":192},[76,117574,162],{"class":86},[76,117576,51276],{"class":82},[76,117578,117579],{"class":78,"line":2569},[76,117580,2365],{"emptyLinePlaceholder":2364},[76,117582,117583],{"class":78,"line":2575},[76,117584,117585],{"class":146},"# 清理旧版本和缓存（释放磁盘空间）\n",[76,117587,117588,117590,117592,117595],{"class":78,"line":2581},[76,117589,24545],{"class":1927},[76,117591,117286],{"class":192},[76,117593,117594],{"class":192}," autoremove",[76,117596,117597],{"class":146},"  # 删除不再需要的依赖和库文件\n",[76,117599,117600,117602,117604,117607],{"class":78,"line":2586},[76,117601,24545],{"class":1927},[76,117603,117286],{"class":192},[76,117605,117606],{"class":192}," clean",[76,117608,117609],{"class":146},"       # 清理下载的缓存包\n",[76,117611,117612],{"class":78,"line":7915},[76,117613,2365],{"emptyLinePlaceholder":2364},[76,117615,117616],{"class":78,"line":7939},[76,117617,117618],{"class":146},"#移除软件包及配置文件\n",[76,117620,117621,117623,117625,117628,117630,117632,117634],{"class":78,"line":7944},[76,117622,24545],{"class":1927},[76,117624,117286],{"class":192},[76,117626,117627],{"class":192}," purge",[76,117629,28871],{"class":82},[76,117631,117375],{"class":192},[76,117633,162],{"class":86},[76,117635,51276],{"class":82},[76,117637,117638],{"class":78,"line":7950},[76,117639,2365],{"emptyLinePlaceholder":2364},[76,117641,117642],{"class":78,"line":7977},[76,117643,117644],{"class":146},"#查找软件包命令\n",[76,117646,117647,117649,117651,117654,117656,117659,117661],{"class":78,"line":7982},[76,117648,24545],{"class":1927},[76,117650,117286],{"class":192},[76,117652,117653],{"class":192}," search",[76,117655,28871],{"class":82},[76,117657,117658],{"class":192},"keywor",[76,117660,402],{"class":86},[76,117662,51276],{"class":82},[76,117664,117665],{"class":78,"line":7988},[76,117666,2365],{"emptyLinePlaceholder":2364},[76,117668,117669],{"class":78,"line":8000},[76,117670,117671],{"class":146},"#列出所有已安装的包\n",[76,117673,117674,117676,117678],{"class":78,"line":8012},[76,117675,117337],{"class":1927},[76,117677,117340],{"class":192},[76,117679,117680],{"class":136}," --installed\n",[76,117682,117683],{"class":78,"line":8024},[76,117684,2365],{"emptyLinePlaceholder":2364},[76,117686,117687],{"class":78,"line":9683},[76,117688,117689],{"class":146},"#列出所有已安装的包的版本信息\n",[76,117691,117692,117694,117696],{"class":78,"line":9708},[76,117693,117337],{"class":1927},[76,117695,117340],{"class":192},[76,117697,117698],{"class":136}," --all-versions\n",[5092,117700,117701],{},"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":71,"searchDepth":96,"depth":96,"links":117703},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117248,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117710,"title":117711,"body":117712,"description":23344,"extension":5123,"meta":118453,"navigation":2364,"path":118454,"seo":118455,"stem":118456,"__hash__":118457},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":9,"value":117713,"toc":118440},[117714,117717,117721,117724,117730,117734,117738,117744,117749,117754,117759,117764,117769,117772,117775,117778,117781,117785,117788,117793,117796,117801,117804,117809,117816,117819,117822,117825,117828,117831,117842,117846,117850,117855,117860,117864,117869,117873,117878,117882,117886,117891,117894,117939,117944,117948,117952,117957,117963,117968,117978,117983,117993,117998,118003,118030,118034,118037,118042,118045,118070,118074,118079,118082,118087,118092,118112,118117,118120,118135,118139,118192,118195,118200,118204,118207,118222,118225,118228,118233,118237,118241,118244,118248,118252,118255,118260,118265,118269,118276,118284,118287,118294,118299,118304,118307,118312,118319,118324,118331,118335,118337,118342,118346,118349,118352,118357,118360,118365,118368,118373,118378,118383,118387,118392,118396,118437],[12,117715,117711],{"id":117716},"_2-linux装机教程",[16,117718,117720],{"id":117719},"_21-实体机","2.1 实体机",[21,117722,117723],{},"使用清华源：（Ubuntu24.04）",[21,117725,117726],{},[326,117727,117728],{"href":117728,"rel":117729},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23833],[16,117731,117733],{"id":117732},"_22-普通虚拟机","2.2 普通虚拟机",[46,117735,117737],{"id":117736},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[21,117739,117740],{},[326,117741,117742],{"href":117742,"rel":117743},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23833],[21,117745,117746],{},[1426,117747],{"alt":71,"src":117748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[21,117750,117751],{},[1426,117752],{"alt":71,"src":117753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[21,117755,117756],{},[1426,117757],{"alt":71,"src":117758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[21,117760,117761],{},[1426,117762],{"alt":71,"src":117763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[21,117765,117766],{},[1426,117767],{"alt":71,"src":117768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[21,117770,117771],{},"内存4G（4096MB）；",[21,117773,117774],{},"CPU给4个核；",[21,117776,117777],{},"硬盘动态分配60G；",[21,117779,117780],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[46,117782,117784],{"id":117783},"_222-安装ubuntu","2.2.2 安装Ubuntu",[21,117786,117787],{},"按照1.1的步骤下载Ubuntu",[21,117789,117790],{},[1426,117791],{"alt":71,"src":117792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[21,117794,117795],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[21,117797,117798],{},[1426,117799],{"alt":71,"src":117800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[21,117802,117803],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[21,117805,117806],{},[1426,117807],{"alt":71,"src":117808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[21,117810,117811,117812,117815],{},"选择“正常安装”(找不到都用Alt+F7)， ",[237,117813,117814],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[21,117817,117818],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[21,117820,117821],{},"将改动写入磁盘吗 继续",[21,117823,117824],{},"选择东八区（shanghai，大致在地图上点一下），继续",[21,117826,117827],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[21,117829,117830],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[21,117832,117833,117834,117837,117838,117841],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[237,117835,117836],{},"除了"," 选不发送系统信息与不升级之外， ",[237,117839,117840],{},"其它"," 都跳过或前进）",[46,117843,117845],{"id":117844},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21965,117847,117849],{"id":117848},"_2231-全屏","2.2.3.1 全屏",[21,117851,117852],{},[1426,117853],{"alt":71,"src":117854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[21,117856,117857],{},[1426,117858],{"alt":71,"src":117859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21965,117861,117863],{"id":117862},"_2232-文件交换","2.2.3.2 文件交换",[21,117865,117866],{},[1426,117867],{"alt":71,"src":117868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21965,117870,117872],{"id":117871},"_2233-新建文本文档","2.2.3.3 新建文本文档",[21,117874,117875],{},[1426,117876],{"alt":71,"src":117877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[16,117879,117881],{"id":117880},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[46,117883,117885],{"id":117884},"_231-简介与优缺点","2.3.1 简介与优缺点",[29,117887,117888],{},[32,117889,117890],{},"什么情况下推荐？",[21,117892,117893],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[29,117895,117896],{"start":96},[32,117897,117898,117899],{},"优缺点：",[29,117900,117901,117931],{},[32,117902,117903,117904],{},"优点：",[29,117905,117906,117909,117916,117919,117922,117925,117928],{},[32,117907,117908],{},"WSL2是最好的Linux发行版;(bushi)",[32,117910,117911,117912,117915],{},"性能损耗极低。且比在Windows上跑深度性能 ",[237,117913,117914],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[32,117917,117918],{},"非常方便调用USB设备，可以USB直通;",[32,117920,117921],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[32,117923,117924],{},"非常方便Win与WSL2互相传文件等协同操作;",[32,117926,117927],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[32,117929,117930],{},"非常方便使用Windows的VScode远程开发;",[32,117932,117933,117934],{},"缺点：",[29,117935,117936],{},[32,117937,117938],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[21,117940,117941],{},[1426,117942],{"alt":71,"src":117943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[46,117945,117947],{"id":117946},"_232-安装教程","2.3.2 安装教程",[21965,117949,117951],{"id":117950},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[29,117953,117954],{},[32,117955,117956],{},"方法一(图形界面)",[21,117958,117959,117960,24587],{},"用Win+R输入",[73,117961,117962],{},"appwiz.cpl",[21,117964,117965],{},[1426,117966],{"alt":71,"src":117967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[21,117969,117970,117971,117974,117975,26442],{},"点击OK进入 ",[237,117972,117973],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[237,117976,117977],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[21,117979,117980],{},[1426,117981],{"alt":71,"src":117982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[21,117984,117985,117986,100987,117989,117992],{},"选择 ",[237,117987,117988],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[237,117990,117991],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[21,117994,117995],{},[1426,117996],{"alt":71,"src":117997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[29,117999,118000],{"start":96},[32,118001,118002],{},"方法二(命令行)",[66,118004,118008],{"className":118005,"code":118006,"language":118007,"meta":71,"style":71},"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",[73,118009,118010,118015,118020,118025],{"__ignoreMap":71},[76,118011,118012],{"class":78,"line":79},[76,118013,118014],{},"# 开启 Linux 子系统\n",[76,118016,118017],{"class":78,"line":96},[76,118018,118019],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[76,118021,118022],{"class":78,"line":1143},[76,118023,118024],{},"# 开启虚拟机平台\n",[76,118026,118027],{"class":78,"line":1158},[76,118028,118029],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21965,118031,118033],{"id":118032},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[21,118035,118036],{},"用管理员权限打开powershell",[21,118038,118039],{},[1426,118040],{"alt":71,"src":118041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[21,118043,118044],{},"升级WSL并设置默认版本为WSL2",[66,118046,118048],{"className":118005,"code":118047,"language":118007,"meta":71,"style":71},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[73,118049,118050,118055,118060,118065],{"__ignoreMap":71},[76,118051,118052],{"class":78,"line":79},[76,118053,118054],{},"# 更新 wsl\n",[76,118056,118057],{"class":78,"line":96},[76,118058,118059],{},"wsl --update\n",[76,118061,118062],{"class":78,"line":1143},[76,118063,118064],{},"# 将 wsl 版本设置为 wsl2\n",[76,118066,118067],{"class":78,"line":1158},[76,118068,118069],{},"wsl --set-default-version 2\n",[21965,118071,118073],{"id":118072},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[29,118075,118076],{},[32,118077,118078],{},"方式一(商店下载)",[21,118080,118081],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[21,118083,118084],{},[1426,118085],{"alt":71,"src":118086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[29,118088,118089],{"start":96},[32,118090,118091],{},"方式二(命令行安装)",[66,118093,118095],{"className":118005,"code":118094,"language":118007,"meta":71,"style":71},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[73,118096,118097,118102,118107],{"__ignoreMap":71},[76,118098,118099],{"class":78,"line":79},[76,118100,118101],{},"# 列出可安装的 Linux 版本\n",[76,118103,118104],{"class":78,"line":96},[76,118105,118106],{},"#（需要科学手段）\n",[76,118108,118109],{"class":78,"line":1143},[76,118110,118111],{},"wsl --list --online\n",[21,118113,118114],{},[1426,118115],{"alt":71,"src":118116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[21,118118,118119],{},"选择对应发行版并安装",[66,118121,118123],{"className":118005,"code":118122,"language":118007,"meta":71,"style":71},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[73,118124,118125,118130],{"__ignoreMap":71},[76,118126,118127],{"class":78,"line":79},[76,118128,118129],{},"# Ubuntu安装完毕后需要重启系统\n",[76,118131,118132],{"class":78,"line":96},[76,118133,118134],{},"wsl --install -d Ubuntu-24.04\n",[21965,118136,118138],{"id":118137},"_2324-查看系统状态","2.3.2.4 查看系统状态",[66,118140,118142],{"className":118005,"code":118141,"language":118007,"meta":71,"style":71},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[73,118143,118144,118149,118154,118159,118164,118168,118172,118177,118182,118187],{"__ignoreMap":71},[76,118145,118146],{"class":78,"line":79},[76,118147,118148],{},"# 查看 wsl\n",[76,118150,118151],{"class":78,"line":96},[76,118152,118153],{},"wsl -l\n",[76,118155,118156],{"class":78,"line":1143},[76,118157,118158],{},"# 查看 wsl 运行版本或模式\n",[76,118160,118161],{"class":78,"line":1158},[76,118162,118163],{},"wsl -l -v\n",[76,118165,118166],{"class":78,"line":1164},[76,118167,2365],{"emptyLinePlaceholder":2364},[76,118169,118170],{"class":78,"line":1178},[76,118171,2365],{"emptyLinePlaceholder":2364},[76,118173,118174],{"class":78,"line":1184},[76,118175,118176],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[76,118178,118179],{"class":78,"line":1275},[76,118180,118181],{},"wsl --set-version \u003Cdistro> 2\n",[76,118183,118184],{"class":78,"line":1281},[76,118185,118186],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[76,118188,118189],{"class":78,"line":1293},[76,118190,118191],{},"wsl --unregister \u003Cdistro>\n",[21,118193,118194],{},"输出Version为2即正常",[21,118196,118197],{},[1426,118198],{"alt":71,"src":118199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21965,118201,118203],{"id":118202},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[21,118205,118206],{},"直接在Powershell里输入wsl命令进入子系统",[66,118208,118210],{"className":118005,"code":118209,"language":118007,"meta":71,"style":71},"# 进入子系统\nwsl\n",[73,118211,118212,118217],{"__ignoreMap":71},[76,118213,118214],{"class":78,"line":79},[76,118215,118216],{},"# 进入子系统\n",[76,118218,118219],{"class":78,"line":96},[76,118220,118221],{},"wsl\n",[21,118223,118224],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[21,118226,118227],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[21,118229,118230],{},[1426,118231],{"alt":71,"src":118232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[46,118234,118236],{"id":118235},"_233-配置各种环境","2.3.3 配置各种环境",[21965,118238,118240],{"id":118239},"_2331-换源","2.3.3.1 换源",[21,118242,118243],{},"(同实体机LINUX，往下找教程)",[21965,118245,118247],{"id":118246},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22877,118249,118251],{"id":118250},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[21,118253,118254],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[21,118256,118257],{},[1426,118258],{"alt":71,"src":118259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[21,118261,118262],{},[1426,118263],{"alt":71,"src":118264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22877,118266,118268],{"id":118267},"_23322-cuda","2.3.3.2.2 CUDA",[21,118270,118271,118272],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[326,118273,118274],{"href":118274,"rel":118275},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23833],[21,118277,118278,118281],{},[1426,118279],{"alt":71,"src":118280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1426,118282],{"alt":71,"src":118283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[21,118285,118286],{},"在下方的网站，选择合适的版本。",[21,118288,118289,118290],{},"WSL2 专属 CUDA 指南：",[326,118291,118292],{"href":118292,"rel":118293},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23833],[21,118295,118296],{},[237,118297,118298],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[21,118300,118301],{},[1426,118302],{"alt":71,"src":118303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[21,118305,118306],{},"挨行敲一遍",[21,118308,118309],{},[1426,118310],{"alt":71,"src":118311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[21,118313,118314,118315,118318],{},"敲完后，输入",[73,118316,118317],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[21,118320,118321],{},[1426,118322],{"alt":71,"src":118323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[21,118325,118326,118327,118330],{},"（请详看下方教程的",[237,118328,118329],{},"安装CUDA的配置环境来看","如何配置环境）",[22877,118332,118334],{"id":118333},"_23323-cudnn","2.3.3.2.3 cuDNN",[21,118336,118243],{},[21,118338,118339],{},[1426,118340],{"alt":71,"src":118341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21965,118343,118345],{"id":118344},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[21,118347,118348],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[21,118350,118351],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[21,118353,118354],{},[1426,118355],{"alt":71,"src":118356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[21,118358,118359],{},"连接WSL2",[21,118361,118362],{},[1426,118363],{"alt":71,"src":118364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[21,118366,118367],{},"远程开发成功。",[21,118369,118370],{},[1426,118371],{"alt":71,"src":118372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[21,118374,118375],{},[1426,118376],{"alt":71,"src":118377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[21,118379,118380],{},[1426,118381],{"alt":71,"src":118382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21965,118384,118386],{"id":118385},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[21,118388,118389],{},[1426,118390],{"alt":71,"src":118391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21965,118393,118395],{"id":118394},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[66,118397,118399],{"className":117265,"code":118398,"language":117267,"meta":71,"style":71},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[73,118400,118401,118409,118417,118428,118432],{"__ignoreMap":71},[76,118402,118403,118405,118407],{"class":78,"line":79},[76,118404,24545],{"class":1927},[76,118406,117286],{"class":192},[76,118408,26211],{"class":192},[76,118410,118411,118413,118415],{"class":78,"line":96},[76,118412,24545],{"class":1927},[76,118414,117286],{"class":192},[76,118416,117302],{"class":192},[76,118418,118419,118421,118423,118425],{"class":78,"line":1143},[76,118420,24545],{"class":1927},[76,118422,117286],{"class":192},[76,118424,23802],{"class":192},[76,118426,118427],{"class":192}," mesa-utils\n",[76,118429,118430],{"class":78,"line":1158},[76,118431,2365],{"emptyLinePlaceholder":2364},[76,118433,118434],{"class":78,"line":1164},[76,118435,118436],{"class":146},"#然后重启wsl2即可\n",[5092,118438,118439],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":71,"searchDepth":96,"depth":96,"links":118441},[118442,118443,118448],{"id":117719,"depth":96,"text":117720},{"id":117732,"depth":96,"text":117733,"children":118444},[118445,118446,118447],{"id":117736,"depth":1143,"text":117737},{"id":117783,"depth":1143,"text":117784},{"id":117844,"depth":1143,"text":117845},{"id":117880,"depth":96,"text":117881,"children":118449},[118450,118451,118452],{"id":117884,"depth":1143,"text":117885},{"id":117946,"depth":1143,"text":117947},{"id":118235,"depth":1143,"text":118236},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117711,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118459,"title":118460,"body":118461,"description":23344,"extension":5123,"meta":121397,"navigation":2364,"path":121398,"seo":121399,"stem":121400,"__hash__":121401},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":9,"value":118462,"toc":121369},[118463,118466,118470,118476,118480,118486,118490,118678,118681,118686,118690,118694,118697,118700,118706,118711,118714,118717,118722,118755,118760,118764,118841,118844,118849,118853,118856,118895,118898,118907,118925,118930,118937,119054,119059,119062,119089,119094,119098,119107,119157,119164,119168,119171,119185,119192,119226,119231,119235,119258,119261,119266,119270,119273,119276,119279,119321,119325,119328,119331,119372,119376,119380,119383,119388,119393,119396,119419,119422,119430,119435,119438,119443,119448,119451,119456,119460,119465,119488,119493,119555,119563,119568,119573,119576,119581,119584,119589,119594,119612,119617,119623,119628,119642,119646,119649,119652,119655,119698,119701,119706,119807,119810,119815,119819,119823,119860,119864,119868,119872,119918,119922,119967,119971,119978,119986,120041,120044,120121,120124,120147,120151,120154,120159,120164,120172,120175,120180,120185,120190,120193,120198,120207,120210,120215,120218,120289,120294,120297,120302,120305,120310,120313,120318,120321,120326,120331,120334,120409,120412,120425,120430,120433,120447,120450,120479,120484,120513,120516,120521,120525,120530,120539,120542,120547,120550,120555,120558,120561,120566,120569,120574,120579,120582,120587,120590,120715,120720,120750,120753,120758,120763,120780,120783,120826,120829,120856,120861,120874,121017,121021,121026,121040,121043,121094,121097,121127,121130,121146,121151,121165,121168,121235,121240,121249,121254,121257,121269,121274,121281,121305,121308,121313,121316,121335,121340,121347,121359,121366],[12,118464,118460],{"id":118465},"_3-安装必备配置",[16,118467,118469],{"id":118468},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[66,118471,118474],{"className":118472,"code":118473,"language":5154},[5152],"  打开下方网站（注意，该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",[73,118475,118473],{"__ignoreMap":71},[46,118477,118479],{"id":118478},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[66,118481,118484],{"className":118482,"code":118483,"language":5154},[5152],"  输入以下命令\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",[73,118485,118483],{"__ignoreMap":71},[46,118487,118489],{"id":118488},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[66,118491,118495],{"className":118492,"code":118493,"language":118494,"meta":71,"style":71},"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",[73,118496,118497,118505,118516,118528,118542,118546,118556,118561,118565,118569,118574,118578,118590,118594,118599,118603,118614,118618,118634,118638,118649,118653,118658,118662,118670],{"__ignoreMap":71},[76,118498,118499,118501,118503],{"class":78,"line":79},[76,118500,24545],{"class":1927},[76,118502,117286],{"class":192},[76,118504,26211],{"class":192},[76,118506,118507,118509,118511,118513],{"class":78,"line":96},[76,118508,24545],{"class":1927},[76,118510,117286],{"class":192},[76,118512,23802],{"class":192},[76,118514,118515],{"class":192}," vim\n",[76,118517,118518,118520,118523,118525],{"class":78,"line":1143},[76,118519,24545],{"class":1927},[76,118521,118522],{"class":192}," rm",[76,118524,25294],{"class":136},[76,118526,118527],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list\n",[76,118529,118530,118532,118534,118536,118539],{"class":78,"line":1158},[76,118531,24545],{"class":1927},[76,118533,118522],{"class":192},[76,118535,25294],{"class":136},[76,118537,118538],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[76,118540,118541],{"class":136},"**\n",[76,118543,118544],{"class":78,"line":1164},[76,118545,2365],{"emptyLinePlaceholder":2364},[76,118547,118548,118550,118553],{"class":78,"line":1178},[76,118549,24545],{"class":1927},[76,118551,118552],{"class":192}," vim",[76,118554,118555],{"class":192}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[76,118557,118558],{"class":78,"line":1184},[76,118559,118560],{"class":192},"```\n",[76,118562,118563],{"class":78,"line":1275},[76,118564,2365],{"emptyLinePlaceholder":2364},[76,118566,118567],{"class":78,"line":1281},[76,118568,2365],{"emptyLinePlaceholder":2364},[76,118570,118571],{"class":78,"line":1293},[76,118572,118573],{"class":1927},"选择好Ubuntu版本后，复制下方的内容。\n",[76,118575,118576],{"class":78,"line":1576},[76,118577,2365],{"emptyLinePlaceholder":2364},[76,118579,118580,118582,118585,118588],{"class":78,"line":1581},[76,118581,314],{"class":82},[76,118583,118584],{"class":192},"[](",[76,118586,118587],{"class":1927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[76,118589,93],{"class":192},[76,118591,118592],{"class":78,"line":1587},[76,118593,2365],{"emptyLinePlaceholder":2364},[76,118595,118596],{"class":78,"line":1592},[76,118597,118598],{"class":1927},"粘贴进去\n",[76,118600,118601],{"class":78,"line":1606},[76,118602,2365],{"emptyLinePlaceholder":2364},[76,118604,118605,118607,118609,118612],{"class":78,"line":1611},[76,118606,314],{"class":82},[76,118608,118584],{"class":192},[76,118610,118611],{"class":1927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[76,118613,93],{"class":192},[76,118615,118616],{"class":78,"line":1617},[76,118617,2365],{"emptyLinePlaceholder":2364},[76,118619,118620,118623,118626,118629,118631],{"class":78,"line":1638},[76,118621,118622],{"class":1927},"按一下ESC，然后英文冒号，输入",[76,118624,118625],{"class":192}," `",[76,118627,118628],{"class":1927},":wq!",[76,118630,1060],{"class":192},[76,118632,118633],{"class":1927},"然后回车\n",[76,118635,118636],{"class":78,"line":1643},[76,118637,2365],{"emptyLinePlaceholder":2364},[76,118639,118640,118642,118644,118647],{"class":78,"line":1657},[76,118641,314],{"class":82},[76,118643,118584],{"class":192},[76,118645,118646],{"class":1927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[76,118648,93],{"class":192},[76,118650,118651],{"class":78,"line":1662},[76,118652,2365],{"emptyLinePlaceholder":2364},[76,118654,118655],{"class":78,"line":1691},[76,118656,118657],{"class":1927},"输入以下命令\n",[76,118659,118660],{"class":78,"line":1696},[76,118661,2365],{"emptyLinePlaceholder":2364},[76,118663,118664,118667],{"class":78,"line":1713},[76,118665,118666],{"class":192},"```",[76,118668,118669],{"class":1927},"Bash\n",[76,118671,118672,118674,118676],{"class":78,"line":1718},[76,118673,24545],{"class":1927},[76,118675,117286],{"class":192},[76,118677,26211],{"class":192},[21,118679,118680],{},"这里被替换成对应学校则成功",[21,118682,118683],{},[1426,118684],{"alt":71,"src":118685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[16,118687,118689],{"id":118688},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[46,118691,118693],{"id":118692},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[21,118695,118696],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[21,118698,118699],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[21,118701,118702],{},[326,118703,118704],{"href":118704,"rel":118705},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23833],[21,118707,118708],{},[1426,118709],{"alt":71,"src":118710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[21,118712,118713],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[21,118715,118716],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[21,118718,118719],{},[1426,118720],{"alt":71,"src":118721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[66,118723,118725],{"className":117265,"code":118724,"language":117267,"meta":71,"style":71},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[73,118726,118727,118732,118739,118744],{"__ignoreMap":71},[76,118728,118729],{"class":78,"line":79},[76,118730,118731],{"class":146},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[76,118733,118734,118736],{"class":78,"line":96},[76,118735,101245],{"class":136},[76,118737,118738],{"class":192}," ~\u002FDownloads\n",[76,118740,118741],{"class":78,"line":1143},[76,118742,118743],{"class":146},"#下方chrome安装包名不一定是这个，根据名字来看\n",[76,118745,118746,118748,118750,118752],{"class":78,"line":1158},[76,118747,24545],{"class":1927},[76,118749,117286],{"class":192},[76,118751,23802],{"class":192},[76,118753,118754],{"class":192}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[21,118756,118757],{},[1426,118758],{"alt":71,"src":118759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[46,118761,118763],{"id":118762},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[66,118765,118767],{"className":117265,"code":118766,"language":117267,"meta":71,"style":71},"# 老版\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",[73,118768,118769,118774,118782,118793,118798,118802,118807,118817,118825,118836],{"__ignoreMap":71},[76,118770,118771],{"class":78,"line":79},[76,118772,118773],{"class":146},"# 老版\n",[76,118775,118776,118778,118780],{"class":78,"line":96},[76,118777,24545],{"class":1927},[76,118779,117286],{"class":192},[76,118781,26211],{"class":192},[76,118783,118784,118786,118788,118790],{"class":78,"line":1143},[76,118785,24545],{"class":1927},[76,118787,117286],{"class":192},[76,118789,23802],{"class":192},[76,118791,118792],{"class":192}," neofetch\n",[76,118794,118795],{"class":78,"line":1158},[76,118796,118797],{"class":1927},"neofetch\n",[76,118799,118800],{"class":78,"line":1164},[76,118801,2365],{"emptyLinePlaceholder":2364},[76,118803,118804],{"class":78,"line":1178},[76,118805,118806],{"class":146},"# 新版\n",[76,118808,118809,118811,118814],{"class":78,"line":1184},[76,118810,24545],{"class":1927},[76,118812,118813],{"class":192}," add-apt-repository",[76,118815,118816],{"class":192}," ppa:zhangsongcui3371\u002Ffastfetch\n",[76,118818,118819,118821,118823],{"class":78,"line":1275},[76,118820,24545],{"class":1927},[76,118822,117286],{"class":192},[76,118824,26211],{"class":192},[76,118826,118827,118829,118831,118833],{"class":78,"line":1281},[76,118828,24545],{"class":1927},[76,118830,117286],{"class":192},[76,118832,23802],{"class":192},[76,118834,118835],{"class":192}," fastfetch\n",[76,118837,118838],{"class":78,"line":1293},[76,118839,118840],{"class":1927},"fastfetch\n",[21,118842,118843],{},"这里显示，一共有3162个debian的程序，7个snap程序",[21,118845,118846],{},[1426,118847],{"alt":71,"src":118848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[46,118850,118852],{"id":118851},"_323-移除snap应用","3.2.3 移除snap应用",[21,118854,118855],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[66,118857,118859],{"className":117265,"code":118858,"language":117267,"meta":71,"style":71},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[73,118860,118861,118873,118884],{"__ignoreMap":71},[76,118862,118863,118865,118867,118870],{"class":78,"line":79},[76,118864,24545],{"class":1927},[76,118866,26482],{"class":192},[76,118868,118869],{"class":192}," disable",[76,118871,118872],{"class":192}," snapd.service\n",[76,118874,118875,118877,118879,118881],{"class":78,"line":96},[76,118876,24545],{"class":1927},[76,118878,26482],{"class":192},[76,118880,118869],{"class":192},[76,118882,118883],{"class":192}," snapd.socket\n",[76,118885,118886,118888,118890,118892],{"class":78,"line":1143},[76,118887,24545],{"class":1927},[76,118889,26482],{"class":192},[76,118891,118869],{"class":192},[76,118893,118894],{"class":192}," snapd.seeded.service\n",[21,118896,118897],{},"然后查看snap应用列表",[21,118899,118900,118901,118906],{},"根据你安装的选择不同（最小安装或普通安装），有",[326,118902,118905],{"href":118903,"rel":118904},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23833],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[66,118908,118910],{"className":117265,"code":118909,"language":117267,"meta":71,"style":71},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[73,118911,118912,118917],{"__ignoreMap":71},[76,118913,118914],{"class":78,"line":79},[76,118915,118916],{"class":146},"# 查询当前系统上snap安装了哪些app\n",[76,118918,118919,118922],{"class":78,"line":96},[76,118920,118921],{"class":1927},"snap",[76,118923,118924],{"class":192}," list\n",[21,118926,118927],{},[1426,118928],{"alt":71,"src":118929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[21,118931,118932,118933,118936],{},"卸载掉图中所有应用，按照 ",[237,118934,118935],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[66,118938,118940],{"className":117265,"code":118939,"language":117267,"meta":71,"style":71},"#移除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",[73,118941,118942,118947,118959,118964,118975,118980,118991,118996,119007,119012,119016,119021,119032,119043],{"__ignoreMap":71},[76,118943,118944],{"class":78,"line":79},[76,118945,118946],{"class":146},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[76,118948,118949,118951,118954,118956],{"class":78,"line":96},[76,118950,24545],{"class":1927},[76,118952,118953],{"class":192}," snap",[76,118955,26048],{"class":192},[76,118957,118958],{"class":192}," snap-store\n",[76,118960,118961],{"class":78,"line":1143},[76,118962,118963],{"class":146},"#移除firefox浏览器\n",[76,118965,118966,118968,118970,118972],{"class":78,"line":1158},[76,118967,24545],{"class":1927},[76,118969,118953],{"class":192},[76,118971,26048],{"class":192},[76,118973,118974],{"class":192}," firefox\n",[76,118976,118977],{"class":78,"line":1164},[76,118978,118979],{"class":146},"#移除gnome-42-2204\n",[76,118981,118982,118984,118986,118988],{"class":78,"line":1178},[76,118983,24545],{"class":1927},[76,118985,118953],{"class":192},[76,118987,26048],{"class":192},[76,118989,118990],{"class":192}," gnome-42-2204\n",[76,118992,118993],{"class":78,"line":1184},[76,118994,118995],{"class":146},"#移除gtk-common-themes\n",[76,118997,118998,119000,119002,119004],{"class":78,"line":1275},[76,118999,24545],{"class":1927},[76,119001,118953],{"class":192},[76,119003,26048],{"class":192},[76,119005,119006],{"class":192}," gtk-common-themes\n",[76,119008,119009],{"class":78,"line":1281},[76,119010,119011],{"class":146},"#移除其它...\n",[76,119013,119014],{"class":78,"line":1293},[76,119015,2639],{"class":86},[76,119017,119018],{"class":78,"line":1576},[76,119019,119020],{"class":146},"#移除core22,bare以及snapd\n",[76,119022,119023,119025,119027,119029],{"class":78,"line":1581},[76,119024,24545],{"class":1927},[76,119026,118953],{"class":192},[76,119028,26048],{"class":192},[76,119030,119031],{"class":192}," core22\n",[76,119033,119034,119036,119038,119040],{"class":78,"line":1587},[76,119035,24545],{"class":1927},[76,119037,118953],{"class":192},[76,119039,26048],{"class":192},[76,119041,119042],{"class":192}," bare\n",[76,119044,119045,119047,119049,119051],{"class":78,"line":1592},[76,119046,24545],{"class":1927},[76,119048,118953],{"class":192},[76,119050,26048],{"class":192},[76,119052,119053],{"class":192}," snapd\n",[21,119055,119056],{},[1426,119057],{"alt":71,"src":119058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[21,119060,119061],{},"输入以下命令查看是否还有snap包",[66,119063,119065],{"className":117265,"code":119064,"language":117267,"meta":71,"style":71},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[73,119066,119067,119073,119077,119081,119085],{"__ignoreMap":71},[76,119068,119069,119071],{"class":78,"line":79},[76,119070,118921],{"class":1927},[76,119072,118924],{"class":192},[76,119074,119075],{"class":78,"line":96},[76,119076,118773],{"class":146},[76,119078,119079],{"class":78,"line":1143},[76,119080,118797],{"class":1927},[76,119082,119083],{"class":78,"line":1158},[76,119084,118806],{"class":146},[76,119086,119087],{"class":78,"line":1164},[76,119088,118840],{"class":1927},[21,119090,119091],{},[1426,119092],{"alt":71,"src":119093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[46,119095,119097],{"id":119096},"_324-移除snap","3.2.4 移除snap",[21,119099,119100,119101,119106],{},"在删除掉",[326,119102,119105],{"href":119103,"rel":119104},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23833],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[66,119108,119110],{"className":117265,"code":119109,"language":117267,"meta":71,"style":71}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[73,119111,119112,119117,119130,119135,119146],{"__ignoreMap":71},[76,119113,119114],{"class":78,"line":79},[76,119115,119116],{"class":146}," #使用apt移除掉snap\n",[76,119118,119119,119121,119123,119125,119128],{"class":78,"line":96},[76,119120,24545],{"class":1927},[76,119122,117286],{"class":192},[76,119124,117594],{"class":192},[76,119126,119127],{"class":136}," --purge",[76,119129,119053],{"class":192},[76,119131,119132],{"class":78,"line":1143},[76,119133,119134],{"class":146},"#移除snapd的一些目录\n",[76,119136,119137,119139,119141,119143],{"class":78,"line":1158},[76,119138,24545],{"class":1927},[76,119140,118522],{"class":192},[76,119142,25294],{"class":136},[76,119144,119145],{"class":192}," \u002Fvar\u002Fcache\u002Fsnapd\n",[76,119147,119148,119150,119152,119154],{"class":78,"line":1164},[76,119149,24545],{"class":1927},[76,119151,118522],{"class":192},[76,119153,25294],{"class":136},[76,119155,119156],{"class":192}," ~\u002Fsnap\n",[21,119158,119159,119160,119163],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[73,119161,119162],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[46,119165,119167],{"id":119166},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[21,119169,119170],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[66,119172,119174],{"className":117265,"code":119173,"language":117267,"meta":71,"style":71},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[73,119175,119176],{"__ignoreMap":71},[76,119177,119178,119180,119182],{"class":78,"line":79},[76,119179,24545],{"class":1927},[76,119181,118552],{"class":192},[76,119183,119184],{"class":192}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[21,119186,119187,119188,119191],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[73,119189,119190],{},":wq"," 回车",[66,119193,119195],{"className":117265,"code":119194,"language":117267,"meta":71,"style":71},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[73,119196,119197,119204,119218],{"__ignoreMap":71},[76,119198,119199,119202],{"class":78,"line":79},[76,119200,119201],{"class":1927},"Package:",[76,119203,119053],{"class":192},[76,119205,119206,119209,119212,119215],{"class":78,"line":96},[76,119207,119208],{"class":1927},"Pin:",[76,119210,119211],{"class":192}," release",[76,119213,119214],{"class":192}," a=",[76,119216,119217],{"class":136},"*\n",[76,119219,119220,119223],{"class":78,"line":1143},[76,119221,119222],{"class":1927},"Pin-Priority:",[76,119224,119225],{"class":136}," -10\n",[21,119227,119228],{},[1426,119229],{"alt":71,"src":119230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[46,119232,119234],{"id":119233},"_326-测试是否成功","3.2.6 测试是否成功",[66,119236,119238],{"className":117265,"code":119237,"language":117267,"meta":71,"style":71},"sudo apt update\nsudo apt install firefox\n",[73,119239,119240,119248],{"__ignoreMap":71},[76,119241,119242,119244,119246],{"class":78,"line":79},[76,119243,24545],{"class":1927},[76,119245,117286],{"class":192},[76,119247,26211],{"class":192},[76,119249,119250,119252,119254,119256],{"class":78,"line":96},[76,119251,24545],{"class":1927},[76,119253,117286],{"class":192},[76,119255,23802],{"class":192},[76,119257,118974],{"class":192},[21,119259,119260],{},"这里提示snapd无法被安装，就证明成功了",[21,119262,119263],{},[1426,119264],{"alt":71,"src":119265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[46,119267,119269],{"id":119268},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[21,119271,119272],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[21,119274,119275],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[21,119277,119278],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[66,119280,119282],{"className":117265,"code":119281,"language":117267,"meta":71,"style":71},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[73,119283,119284,119289,119298,119303,119311],{"__ignoreMap":71},[76,119285,119286],{"class":78,"line":79},[76,119287,119288],{"class":146},"# 添加Mozilla提供的源\n",[76,119290,119291,119293,119295],{"class":78,"line":96},[76,119292,24545],{"class":1927},[76,119294,118813],{"class":192},[76,119296,119297],{"class":192}," ppa:mozillateam\u002Fppa\n",[76,119299,119300],{"class":78,"line":1143},[76,119301,119302],{"class":146},"# 安装Firefox\n",[76,119304,119305,119307,119309],{"class":78,"line":1158},[76,119306,24545],{"class":1927},[76,119308,117286],{"class":192},[76,119310,26211],{"class":192},[76,119312,119313,119315,119317,119319],{"class":78,"line":1164},[76,119314,24545],{"class":1927},[76,119316,117286],{"class":192},[76,119318,23802],{"class":192},[76,119320,118974],{"class":192},[46,119322,119324],{"id":119323},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[21,119326,119327],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[21,119329,119330],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[66,119332,119334],{"className":117265,"code":119333,"language":117267,"meta":71,"style":71},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[73,119335,119336,119341,119351,119359,119363],{"__ignoreMap":71},[76,119337,119338],{"class":78,"line":79},[76,119339,119340],{"class":146},"#删掉禁止安装snap的配置文件\n",[76,119342,119343,119345,119347,119349],{"class":78,"line":96},[76,119344,24545],{"class":1927},[76,119346,118522],{"class":192},[76,119348,25294],{"class":136},[76,119350,119184],{"class":192},[76,119352,119353,119355,119357],{"class":78,"line":1143},[76,119354,24545],{"class":1927},[76,119356,117286],{"class":192},[76,119358,26211],{"class":192},[76,119360,119361],{"class":78,"line":1158},[76,119362,2365],{"emptyLinePlaceholder":2364},[76,119364,119365,119367,119369],{"class":78,"line":1164},[76,119366,24545],{"class":1927},[76,119368,117286],{"class":192},[76,119370,119371],{"class":192}," dist-update\n",[16,119373,119375],{"id":119374},"_33-中文输入法","3.3 中文输入法",[46,119377,119379],{"id":119378},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[21,119381,119382],{},"官网下载搜狗输入法",[21,119384,119385],{},[1426,119386],{"alt":71,"src":119387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[21,119389,119390],{},[1426,119391],{"alt":71,"src":119392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[21,119394,119395],{},"打开终端输入如下",[66,119397,119399],{"className":117265,"code":119398,"language":117267,"meta":71,"style":71},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[73,119400,119401,119408],{"__ignoreMap":71},[76,119402,119403,119405],{"class":78,"line":79},[76,119404,101245],{"class":136},[76,119406,119407],{"class":192}," ~\u002FDownloads\u002F\n",[76,119409,119410,119412,119414,119416],{"class":78,"line":96},[76,119411,24545],{"class":1927},[76,119413,117286],{"class":192},[76,119415,23802],{"class":192},[76,119417,119418],{"class":192}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[21,119420,119421],{},"打开Fcitx",[21,119423,119424,119427],{},[1426,119425],{"alt":71,"src":119426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1426,119428],{"alt":71,"src":119429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[21,119431,119432],{},[1426,119433],{"alt":71,"src":119434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[21,119436,119437],{},"添加搜狗输入法",[21,119439,119440],{},[1426,119441],{"alt":71,"src":119442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[21,119444,119445],{},[1426,119446],{"alt":71,"src":119447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[21,119449,119450],{},"将搜狗输入法设置为唯一输入法",[21,119452,119453],{},[1426,119454],{"alt":71,"src":119455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[46,119457,119459],{"id":119458},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[29,119461,119462],{},[32,119463,119464],{},"卸载旧输入法",[66,119466,119468],{"className":118492,"code":119467,"language":118494,"meta":71,"style":71},"sudo apt purge fcitx* ibus*\n",[73,119469,119470],{"__ignoreMap":71},[76,119471,119472,119474,119476,119478,119481,119483,119486],{"class":78,"line":79},[76,119473,24545],{"class":1927},[76,119475,117286],{"class":192},[76,119477,117627],{"class":192},[76,119479,119480],{"class":192}," fcitx",[76,119482,543],{"class":136},[76,119484,119485],{"class":192}," ibus",[76,119487,119217],{"class":136},[29,119489,119490],{"start":96},[32,119491,119492],{},"安装Fcitx5",[66,119494,119496],{"className":117265,"code":119495,"language":117267,"meta":71,"style":71},"# 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",[73,119497,119498,119503,119517,119521,119526,119535,119543],{"__ignoreMap":71},[76,119499,119500],{"class":78,"line":79},[76,119501,119502],{"class":146},"# Ubuntu22.04及以上、Debian12及以上\n",[76,119504,119505,119507,119509,119511,119514],{"class":78,"line":96},[76,119506,24545],{"class":1927},[76,119508,117286],{"class":192},[76,119510,23802],{"class":192},[76,119512,119513],{"class":192}," fcitx5",[76,119515,119516],{"class":192}," fcitx5-chinese-addons\n",[76,119518,119519],{"class":78,"line":1143},[76,119520,2365],{"emptyLinePlaceholder":2364},[76,119522,119523],{"class":78,"line":1158},[76,119524,119525],{"class":146},"# Ubuntu20.04\n",[76,119527,119528,119530,119532],{"class":78,"line":1164},[76,119529,24545],{"class":1927},[76,119531,118813],{"class":192},[76,119533,119534],{"class":192}," ppa:zhsj\u002Ffcitx5\n",[76,119536,119537,119539,119541],{"class":78,"line":1178},[76,119538,24545],{"class":1927},[76,119540,117286],{"class":192},[76,119542,26211],{"class":192},[76,119544,119545,119547,119549,119551,119553],{"class":78,"line":1184},[76,119546,24545],{"class":1927},[76,119548,117286],{"class":192},[76,119550,23802],{"class":192},[76,119552,119513],{"class":192},[76,119554,119516],{"class":192},[29,119556,119557,119560],{"start":1143},[32,119558,119559],{},"Reboot System",[32,119561,119562],{},"启动Fcitx5",[21,119564,119565],{},[1426,119566],{"alt":71,"src":119567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[29,119569,119570],{"start":1164},[32,119571,119572],{},"修改一些设置",[21,119574,119575],{},"将Pinyin和Keyboard - English US加入到左边。",[21,119577,119578],{},[1426,119579],{"alt":71,"src":119580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[21,119582,119583],{},"添加快捷键以便于更好切换中英文",[21,119585,119586],{},[1426,119587],{"alt":71,"src":119588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[29,119590,119591],{"start":1178},[32,119592,119593],{},"重启",[66,119595,119597],{"className":118492,"code":119596,"language":118494,"meta":71,"style":71},"sudo shutdown -r now\n",[73,119598,119599],{"__ignoreMap":71},[76,119600,119601,119603,119606,119609],{"class":78,"line":79},[76,119602,24545],{"class":1927},[76,119604,119605],{"class":192}," shutdown",[76,119607,119608],{"class":136}," -r",[76,119610,119611],{"class":192}," now\n",[29,119613,119614],{"start":1184},[32,119615,119616],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[21,119618,119619],{},[326,119620,119621],{"href":119621,"rel":119622},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23833],[29,119624,119625],{"start":1275},[32,119626,119627],{},"再重启",[66,119629,119630],{"className":118492,"code":119596,"language":118494,"meta":71,"style":71},[73,119631,119632],{"__ignoreMap":71},[76,119633,119634,119636,119638,119640],{"class":78,"line":79},[76,119635,24545],{"class":1927},[76,119637,119605],{"class":192},[76,119639,119608],{"class":136},[76,119641,119611],{"class":192},[16,119643,119645],{"id":119644},"_34-pip3源替换","3.4 pip3源替换",[21,119647,119648],{},"非Debian系发行版需要做。",[21,119650,119651],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[21,119653,119654],{},"使用dnf的系统也可能不用做。",[66,119656,119658],{"className":117265,"code":119657,"language":117267,"meta":71,"style":71},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[73,119659,119660,119665,119672,119677,119682],{"__ignoreMap":71},[76,119661,119662],{"class":78,"line":79},[76,119663,119664],{"class":146},"# 检查是否已安装 pip\n",[76,119666,119667,119670],{"class":78,"line":96},[76,119668,119669],{"class":1927},"pip3",[76,119671,26262],{"class":136},[76,119673,119674],{"class":78,"line":1143},[76,119675,119676],{"class":146},"# 如果未安装，先安装 pip3（见下方）\n",[76,119678,119679],{"class":78,"line":1158},[76,119680,119681],{"class":146},"# 配置 pip 使用清华源\n",[76,119683,119684,119686,119689,119692,119695],{"class":78,"line":1164},[76,119685,119669],{"class":1927},[76,119687,119688],{"class":192}," config",[76,119690,119691],{"class":192}," set",[76,119693,119694],{"class":192}," global.index-url",[76,119696,119697],{"class":192}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[21,119699,119700],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[21,119702,119703],{},[1426,119704],{"alt":71,"src":119705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[66,119707,119709],{"className":117265,"code":119708,"language":117267,"meta":71,"style":71},"#安装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",[73,119710,119711,119716,119724,119735,119739,119744,119763,119767,119772,119784,119788,119793],{"__ignoreMap":71},[76,119712,119713],{"class":78,"line":79},[76,119714,119715],{"class":146},"#安装pip3\n",[76,119717,119718,119720,119722],{"class":78,"line":96},[76,119719,24545],{"class":1927},[76,119721,117286],{"class":192},[76,119723,26211],{"class":192},[76,119725,119726,119728,119730,119732],{"class":78,"line":1143},[76,119727,24545],{"class":1927},[76,119729,26045],{"class":192},[76,119731,23802],{"class":192},[76,119733,119734],{"class":192}," python3-pip\n",[76,119736,119737],{"class":78,"line":1158},[76,119738,2365],{"emptyLinePlaceholder":2364},[76,119740,119741],{"class":78,"line":1164},[76,119742,119743],{"class":146},"#更新pip3\n",[76,119745,119746,119748,119750,119752,119754,119756,119759,119761],{"class":78,"line":1178},[76,119747,100848],{"class":1927},[76,119749,100851],{"class":136},[76,119751,100874],{"class":192},[76,119753,23802],{"class":192},[76,119755,26399],{"class":136},[76,119757,119758],{"class":192}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[76,119760,100879],{"class":136},[76,119762,100882],{"class":192},[76,119764,119765],{"class":78,"line":1184},[76,119766,2365],{"emptyLinePlaceholder":2364},[76,119768,119769],{"class":78,"line":1275},[76,119770,119771],{"class":146},"#设置pip源为清华源\n",[76,119773,119774,119776,119778,119780,119782],{"class":78,"line":1281},[76,119775,119669],{"class":1927},[76,119777,119688],{"class":192},[76,119779,119691],{"class":192},[76,119781,119694],{"class":192},[76,119783,119697],{"class":192},[76,119785,119786],{"class":78,"line":1293},[76,119787,2365],{"emptyLinePlaceholder":2364},[76,119789,119790],{"class":78,"line":1576},[76,119791,119792],{"class":146},"#测试\n",[76,119794,119795,119797,119799,119801,119803,119805],{"class":78,"line":1581},[76,119796,100848],{"class":1927},[76,119798,100851],{"class":136},[76,119800,100874],{"class":192},[76,119802,23802],{"class":192},[76,119804,100879],{"class":136},[76,119806,100882],{"class":192},[21,119808,119809],{},"成功的话，会看到Looking后面是tsinghua字样。",[21,119811,119812],{},[1426,119813],{"alt":71,"src":119814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[16,119816,119818],{"id":119817},"_35-显卡驱动安装","3.5 显卡驱动安装",[46,119820,119822],{"id":119821},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[66,119824,119826],{"className":118492,"code":119825,"language":118494,"meta":71,"style":71},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[73,119827,119828,119833,119848,119853],{"__ignoreMap":71},[76,119829,119830],{"class":78,"line":79},[76,119831,119832],{"class":146},"# 如果是使用apt安装的驱动\n",[76,119834,119835,119837,119839,119841,119843,119846],{"class":78,"line":96},[76,119836,24545],{"class":1927},[76,119838,26045],{"class":192},[76,119840,26048],{"class":192},[76,119842,119127],{"class":136},[76,119844,119845],{"class":192}," nvidia",[76,119847,119217],{"class":136},[76,119849,119850],{"class":78,"line":1143},[76,119851,119852],{"class":146},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[76,119854,119855,119857],{"class":78,"line":1158},[76,119856,24545],{"class":1927},[76,119858,119859],{"class":192}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[46,119861,119863],{"id":119862},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21965,119865,119867],{"id":119866},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22877,119869,119871],{"id":119870},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[66,119873,119875],{"className":118492,"code":119874,"language":118494,"meta":71,"style":71},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,119876,119877,119882,119893,119898,119908,119913],{"__ignoreMap":71},[76,119878,119879],{"class":78,"line":79},[76,119880,119881],{"class":146},"# 安装英伟达驱动\n",[76,119883,119884,119886,119888,119890],{"class":78,"line":96},[76,119885,24545],{"class":1927},[76,119887,117286],{"class":192},[76,119889,23802],{"class":192},[76,119891,119892],{"class":192}," nvidia-driver-版本号\n",[76,119894,119895],{"class":78,"line":1143},[76,119896,119897],{"class":146},"# 重启 \n",[76,119899,119900,119902,119904,119906],{"class":78,"line":1158},[76,119901,24545],{"class":1927},[76,119903,119605],{"class":192},[76,119905,119608],{"class":136},[76,119907,119611],{"class":192},[76,119909,119910],{"class":78,"line":1164},[76,119911,119912],{"class":146},"# 检查驱动是否安装成功\n",[76,119914,119915],{"class":78,"line":1178},[76,119916,119917],{"class":1927},"nvidia-smi\n",[22877,119919,119921],{"id":119920},"_35212-debian","3.5.2.1.2 Debian",[66,119923,119925],{"className":118492,"code":119924,"language":118494,"meta":71,"style":71},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,119926,119927,119931,119945,119949,119959,119963],{"__ignoreMap":71},[76,119928,119929],{"class":78,"line":79},[76,119930,119881],{"class":146},[76,119932,119933,119935,119937,119939,119942],{"class":78,"line":96},[76,119934,24545],{"class":1927},[76,119936,117286],{"class":192},[76,119938,23802],{"class":192},[76,119940,119941],{"class":192}," nvidia-driver",[76,119943,119944],{"class":192}," nvidia-settings\n",[76,119946,119947],{"class":78,"line":1143},[76,119948,119897],{"class":146},[76,119950,119951,119953,119955,119957],{"class":78,"line":1158},[76,119952,24545],{"class":1927},[76,119954,119605],{"class":192},[76,119956,119608],{"class":136},[76,119958,119611],{"class":192},[76,119960,119961],{"class":78,"line":1164},[76,119962,119912],{"class":146},[76,119964,119965],{"class":78,"line":1178},[76,119966,119917],{"class":1927},[21965,119968,119970],{"id":119969},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[21,119972,119973,119974,119977],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[237,119975,119976],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[21,119979,119980,119981],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23521,119982,119983],{},[237,119984,119985],{},"（也可以不禁用桌面环境，直接进行下一步。）",[66,119987,119989],{"className":118492,"code":119988,"language":118494,"meta":71,"style":71},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[73,119990,119991,119996,120006,120011,120024,120029],{"__ignoreMap":71},[76,119992,119993],{"class":78,"line":79},[76,119994,119995],{"class":146},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[76,119997,119998,120000,120003],{"class":78,"line":96},[76,119999,24545],{"class":1927},[76,120001,120002],{"class":192}," telinit",[76,120004,120005],{"class":136}," 3\n",[76,120007,120008],{"class":78,"line":1143},[76,120009,120010],{"class":146},"# ubuntu 使用下方命令\n",[76,120012,120013,120015,120018,120021],{"class":78,"line":1158},[76,120014,24545],{"class":1927},[76,120016,120017],{"class":192}," service",[76,120019,120020],{"class":192}," lightdm",[76,120022,120023],{"class":192}," stop\n",[76,120025,120026],{"class":78,"line":1164},[76,120027,120028],{"class":146},"# Fedora 使用下方命令\n",[76,120030,120031,120033,120035,120038],{"class":78,"line":1178},[76,120032,24545],{"class":1927},[76,120034,26482],{"class":192},[76,120036,120037],{"class":192}," isolate",[76,120039,120040],{"class":192}," multi-user.target\n",[21,120042,120043],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[66,120045,120047],{"className":118492,"code":120046,"language":118494,"meta":71,"style":71},"# 编译环境+准备工作\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",[73,120048,120049,120054,120065,120070,120077,120082,120094,120099,120106,120111],{"__ignoreMap":71},[76,120050,120051],{"class":78,"line":79},[76,120052,120053],{"class":146},"# 编译环境+准备工作\n",[76,120055,120056,120058,120060,120062],{"class":78,"line":96},[76,120057,24545],{"class":1927},[76,120059,117286],{"class":192},[76,120061,23802],{"class":192},[76,120063,120064],{"class":192}," build-essential\n",[76,120066,120067],{"class":78,"line":1143},[76,120068,120069],{"class":146},"# 进入到.run目录中\n",[76,120071,120072,120074],{"class":78,"line":1158},[76,120073,101245],{"class":136},[76,120075,120076],{"class":192}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[76,120078,120079],{"class":78,"line":1164},[76,120080,120081],{"class":146},"# 给驱动文件增加可执行权限：\n",[76,120083,120084,120086,120088,120091],{"class":78,"line":1178},[76,120085,24545],{"class":1927},[76,120087,24548],{"class":192},[76,120089,120090],{"class":192}," a+x",[76,120092,120093],{"class":192}," NVIDIA-Linux-x86_64-550.107.02.run\n",[76,120095,120096],{"class":78,"line":1184},[76,120097,120098],{"class":146},"# 然后执行安装：\n",[76,120100,120101,120103],{"class":78,"line":1275},[76,120102,24545],{"class":1927},[76,120104,120105],{"class":192}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[76,120107,120108],{"class":78,"line":1281},[76,120109,120110],{"class":146},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[76,120112,120113,120115,120118],{"class":78,"line":1293},[76,120114,24545],{"class":1927},[76,120116,120117],{"class":192}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[76,120119,120120],{"class":136},"  --no-opengl-files\n",[21,120122,120123],{},"安装完毕重启即可",[66,120125,120127],{"className":118492,"code":120126,"language":118494,"meta":71,"style":71},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,120128,120129,120133,120139,120143],{"__ignoreMap":71},[76,120130,120131],{"class":78,"line":79},[76,120132,119897],{"class":146},[76,120134,120135,120137],{"class":78,"line":96},[76,120136,24545],{"class":1927},[76,120138,26616],{"class":192},[76,120140,120141],{"class":78,"line":1143},[76,120142,119912],{"class":146},[76,120144,120145],{"class":78,"line":1158},[76,120146,119917],{"class":1927},[46,120148,120150],{"id":120149},"_353-安装cuda","3.5.3 安装CUDA",[21,120152,120153],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[21,120155,120156],{},[1426,120157],{"alt":71,"src":120158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[29,120160,120161],{},[32,120162,120163],{},"先查看显卡驱动所支持的最高CUDA版本",[66,120165,120166],{"className":118492,"code":119917,"language":118494,"meta":71,"style":71},[73,120167,120168],{"__ignoreMap":71},[76,120169,120170],{"class":78,"line":79},[76,120171,119917],{"class":1927},[21,120173,120174],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[21,120176,120177],{},[1426,120178],{"alt":71,"src":120179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[29,120181,120182],{"start":96},[32,120183,120184],{},"下载CUDA并安装CUDA",[21,120186,118271,120187],{},[326,120188,118274],{"href":118274,"rel":120189},[23833],[21,120191,120192],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[21,120194,120195],{},[1426,120196],{"alt":71,"src":120197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[21,120199,120200,120201,120206],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[326,120202,120205],{"href":120203,"rel":120204},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23833],"Vinci机器人队单片机教程","）",[21,120208,120209],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[21,120211,120212],{},[1426,120213],{"alt":71,"src":120214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[21,120216,120217],{},"将最下方框框里的命令敲入终端",[66,120219,120221],{"className":118492,"code":120220,"language":118494,"meta":71,"style":71},"# 在当前文件夹下创建一个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",[73,120222,120223,120228,120237,120242,120249,120254,120262,120267,120278,120283],{"__ignoreMap":71},[76,120224,120225],{"class":78,"line":79},[76,120226,120227],{"class":146},"# 在当前文件夹下创建一个ttt的子文件夹\n",[76,120229,120230,120232,120234],{"class":78,"line":96},[76,120231,101235],{"class":1927},[76,120233,29185],{"class":136},[76,120235,120236],{"class":192}," .\u002Fttt\n",[76,120238,120239],{"class":78,"line":1143},[76,120240,120241],{"class":146},"# 进入ttt文件夹\n",[76,120243,120244,120246],{"class":78,"line":1158},[76,120245,101245],{"class":136},[76,120247,120248],{"class":192}," ttt\n",[76,120250,120251],{"class":78,"line":1164},[76,120252,120253],{"class":146},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[76,120255,120256,120259],{"class":78,"line":1178},[76,120257,120258],{"class":1927},"wget",[76,120260,120261],{"class":192}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[76,120263,120264],{"class":78,"line":1184},[76,120265,120266],{"class":146},"# 给予权限\n",[76,120268,120269,120271,120273,120275],{"class":78,"line":1275},[76,120270,24545],{"class":1927},[76,120272,24548],{"class":192},[76,120274,120090],{"class":192},[76,120276,120277],{"class":192}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[76,120279,120280],{"class":78,"line":1281},[76,120281,120282],{"class":146},"# 运行脚本\n",[76,120284,120285,120287],{"class":78,"line":1293},[76,120286,24545],{"class":1927},[76,120288,120277],{"class":192},[21,120290,120291],{},[1426,120292],{"alt":71,"src":120293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[21,120295,120296],{},"正在安装中：",[21,120298,120299],{},[1426,120300],{"alt":71,"src":120301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[21,120303,120304],{},"输入accept接受即可",[21,120306,120307],{},[1426,120308],{"alt":71,"src":120309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[21,120311,120312],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[21,120314,120315],{},[1426,120316],{"alt":71,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[21,120319,120320],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[21,120322,120323],{},[1426,120324],{"alt":71,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[29,120327,120328],{"start":1143},[32,120329,120330],{},"配置环境",[21,120332,120333],{},"根据上方确认一下路径，比如我上面红色框起来的为",[66,120335,120337],{"className":118492,"code":120336,"language":118494,"meta":71,"style":71},"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",[73,120338,120339,120355,120370],{"__ignoreMap":71},[76,120340,120341,120344,120347,120350,120353],{"class":78,"line":79},[76,120342,120343],{"class":1927},"Please",[76,120345,120346],{"class":192}," make",[76,120348,120349],{"class":192}," sure",[76,120351,120352],{"class":192}," that",[76,120354,2639],{"class":86},[76,120356,120357,120359,120362,120365,120368],{"class":78,"line":96},[76,120358,52240],{"class":1927},[76,120360,120361],{"class":192},"   PATH",[76,120363,120364],{"class":192}," includes",[76,120366,120367],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[76,120369,2639],{"class":86},[76,120371,120372,120374,120377,120379,120382,120385,120387,120390,120393,120396,120399,120401,120404,120406],{"class":78,"line":1143},[76,120373,52240],{"class":1927},[76,120375,120376],{"class":192},"   LD_LIBRARY_PATH",[76,120378,120364],{"class":192},[76,120380,120381],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[76,120383,120384],{"class":192}," or,",[76,120386,5176],{"class":192},[76,120388,120389],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[76,120391,120392],{"class":192}," to",[76,120394,120395],{"class":192}," \u002Fetc\u002Fld.so.conf",[76,120397,120398],{"class":192}," and",[76,120400,27199],{"class":192},[76,120402,120403],{"class":192}," ldconfig",[76,120405,64573],{"class":192},[76,120407,120408],{"class":192}," root\n",[21,120410,120411],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[66,120413,120415],{"className":118492,"code":120414,"language":118494,"meta":71,"style":71},"which nvcc\n",[73,120416,120417],{"__ignoreMap":71},[76,120418,120419,120422],{"class":78,"line":79},[76,120420,120421],{"class":136},"which",[76,120423,120424],{"class":192}," nvcc\n",[21,120426,120427],{},[1426,120428],{"alt":71,"src":120429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[21,120431,120432],{},"所以我进行以下操作：",[66,120434,120436],{"className":118492,"code":120435,"language":118494,"meta":71,"style":71},"sudo vim ~\u002F.bashrc\n",[73,120437,120438],{"__ignoreMap":71},[76,120439,120440,120442,120444],{"class":78,"line":79},[76,120441,24545],{"class":1927},[76,120443,118552],{"class":192},[76,120445,120446],{"class":192}," ~\u002F.bashrc\n",[21,120448,120449],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[66,120451,120453],{"className":118492,"code":120452,"language":118494,"meta":71,"style":71},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[73,120454,120455,120467],{"__ignoreMap":71},[76,120456,120457,120459,120462,120464],{"class":78,"line":79},[76,120458,25011],{"class":82},[76,120460,120461],{"class":86}," PATH",[76,120463,133],{"class":82},[76,120465,120466],{"class":86},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[76,120468,120469,120471,120474,120476],{"class":78,"line":96},[76,120470,25011],{"class":82},[76,120472,120473],{"class":86}," LD_LIBRARY_PATH",[76,120475,133],{"class":82},[76,120477,120478],{"class":86},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[21,120480,120481],{},[1426,120482],{"alt":71,"src":120483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[66,120485,120487],{"className":118492,"code":120486,"language":118494,"meta":71,"style":71},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[73,120488,120489,120494,120500,120505],{"__ignoreMap":71},[76,120490,120491],{"class":78,"line":79},[76,120492,120493],{"class":146},"# 刷新当前终端的环境变量\n",[76,120495,120496,120498],{"class":78,"line":96},[76,120497,100862],{"class":136},[76,120499,120446],{"class":192},[76,120501,120502],{"class":78,"line":1143},[76,120503,120504],{"class":146},"# 验证CUDA是否安装成功\n",[76,120506,120507,120510],{"class":78,"line":1158},[76,120508,120509],{"class":1927},"nvcc",[76,120511,120512],{"class":136}," -V\n",[21,120514,120515],{},"出现下图这种则安装成功。",[21,120517,120518],{},[1426,120519],{"alt":71,"src":120520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[46,120522,120524],{"id":120523},"_354-安装cudnn","3.5.4 安装cuDNN",[29,120526,120527],{},[32,120528,120529],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[21,120531,120532,120533,120538],{},"前往 NVIDIA cuDNN 下载页面：",[326,120534,120537],{"href":120535,"rel":120536},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23833],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[21,120540,120541],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[21,120543,120544],{},[1426,120545],{"alt":71,"src":120546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[21,120548,120549],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[21,120551,120552],{},[1426,120553],{"alt":71,"src":120554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[21,120556,120557],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[21,120559,120560],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[21,120562,120563],{},[237,120564,120565],{},"我这里选择所有Linux X86_64最通用的办法：",[21,120567,120568],{},"下载好的：",[21,120570,120571],{},[1426,120572],{"alt":71,"src":120573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[29,120575,120576],{"start":96},[32,120577,120578],{},"安装cuDNN",[21,120580,120581],{},"找到该文件所在目录，并打开终端，cd到该目录。",[21,120583,120584],{},[1426,120585],{"alt":71,"src":120586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[21,120588,120589],{},"解压文件，并复制到对应位置完成安装",[66,120591,120593],{"className":118492,"code":120592,"language":118494,"meta":71,"style":71},"# 解压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",[73,120594,120595,120600,120611,120616,120623,120628,120644,120658,120663,120674,120683,120687,120703],{"__ignoreMap":71},[76,120596,120597],{"class":78,"line":79},[76,120598,120599],{"class":146},"# 解压cuDNN文件\n",[76,120601,120602,120605,120608],{"class":78,"line":96},[76,120603,120604],{"class":1927},"tar",[76,120606,120607],{"class":136}," -xvf",[76,120609,120610],{"class":192}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[76,120612,120613],{"class":78,"line":1143},[76,120614,120615],{"class":146},"# cd进文件夹\n",[76,120617,120618,120620],{"class":78,"line":1158},[76,120619,101245],{"class":136},[76,120621,120622],{"class":192}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[76,120624,120625],{"class":78,"line":1164},[76,120626,120627],{"class":146},"# 复制cuDNN文件到CUDA目录\n",[76,120629,120630,120632,120634,120637,120639,120642],{"class":78,"line":1178},[76,120631,24545],{"class":1927},[76,120633,27830],{"class":192},[76,120635,120636],{"class":192}," include\u002Fcudnn",[76,120638,543],{"class":136},[76,120640,120641],{"class":192},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[76,120643,2639],{"class":86},[76,120645,120646,120648,120650,120653,120655],{"class":78,"line":1184},[76,120647,24545],{"class":1927},[76,120649,27830],{"class":192},[76,120651,120652],{"class":192}," lib\u002Flibcudnn",[76,120654,543],{"class":136},[76,120656,120657],{"class":192},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[76,120659,120660],{"class":78,"line":1275},[76,120661,120662],{"class":146},"# 对比一下有没有缺文件\n",[76,120664,120665,120667,120670,120672],{"class":78,"line":1281},[76,120666,26730],{"class":1927},[76,120668,120669],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[76,120671,543],{"class":136},[76,120673,2639],{"class":86},[76,120675,120676,120678,120681],{"class":78,"line":1293},[76,120677,26730],{"class":1927},[76,120679,120680],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[76,120682,119217],{"class":136},[76,120684,120685],{"class":78,"line":1576},[76,120686,120266],{"class":146},[76,120688,120689,120691,120693,120696,120698,120700],{"class":78,"line":1581},[76,120690,24545],{"class":1927},[76,120692,24548],{"class":192},[76,120694,120695],{"class":192}," a+r",[76,120697,120669],{"class":192},[76,120699,543],{"class":136},[76,120701,120702],{"class":86},"   \n",[76,120704,120705,120707,120709,120711,120713],{"class":78,"line":1587},[76,120706,24545],{"class":1927},[76,120708,24548],{"class":192},[76,120710,120695],{"class":192},[76,120712,120680],{"class":192},[76,120714,119217],{"class":136},[29,120716,120717],{"start":1143},[32,120718,120719],{},"检查是否安装成功",[66,120721,120723],{"className":118492,"code":120722,"language":118494,"meta":71,"style":71},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[73,120724,120725,120730],{"__ignoreMap":71},[76,120726,120727],{"class":78,"line":79},[76,120728,120729],{"class":146},"# 检查cuDNN版本命令\n",[76,120731,120732,120735,120738,120740,120742,120745,120748],{"class":78,"line":96},[76,120733,120734],{"class":1927},"cat",[76,120736,120737],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[76,120739,25078],{"class":82},[76,120741,30205],{"class":1927},[76,120743,120744],{"class":192}," CUDNN_MAJOR",[76,120746,120747],{"class":136}," -A",[76,120749,47692],{"class":136},[21,120751,120752],{},"出现下图这样的就是安装成功了",[21,120754,120755],{},[1426,120756],{"alt":71,"src":120757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[29,120759,120760],{"start":1158},[32,120761,120762],{},"软链接(一般不需要)",[66,120764,120766],{"className":118492,"code":120765,"language":118494,"meta":71,"style":71},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[73,120767,120768,120773],{"__ignoreMap":71},[76,120769,120770],{"class":78,"line":79},[76,120771,120772],{"class":146},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[76,120774,120775,120777],{"class":78,"line":96},[76,120776,24545],{"class":1927},[76,120778,120779],{"class":192}," ldconfig\n",[21,120781,120782],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[66,120784,120789],{"className":120785,"code":120786,"language":120787,"meta":120788,"style":71},"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",[73,120790,120791,120796,120801,120806,120811,120816,120821],{"__ignoreMap":71},[76,120792,120793],{"class":78,"line":79},[76,120794,120795],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[76,120797,120798],{"class":78,"line":96},[76,120799,120800],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[76,120802,120803],{"class":78,"line":1143},[76,120804,120805],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[76,120807,120808],{"class":78,"line":1158},[76,120809,120810],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[76,120812,120813],{"class":78,"line":1164},[76,120814,120815],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[76,120817,120818],{"class":78,"line":1178},[76,120819,120820],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[76,120822,120823],{"class":78,"line":1184},[76,120824,120825],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[21,120827,120828],{},"运行下方的命令",[66,120830,120832],{"className":118492,"code":120831,"language":118494,"meta":71,"style":71},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[73,120833,120834,120839,120846,120851],{"__ignoreMap":71},[76,120835,120836],{"class":78,"line":79},[76,120837,120838],{"class":146},"# cd进入CUDA路径\n",[76,120840,120841,120843],{"class":78,"line":96},[76,120842,101245],{"class":136},[76,120844,120845],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[76,120847,120848],{"class":78,"line":1143},[76,120849,120850],{"class":146}," # 查看本路径下的需要软链接的文件名\n",[76,120852,120853],{"class":78,"line":1158},[76,120854,120855],{"class":1927}," ls\n",[21,120857,120858],{},[1426,120859],{"alt":71,"src":120860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[21,120862,120863,120864,18377,120867,18377,120870,120873],{},"如上图，我需要将",[73,120865,120866],{},"libcudnn_xxx_xxxxx.so.8.9.7",[73,120868,120869],{},"libcudnn_xxx_xxxxx.so.8",[73,120871,120872],{},"libcudnn_xxx_xxxxx.so","软链接",[66,120875,120877],{"className":118492,"code":120876,"language":118494,"meta":71,"style":71},"# 创建符号链接。对于每个 .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",[73,120878,120879,120884,120900,120914,120928,120942,120956,120970,120984,120989,120995,121000],{"__ignoreMap":71},[76,120880,120881],{"class":78,"line":79},[76,120882,120883],{"class":146},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[76,120885,120886,120888,120891,120894,120897],{"class":78,"line":96},[76,120887,24545],{"class":1927},[76,120889,120890],{"class":192}," ln",[76,120892,120893],{"class":136}," -sf",[76,120895,120896],{"class":192}," libcudnn_cnn_train.so.8.9.7",[76,120898,120899],{"class":192}," libcudnn_cnn_train.so.8\n",[76,120901,120902,120904,120906,120908,120911],{"class":78,"line":1143},[76,120903,24545],{"class":1927},[76,120905,120890],{"class":192},[76,120907,120893],{"class":136},[76,120909,120910],{"class":192}," libcudnn_adv_infer.so.8.9.7",[76,120912,120913],{"class":192}," libcudnn_adv_infer.so.8\n",[76,120915,120916,120918,120920,120922,120925],{"class":78,"line":1158},[76,120917,24545],{"class":1927},[76,120919,120890],{"class":192},[76,120921,120893],{"class":136},[76,120923,120924],{"class":192}," libcudnn_adv_train.so.8.9.7",[76,120926,120927],{"class":192}," libcudnn_adv_train.so.8\n",[76,120929,120930,120932,120934,120936,120939],{"class":78,"line":1164},[76,120931,24545],{"class":1927},[76,120933,120890],{"class":192},[76,120935,120893],{"class":136},[76,120937,120938],{"class":192}," libcudnn_cnn_infer.so.8.9.7",[76,120940,120941],{"class":192}," libcudnn_cnn_infer.so.8\n",[76,120943,120944,120946,120948,120950,120953],{"class":78,"line":1178},[76,120945,24545],{"class":1927},[76,120947,120890],{"class":192},[76,120949,120893],{"class":136},[76,120951,120952],{"class":192}," libcudnn.so.8.9.7",[76,120954,120955],{"class":192}," libcudnn.so.8\n",[76,120957,120958,120960,120962,120964,120967],{"class":78,"line":1184},[76,120959,24545],{"class":1927},[76,120961,120890],{"class":192},[76,120963,120893],{"class":136},[76,120965,120966],{"class":192}," libcudnn_ops_infer.so.8.9.7",[76,120968,120969],{"class":192}," libcudnn_ops_infer.so.8\n",[76,120971,120972,120974,120976,120978,120981],{"class":78,"line":1275},[76,120973,24545],{"class":1927},[76,120975,120890],{"class":192},[76,120977,120893],{"class":136},[76,120979,120980],{"class":192}," libcudnn_ops_train.so.8.9.7",[76,120982,120983],{"class":192}," libcudnn_ops_train.so.8\n",[76,120985,120986],{"class":78,"line":1281},[76,120987,120988],{"class":146},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[76,120990,120991,120993],{"class":78,"line":1293},[76,120992,24545],{"class":1927},[76,120994,120779],{"class":192},[76,120996,120997],{"class":78,"line":1576},[76,120998,120999],{"class":146},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[76,121001,121002,121004,121007,121010,121012,121015],{"class":78,"line":1581},[76,121003,26730],{"class":1927},[76,121005,121006],{"class":136}," -l",[76,121008,121009],{"class":192}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[76,121011,543],{"class":136},[76,121013,121014],{"class":192},".so",[76,121016,119217],{"class":136},[46,121018,121020],{"id":121019},"_355-常见问题","3.5.5 常见问题",[29,121022,121023],{},[32,121024,121025],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[66,121027,121029],{"className":118492,"code":121028,"language":118494,"meta":71,"style":71},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[73,121030,121031],{"__ignoreMap":71},[76,121032,121033,121035,121037],{"class":78,"line":79},[76,121034,24545],{"class":1927},[76,121036,118552],{"class":192},[76,121038,121039],{"class":192}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[21,121041,121042],{},"blacklist-nouveau.conf文件内容如下：",[66,121044,121046],{"className":118492,"code":121045,"language":118494,"meta":71,"style":71},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[73,121047,121048,121056,121063,121075,121085],{"__ignoreMap":71},[76,121049,121050,121053],{"class":78,"line":79},[76,121051,121052],{"class":1927},"blacklist",[76,121054,121055],{"class":192}," nouveau\n",[76,121057,121058,121060],{"class":78,"line":96},[76,121059,121052],{"class":1927},[76,121061,121062],{"class":192}," lbm-nouveau\n",[76,121064,121065,121067,121070,121073],{"class":78,"line":1143},[76,121066,115899],{"class":1927},[76,121068,121069],{"class":192}," nouveau",[76,121071,121072],{"class":192}," modeset=",[76,121074,3050],{"class":136},[76,121076,121077,121080,121082],{"class":78,"line":1158},[76,121078,121079],{"class":136},"alias",[76,121081,121069],{"class":192},[76,121083,121084],{"class":192}," off\n",[76,121086,121087,121089,121092],{"class":78,"line":1164},[76,121088,121079],{"class":136},[76,121090,121091],{"class":192}," lbm-nouveau",[76,121093,121084],{"class":192},[21,121095,121096],{},"接着运行下方命令",[66,121098,121100],{"className":118492,"code":121099,"language":118494,"meta":71,"style":71},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[73,121101,121102,121112,121117],{"__ignoreMap":71},[76,121103,121104,121106,121109],{"class":78,"line":79},[76,121105,24545],{"class":1927},[76,121107,121108],{"class":192}," update-initramfs",[76,121110,121111],{"class":136}," -u\n",[76,121113,121114],{"class":78,"line":96},[76,121115,121116],{"class":1927},"或者\n",[76,121118,121119,121121,121124],{"class":78,"line":1143},[76,121120,24545],{"class":1927},[76,121122,121123],{"class":192}," dracut",[76,121125,121126],{"class":136}," --force\n",[21,121128,121129],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[66,121131,121133],{"className":118492,"code":121132,"language":118494,"meta":71,"style":71},"lsmod | grep nouveau\n",[73,121134,121135],{"__ignoreMap":71},[76,121136,121137,121140,121142,121144],{"class":78,"line":79},[76,121138,121139],{"class":1927},"lsmod",[76,121141,25078],{"class":82},[76,121143,30205],{"class":1927},[76,121145,121055],{"class":192},[29,121147,121148],{"start":96},[32,121149,121150],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[66,121152,121154],{"className":118492,"code":121153,"language":118494,"meta":71,"style":71},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[73,121155,121156],{"__ignoreMap":71},[76,121157,121158,121160,121162],{"class":78,"line":79},[76,121159,24545],{"class":1927},[76,121161,118552],{"class":192},[76,121163,121164],{"class":192}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[21,121166,121167],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[66,121169,121171],{"className":118492,"code":121170,"language":118494,"meta":71,"style":71},"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",[73,121172,121173,121181,121189,121197,121204,121212,121222,121230],{"__ignoreMap":71},[76,121174,121175,121178],{"class":78,"line":79},[76,121176,121177],{"class":1927},"Section",[76,121179,121180],{"class":192}," \"OutputClass\"\n",[76,121182,121183,121186],{"class":78,"line":96},[76,121184,121185],{"class":1927},"   Identifier",[76,121187,121188],{"class":192}," \"nvidia\"\n",[76,121190,121191,121194],{"class":78,"line":1143},[76,121192,121193],{"class":1927},"   MatchDriver",[76,121195,121196],{"class":192}," \"nvidia-drm\"\n",[76,121198,121199,121202],{"class":78,"line":1158},[76,121200,121201],{"class":1927},"   Driver",[76,121203,121188],{"class":192},[76,121205,121206,121209],{"class":78,"line":1164},[76,121207,121208],{"class":1927},"   Option",[76,121210,121211],{"class":192}," \"AllowEmptyInitialConfiguration\"\n",[76,121213,121214,121216,121219],{"class":78,"line":1178},[76,121215,121208],{"class":1927},[76,121217,121218],{"class":192}," \"PrimaryGPU\"",[76,121220,121221],{"class":192}," \"yes\"\n",[76,121223,121224,121227],{"class":78,"line":1184},[76,121225,121226],{"class":1927},"   ModulePath",[76,121228,121229],{"class":192}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[76,121231,121232],{"class":78,"line":1275},[76,121233,121234],{"class":1927},"EndSection\n",[29,121236,121237],{"start":1143},[32,121238,121239],{},"安装N卡驱动提示错误",[66,121241,121243],{"className":120785,"code":121242,"language":120787,"meta":120788,"style":71},"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",[73,121244,121245],{"__ignoreMap":71},[76,121246,121247],{"class":78,"line":79},[76,121248,121242],{},[29,121250,121251],{},[32,121252,121253],{},"检查当前运行的内核版本：",[21,121255,121256],{},"运行以下命令以查看你当前正在使用的内核版本：",[66,121258,121260],{"className":117265,"code":121259,"language":117267,"meta":71,"style":71},"uname -r\n",[73,121261,121262],{"__ignoreMap":71},[76,121263,121264,121266],{"class":78,"line":79},[76,121265,70173],{"class":1927},[76,121267,121268],{"class":136}," -r\n",[29,121270,121271],{"start":96},[32,121272,121273],{},"安装内核开发文件：",[21,121275,121276,121277,121280],{},"确保你已经安装了与当前内核版本相匹配的 ",[73,121278,121279],{},"kernel-devel"," 包。运行以下命令来安装：",[66,121282,121284],{"className":117265,"code":121283,"language":117267,"meta":71,"style":71},"sudo dnf install kernel-devel-$(uname -r)\n",[73,121285,121286],{"__ignoreMap":71},[76,121287,121288,121290,121292,121294,121297,121299,121301,121303],{"class":78,"line":79},[76,121289,24545],{"class":1927},[76,121291,26284],{"class":192},[76,121293,23802],{"class":192},[76,121295,121296],{"class":192}," kernel-devel-",[76,121298,25068],{"class":86},[76,121300,70173],{"class":1927},[76,121302,119608],{"class":136},[76,121304,93],{"class":86},[21,121306,121307],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[29,121309,121310],{"start":1143},[32,121311,121312],{},"安装内核源代码（如果需要）：",[21,121314,121315],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[66,121317,121319],{"className":117265,"code":121318,"language":117267,"meta":71,"style":71},"sudo dnf install kernel-headers kernel-source\n",[73,121320,121321],{"__ignoreMap":71},[76,121322,121323,121325,121327,121329,121332],{"class":78,"line":79},[76,121324,24545],{"class":1927},[76,121326,26284],{"class":192},[76,121328,23802],{"class":192},[76,121330,121331],{"class":192}," kernel-headers",[76,121333,121334],{"class":192}," kernel-source\n",[29,121336,121337],{"start":1158},[32,121338,121339],{},"检查安装：",[21,121341,121342,121343,121346],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[73,121344,121345],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[66,121348,121350],{"className":117265,"code":121349,"language":117267,"meta":71,"style":71},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[73,121351,121352],{"__ignoreMap":71},[76,121353,121354,121356],{"class":78,"line":79},[76,121355,26730],{"class":1927},[76,121357,121358],{"class":192}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[21,121360,121361,121362,121365],{},"如果仍然遇到问题，可以通过 ",[73,121363,121364],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5092,121367,121368],{},"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":71,"searchDepth":96,"depth":96,"links":121370},[121371,121375,121385,121389,121390],{"id":118468,"depth":96,"text":118469,"children":121372},[121373,121374],{"id":118478,"depth":1143,"text":118479},{"id":118488,"depth":1143,"text":118489},{"id":118688,"depth":96,"text":118689,"children":121376},[121377,121378,121379,121380,121381,121382,121383,121384],{"id":118692,"depth":1143,"text":118693},{"id":118762,"depth":1143,"text":118763},{"id":118851,"depth":1143,"text":118852},{"id":119096,"depth":1143,"text":119097},{"id":119166,"depth":1143,"text":119167},{"id":119233,"depth":1143,"text":119234},{"id":119268,"depth":1143,"text":119269},{"id":119323,"depth":1143,"text":119324},{"id":119374,"depth":96,"text":119375,"children":121386},[121387,121388],{"id":119378,"depth":1143,"text":119379},{"id":119458,"depth":1143,"text":119459},{"id":119644,"depth":96,"text":119645},{"id":119817,"depth":96,"text":119818,"children":121391},[121392,121393,121394,121395,121396],{"id":119821,"depth":1143,"text":119822},{"id":119862,"depth":1143,"text":119863},{"id":120149,"depth":1143,"text":120150},{"id":120523,"depth":1143,"text":120524},{"id":121019,"depth":1143,"text":121020},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118460,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121403,"title":121404,"body":121405,"description":23344,"extension":5123,"meta":121745,"navigation":2364,"path":121746,"seo":121747,"stem":121748,"__hash__":121749},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":9,"value":121406,"toc":121743},[121407,121410,121415,121418,121664,121669,121672,121708,121711,121740],[12,121408,121404],{"id":121409},"_4-命令教程长期积累",[29,121411,121412],{},[32,121413,121414],{},"大多数命令",[21,121416,121417],{},"常用 Linux 命令速查：",[66,121419,121421],{"className":117265,"code":121420,"language":117267,"meta":71,"style":71},"# 文件与目录\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",[73,121422,121423,121428,121435,121442,121450,121457,121464,121472,121480,121487,121494,121502,121506,121511,121518,121526,121533,121537,121542,121549,121557,121565,121573,121581,121585,121590,121598,121605,121612,121620,121628,121632,121637,121646,121655],{"__ignoreMap":71},[76,121424,121425],{"class":78,"line":79},[76,121426,121427],{"class":146},"# 文件与目录\n",[76,121429,121430,121432],{"class":78,"line":96},[76,121431,26730],{"class":1927},[76,121433,121434],{"class":146},"        # 列出目录内容\n",[76,121436,121437,121439],{"class":78,"line":1143},[76,121438,101245],{"class":136},[76,121440,121441],{"class":146},"        # 切换目录\n",[76,121443,121444,121447],{"class":78,"line":1158},[76,121445,121446],{"class":136},"pwd",[76,121448,121449],{"class":146},"       # 显示当前路径\n",[76,121451,121452,121454],{"class":78,"line":1164},[76,121453,101235],{"class":1927},[76,121455,121456],{"class":146},"     # 创建目录\n",[76,121458,121459,121461],{"class":78,"line":1178},[76,121460,25291],{"class":1927},[76,121462,121463],{"class":146},"        # 删除文件或目录\n",[76,121465,121466,121469],{"class":78,"line":1184},[76,121467,121468],{"class":1927},"cp",[76,121470,121471],{"class":146},"        # 复制文件或目录\n",[76,121473,121474,121477],{"class":78,"line":1275},[76,121475,121476],{"class":1927},"mv",[76,121478,121479],{"class":146},"        # 移动\u002F重命名文件或目录\n",[76,121481,121482,121484],{"class":78,"line":1281},[76,121483,101252],{"class":1927},[76,121485,121486],{"class":146},"     # 创建空文件\n",[76,121488,121489,121491],{"class":78,"line":1293},[76,121490,120734],{"class":1927},[76,121492,121493],{"class":146},"       # 查看文件内容\n",[76,121495,121496,121499],{"class":78,"line":1576},[76,121497,121498],{"class":1927},"head\u002Ftail",[76,121500,121501],{"class":146}," # 查看文件头部\u002F尾部\n",[76,121503,121504],{"class":78,"line":1581},[76,121505,2365],{"emptyLinePlaceholder":2364},[76,121507,121508],{"class":78,"line":1587},[76,121509,121510],{"class":146},"# 权限管理\n",[76,121512,121513,121515],{"class":78,"line":1592},[76,121514,24580],{"class":1927},[76,121516,121517],{"class":146},"     # 修改文件权限\n",[76,121519,121520,121523],{"class":78,"line":1606},[76,121521,121522],{"class":1927},"chown",[76,121524,121525],{"class":146},"     # 修改文件所有者\n",[76,121527,121528,121530],{"class":78,"line":1611},[76,121529,24545],{"class":1927},[76,121531,121532],{"class":146},"      # 以管理员身份执行\n",[76,121534,121535],{"class":78,"line":1617},[76,121536,2365],{"emptyLinePlaceholder":2364},[76,121538,121539],{"class":78,"line":1638},[76,121540,121541],{"class":146},"# 系统信息\n",[76,121543,121544,121546],{"class":78,"line":1643},[76,121545,70173],{"class":1927},[76,121547,121548],{"class":146},"     # 系统信息\n",[76,121550,121551,121554],{"class":78,"line":1657},[76,121552,121553],{"class":1927},"df",[76,121555,121556],{"class":146},"        # 磁盘使用情况\n",[76,121558,121559,121562],{"class":78,"line":1662},[76,121560,121561],{"class":1927},"free",[76,121563,121564],{"class":146},"      # 内存使用情况\n",[76,121566,121567,121570],{"class":78,"line":1691},[76,121568,121569],{"class":1927},"top\u002Fhtop",[76,121571,121572],{"class":146},"  # 进程监控\n",[76,121574,121575,121578],{"class":78,"line":1696},[76,121576,121577],{"class":1927},"ps",[76,121579,121580],{"class":146},"        # 查看进程\n",[76,121582,121583],{"class":78,"line":1713},[76,121584,2365],{"emptyLinePlaceholder":2364},[76,121586,121587],{"class":78,"line":1718},[76,121588,121589],{"class":146},"# 网络\n",[76,121591,121592,121595],{"class":78,"line":1723},[76,121593,121594],{"class":1927},"ping",[76,121596,121597],{"class":146},"      # 测试网络连通性\n",[76,121599,121600,121602],{"class":78,"line":1728},[76,121601,26818],{"class":1927},[76,121603,121604],{"class":146},"      # 发送 HTTP 请求\n",[76,121606,121607,121609],{"class":78,"line":1742},[76,121608,120258],{"class":1927},[76,121610,121611],{"class":146},"      # 下载文件\n",[76,121613,121614,121617],{"class":78,"line":1747},[76,121615,121616],{"class":1927},"ssh",[76,121618,121619],{"class":146},"       # 远程登录\n",[76,121621,121622,121625],{"class":78,"line":2542},[76,121623,121624],{"class":1927},"scp",[76,121626,121627],{"class":146},"       # 远程文件传输\n",[76,121629,121630],{"class":78,"line":2556},[76,121631,2365],{"emptyLinePlaceholder":2364},[76,121633,121634],{"class":78,"line":2564},[76,121635,121636],{"class":146},"# 包管理（Debian\u002FUbuntu）\n",[76,121638,121639,121641,121643],{"class":78,"line":2569},[76,121640,117337],{"class":1927},[76,121642,117316],{"class":192},[76,121644,121645],{"class":146},"   # 更新软件源\n",[76,121647,121648,121650,121652],{"class":78,"line":2575},[76,121649,117337],{"class":1927},[76,121651,23802],{"class":192},[76,121653,121654],{"class":146},"  # 安装软件包\n",[76,121656,121657,121659,121661],{"class":78,"line":2581},[76,121658,117337],{"class":1927},[76,121660,26048],{"class":192},[76,121662,121663],{"class":146},"   # 卸载软件包\n",[29,121665,121666],{"start":96},[32,121667,121668],{},"KDE Dolphin 以root打开",[21,121670,121671],{},"kde5",[66,121673,121675],{"className":117265,"code":121674,"language":117267,"meta":71,"style":71},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[73,121676,121677],{"__ignoreMap":71},[76,121678,121679,121682,121685,121688,121690,121692,121695,121698,121700,121703,121705],{"class":78,"line":79},[76,121680,121681],{"class":1927},"pkexec",[76,121683,121684],{"class":192}," env",[76,121686,121687],{"class":192}," DISPLAY=",[76,121689,28112],{"class":86},[76,121691,28170],{"class":192},[76,121693,121694],{"class":86},"$XAUTHORITY ",[76,121696,121697],{"class":192},"KDE_SESSION_VERSION=",[76,121699,407],{"class":136},[76,121701,121702],{"class":192}," KDE_FULL_SESSION=",[76,121704,1326],{"class":136},[76,121706,121707],{"class":192}," dolphin\n",[21,121709,121710],{},"kde6",[66,121712,121714],{"className":117265,"code":121713,"language":117267,"meta":71,"style":71},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[73,121715,121716],{"__ignoreMap":71},[76,121717,121718,121720,121722,121724,121726,121728,121730,121732,121734,121736,121738],{"class":78,"line":79},[76,121719,121681],{"class":1927},[76,121721,121684],{"class":192},[76,121723,121687],{"class":192},[76,121725,28112],{"class":86},[76,121727,28170],{"class":192},[76,121729,121694],{"class":86},[76,121731,121697],{"class":192},[76,121733,432],{"class":136},[76,121735,121702],{"class":192},[76,121737,1326],{"class":136},[76,121739,121707],{"class":192},[5092,121741,121742],{},"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":71,"searchDepth":96,"depth":96,"links":121744},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121404,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121751,"title":121752,"body":121753,"description":23344,"extension":5123,"meta":121767,"navigation":2364,"path":121768,"seo":121769,"stem":121770,"__hash__":121771},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":9,"value":121754,"toc":121765},[121755,121758],[12,121756,121752],{"id":121757},"_5-各种环境配置",[21,121759,121760],{},[326,121761,121764],{"href":121762,"rel":121763},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23833],"电控组环境搭建大全",{"title":71,"searchDepth":96,"depth":96,"links":121766},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121752,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121773,"title":121774,"body":121775,"description":23344,"extension":5123,"meta":122123,"navigation":2364,"path":122124,"seo":122125,"stem":122126,"__hash__":122127},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":9,"value":121776,"toc":122115},[121777,121780,121784,121788,121792,121797,121804,121808,122101,122105,122112],[12,121778,121774],{"id":121779},"_6-拓展功能",[16,121781,121783],{"id":121782},"_61-wine","6.1 Wine",[16,121785,121787],{"id":121786},"_62-android","6.2 Android",[46,121789,121791],{"id":121790},"_621-i卡a卡","6.2.1 I卡、A卡",[29,121793,121794],{},[32,121795,121796],{},"Wayland-Waydroid(体验超级好)",[21,121798,121799,121800],{},"Waydroid 官网与安装指南：",[326,121801,121802],{"href":121802,"rel":121803},"https:\u002F\u002Fwaydro.id\u002F",[23833],[46,121805,121807],{"id":121806},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[29,121809,121810],{},[32,121811,121812,121813,121815,121816,121820,121822,121825,121830,122027],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53685,121814],{},"BlissOS 官网下载：",[326,121817,121818],{"href":121818,"rel":121819},"https:\u002F\u002Fblissos.org\u002F",[23833],[53685,121821],{},[1426,121823],{"alt":71,"src":121824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[29,121826,121827],{"start":1143},[32,121828,121829],{},"比较推荐的配置",[66,121831,121833],{"className":117265,"code":121832,"language":117267,"meta":71,"style":71},"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",[73,121834,121835,121842,121852,121862,121872,121884,121894,121901,121911,121920,121929,121939,121949,121958,121968,121978,121990,122000,122009,122019],{"__ignoreMap":71},[76,121836,121837,121840],{"class":78,"line":79},[76,121838,121839],{"class":1927},"qemu-system-x86_64",[76,121841,24647],{"class":136},[76,121843,121844,121847,121850],{"class":78,"line":96},[76,121845,121846],{"class":136},"        -M",[76,121848,121849],{"class":192}," q35,vmport=off",[76,121851,24647],{"class":136},[76,121853,121854,121857,121860],{"class":78,"line":1143},[76,121855,121856],{"class":136},"        -accel",[76,121858,121859],{"class":192}," kvm",[76,121861,24647],{"class":136},[76,121863,121864,121867,121870],{"class":78,"line":1158},[76,121865,121866],{"class":136},"        -cpu",[76,121868,121869],{"class":192}," qemu64,+sse3,+sse4.2",[76,121871,24647],{"class":136},[76,121873,121874,121877,121880,121882],{"class":78,"line":1164},[76,121875,121876],{"class":136},"        -smp",[76,121878,121879],{"class":192}," 8,cores=",[76,121881,381],{"class":136},[76,121883,24647],{"class":136},[76,121885,121886,121889,121892],{"class":78,"line":1178},[76,121887,121888],{"class":136},"        -m",[76,121890,121891],{"class":192}," 6G",[76,121893,24647],{"class":136},[76,121895,121896,121899],{"class":78,"line":1184},[76,121897,121898],{"class":136},"        -usb",[76,121900,24647],{"class":136},[76,121902,121903,121906,121909],{"class":78,"line":1275},[76,121904,121905],{"class":136},"        -device",[76,121907,121908],{"class":192}," virtio-tablet",[76,121910,24647],{"class":136},[76,121912,121913,121915,121918],{"class":78,"line":1281},[76,121914,121905],{"class":136},[76,121916,121917],{"class":192}," virtio-keyboard",[76,121919,24647],{"class":136},[76,121921,121922,121924,121927],{"class":78,"line":1293},[76,121923,121905],{"class":136},[76,121925,121926],{"class":192}," usb-tablet",[76,121928,24647],{"class":136},[76,121930,121931,121934,121937],{"class":78,"line":1576},[76,121932,121933],{"class":136},"        -bios",[76,121935,121936],{"class":192}," OVMF-pure-efi64.fd",[76,121938,24647],{"class":136},[76,121940,121941,121944,121947],{"class":78,"line":1581},[76,121942,121943],{"class":136},"        -net",[76,121945,121946],{"class":192}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[76,121948,24647],{"class":136},[76,121950,121951,121953,121956],{"class":78,"line":1587},[76,121952,121943],{"class":136},[76,121954,121955],{"class":192}," nic,model=virtio",[76,121957,24647],{"class":136},[76,121959,121960,121963,121966],{"class":78,"line":1592},[76,121961,121962],{"class":136},"        -audio",[76,121964,121965],{"class":192}," sdl,model=hda",[76,121967,24647],{"class":136},[76,121969,121970,121973,121976],{"class":78,"line":1606},[76,121971,121972],{"class":136},"        -display",[76,121974,121975],{"class":192}," sdl,gl=on,show-cursor=on",[76,121977,24647],{"class":136},[76,121979,121980,121982,121985,121988],{"class":78,"line":1611},[76,121981,121905],{"class":136},[76,121983,121984],{"class":192}," virtio-vga-gl,xres=1920,yres=",[76,121986,121987],{"class":136},"1080",[76,121989,24647],{"class":136},[76,121991,121992,121995,121998],{"class":78,"line":1617},[76,121993,121994],{"class":136},"        -drive",[76,121996,121997],{"class":192}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[76,121999,24647],{"class":136},[76,122001,122002,122004,122007],{"class":78,"line":1638},[76,122003,121994],{"class":136},[76,122005,122006],{"class":192}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[76,122008,24647],{"class":136},[76,122010,122011,122014,122017],{"class":78,"line":1643},[76,122012,122013],{"class":136},"        -monitor",[76,122015,122016],{"class":192}," stdio",[76,122018,24647],{"class":136},[76,122020,122021,122024],{"class":78,"line":1657},[76,122022,122023],{"class":136},"        -serial",[76,122025,122026],{"class":192}," none\n",[29,122028,122029],{"start":1164},[32,122030,122031,122032],{},"常用操作：",[29,122033,122034,122037,122093],{},[32,122035,122036],{},"全屏：Ctrl+Alt+F",[32,122038,122039,122040,122045],{},"adb调试",[29,122041,122042],{},[32,122043,122044],{},"使Linux与Android用ADB连接。",[66,122046,122048],{"className":117265,"code":122047,"language":117267,"meta":71,"style":71},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[73,122049,122050,122055,122066,122071,122083,122088],{"__ignoreMap":71},[76,122051,122052],{"class":78,"line":79},[76,122053,122054],{"class":146},"# 连接安卓\n",[76,122056,122057,122060,122063],{"class":78,"line":96},[76,122058,122059],{"class":1927},"adb",[76,122061,122062],{"class":192}," connect",[76,122064,122065],{"class":136}," 127.0.0.1\n",[76,122067,122068],{"class":78,"line":1143},[76,122069,122070],{"class":146},"# 打开shell\n",[76,122072,122073,122075,122077,122080],{"class":78,"line":1158},[76,122074,122059],{"class":1927},[76,122076,26852],{"class":136},[76,122078,122079],{"class":192}," 127.0.0.1:5555",[76,122081,122082],{"class":192}," shell\n",[76,122084,122085],{"class":78,"line":1164},[76,122086,122087],{"class":146},"# 使用root权限\n",[76,122089,122090],{"class":78,"line":1178},[76,122091,122092],{"class":1927},"su\n",[32,122094,122095,122096],{},"中文输入法",[29,122097,122098],{},[32,122099,122100],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[16,122102,122104],{"id":122103},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[21,122106,122107,122108],{},"rEFInd 官网与文档：",[326,122109,122110],{"href":122110,"rel":122111},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23833],[5092,122113,122114],{},"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":71,"searchDepth":96,"depth":96,"links":122116},[122117,122118,122122],{"id":121782,"depth":96,"text":121783},{"id":121786,"depth":96,"text":121787,"children":122119},[122120,122121],{"id":121790,"depth":1143,"text":121791},{"id":121806,"depth":1143,"text":121807},{"id":122103,"depth":96,"text":122104},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121774,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122129,"title":122130,"body":122131,"description":23344,"extension":5123,"meta":125430,"navigation":2364,"path":125431,"seo":125432,"stem":125433,"__hash__":125434},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":9,"value":122132,"toc":125404},[122133,122136,122140,122143,122150,122400,122403,122475,122478,122482,122486,122491,122494,122497,122500,122505,122508,122511,122514,122519,122522,122527,122530,122533,122538,122541,122546,122549,122553,122557,122560,122565,122568,122582,122585,122588,122597,122600,122609,122612,122615,122624,122627,122636,122639,122642,122651,122654,122657,122672,122675,122678,122687,122692,122695,122698,122707,122710,122719,122722,122731,122734,122743,122748,122751,122759,122764,122767,122776,122779,122787,122792,122795,122804,122807,122810,122814,122817,122822,122825,122830,122844,122849,122854,122865,122870,122876,122881,122896,122901,122904,122909,122914,122919,122927,122932,122939,122944,122955,122960,122963,122967,122970,122973,122978,122981,123000,123005,123008,123017,123022,123025,123047,123050,123080,123083,123088,123091,123105,123110,123129,123132,123135,123140,123152,123157,123162,123165,123170,123173,123188,123191,123196,123201,123205,123210,123250,123253,123257,123263,123269,123274,123277,123284,123289,123296,123299,123302,123309,123323,123326,123386,123389,123403,123415,123418,123421,123424,123488,123491,123494,123497,123517,123520,123525,123532,123536,123539,123543,123548,123553,123557,123560,123563,123605,123610,123613,123635,123650,123652,123657,123669,123729,123731,123733,123787,123789,123791,123797,123802,123805,123810,123814,123817,123879,123884,123887,123889,123893,123905,123987,123989,123991,124045,124051,124053,124057,124062,124064,124069,124073,124093,124128,124132,124135,124138,124141,124148,124151,124163,124166,124181,124184,124203,124251,124254,124271,124274,124288,124293,124296,124305,124320,124332,124370,124375,124384,124389,124394,124420,124429,124433,124437,124442,124445,124449,124453,124458,124461,124466,124469,124474,124477,124482,124485,124489,124494,124497,124502,124505,124509,124514,124517,124522,124525,124530,124533,124537,124542,124545,124550,124553,124558,124561,124565,124570,124573,124578,124581,124586,124589,124594,124597,124602,124605,124610,124613,124617,124622,124625,124630,124637,124641,124646,124649,124654,124657,124661,124666,124669,124672,124675,124678,124681,124685,124688,124698,124703,124708,124730,124735,124740,124747,124751,124756,124759,124762,124767,124770,124773,124776,124779,124782,124785,124788,124791,124794,124797,124800,124803,124808,124813,124818,124823,124828,124833,124838,124841,124845,124848,124852,124857,124862,124867,124872,124876,124882,124890,124895,124898,124903,124918,124921,124926,124960,124975,124978,125033,125059,125071,125074,125083,125086,125101,125106,125109,125115,125120,125123,125128,125131,125136,125141,125148,125151,125166,125169,125204,125209,125217,125255,125258,125261,125266,125269,125274,125285,125319,125324,125327,125336,125341,125347,125350,125355,125364,125369,125372,125375,125380,125388,125391,125396,125401],[12,122134,122130],{"id":122135},"_7-其他操作",[16,122137,122139],{"id":122138},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[21,122141,122142],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[21,122144,122145,122146,122149],{},"进入工控机的硬盘目录，进入",[73,122147,122148],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[66,122151,122155],{"className":122152,"code":122153,"language":122154,"meta":71,"style":71},"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",[73,122156,122157,122165,122176,122183,122190,122202,122209,122221,122232,122243,122250,122257,122264,122276,122288,122295,122307,122319,122326,122338,122350,122362,122373,122380,122391],{"__ignoreMap":71},[76,122158,122159,122162],{"class":78,"line":79},[76,122160,122161],{"class":51269},"network",[76,122163,122164],{"class":86},": \n",[76,122166,122167,122170,122172,122174],{"class":78,"line":96},[76,122168,122169],{"class":51269},"  version",[76,122171,51406],{"class":86},[76,122173,165],{"class":136},[76,122175,2639],{"class":86},[76,122177,122178,122181],{"class":78,"line":1143},[76,122179,122180],{"class":51269},"  wifis",[76,122182,122164],{"class":86},[76,122184,122185,122188],{"class":78,"line":1158},[76,122186,122187],{"class":51269},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[76,122189,122164],{"class":86},[76,122191,122192,122195,122197,122200],{"class":78,"line":1164},[76,122193,122194],{"class":51269},"      renderer",[76,122196,51406],{"class":86},[76,122198,122199],{"class":192},"NetworkManager",[76,122201,2639],{"class":86},[76,122203,122204,122207],{"class":78,"line":1178},[76,122205,122206],{"class":51269},"      match",[76,122208,122164],{"class":86},[76,122210,122211,122214,122216,122219],{"class":78,"line":1184},[76,122212,122213],{"class":51269},"        name",[76,122215,51406],{"class":86},[76,122217,122218],{"class":192},"\"wlan0\"",[76,122220,2639],{"class":86},[76,122222,122223,122226,122228,122230],{"class":78,"line":1275},[76,122224,122225],{"class":51269},"      dhcp4",[76,122227,51406],{"class":86},[76,122229,1326],{"class":136},[76,122231,2639],{"class":86},[76,122233,122234,122237,122239,122241],{"class":78,"line":1281},[76,122235,122236],{"class":51269},"      dhcp6",[76,122238,51406],{"class":86},[76,122240,1326],{"class":136},[76,122242,2639],{"class":86},[76,122244,122245,122248],{"class":78,"line":1293},[76,122246,122247],{"class":51269},"      access-points",[76,122249,122164],{"class":86},[76,122251,122252,122255],{"class":78,"line":1576},[76,122253,122254],{"class":192},"        \"EMIS_Vinci_Robocon_5G\"",[76,122256,122164],{"class":86},[76,122258,122259,122262],{"class":78,"line":1581},[76,122260,122261],{"class":51269},"          auth",[76,122263,122164],{"class":86},[76,122265,122266,122269,122271,122274],{"class":78,"line":1587},[76,122267,122268],{"class":51269},"            key-management",[76,122270,51406],{"class":86},[76,122272,122273],{"class":192},"\"psk\"",[76,122275,2639],{"class":86},[76,122277,122278,122281,122283,122286],{"class":78,"line":1592},[76,122279,122280],{"class":51269},"            password",[76,122282,51406],{"class":86},[76,122284,122285],{"class":192},"\"vinci666\"",[76,122287,2639],{"class":86},[76,122289,122290,122293],{"class":78,"line":1606},[76,122291,122292],{"class":51269},"          networkmanager",[76,122294,122164],{"class":86},[76,122296,122297,122300,122302,122305],{"class":78,"line":1611},[76,122298,122299],{"class":51269},"            uuid",[76,122301,51406],{"class":86},[76,122303,122304],{"class":192},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[76,122306,2639],{"class":86},[76,122308,122309,122312,122314,122317],{"class":78,"line":1617},[76,122310,122311],{"class":51269},"            name",[76,122313,51406],{"class":86},[76,122315,122316],{"class":192},"\"EMIS_Vinci_Robocon_5G\"",[76,122318,2639],{"class":86},[76,122320,122321,122324],{"class":78,"line":1638},[76,122322,122323],{"class":51269},"            passthrough",[76,122325,122164],{"class":86},[76,122327,122328,122331,122333,122336],{"class":78,"line":1643},[76,122329,122330],{"class":51269},"              wifi-security.auth-alg",[76,122332,51406],{"class":86},[76,122334,122335],{"class":192},"\"open\"",[76,122337,2639],{"class":86},[76,122339,122340,122343,122345,122348],{"class":78,"line":1657},[76,122341,122342],{"class":51269},"              ipv6.addr-gen-mode",[76,122344,51406],{"class":86},[76,122346,122347],{"class":192},"\"default\"",[76,122349,2639],{"class":86},[76,122351,122352,122355,122357,122360],{"class":78,"line":1662},[76,122353,122354],{"class":51269},"              ipv6.ip6-privacy",[76,122356,51406],{"class":86},[76,122358,122359],{"class":192},"\"-1\"",[76,122361,2639],{"class":86},[76,122363,122364,122367,122369,122371],{"class":78,"line":1691},[76,122365,122366],{"class":51269},"              proxy._",[76,122368,51406],{"class":86},[76,122370,7619],{"class":192},[76,122372,2639],{"class":86},[76,122374,122375,122378],{"class":78,"line":1696},[76,122376,122377],{"class":51269},"      networkmanager",[76,122379,122164],{"class":86},[76,122381,122382,122385,122387,122389],{"class":78,"line":1713},[76,122383,122384],{"class":51269},"        uuid",[76,122386,51406],{"class":86},[76,122388,122304],{"class":192},[76,122390,2639],{"class":86},[76,122392,122393,122395,122397],{"class":78,"line":1718},[76,122394,122213],{"class":51269},[76,122396,51406],{"class":86},[76,122398,122399],{"class":192},"\"EMIS_Vinci_Robocon_5G\"\n",[21,122401,122402],{},"将其改为新wifi的名和密码：",[66,122404,122406],{"className":122152,"code":122405,"language":122154,"meta":71,"style":71},"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",[73,122407,122408,122414,122423,122429,122436,122445,122453,122459,122465],{"__ignoreMap":71},[76,122409,122410,122412],{"class":78,"line":79},[76,122411,122161],{"class":51269},[76,122413,3704],{"class":86},[76,122415,122416,122418,122420],{"class":78,"line":96},[76,122417,122169],{"class":51269},[76,122419,51406],{"class":86},[76,122421,122422],{"class":136},"2\n",[76,122424,122425,122427],{"class":78,"line":1143},[76,122426,122180],{"class":51269},[76,122428,3704],{"class":86},[76,122430,122431,122434],{"class":78,"line":1158},[76,122432,122433],{"class":51269},"    wlan0",[76,122435,3704],{"class":86},[76,122437,122438,122440,122442],{"class":78,"line":1164},[76,122439,122225],{"class":51269},[76,122441,51406],{"class":86},[76,122443,122444],{"class":136},"true\n",[76,122446,122447,122449,122451],{"class":78,"line":1178},[76,122448,122236],{"class":51269},[76,122450,51406],{"class":86},[76,122452,122444],{"class":136},[76,122454,122455,122457],{"class":78,"line":1184},[76,122456,122247],{"class":51269},[76,122458,3704],{"class":86},[76,122460,122461,122463],{"class":78,"line":1275},[76,122462,122254],{"class":192},[76,122464,3704],{"class":86},[76,122466,122467,122470,122472],{"class":78,"line":1281},[76,122468,122469],{"class":51269},"          password",[76,122471,51406],{"class":86},[76,122473,122474],{"class":192},"\"vinci666\"\n",[21,122476,122477],{},"工控机开机即可连上网。",[16,122479,122481],{"id":122480},"_72-ssh远程开发","7.2 SSH远程开发",[46,122483,122485],{"id":122484},"_721-环境准备","7.2.1 环境准备",[21,122487,122488],{},[237,122489,122490],{},"1.硬件准备",[21,122492,122493],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[21,122495,122496],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[21,122498,122499],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[21,122501,122502],{},[237,122503,122504],{},"2.设置固定IP",[21,122506,122507],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[21,122509,122510],{},"1.进入设置界面",[21,122512,122513],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[21,122515,122516],{},[1426,122517],{"alt":71,"src":122518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[21,122520,122521],{},"2.配置所连接的网络",[21,122523,122524],{},[1426,122525],{"alt":71,"src":122526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[21,122528,122529],{},"3.设置固定IP",[21,122531,122532],{},"查看当前IP地址。",[21,122534,122535],{},[1426,122536],{"alt":71,"src":122537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[21,122539,122540],{},"设置固定IP。",[21,122542,122543],{},[1426,122544],{"alt":71,"src":122545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[21,122547,122548],{},"至此，IP配置完毕。",[46,122550,122552],{"id":122551},"_722-环境搭建","7.2.2 环境搭建",[21,122554,122555],{},[237,122556,25722],{},[21,122558,122559],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[21,122561,122562],{},[237,122563,122564],{},"实现",[21,122566,122567],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[29,122569,122570,122573,122576,122579],{},[32,122571,122572],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[32,122574,122575],{},"远程主机启动SSH服务；",[32,122577,122578],{},"本地主机登陆远程主机；",[32,122580,122581],{},"实现数据传输。",[21,122583,122584],{},"1.安装SSH客户端与服务端",[21,122586,122587],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[66,122589,122591],{"className":120785,"code":122590,"language":120787,"meta":120788,"style":71}," sudo apt install openssh-server\n",[73,122592,122593],{"__ignoreMap":71},[76,122594,122595],{"class":78,"line":79},[76,122596,122590],{},[21,122598,122599],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[66,122601,122603],{"className":120785,"code":122602,"language":120787,"meta":120788,"style":71},"sudo apt install openssh-client\n",[73,122604,122605],{"__ignoreMap":71},[76,122606,122607],{"class":78,"line":79},[76,122608,122602],{},[21,122610,122611],{},"2.远程主机启动SSH服务",[21,122613,122614],{},"远程主机启动 ssh 服务命令如下：",[66,122616,122618],{"className":120785,"code":122617,"language":120787,"meta":120788,"style":71},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[73,122619,122620],{"__ignoreMap":71},[76,122621,122622],{"class":78,"line":79},[76,122623,122617],{},[21,122625,122626],{},"启动后可使用如下命令查看服务是否正常运行：",[66,122628,122630],{"className":120785,"code":122629,"language":120787,"meta":120788,"style":71},"ps -e | grep ssh\n",[73,122631,122632],{"__ignoreMap":71},[76,122633,122634],{"class":78,"line":79},[76,122635,122629],{},[21,122637,122638],{},"如果启动成功，会包含 sshd 程序。",[21,122640,122641],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[66,122643,122645],{"className":120785,"code":122644,"language":120787,"meta":120788,"style":71},"sudo systemctl enable ssh\n",[73,122646,122647],{"__ignoreMap":71},[76,122648,122649],{"class":78,"line":79},[76,122650,122644],{},[21,122652,122653],{},"3.本地远程登录",[21,122655,122656],{},"登录远程主机可以调用如下命令:",[66,122658,122660],{"className":117265,"code":122659,"language":117267,"meta":71,"style":71},"ssh -X 用户名@ip地址\n",[73,122661,122662],{"__ignoreMap":71},[76,122663,122664,122666,122669],{"class":78,"line":79},[76,122665,121616],{"class":1927},[76,122667,122668],{"class":136}," -X",[76,122670,122671],{"class":192}," 用户名@ip地址\n",[21,122673,122674],{},"然后根据提示，录入登陆密码，即可成功登录。",[21,122676,122677],{},"如果退出，可以调用exit命令：",[66,122679,122681],{"className":120785,"code":122680,"language":120787,"meta":120788,"style":71},"exit\n",[73,122682,122683],{"__ignoreMap":71},[76,122684,122685],{"class":78,"line":79},[76,122686,122680],{},[21,122688,122689],{},[237,122690,122691],{},"4.实现数据传输",[21,122693,122694],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[21,122696,122697],{},"上传文件指令格式如下：",[66,122699,122701],{"className":120785,"code":122700,"language":120787,"meta":120788,"style":71},"scp 本地文件路径 账号@ip:路径\n",[73,122702,122703],{"__ignoreMap":71},[76,122704,122705],{"class":78,"line":79},[76,122706,122700],{},[21,122708,122709],{},"上传文件夹指令格式如下：",[66,122711,122713],{"className":120785,"code":122712,"language":120787,"meta":120788,"style":71},"scp -r 本地文件夹路径 账号@ip:路径\n",[73,122714,122715],{"__ignoreMap":71},[76,122716,122717],{"class":78,"line":79},[76,122718,122712],{},[21,122720,122721],{},"下载文件指令格式如下：",[66,122723,122725],{"className":120785,"code":122724,"language":120787,"meta":120788,"style":71},"scp 账号@ip:路径 本地文件夹路径\n",[73,122726,122727],{"__ignoreMap":71},[76,122728,122729],{"class":78,"line":79},[76,122730,122724],{},[21,122732,122733],{},"下载文件夹指令格式如下：",[66,122735,122737],{"className":120785,"code":122736,"language":120787,"meta":120788,"style":71},"scp -r 账号@ip:路径 本地文件夹路径\n",[73,122738,122739],{"__ignoreMap":71},[76,122740,122741],{"class":78,"line":79},[76,122742,122736],{},[21,122744,122745],{},[237,122746,122747],{},"优化",[21,122749,122750],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[29,122752,122753,122756],{},[32,122754,122755],{},"本地生成密钥对；",[32,122757,122758],{},"将公钥上传至远程主机。",[21,122760,122761],{},[237,122762,122763],{},"1.生成密钥对",[21,122765,122766],{},"本地客户端生成公私钥：（一路回车默认即可）",[66,122768,122770],{"className":120785,"code":122769,"language":120787,"meta":120788,"style":71},"ssh-keygen\n",[73,122771,122772],{"__ignoreMap":71},[76,122773,122774],{"class":78,"line":79},[76,122775,122769],{},[21,122777,122778],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[29,122780,122781,122784],{},[32,122782,122783],{},"id_rsa （私钥）；",[32,122785,122786],{},"id_rsa.pub (公钥)。",[21,122788,122789],{},[237,122790,122791],{},"2.公钥上传",[21,122793,122794],{},"上传指令如下：",[66,122796,122798],{"className":120785,"code":122797,"language":120787,"meta":120788,"style":71},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[73,122799,122800],{"__ignoreMap":71},[76,122801,122802],{"class":78,"line":79},[76,122803,122797],{},[21,122805,122806],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[21,122808,122809],{},"以后再远程登录就无需录入密码了。",[46,122811,122813],{"id":122812},"_723-使用vscode优化","7.2.3 使用VScode优化",[21,122815,122816],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[21,122818,122819],{},[237,122820,122821],{},"1.准备工作",[21,122823,122824],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[21,122826,122827],{},[237,122828,122829],{},"2.为VScode安装远程开发插件",[21,122831,122832,122833,122836,122837,122840,122841,28354],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[73,122834,122835],{},"扩展：商店","的搜索栏输入",[73,122838,122839],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[73,122842,122843],{},"安装",[21,122845,122846],{},[1426,122847],{"alt":71,"src":122848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[21,122850,122851],{},[237,122852,122853],{},"3.配置远程连接",[21,122855,122856,122857,122860,122861,122864],{},"步骤1：使用快捷键",[73,122858,122859],{},"ctrl + shift + p","打开命令输入窗口，并输入",[73,122862,122863],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[21,122866,122867],{},[1426,122868],{"alt":71,"src":122869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[21,122871,122872,122873,28354],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[73,122874,122875],{},"Add New SSH Host",[21,122877,122878],{},[1426,122879],{"alt":71,"src":122880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[21,122882,122883,122884,122887,122888,122891,122892,122895],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[73,122885,122886],{},"ssh +X ubuntu@192.168.43.164","，其中，",[73,122889,122890],{},"ubuntu","需要替换为你的登录用户名，",[73,122893,122894],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[21,122897,122898],{},[1426,122899],{"alt":71,"src":122900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[21,122902,122903],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[21,122905,122906],{},[1426,122907],{"alt":71,"src":122908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[21,122910,122911],{},[1426,122912],{"alt":71,"src":122913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[21,122915,122916],{},[237,122917,122918],{},"4.使用",[21,122920,122921,122922,122860,122924,122926],{},"步骤1：继续使用快捷键",[73,122923,122859],{},[73,122925,122863],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[21,122928,122929],{},[1426,122930],{"alt":71,"src":122931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[21,122933,122934,122935,122938],{},"或者，也可以点击侧边栏的",[73,122936,122937],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[21,122940,122941],{},[1426,122942],{"alt":71,"src":122943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[21,122945,122946,122947,122950,122951,122954],{},"步骤2：选择菜单栏的",[73,122948,122949],{},"文件","下的",[73,122952,122953],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[21,122956,122957],{},[1426,122958],{"alt":71,"src":122959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[21,122961,122962],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[16,122964,122966],{"id":122965},"_73-远程桌面","7.3 远程桌面",[21,122968,122969],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[21,122971,122972],{},"我们选择使用VNC来看。",[29,122974,122975],{},[32,122976,122977],{},"安装VNC服务器：",[21,122979,122980],{},"这里以TigerVNC为例进行安装：",[66,122982,122984],{"className":117265,"code":122983,"language":117267,"meta":71,"style":71},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[73,122985,122986],{"__ignoreMap":71},[76,122987,122988,122990,122992,122994,122997],{"class":78,"line":79},[76,122989,24545],{"class":1927},[76,122991,117286],{"class":192},[76,122993,23802],{"class":192},[76,122995,122996],{"class":192}," tigervnc-standalone-server",[76,122998,122999],{"class":192}," tigervnc-common\n",[29,123001,123002],{"start":96},[32,123003,123004],{},"设置VNC密码：",[21,123006,123007],{},"为VNC用户设置密码，运行以下命令：",[66,123009,123011],{"className":117265,"code":123010,"language":117267,"meta":71,"style":71},"vncpasswd\n",[73,123012,123013],{"__ignoreMap":71},[76,123014,123015],{"class":78,"line":79},[76,123016,123010],{"class":1927},[29,123018,123019],{"start":1143},[32,123020,123021],{},"配置VNC启动脚本:",[21,123023,123024],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[66,123026,123028],{"className":117265,"code":123027,"language":117267,"meta":71,"style":71},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[73,123029,123030,123039],{"__ignoreMap":71},[76,123031,123032,123034,123036],{"class":78,"line":79},[76,123033,101235],{"class":1927},[76,123035,29185],{"class":136},[76,123037,123038],{"class":192}," ~\u002F.vnc\n",[76,123040,123041,123044],{"class":78,"line":96},[76,123042,123043],{"class":1927},"nano",[76,123045,123046],{"class":192}," ~\u002F.vnc\u002Fxstartup\n",[21,123048,123049],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[66,123051,123053],{"className":117265,"code":123052,"language":117267,"meta":71,"style":71},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[73,123054,123055,123060,123068,123075],{"__ignoreMap":71},[76,123056,123057],{"class":78,"line":79},[76,123058,123059],{"class":146},"#!\u002Fbin\u002Fsh\n",[76,123061,123062,123065],{"class":78,"line":96},[76,123063,123064],{"class":136},"unset",[76,123066,123067],{"class":192}," SESSION_MANAGER\n",[76,123069,123070,123072],{"class":78,"line":1143},[76,123071,123064],{"class":136},[76,123073,123074],{"class":192}," DBUS_SESSION_BUS_ADDRESS\n",[76,123076,123077],{"class":78,"line":1158},[76,123078,123079],{"class":1927},"gnome-session\n",[21,123081,123082],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[29,123084,123085],{"start":1158},[32,123086,123087],{},"给予执行权限：",[21,123089,123090],{},"为xstartup文件设置执行权限：",[66,123092,123094],{"className":117265,"code":123093,"language":117267,"meta":71,"style":71},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[73,123095,123096],{"__ignoreMap":71},[76,123097,123098,123100,123103],{"class":78,"line":79},[76,123099,24580],{"class":1927},[76,123101,123102],{"class":192}," +x",[76,123104,123046],{"class":192},[29,123106,123107],{"start":1164},[32,123108,123109],{},"启动VNC服务器：",[66,123111,123113],{"className":117265,"code":123112,"language":117267,"meta":71,"style":71},"vncserver -geometry 1920x1080 -localhost=0\n",[73,123114,123115],{"__ignoreMap":71},[76,123116,123117,123120,123123,123126],{"class":78,"line":79},[76,123118,123119],{"class":1927},"vncserver",[76,123121,123122],{"class":136}," -geometry",[76,123124,123125],{"class":192}," 1920x1080",[76,123127,123128],{"class":136}," -localhost=0\n",[21,123130,123131],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[21,123133,123134],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[29,123136,123137],{"start":1178},[32,123138,123139],{},"查看已开启的VNC服务器：",[66,123141,123143],{"className":117265,"code":123142,"language":117267,"meta":71,"style":71},"vncserver -list\n",[73,123144,123145],{"__ignoreMap":71},[76,123146,123147,123149],{"class":78,"line":79},[76,123148,123119],{"class":1927},[76,123150,123151],{"class":136}," -list\n",[21,123153,123154],{},[1426,123155],{"alt":71,"src":123156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[29,123158,123159],{"start":1184},[32,123160,123161],{},"连接到VNC服务器：",[21,123163,123164],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[29,123166,123167],{"start":1275},[32,123168,123169],{},"停止VNC服务器：",[21,123171,123172],{},"如果需要停止VNC服务器，可以使用以下命令：",[66,123174,123176],{"className":117265,"code":123175,"language":117267,"meta":71,"style":71},"vncserver -kill :1\n",[73,123177,123178],{"__ignoreMap":71},[76,123179,123180,123182,123185],{"class":78,"line":79},[76,123181,123119],{"class":1927},[76,123183,123184],{"class":136}," -kill",[76,123186,123187],{"class":192}," :1\n",[21,123189,123190],{},"将:1替换为你实际使用的显示编号。",[21,123192,123193],{},[1426,123194],{"alt":71,"src":123195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[21,123197,123198],{},[1426,123199],{"alt":71,"src":123200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[16,123202,123204],{"id":123203},"_74-usb端口设置","7.4 USB端口设置",[21,123206,123207],{},[237,123208,123209],{},"首先先配置好权限",[66,123211,123213],{"className":117265,"code":123212,"language":117267,"meta":71,"style":71},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[73,123214,123215,123220,123233,123240,123245],{"__ignoreMap":71},[76,123216,123217],{"class":78,"line":79},[76,123218,123219],{"class":146},"# 将用户权限提高\n",[76,123221,123222,123224,123226,123228,123231],{"class":78,"line":96},[76,123223,24545],{"class":1927},[76,123225,26543],{"class":192},[76,123227,26546],{"class":136},[76,123229,123230],{"class":192}," dialout",[76,123232,26551],{"class":86},[76,123234,123235,123237],{"class":78,"line":1143},[76,123236,26570],{"class":1927},[76,123238,123239],{"class":192}," dialout\n",[76,123241,123242],{"class":78,"line":1158},[76,123243,123244],{"class":146},"# 查看下面命令是否输出dialout（若输出才正常）\n",[76,123246,123247],{"class":78,"line":1164},[76,123248,123249],{"class":1927},"groups\n",[21,123251,123252],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[46,123254,123256],{"id":123255},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[21,123258,123259,123262],{},[237,123260,123261],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[21,123264,123265,123268],{},[237,123266,123267],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[21,123270,123271],{},[237,123272,123273],{},"流程如下：",[21,123275,123276],{},"（1）.查找设备idVendor和idProduct",[21,123278,123279,123280,123283],{},"接入两个USB设备，在终端调用指令",[73,123281,123282],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[21,123285,123286],{},[1426,123287],{"alt":71,"src":123288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[21,123290,123291,123292,123295],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[73,123293,123294],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[21,123297,123298],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[21,123300,123301],{},"（2）.编写映射规则",[21,123303,123304,123305,123308],{},"在",[73,123306,123307],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[66,123310,123312],{"className":117265,"code":123311,"language":117267,"meta":71,"style":71},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[73,123313,123314],{"__ignoreMap":71},[76,123315,123316,123318,123320],{"class":78,"line":79},[76,123317,24545],{"class":1927},[76,123319,118552],{"class":192},[76,123321,123322],{"class":192}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[21,123324,123325],{},"输入如下内容：",[66,123327,123329],{"className":117265,"code":123328,"language":117267,"meta":71,"style":71},"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",[73,123330,123331,123361],{"__ignoreMap":71},[76,123332,123333,123336,123338,123341,123344,123347,123350,123352,123355,123358],{"class":78,"line":79},[76,123334,123335],{"class":86},"KERNEL",[76,123337,133],{"class":82},[76,123339,123340],{"class":192},"=\"ttyUSB*\",",[76,123342,123343],{"class":1927}," ATTRS",[76,123345,123346],{"class":192},"{idVendor}==",[76,123348,123349],{"class":1927},"\"10c4\"",[76,123351,466],{"class":1927},[76,123353,123354],{"class":192}," ATTRS{idProduct}==\"ea60\",",[76,123356,123357],{"class":192}," MODE:=\"0777\",",[76,123359,123360],{"class":192}," SYMLINK+=\"mylidar\"\n",[76,123362,123363,123365,123367,123369,123371,123373,123376,123378,123381,123383],{"class":78,"line":96},[76,123364,123335],{"class":86},[76,123366,133],{"class":82},[76,123368,123340],{"class":192},[76,123370,123343],{"class":1927},[76,123372,123346],{"class":192},[76,123374,123375],{"class":1927},"\"1a86\"",[76,123377,466],{"class":1927},[76,123379,123380],{"class":192}," ATTRS{idProduct}==\"7523\",",[76,123382,123357],{"class":192},[76,123384,123385],{"class":192}," SYMLINK+=\"mycar\"\n",[21,123387,123388],{},"代码解释：",[1095,123390,123391,123394,123397,123400],{},[32,123392,123393],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[32,123395,123396],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[32,123398,123399],{},"SYMLINK是符号连接，即绑定的别名；",[32,123401,123402],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[21,123404,123405,123406,123409,123412],{},"***小提示：***",[23521,123407,123408],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[73,123410,123411],{},"\u002Fetc\u002Fudev\u002Frule.d",[23521,123413,123414],{},"目录即可。",[21,123416,123417],{},"表格 还在加载中，请等待加载完成后再尝试复制",[21,123419,123420],{},"（3）.使规则生效",[21,123422,123423],{},"在终端下输入如下指令：",[66,123425,123427],{"className":117265,"code":123426,"language":117267,"meta":71,"style":71},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[73,123428,123429,123434,123446,123457,123461,123466,123479],{"__ignoreMap":71},[76,123430,123431],{"class":78,"line":79},[76,123432,123433],{"class":146},"# Ubuntu用下方命令\n",[76,123435,123436,123438,123440,123443],{"class":78,"line":96},[76,123437,24545],{"class":1927},[76,123439,120017],{"class":192},[76,123441,123442],{"class":192}," udev",[76,123444,123445],{"class":192}," reload\n",[76,123447,123448,123450,123452,123454],{"class":78,"line":1143},[76,123449,24545],{"class":1927},[76,123451,120017],{"class":192},[76,123453,123442],{"class":192},[76,123455,123456],{"class":192}," restart\n",[76,123458,123459],{"class":78,"line":1158},[76,123460,2365],{"emptyLinePlaceholder":2364},[76,123462,123463],{"class":78,"line":1164},[76,123464,123465],{"class":146},"#Fedora用下方命令\n",[76,123467,123468,123470,123473,123476],{"class":78,"line":1178},[76,123469,24545],{"class":1927},[76,123471,123472],{"class":192}," udevadm",[76,123474,123475],{"class":192}," control",[76,123477,123478],{"class":136}," --reload\n",[76,123480,123481,123483,123485],{"class":78,"line":1184},[76,123482,24545],{"class":1927},[76,123484,123472],{"class":192},[76,123486,123487],{"class":192}," trigger\n",[21,123489,123490],{},"再重新插拔设备即可。",[21,123492,123493],{},"（4）.测试",[21,123495,123496],{},"终端下输入如下指令",[66,123498,123500],{"className":117265,"code":123499,"language":117267,"meta":71,"style":71},"ll \u002Fdev | grep ttyUSB\n",[73,123501,123502],{"__ignoreMap":71},[76,123503,123504,123507,123510,123512,123514],{"class":78,"line":79},[76,123505,123506],{"class":1927},"ll",[76,123508,123509],{"class":192}," \u002Fdev",[76,123511,25078],{"class":82},[76,123513,30205],{"class":1927},[76,123515,123516],{"class":192}," ttyUSB\n",[21,123518,123519],{},"运行结果如下：",[21,123521,123522],{},[1426,123523],{"alt":71,"src":123524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[21,123526,123527,123528,123531],{},"也可以多次插拔USB设备，会发现设备端口",[73,123529,123530],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[21,123533,123534],{},[237,123535,117933],{},[21,123537,123538],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[46,123540,123542],{"id":123541},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[21,123544,123545,123547],{},[237,123546,123261],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[21,123549,123550,123552],{},[237,123551,123267],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[21,123554,123555],{},[237,123556,123273],{},[21,123558,123559],{},"（1）.查看所连接的主机USB接口的KERNELS",[21,123561,123562],{},"调用如下指令查看第一台雷达的USB信息：",[66,123564,123566],{"className":117265,"code":123565,"language":117267,"meta":71,"style":71},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[73,123567,123568,123588],{"__ignoreMap":71},[76,123569,123570,123573,123575,123578,123581,123583,123585],{"class":78,"line":79},[76,123571,123572],{"class":1927},"udevadm",[76,123574,69790],{"class":192},[76,123576,123577],{"class":136}," --attribute-walk",[76,123579,123580],{"class":136}," --name=\u002Fdev\u002FttyUSB0",[76,123582,25078],{"class":82},[76,123584,30205],{"class":1927},[76,123586,123587],{"class":192}," KERNELS\n",[76,123589,123590,123592,123594,123596,123599,123601,123603],{"class":78,"line":96},[76,123591,123572],{"class":1927},[76,123593,69790],{"class":192},[76,123595,123577],{"class":136},[76,123597,123598],{"class":136}," --name=\u002Fdev\u002FttyACM0",[76,123600,25078],{"class":82},[76,123602,30205],{"class":1927},[76,123604,123587],{"class":192},[21,123606,123607],{},[1426,123608],{"alt":71,"src":123609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[21,123611,123612],{},"调用如下指令查看第二台雷达的USB信息：",[66,123614,123616],{"className":117265,"code":123615,"language":117267,"meta":71,"style":71},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[73,123617,123618],{"__ignoreMap":71},[76,123619,123620,123622,123624,123626,123629,123631,123633],{"class":78,"line":79},[76,123621,123572],{"class":1927},[76,123623,69790],{"class":192},[76,123625,123577],{"class":136},[76,123627,123628],{"class":136}," --name=\u002Fdev\u002FttyUSB1",[76,123630,25078],{"class":82},[76,123632,30205],{"class":1927},[76,123634,123587],{"class":192},[21,123636,123637,123638,123641,123642,123645,123646,123649],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[73,123639,123640],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[73,123643,123644],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[237,123647,123648],{},"唯一性标识","”。",[21,123651,123301],{},[21,123653,123304,123654,123656],{},[73,123655,123307],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[66,123658,123659],{"className":117265,"code":123311,"language":117267,"meta":71,"style":71},[73,123660,123661],{"__ignoreMap":71},[76,123662,123663,123665,123667],{"class":78,"line":79},[76,123664,24545],{"class":1927},[76,123666,118552],{"class":192},[76,123668,123322],{"class":192},[66,123670,123672],{"className":117265,"code":123671,"language":117267,"meta":71,"style":71},"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",[73,123673,123674,123703],{"__ignoreMap":71},[76,123675,123676,123678,123680,123682,123685,123687,123690,123693,123695,123698,123700],{"class":78,"line":79},[76,123677,123335],{"class":86},[76,123679,133],{"class":82},[76,123681,123340],{"class":192},[76,123683,123684],{"class":86}," KERNELS",[76,123686,133],{"class":82},[76,123688,123689],{"class":192},"=\"1-1.3:1.0\",",[76,123691,123692],{"class":1927}," MODE:",[76,123694,133],{"class":192},[76,123696,123697],{"class":1927},"\"0777\"",[76,123699,466],{"class":1927},[76,123701,123702],{"class":192}," SYMLINK+=\"rplidar_front\"\n",[76,123704,123705,123707,123709,123711,123713,123715,123718,123720,123722,123724,123726],{"class":78,"line":96},[76,123706,123335],{"class":86},[76,123708,133],{"class":82},[76,123710,123340],{"class":192},[76,123712,123684],{"class":86},[76,123714,133],{"class":82},[76,123716,123717],{"class":192},"=\"1-1.4:1.0\",",[76,123719,123692],{"class":1927},[76,123721,133],{"class":192},[76,123723,123697],{"class":1927},[76,123725,466],{"class":1927},[76,123727,123728],{"class":192}," SYMLINK+=\"rplidar_back\"\n",[21,123730,123420],{},[21,123732,123423],{},[66,123734,123735],{"className":117265,"code":123426,"language":117267,"meta":71,"style":71},[73,123736,123737,123741,123751,123761,123765,123769,123779],{"__ignoreMap":71},[76,123738,123739],{"class":78,"line":79},[76,123740,123433],{"class":146},[76,123742,123743,123745,123747,123749],{"class":78,"line":96},[76,123744,24545],{"class":1927},[76,123746,120017],{"class":192},[76,123748,123442],{"class":192},[76,123750,123445],{"class":192},[76,123752,123753,123755,123757,123759],{"class":78,"line":1143},[76,123754,24545],{"class":1927},[76,123756,120017],{"class":192},[76,123758,123442],{"class":192},[76,123760,123456],{"class":192},[76,123762,123763],{"class":78,"line":1158},[76,123764,2365],{"emptyLinePlaceholder":2364},[76,123766,123767],{"class":78,"line":1164},[76,123768,123465],{"class":146},[76,123770,123771,123773,123775,123777],{"class":78,"line":1178},[76,123772,24545],{"class":1927},[76,123774,123472],{"class":192},[76,123776,123475],{"class":192},[76,123778,123478],{"class":136},[76,123780,123781,123783,123785],{"class":78,"line":1184},[76,123782,24545],{"class":1927},[76,123784,123472],{"class":192},[76,123786,123487],{"class":192},[21,123788,123490],{},[21,123790,123493],{},[21,123792,123496,123793,123796],{},[73,123794,123795],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[21,123798,123799],{},[1426,123800],{"alt":71,"src":123801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[21,123803,123804],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[21,123806,123807,123809],{},[237,123808,117933],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[46,123811,123813],{"id":123812},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[21,123815,123816],{},"（1）.查看所连接的主机USB接口的信息",[66,123818,123820],{"className":117265,"code":123819,"language":117267,"meta":71,"style":71},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[73,123821,123822,123852],{"__ignoreMap":71},[76,123823,123824,123826,123828,123831,123833,123835,123837,123839,123842,123845,123847,123850],{"class":78,"line":79},[76,123825,123572],{"class":1927},[76,123827,69790],{"class":192},[76,123829,123830],{"class":136}," -a",[76,123832,29185],{"class":136},[76,123834,28391],{"class":86},[76,123836,123572],{"class":1927},[76,123838,69790],{"class":192},[76,123840,123841],{"class":136}," -q",[76,123843,123844],{"class":192}," path",[76,123846,25084],{"class":136},[76,123848,123849],{"class":192}," \u002Fdev\u002FttyACM0",[76,123851,93],{"class":86},[76,123853,123854,123856,123858,123860,123862,123864,123866,123868,123870,123872,123874,123877],{"class":78,"line":96},[76,123855,123572],{"class":1927},[76,123857,69790],{"class":192},[76,123859,123830],{"class":136},[76,123861,29185],{"class":136},[76,123863,28391],{"class":86},[76,123865,123572],{"class":1927},[76,123867,69790],{"class":192},[76,123869,123841],{"class":136},[76,123871,123844],{"class":192},[76,123873,25084],{"class":136},[76,123875,123876],{"class":192}," \u002Fdev\u002FttyUSB0",[76,123878,93],{"class":86},[21,123880,123881],{},[1426,123882],{"alt":71,"src":123883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[21,123885,123886],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[21,123888,123301],{},[21,123890,123304,123891,123656],{},[73,123892,123307],{},[66,123894,123895],{"className":117265,"code":123311,"language":117267,"meta":71,"style":71},[73,123896,123897],{"__ignoreMap":71},[76,123898,123899,123901,123903],{"class":78,"line":79},[76,123900,24545],{"class":1927},[76,123902,118552],{"class":192},[76,123904,123322],{"class":192},[66,123906,123908],{"className":117265,"code":123907,"language":117267,"meta":71,"style":71},"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",[73,123909,123910,123938,123964],{"__ignoreMap":71},[76,123911,123912,123914,123916,123919,123921,123923,123925,123927,123930,123933,123935],{"class":78,"line":79},[76,123913,123335],{"class":86},[76,123915,133],{"class":82},[76,123917,123918],{"class":192},"=\"ttyACM*\",",[76,123920,123343],{"class":1927},[76,123922,123346],{"class":192},[76,123924,123375],{"class":1927},[76,123926,466],{"class":1927},[76,123928,123929],{"class":192}," ATTRS{idProduct}==\"55d4\",",[76,123931,123932],{"class":192}," ATTRS{serial}==\"0001\",",[76,123934,123357],{"class":192},[76,123936,123937],{"class":192}," SYMLINK+=\"ttyACM_MCU\"\n",[76,123939,123940,123942,123944,123946,123948,123950,123952,123954,123956,123959,123961],{"class":78,"line":96},[76,123941,123335],{"class":86},[76,123943,133],{"class":82},[76,123945,123918],{"class":192},[76,123947,123343],{"class":1927},[76,123949,123346],{"class":192},[76,123951,123375],{"class":1927},[76,123953,466],{"class":1927},[76,123955,123929],{"class":192},[76,123957,123958],{"class":192}," ATTRS{serial}==\"0002\",",[76,123960,123357],{"class":192},[76,123962,123963],{"class":192}," SYMLINK+=\"ttyACM_Lidar\"\n",[76,123965,123966,123968,123970,123972,123974,123976,123978,123980,123982,123984],{"class":78,"line":1143},[76,123967,123335],{"class":86},[76,123969,133],{"class":82},[76,123971,123340],{"class":192},[76,123973,123343],{"class":1927},[76,123975,123346],{"class":192},[76,123977,123375],{"class":1927},[76,123979,466],{"class":1927},[76,123981,123380],{"class":192},[76,123983,123357],{"class":192},[76,123985,123986],{"class":192}," SYMLINK+=\"ttyUSB_IMU\"\n",[21,123988,123420],{},[21,123990,123423],{},[66,123992,123993],{"className":117265,"code":123426,"language":117267,"meta":71,"style":71},[73,123994,123995,123999,124009,124019,124023,124027,124037],{"__ignoreMap":71},[76,123996,123997],{"class":78,"line":79},[76,123998,123433],{"class":146},[76,124000,124001,124003,124005,124007],{"class":78,"line":96},[76,124002,24545],{"class":1927},[76,124004,120017],{"class":192},[76,124006,123442],{"class":192},[76,124008,123445],{"class":192},[76,124010,124011,124013,124015,124017],{"class":78,"line":1143},[76,124012,24545],{"class":1927},[76,124014,120017],{"class":192},[76,124016,123442],{"class":192},[76,124018,123456],{"class":192},[76,124020,124021],{"class":78,"line":1158},[76,124022,2365],{"emptyLinePlaceholder":2364},[76,124024,124025],{"class":78,"line":1164},[76,124026,123465],{"class":146},[76,124028,124029,124031,124033,124035],{"class":78,"line":1178},[76,124030,24545],{"class":1927},[76,124032,123472],{"class":192},[76,124034,123475],{"class":192},[76,124036,123478],{"class":136},[76,124038,124039,124041,124043],{"class":78,"line":1184},[76,124040,24545],{"class":1927},[76,124042,123472],{"class":192},[76,124044,123487],{"class":192},[21,124046,124047,124048],{},"再重新插拔设备即可，或者 ",[237,124049,124050],{},"直接重启系统。",[21,124052,123493],{},[21,124054,123496,124055,123796],{},[73,124056,123795],{},[21,124058,124059],{},[1426,124060],{"alt":71,"src":124061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[21,124063,123804],{},[21,124065,124066,124068],{},[237,124067,117933],{}," 一些设备可能没有串口号等。",[46,124070,124072],{"id":124071},"_744-其他注意事项","7.4.4 其他注意事项",[21,124074,124075,124076,124078,124079,124082,124083,18377,124086,124089,124090,124092],{},"并非所有的USB设备端口号都是",[73,124077,123530],{},"的格式，比如Arduino的端口号可能是",[73,124080,124081],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[73,124084,124085],{},"videon",[73,124087,124088],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[73,124091,124085],{},"端口，绑定时需要关联的也是该接口。",[21,124094,124095,124096,124099,124100,124103,124104,124106,124107,124110,124111,124114,124115,124118,124119,124118,124122,124118,124125,28354],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[73,124097,124098],{},"KERNEL==\"ttyUSB*\"","修改为",[73,124101,124102],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[73,124105,124098],{},"修改为类似于",[73,124108,124109],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[73,124112,124113],{},"video[0,2,4,6]","表示可以绑定的端口为",[73,124116,124117],{},"video0","或",[73,124120,124121],{},"video2",[73,124123,124124],{},"video4",[73,124126,124127],{},"video6",[16,124129,124131],{"id":124130},"_75-挂载内网网页","7.5 挂载内网网页",[21,124133,124134],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[21,124136,124137],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[21,124139,124140],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[21,124142,124143,124144],{},"Termux 下载地址（F-Droid）：",[326,124145,124146],{"href":124146,"rel":124147},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23833],[21,124149,124150],{},"首先打开app后，先更新软件缓存：",[66,124152,124154],{"className":117265,"code":124153,"language":117267,"meta":71,"style":71},"pkg update\n",[73,124155,124156],{"__ignoreMap":71},[76,124157,124158,124161],{"class":78,"line":79},[76,124159,124160],{"class":1927},"pkg",[76,124162,26211],{"class":192},[21,124164,124165],{},"然后换源",[66,124167,124169],{"className":117265,"code":124168,"language":117267,"meta":71,"style":71},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[73,124170,124171],{"__ignoreMap":71},[76,124172,124173,124175,124178],{"class":78,"line":79},[76,124174,123043],{"class":1927},[76,124176,124177],{"class":86}," $PREFIX",[76,124179,124180],{"class":192},"\u002Fetc\u002Fapt\u002Fsources.list\n",[21,124182,124183],{},"将该文件内容替换为下面：",[66,124185,124187],{"className":117265,"code":124186,"language":117267,"meta":71,"style":71},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[73,124188,124189],{"__ignoreMap":71},[76,124190,124191,124194,124197,124200],{"class":78,"line":79},[76,124192,124193],{"class":1927},"deb",[76,124195,124196],{"class":192}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[76,124198,124199],{"class":192}," stable",[76,124201,124202],{"class":192}," main\n",[1095,124204,124205,124232],{},[32,124206,124207,124208,124210,124211],{},"如果你使用的是",[73,124209,123043],{},"编辑器：",[1095,124212,124213,124220,124226],{},[32,124214,124215,124216,124219],{},"按 ",[73,124217,124218],{},"Ctrl+O"," 保存文件。",[32,124221,124215,124222,124225],{},[73,124223,124224],{},"Enter"," 确认文件名。",[32,124227,124215,124228,124231],{},[73,124229,124230],{},"Ctrl+X"," 退出编辑器。",[32,124233,124207,124234,124210,124237],{},[73,124235,124236],{},"vim",[1095,124238,124239,124245],{},[32,124240,124215,124241,124244],{},[73,124242,124243],{},"Esc"," 退出编辑模式。",[32,124246,124247,124248,124250],{},"输入 ",[73,124249,119190],{}," 保存并退出。",[21,124252,124253],{},"接下来重新更新软件源：",[66,124255,124257],{"className":117265,"code":124256,"language":117267,"meta":71,"style":71},"pkg update && pkg upgrade\n",[73,124258,124259],{"__ignoreMap":71},[76,124260,124261,124263,124265,124267,124269],{"class":78,"line":79},[76,124262,124160],{"class":1927},[76,124264,117316],{"class":192},[76,124266,26159],{"class":86},[76,124268,124160],{"class":1927},[76,124270,117302],{"class":192},[21,124272,124273],{},"安装python：",[66,124275,124277],{"className":117265,"code":124276,"language":117267,"meta":71,"style":71},"pkg install python\n",[73,124278,124279],{"__ignoreMap":71},[76,124280,124281,124283,124285],{"class":78,"line":79},[76,124282,124160],{"class":1927},[76,124284,23802],{"class":192},[76,124286,124287],{"class":192}," python\n",[21,124289,124290,26442],{},[237,124291,124292],{},"通过Termux访问设备存储",[21,124294,124295],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[66,124297,124299],{"className":117265,"code":124298,"language":117267,"meta":71,"style":71},"termux-setup-storage\n",[73,124300,124301],{"__ignoreMap":71},[76,124302,124303],{"class":78,"line":79},[76,124304,124298],{"class":1927},[29,124306,124307],{},[32,124308,124309,26442,124312],{},[237,124310,124311],{},"进入HTML文件所在的目录",[29,124313,124314],{},[32,124315,124316,124317,124319],{},"使用",[73,124318,101245],{},"命令进入HTML文件所在的目录：",[66,124321,124323],{"className":117265,"code":124322,"language":117267,"meta":71,"style":71},"cd ~\u002Fyour_html_folder\n",[73,124324,124325],{"__ignoreMap":71},[76,124326,124327,124329],{"class":78,"line":79},[76,124328,101245],{"class":136},[76,124330,124331],{"class":192}," ~\u002Fyour_html_folder\n",[29,124333,124334],{"start":96},[32,124335,124336,26442,124339,124344,124361],{},[237,124337,124338],{},"启动Python HTTP服务器",[29,124340,124341],{},[32,124342,124343],{},"运行以下命令启动一个简单的HTTP服务器：",[66,124345,124347],{"className":117265,"code":124346,"language":117267,"meta":71,"style":71},"python -m http.server 8000\n",[73,124348,124349],{"__ignoreMap":71},[76,124350,124351,124353,124355,124358],{"class":78,"line":79},[76,124352,30349],{"class":1927},[76,124354,100851],{"class":136},[76,124356,124357],{"class":192}," http.server",[76,124359,124360],{"class":136}," 8000\n",[29,124362,124363],{"start":1143},[32,124364,124365,124366,124369],{},"这会在端口",[73,124367,124368],{},"8000","上启动一个Web服务器。",[1095,124371,124372],{},[32,124373,124374],{},"启动服务器后，Termux会显示日志信息，例如：",[66,124376,124378],{"className":120785,"code":124377,"language":120787,"meta":120788,"style":71},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[73,124379,124380],{"__ignoreMap":71},[76,124381,124382],{"class":78,"line":79},[76,124383,124377],{},[1095,124385,124386],{},[32,124387,124388],{},"这表示服务器已成功启动。",[21,124390,124391],{},[237,124392,124393],{},"在浏览器中访问HTML文件",[29,124395,124396],{},[32,124397,124398,26442,124401,124406],{},[237,124399,124400],{},"在同一设备上访问",[29,124402,124403],{},[32,124404,124405],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[66,124407,124410],{"className":124408,"code":124409,"language":71633,"meta":71,"style":71},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[73,124411,124412],{"__ignoreMap":71},[76,124413,124414,124417],{"class":78,"line":79},[76,124415,124416],{"class":86},"http:",[76,124418,124419],{"class":146},"\u002F\u002Flocalhost:8000\n",[1095,124421,124422],{},[32,124423,124424,124425,124428],{},"如果HTML文件中有",[73,124426,124427],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[16,124430,124432],{"id":124431},"_76-linux重点知识","7.6 Linux重点知识",[46,124434,124436],{"id":124435},"_761-关于点的说明","7.6.1 关于点的说明",[21,124438,124439],{},[1426,124440],{"alt":71,"src":124441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[21,124443,124444],{},"一点本目录，两点上目录",[46,124446,124448],{"id":124447},"_762-目录","7.6.2 目录",[21965,124450,124452],{"id":124451},"_7621-系统启动必须","7.6.2.1 系统启动必须",[21,124454,124455],{},[237,124456,124457],{},"\u002Fboot:",[21,124459,124460],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[21,124462,124463],{},[237,124464,124465],{},"\u002Fetc:",[21,124467,124468],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[21,124470,124471],{},[237,124472,124473],{},"\u002Flib：",[21,124475,124476],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[21,124478,124479],{},[237,124480,124481],{},"\u002Fsys:",[21,124483,124484],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21965,124486,124488],{"id":124487},"_7622-指令集合","7.6.2.2 指令集合",[21,124490,124491],{},[237,124492,124493],{},"\u002Fbin:",[21,124495,124496],{},"为二进制文件的缩写，存放最经常使用的命令",[21,124498,124499],{},[237,124500,124501],{},"\u002Fsbin:",[21,124503,124504],{},"只有系统管理员才能使用的程序和指令",[21965,124506,124508],{"id":124507},"_7623-外部文件管理","7.6.2.3 外部文件管理",[21,124510,124511],{},[237,124512,124513],{},"\u002Fdev:",[21,124515,124516],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[21,124518,124519],{},[237,124520,124521],{},"\u002Fmedia:",[21,124523,124524],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[21,124526,124527],{},[237,124528,124529],{},"\u002Fmnt:",[21,124531,124532],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21965,124534,124536],{"id":124535},"_7624-临时文件","7.6.2.4 临时文件",[21,124538,124539],{},[237,124540,124541],{},"\u002Frun:",[21,124543,124544],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[21,124546,124547],{},[237,124548,124549],{},"\u002Flost+found:",[21,124551,124552],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[21,124554,124555],{},[237,124556,124557],{},"\u002Ftmp:",[21,124559,124560],{},"这个目录是用来存放一些临时文件的",[21965,124562,124564],{"id":124563},"_7625-账户","7.6.2.5 账户",[21,124566,124567],{},[237,124568,124569],{},"\u002Froot：",[21,124571,124572],{},"系统管理员的用户主目录",[21,124574,124575,26442],{},[237,124576,124577],{},"\u002Fhome",[21,124579,124580],{},"用户的主目录，以用户的账号命名的",[21,124582,124583,26442],{},[237,124584,124585],{},"\u002Fusr",[21,124587,124588],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[21,124590,124591],{},[237,124592,124593],{},"\u002Fusr\u002Fbin：",[21,124595,124596],{},"系统用户使用的应用程序与指令",[21,124598,124599],{},[237,124600,124601],{},"\u002Fusr\u002Fsbin：",[21,124603,124604],{},"超级用户使用的比较高级的管理程序和系统守护程序",[21,124606,124607],{},[237,124608,124609],{},"\u002Fusr\u002Fsrc：",[21,124611,124612],{},"内核源代码默认的放置目录",[21965,124614,124616],{"id":124615},"_7626-运行过程要用","7.6.2.6 运行过程要用",[21,124618,124619],{},[237,124620,124621],{},"\u002Fvar：",[21,124623,124624],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[21,124626,124627],{},[237,124628,124629],{},"\u002Fproc:",[21,124631,124632,124633,124636],{},"管理 ",[237,124634,124635],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21965,124638,124640],{"id":124639},"_7627-扩展用的","7.6.2.7 扩展用的",[21,124642,124643],{},[237,124644,124645],{},"\u002Fopt:",[21,124647,124648],{},"默认是空的，我们安装额外软件可以放在这个里面",[21,124650,124651],{},[237,124652,124653],{},"\u002Fsrv:",[21,124655,124656],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[46,124658,124660],{"id":124659},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[21,124662,124663],{},[1426,124664],{"alt":71,"src":124665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[21,124667,124668],{},"windows-->linux:",[21,124670,124671],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[21,124673,124674],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[21,124676,124677],{},"linux传输文件到windows",[21,124679,124680],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[46,124682,124684],{"id":124683},"_764-易忘知识","7.6.4 易忘知识",[21,124686,124687],{},"操作系统内核查看",[66,124689,124690],{"className":117265,"code":121259,"language":117267,"meta":71,"style":71},[73,124691,124692],{"__ignoreMap":71},[76,124693,124694,124696],{"class":78,"line":79},[76,124695,70173],{"class":1927},[76,124697,121268],{"class":136},[21,124699,124700],{},[1426,124701],{"alt":71,"src":124702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[21,124704,124705],{},[1426,124706],{"alt":71,"src":124707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[66,124709,124711],{"className":117265,"code":124710,"language":117267,"meta":71,"style":71},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[73,124712,124713,124725],{"__ignoreMap":71},[76,124714,124715,124717,124720,124723],{"class":78,"line":79},[76,124716,121476],{"class":1927},[76,124718,124719],{"class":192}," mvtest",[76,124721,124722],{"class":192}," mvtest2",[76,124724,2639],{"class":86},[76,124726,124727],{"class":78,"line":96},[76,124728,124729],{"class":1927},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[21,124731,124732],{},[1426,124733],{"alt":71,"src":124734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[21,124736,124737],{},[1426,124738],{"alt":71,"src":124739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[21,124741,124742,124743,124746],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[73,124744,124745],{},"du -a"," 可以快速查看磁盘使用细节。",[46,124748,124750],{"id":124749},"_765-vim","7.6.5 Vim",[21,124752,124753],{},[1426,124754],{"alt":71,"src":124755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[21,124757,124758],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[21,124760,124761],{},"一开始进去为命令模式，此时点击输入的字母为命令",[21,124763,124764],{},[237,124765,124766],{},"1.命令模式：",[21,124768,124769],{},"i 切换到输入模式，在光标当前位置开始输入文本",[21,124771,124772],{},"x 删除当前光标所在处的字符",[21,124774,124775],{},"：切换到底线命令模式，以在最底一行输入命令",[21,124777,124778],{},"a 进行插入模式，在光标下一个位置输入文本",[21,124780,124781],{},"o 在当前的下方插入一个新行，并进入插入模式",[21,124783,124784],{},"0 在当前行的上方插入一个新行，并进入插入模式",[21,124786,124787],{},"dd 剪切当前行",[21,124789,124790],{},"yy 复制当前行",[21,124792,124793],{},"p 粘贴剪贴板内容到光标下方",[21,124795,124796],{},"P 粘贴剪贴板内容到光标上方",[21,124798,124799],{},"u 撤销上一次操作",[21,124801,124802],{},"ctrl+r 重做上一次操作",[21,124804,124805,124807],{},[883,124806],{}," 保存文件",[21,124809,124810,124812],{},[733,124811],{}," 退出Vim编辑器",[21,124814,124815,124817],{},[733,124816],{},"! 强制退出Vim编辑器，不保存修改",[21,124819,124820],{},[237,124821,124822],{},"2.输入模式：",[21,124824,124825],{},[1426,124826],{"alt":71,"src":124827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[21,124829,124830],{},[237,124831,124832],{},"3.底线命令模式：",[21,124834,124835],{},[1426,124836],{"alt":71,"src":124837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[21,124839,124840],{},"按下esc可以退出底线命令模式",[46,124842,124844],{"id":124843},"_766-apt","7.6.6 apt",[21,124846,124847],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[46,124849,124851],{"id":124850},"_767-home与root的区别","7.6.7 home与root的区别",[21,124853,124854],{},[1426,124855],{"alt":71,"src":124856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[21,124858,124859],{},[1426,124860],{"alt":71,"src":124861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[21,124863,124864],{},[1426,124865],{"alt":71,"src":124866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[21,124868,124869],{},[1426,124870],{"alt":71,"src":124871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[46,124873,124875],{"id":124874},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[21,124877,124878],{},[326,124879,124880],{"href":124880,"rel":124881},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23833],[29,124883,124884,124887],{},[32,124885,124886],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[32,124888,124889],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[21,124891,124892],{},[1426,124893],{"alt":71,"src":124894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[21,124896,124897],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[21,124899,124900],{},[1426,124901],{"alt":71,"src":124902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[66,124904,124906],{"className":120785,"code":124905,"language":120787,"meta":120788,"style":71},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[73,124907,124908,124913],{"__ignoreMap":71},[76,124909,124910],{"class":78,"line":79},[76,124911,124912],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[76,124914,124915],{"class":78,"line":96},[76,124916,124917],{},".\u002Fpycharm.sh\n",[21,124919,124920],{},"3️⃣创建.desktop文件",[21,124922,124923],{},[237,124924,124925],{},"原理：",[1095,124927,124928,124938],{},[32,124929,124930,124931,124937],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[237,124932,124933,124936],{},[73,124934,124935],{},".desktop"," 文件"," 来识别应用。",[32,124939,124940,124942,124943],{},[73,124941,124935],{}," 文件相当于一个“应用注册表”，告诉系统：",[1095,124944,124945,124948,124951,124954,124957],{},[32,124946,124947],{},"应用名字（Name）",[32,124949,124950],{},"图标（Icon）",[32,124952,124953],{},"执行命令（Exec）",[32,124955,124956],{},"分类（Categories）",[32,124958,124959],{},"是否需要终端（Terminal）",[66,124961,124963],{"className":120785,"code":124962,"language":120787,"meta":120788,"style":71},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[73,124964,124965,124970],{"__ignoreMap":71},[76,124966,124967],{"class":78,"line":79},[76,124968,124969],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[76,124971,124972],{"class":78,"line":96},[76,124973,124974],{},"nano pycharm.desktop\n",[21,124976,124977],{},"nano是一个命令行下的编辑器，也可以使用vim",[66,124979,124981],{"className":120785,"code":124980,"language":120787,"meta":120788,"style":71},"[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",[73,124982,124983,124988,124993,124998,125003,125008,125013,125018,125023,125028],{"__ignoreMap":71},[76,124984,124985],{"class":78,"line":79},[76,124986,124987],{},"[Desktop Entry]\n",[76,124989,124990],{"class":78,"line":96},[76,124991,124992],{},"Version=1.0\n",[76,124994,124995],{"class":78,"line":1143},[76,124996,124997],{},"Type=Application\n",[76,124999,125000],{"class":78,"line":1158},[76,125001,125002],{},"Name=PyCharm\n",[76,125004,125005],{"class":78,"line":1164},[76,125006,125007],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[76,125009,125010],{"class":78,"line":1178},[76,125011,125012],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[76,125014,125015],{"class":78,"line":1184},[76,125016,125017],{},"Comment=JetBrains PyCharm IDE\n",[76,125019,125020],{"class":78,"line":1275},[76,125021,125022],{},"Categories=Development;IDE;\n",[76,125024,125025],{"class":78,"line":1281},[76,125026,125027],{},"Terminal=false\n",[76,125029,125030],{"class":78,"line":1293},[76,125031,125032],{},"StartupWMClass=jetbrains-pycharm\n",[1095,125034,125035,125041,125047,125053],{},[32,125036,125037,125040],{},[73,125038,125039],{},"Exec"," → 点击图标时执行的命令",[32,125042,125043,125046],{},[73,125044,125045],{},"Icon"," → 显示在菜单和桌面上的图标",[32,125048,125049,125052],{},[73,125050,125051],{},"Terminal=false"," → 不打开终端",[32,125054,125055,125058],{},[73,125056,125057],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125060,125061,125062],"blockquote",{},[21,125063,125064,125065,125067,125068],{},"可以理解成 ",[73,125066,124935],{}," 文件是 Linux 的 ",[237,125069,125070],{},"快捷方式配置文件",[21,125072,125073],{},"4️⃣设置可执行权限",[66,125075,125077],{"className":120785,"code":125076,"language":120787,"meta":120788,"style":71},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[73,125078,125079],{"__ignoreMap":71},[76,125080,125081],{"class":78,"line":79},[76,125082,125076],{},[21,125084,125085],{},"5️⃣桌面图标启动的话如下：",[66,125087,125089],{"className":120785,"code":125088,"language":120787,"meta":120788,"style":71},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[73,125090,125091,125096],{"__ignoreMap":71},[76,125092,125093],{"class":78,"line":79},[76,125094,125095],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[76,125097,125098],{"class":78,"line":96},[76,125099,125100],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[29,125102,125103],{"start":1143},[32,125104,125105],{},"下载Appimage文件实现软件的安装",[21,125107,125108],{},"1️⃣先下载appimage",[21,125110,125111],{},[326,125112,125113],{"href":125113,"rel":125114},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23833],[21,125116,125117],{},[1426,125118],{"alt":71,"src":125119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[21,125121,125122],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[21,125124,125125],{},[1426,125126],{"alt":71,"src":125127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[21,125129,125130],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[21,125132,125133],{},[1426,125134],{"alt":71,"src":125135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[21,125137,125138],{},[1426,125139],{"alt":71,"src":125140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[21,125142,125143,125144,125147],{},"3️⃣给他们放在",[73,125145,125146],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[21,125149,125150],{},"4️⃣给软件执行权限",[66,125152,125154],{"className":120785,"code":125153,"language":120787,"meta":120788,"style":71},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[73,125155,125156,125161],{"__ignoreMap":71},[76,125157,125158],{"class":78,"line":79},[76,125159,125160],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[76,125162,125163],{"class":78,"line":96},[76,125164,125165],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[21,125167,125168],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[66,125170,125172],{"className":117265,"code":125171,"language":117267,"meta":71,"style":71},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[73,125173,125174,125181,125188,125194],{"__ignoreMap":71},[76,125175,125176,125178],{"class":78,"line":79},[76,125177,101245],{"class":136},[76,125179,125180],{"class":192}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[76,125182,125183,125185],{"class":78,"line":96},[76,125184,101252],{"class":1927},[76,125186,125187],{"class":192}," .\u002Fqqmusic.desktop\n",[76,125189,125190,125192],{"class":78,"line":1143},[76,125191,124236],{"class":1927},[76,125193,125187],{"class":192},[76,125195,125196,125198,125200,125202],{"class":78,"line":1158},[76,125197,24545],{"class":1927},[76,125199,24548],{"class":192},[76,125201,123102],{"class":192},[76,125203,125187],{"class":192},[21,125205,125206,125208],{},[73,125207,101252],{},"：一个 Linux 命令，主要功能是：",[1095,125210,125211,125214],{},[32,125212,125213],{},"如果文件不存在，就创建一个新的空文件",[32,125215,125216],{},"如果文件已存在，就更新该文件的最后修改时间",[66,125218,125220],{"className":120785,"code":125219,"language":120787,"meta":120788,"style":71},"[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",[73,125221,125222,125226,125231,125236,125241,125245,125250],{"__ignoreMap":71},[76,125223,125224],{"class":78,"line":79},[76,125225,124987],{},[76,125227,125228],{"class":78,"line":96},[76,125229,125230],{},"Name=QQ音乐\n",[76,125232,125233],{"class":78,"line":1143},[76,125234,125235],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[76,125237,125238],{"class":78,"line":1158},[76,125239,125240],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[76,125242,125243],{"class":78,"line":1164},[76,125244,124997],{},[76,125246,125247],{"class":78,"line":1178},[76,125248,125249],{},"Categories=Audio;Music;Player;\n",[76,125251,125252],{"class":78,"line":1184},[76,125253,125254],{},"Comment=QQ Music Client for Linux\n",[21,125256,125257],{},"将文件复制进去",[21,125259,125260],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[21,125262,125263],{},[1426,125264],{"alt":71,"src":125265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[21,125267,125268],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[21,125270,125271],{},[1426,125272],{"alt":71,"src":125273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[21,125275,125276,125277,125280,125281,125284],{},"如果你用的不是KDE，那么也可以直接修改",[73,125278,125279],{},"qqmuic.desktop","：在exec的末尾加上",[73,125282,125283],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[66,125286,125288],{"className":120785,"code":125287,"language":120787,"meta":120788,"style":71},"[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",[73,125289,125290,125294,125298,125303,125307,125311,125315],{"__ignoreMap":71},[76,125291,125292],{"class":78,"line":79},[76,125293,124987],{},[76,125295,125296],{"class":78,"line":96},[76,125297,125230],{},[76,125299,125300],{"class":78,"line":1143},[76,125301,125302],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[76,125304,125305],{"class":78,"line":1158},[76,125306,125240],{},[76,125308,125309],{"class":78,"line":1164},[76,125310,124997],{},[76,125312,125313],{"class":78,"line":1178},[76,125314,125249],{},[76,125316,125317],{"class":78,"line":1184},[76,125318,125254],{},[21,125320,125321],{},[1426,125322],{"alt":71,"src":125323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[21,125325,125326],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[66,125328,125330],{"className":120785,"code":125329,"language":120787,"meta":120788,"style":71},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[73,125331,125332],{"__ignoreMap":71},[76,125333,125334],{"class":78,"line":79},[76,125335,125329],{},[29,125337,125338],{"start":1158},[32,125339,125340],{},"去Flathub上安装软件",[21,125342,125343],{},[326,125344,125345],{"href":125345,"rel":125346},"https:\u002F\u002Fflathub.org\u002F",[23833],[21,125348,125349],{},"1️⃣去上面的官网搜索软件+下载软件",[21,125351,125352],{},[1426,125353],{"alt":71,"src":125354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[66,125356,125358],{"className":120785,"code":125357,"language":120787,"meta":120788,"style":71},"flatpak install flathub com.obsproject.Studio\n",[73,125359,125360],{"__ignoreMap":71},[76,125361,125362],{"class":78,"line":79},[76,125363,125357],{},[21,125365,125366],{},[1426,125367],{"alt":71,"src":125368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[21,125370,125371],{},"2️⃣运行软件",[21,125373,125374],{},"a.官方方式：",[21,125376,125377],{},[1426,125378],{"alt":71,"src":125379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[66,125381,125382],{"className":120785,"code":125357,"language":120787,"meta":120788,"style":71},[73,125383,125384],{"__ignoreMap":71},[76,125385,125386],{"class":78,"line":79},[76,125387,125357],{},[21,125389,125390],{},"b.当普通软件运行：",[21,125392,125393],{},[1426,125394],{"alt":71,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[21,125397,125398],{},[1426,125399],{"alt":71,"src":125400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5092,125402,125403],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":71,"searchDepth":96,"depth":96,"links":125405},[125406,125407,125412,125413,125419,125420],{"id":122138,"depth":96,"text":122139},{"id":122480,"depth":96,"text":122481,"children":125408},[125409,125410,125411],{"id":122484,"depth":1143,"text":122485},{"id":122551,"depth":1143,"text":122552},{"id":122812,"depth":1143,"text":122813},{"id":122965,"depth":96,"text":122966},{"id":123203,"depth":96,"text":123204,"children":125414},[125415,125416,125417,125418],{"id":123255,"depth":1143,"text":123256},{"id":123541,"depth":1143,"text":123542},{"id":123812,"depth":1143,"text":123813},{"id":124071,"depth":1143,"text":124072},{"id":124130,"depth":96,"text":124131},{"id":124431,"depth":96,"text":124432,"children":125421},[125422,125423,125424,125425,125426,125427,125428,125429],{"id":124435,"depth":1143,"text":124436},{"id":124447,"depth":1143,"text":124448},{"id":124659,"depth":1143,"text":124660},{"id":124683,"depth":1143,"text":124684},{"id":124749,"depth":1143,"text":124750},{"id":124843,"depth":1143,"text":124844},{"id":124850,"depth":1143,"text":124851},{"id":124874,"depth":1143,"text":124875},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122130,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125436,"title":125437,"body":125438,"description":23344,"extension":5123,"meta":125442,"navigation":2364,"path":125443,"seo":125444,"stem":125445,"__hash__":125446},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":9,"value":125439,"toc":125440},[],{"title":71,"searchDepth":96,"depth":96,"links":125441},[],{"category":30232},"\u002Fwiki\u002F2025-01-27-linux",{"title":125437,"description":23344},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125448,"title":125449,"body":125450,"description":125454,"extension":5123,"meta":125845,"navigation":2364,"path":125846,"seo":125847,"stem":125848,"__hash__":125849},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":9,"value":125451,"toc":125843},[125452,125455,125459,125476,125479,125532,125536,125538,125578,125587,125591,125594,125835,125840],[21,125453,125454],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[12,125456,125458],{"id":125457},"_1ubuntu环境配置","1.Ubuntu环境配置",[29,125460,125461,125464,125467,125470,125473],{},[32,125462,125463],{},"ubuntu环境换源",[32,125465,125466],{},"安装cuda",[32,125468,125469],{},"安装miniconda",[32,125471,125472],{},"安装pytorch",[32,125474,125475],{},"安装genesis",[21,125477,125478],{},"参考链接：",[66,125480,125482],{"className":23790,"code":125481,"language":23792,"meta":71,"style":71},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[73,125483,125484],{"__ignoreMap":71},[76,125485,125486,125489,125492,125495,125497,125500,125503,125505,125508,125511,125513,125516,125519,125521,125524,125527,125529],{"class":78,"line":79},[76,125487,125488],{"class":1927},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[76,125490,125491],{"class":192},"=blogdetail",[76,125493,125494],{"class":86},"&sharetype",[76,125496,133],{"class":82},[76,125498,125499],{"class":192},"blogdetail",[76,125501,125502],{"class":86},"&sharerId",[76,125504,133],{"class":82},[76,125506,125507],{"class":192},"144728092",[76,125509,125510],{"class":86},"&sharerefer",[76,125512,133],{"class":82},[76,125514,125515],{"class":192},"PC",[76,125517,125518],{"class":86},"&sharesource",[76,125520,133],{"class":82},[76,125522,125523],{"class":192},"qq_69379513",[76,125525,125526],{"class":86},"&sharefrom",[76,125528,133],{"class":82},[76,125530,125531],{"class":192},"from_link\n",[12,125533,125535],{"id":125534},"_2genesis-报错issue","2.Genesis 报错issue",[21,125537,125478],{},[66,125539,125540],{"className":23790,"code":125481,"language":23792,"meta":71,"style":71},[73,125541,125542],{"__ignoreMap":71},[76,125543,125544,125546,125548,125550,125552,125554,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576],{"class":78,"line":79},[76,125545,125488],{"class":1927},[76,125547,125491],{"class":192},[76,125549,125494],{"class":86},[76,125551,133],{"class":82},[76,125553,125499],{"class":192},[76,125555,125502],{"class":86},[76,125557,133],{"class":82},[76,125559,125507],{"class":192},[76,125561,125510],{"class":86},[76,125563,133],{"class":82},[76,125565,125515],{"class":192},[76,125567,125518],{"class":86},[76,125569,133],{"class":82},[76,125571,125523],{"class":192},[76,125573,125526],{"class":86},[76,125575,133],{"class":82},[76,125577,125531],{"class":192},[66,125579,125581],{"className":23790,"code":125580,"language":23792,"meta":71,"style":71},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[73,125582,125583],{"__ignoreMap":71},[76,125584,125585],{"class":78,"line":79},[76,125586,125580],{"class":1927},[12,125588,125590],{"id":125589},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[21,125592,125593],{},"hello_robot.py",[66,125595,125597],{"className":30347,"code":125596,"language":30349,"meta":71,"style":71},"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",[73,125598,125599,125605,125620,125624,125636,125648,125652,125665,125669,125688,125698,125708,125722,125726,125730,125735,125739,125749,125756,125770,125777,125787,125792,125796,125814,125819,125823,125830],{"__ignoreMap":71},[76,125600,125601,125603],{"class":78,"line":79},[76,125602,30361],{"class":82},[76,125604,45274],{"class":86},[76,125606,125607,125610,125613,125615,125617],{"class":78,"line":96},[76,125608,125609],{"class":86},"os.environ[",[76,125611,125612],{"class":192},"'PYOPENGL_PLATFORM'",[76,125614,4408],{"class":86},[76,125616,133],{"class":82},[76,125618,125619],{"class":192}," 'glx'\n",[76,125621,125622],{"class":78,"line":1143},[76,125623,2365],{"emptyLinePlaceholder":2364},[76,125625,125626,125628,125631,125633],{"class":78,"line":1158},[76,125627,30361],{"class":82},[76,125629,125630],{"class":86}," genesis ",[76,125632,31352],{"class":82},[76,125634,125635],{"class":86}," gs\n",[76,125637,125638,125640,125643,125645],{"class":78,"line":1164},[76,125639,30706],{"class":82},[76,125641,125642],{"class":86}," pynput ",[76,125644,30361],{"class":82},[76,125646,125647],{"class":86}," keyboard\n",[76,125649,125650],{"class":78,"line":1178},[76,125651,2365],{"emptyLinePlaceholder":2364},[76,125653,125654,125657,125660,125662],{"class":78,"line":1184},[76,125655,125656],{"class":86},"gs.init(",[76,125658,125659],{"class":5183},"backend",[76,125661,133],{"class":82},[76,125663,125664],{"class":86},"gs.gpu)\n",[76,125666,125667],{"class":78,"line":1275},[76,125668,2365],{"emptyLinePlaceholder":2364},[76,125670,125671,125674,125676,125679,125682,125684,125686],{"class":78,"line":1281},[76,125672,125673],{"class":86},"scene ",[76,125675,133],{"class":82},[76,125677,125678],{"class":86}," gs.Scene(",[76,125680,125681],{"class":5183},"show_viewer",[76,125683,133],{"class":82},[76,125685,31445],{"class":136},[76,125687,93],{"class":86},[76,125689,125690,125693,125695],{"class":78,"line":1293},[76,125691,125692],{"class":86},"plane ",[76,125694,133],{"class":82},[76,125696,125697],{"class":86}," scene.add_entity(gs.morphs.Plane())\n",[76,125699,125700,125703,125705],{"class":78,"line":1576},[76,125701,125702],{"class":86},"franka ",[76,125704,133],{"class":82},[76,125706,125707],{"class":86}," scene.add_entity(\n",[76,125709,125710,125713,125715,125717,125720],{"class":78,"line":1581},[76,125711,125712],{"class":86},"    gs.morphs.MJCF(",[76,125714,45323],{"class":5183},[76,125716,133],{"class":82},[76,125718,125719],{"class":192},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[76,125721,38016],{"class":86},[76,125723,125724],{"class":78,"line":1587},[76,125725,93],{"class":86},[76,125727,125728],{"class":78,"line":1592},[76,125729,2365],{"emptyLinePlaceholder":2364},[76,125731,125732],{"class":78,"line":1606},[76,125733,125734],{"class":86},"scene.build()\n",[76,125736,125737],{"class":78,"line":1611},[76,125738,2365],{"emptyLinePlaceholder":2364},[76,125740,125741,125743,125746],{"class":78,"line":1617},[76,125742,31916],{"class":82},[76,125744,125745],{"class":1927}," on_press",[76,125747,125748],{"class":86},"(key):\n",[76,125750,125751,125754],{"class":78,"line":1638},[76,125752,125753],{"class":82},"    try",[76,125755,3704],{"class":86},[76,125757,125758,125760,125763,125765,125768],{"class":78,"line":1643},[76,125759,2462],{"class":82},[76,125761,125762],{"class":86}," key.char ",[76,125764,2914],{"class":82},[76,125766,125767],{"class":192}," 'q'",[76,125769,3704],{"class":86},[76,125771,125772,125774],{"class":78,"line":1657},[76,125773,15699],{"class":82},[76,125775,125776],{"class":136}," False\n",[76,125778,125779,125782,125785],{"class":78,"line":1662},[76,125780,125781],{"class":82},"    except",[76,125783,125784],{"class":136}," AttributeError",[76,125786,3704],{"class":86},[76,125788,125789],{"class":78,"line":1691},[76,125790,125791],{"class":82},"        pass\n",[76,125793,125794],{"class":78,"line":1696},[76,125795,2365],{"emptyLinePlaceholder":2364},[76,125797,125798,125801,125803,125806,125809,125811],{"class":78,"line":1713},[76,125799,125800],{"class":86},"listener ",[76,125802,133],{"class":82},[76,125804,125805],{"class":86}," keyboard.Listener(",[76,125807,125808],{"class":5183},"on_press",[76,125810,133],{"class":82},[76,125812,125813],{"class":86},"on_press)\n",[76,125815,125816],{"class":78,"line":1718},[76,125817,125818],{"class":86},"listener.start()\n",[76,125820,125821],{"class":78,"line":1723},[76,125822,2365],{"emptyLinePlaceholder":2364},[76,125824,125825,125827],{"class":78,"line":1728},[76,125826,108632],{"class":82},[76,125828,125829],{"class":86}," listener.running:\n",[76,125831,125832],{"class":78,"line":1742},[76,125833,125834],{"class":86},"    scene.step()\n",[21,125836,125837],{},[1426,125838],{"alt":71,"src":125839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5092,125841,125842],{},"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":71,"searchDepth":96,"depth":96,"links":125844},[],{"category":23346},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125449,"description":125454},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125851,"title":125852,"body":125853,"description":23344,"extension":5123,"meta":125868,"navigation":2364,"path":125869,"seo":125870,"stem":125871,"__hash__":125872},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":9,"value":125854,"toc":125865},[125855,125858,125862],[12,125856,125852],{"id":125857},"_1-基础知识",[16,125859,125861],{"id":125860},"_11-js的组成","1.1 js的组成",[21,125863,125864],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":71,"searchDepth":96,"depth":96,"links":125866},[125867],{"id":125860,"depth":96,"text":125861},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125852,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125874,"title":125875,"body":125876,"description":23344,"extension":5123,"meta":126015,"navigation":2364,"path":126016,"seo":126017,"stem":126018,"__hash__":126019},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":9,"value":125877,"toc":126003},[125878,125881,125885,125888,125892,125902,125906,125909,125912,125915,125919,125926,125932,125936,125942,125953,125957,125960,125964,125967,125971,125974,125978,125981,125985,125988,125991,125994,125997,126000],[12,125879,125875],{"id":125880},"_2-vscode必备内容",[16,125882,125884],{"id":125883},"_21-标签分类","2.1 标签分类",[21,125886,125887],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[16,125889,125891],{"id":125890},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[21,125893,125894,125895,125897,125898,125901],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[73,125896,314],{}," 然后按 ",[73,125899,125900],{},"Tab","，快速自动生成基本结构。",[16,125903,125905],{"id":125904},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[21,125907,125908],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[21,125910,125911],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[21,125913,125914],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[16,125916,125918],{"id":125917},"_24-视图缩放","2.4 视图缩放",[21,125920,125921,125922,125925],{},"缩放视图 ",[73,125923,125924],{},"ctrl+"," 可实现代码增大。",[21,125927,125928,125931],{},[73,125929,125930],{},"ctrl-"," 可实现代码减小。",[16,125933,125935],{"id":125934},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[21,125937,125938,125939,28354],{},"VSCode 新建文件快捷键为 ",[73,125940,125941],{},"ctrl+N",[21,125943,125944,125945,125948,125949,125952],{},"保存快捷键为 ",[73,125946,125947],{},"ctrl+S","，将文本保存为 ",[73,125950,125951],{},".html"," 文件。",[16,125954,125956],{"id":125955},"_26-auto-rename-tag","2.6 Auto Rename Tag",[21,125958,125959],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[16,125961,125963],{"id":125962},"_27-vscode-icons","2.7 vscode-icons",[21,125965,125966],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[16,125968,125970],{"id":125969},"_28-easy-less","2.8 Easy LESS",[21,125972,125973],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[16,125975,125977],{"id":125976},"_29-会了吧插件","2.9 会了吧插件",[21,125979,125980],{},"会了吧插件可以展示代码中英语单词的意思。",[16,125982,125984],{"id":125983},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[21,125986,125987],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[21,125989,125990],{},"②选定多个相同的单词:ctrl+D",[21,125992,125993],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[21,125995,125996],{},"④全局替换某些单词:ctrl+h",[21,125998,125999],{},"⑤快速定位到某一行:ctrl+g",[21,126001,126002],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":71,"searchDepth":96,"depth":96,"links":126004},[126005,126006,126007,126008,126009,126010,126011,126012,126013,126014],{"id":125883,"depth":96,"text":125884},{"id":125890,"depth":96,"text":125891},{"id":125904,"depth":96,"text":125905},{"id":125917,"depth":96,"text":125918},{"id":125934,"depth":96,"text":125935},{"id":125955,"depth":96,"text":125956},{"id":125962,"depth":96,"text":125963},{"id":125969,"depth":96,"text":125970},{"id":125976,"depth":96,"text":125977},{"id":125983,"depth":96,"text":125984},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125875,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126021,"title":126022,"body":126023,"description":23344,"extension":5123,"meta":126182,"navigation":2364,"path":126183,"seo":126184,"stem":126185,"__hash__":126186},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":9,"value":126024,"toc":126174},[126025,126028,126032,126042,126048,126054,126058,126067,126071,126076,126079,126082,126086,126089,126099,126108,126117,126126,126136,126143,126148,126153,126166],[12,126026,126022],{"id":126027},"_3-html文本与容器标签",[16,126029,126031],{"id":126030},"_31-标题标签","3.1 标题标签",[21,126033,126034,126037,126038,126041],{},[73,126035,126036],{},"\u003Ch1>","我是一级标签",[73,126039,126040],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[21,126043,126044,126037,126046],{},[73,126045,126036],{},[73,126047,126040],{},[21,126049,123304,126050,126053],{},[73,126051,126052],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[16,126055,126057],{"id":126056},"_32-段落标签","3.2 段落标签",[21,126059,126060,126063,126064],{},[73,126061,126062],{},"\u003Cp>","....",[73,126065,126066],{},"\u003C\u002Fp>",[16,126068,126070],{"id":126069},"_33-换行标签","3.3 换行标签",[21,126072,126073],{},[73,126074,126075],{},"\u003Cbr \u002F>",[21,126077,126078],{},"具有强制换行的作用",[21,126080,126081],{},"单标签",[16,126083,126085],{"id":126084},"_34-文本格式化标签","3.4 文本格式化标签",[21,126087,126088],{},"提供粗体、斜体和下划线等效果",[21,126090,126091,126092,82508,126095,126098],{},"加粗：",[73,126093,126094],{},"\u003Cstrong>...\u003C\u002Fstrong>",[73,126096,126097],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[21,126100,126101,126102,82508,126105,126098],{},"斜体：",[73,126103,126104],{},"\u003Cem>...\u003C\u002Fem>",[73,126106,126107],{},"\u003Ci>...\u003C\u002Fi>",[21,126109,126110,126111,82508,126114,126098],{},"删除线：",[73,126112,126113],{},"\u003Cdel>...\u003C\u002Fdel>",[73,126115,126116],{},"\u003Cs>...\u003C\u002Fs>",[21,126118,126119,126120,82508,126123,126098],{},"下划线：",[73,126121,126122],{},"\u003Cins>...\u003C\u002Fins>",[73,126124,126125],{},"\u003Cu>...\u003C\u002Fu>",[16,126127,126129,126130,18377,126133,102662],{"id":126128},"_35-div和span标签","3.5 ",[73,126131,126132],{},"\u003Cdiv>",[73,126134,126135],{},"\u003Cspan>",[21,126137,126138,100987,126140,126142],{},[73,126139,126132],{},[73,126141,126135],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[21,126144,126145],{},[73,126146,126147],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[21,126149,126150],{},[73,126151,126152],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[21,126154,126155,126156,126158,126159,126161,126162,126165],{},"两者特点：①",[73,126157,126132],{}," 标签用来布局，但一行通常只放一个 ",[73,126160,126132],{},"。可以理解为一个大盒子，独占一行，在 ",[73,126163,126164],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[21,126167,77218,126168,126170,126171,126173],{},[73,126169,126135],{}," 标签也可用于布局，一行可以放多个 ",[73,126172,126135],{},"，可理解为小盒子。",{"title":71,"searchDepth":96,"depth":96,"links":126175},[126176,126177,126178,126179,126180],{"id":126030,"depth":96,"text":126031},{"id":126056,"depth":96,"text":126057},{"id":126069,"depth":96,"text":126070},{"id":126084,"depth":96,"text":126085},{"id":126128,"depth":96,"text":126181},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126022,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126188,"title":126189,"body":126190,"description":23344,"extension":5123,"meta":126387,"navigation":2364,"path":126388,"seo":126389,"stem":126390,"__hash__":126391},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":9,"value":126191,"toc":126379},[126192,126195,126199,126202,126208,126215,126221,126227,126230,126233,126236,126239,126242,126245,126248,126252,126255,126258,126261,126267,126273,126279,126286,126290,126296,126302,126305,126308,126314,126320,126326,126329,126332,126336,126339,126349,126355,126359,126368,126372,126375],[12,126193,126189],{"id":126194},"_4-html图像与链接",[16,126196,126198],{"id":126197},"_41-图像标签","4.1 图像标签",[21,126200,126201],{},"（1）标签",[21,126203,126204,126207],{},[73,126205,126206],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[21,126209,126210,126211,126214],{},"src是",[73,126212,126213],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[21,126216,126217,126218],{},"alt:文本，替换文本。图像不能显示的文字 ",[73,126219,126220],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[21,126222,126223,126224],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[73,126225,126226],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[21,126228,126229],{},"width:像素，设置图像的宽度",[21,126231,126232],{},"height:像素，设置图像的高度",[21,126234,126235],{},"border：像素，设置图像的边框粗细",[21,126237,126238],{},"（2）图像标签属性的注意点：",[21,126240,126241],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[21,126243,126244],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[21,126246,126247],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[16,126249,126251],{"id":126250},"_42-路径注意要点","4.2 路径注意要点：",[21,126253,126254],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[21,126256,126257],{},"（2）根目录：就是打开文件夹的第一层根目录",[21,126259,126260],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[21,126262,126263,126264],{},"①同一级路径：图像文件位于HTML文件同一级，如",[73,126265,126266],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[21,126268,126269,126270],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[73,126271,126272],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[21,126274,126275,126276],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[73,126277,126278],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[21,126280,126281,126282,339],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[326,126283,126284],{"href":126284,"rel":126285},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23833],[16,126287,126289],{"id":126288},"_43-超链接标签","4.3 超链接标签",[21,126291,126292,126295],{},[73,126293,126294],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[21,126297,126298,126299],{},"①语法格式：",[73,126300,126301],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[21,126303,126304],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[21,126306,126307],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[21,126309,126310,126311],{},"③链接分类：外部链接：",[73,126312,126313],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[21,126315,126316,126317],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[73,126318,126319],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[21,126321,126322,126323],{},"空链接：如果当时没有确定链接目标时，",[73,126324,126325],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[21,126327,126328],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[21,126330,126331],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[16,126333,126335],{"id":126334},"_44-锚点链接","4.4 锚点链接",[21,126337,126338],{},"点我们点击链接，可以快速定位到页面中的某个位置",[21,126340,126341,126342,126345,126346],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[73,126343,126344],{},"\u003Ca href=\"#two\">","第二级",[73,126347,126348],{},"\u003C\u002Fa>",[21,126350,126351,126352],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[73,126353,126354],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[16,126356,126358],{"id":126357},"_45-注释标签","4.5 注释标签",[21,126360,126361,126364,126365],{},[73,126362,126363],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[73,126366,126367],{},"ctrl+\u002F",[16,126369,126371],{"id":126370},"_46-特殊字符","4.6 特殊字符",[21,126373,126374],{},"可以实现添加多个空格",[1426,126376],{"style":126377,"src":126378},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":71,"searchDepth":96,"depth":96,"links":126380},[126381,126382,126383,126384,126385,126386],{"id":126197,"depth":96,"text":126198},{"id":126250,"depth":96,"text":126251},{"id":126288,"depth":96,"text":126289},{"id":126334,"depth":96,"text":126335},{"id":126357,"depth":96,"text":126358},{"id":126370,"depth":96,"text":126371},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126189,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126393,"title":126394,"body":126395,"description":23344,"extension":5123,"meta":126688,"navigation":2364,"path":126689,"seo":126690,"stem":126691,"__hash__":126692},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":9,"value":126396,"toc":126679},[126397,126400,126404,126407,126410,126413,126416,126419,126422,126425,126428,126431,126451,126457,126461,126464,126467,126470,126473,126476,126479,126483,126486,126489,126492,126495,126508,126513,126516,126519,126534,126537,126540,126543,126546,126549,126553,126556,126563,126566,126569,126572,126575,126578,126584,126587,126590,126596,126599,126602,126605,126611,126614,126617,126631,126638,126641,126644,126651,126660,126663,126666,126669,126673,126676],[12,126398,126394],{"id":126399},"_5-html表格列表与表单",[16,126401,126403],{"id":126402},"_51-表格标签","5.1 表格标签",[21,126405,126406],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[21,126408,126409],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[21,126411,126412],{},"②表格基本语法：",[1426,126414],{"style":126377,"src":126415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[21,126417,126418],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1426,126420],{"style":126377,"src":126421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[21,126423,126424],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1426,126426],{"style":126377,"src":126427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[21,126429,126430],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[21,126432,126433,126436,126437,126439,126440,126443,126444,126446,126447,126450],{},[73,126434,126435],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[73,126438,126435],{},"内部必须拥有",[73,126441,126442],{},"\u003Ctr>","标签，一般位于第一行，",[73,126445,126435],{},"比",[73,126448,126449],{},"\u003Cth>","范围广",[21,126452,126453,126456],{},[73,126454,126455],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[16,126458,126460],{"id":126459},"_52-合并单元格","5.2 合并单元格",[21,126462,126463],{},"（1）合并单元格方式：",[21,126465,126466],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[21,126468,126469],{},"②跨列合并：colspan=\"合并单元格的个数\"",[21,126471,126472],{},"（2）目标单元格：",[21,126474,126475],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[21,126477,126478],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[16,126480,126482],{"id":126481},"_53-列表标签","5.3 列表标签",[21,126484,126485],{},"（1）分类：无序列表、有序列表、自定义列表",[21,126487,126488],{},"①无序列表：",[1426,126490],{"style":126377,"src":126491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[21,126493,126494],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[21,126496,126497,126500,126501,126504,126505,126507],{},[73,126498,126499],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[73,126502,126503],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[73,126506,126499],{},"中输入其他标签或文字是不对的",[21,126509,126510,126512],{},[73,126511,126503],{},"之间相当于一个容器，可以容纳所有元素",[21,126514,126515],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[21,126517,126518],{},"在css中去除前边的小圆点采用如下代码:",[66,126520,126524],{"className":126521,"code":126522,"language":126523,"meta":71,"style":71},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[73,126525,126526],{"__ignoreMap":71},[76,126527,126528,126531],{"class":78,"line":79},[76,126529,126530],{"class":51269},"list-style",[76,126532,126533],{"class":86},": none;\n",[21,126535,126536],{},"②有序列表：",[1426,126538],{"style":126377,"src":126539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[21,126541,126542],{},"③自定义列表：",[1426,126544],{"style":126377,"src":126545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1426,126547],{"style":126377,"src":126548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[16,126550,126552],{"id":126551},"_54-表单标签","5.4 表单标签",[21,126554,126555],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[21,126557,126558,126559,126562],{},"（1）表单域：包含单元素的区域，",[73,126560,126561],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1426,126564],{"style":126377,"src":126565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[21,126567,126568],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[21,126570,126571],{},"表单元素提交必须有name属性",[21,126573,126574],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[21,126576,126577],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[21,126579,77195,126580,126583],{},[73,126581,126582],{},"\u003Cinput>","输入表单元素",[1426,126585],{"style":126377,"src":126586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1426,126588],{"style":126377,"src":126589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[21,126591,126592,126593],{},"单选按钮：",[73,126594,126595],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1426,126597],{"style":126377,"src":126598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[21,126600,126601],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1426,126603],{"style":126377,"src":126604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[21,126606,126607,126610],{},[237,126608,126609],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[21,126612,126613],{},"②select下拉表单元素：可以节约页面控件",[1426,126615],{"style":126377,"src":126616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[21,126618,126619,13762,126621,126624,126625,126627,126628,126630],{},[237,126620,117],{},[73,126622,126623],{},"\u003Cselect>","中至少包含一对",[73,126626,102683],{},"；在",[73,126629,102683],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[21,126632,126633,126634,126637],{},"③",[73,126635,126636],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1426,126639],{"style":126377,"src":126640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[21,126642,126643],{},"3行20列",[16,126645,126647,126648,102662],{"id":126646},"_55-lable标签","5.5 ",[73,126649,126650],{},"\u003Clable>",[21,126652,126653,126654,126656,126657,126659],{},"它不是表单标签，但常常与表单标签搭配使用，",[73,126655,126650],{},"标签用于绑定一个表单标签，当点击",[73,126658,126650],{},"标签内的文本",[21,126661,126662],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1426,126664],{"style":126377,"src":126665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1426,126667],{"style":126377,"src":126668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[16,126670,126672],{"id":126671},"_56-实例","5.6 实例",[1426,126674],{"style":126377,"src":126675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5092,126677,126678],{},"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":71,"searchDepth":96,"depth":96,"links":126680},[126681,126682,126683,126684,126685,126687],{"id":126402,"depth":96,"text":126403},{"id":126459,"depth":96,"text":126460},{"id":126481,"depth":96,"text":126482},{"id":126551,"depth":96,"text":126552},{"id":126646,"depth":96,"text":126686},"5.5 \u003Clable>标签",{"id":126671,"depth":96,"text":126672},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126394,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126694,"title":126695,"body":126696,"description":23344,"extension":5123,"meta":127245,"navigation":2364,"path":127246,"seo":127247,"stem":127248,"__hash__":127249},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":9,"value":126697,"toc":127220},[126698,126701,126705,126708,126711,126715,126718,126721,126724,126727,126730,126733,126736,126740,126743,126747,126750,126753,126756,126760,126763,126766,126769,126775,126778,126781,126784,126787,126790,126793,126796,126829,126833,126836,126839,126842,126846,126849,126852,126855,126858,126861,126865,126868,126871,126874,126878,126881,126885,126888,126892,126895,126900,126904,126907,126911,126914,126917,126920,126923,126950,126953,126957,126960,126963,126968,126971,126974,126978,126981,126986,126989,126992,126995,126999,127002,127005,127008,127012,127015,127018,127021,127025,127029,127032,127072,127075,127079,127086,127089,127093,127096,127142,127146,127149,127152,127155,127183,127187,127190,127217],[12,126699,126695],{"id":126700},"_6-css语法与文本样式",[16,126702,126704],{"id":126703},"_61-css语法规范","6.1 css语法规范",[21,126706,126707],{},"由两部分组成，选择器及一条或多条声明",[1426,126709],{"style":126377,"src":126710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[21,126712,126713],{},[237,126714,117],{},[21,126716,126717],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[21,126719,126720],{},"②属性与属性值以“键值对”的形式出现",[21,126722,126723],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[21,126725,126726],{},"④属性和属性值之间用英文“;”分开",[1426,126728],{"style":126377,"src":126729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1426,126731],{"style":126377,"src":126732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1426,126734],{"style":126377,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[16,126737,126739],{"id":126738},"_62-css选择器","6.2 css选择器",[21,126741,126742],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[46,126744,126746],{"id":126745},"_621-标签选择器","6.2.1 标签选择器",[21,126748,126749],{},"①优点：能快速为页面中同类型的标签统一设置样式",[21,126751,126752],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1426,126754],{"style":126377,"src":126755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[46,126757,126759],{"id":126758},"_622-类选择器","6.2.2 类选择器",[21,126761,126762],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[21,126764,126765],{},"②样例",[1426,126767],{"style":126377,"src":126768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[21,126770,126771,126772,126774],{},"③ ",[237,126773,126609],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[21,126776,126777],{},"可以理解为给这个标签起了个名字，来表示；",[21,126779,126780],{},"长名称或词组可以使用横线来为选择器命名；",[21,126782,126783],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[21,126785,126786],{},"命名要有意义；",[1426,126788],{"style":126377,"src":126789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[21,126791,126792],{},"类选择器也可以指定特殊的元素p.center{}",[21,126794,126795],{},"p.center和.center都对",[66,126797,126799],{"className":126521,"code":126798,"language":126523,"meta":71,"style":71},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[73,126800,126801,126806,126815,126825],{"__ignoreMap":71},[76,126802,126803],{"class":78,"line":79},[76,126804,126805],{"class":146},"\u002F* 类选择器指定特殊元素 *\u002F\n",[76,126807,126808,126810,126813],{"class":78,"line":96},[76,126809,21],{"class":51269},[76,126811,126812],{"class":1927},".center",[76,126814,15539],{"class":86},[76,126816,126817,126819,126821,126823],{"class":78,"line":1143},[76,126818,70495],{"class":136},[76,126820,51406],{"class":86},[76,126822,51561],{"class":136},[76,126824,1254],{"class":86},[76,126826,126827],{"class":78,"line":1158},[76,126828,1529],{"class":86},[46,126830,126832],{"id":126831},"_623-多类名使用","6.2.3 多类名使用",[21,126834,126835],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1426,126837],{"style":126377,"src":126838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[21,126840,126841],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[46,126843,126845],{"id":126844},"_624-id选择器","6.2.4 id选择器",[21,126847,126848],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[21,126850,126851],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1426,126853],{"style":126377,"src":126854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[21,126856,126857],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[21,126859,126860],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[46,126862,126864],{"id":126863},"_625-通配符选择器","6.2.5 通配符选择器",[21,126866,126867],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[21,126869,126870],{},"* {",[21,126872,126873],{},"color=\"red\"}",[46,126875,126877],{"id":126876},"_626-总结","6.2.6 总结",[1426,126879],{"style":126377,"src":126880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[16,126882,126884],{"id":126883},"_63-css字体属性","6.3 css字体属性",[21,126886,126887],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[46,126889,126891],{"id":126890},"_631-字体系列","6.3.1 字体系列",[21,126893,126894],{},"font-family: '宋体';",[21,126896,126897,126899],{},[237,126898,117],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[46,126901,126903],{"id":126902},"_632-字体大小","6.3.2 字体大小",[21,126905,126906],{},"font-size: 20px",[21,126908,126909,26442],{},[237,126910,126609],{},[21,126912,126913],{},"①px（像素）大小是网页的最常用单位",[21,126915,126916],{},"②谷歌浏览器默认为16px",[21,126918,126919],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[21,126921,126922],{},"④可以给body指定整个页面的大小：会自动引用",[66,126924,126926],{"className":126521,"code":126925,"language":126523,"meta":71,"style":71},"body {\n  font-size: 16px;\n}\n",[73,126927,126928,126934,126946],{"__ignoreMap":71},[76,126929,126930,126932],{"class":78,"line":79},[76,126931,51769],{"class":51269},[76,126933,15539],{"class":86},[76,126935,126936,126938,126940,126942,126944],{"class":78,"line":96},[76,126937,70595],{"class":136},[76,126939,51406],{"class":86},[76,126941,689],{"class":136},[76,126943,51461],{"class":82},[76,126945,1254],{"class":86},[76,126947,126948],{"class":78,"line":1143},[76,126949,1529],{"class":86},[21,126951,126952],{},"⑤标题标签比较特殊，需要单独指定大小",[46,126954,126956],{"id":126955},"_633-字体粗细","6.3.3 字体粗细",[21,126958,126959],{},"font-weight: bold;",[21,126961,126962],{},"font-weight: 100；",[21,126964,126965,126967],{},[237,126966,117],{}," ①粗体文字变细：尽量别用normal，多用数字",[21,126969,126970],{},"font-weight= 400;",[21,126972,126973],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[46,126975,126977],{"id":126976},"_634-文字样式","6.3.4 文字样式",[21,126979,126980],{},"font-style: normal；",[21,126982,126983,26442],{},[237,126984,126985],{},"属性值",[21,126987,126988],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[21,126990,126991],{},"②italic：浏览器会显示斜体的字体样式",[1426,126993],{"style":126377,"src":126994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[46,126996,126998],{"id":126997},"_635-字体符合属性","6.3.5 字体符合属性",[1426,127000],{"style":126377,"src":127001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1426,127003],{"style":126377,"src":127004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[21,127006,127007],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[21,127009,127010,26442],{},[237,127011,126609],{},[21,127013,127014],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[21,127016,127017],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[21,127019,127020],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[16,127022,127024],{"id":127023},"_64-css-test文本属性","6.4 css test文本属性",[46,127026,127028],{"id":127027},"_641-文本颜色","6.4.1 文本颜色",[21,127030,127031],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[66,127033,127035],{"className":126521,"code":127034,"language":126523,"meta":71,"style":71},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[73,127036,127037,127042,127048,127058,127063,127068],{"__ignoreMap":71},[76,127038,127039],{"class":78,"line":79},[76,127040,127041],{"class":146},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[76,127043,127044,127046],{"class":78,"line":96},[76,127045,21],{"class":51269},[76,127047,15539],{"class":86},[76,127049,127050,127052,127054,127056],{"class":78,"line":1143},[76,127051,70874],{"class":136},[76,127053,51406],{"class":86},[76,127055,57390],{"class":136},[76,127057,1254],{"class":86},[76,127059,127060],{"class":78,"line":1158},[76,127061,127062],{"class":146},"  \u002F* color: #ff0000; *\u002F\n",[76,127064,127065],{"class":78,"line":1164},[76,127066,127067],{"class":146},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[76,127069,127070],{"class":78,"line":1178},[76,127071,1529],{"class":86},[1426,127073],{"style":126377,"src":127074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[46,127076,127078],{"id":127077},"_642-对齐文本","6.4.2 对齐文本",[21,127080,127081,127082,127085],{},"text-align属于用于设置元素内文本内容的 ",[237,127083,127084],{},"水平对齐"," 方式",[21,127087,127088],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[46,127090,127092],{"id":127091},"_643-装饰文本","6.4.3 装饰文本",[21,127094,127095],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[66,127097,127099],{"className":126521,"code":127098,"language":126523,"meta":71,"style":71},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[73,127100,127101,127107,127117,127121,127127,127138],{"__ignoreMap":71},[76,127102,127103,127105],{"class":78,"line":79},[76,127104,326],{"class":51269},[76,127106,15539],{"class":86},[76,127108,127109,127111,127113,127115],{"class":78,"line":96},[76,127110,70471],{"class":136},[76,127112,51406],{"class":86},[76,127114,54706],{"class":136},[76,127116,1254],{"class":86},[76,127118,127119],{"class":78,"line":1143},[76,127120,1529],{"class":86},[76,127122,127123,127125],{"class":78,"line":1158},[76,127124,21],{"class":51269},[76,127126,15539],{"class":86},[76,127128,127129,127131,127133,127136],{"class":78,"line":1164},[76,127130,70471],{"class":136},[76,127132,51406],{"class":86},[76,127134,127135],{"class":136},"underline",[76,127137,1254],{"class":86},[76,127139,127140],{"class":78,"line":1178},[76,127141,1529],{"class":86},[46,127143,127145],{"id":127144},"_644-文本缩进","6.4.4 文本缩进",[21,127147,127148],{},"实现文本的第一行首行缩进自己指定的距离",[21,127150,127151],{},"20px往右边走；-20px往左边走",[21,127153,127154],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[66,127156,127158],{"className":126521,"code":127157,"language":126523,"meta":71,"style":71},"p {\n  text-indent: 2em;\n}\n",[73,127159,127160,127166,127179],{"__ignoreMap":71},[76,127161,127162,127164],{"class":78,"line":79},[76,127163,21],{"class":51269},[76,127165,15539],{"class":86},[76,127167,127168,127171,127173,127175,127177],{"class":78,"line":96},[76,127169,127170],{"class":136},"  text-indent",[76,127172,51406],{"class":86},[76,127174,165],{"class":136},[76,127176,23521],{"class":82},[76,127178,1254],{"class":86},[76,127180,127181],{"class":78,"line":1143},[76,127182,1529],{"class":86},[46,127184,127186],{"id":127185},"_645-行间距","6.4.5 行间距",[21,127188,127189],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[66,127191,127193],{"className":126521,"code":127192,"language":126523,"meta":71,"style":71},"p {\n  line-height: 1.6;\n}\n",[73,127194,127195,127201,127213],{"__ignoreMap":71},[76,127196,127197,127199],{"class":78,"line":79},[76,127198,21],{"class":51269},[76,127200,15539],{"class":86},[76,127202,127203,127206,127208,127211],{"class":78,"line":96},[76,127204,127205],{"class":136},"  line-height",[76,127207,51406],{"class":86},[76,127209,127210],{"class":136},"1.6",[76,127212,1254],{"class":86},[76,127214,127215],{"class":78,"line":1143},[76,127216,1529],{"class":86},[5092,127218,127219],{},"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":71,"searchDepth":96,"depth":96,"links":127221},[127222,127223,127231,127238],{"id":126703,"depth":96,"text":126704},{"id":126738,"depth":96,"text":126739,"children":127224},[127225,127226,127227,127228,127229,127230],{"id":126745,"depth":1143,"text":126746},{"id":126758,"depth":1143,"text":126759},{"id":126831,"depth":1143,"text":126832},{"id":126844,"depth":1143,"text":126845},{"id":126863,"depth":1143,"text":126864},{"id":126876,"depth":1143,"text":126877},{"id":126883,"depth":96,"text":126884,"children":127232},[127233,127234,127235,127236,127237],{"id":126890,"depth":1143,"text":126891},{"id":126902,"depth":1143,"text":126903},{"id":126955,"depth":1143,"text":126956},{"id":126976,"depth":1143,"text":126977},{"id":126997,"depth":1143,"text":126998},{"id":127023,"depth":96,"text":127024,"children":127239},[127240,127241,127242,127243,127244],{"id":127027,"depth":1143,"text":127028},{"id":127077,"depth":1143,"text":127078},{"id":127091,"depth":1143,"text":127092},{"id":127144,"depth":1143,"text":127145},{"id":127185,"depth":1143,"text":127186},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126695,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127251,"title":127252,"body":127253,"description":23344,"extension":5123,"meta":127902,"navigation":2364,"path":127903,"seo":127904,"stem":127905,"__hash__":127906},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":9,"value":127254,"toc":127883},[127255,127258,127262,127266,127326,127330,127340,127343,127346,127350,127375,127379,127382,127385,127388,127391,127394,127398,127401,127404,127446,127449,127475,127481,127484,127488,127492,127498,127501,127504,127507,127510,127513,127516,127561,127565,127568,127571,127575,127579,127608,127611,127616,127619,127622,127625,127628,127632,127636,127639,127641,127644,127648,127651,127655,127658,127661,127664,127668,127672,127678,127688,127691,127694,127697,127700,127703,127826,127834,127842,127880],[12,127256,127252],{"id":127257},"_7-css引入方式与选择器进阶",[16,127259,127261],{"id":127260},"_71-css引入方式","7.1 css引入方式",[46,127263,127265],{"id":127264},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[66,127267,127271],{"className":127268,"code":127269,"language":127270,"meta":71,"style":71},"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",[73,127272,127273,127281,127288,127300,127313,127318],{"__ignoreMap":71},[76,127274,127275,127277,127279],{"class":78,"line":79},[76,127276,998],{"class":86},[76,127278,5092],{"class":51269},[76,127280,51276],{"class":86},[76,127282,127283,127286],{"class":78,"line":96},[76,127284,127285],{"class":51269},"  h1",[76,127287,15539],{"class":86},[76,127289,127290,127293,127295,127298],{"class":78,"line":1143},[76,127291,127292],{"class":136},"    color",[76,127294,51406],{"class":86},[76,127296,127297],{"class":136},"blue",[76,127299,1254],{"class":86},[76,127301,127302,127305,127307,127309,127311],{"class":78,"line":1158},[76,127303,127304],{"class":136},"    font-size",[76,127306,51406],{"class":86},[76,127308,888],{"class":136},[76,127310,51461],{"class":82},[76,127312,1254],{"class":86},[76,127314,127315],{"class":78,"line":1164},[76,127316,127317],{"class":86},"  }\n",[76,127319,127320,127322,127324],{"class":78,"line":1178},[76,127321,51754],{"class":86},[76,127323,5092],{"class":51269},[76,127325,51276],{"class":86},[21,127327,127328,26442],{},[237,127329,126609],{},[21,127331,77195,127332,127335,127336,127339],{},[73,127333,127334],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[73,127337,127338],{},"\u003Chead>","标签中",[21,127341,127342],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[21,127344,127345],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[46,127347,127349],{"id":127348},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[66,127351,127353],{"className":127268,"code":127352,"language":127270,"meta":71,"style":71},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[73,127354,127355],{"__ignoreMap":71},[76,127356,127357,127359,127361,127363,127365,127368,127371,127373],{"class":78,"line":79},[76,127358,998],{"class":86},[76,127360,21],{"class":51269},[76,127362,62595],{"class":1927},[76,127364,133],{"class":86},[76,127366,127367],{"class":192},"\"color: red; font-size: 16px;\"",[76,127369,127370],{"class":86},">这是一个段落\u003C\u002F",[76,127372,21],{"class":51269},[76,127374,51276],{"class":86},[21,127376,127377,26442],{},[237,127378,126609],{},[21,127380,127381],{},"①style其实就是标签的属性",[21,127383,127384],{},"②在双引号中间，写法要符合css规范",[21,127386,127387],{},"③可以控制当前的标签设置样式",[21,127389,127390],{},"④书写繁琐，简单时才用",[21,127392,127393],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[46,127395,127397],{"id":127396},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[21,127399,127400],{},"使用最多，单独建一个css文件，然后html引用",[21,127402,127403],{},"①css文件部分： style.css",[66,127405,127407],{"className":126521,"code":127406,"language":126523,"meta":71,"style":71},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[73,127408,127409,127414,127420,127430,127442],{"__ignoreMap":71},[76,127410,127411],{"class":78,"line":79},[76,127412,127413],{"class":146},"\u002F* style.css *\u002F\n",[76,127415,127416,127418],{"class":78,"line":96},[76,127417,12],{"class":51269},[76,127419,15539],{"class":86},[76,127421,127422,127424,127426,127428],{"class":78,"line":1143},[76,127423,70874],{"class":136},[76,127425,51406],{"class":86},[76,127427,127297],{"class":136},[76,127429,1254],{"class":86},[76,127431,127432,127434,127436,127438,127440],{"class":78,"line":1158},[76,127433,70595],{"class":136},[76,127435,51406],{"class":86},[76,127437,888],{"class":136},[76,127439,51461],{"class":82},[76,127441,1254],{"class":86},[76,127443,127444],{"class":78,"line":1164},[76,127445,1529],{"class":86},[21,127447,127448],{},"②html部分",[66,127450,127452],{"className":127268,"code":127451,"language":127270,"meta":71,"style":71},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[73,127453,127454],{"__ignoreMap":71},[76,127455,127456,127458,127460,127462,127464,127466,127468,127470,127473],{"class":78,"line":79},[76,127457,998],{"class":86},[76,127459,68974],{"class":51269},[76,127461,68977],{"class":1927},[76,127463,133],{"class":86},[76,127465,68982],{"class":192},[76,127467,61026],{"class":1927},[76,127469,133],{"class":86},[76,127471,127472],{"class":192},"\"style.css\"",[76,127474,51276],{"class":86},[21,127476,127477,127480],{},[73,127478,127479],{},"\u003Chr>","水平线标签（但是不常用！）",[21,127482,127483],{},"ctrl+0回到页面原来大小",[16,127485,127487],{"id":127486},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[46,127489,127491],{"id":127490},"_721-快速生成html","7.2.1 快速生成html",[21,127493,127494,127495],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[73,127496,127497],{},"\u003Cdiv>``\u003C\u002Fdiv>",[21,127499,127500],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[21,127502,127503],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[21,127505,127506],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[21,127508,127509],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[21,127511,127512],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[21,127514,127515],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[66,127517,127519],{"className":127268,"code":127518,"language":127270,"meta":71,"style":71},"\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",[73,127520,127521,127526,127531,127536,127541,127546,127551,127556],{"__ignoreMap":71},[76,127522,127523],{"class":78,"line":79},[76,127524,127525],{"class":146},"\u003C!-- Emmet 语法示例 -->\n",[76,127527,127528],{"class":78,"line":96},[76,127529,127530],{"class":146},"\u003C!-- div*3        → 生成3个div -->\n",[76,127532,127533],{"class":78,"line":1143},[76,127534,127535],{"class":146},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[76,127537,127538],{"class":78,"line":1158},[76,127539,127540],{"class":146},"\u003C!-- div+p        → 兄弟div和p -->\n",[76,127542,127543],{"class":78,"line":1164},[76,127544,127545],{"class":146},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[76,127547,127548],{"class":78,"line":1178},[76,127549,127550],{"class":146},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[76,127552,127553],{"class":78,"line":1184},[76,127554,127555],{"class":146},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[76,127557,127558],{"class":78,"line":1275},[76,127559,127560],{"class":146},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[46,127562,127564],{"id":127563},"_722-快速生成css","7.2.2 快速生成css",[21,127566,127567],{},"简写开头",[21,127569,127570],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[16,127572,127574],{"id":127573},"_73-css复合选择器","7.3 css复合选择器",[46,127576,127578],{"id":127577},"_731-后代选择器","7.3.1 后代选择器",[66,127580,127582],{"className":126521,"code":127581,"language":126523,"meta":71,"style":71},".parent .child {\n  color: blue;\n}\n",[73,127583,127584,127594,127604],{"__ignoreMap":71},[76,127585,127586,127589,127592],{"class":78,"line":79},[76,127587,127588],{"class":1927},".parent",[76,127590,127591],{"class":1927}," .child",[76,127593,15539],{"class":86},[76,127595,127596,127598,127600,127602],{"class":78,"line":96},[76,127597,70874],{"class":136},[76,127599,51406],{"class":86},[76,127601,127297],{"class":136},[76,127603,1254],{"class":86},[76,127605,127606],{"class":78,"line":1143},[76,127607,1529],{"class":86},[21,127609,127610],{},"元素1 元素2 {样式声明}",[21,127612,127613],{},[237,127614,127615],{},"注意点:",[21,127617,127618],{},"①元素1和元素2中间用空格隔开",[21,127620,127621],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[21,127623,127624],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[21,127626,127627],{},"④元素1和元素2可以是任意基础选择器",[46,127629,127631],{"id":127630},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[21,127633,127634],{},[237,127635,127615],{},[21,127637,127638],{},"①元素1和元素2中间用大于号隔开",[21,127640,127621],{},[21,127642,127643],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[46,127645,127647],{"id":127646},"_733-并集选择器","7.3.3 并集选择器",[21,127649,127650],{},"元素1，元素2 {样式声明}",[21,127652,127653],{},[237,127654,127615],{},[21,127656,127657],{},"①元素1和元素2中间用逗号隔开",[21,127659,127660],{},"②逗号可以理解为和的意思",[21,127662,127663],{},"③并集选择器通常用于集体声明",[46,127665,127667],{"id":127666},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[21,127669,127670],{},[237,127671,127615],{},[21,127673,127674,127675,127677],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68974,127676],{},"－:visited－:hover－:active。",[21,127679,127680,127681,127684,127685,25709],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127682,127683],"hover",{}," 、 ",[127686,127687],"first-child",{},[21,127689,127690],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[21,127692,127693],{},"link对没访问的进行设置",[21,127695,127696],{},"vistied对已访问的进行改变",[21,127698,127699],{},"hover鼠标经过就会变",[21,127701,127702],{},"active常按(点)就会变",[66,127704,127706],{"className":126521,"code":127705,"language":126523,"meta":71,"style":71},"\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",[73,127707,127708,127713,127722,127732,127742,127746,127755,127766,127770,127778,127788,127798,127802,127811,127822],{"__ignoreMap":71},[76,127709,127710],{"class":78,"line":79},[76,127711,127712],{"class":146},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[76,127714,127715,127717,127720],{"class":78,"line":96},[76,127716,326],{"class":51269},[76,127718,127719],{"class":1927},":link",[76,127721,15539],{"class":86},[76,127723,127724,127726,127728,127730],{"class":78,"line":1143},[76,127725,70874],{"class":136},[76,127727,51406],{"class":86},[76,127729,62338],{"class":136},[76,127731,1254],{"class":86},[76,127733,127734,127736,127738,127740],{"class":78,"line":1158},[76,127735,70471],{"class":136},[76,127737,51406],{"class":86},[76,127739,54706],{"class":136},[76,127741,1254],{"class":86},[76,127743,127744],{"class":78,"line":1164},[76,127745,1529],{"class":86},[76,127747,127748,127750,127753],{"class":78,"line":1178},[76,127749,326],{"class":51269},[76,127751,127752],{"class":1927},":visited",[76,127754,15539],{"class":86},[76,127756,127757,127759,127761,127764],{"class":78,"line":1184},[76,127758,70874],{"class":136},[76,127760,51406],{"class":86},[76,127762,127763],{"class":136},"purple",[76,127765,1254],{"class":86},[76,127767,127768],{"class":78,"line":1275},[76,127769,1529],{"class":86},[76,127771,127772,127774,127776],{"class":78,"line":1281},[76,127773,326],{"class":51269},[76,127775,60909],{"class":1927},[76,127777,15539],{"class":86},[76,127779,127780,127782,127784,127786],{"class":78,"line":1293},[76,127781,70874],{"class":136},[76,127783,51406],{"class":86},[76,127785,54858],{"class":136},[76,127787,1254],{"class":86},[76,127789,127790,127792,127794,127796],{"class":78,"line":1576},[76,127791,70471],{"class":136},[76,127793,51406],{"class":86},[76,127795,127135],{"class":136},[76,127797,1254],{"class":86},[76,127799,127800],{"class":78,"line":1581},[76,127801,1529],{"class":86},[76,127803,127804,127806,127809],{"class":78,"line":1587},[76,127805,326],{"class":51269},[76,127807,127808],{"class":1927},":active",[76,127810,15539],{"class":86},[76,127812,127813,127815,127817,127820],{"class":78,"line":1592},[76,127814,70874],{"class":136},[76,127816,51406],{"class":86},[76,127818,127819],{"class":136},"green",[76,127821,1254],{"class":86},[76,127823,127824],{"class":78,"line":1606},[76,127825,1529],{"class":86},[46,127827,127829,127830,127833],{"id":127828},"_735-伪类选择器","7.3.5 ",[127831,127832],"focus",{},"伪类选择器",[21,127835,127836,127838,127839,127841],{},[127831,127837],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[73,127840,126582],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[66,127843,127845],{"className":126521,"code":127844,"language":126523,"meta":71,"style":71},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[73,127846,127847,127855,127866,127876],{"__ignoreMap":71},[76,127848,127849,127851,127853],{"class":78,"line":79},[76,127850,53790],{"class":51269},[76,127852,61869],{"class":1927},[76,127854,15539],{"class":86},[76,127856,127857,127860,127862,127864],{"class":78,"line":96},[76,127858,127859],{"class":136},"  border-color",[76,127861,51406],{"class":86},[76,127863,54858],{"class":136},[76,127865,1254],{"class":86},[76,127867,127868,127870,127872,127874],{"class":78,"line":1143},[76,127869,70767],{"class":136},[76,127871,51406],{"class":86},[76,127873,54706],{"class":136},[76,127875,1254],{"class":86},[76,127877,127878],{"class":78,"line":1158},[76,127879,1529],{"class":86},[5092,127881,127882],{},"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":71,"searchDepth":96,"depth":96,"links":127884},[127885,127890,127894],{"id":127260,"depth":96,"text":127261,"children":127886},[127887,127888,127889],{"id":127264,"depth":1143,"text":127265},{"id":127348,"depth":1143,"text":127349},{"id":127396,"depth":1143,"text":127397},{"id":127486,"depth":96,"text":127487,"children":127891},[127892,127893],{"id":127490,"depth":1143,"text":127491},{"id":127563,"depth":1143,"text":127564},{"id":127573,"depth":96,"text":127574,"children":127895},[127896,127897,127898,127899,127900],{"id":127577,"depth":1143,"text":127578},{"id":127630,"depth":1143,"text":127631},{"id":127646,"depth":1143,"text":127647},{"id":127666,"depth":1143,"text":127667},{"id":127828,"depth":1143,"text":127901},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127252,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127908,"title":127909,"body":127910,"description":23344,"extension":5123,"meta":129833,"navigation":2364,"path":129834,"seo":129835,"stem":129836,"__hash__":129837},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":9,"value":127911,"toc":129807},[127912,127915,127919,127928,127932,127958,127963,127966,127969,127972,127975,127979,127982,127992,128000,128004,128039,128044,128047,128050,128053,128056,128060,128063,128072,128076,128089,128094,128097,128100,128103,128107,128110,128114,128117,128172,128175,128206,128209,128263,128267,128270,128436,128559,128562,128565,128568,128571,128575,128578,128582,128585,128588,128592,128595,128626,128653,128681,128684,128688,128714,128757,128761,128855,128858,128885,128888,128891,128894,128897,128900,128903,128906,128909,128912,128916,128973,129000,129004,129052,129056,129097,129099,129102,129105,129108,129111,129115,129207,129210,129213,129216,129220,129343,129544,129548,129552,129555,129558,129561,129565,129568,129571,129596,129599,129602,129605,129608,129611,129615,129623,129685,129688,129746,129749,129752,129755,129758,129761,129764,129767,129804],[12,127913,127909],{"id":127914},"_8-css显示模式与背景特性",[16,127916,127918],{"id":127917},"_81-css元素显示模式","8.1 css元素显示模式",[21,127920,127921,127922,127924,127925,127927],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[73,127923,126132],{},"自己占一行，比如一行可以放多个",[73,127926,126135],{},"，HTML 元素一般分为块元素和行内元素两种类型",[46,127929,127931],{"id":127930},"_811-块元素","8.1.1 块元素",[21,127933,127934,127935,127937,127938,300,127941,300,127943,300,127945,300,127948,300,127951,127954,127955,127957],{},"常见的块元素有",[73,127936,126036],{},"~",[73,127939,127940],{},"\u003Ch6>",[73,127942,126062],{},[73,127944,126132],{},[73,127946,127947],{},"\u003Cul>",[73,127949,127950],{},"\u003Col>",[73,127952,127953],{},"\u003Cli>","等，其中 ",[73,127956,126132],{}," 标签是最典型的块元素",[21,127959,127960],{},[237,127961,127962],{},"块级元素的特点：",[21,127964,127965],{},"① 比较霸道，自己独占一行。",[21,127967,127968],{},"② 高度，宽度、外边距以及内边距都可以控制。",[21,127970,127971],{},"③ 宽度默认是容器（父级宽度）的100%。",[21,127973,127974],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[21,127976,127977],{},[237,127978,117],{},[21,127980,127981],{},"①文字类的元素内不能使用块级元素",[21,127983,77218,127984,127986,127987,127989,127990],{},[73,127985,126062],{}," 标签主要用于存放文字，因此 ",[73,127988,126062],{}," 里面不能放块级元素，特别是不能放",[73,127991,126132],{},[21,127993,127994,127995,127937,127997,127999],{},"⑥同理， ",[73,127996,126036],{},[73,127998,127940],{},"等都是文字类块级标签，里面也不能放其他块级元素",[46,128001,128003],{"id":128002},"_812-行内元素","8.1.2 行内元素",[21,128005,128006,128007,300,128009,300,128012,300,128015,300,128018,300,128021,300,128024,300,128027,300,128030,300,128033,128035,128036,128038],{},"常见的行内元素有 ",[73,128008,126294],{},[73,128010,128011],{},"\u003Cstrong>",[73,128013,128014],{},"\u003Cb>",[73,128016,128017],{},"\u003Cem>",[73,128019,128020],{},"\u003Ci>",[73,128022,128023],{},"\u003Cdel>",[73,128025,128026],{},"\u003Cs>",[73,128028,128029],{},"\u003Cins>",[73,128031,128032],{},"\u003Cu>",[73,128034,126135],{}," 等，其中 ",[73,128037,126135],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[21,128040,128041],{},[237,128042,128043],{},"特点：",[21,128045,128046],{},"① 相邻行内元素在一行上，一行可以显示多个。",[21,128048,128049],{},"② 高、宽直接设置是无效的。",[21,128051,128052],{},"③ 默认宽度就是它本身内容的宽度。",[21,128054,128055],{},"④ 行内元素只能容纳文本或其他行内元素。",[21,128057,128058],{},[237,128059,117],{},[21,128061,128062],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[21,128064,128065,128066,128068,128069,128071],{},"②特殊情况链接 ",[73,128067,126294],{}," 里面可以放块级元素，但是给 ",[73,128070,126294],{}," 转换一下块级模式最安全",[46,128073,128075],{"id":128074},"_813-行内块元素","8.1.3 行内块元素",[21,128077,128078,128079,300,128082,300,128085,128088],{},"在行内元素中有几个特殊的标签 —— ",[73,128080,128081],{},"\u003Cimg \u002F>",[73,128083,128084],{},"\u003Cinput \u002F>",[73,128086,128087],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[21,128090,128091],{},[237,128092,128093],{},"行内块元素的特点：",[21,128095,128096],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[21,128098,128099],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[21,128101,128102],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[46,128104,128106],{"id":128105},"_814-总结","8.1.4 总结",[1426,128108],{"style":126377,"src":128109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[46,128111,128113],{"id":128112},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[21,128115,128116],{},"①转换为块元素：display:block;",[66,128118,128120],{"className":126521,"code":128119,"language":126523,"meta":71,"style":71},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[73,128121,128122,128127,128133,128144,128156,128168],{"__ignoreMap":71},[76,128123,128124],{"class":78,"line":79},[76,128125,128126],{"class":146},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[76,128128,128129,128131],{"class":78,"line":96},[76,128130,326],{"class":51269},[76,128132,15539],{"class":86},[76,128134,128135,128138,128140,128142],{"class":78,"line":1143},[76,128136,128137],{"class":136},"  display",[76,128139,51406],{"class":86},[76,128141,60838],{"class":136},[76,128143,1254],{"class":86},[76,128145,128146,128148,128150,128152,128154],{"class":78,"line":1158},[76,128147,70537],{"class":136},[76,128149,51406],{"class":86},[76,128151,399],{"class":136},[76,128153,51461],{"class":82},[76,128155,1254],{"class":86},[76,128157,128158,128160,128162,128164,128166],{"class":78,"line":1164},[76,128159,70757],{"class":136},[76,128161,51406],{"class":86},[76,128163,489],{"class":136},[76,128165,51461],{"class":82},[76,128167,1254],{"class":86},[76,128169,128170],{"class":78,"line":1178},[76,128171,1529],{"class":86},[21,128173,128174],{},"②转换为行内元素：display:inline;",[66,128176,128178],{"className":126521,"code":128177,"language":126523,"meta":71,"style":71},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[73,128179,128180,128185,128191,128202],{"__ignoreMap":71},[76,128181,128182],{"class":78,"line":79},[76,128183,128184],{"class":146},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[76,128186,128187,128189],{"class":78,"line":96},[76,128188,51580],{"class":51269},[76,128190,15539],{"class":86},[76,128192,128193,128195,128197,128200],{"class":78,"line":1143},[76,128194,128137],{"class":136},[76,128196,51406],{"class":86},[76,128198,128199],{"class":136},"inline",[76,128201,1254],{"class":86},[76,128203,128204],{"class":78,"line":1158},[76,128205,1529],{"class":86},[21,128207,128208],{},"③转换为行内块：display:inline-block;",[66,128210,128212],{"className":126521,"code":128211,"language":126523,"meta":71,"style":71},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[73,128213,128214,128219,128225,128235,128247,128259],{"__ignoreMap":71},[76,128215,128216],{"class":78,"line":79},[76,128217,128218],{"class":146},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[76,128220,128221,128223],{"class":78,"line":96},[76,128222,76],{"class":51269},[76,128224,15539],{"class":86},[76,128226,128227,128229,128231,128233],{"class":78,"line":1143},[76,128228,128137],{"class":136},[76,128230,51406],{"class":86},[76,128232,72352],{"class":136},[76,128234,1254],{"class":86},[76,128236,128237,128239,128241,128243,128245],{"class":78,"line":1158},[76,128238,70537],{"class":136},[76,128240,51406],{"class":86},[76,128242,700],{"class":136},[76,128244,51461],{"class":82},[76,128246,1254],{"class":86},[76,128248,128249,128251,128253,128255,128257],{"class":78,"line":1164},[76,128250,70757],{"class":136},[76,128252,51406],{"class":86},[76,128254,1039],{"class":136},[76,128256,51461],{"class":82},[76,128258,1254],{"class":86},[76,128260,128261],{"class":78,"line":1178},[76,128262,1529],{"class":86},[46,128264,128266],{"id":128265},"_816-小米侧边栏","8.1.6 小米侧边栏",[1426,128268],{"style":126377,"src":128269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[66,128271,128273],{"className":127268,"code":128272,"language":127270,"meta":71,"style":71},"\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",[73,128274,128275,128280,128295,128314,128333,128352,128371,128390,128409,128428],{"__ignoreMap":71},[76,128276,128277],{"class":78,"line":79},[76,128278,128279],{"class":146},"\u003C!-- 小米侧边栏案例 -->\n",[76,128281,128282,128284,128286,128288,128290,128293],{"class":78,"line":96},[76,128283,998],{"class":86},[76,128285,51580],{"class":51269},[76,128287,53455],{"class":1927},[76,128289,133],{"class":86},[76,128291,128292],{"class":192},"\"sidebar\"",[76,128294,51276],{"class":86},[76,128296,128297,128299,128301,128303,128305,128307,128310,128312],{"class":78,"line":1143},[76,128298,52113],{"class":86},[76,128300,326],{"class":51269},[76,128302,61026],{"class":1927},[76,128304,133],{"class":86},[76,128306,61031],{"class":192},[76,128308,128309],{"class":86},">手机 电话卡\u003C\u002F",[76,128311,326],{"class":51269},[76,128313,51276],{"class":86},[76,128315,128316,128318,128320,128322,128324,128326,128329,128331],{"class":78,"line":1158},[76,128317,52113],{"class":86},[76,128319,326],{"class":51269},[76,128321,61026],{"class":1927},[76,128323,133],{"class":86},[76,128325,61031],{"class":192},[76,128327,128328],{"class":86},">电视 盒子\u003C\u002F",[76,128330,326],{"class":51269},[76,128332,51276],{"class":86},[76,128334,128335,128337,128339,128341,128343,128345,128348,128350],{"class":78,"line":1164},[76,128336,52113],{"class":86},[76,128338,326],{"class":51269},[76,128340,61026],{"class":1927},[76,128342,133],{"class":86},[76,128344,61031],{"class":192},[76,128346,128347],{"class":86},">笔记本 平板\u003C\u002F",[76,128349,326],{"class":51269},[76,128351,51276],{"class":86},[76,128353,128354,128356,128358,128360,128362,128364,128367,128369],{"class":78,"line":1178},[76,128355,52113],{"class":86},[76,128357,326],{"class":51269},[76,128359,61026],{"class":1927},[76,128361,133],{"class":86},[76,128363,61031],{"class":192},[76,128365,128366],{"class":86},">出行 穿戴\u003C\u002F",[76,128368,326],{"class":51269},[76,128370,51276],{"class":86},[76,128372,128373,128375,128377,128379,128381,128383,128386,128388],{"class":78,"line":1184},[76,128374,52113],{"class":86},[76,128376,326],{"class":51269},[76,128378,61026],{"class":1927},[76,128380,133],{"class":86},[76,128382,61031],{"class":192},[76,128384,128385],{"class":86},">智能 路由器\u003C\u002F",[76,128387,326],{"class":51269},[76,128389,51276],{"class":86},[76,128391,128392,128394,128396,128398,128400,128402,128405,128407],{"class":78,"line":1275},[76,128393,52113],{"class":86},[76,128395,326],{"class":51269},[76,128397,61026],{"class":1927},[76,128399,133],{"class":86},[76,128401,61031],{"class":192},[76,128403,128404],{"class":86},">健康 儿童\u003C\u002F",[76,128406,326],{"class":51269},[76,128408,51276],{"class":86},[76,128410,128411,128413,128415,128417,128419,128421,128424,128426],{"class":78,"line":1281},[76,128412,52113],{"class":86},[76,128414,326],{"class":51269},[76,128416,61026],{"class":1927},[76,128418,133],{"class":86},[76,128420,61031],{"class":192},[76,128422,128423],{"class":86},">耳机 音响\u003C\u002F",[76,128425,326],{"class":51269},[76,128427,51276],{"class":86},[76,128429,128430,128432,128434],{"class":78,"line":1293},[76,128431,51754],{"class":86},[76,128433,51580],{"class":51269},[76,128435,51276],{"class":86},[66,128437,128439],{"className":126521,"code":128438,"language":126523,"meta":71,"style":71},".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",[73,128440,128441,128450,128460,128473,128485,128497,128509,128519,128530,128534,128544,128555],{"__ignoreMap":71},[76,128442,128443,128446,128448],{"class":78,"line":79},[76,128444,128445],{"class":1927},".sidebar",[76,128447,1362],{"class":51269},[76,128449,15539],{"class":86},[76,128451,128452,128454,128456,128458],{"class":78,"line":96},[76,128453,128137],{"class":136},[76,128455,51406],{"class":86},[76,128457,60838],{"class":136},[76,128459,1254],{"class":86},[76,128461,128462,128464,128466,128469,128471],{"class":78,"line":1143},[76,128463,70537],{"class":136},[76,128465,51406],{"class":86},[76,128467,128468],{"class":136},"234",[76,128470,51461],{"class":82},[76,128472,1254],{"class":86},[76,128474,128475,128477,128479,128481,128483],{"class":78,"line":1158},[76,128476,70757],{"class":136},[76,128478,51406],{"class":86},[76,128480,540],{"class":136},[76,128482,51461],{"class":82},[76,128484,1254],{"class":86},[76,128486,128487,128489,128491,128493,128495],{"class":78,"line":1164},[76,128488,127205],{"class":136},[76,128490,51406],{"class":86},[76,128492,540],{"class":136},[76,128494,51461],{"class":82},[76,128496,1254],{"class":86},[76,128498,128499,128501,128503,128505,128507],{"class":78,"line":1178},[76,128500,70792],{"class":136},[76,128502,51406],{"class":86},[76,128504,1039],{"class":136},[76,128506,51461],{"class":82},[76,128508,1254],{"class":86},[76,128510,128511,128513,128515,128517],{"class":78,"line":1184},[76,128512,70874],{"class":136},[76,128514,51406],{"class":86},[76,128516,60811],{"class":136},[76,128518,1254],{"class":86},[76,128520,128521,128523,128525,128528],{"class":78,"line":1275},[76,128522,70847],{"class":136},[76,128524,51406],{"class":86},[76,128526,128527],{"class":136},"#55585a",[76,128529,1254],{"class":86},[76,128531,128532],{"class":78,"line":1281},[76,128533,1529],{"class":86},[76,128535,128536,128538,128540,128542],{"class":78,"line":1293},[76,128537,128445],{"class":1927},[76,128539,1362],{"class":51269},[76,128541,60909],{"class":1927},[76,128543,15539],{"class":86},[76,128545,128546,128548,128550,128553],{"class":78,"line":1576},[76,128547,70847],{"class":136},[76,128549,51406],{"class":86},[76,128551,128552],{"class":136},"#ff6700",[76,128554,1254],{"class":86},[76,128556,128557],{"class":78,"line":1581},[76,128558,1529],{"class":86},[1426,128560],{"style":126377,"src":128561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[21,128563,128564],{},"行高=盒子高度：实现文字的垂直居中",[21,128566,128567],{},"原理讲解：",[1426,128569],{"style":126377,"src":128570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[16,128572,128574],{"id":128573},"_82-css背景","8.2 css背景",[21,128576,128577],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[46,128579,128581],{"id":128580},"_821-背景颜色","8.2.1 背景颜色",[21,128583,128584],{},"background-color:颜色值;",[21,128586,128587],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[46,128589,128591],{"id":128590},"_822-背景图片","8.2.2 背景图片",[21,128593,128594],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[66,128596,128598],{"className":126521,"code":128597,"language":126523,"meta":71,"style":71},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[73,128599,128600,128606,128622],{"__ignoreMap":71},[76,128601,128602,128604],{"class":78,"line":79},[76,128603,51580],{"class":51269},[76,128605,15539],{"class":86},[76,128607,128608,128611,128613,128615,128617,128620],{"class":78,"line":96},[76,128609,128610],{"class":136},"  background-image",[76,128612,51406],{"class":86},[76,128614,61695],{"class":136},[76,128616,87],{"class":86},[76,128618,128619],{"class":5183},"images\u002Fbg.png",[76,128621,2684],{"class":86},[76,128623,128624],{"class":78,"line":1143},[76,128625,1529],{"class":86},[225,128627,128628,128637],{},[228,128629,128630],{},[231,128631,128632,128635],{},[234,128633,128634],{"align":23704},"参数值",[234,128636,102665],{"align":23704},[272,128638,128639,128646],{},[231,128640,128641,128643],{},[277,128642,54706],{"align":23704},[277,128644,128645],{"align":23704},"无背景图（默认的）",[231,128647,128648,128650],{},[277,128649,61695],{"align":23704},[277,128651,128652],{"align":23704},"使用绝对或相对地址指定背景图像",[66,128654,128655],{"className":126521,"code":128597,"language":126523,"meta":71,"style":71},[73,128656,128657,128663,128677],{"__ignoreMap":71},[76,128658,128659,128661],{"class":78,"line":79},[76,128660,51580],{"class":51269},[76,128662,15539],{"class":86},[76,128664,128665,128667,128669,128671,128673,128675],{"class":78,"line":96},[76,128666,128610],{"class":136},[76,128668,51406],{"class":86},[76,128670,61695],{"class":136},[76,128672,87],{"class":86},[76,128674,128619],{"class":5183},[76,128676,2684],{"class":86},[76,128678,128679],{"class":78,"line":1143},[76,128680,1529],{"class":86},[21,128682,128683],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[46,128685,128687],{"id":128686},"_823-背景平铺","8.2.3 背景平铺",[66,128689,128691],{"className":126521,"code":128690,"language":126523,"meta":71,"style":71},"div {\n  background-repeat: no-repeat;\n}\n",[73,128692,128693,128699,128710],{"__ignoreMap":71},[76,128694,128695,128697],{"class":78,"line":79},[76,128696,51580],{"class":51269},[76,128698,15539],{"class":86},[76,128700,128701,128704,128706,128708],{"class":78,"line":96},[76,128702,128703],{"class":136},"  background-repeat",[76,128705,51406],{"class":86},[76,128707,61705],{"class":136},[76,128709,1254],{"class":86},[76,128711,128712],{"class":78,"line":1143},[76,128713,1529],{"class":86},[225,128715,128716,128724],{},[228,128717,128718],{},[231,128719,128720,128722],{},[234,128721,128634],{"align":23704},[234,128723,102665],{"align":23704},[272,128725,128726,128734,128741,128749],{},[231,128727,128728,128731],{},[277,128729,128730],{"align":23704},"repeat",[277,128732,128733],{"align":23704},"背景图像在纵向和横向上平铺（默认的）",[231,128735,128736,128738],{},[277,128737,61705],{"align":23704},[277,128739,128740],{"align":23704},"背景图像不平铺",[231,128742,128743,128746],{},[277,128744,128745],{"align":23704},"repeat-x",[277,128747,128748],{"align":23704},"背景图像在横向上平铺",[231,128750,128751,128754],{},[277,128752,128753],{"align":23704},"repeat-y",[277,128755,128756],{"align":23704},"背景图像在纵向平铺",[46,128758,128760],{"id":128759},"_824-背景图片位置","8.2.4 背景图片位置",[66,128762,128764],{"className":126521,"code":128763,"language":126523,"meta":71,"style":71},"\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",[73,128765,128766,128771,128777,128791,128795,128800,128806,128822,128826,128831,128837,128851],{"__ignoreMap":71},[76,128767,128768],{"class":78,"line":79},[76,128769,128770],{"class":146},"\u002F* 方位名词 *\u002F\n",[76,128772,128773,128775],{"class":78,"line":96},[76,128774,51580],{"class":51269},[76,128776,15539],{"class":86},[76,128778,128779,128782,128784,128786,128789],{"class":78,"line":1143},[76,128780,128781],{"class":136},"  background-position",[76,128783,51406],{"class":86},[76,128785,51561],{"class":136},[76,128787,128788],{"class":136}," top",[76,128790,1254],{"class":86},[76,128792,128793],{"class":78,"line":1158},[76,128794,1529],{"class":86},[76,128796,128797],{"class":78,"line":1164},[76,128798,128799],{"class":146},"\u002F* 精确单位 *\u002F\n",[76,128801,128802,128804],{"class":78,"line":1178},[76,128803,51580],{"class":51269},[76,128805,15539],{"class":86},[76,128807,128808,128810,128812,128814,128816,128818,128820],{"class":78,"line":1184},[76,128809,128781],{"class":136},[76,128811,51406],{"class":86},[76,128813,788],{"class":136},[76,128815,51461],{"class":82},[76,128817,57473],{"class":136},[76,128819,51461],{"class":82},[76,128821,1254],{"class":86},[76,128823,128824],{"class":78,"line":1275},[76,128825,1529],{"class":86},[76,128827,128828],{"class":78,"line":1281},[76,128829,128830],{"class":146},"\u002F* 混合单位 *\u002F\n",[76,128832,128833,128835],{"class":78,"line":1293},[76,128834,51580],{"class":51269},[76,128836,15539],{"class":86},[76,128838,128839,128841,128843,128845,128847,128849],{"class":78,"line":1576},[76,128840,128781],{"class":136},[76,128842,51406],{"class":86},[76,128844,788],{"class":136},[76,128846,51461],{"class":82},[76,128848,17111],{"class":136},[76,128850,1254],{"class":86},[76,128852,128853],{"class":78,"line":1581},[76,128854,1529],{"class":86},[21,128856,128857],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[225,128859,128860,128868],{},[228,128861,128862],{},[231,128863,128864,128866],{},[234,128865,128634],{"align":23704},[234,128867,25838],{"align":23704},[272,128869,128870,128877],{},[231,128871,128872,128874],{},[277,128873,51937],{"align":23704},[277,128875,128876],{"align":23704},"百分数|由浮点数和单位标识符组成的长度值",[231,128878,128879,128882],{},[277,128880,128881],{"align":23704},"position",[277,128883,128884],{"align":23704},"top|center|bottom|left|center|right 方位名词",[21,128886,128887],{},"其他说明：",[21,128889,128890],{},"①参数是方位名词",[21,128892,128893],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[21,128895,128896],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[21,128898,128899],{},"②参数是精确单位",[21,128901,128902],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[21,128904,128905],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[21,128907,128908],{},"③参数是混合单位",[21,128910,128911],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[46,128913,128915],{"id":128914},"_825-背景图片固定","8.2.5 背景图片固定",[66,128917,128919],{"className":126521,"code":128918,"language":126523,"meta":71,"style":71},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[73,128920,128921,128926,128932,128944,128948,128953,128959,128969],{"__ignoreMap":71},[76,128922,128923],{"class":78,"line":79},[76,128924,128925],{"class":146},"\u002F* 背景滚动（默认） *\u002F\n",[76,128927,128928,128930],{"class":78,"line":96},[76,128929,51580],{"class":51269},[76,128931,15539],{"class":86},[76,128933,128934,128937,128939,128942],{"class":78,"line":1143},[76,128935,128936],{"class":136},"  background-attachment",[76,128938,51406],{"class":86},[76,128940,128941],{"class":136},"scroll",[76,128943,1254],{"class":86},[76,128945,128946],{"class":78,"line":1158},[76,128947,1529],{"class":86},[76,128949,128950],{"class":78,"line":1164},[76,128951,128952],{"class":146},"\u002F* 背景固定 *\u002F\n",[76,128954,128955,128957],{"class":78,"line":1178},[76,128956,51580],{"class":51269},[76,128958,15539],{"class":86},[76,128960,128961,128963,128965,128967],{"class":78,"line":1184},[76,128962,128936],{"class":136},[76,128964,51406],{"class":86},[76,128966,86202],{"class":136},[76,128968,1254],{"class":86},[76,128970,128971],{"class":78,"line":1275},[76,128972,1529],{"class":86},[225,128974,128975,128984],{},[228,128976,128977],{},[231,128978,128979,128982],{},[234,128980,128981],{"align":23704},"参数",[234,128983,102665],{"align":23704},[272,128985,128986,128993],{},[231,128987,128988,128990],{},[277,128989,128941],{"align":23704},[277,128991,128992],{"align":23704},"背景图像是随对象内容滚动",[231,128994,128995,128997],{},[277,128996,86202],{"align":23704},[277,128998,128999],{"align":23704},"背景图像固定",[46,129001,129003],{"id":129002},"_826-背景样式合写","8.2.6 背景样式合写",[66,129005,129007],{"className":126521,"code":129006,"language":126523,"meta":71,"style":71},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[73,129008,129009,129014,129020,129048],{"__ignoreMap":71},[76,129010,129011],{"class":78,"line":79},[76,129012,129013],{"class":146},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[76,129015,129016,129018],{"class":78,"line":96},[76,129017,51580],{"class":51269},[76,129019,15539],{"class":86},[76,129021,129022,129024,129026,129028,129031,129033,129035,129037,129039,129042,129044,129046],{"class":78,"line":1143},[76,129023,70580],{"class":136},[76,129025,51406],{"class":86},[76,129027,60811],{"class":136},[76,129029,129030],{"class":136}," url",[76,129032,87],{"class":86},[76,129034,128619],{"class":5183},[76,129036,13681],{"class":86},[76,129038,61705],{"class":136},[76,129040,129041],{"class":136}," fixed",[76,129043,17111],{"class":136},[76,129045,128788],{"class":136},[76,129047,1254],{"class":86},[76,129049,129050],{"class":78,"line":1158},[76,129051,1529],{"class":86},[46,129053,129055],{"id":129054},"_827-背景色半透明","8.2.7 背景色半透明",[66,129057,129059],{"className":126521,"code":129058,"language":126523,"meta":71,"style":71},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[73,129060,129061,129067,129093],{"__ignoreMap":71},[76,129062,129063,129065],{"class":78,"line":79},[76,129064,51580],{"class":51269},[76,129066,15539],{"class":86},[76,129068,129069,129071,129073,129075,129077,129079,129081,129083,129085,129087,129089,129091],{"class":78,"line":96},[76,129070,70580],{"class":136},[76,129072,51406],{"class":86},[76,129074,55079],{"class":136},[76,129076,87],{"class":86},[76,129078,279],{"class":136},[76,129080,12402],{"class":86},[76,129082,279],{"class":136},[76,129084,12402],{"class":86},[76,129086,279],{"class":136},[76,129088,12402],{"class":86},[76,129090,100490],{"class":136},[76,129092,2684],{"class":86},[76,129094,129095],{"class":78,"line":1143},[76,129096,1529],{"class":86},[21,129098,99365],{},[21,129100,129101],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[21,129103,129104],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[21,129106,129107],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[21,129109,129110],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[46,129112,129114],{"id":129113},"_828-总结","8.2.8 总结",[225,129116,129117,129128],{},[228,129118,129119],{},[231,129120,129121,129124,129126],{},[234,129122,129123],{"align":23704},"属性",[234,129125,102665],{"align":23704},[234,129127,240],{"align":23704},[272,129129,129130,129141,129152,129163,129174,129185,129196],{},[231,129131,129132,129135,129138],{},[277,129133,129134],{"align":23704},"background-color",[277,129136,129137],{"align":23704},"背景颜色",[277,129139,129140],{"align":23704},"预定义的颜色值\u002F十六进制\u002FRGB代码",[231,129142,129143,129146,129149],{},[277,129144,129145],{"align":23704},"background-image",[277,129147,129148],{"align":23704},"背景图片",[277,129150,129151],{"align":23704},"url(图片路径)",[231,129153,129154,129157,129160],{},[277,129155,129156],{"align":23704},"background-repeat",[277,129158,129159],{"align":23704},"是否平铺",[277,129161,129162],{"align":23704},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[231,129164,129165,129168,129171],{},[277,129166,129167],{"align":23704},"background-position",[277,129169,129170],{"align":23704},"背景位置",[277,129172,129173],{"align":23704},"length\u002Fposition 分别是x和y坐标",[231,129175,129176,129179,129182],{},[277,129177,129178],{"align":23704},"background-attachment",[277,129180,129181],{"align":23704},"背景附着",[277,129183,129184],{"align":23704},"scroll(背景滚动) \u002Ffixed (背景固定)",[231,129186,129187,129190,129193],{},[277,129188,129189],{"align":23704},"背景简写",[277,129191,129192],{"align":23704},"书写更简单",[277,129194,129195],{"align":23704},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[231,129197,129198,129201,129204],{},[277,129199,129200],{"align":23704},"背景半透明",[277,129202,129203],{"align":23704},"背景颜色半透明",[277,129205,129206],{"align":23704},"background: rgba(0,0,0.3); 后面必须是4个值",[21,129208,129209],{},"颜色渐变：",[1426,129211],{"style":126377,"src":129212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1426,129214],{"style":126377,"src":129215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[46,129217,129219],{"id":129218},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[66,129221,129223],{"className":127268,"code":129222,"language":127270,"meta":71,"style":71},"\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",[73,129224,129225,129240,129259,129278,129297,129316,129335],{"__ignoreMap":71},[76,129226,129227,129229,129231,129233,129235,129238],{"class":78,"line":79},[76,129228,998],{"class":86},[76,129230,51580],{"class":51269},[76,129232,53455],{"class":1927},[76,129234,133],{"class":86},[76,129236,129237],{"class":192},"\"nav\"",[76,129239,51276],{"class":86},[76,129241,129242,129244,129246,129248,129250,129252,129255,129257],{"class":78,"line":96},[76,129243,52113],{"class":86},[76,129245,326],{"class":51269},[76,129247,61026],{"class":1927},[76,129249,133],{"class":86},[76,129251,61031],{"class":192},[76,129253,129254],{"class":86},">五彩导航1\u003C\u002F",[76,129256,326],{"class":51269},[76,129258,51276],{"class":86},[76,129260,129261,129263,129265,129267,129269,129271,129274,129276],{"class":78,"line":1143},[76,129262,52113],{"class":86},[76,129264,326],{"class":51269},[76,129266,61026],{"class":1927},[76,129268,133],{"class":86},[76,129270,61031],{"class":192},[76,129272,129273],{"class":86},">五彩导航2\u003C\u002F",[76,129275,326],{"class":51269},[76,129277,51276],{"class":86},[76,129279,129280,129282,129284,129286,129288,129290,129293,129295],{"class":78,"line":1158},[76,129281,52113],{"class":86},[76,129283,326],{"class":51269},[76,129285,61026],{"class":1927},[76,129287,133],{"class":86},[76,129289,61031],{"class":192},[76,129291,129292],{"class":86},">五彩导航3\u003C\u002F",[76,129294,326],{"class":51269},[76,129296,51276],{"class":86},[76,129298,129299,129301,129303,129305,129307,129309,129312,129314],{"class":78,"line":1164},[76,129300,52113],{"class":86},[76,129302,326],{"class":51269},[76,129304,61026],{"class":1927},[76,129306,133],{"class":86},[76,129308,61031],{"class":192},[76,129310,129311],{"class":86},">五彩导航4\u003C\u002F",[76,129313,326],{"class":51269},[76,129315,51276],{"class":86},[76,129317,129318,129320,129322,129324,129326,129328,129331,129333],{"class":78,"line":1178},[76,129319,52113],{"class":86},[76,129321,326],{"class":51269},[76,129323,61026],{"class":1927},[76,129325,133],{"class":86},[76,129327,61031],{"class":192},[76,129329,129330],{"class":86},">五彩导航5\u003C\u002F",[76,129332,326],{"class":51269},[76,129334,51276],{"class":86},[76,129336,129337,129339,129341],{"class":78,"line":1184},[76,129338,51754],{"class":86},[76,129340,51580],{"class":51269},[76,129342,51276],{"class":86},[66,129344,129346],{"className":126521,"code":129345,"language":126523,"meta":71,"style":71},".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",[73,129347,129348,129357,129367,129379,129391,129401,129413,129423,129427,129452,129475,129498,129521],{"__ignoreMap":71},[76,129349,129350,129353,129355],{"class":78,"line":79},[76,129351,129352],{"class":1927},".nav",[76,129354,1362],{"class":51269},[76,129356,15539],{"class":86},[76,129358,129359,129361,129363,129365],{"class":78,"line":96},[76,129360,128137],{"class":136},[76,129362,51406],{"class":86},[76,129364,72352],{"class":136},[76,129366,1254],{"class":86},[76,129368,129369,129371,129373,129375,129377],{"class":78,"line":1143},[76,129370,70537],{"class":136},[76,129372,51406],{"class":86},[76,129374,905],{"class":136},[76,129376,51461],{"class":82},[76,129378,1254],{"class":86},[76,129380,129381,129383,129385,129387,129389],{"class":78,"line":1158},[76,129382,70757],{"class":136},[76,129384,51406],{"class":86},[76,129386,944],{"class":136},[76,129388,51461],{"class":82},[76,129390,1254],{"class":86},[76,129392,129393,129395,129397,129399],{"class":78,"line":1164},[76,129394,70495],{"class":136},[76,129396,51406],{"class":86},[76,129398,51561],{"class":136},[76,129400,1254],{"class":86},[76,129402,129403,129405,129407,129409,129411],{"class":78,"line":1178},[76,129404,127205],{"class":136},[76,129406,51406],{"class":86},[76,129408,944],{"class":136},[76,129410,51461],{"class":82},[76,129412,1254],{"class":86},[76,129414,129415,129417,129419,129421],{"class":78,"line":1184},[76,129416,70874],{"class":136},[76,129418,51406],{"class":86},[76,129420,60811],{"class":136},[76,129422,1254],{"class":86},[76,129424,129425],{"class":78,"line":1275},[76,129426,1529],{"class":86},[76,129428,129429,129431,129433,129436,129438,129440,129443,129445,129447,129449],{"class":78,"line":1281},[76,129430,129352],{"class":1927},[76,129432,1362],{"class":51269},[76,129434,129435],{"class":1927},":nth-child",[76,129437,87],{"class":86},[76,129439,305],{"class":136},[76,129441,129442],{"class":86},") { ",[76,129444,129134],{"class":136},[76,129446,51406],{"class":86},[76,129448,128552],{"class":136},[76,129450,129451],{"class":86},"; }\n",[76,129453,129454,129456,129458,129460,129462,129464,129466,129468,129470,129473],{"class":78,"line":1293},[76,129455,129352],{"class":1927},[76,129457,1362],{"class":51269},[76,129459,129435],{"class":1927},[76,129461,87],{"class":86},[76,129463,165],{"class":136},[76,129465,129442],{"class":86},[76,129467,129134],{"class":136},[76,129469,51406],{"class":86},[76,129471,129472],{"class":136},"#ff0000",[76,129474,129451],{"class":86},[76,129476,129477,129479,129481,129483,129485,129487,129489,129491,129493,129496],{"class":78,"line":1576},[76,129478,129352],{"class":1927},[76,129480,1362],{"class":51269},[76,129482,129435],{"class":1927},[76,129484,87],{"class":86},[76,129486,159],{"class":136},[76,129488,129442],{"class":86},[76,129490,129134],{"class":136},[76,129492,51406],{"class":86},[76,129494,129495],{"class":136},"#00a4ff",[76,129497,129451],{"class":86},[76,129499,129500,129502,129504,129506,129508,129510,129512,129514,129516,129519],{"class":78,"line":1581},[76,129501,129352],{"class":1927},[76,129503,1362],{"class":51269},[76,129505,129435],{"class":1927},[76,129507,87],{"class":86},[76,129509,381],{"class":136},[76,129511,129442],{"class":86},[76,129513,129134],{"class":136},[76,129515,51406],{"class":86},[76,129517,129518],{"class":136},"#ff00ff",[76,129520,129451],{"class":86},[76,129522,129523,129525,129527,129529,129531,129533,129535,129537,129539,129542],{"class":78,"line":1587},[76,129524,129352],{"class":1927},[76,129526,1362],{"class":51269},[76,129528,129435],{"class":1927},[76,129530,87],{"class":86},[76,129532,407],{"class":136},[76,129534,129442],{"class":86},[76,129536,129134],{"class":136},[76,129538,51406],{"class":86},[76,129540,129541],{"class":136},"#00ff00",[76,129543,129451],{"class":86},[16,129545,129547],{"id":129546},"_83-css三大特性","8.3 css三大特性",[46,129549,129551],{"id":129550},"_831-层叠性","8.3.1 层叠性",[21,129553,129554],{},"为了解决样式冲突问题",[21,129556,129557],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[21,129559,129560],{},"   ②样式不冲突，不会层叠",[46,129562,129564],{"id":129563},"_832-继承性","8.3.2 继承性",[21,129566,129567],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[21,129569,129570],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[66,129572,129574],{"className":126521,"code":129573,"language":126523,"meta":71,"style":71},"p {\n  color: #333;\n}\n",[73,129575,129576,129582,129592],{"__ignoreMap":71},[76,129577,129578,129580],{"class":78,"line":79},[76,129579,21],{"class":51269},[76,129581,15539],{"class":86},[76,129583,129584,129586,129588,129590],{"class":78,"line":96},[76,129585,70874],{"class":136},[76,129587,51406],{"class":86},[76,129589,62338],{"class":136},[76,129591,1254],{"class":86},[76,129593,129594],{"class":78,"line":1143},[76,129595,1529],{"class":86},[1426,129597],{"style":126377,"src":129598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[21,129600,129601],{},"解释：①行高可以跟单位也可以不跟单位",[21,129603,129604],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[21,129606,129607],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[21,129609,129610],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[46,129612,129614],{"id":129613},"_833-优先级","8.3.3 优先级",[29,129616,129617,129620],{},[32,129618,129619],{},"选择器相同，则执行层叠性",[32,129621,129622],{},"选择器不同，则根据选择器权重执行",[225,129624,129625,129635],{},[228,129626,129627],{},[231,129628,129629,129632],{},[234,129630,129631],{"align":23704},"选择器",[234,129633,129634],{"align":23704},"选择器权重",[272,129636,129637,129645,129653,129661,129669,129677],{},[231,129638,129639,129642],{},[277,129640,129641],{"align":23704},"继承 或者*",[277,129643,129644],{"align":23704},"0，0，0，0",[231,129646,129647,129650],{},[277,129648,129649],{"align":23704},"标签选择器",[277,129651,129652],{"align":23704},"0，0，0，1",[231,129654,129655,129658],{},[277,129656,129657],{"align":23704},"类选择器，伪类选择器",[277,129659,129660],{"align":23704},"0，0，1，0",[231,129662,129663,129666],{},[277,129664,129665],{"align":23704},"ID选择器",[277,129667,129668],{"align":23704},"0，1，0，0",[231,129670,129671,129674],{},[277,129672,129673],{"align":23704},"行内样式",[277,129675,129676],{"align":23704},"1，0，0，0",[231,129678,129679,129682],{},[277,129680,129681],{"align":23704},"！important",[277,129683,129684],{"align":23704},"无穷大",[21,129686,129687],{},"! important用法：",[66,129689,129691],{"className":126521,"code":129690,"language":126523,"meta":71,"style":71},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[73,129692,129693,129698,129704,129717,129721,129726,129732,129742],{"__ignoreMap":71},[76,129694,129695],{"class":78,"line":79},[76,129696,129697],{"class":146},"\u002F* !important 拥有最高优先级 *\u002F\n",[76,129699,129700,129702],{"class":78,"line":96},[76,129701,51580],{"class":51269},[76,129703,15539],{"class":86},[76,129705,129706,129708,129710,129712,129715],{"class":78,"line":1143},[76,129707,70874],{"class":136},[76,129709,51406],{"class":86},[76,129711,51614],{"class":136},[76,129713,129714],{"class":82}," !important",[76,129716,1254],{"class":86},[76,129718,129719],{"class":78,"line":1158},[76,129720,1529],{"class":86},[76,129722,129723],{"class":78,"line":1164},[76,129724,129725],{"class":146},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[76,129727,129728,129730],{"class":78,"line":1178},[76,129729,51580],{"class":51269},[76,129731,15539],{"class":86},[76,129733,129734,129736,129738,129740],{"class":78,"line":1184},[76,129735,70874],{"class":136},[76,129737,51406],{"class":86},[76,129739,57390],{"class":136},[76,129741,1254],{"class":86},[76,129743,129744],{"class":78,"line":1275},[76,129745,1529],{"class":86},[21,129747,129748],{},"优先级注意点：",[21,129750,129751],{},"①权重是有4组数字组成,但是不会有进位",[21,129753,129754],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[21,129756,129757],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[21,129759,129760],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[21,129762,129763],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[21,129765,129766],{},"⑥复合选择器",[225,129768,129769,129779],{},[228,129770,129771],{},[231,129772,129773,129776],{},[234,129774,129775],{"align":23704},"div ul li",[234,129777,129778],{"align":23704},"0,0,0,3",[272,129780,129781,129789,129797],{},[231,129782,129783,129786],{},[277,129784,129785],{"align":23704},".nav ul li",[277,129787,129788],{"align":23704},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[231,129790,129791,129794],{},[277,129792,129793],{"align":23704},"a:hover",[277,129795,129796],{"align":23704},"0,0,1,1",[231,129798,129799,129802],{},[277,129800,129801],{"align":23704},".nav a",[277,129803,129796],{"align":23704},[5092,129805,129806],{},"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":71,"searchDepth":96,"depth":96,"links":129808},[129809,129817,129828],{"id":127917,"depth":96,"text":127918,"children":129810},[129811,129812,129813,129814,129815,129816],{"id":127930,"depth":1143,"text":127931},{"id":128002,"depth":1143,"text":128003},{"id":128074,"depth":1143,"text":128075},{"id":128105,"depth":1143,"text":128106},{"id":128112,"depth":1143,"text":128113},{"id":128265,"depth":1143,"text":128266},{"id":128573,"depth":96,"text":128574,"children":129818},[129819,129820,129821,129822,129823,129824,129825,129826,129827],{"id":128580,"depth":1143,"text":128581},{"id":128590,"depth":1143,"text":128591},{"id":128686,"depth":1143,"text":128687},{"id":128759,"depth":1143,"text":128760},{"id":128914,"depth":1143,"text":128915},{"id":129002,"depth":1143,"text":129003},{"id":129054,"depth":1143,"text":129055},{"id":129113,"depth":1143,"text":129114},{"id":129218,"depth":1143,"text":129219},{"id":129546,"depth":96,"text":129547,"children":129829},[129830,129831,129832],{"id":129550,"depth":1143,"text":129551},{"id":129563,"depth":1143,"text":129564},{"id":129613,"depth":1143,"text":129614},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127909,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129839,"title":129840,"body":129841,"description":23344,"extension":5123,"meta":131431,"navigation":2364,"path":131432,"seo":131433,"stem":131434,"__hash__":131435},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":9,"value":129842,"toc":131410},[129843,129846,129850,129853,129856,129859,129862,129865,129868,129871,129875,129883,129920,129956,129959,129973,129978,130012,130015,130108,130113,130116,130146,130149,130154,130162,130166,130173,130219,130263,130268,130271,130274,130277,130280,130283,130286,130288,130291,130295,130300,130344,130349,130352,130355,130392,130397,130400,130403,130406,130409,130441,130444,130447,130450,130482,130485,130488,130491,130495,130498,130530,130533,130537,130557,130560,130568,130571,130575,130580,130583,130615,130620,130623,130661,130665,130670,130673,130676,130707,130710,130727,130732,130784,130844,130849,130903,130941,130945,130949,130952,130956,130964,130967,130969,130980,130985,131033,131067,131070,131073,131076,131079,131123,131126,131129,131132,131135,131138,131141,131185,131188,131191,131194,131197,131200,131203,131209,131212,131256,131259,131262,131265,131268,131271,131315,131318,131320,131323,131327,131331,131369,131373,131376,131379,131383,131391,131395,131398,131401,131404,131407],[12,129844,129840],{"id":129845},"_9-css盒模型浮动与切图",[16,129847,129849],{"id":129848},"_91-盒子模型","9.1 盒子模型",[21,129851,129852],{},"利用盒子来设计网页",[21,129854,129855],{},"盒子包含：边框、外边距、内边距、实际内容",[21,129857,129858],{},"网页布局设置：",[21,129860,129861],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[21,129863,129864],{},"②利用css设置好盒子样式，然后摆放到相应位置",[21,129866,129867],{},"③往盒子里装内容",[1426,129869],{"style":126377,"src":129870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[46,129872,129874],{"id":129873},"_911-边框border","9.1.1 边框（border）",[29,129876,129877,129880],{},[32,129878,129879],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[32,129881,129882],{},"语法",[66,129884,129886],{"className":126521,"code":129885,"language":126523,"meta":71,"style":71},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[73,129887,129888,129893,129899,129916],{"__ignoreMap":71},[76,129889,129890],{"class":78,"line":79},[76,129891,129892],{"class":146},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[76,129894,129895,129897],{"class":78,"line":96},[76,129896,51580],{"class":51269},[76,129898,15539],{"class":86},[76,129900,129901,129903,129905,129907,129909,129911,129914],{"class":78,"line":1143},[76,129902,70865],{"class":136},[76,129904,51406],{"class":86},[76,129906,305],{"class":136},[76,129908,51461],{"class":82},[76,129910,51490],{"class":136},[76,129912,129913],{"class":136}," #ccc",[76,129915,1254],{"class":86},[76,129917,129918],{"class":78,"line":1158},[76,129919,1529],{"class":86},[225,129921,129922,129930],{},[228,129923,129924],{},[231,129925,129926,129928],{},[234,129927,129123],{"align":23704},[234,129929,102665],{"align":23704},[272,129931,129932,129940,129948],{},[231,129933,129934,129937],{},[277,129935,129936],{"align":23704},"border-width",[277,129938,129939],{"align":23704},"定义边框粗细，单位是px",[231,129941,129942,129945],{},[277,129943,129944],{"align":23704},"border-style",[277,129946,129947],{"align":23704},"边框的样式",[231,129949,129950,129953],{},[277,129951,129952],{"align":23704},"border-color",[277,129954,129955],{"align":23704},"边框的颜色",[21,129957,129958],{},"边框样式 border-style 可以设置如下值：",[1095,129960,129961,129964,129967,129970],{},[32,129962,129963],{},"none：没有边框即忽略所有边框的宽度（默认值）",[32,129965,129966],{},"solid：边框为单实线(最为常用的)",[32,129968,129969],{},"dashed：边框为虚线",[32,129971,129972],{},"dotted：边框为点线",[29,129974,129975],{"start":1143},[32,129976,129977],{},"边框的合写分写",[66,129979,129980],{"className":126521,"code":129885,"language":126523,"meta":71,"style":71},[73,129981,129982,129986,129992,130008],{"__ignoreMap":71},[76,129983,129984],{"class":78,"line":79},[76,129985,129892],{"class":146},[76,129987,129988,129990],{"class":78,"line":96},[76,129989,51580],{"class":51269},[76,129991,15539],{"class":86},[76,129993,129994,129996,129998,130000,130002,130004,130006],{"class":78,"line":1143},[76,129995,70865],{"class":136},[76,129997,51406],{"class":86},[76,129999,305],{"class":136},[76,130001,51461],{"class":82},[76,130003,51490],{"class":136},[76,130005,129913],{"class":136},[76,130007,1254],{"class":86},[76,130009,130010],{"class":78,"line":1158},[76,130011,1529],{"class":86},[21,130013,130014],{},"边框分开写法：",[66,130016,130018],{"className":126521,"code":130017,"language":126523,"meta":71,"style":71},"\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",[73,130019,130020,130025,130031,130049,130067,130086,130104],{"__ignoreMap":71},[76,130021,130022],{"class":78,"line":79},[76,130023,130024],{"class":146},"\u002F* 边框分开写法 *\u002F\n",[76,130026,130027,130029],{"class":78,"line":96},[76,130028,51580],{"class":51269},[76,130030,15539],{"class":86},[76,130032,130033,130036,130038,130040,130042,130044,130047],{"class":78,"line":1143},[76,130034,130035],{"class":136},"  border-top",[76,130037,51406],{"class":86},[76,130039,305],{"class":136},[76,130041,51461],{"class":82},[76,130043,51490],{"class":136},[76,130045,130046],{"class":136}," #000",[76,130048,1254],{"class":86},[76,130050,130051,130054,130056,130058,130060,130062,130065],{"class":78,"line":1158},[76,130052,130053],{"class":136},"  border-right",[76,130055,51406],{"class":86},[76,130057,165],{"class":136},[76,130059,51461],{"class":82},[76,130061,62210],{"class":136},[76,130063,130064],{"class":136}," #333",[76,130066,1254],{"class":86},[76,130068,130069,130072,130074,130076,130078,130081,130084],{"class":78,"line":1164},[76,130070,130071],{"class":136},"  border-bottom",[76,130073,51406],{"class":86},[76,130075,159],{"class":136},[76,130077,51461],{"class":82},[76,130079,130080],{"class":136}," dotted",[76,130082,130083],{"class":136}," #666",[76,130085,1254],{"class":86},[76,130087,130088,130091,130093,130095,130097,130099,130102],{"class":78,"line":1178},[76,130089,130090],{"class":136},"  border-left",[76,130092,51406],{"class":86},[76,130094,305],{"class":136},[76,130096,51461],{"class":82},[76,130098,51490],{"class":136},[76,130100,130101],{"class":136}," #999",[76,130103,1254],{"class":86},[76,130105,130106],{"class":78,"line":1184},[76,130107,1529],{"class":86},[29,130109,130110],{"start":1158},[32,130111,130112],{},"表格的细线边框",[21,130114,130115],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[66,130117,130119],{"className":126521,"code":130118,"language":126523,"meta":71,"style":71},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[73,130120,130121,130126,130132,130142],{"__ignoreMap":71},[76,130122,130123],{"class":78,"line":79},[76,130124,130125],{"class":146},"\u002F* 表格细线边框合并 *\u002F\n",[76,130127,130128,130130],{"class":78,"line":96},[76,130129,225],{"class":51269},[76,130131,15539],{"class":86},[76,130133,130134,130136,130138,130140],{"class":78,"line":1143},[76,130135,70547],{"class":136},[76,130137,51406],{"class":86},[76,130139,65004],{"class":136},[76,130141,1254],{"class":86},[76,130143,130144],{"class":78,"line":1158},[76,130145,1529],{"class":86},[21,130147,130148],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[29,130150,130151],{"start":1164},[32,130152,130153],{},"解决边框额外增加盒子的实际大小的方法：",[1095,130155,130156,130159],{},[32,130157,130158],{},"测量盒子大小的时候,不量边框",[32,130160,130161],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[46,130163,130165],{"id":130164},"_912-内边距","9.1.2 内边距",[29,130167,130168,130171],{},[32,130169,130170],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[32,130172,129882],{},[225,130174,130175,130185],{},[228,130176,130177],{},[231,130178,130179,130182],{},[234,130180,130181],{"align":23704},"值的个数",[234,130183,130184],{"align":23704},"表达意思",[272,130186,130187,130195,130203,130211],{},[231,130188,130189,130192],{},[277,130190,130191],{"align":23704},"padding: 5px;",[277,130193,130194],{"align":23704},"1个值，代表上下左右都有5个元素",[231,130196,130197,130200],{},[277,130198,130199],{"align":23704},"padding: 5px 10px;",[277,130201,130202],{"align":23704},"2个值，代表上下内边距为5像素，左右内边距为10像素",[231,130204,130205,130208],{},[277,130206,130207],{"align":23704},"padding: 5px 10px 20px;",[277,130209,130210],{"align":23704},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[231,130212,130213,130216],{},[277,130214,130215],{"align":23704},"padding: 5px 10px 20px 30px;",[277,130217,130218],{"align":23704},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[225,130220,130221,130229],{},[228,130222,130223],{},[231,130224,130225,130227],{},[234,130226,129123],{"align":23704},[234,130228,102665],{"align":23704},[272,130230,130231,130239,130247,130255],{},[231,130232,130233,130236],{},[277,130234,130235],{"align":23704},"padding-left",[277,130237,130238],{"align":23704},"左内边距",[231,130240,130241,130244],{},[277,130242,130243],{"align":23704},"padding-right",[277,130245,130246],{"align":23704},"右内边距",[231,130248,130249,130252],{},[277,130250,130251],{"align":23704},"padding-top",[277,130253,130254],{"align":23704},"上内边距",[231,130256,130257,130260],{},[277,130258,130259],{"align":23704},"padding-bottom",[277,130261,130262],{"align":23704},"下内边距",[29,130264,130265],{"start":1143},[32,130266,130267],{},"内边距会影响盒子的实际大小",[21,130269,130270],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[21,130272,130273],{},"①内容和边框有了距离，添加了内边距",[21,130275,130276],{},"②padding影响了盒子实际大小",[21,130278,130279],{},"内边距对盒子大小的影响：",[21,130281,130282],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[21,130284,130285],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[21,130287,95189],{},[21,130289,130290],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[46,130292,130294],{"id":130293},"_913-外边距","9.1.3 外边距",[29,130296,130297],{},[32,130298,130299],{},"控制盒子与盒子之间的距离",[225,130301,130302,130310],{},[228,130303,130304],{},[231,130305,130306,130308],{},[234,130307,129123],{"align":23704},[234,130309,102665],{"align":23704},[272,130311,130312,130320,130328,130336],{},[231,130313,130314,130317],{},[277,130315,130316],{"align":23704},"margin-left",[277,130318,130319],{"align":23704},"左外边距",[231,130321,130322,130325],{},[277,130323,130324],{"align":23704},"margin-right",[277,130326,130327],{"align":23704},"右外边距",[231,130329,130330,130333],{},[277,130331,130332],{"align":23704},"margin-top",[277,130334,130335],{"align":23704},"上外边距",[231,130337,130338,130341],{},[277,130339,130340],{"align":23704},"margin-bottom",[277,130342,130343],{"align":23704},"下外边距",[29,130345,130346],{"start":96},[32,130347,130348],{},"外边距可以让块级盒子水平居中的两个条件：",[21,130350,130351],{},"①盒子必须指定了宽度（width）",[21,130353,130354],{},"②盒子左右的外边距都设置为 auto",[66,130356,130358],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[73,130359,130360,130365,130372,130388],{"__ignoreMap":71},[76,130361,130362],{"class":78,"line":79},[76,130363,130364],{"class":146},"\u002F* margin 复合写法（同上） *\u002F\n",[76,130366,130367,130370],{"class":78,"line":96},[76,130368,130369],{"class":1927},".box",[76,130371,15539],{"class":86},[76,130373,130374,130376,130378,130380,130382,130385],{"class":78,"line":1143},[76,130375,70439],{"class":136},[76,130377,51406],{"class":86},[76,130379,279],{"class":136},[76,130381,51525],{"class":136},[76,130383,130384],{"class":86},";  ",[76,130386,130387],{"class":146},"\u002F* 块级盒子水平居中 *\u002F\n",[76,130389,130390],{"class":78,"line":1158},[76,130391,1529],{"class":86},[29,130393,130394],{"start":1143},[32,130395,130396],{},"外边距塌陷问题",[21,130398,130399],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1426,130401],{"style":126377,"src":130402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[21,130404,130405],{},"解决方案：",[21,130407,130408],{},"①可以为父亲元素定义上边距",[66,130410,130411],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},[73,130412,130413,130417,130423,130437],{"__ignoreMap":71},[76,130414,130415],{"class":78,"line":79},[76,130416,130364],{"class":146},[76,130418,130419,130421],{"class":78,"line":96},[76,130420,130369],{"class":1927},[76,130422,15539],{"class":86},[76,130424,130425,130427,130429,130431,130433,130435],{"class":78,"line":1143},[76,130426,70439],{"class":136},[76,130428,51406],{"class":86},[76,130430,279],{"class":136},[76,130432,51525],{"class":136},[76,130434,130384],{"class":86},[76,130436,130387],{"class":146},[76,130438,130439],{"class":78,"line":1158},[76,130440,1529],{"class":86},[21,130442,130443],{},"②可以为父亲元素定义上内边距",[21,130445,130446],{},"③可以为父亲元素添加overflow:hidden",[1426,130448],{"style":126377,"src":130449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[66,130451,130452],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},[73,130453,130454,130458,130464,130478],{"__ignoreMap":71},[76,130455,130456],{"class":78,"line":79},[76,130457,130364],{"class":146},[76,130459,130460,130462],{"class":78,"line":96},[76,130461,130369],{"class":1927},[76,130463,15539],{"class":86},[76,130465,130466,130468,130470,130472,130474,130476],{"class":78,"line":1143},[76,130467,70439],{"class":136},[76,130469,51406],{"class":86},[76,130471,279],{"class":136},[76,130473,51525],{"class":136},[76,130475,130384],{"class":86},[76,130477,130387],{"class":146},[76,130479,130480],{"class":78,"line":1158},[76,130481,1529],{"class":86},[1426,130483],{"style":126377,"src":130484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[21,130486,130487],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[21,130489,130490],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[46,130492,130494],{"id":130493},"_914-清除内外边距","9.1.4 清除内外边距",[21,130496,130497],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[66,130499,130500],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},[73,130501,130502,130506,130512,130526],{"__ignoreMap":71},[76,130503,130504],{"class":78,"line":79},[76,130505,130364],{"class":146},[76,130507,130508,130510],{"class":78,"line":96},[76,130509,130369],{"class":1927},[76,130511,15539],{"class":86},[76,130513,130514,130516,130518,130520,130522,130524],{"class":78,"line":1143},[76,130515,70439],{"class":136},[76,130517,51406],{"class":86},[76,130519,279],{"class":136},[76,130521,51525],{"class":136},[76,130523,130384],{"class":86},[76,130525,130387],{"class":146},[76,130527,130528],{"class":78,"line":1158},[76,130529,1529],{"class":86},[21,130531,130532],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[46,130534,130536],{"id":130535},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1095,130538,130539,130542,130545,130548,130551,130554],{},[32,130540,130541],{},"文件→打开 ：可以打开我们要测量的图片",[32,130543,130544],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[32,130546,130547],{},"右击标尺，把里面的单位改为像素",[32,130549,130550],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[32,130552,130553],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[32,130555,130556],{},"用选区拖动 可以测量大小",[1426,130558],{"style":126377,"src":130559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1095,130561,130562,130565],{},[32,130563,130564],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[32,130566,130567],{},"吸管取色工具",[1426,130569],{"style":126377,"src":130570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[46,130572,130574],{"id":130573},"_916-案例","9.1.6 案例",[29,130576,130577],{},[32,130578,130579],{},"小米商品",[1426,130581],{"style":126377,"src":130582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[66,130584,130585],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},[73,130586,130587,130591,130597,130611],{"__ignoreMap":71},[76,130588,130589],{"class":78,"line":79},[76,130590,130364],{"class":146},[76,130592,130593,130595],{"class":78,"line":96},[76,130594,130369],{"class":1927},[76,130596,15539],{"class":86},[76,130598,130599,130601,130603,130605,130607,130609],{"class":78,"line":1143},[76,130600,70439],{"class":136},[76,130602,51406],{"class":86},[76,130604,279],{"class":136},[76,130606,51525],{"class":136},[76,130608,130384],{"class":86},[76,130610,130387],{"class":146},[76,130612,130613],{"class":78,"line":1158},[76,130614,1529],{"class":86},[29,130616,130617],{"start":96},[32,130618,130619],{},"快报模块",[1426,130621],{"style":126377,"src":130622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[66,130624,130626],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[73,130627,130628,130633,130648,130653],{"__ignoreMap":71},[76,130629,130630],{"class":78,"line":79},[76,130631,130632],{"class":146},"\u003C!-- HTML 代码示例 -->\n",[76,130634,130635,130637,130639,130641,130643,130646],{"class":78,"line":96},[76,130636,998],{"class":86},[76,130638,51580],{"class":51269},[76,130640,53455],{"class":1927},[76,130642,133],{"class":86},[76,130644,130645],{"class":192},"\"example\"",[76,130647,51276],{"class":86},[76,130649,130650],{"class":78,"line":1143},[76,130651,130652],{"class":86},"  示例内容\n",[76,130654,130655,130657,130659],{"class":78,"line":1158},[76,130656,51754],{"class":86},[76,130658,51580],{"class":51269},[76,130660,51276],{"class":86},[46,130662,130664],{"id":130663},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[29,130666,130667],{},[32,130668,130669],{},"圆角边框",[21,130671,130672],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1426,130674],{"style":126377,"src":130675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[66,130677,130679],{"className":126521,"code":130678,"language":126523,"meta":71,"style":71},"div {\n  border: 1px solid #ccc;\n}\n",[73,130680,130681,130687,130703],{"__ignoreMap":71},[76,130682,130683,130685],{"class":78,"line":79},[76,130684,51580],{"class":51269},[76,130686,15539],{"class":86},[76,130688,130689,130691,130693,130695,130697,130699,130701],{"class":78,"line":96},[76,130690,70865],{"class":136},[76,130692,51406],{"class":86},[76,130694,305],{"class":136},[76,130696,51461],{"class":82},[76,130698,51490],{"class":136},[76,130700,129913],{"class":136},[76,130702,1254],{"class":86},[76,130704,130705],{"class":78,"line":1143},[76,130706,1529],{"class":86},[21,130708,130709],{},"解释:",[1095,130711,130712,130715,130718,130721,130724],{},[32,130713,130714],{},"参数值可以为数值或百分比的形式",[32,130716,130717],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[32,130719,130720],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[32,130722,130723],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[32,130725,130726],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[29,130728,130729],{"start":96},[32,130730,130731],{},"盒子阴影",[66,130733,130735],{"className":126521,"code":130734,"language":126523,"meta":71,"style":71},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[73,130736,130737,130743,130780],{"__ignoreMap":71},[76,130738,130739,130741],{"class":78,"line":79},[76,130740,51580],{"class":51269},[76,130742,15539],{"class":86},[76,130744,130745,130748,130750,130752,130754,130756,130758,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778],{"class":78,"line":96},[76,130746,130747],{"class":136},"  box-shadow",[76,130749,51406],{"class":86},[76,130751,279],{"class":136},[76,130753,14722],{"class":136},[76,130755,51461],{"class":82},[76,130757,2002],{"class":136},[76,130759,51461],{"class":82},[76,130761,78736],{"class":136},[76,130763,87],{"class":86},[76,130765,279],{"class":136},[76,130767,12402],{"class":86},[76,130769,279],{"class":136},[76,130771,12402],{"class":86},[76,130773,279],{"class":136},[76,130775,12402],{"class":86},[76,130777,86179],{"class":136},[76,130779,2684],{"class":86},[76,130781,130782],{"class":78,"line":1143},[76,130783,1529],{"class":86},[225,130785,130786,130794],{},[228,130787,130788],{},[231,130789,130790,130792],{},[234,130791,240],{"align":23704},[234,130793,27458],{"align":23704},[272,130795,130796,130804,130812,130820,130828,130836],{},[231,130797,130798,130801],{},[277,130799,130800],{"align":23704},"h-shadow",[277,130802,130803],{"align":23704},"必需,水平阴影的位置,允许负值",[231,130805,130806,130809],{},[277,130807,130808],{"align":23704},"v-shadow",[277,130810,130811],{"align":23704},"必需,垂直阴影的位置,允许负值",[231,130813,130814,130817],{},[277,130815,130816],{"align":23704},"blur",[277,130818,130819],{"align":23704},"可选,模糊距离,就是影子的虚实",[231,130821,130822,130825],{},[277,130823,130824],{"align":23704},"spread",[277,130826,130827],{"align":23704},"可选,阴影尺寸",[231,130829,130830,130833],{},[277,130831,130832],{"align":23704},"color",[277,130834,130835],{"align":23704},"可选,阴影的颜色",[231,130837,130838,130841],{},[277,130839,130840],{"align":23704},"inset",[277,130842,130843],{"align":23704},"可选,将外部阴影(outset)改为内部阴影",[29,130845,130846],{"start":1143},[32,130847,130848],{},"文字阴影",[66,130850,130852],{"className":126521,"code":130851,"language":126523,"meta":71,"style":71},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[73,130853,130854,130860,130899],{"__ignoreMap":71},[76,130855,130856,130858],{"class":78,"line":79},[76,130857,21],{"class":51269},[76,130859,15539],{"class":86},[76,130861,130862,130865,130867,130869,130871,130873,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897],{"class":78,"line":96},[76,130863,130864],{"class":136},"  text-shadow",[76,130866,51406],{"class":86},[76,130868,305],{"class":136},[76,130870,51461],{"class":82},[76,130872,25087],{"class":136},[76,130874,51461],{"class":82},[76,130876,14722],{"class":136},[76,130878,51461],{"class":82},[76,130880,78736],{"class":136},[76,130882,87],{"class":86},[76,130884,279],{"class":136},[76,130886,12402],{"class":86},[76,130888,279],{"class":136},[76,130890,12402],{"class":86},[76,130892,279],{"class":136},[76,130894,12402],{"class":86},[76,130896,100490],{"class":136},[76,130898,2684],{"class":86},[76,130900,130901],{"class":78,"line":1143},[76,130902,1529],{"class":86},[225,130904,130905,130913],{},[228,130906,130907],{},[231,130908,130909,130911],{},[234,130910,240],{"align":23704},[234,130912,27458],{"align":23704},[272,130914,130915,130921,130928,130935],{},[231,130916,130917,130919],{},[277,130918,130800],{"align":23704},[277,130920,130803],{"align":23704},[231,130922,130923,130925],{},[277,130924,130808],{"align":23704},[277,130926,130927],{"align":23704},"必需,垂直阴影位置,允许负值",[231,130929,130930,130932],{},[277,130931,130816],{"align":23704},[277,130933,130934],{"align":23704},"可选,模糊的距离",[231,130936,130937,130939],{},[277,130938,130832],{"align":23704},[277,130940,130835],{"align":23704},[16,130942,130944],{"id":130943},"_92-浮动","9.2 浮动",[46,130946,130948],{"id":130947},"_921-浮动介绍","9.2.1 浮动介绍",[21,130950,130951],{},"在16.2中详细介绍",[46,130953,130955],{"id":130954},"_922-清除浮动","9.2.2 清除浮动",[29,130957,130958,130961],{},[32,130959,130960],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[32,130962,130963],{},"清除浮动的本质",[21,130965,130966],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[21,130968,8992],{},[1095,130970,130971,130974,130977],{},[32,130972,130973],{},"如果父盒子本身有高度，则不需要清除浮动",[32,130975,130976],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[32,130978,130979],{},"父级有了高度，就不会影响下面的标准流了",[29,130981,130982],{"start":1143},[32,130983,130984],{},"清除浮动样式",[66,130986,130988],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[73,130989,130990,130997,131008,131012,131019,131029],{"__ignoreMap":71},[76,130991,130992,130995],{"class":78,"line":79},[76,130993,130994],{"class":1927},".left",[76,130996,15539],{"class":86},[76,130998,130999,131002,131004,131006],{"class":78,"line":96},[76,131000,131001],{"class":136},"  float",[76,131003,51406],{"class":86},[76,131005,23704],{"class":136},[76,131007,1254],{"class":86},[76,131009,131010],{"class":78,"line":1143},[76,131011,1529],{"class":86},[76,131013,131014,131017],{"class":78,"line":1158},[76,131015,131016],{"class":1927},".right",[76,131018,15539],{"class":86},[76,131020,131021,131023,131025,131027],{"class":78,"line":1164},[76,131022,131001],{"class":136},[76,131024,51406],{"class":86},[76,131026,72491],{"class":136},[76,131028,1254],{"class":86},[76,131030,131031],{"class":78,"line":1178},[76,131032,1529],{"class":86},[225,131034,131035,131043],{},[228,131036,131037],{},[231,131038,131039,131041],{},[234,131040,126985],{"align":23704},[234,131042,27458],{"align":23704},[272,131044,131045,131052,131059],{},[231,131046,131047,131049],{},[277,131048,23704],{"align":23704},[277,131050,131051],{"align":23704},"不允许左侧有浮动元素（清除左侧浮动的影响）",[231,131053,131054,131056],{},[277,131055,72491],{"align":23704},[277,131057,131058],{"align":23704},"不允许右侧有浮动元素（清除右侧浮动的影响）",[231,131060,131061,131064],{},[277,131062,131063],{"align":23704},"both",[277,131065,131066],{"align":23704},"同时清除左右侧浮动的影响",[21,131068,131069],{},"法一",[21,131071,131072],{},"额外标签法也称为隔墙法",[21,131074,131075],{},"使用方式：",[21,131077,131078],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[66,131080,131081],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,131082,131083,131089,131099,131103,131109,131119],{"__ignoreMap":71},[76,131084,131085,131087],{"class":78,"line":79},[76,131086,130994],{"class":1927},[76,131088,15539],{"class":86},[76,131090,131091,131093,131095,131097],{"class":78,"line":96},[76,131092,131001],{"class":136},[76,131094,51406],{"class":86},[76,131096,23704],{"class":136},[76,131098,1254],{"class":86},[76,131100,131101],{"class":78,"line":1143},[76,131102,1529],{"class":86},[76,131104,131105,131107],{"class":78,"line":1158},[76,131106,131016],{"class":1927},[76,131108,15539],{"class":86},[76,131110,131111,131113,131115,131117],{"class":78,"line":1164},[76,131112,131001],{"class":136},[76,131114,51406],{"class":86},[76,131116,72491],{"class":136},[76,131118,1254],{"class":86},[76,131120,131121],{"class":78,"line":1178},[76,131122,1529],{"class":86},[21,131124,131125],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[21,131127,131128],{},"优点： 通俗易懂，书写方便",[21,131130,131131],{},"缺点： 添加许多无意义的标签，结构化较差",[21,131133,131134],{},"注意： 要求这个新的空标签必须是块级元素。",[21,131136,131137],{},"法二",[21,131139,131140],{},"父级添加overflow属性",[66,131142,131143],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,131144,131145,131151,131161,131165,131171,131181],{"__ignoreMap":71},[76,131146,131147,131149],{"class":78,"line":79},[76,131148,130994],{"class":1927},[76,131150,15539],{"class":86},[76,131152,131153,131155,131157,131159],{"class":78,"line":96},[76,131154,131001],{"class":136},[76,131156,51406],{"class":86},[76,131158,23704],{"class":136},[76,131160,1254],{"class":86},[76,131162,131163],{"class":78,"line":1143},[76,131164,1529],{"class":86},[76,131166,131167,131169],{"class":78,"line":1158},[76,131168,131016],{"class":1927},[76,131170,15539],{"class":86},[76,131172,131173,131175,131177,131179],{"class":78,"line":1164},[76,131174,131001],{"class":136},[76,131176,51406],{"class":86},[76,131178,72491],{"class":136},[76,131180,1254],{"class":86},[76,131182,131183],{"class":78,"line":1178},[76,131184,1529],{"class":86},[21,131186,131187],{},"overflow: hidden;",[21,131189,131190],{},"优点：代码简洁",[21,131192,131193],{},"缺点：无法显示溢出的部分",[21,131195,131196],{},"注意：是给父元素添加代码",[21,131198,131199],{},"法三",[21,131201,131202],{},"父级添加after伪元素",[21,131204,131205,131208],{},[131206,131207],"after",{}," 方式是额外标签法的升级版",[21,131210,131211],{},"使用的时候复制就可以",[66,131213,131214],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,131215,131216,131222,131232,131236,131242,131252],{"__ignoreMap":71},[76,131217,131218,131220],{"class":78,"line":79},[76,131219,130994],{"class":1927},[76,131221,15539],{"class":86},[76,131223,131224,131226,131228,131230],{"class":78,"line":96},[76,131225,131001],{"class":136},[76,131227,51406],{"class":86},[76,131229,23704],{"class":136},[76,131231,1254],{"class":86},[76,131233,131234],{"class":78,"line":1143},[76,131235,1529],{"class":86},[76,131237,131238,131240],{"class":78,"line":1158},[76,131239,131016],{"class":1927},[76,131241,15539],{"class":86},[76,131243,131244,131246,131248,131250],{"class":78,"line":1164},[76,131245,131001],{"class":136},[76,131247,51406],{"class":86},[76,131249,72491],{"class":136},[76,131251,1254],{"class":86},[76,131253,131254],{"class":78,"line":1178},[76,131255,1529],{"class":86},[21,131257,131258],{},"优点：没有增加标签，结构更简单",[21,131260,131261],{},"缺点：照顾低版本浏览器",[21,131263,131264],{},"代表网站： 百度、淘宝网、网易等",[21,131266,131267],{},"法四",[21,131269,131270],{},"父级添加双伪元素",[66,131272,131273],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,131274,131275,131281,131291,131295,131301,131311],{"__ignoreMap":71},[76,131276,131277,131279],{"class":78,"line":79},[76,131278,130994],{"class":1927},[76,131280,15539],{"class":86},[76,131282,131283,131285,131287,131289],{"class":78,"line":96},[76,131284,131001],{"class":136},[76,131286,51406],{"class":86},[76,131288,23704],{"class":136},[76,131290,1254],{"class":86},[76,131292,131293],{"class":78,"line":1143},[76,131294,1529],{"class":86},[76,131296,131297,131299],{"class":78,"line":1158},[76,131298,131016],{"class":1927},[76,131300,15539],{"class":86},[76,131302,131303,131305,131307,131309],{"class":78,"line":1164},[76,131304,131001],{"class":136},[76,131306,51406],{"class":86},[76,131308,72491],{"class":136},[76,131310,1254],{"class":86},[76,131312,131313],{"class":78,"line":1178},[76,131314,1529],{"class":86},[21,131316,131317],{},"优点：代码更简洁",[21,131319,131261],{},[21,131321,131322],{},"代表网站：小米、腾讯等",[16,131324,131326],{"id":131325},"_93-ps切图","9.3 PS切图",[46,131328,131330],{"id":131329},"_931-常见图片格式","9.3.1 常见图片格式",[225,131332,131333,131343],{},[228,131334,131335],{},[231,131336,131337,131340],{},[234,131338,131339],{"align":23704},"jpg图像格式",[234,131341,131342],{"align":23704},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[272,131344,131345,131353,131361],{},[231,131346,131347,131350],{},[277,131348,131349],{"align":23704},"gif图像格式",[277,131351,131352],{"align":23704},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[231,131354,131355,131358],{},[277,131356,131357],{"align":23704},"png图像格式",[277,131359,131360],{"align":23704},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[231,131362,131363,131366],{},[277,131364,131365],{"align":23704},"PSD图像格式",[277,131367,131368],{"align":23704},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[46,131370,131372],{"id":131371},"_932-图层切图","9.3.2 图层切图",[21,131374,131375],{},"最简单的切图方式：右击图层 → 导出 → 切片",[21,131377,131378],{},"按住shift选中两个图层->图层菜单->合并图层",[46,131380,131382],{"id":131381},"_933-切片切图","9.3.3 切片切图",[1095,131384,131385,131388],{},[32,131386,131387],{},"利用切片工具手动划出",[32,131389,131390],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[46,131392,131394],{"id":131393},"_934-切图步骤","9.3.4 切图步骤",[21,131396,131397],{},"用切片工具选中：",[1426,131399],{"style":126377,"src":131400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[21,131402,131403],{},"文件 -> 导出",[1426,131405],{"style":126377,"src":131406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5092,131408,131409],{},"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":71,"searchDepth":96,"depth":96,"links":131411},[131412,131421,131425],{"id":129848,"depth":96,"text":129849,"children":131413},[131414,131415,131416,131417,131418,131419,131420],{"id":129873,"depth":1143,"text":129874},{"id":130164,"depth":1143,"text":130165},{"id":130293,"depth":1143,"text":130294},{"id":130493,"depth":1143,"text":130494},{"id":130535,"depth":1143,"text":130536},{"id":130573,"depth":1143,"text":130574},{"id":130663,"depth":1143,"text":130664},{"id":130943,"depth":96,"text":130944,"children":131422},[131423,131424],{"id":130947,"depth":1143,"text":130948},{"id":130954,"depth":1143,"text":130955},{"id":131325,"depth":96,"text":131326,"children":131426},[131427,131428,131429,131430],{"id":131329,"depth":1143,"text":131330},{"id":131371,"depth":1143,"text":131372},{"id":131381,"depth":1143,"text":131382},{"id":131393,"depth":1143,"text":131394},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129840,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131437,"title":131438,"body":131439,"description":23344,"extension":5123,"meta":132080,"navigation":2364,"path":132081,"seo":132082,"stem":132083,"__hash__":132084},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":9,"value":131440,"toc":132068},[131441,131444,131448,131474,131508,131512,131516,131519,131561,131568,131578,131586,131588,131591,131594,131597,131604,131618,131622,131625,131654,131658,131661,131675,131679,131682,131710,131714,131717,131743,131747,131752,131785,131790,131818,131822,131839,131885,131890,131934,131951,132058,132066],[12,131442,131438],{"id":131443},"_10-css规范与学成在线案例",[16,131445,131447],{"id":131446},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[29,131449,131450,131456,131462,131468],{},[32,131451,131452,131455],{},[237,131453,131454],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[32,131457,131458,131461],{},[237,131459,131460],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[32,131463,131464,131467],{},[237,131465,131466],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[32,131469,131470,131473],{},[237,131471,131472],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[66,131475,131476],{"className":126521,"code":129885,"language":126523,"meta":71,"style":71},[73,131477,131478,131482,131488,131504],{"__ignoreMap":71},[76,131479,131480],{"class":78,"line":79},[76,131481,129892],{"class":146},[76,131483,131484,131486],{"class":78,"line":96},[76,131485,51580],{"class":51269},[76,131487,15539],{"class":86},[76,131489,131490,131492,131494,131496,131498,131500,131502],{"class":78,"line":1143},[76,131491,70865],{"class":136},[76,131493,51406],{"class":86},[76,131495,305],{"class":136},[76,131497,51461],{"class":82},[76,131499,51490],{"class":136},[76,131501,129913],{"class":136},[76,131503,1254],{"class":86},[76,131505,131506],{"class":78,"line":1158},[76,131507,1529],{"class":86},[16,131509,131511],{"id":131510},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[46,131513,131515],{"id":131514},"_1021-header头部制作","10.2.1 header头部制作",[1426,131517],{"style":126377,"src":131518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1095,131520,131521,131528,131535,131541,131548,131555],{},[32,131522,131523,131524,131527],{},"1号是版心盒子 ",[237,131525,131526],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[32,131529,131530,131531,131534],{},"版心盒子 里面包含 2号盒子 ",[237,131532,131533],{},"logo"," 图标",[32,131536,131537,131538,131540],{},"版心盒子 里面包含 3号盒子 ",[237,131539,53682],{}," 导航栏",[32,131542,131543,131544,131547],{},"版心盒子 里面包含 4号盒子 ",[237,131545,131546],{},"search"," 搜索框",[32,131549,131550,131551,131554],{},"版心盒子 里面包含 5号盒子 ",[237,131552,131553],{},"user"," 个人信息",[32,131556,131557,131558],{},"注意，要求里面的 ",[237,131559,131560],{},"4个子盒子 必须都浮动",[29,131562,131563],{},[32,131564,131565],{},[237,131566,131567],{},"导航栏注意点:",[21,131569,131570,131571,131574,131575],{},"实际开发中， ",[237,131572,131573],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[237,131576,131577],{},"用 li 包含链接(li+a)的做法",[1095,131579,131580,131583],{},[32,131581,131582],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[32,131584,131585],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[21,131587,8992],{},[21,131589,131590],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[21,131592,131593],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[21,131595,131596],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[29,131598,131599],{"start":96},[32,131600,131601],{},[237,131602,131603],{},"4号盒子search的细节：",[1095,131605,131606,131609,131612],{},[32,131607,131608],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[32,131610,131611],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[32,131613,131614,131617],{},[73,131615,131616],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[46,131619,131621],{"id":131620},"_1022-banner制作","10.2.2 banner制作",[1426,131623],{"style":126377,"src":131624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1095,131626,131627,131634,131640,131647],{},[32,131628,131629,131630,131633],{},"1号盒子是通栏的大盒子 ",[237,131631,131632],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[32,131635,131636,131637,131639],{},"2号盒子是版心 ",[237,131638,883],{}," ， 要水平居中对齐",[32,131641,131642,131643,131646],{},"3号盒子版心内，左对齐 ",[237,131644,131645],{},"subnav"," 侧导航栏",[32,131648,131649,131650,131653],{},"4号盒子版心内，右对齐 ",[237,131651,131652],{},"course"," 课程",[46,131655,131657],{"id":131656},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1426,131659],{"style":126377,"src":131660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1095,131662,131663,131666,131669,131672],{},[32,131664,131665],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[32,131667,131668],{},"1号盒子是标题 H3 左侧浮动",[32,131670,131671],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[32,131673,131674],{},"3号盒子 右浮动 mod 修改",[46,131676,131678],{"id":131677},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1426,131680],{"style":126377,"src":131681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1095,131683,131684,131690,131697,131704,131707],{},[32,131685,131686,131687,131689],{},"1号盒子为最大的盒子 ",[237,131688,53683],{}," 版心水平居中对齐",[32,131691,131692,131693,131696],{},"2号盒子为上面部分 ",[237,131694,131695],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[32,131698,131699,131700,131703],{},"3号盒子为底下部分 ",[237,131701,131702],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[32,131705,131706],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[32,131708,131709],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[46,131711,131713],{"id":131712},"_1025-底部模块制作","10.2.5 底部模块制作",[1426,131715],{"style":126377,"src":131716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1095,131718,131719,131726,131729,131736],{},[32,131720,131721,131722,131725],{},"1号盒子通栏大盒子 底部 ",[237,131723,131724],{},"footer"," 给高度 底色是白色",[32,131727,131728],{},"2号盒子版心水平居中",[32,131730,131731,131732,131735],{},"3号盒子版权 ",[237,131733,131734],{},"copyright"," 左对齐",[32,131737,131738,131739,131742],{},"4号盒子 链接组 ",[237,131740,131741],{},"links"," 右对齐",[46,131744,131746],{"id":131745},"_1026-代码模块","10.2.6 代码模块",[29,131748,131749],{},[32,131750,131751],{},"html部分",[66,131753,131755],{"className":127268,"code":131754,"language":127270,"meta":71,"style":71},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[73,131756,131757],{"__ignoreMap":71},[76,131758,131759,131761,131763,131765,131767,131770,131773,131775,131778,131781,131783],{"class":78,"line":79},[76,131760,998],{"class":86},[76,131762,326],{"class":51269},[76,131764,61026],{"class":1927},[76,131766,133],{"class":86},[76,131768,131769],{"class":192},"\"https:\u002F\u002Fexample.com\"",[76,131771,131772],{"class":1927}," target",[76,131774,133],{"class":86},[76,131776,131777],{"class":192},"\"_blank\"",[76,131779,131780],{"class":86},">链接文字\u003C\u002F",[76,131782,326],{"class":51269},[76,131784,51276],{"class":86},[29,131786,131787],{"start":96},[32,131788,131789],{},"css部分",[66,131791,131792],{"className":127268,"code":131754,"language":127270,"meta":71,"style":71},[73,131793,131794],{"__ignoreMap":71},[76,131795,131796,131798,131800,131802,131804,131806,131808,131810,131812,131814,131816],{"class":78,"line":79},[76,131797,998],{"class":86},[76,131799,326],{"class":51269},[76,131801,61026],{"class":1927},[76,131803,133],{"class":86},[76,131805,131769],{"class":192},[76,131807,131772],{"class":1927},[76,131809,133],{"class":86},[76,131811,131777],{"class":192},[76,131813,131780],{"class":86},[76,131815,326],{"class":51269},[76,131817,51276],{"class":86},[46,131819,131821],{"id":131820},"_1027-收获","10.2.7 收获",[29,131823,131824,131827,131830,131833,131836],{},[32,131825,131826],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[32,131828,131829],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[32,131831,131832],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[32,131834,131835],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[32,131837,131838],{},"遗忘代码",[66,131840,131842],{"className":126521,"code":131841,"language":126523,"meta":71,"style":71},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[73,131843,131844,131866,131871,131881],{"__ignoreMap":71},[76,131845,131846,131848,131850,131852,131854,131856,131858,131860,131862,131864],{"class":78,"line":79},[76,131847,51580],{"class":51269},[76,131849,12402],{"class":86},[76,131851,21],{"class":51269},[76,131853,12402],{"class":86},[76,131855,12],{"class":51269},[76,131857,12402],{"class":86},[76,131859,1095],{"class":51269},[76,131861,12402],{"class":86},[76,131863,32],{"class":51269},[76,131865,15539],{"class":86},[76,131867,131868],{"class":78,"line":96},[76,131869,131870],{"class":146},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[76,131872,131873,131875,131877,131879],{"class":78,"line":1143},[76,131874,128137],{"class":136},[76,131876,51406],{"class":86},[76,131878,60838],{"class":136},[76,131880,1254],{"class":86},[76,131882,131883],{"class":78,"line":1158},[76,131884,1529],{"class":86},[29,131886,131887],{"start":1178},[32,131888,131889],{},"html引css的程序",[66,131891,131892],{"className":126521,"code":131841,"language":126523,"meta":71,"style":71},[73,131893,131894,131916,131920,131930],{"__ignoreMap":71},[76,131895,131896,131898,131900,131902,131904,131906,131908,131910,131912,131914],{"class":78,"line":79},[76,131897,51580],{"class":51269},[76,131899,12402],{"class":86},[76,131901,21],{"class":51269},[76,131903,12402],{"class":86},[76,131905,12],{"class":51269},[76,131907,12402],{"class":86},[76,131909,1095],{"class":51269},[76,131911,12402],{"class":86},[76,131913,32],{"class":51269},[76,131915,15539],{"class":86},[76,131917,131918],{"class":78,"line":96},[76,131919,131870],{"class":146},[76,131921,131922,131924,131926,131928],{"class":78,"line":1143},[76,131923,128137],{"class":136},[76,131925,51406],{"class":86},[76,131927,60838],{"class":136},[76,131929,1254],{"class":86},[76,131931,131932],{"class":78,"line":1158},[76,131933,1529],{"class":86},[29,131935,131936,131939,131942,131945,131948],{"start":1184},[32,131937,131938],{},"浮动的盒子不会有外边距合并问题",[32,131940,131941],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[32,131943,131944],{},"ctrl+g快速定位行；shift+alt多个光标",[32,131946,131947],{},"学习上方各个模块的选择器起名方法，以后就这样用",[32,131949,131950],{},"在写选择器时尽量写全一些，例如",[66,131952,131954],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},"\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",[73,131955,131956,131961,131977,131982,131997,132002,132017,132022,132037,132042],{"__ignoreMap":71},[76,131957,131958],{"class":78,"line":79},[76,131959,131960],{"class":146},"\u002F* 静态定位（默认） *\u002F\n",[76,131962,131963,131966,131968,131970,131972,131975],{"class":78,"line":96},[76,131964,131965],{"class":1927},".static",[76,131967,79776],{"class":86},[76,131969,128881],{"class":136},[76,131971,51406],{"class":86},[76,131973,131974],{"class":136},"static",[76,131976,129451],{"class":86},[76,131978,131979],{"class":78,"line":1143},[76,131980,131981],{"class":146},"\u002F* 相对定位 *\u002F\n",[76,131983,131984,131987,131989,131991,131993,131995],{"class":78,"line":1158},[76,131985,131986],{"class":1927},".relative",[76,131988,79776],{"class":86},[76,131990,128881],{"class":136},[76,131992,51406],{"class":86},[76,131994,54733],{"class":136},[76,131996,129451],{"class":86},[76,131998,131999],{"class":78,"line":1164},[76,132000,132001],{"class":146},"\u002F* 绝对定位 *\u002F\n",[76,132003,132004,132007,132009,132011,132013,132015],{"class":78,"line":1178},[76,132005,132006],{"class":1927},".absolute",[76,132008,79776],{"class":86},[76,132010,128881],{"class":136},[76,132012,51406],{"class":86},[76,132014,54800],{"class":136},[76,132016,129451],{"class":86},[76,132018,132019],{"class":78,"line":1184},[76,132020,132021],{"class":146},"\u002F* 固定定位 *\u002F\n",[76,132023,132024,132027,132029,132031,132033,132035],{"class":78,"line":1275},[76,132025,132026],{"class":1927},".fixed",[76,132028,79776],{"class":86},[76,132030,128881],{"class":136},[76,132032,51406],{"class":86},[76,132034,86202],{"class":136},[76,132036,129451],{"class":86},[76,132038,132039],{"class":78,"line":1281},[76,132040,132041],{"class":146},"\u002F* 粘性定位 *\u002F\n",[76,132043,132044,132047,132049,132051,132053,132056],{"class":78,"line":1293},[76,132045,132046],{"class":1927},".sticky",[76,132048,79776],{"class":86},[76,132050,128881],{"class":136},[76,132052,51406],{"class":86},[76,132054,132055],{"class":136},"sticky",[76,132057,129451],{"class":86},[29,132059,132060,132063],{"start":1581},[32,132061,132062],{},"一定要用好注释",[32,132064,132065],{},"浮动的盒子不会有外边距合并的问题",[5092,132067,131409],{},{"title":71,"searchDepth":96,"depth":96,"links":132069},[132070,132071],{"id":131446,"depth":96,"text":131447},{"id":131510,"depth":96,"text":131511,"children":132072},[132073,132074,132075,132076,132077,132078,132079],{"id":131514,"depth":1143,"text":131515},{"id":131620,"depth":1143,"text":131621},{"id":131656,"depth":1143,"text":131657},{"id":131677,"depth":1143,"text":131678},{"id":131712,"depth":1143,"text":131713},{"id":131745,"depth":1143,"text":131746},{"id":131820,"depth":1143,"text":131821},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131438,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132086,"title":132087,"body":132088,"description":23344,"extension":5123,"meta":133574,"navigation":2364,"path":133575,"seo":133576,"stem":133577,"__hash__":133578},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":9,"value":132089,"toc":133566},[132090,132093,132097,132101,132112,132116,132133,132177,132210,132213,132230,132233,132236,132280,132284,132288,132291,132294,132298,132301,132312,132375,132416,132419,132434,132488,132496,132499,132510,132564,132590,132593,132606,132660,132692,132746,132769,132823,132826,132829,132836,132890,132911,132965,132968,132971,133056,133064,133121,133144,133148,133151,133169,133173,133192,133246,133284,133288,133291,133294,133316,133320,133328,133331,133336,133347,133350,133354,133368,133412,133415,133419,133422,133427,133453,133458,133535,133538,133542,133545,133548,133551,133554,133557,133560,133563],[12,132091,132087],{"id":132092},"_11-传统布局与定位体系",[16,132094,132096],{"id":132095},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[46,132098,132100],{"id":132099},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1095,132102,132103,132106,132109],{},[32,132104,132105],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[32,132107,132108],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[32,132110,132111],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[46,132113,132115],{"id":132114},"_1112-浮动","11.1.2 浮动",[1095,132117,132118,132121,132124,132127,132130],{},[32,132119,132120],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[32,132122,132123],{},"浮动可以改变元素标签默认的排列方式",[32,132125,132126],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[32,132128,132129],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[32,132131,132132],{},"在使用行内块转换时盒子之间是有空隙的",[66,132134,132135],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,132136,132137,132143,132153,132157,132163,132173],{"__ignoreMap":71},[76,132138,132139,132141],{"class":78,"line":79},[76,132140,130994],{"class":1927},[76,132142,15539],{"class":86},[76,132144,132145,132147,132149,132151],{"class":78,"line":96},[76,132146,131001],{"class":136},[76,132148,51406],{"class":86},[76,132150,23704],{"class":136},[76,132152,1254],{"class":86},[76,132154,132155],{"class":78,"line":1143},[76,132156,1529],{"class":86},[76,132158,132159,132161],{"class":78,"line":1158},[76,132160,131016],{"class":1927},[76,132162,15539],{"class":86},[76,132164,132165,132167,132169,132171],{"class":78,"line":1164},[76,132166,131001],{"class":136},[76,132168,51406],{"class":86},[76,132170,72491],{"class":136},[76,132172,1254],{"class":86},[76,132174,132175],{"class":78,"line":1178},[76,132176,1529],{"class":86},[225,132178,132179,132187],{},[228,132180,132181],{},[231,132182,132183,132185],{},[234,132184,126985],{"align":23704},[234,132186,27458],{"align":23704},[272,132188,132189,132196,132203],{},[231,132190,132191,132193],{},[277,132192,54706],{"align":23704},[277,132194,132195],{"align":23704},"元素不浮动（默认值）",[231,132197,132198,132200],{},[277,132199,23704],{"align":23704},[277,132201,132202],{"align":23704},"元素向左浮动",[231,132204,132205,132207],{},[277,132206,72491],{"align":23704},[277,132208,132209],{"align":23704},"元素向右浮动",[21,132211,132212],{},"浮动重点：",[1095,132214,132215,132218,132221,132224,132227],{},[32,132216,132217],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[32,132219,132220],{},"浮动的元素会一行内显示并且元素顶部对齐",[32,132222,132223],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[32,132225,132226],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[32,132228,132229],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[21,132231,132232],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[21,132234,132235],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[66,132237,132238],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,132239,132240,132246,132256,132260,132266,132276],{"__ignoreMap":71},[76,132241,132242,132244],{"class":78,"line":79},[76,132243,130994],{"class":1927},[76,132245,15539],{"class":86},[76,132247,132248,132250,132252,132254],{"class":78,"line":96},[76,132249,131001],{"class":136},[76,132251,51406],{"class":86},[76,132253,23704],{"class":136},[76,132255,1254],{"class":86},[76,132257,132258],{"class":78,"line":1143},[76,132259,1529],{"class":86},[76,132261,132262,132264],{"class":78,"line":1158},[76,132263,131016],{"class":1927},[76,132265,15539],{"class":86},[76,132267,132268,132270,132272,132274],{"class":78,"line":1164},[76,132269,131001],{"class":136},[76,132271,51406],{"class":86},[76,132273,72491],{"class":136},[76,132275,1254],{"class":86},[76,132277,132278],{"class":78,"line":1178},[76,132279,1529],{"class":86},[46,132281,132283],{"id":132282},"_1113-定位","11.1.3 定位",[21965,132285,132287],{"id":132286},"_11131-使用场景","11.1.3.1 使用场景",[21,132289,132290],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[21,132292,132293],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21965,132295,132297],{"id":132296},"_11132-定位组成","11.1.3.2 定位组成",[21,132299,132300],{},"定位 = 定位模式 + 边偏移",[29,132302,132303],{},[32,132304,132305,132308,132309],{},[237,132306,132307],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[237,132310,132311],{},"定位模式",[66,132313,132315],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[73,132316,132317,132323,132337,132354,132371],{"__ignoreMap":71},[76,132318,132319,132321],{"class":78,"line":79},[76,132320,130369],{"class":1927},[76,132322,15539],{"class":86},[76,132324,132325,132328,132330,132332,132334],{"class":78,"line":96},[76,132326,132327],{"class":136},"  position",[76,132329,51406],{"class":86},[76,132331,54733],{"class":136},[76,132333,130384],{"class":86},[76,132335,132336],{"class":146},"\u002F* 定位模式 *\u002F\n",[76,132338,132339,132342,132344,132346,132348,132351],{"class":78,"line":1143},[76,132340,132341],{"class":136},"  top",[76,132343,51406],{"class":86},[76,132345,534],{"class":136},[76,132347,51461],{"class":82},[76,132349,132350],{"class":86},";           ",[76,132352,132353],{"class":146},"\u002F* 边偏移：上 *\u002F\n",[76,132355,132356,132359,132361,132363,132365,132368],{"class":78,"line":1158},[76,132357,132358],{"class":136},"  left",[76,132360,51406],{"class":86},[76,132362,788],{"class":136},[76,132364,51461],{"class":82},[76,132366,132367],{"class":86},";          ",[76,132369,132370],{"class":146},"\u002F* 边偏移：左 *\u002F\n",[76,132372,132373],{"class":78,"line":1164},[76,132374,1529],{"class":86},[225,132376,132377,132386],{},[228,132378,132379],{},[231,132380,132381,132383],{},[234,132382,240],{"align":23704},[234,132384,132385],{"align":23704},"语义",[272,132387,132388,132395,132402,132409],{},[231,132389,132390,132392],{},[277,132391,131974],{"align":23704},[277,132393,132394],{"align":23704},"静态定位",[231,132396,132397,132399],{},[277,132398,54733],{"align":23704},[277,132400,132401],{"align":23704},"相对定位",[231,132403,132404,132406],{},[277,132405,54800],{"align":23704},[277,132407,132408],{"align":23704},"绝对定位",[231,132410,132411,132413],{},[277,132412,86202],{"align":23704},[277,132414,132415],{"align":23704},"固定定位",[21,132417,132418],{},"（1）静态定位：",[1095,132420,132421,132432],{},[32,132422,132423,132424,132427,132428,132431],{},"静态定位是元素的 ",[237,132425,132426],{},"默认定位方式"," ， ",[237,132429,132430],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[32,132433,5148],{},[66,132435,132436],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132437,132438,132444,132456,132470,132484],{"__ignoreMap":71},[76,132439,132440,132442],{"class":78,"line":79},[76,132441,130369],{"class":1927},[76,132443,15539],{"class":86},[76,132445,132446,132448,132450,132452,132454],{"class":78,"line":96},[76,132447,132327],{"class":136},[76,132449,51406],{"class":86},[76,132451,54733],{"class":136},[76,132453,130384],{"class":86},[76,132455,132336],{"class":146},[76,132457,132458,132460,132462,132464,132466,132468],{"class":78,"line":1143},[76,132459,132341],{"class":136},[76,132461,51406],{"class":86},[76,132463,534],{"class":136},[76,132465,51461],{"class":82},[76,132467,132350],{"class":86},[76,132469,132353],{"class":146},[76,132471,132472,132474,132476,132478,132480,132482],{"class":78,"line":1158},[76,132473,132358],{"class":136},[76,132475,51406],{"class":86},[76,132477,788],{"class":136},[76,132479,51461],{"class":82},[76,132481,132367],{"class":86},[76,132483,132370],{"class":146},[76,132485,132486],{"class":78,"line":1164},[76,132487,1529],{"class":86},[1095,132489,132490,132493],{},[32,132491,132492],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[32,132494,132495],{},"静态定位在布局时我们几乎不用的",[21,132497,132498],{},"（2）相对定位",[1095,132500,132501,132508],{},[32,132502,132503,132504,132507],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[237,132505,132506],{},"原来的位置"," 来说的（自恋型）",[32,132509,5148],{},[66,132511,132512],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132513,132514,132520,132532,132546,132560],{"__ignoreMap":71},[76,132515,132516,132518],{"class":78,"line":79},[76,132517,130369],{"class":1927},[76,132519,15539],{"class":86},[76,132521,132522,132524,132526,132528,132530],{"class":78,"line":96},[76,132523,132327],{"class":136},[76,132525,51406],{"class":86},[76,132527,54733],{"class":136},[76,132529,130384],{"class":86},[76,132531,132336],{"class":146},[76,132533,132534,132536,132538,132540,132542,132544],{"class":78,"line":1143},[76,132535,132341],{"class":136},[76,132537,51406],{"class":86},[76,132539,534],{"class":136},[76,132541,51461],{"class":82},[76,132543,132350],{"class":86},[76,132545,132353],{"class":146},[76,132547,132548,132550,132552,132554,132556,132558],{"class":78,"line":1158},[76,132549,132358],{"class":136},[76,132551,51406],{"class":86},[76,132553,788],{"class":136},[76,132555,51461],{"class":82},[76,132557,132367],{"class":86},[76,132559,132370],{"class":146},[76,132561,132562],{"class":78,"line":1164},[76,132563,1529],{"class":86},[1095,132565,132566],{},[32,132567,132568,132569,132571,132572,132574,132575,132578,132579,132582,132583,132585,132586,132589],{},"相对定位的特点：",[53685,132570],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53685,132573],{},"  ② ",[237,132576,132577],{},"原来"," 在标准流的 ",[237,132580,132581],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53685,132584],{},"  ③因此， ",[237,132587,132588],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[21,132591,132592],{},"（3）绝对定位",[1095,132594,132595,132604],{},[32,132596,132597,132599,132600,132603],{},[237,132598,132408],{}," 是元素在移动位置的时候，是相对于它 ",[237,132601,132602],{},"祖先元素"," 来说的（拼爹型）",[32,132605,5148],{},[66,132607,132608],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132609,132610,132616,132628,132642,132656],{"__ignoreMap":71},[76,132611,132612,132614],{"class":78,"line":79},[76,132613,130369],{"class":1927},[76,132615,15539],{"class":86},[76,132617,132618,132620,132622,132624,132626],{"class":78,"line":96},[76,132619,132327],{"class":136},[76,132621,51406],{"class":86},[76,132623,54733],{"class":136},[76,132625,130384],{"class":86},[76,132627,132336],{"class":146},[76,132629,132630,132632,132634,132636,132638,132640],{"class":78,"line":1143},[76,132631,132341],{"class":136},[76,132633,51406],{"class":86},[76,132635,534],{"class":136},[76,132637,51461],{"class":82},[76,132639,132350],{"class":86},[76,132641,132353],{"class":146},[76,132643,132644,132646,132648,132650,132652,132654],{"class":78,"line":1158},[76,132645,132358],{"class":136},[76,132647,51406],{"class":86},[76,132649,788],{"class":136},[76,132651,51461],{"class":82},[76,132653,132367],{"class":86},[76,132655,132370],{"class":146},[76,132657,132658],{"class":78,"line":1164},[76,132659,1529],{"class":86},[1095,132661,132662,132677,132686,132689],{},[32,132663,132664,132665,132667,132668,132670,132671,132673,132674,132676],{},"绝对定位的特点：",[53685,132666],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53685,132669],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53685,132672],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53685,132675],{},"  (4)固定定位",[32,132678,132679,132681,132682,132685],{},[237,132680,132415],{}," 是元素 ",[237,132683,132684],{},"固定于浏览器可视区的位置"," 。（认死理型）",[32,132687,132688],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[32,132690,132691],{},"语法:",[66,132693,132694],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132695,132696,132702,132714,132728,132742],{"__ignoreMap":71},[76,132697,132698,132700],{"class":78,"line":79},[76,132699,130369],{"class":1927},[76,132701,15539],{"class":86},[76,132703,132704,132706,132708,132710,132712],{"class":78,"line":96},[76,132705,132327],{"class":136},[76,132707,51406],{"class":86},[76,132709,54733],{"class":136},[76,132711,130384],{"class":86},[76,132713,132336],{"class":146},[76,132715,132716,132718,132720,132722,132724,132726],{"class":78,"line":1143},[76,132717,132341],{"class":136},[76,132719,51406],{"class":86},[76,132721,534],{"class":136},[76,132723,51461],{"class":82},[76,132725,132350],{"class":86},[76,132727,132353],{"class":146},[76,132729,132730,132732,132734,132736,132738,132740],{"class":78,"line":1158},[76,132731,132358],{"class":136},[76,132733,51406],{"class":86},[76,132735,788],{"class":136},[76,132737,51461],{"class":82},[76,132739,132367],{"class":86},[76,132741,132370],{"class":146},[76,132743,132744],{"class":78,"line":1164},[76,132745,1529],{"class":86},[1095,132747,132748,132757],{},[32,132749,132750,132751,132753,132754,132756],{},"特点:",[53685,132752],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53685,132755],{},"  ②固定定位不再占有原先的位置,完全脱标",[32,132758,132759,132760,132762,132763,132765,132766,132768],{},"固定在版心位置的方法:",[53685,132761],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53685,132764],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53685,132767],{},"  实例：",[66,132770,132771],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132772,132773,132779,132791,132805,132819],{"__ignoreMap":71},[76,132774,132775,132777],{"class":78,"line":79},[76,132776,130369],{"class":1927},[76,132778,15539],{"class":86},[76,132780,132781,132783,132785,132787,132789],{"class":78,"line":96},[76,132782,132327],{"class":136},[76,132784,51406],{"class":86},[76,132786,54733],{"class":136},[76,132788,130384],{"class":86},[76,132790,132336],{"class":146},[76,132792,132793,132795,132797,132799,132801,132803],{"class":78,"line":1143},[76,132794,132341],{"class":136},[76,132796,51406],{"class":86},[76,132798,534],{"class":136},[76,132800,51461],{"class":82},[76,132802,132350],{"class":86},[76,132804,132353],{"class":146},[76,132806,132807,132809,132811,132813,132815,132817],{"class":78,"line":1158},[76,132808,132358],{"class":136},[76,132810,51406],{"class":86},[76,132812,788],{"class":136},[76,132814,51461],{"class":82},[76,132816,132367],{"class":86},[76,132818,132370],{"class":146},[76,132820,132821],{"class":78,"line":1164},[76,132822,1529],{"class":86},[1426,132824],{"style":126377,"src":132825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[21,132827,132828],{},"(5)粘性定位",[1095,132830,132831,132834],{},[32,132832,132833],{},"粘性定位可以被认为是相对定位和固定定位的混合",[32,132835,5148],{},[66,132837,132838],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132839,132840,132846,132858,132872,132886],{"__ignoreMap":71},[76,132841,132842,132844],{"class":78,"line":79},[76,132843,130369],{"class":1927},[76,132845,15539],{"class":86},[76,132847,132848,132850,132852,132854,132856],{"class":78,"line":96},[76,132849,132327],{"class":136},[76,132851,51406],{"class":86},[76,132853,54733],{"class":136},[76,132855,130384],{"class":86},[76,132857,132336],{"class":146},[76,132859,132860,132862,132864,132866,132868,132870],{"class":78,"line":1143},[76,132861,132341],{"class":136},[76,132863,51406],{"class":86},[76,132865,534],{"class":136},[76,132867,51461],{"class":82},[76,132869,132350],{"class":86},[76,132871,132353],{"class":146},[76,132873,132874,132876,132878,132880,132882,132884],{"class":78,"line":1158},[76,132875,132358],{"class":136},[76,132877,51406],{"class":86},[76,132879,788],{"class":136},[76,132881,51461],{"class":82},[76,132883,132367],{"class":86},[76,132885,132370],{"class":146},[76,132887,132888],{"class":78,"line":1164},[76,132889,1529],{"class":86},[1095,132891,132892],{},[32,132893,132894,132895,132897,132898,132900,132901,132903,132904,132907,132908,132910],{},"粘性定位的特点：",[53685,132896],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53685,132899],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53685,132902],{},"  ③必须添加 top 、left、right、bottom ",[237,132905,132906],{},"其中一个"," 才有效",[53685,132909],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[66,132912,132913],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,132914,132915,132921,132933,132947,132961],{"__ignoreMap":71},[76,132916,132917,132919],{"class":78,"line":79},[76,132918,130369],{"class":1927},[76,132920,15539],{"class":86},[76,132922,132923,132925,132927,132929,132931],{"class":78,"line":96},[76,132924,132327],{"class":136},[76,132926,51406],{"class":86},[76,132928,54733],{"class":136},[76,132930,130384],{"class":86},[76,132932,132336],{"class":146},[76,132934,132935,132937,132939,132941,132943,132945],{"class":78,"line":1143},[76,132936,132341],{"class":136},[76,132938,51406],{"class":86},[76,132940,534],{"class":136},[76,132942,51461],{"class":82},[76,132944,132350],{"class":86},[76,132946,132353],{"class":146},[76,132948,132949,132951,132953,132955,132957,132959],{"class":78,"line":1158},[76,132950,132358],{"class":136},[76,132952,51406],{"class":86},[76,132954,788],{"class":136},[76,132956,51461],{"class":82},[76,132958,132367],{"class":86},[76,132960,132370],{"class":146},[76,132962,132963],{"class":78,"line":1164},[76,132964,1529],{"class":86},[1426,132966],{"style":126377,"src":132967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[21,132969,132970],{},"(6)总结",[225,132972,132973,132988],{},[228,132974,132975],{},[231,132976,132977,132979,132982,132985],{},[234,132978,132311],{"align":23704},[234,132980,132981],{"align":23704},"是否脱标",[234,132983,132984],{"align":23704},"移动位置",[234,132986,132987],{"align":23704},"是否常用",[272,132989,132990,133003,133017,133031,133044],{},[231,132991,132992,132995,132997,133000],{},[277,132993,132994],{"align":23704},"Static 静态定位",[277,132996,104647],{"align":23704},[277,132998,132999],{"align":23704},"不能使用边偏移",[277,133001,133002],{"align":23704},"很少",[231,133004,133005,133008,133011,133014],{},[277,133006,133007],{"align":23704},"Relative 相对定位",[277,133009,133010],{"align":23704},"否(占有位置)",[277,133012,133013],{"align":23704},"相对于自身位置移动",[277,133015,133016],{"align":23704},"基本单独使用",[231,133018,133019,133022,133025,133028],{},[277,133020,133021],{"align":23704},"Absolute 绝对定位",[277,133023,133024],{"align":23704},"是(不占有位置)",[277,133026,133027],{"align":23704},"带有定位的父级",[277,133029,133030],{"align":23704},"要和定位父级元素搭配使用",[231,133032,133033,133036,133038,133041],{},[277,133034,133035],{"align":23704},"Fixed 固定定位",[277,133037,133024],{"align":23704},[277,133039,133040],{"align":23704},"浏览器可视区",[277,133042,133043],{"align":23704},"单独使用,不需要父级",[231,133045,133046,133049,133051,133053],{},[277,133047,133048],{"align":23704},"Sticky 粘性定位",[277,133050,133010],{"align":23704},[277,133052,133040],{"align":23704},[277,133054,133055],{"align":23704},"当前阶段少",[29,133057,133058],{"start":96},[32,133059,133060,133063],{},[237,133061,133062],{},"边偏移"," 则决定了该元素的最终位置",[225,133065,133066,133077],{},[228,133067,133068],{},[231,133069,133070,133073,133075],{},[234,133071,133072],{"align":23704},"边偏移属性",[234,133074,27461],{"align":23704},[234,133076,27458],{"align":23704},[272,133078,133079,133090,133101,133111],{},[231,133080,133081,133084,133087],{},[277,133082,133083],{"align":23704},"top",[277,133085,133086],{"align":23704},"top: 80px;",[277,133088,133089],{"align":23704},"顶端偏移量，定义元素相对于父元素上边线的距离",[231,133091,133092,133095,133098],{},[277,133093,133094],{"align":23704},"bottom",[277,133096,133097],{"align":23704},"bottom: 80px ;",[277,133099,133100],{"align":23704},"底部偏移量，定义元素相对于其父元素下边线的距离",[231,133102,133103,133105,133108],{},[277,133104,23704],{"align":23704},[277,133106,133107],{"align":23704},"left: 80px ;",[277,133109,133110],{"align":23704},"左侧偏移量，定义元素相对于其父元素左边线的距离",[231,133112,133113,133115,133118],{},[277,133114,72491],{"align":23704},[277,133116,133117],{"align":23704},"right: 80px ;",[277,133119,133120],{"align":23704},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1095,133122,133123],{},[32,133124,8992,133125,133127,133128,133130,133131,133133,133134,133137,133138,133140,133141,133143],{},[53685,133126],{},"  ① ",[237,133129,133062],{}," 需要和 ",[237,133132,132311],{}," 联合使用， ",[237,133135,133136],{},"单独使用无效"," ；",[53685,133139],{},"  ②top和bottom不要同时使用",[53685,133142],{},"  ③left和right不要同时使用",[21965,133145,133147],{"id":133146},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[21,133149,133150],{},"子级是绝对定位的话，父级要用相对定位",[1095,133152,133153,133156,133159,133162],{},[32,133154,133155],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[32,133157,133158],{},"父盒子需要加定位限制子盒子在父盒子内显示",[32,133160,133161],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[32,133163,133164,133165,133168],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[237,133166,133167],{},"子绝父绝"," 也会遇到",[21965,133170,133172],{"id":133171},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1095,133174,133175,133190],{},[32,133176,133177,133178,133181,133182,133185,133186,133189],{},"在使用 ",[237,133179,133180],{},"定位"," 布局时，可能会 ",[237,133183,133184],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[237,133187,133188],{},"z-index"," 来控制盒子的前后次序 (z轴)",[32,133191,5148],{},[66,133193,133194],{"className":126521,"code":132314,"language":126523,"meta":71,"style":71},[73,133195,133196,133202,133214,133228,133242],{"__ignoreMap":71},[76,133197,133198,133200],{"class":78,"line":79},[76,133199,130369],{"class":1927},[76,133201,15539],{"class":86},[76,133203,133204,133206,133208,133210,133212],{"class":78,"line":96},[76,133205,132327],{"class":136},[76,133207,51406],{"class":86},[76,133209,54733],{"class":136},[76,133211,130384],{"class":86},[76,133213,132336],{"class":146},[76,133215,133216,133218,133220,133222,133224,133226],{"class":78,"line":1143},[76,133217,132341],{"class":136},[76,133219,51406],{"class":86},[76,133221,534],{"class":136},[76,133223,51461],{"class":82},[76,133225,132350],{"class":86},[76,133227,132353],{"class":146},[76,133229,133230,133232,133234,133236,133238,133240],{"class":78,"line":1158},[76,133231,132358],{"class":136},[76,133233,51406],{"class":86},[76,133235,788],{"class":136},[76,133237,51461],{"class":82},[76,133239,132367],{"class":86},[76,133241,132370],{"class":146},[76,133243,133244],{"class":78,"line":1164},[76,133245,1529],{"class":86},[1095,133247,133248],{},[32,133249,133250,133251,133127,133253,133255,133256,127684,133259,82508,133262,133264,133265,133267,133268,133271,133272,133137,133275,133277,133278,133281,133283],{},"z-index的特性",[53685,133252],{},[237,133254,126985],{}," ： ",[237,133257,133258],{},"正整数",[237,133260,133261],{},"负整数",[237,133263,279],{}," ，默认值是 0，数值越大，盒子越靠上；",[53685,133266],{},"  ②如果 ",[237,133269,133270],{},"属性值相同"," ，则按照书写顺序， ",[237,133273,133274],{},"后来居上",[53685,133276],{},"  ③数字后面 ",[237,133279,133280],{},"不能加单位",[53685,133282],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21965,133285,133287],{"id":133286},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[21,133289,133290],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[21,133292,133293],{},"方法:",[1095,133295,133296,133306],{},[32,133297,133298,133299,133302,133303],{},"left: 50%; 让 ",[237,133300,133301],{},"盒子的左侧"," 移动到 ",[237,133304,133305],{},"父级元素的水平中心位置",[32,133307,133308,133309,133312,133313],{},"margin-left: -100px; 让盒子 ",[237,133310,133311],{},"向左"," 移动 ",[237,133314,133315],{},"自身宽度的一半",[21965,133317,133319],{"id":133318},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[29,133321,133322,133325],{},[32,133323,133324],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[32,133326,133327],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[21,133329,133330],{},"也就是说绝对定位和固定定位和浮动类似",[29,133332,133333],{"start":1143},[32,133334,133335],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1095,133337,133338,133341,133344],{},[32,133339,133340],{},"可以用inline-block 转换为行内块",[32,133342,133343],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[32,133345,133346],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[21,133348,133349],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21965,133351,133353],{"id":133352},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[29,133355,133356,133359,133362,133365],{},[32,133357,133358],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[32,133360,133361],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[32,133363,133364],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[32,133366,133367],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[66,133369,133370],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,133371,133372,133378,133388,133392,133398,133408],{"__ignoreMap":71},[76,133373,133374,133376],{"class":78,"line":79},[76,133375,130994],{"class":1927},[76,133377,15539],{"class":86},[76,133379,133380,133382,133384,133386],{"class":78,"line":96},[76,133381,131001],{"class":136},[76,133383,51406],{"class":86},[76,133385,23704],{"class":136},[76,133387,1254],{"class":86},[76,133389,133390],{"class":78,"line":1143},[76,133391,1529],{"class":86},[76,133393,133394,133396],{"class":78,"line":1158},[76,133395,131016],{"class":1927},[76,133397,15539],{"class":86},[76,133399,133400,133402,133404,133406],{"class":78,"line":1164},[76,133401,131001],{"class":136},[76,133403,51406],{"class":86},[76,133405,72491],{"class":136},[76,133407,1254],{"class":86},[76,133409,133410],{"class":78,"line":1178},[76,133411,1529],{"class":86},[1426,133413],{"style":126377,"src":133414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21965,133416,133418],{"id":133417},"_11138-轮播图","11.1.3.8 轮播图",[1426,133420],{"style":126377,"src":133421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[29,133423,133424],{},[32,133425,133426],{},"制作顺序:",[1095,133428,133429,133432,133435,133444],{},[32,133430,133431],{},"大盒子我们类名为： tb-promo 淘宝广告",[32,133433,133434],{},"里面先放一张图片",[32,133436,133437,133438,133440,133441,133443],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53685,133439],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53685,133442],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[32,133445,133446,133447,133449,133450,133452],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53685,133448],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53685,133451],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[29,133454,133455],{"start":96},[32,133456,133457],{},"代码模块",[66,133459,133461],{"className":126521,"code":133460,"language":126523,"meta":71,"style":71},"\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",[73,133462,133463,133468,133475,133485,133495,133505,133509,133514,133521,133531],{"__ignoreMap":71},[76,133464,133465],{"class":78,"line":79},[76,133466,133467],{"class":146},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[76,133469,133470,133473],{"class":78,"line":96},[76,133471,133472],{"class":1927},".son",[76,133474,15539],{"class":86},[76,133476,133477,133479,133481,133483],{"class":78,"line":1143},[76,133478,132327],{"class":136},[76,133480,51406],{"class":86},[76,133482,54800],{"class":136},[76,133484,1254],{"class":86},[76,133486,133487,133489,133491,133493],{"class":78,"line":1158},[76,133488,132341],{"class":136},[76,133490,51406],{"class":86},[76,133492,279],{"class":136},[76,133494,1254],{"class":86},[76,133496,133497,133499,133501,133503],{"class":78,"line":1164},[76,133498,132358],{"class":136},[76,133500,51406],{"class":86},[76,133502,279],{"class":136},[76,133504,1254],{"class":86},[76,133506,133507],{"class":78,"line":1178},[76,133508,1529],{"class":86},[76,133510,133511],{"class":78,"line":1184},[76,133512,133513],{"class":146},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[76,133515,133516,133519],{"class":78,"line":1275},[76,133517,133518],{"class":1927},".father",[76,133520,15539],{"class":86},[76,133522,133523,133525,133527,133529],{"class":78,"line":1281},[76,133524,132327],{"class":136},[76,133526,51406],{"class":86},[76,133528,54733],{"class":136},[76,133530,1254],{"class":86},[76,133532,133533],{"class":78,"line":1293},[76,133534,1529],{"class":86},[21,133536,133537],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[46,133539,133541],{"id":133540},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1426,133543],{"style":126377,"src":133544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[21,133546,133547],{},"✨ 黄金口诀：",[21,133549,133550],{},"\"TOP正下负上，LEFT正右负左\"",[21,133552,133553],{},"\"RIGHT正左负右，BOTTOM正上负下",[21,133555,133556],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[21,133558,133559],{},"✨ 简单记：",[21,133561,133562],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5092,133564,133565],{},"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":71,"searchDepth":96,"depth":96,"links":133567},[133568],{"id":132095,"depth":96,"text":132096,"children":133569},[133570,133571,133572,133573],{"id":132099,"depth":1143,"text":132100},{"id":132114,"depth":1143,"text":132115},{"id":132282,"depth":1143,"text":132283},{"id":133540,"depth":1143,"text":133541},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132087,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133580,"title":133581,"body":133582,"description":23344,"extension":5123,"meta":135005,"navigation":2364,"path":135006,"seo":135007,"stem":135008,"__hash__":135009},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":9,"value":133583,"toc":134984},[133584,133587,133591,133599,133603,133608,133616,133628,133632,133637,133645,133656,133660,133665,133706,133714,133718,133721,133724,133727,133821,133824,133918,133921,134015,134018,134021,134056,134059,134062,134092,134095,134098,134101,134104,134107,134110,134113,134183,134186,134190,134194,134235,134239,134245,134248,134251,134255,134258,134261,134264,134345,134348,134351,134355,134359,134362,134365,134368,134371,134374,134380,134389,134393,134412,134416,134426,134429,134432,134435,134438,134441,134444,134447,134450,134459,134463,134472,134475,134480,134533,134538,134704,134707,134710,134715,134718,134721,134724,134727,134732,134880,134883,134886,134891,134894,134899,134933,134936,134939,134943,134946,134953,134956,134959,134962,134965,134968,134971,134974,134978,134981],[12,133585,133581],{"id":133586},"_12-显示隐藏与图形资源",[16,133588,133590],{"id":133589},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1095,133592,133593,133596],{},[32,133594,133595],{},"目的:让一个元素在页面中消失或者显示出来",[32,133597,133598],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[46,133600,133602],{"id":133601},"_1211-display-显示","12.1.1 display 显示",[29,133604,133605],{},[32,133606,133607],{},"display 设置或检索对象是否及如何显示",[1095,133609,133610,133613],{},[32,133611,133612],{},"display: none;隐藏对象",[32,133614,133615],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[29,133617,133618,133625],{"start":96},[32,133619,133620,133621,133624],{},"特点： display 隐藏元素后， ",[237,133622,133623],{},"不再占"," 有原来的位置",[32,133626,133627],{},"在js中使用非常的广泛",[46,133629,133631],{"id":133630},"_1212-visibility可见性","12.1.2 visibility可见性",[29,133633,133634],{},[32,133635,133636],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1095,133638,133639,133642],{},[32,133640,133641],{},"visibility： visible；元素可见",[32,133643,133644],{},"visibility：hidden；元素隐藏",[29,133646,133647,133650,133653],{"start":96},[32,133648,133649],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[32,133651,133652],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[32,133654,133655],{},"隐藏后继续占有原有位置",[46,133657,133659],{"id":133658},"_1213-overflow溢出","12.1.3 overflow溢出",[1095,133661,133662],{},[32,133663,133664],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[225,133666,133667,133675],{},[228,133668,133669],{},[231,133670,133671,133673],{},[234,133672,126985],{"align":23704},[234,133674,27458],{"align":23704},[272,133676,133677,133685,133692,133699],{},[231,133678,133679,133682],{},[277,133680,133681],{"align":23704},"visible",[277,133683,133684],{"align":23704},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[231,133686,133687,133689],{},[277,133688,61683],{"align":23704},[277,133690,133691],{"align":23704},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[231,133693,133694,133696],{},[277,133695,128941],{"align":23704},[277,133697,133698],{"align":23704},"不管超出内容否，总是显示滚动条",[231,133700,133701,133703],{},[277,133702,72632],{"align":23704},[277,133704,133705],{"align":23704},"超出自动显示滚动条，不超出不显示滚动条",[1095,133707,133708,133711],{},[32,133709,133710],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[32,133712,133713],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[46,133715,133717],{"id":133716},"_1214-案例收获","12.1.4 案例收获",[1426,133719],{"style":126377,"src":133720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[21,133722,133723],{},"问题：没做出来动态效果，使用hover没实现",[21,133725,133726],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[66,133728,133729],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,133730,133731,133735,133749,133753,133767,133771,133785,133789,133803,133807],{"__ignoreMap":71},[76,133732,133733],{"class":78,"line":79},[76,133734,131960],{"class":146},[76,133736,133737,133739,133741,133743,133745,133747],{"class":78,"line":96},[76,133738,131965],{"class":1927},[76,133740,79776],{"class":86},[76,133742,128881],{"class":136},[76,133744,51406],{"class":86},[76,133746,131974],{"class":136},[76,133748,129451],{"class":86},[76,133750,133751],{"class":78,"line":1143},[76,133752,131981],{"class":146},[76,133754,133755,133757,133759,133761,133763,133765],{"class":78,"line":1158},[76,133756,131986],{"class":1927},[76,133758,79776],{"class":86},[76,133760,128881],{"class":136},[76,133762,51406],{"class":86},[76,133764,54733],{"class":136},[76,133766,129451],{"class":86},[76,133768,133769],{"class":78,"line":1164},[76,133770,132001],{"class":146},[76,133772,133773,133775,133777,133779,133781,133783],{"class":78,"line":1178},[76,133774,132006],{"class":1927},[76,133776,79776],{"class":86},[76,133778,128881],{"class":136},[76,133780,51406],{"class":86},[76,133782,54800],{"class":136},[76,133784,129451],{"class":86},[76,133786,133787],{"class":78,"line":1184},[76,133788,132021],{"class":146},[76,133790,133791,133793,133795,133797,133799,133801],{"class":78,"line":1275},[76,133792,132026],{"class":1927},[76,133794,79776],{"class":86},[76,133796,128881],{"class":136},[76,133798,51406],{"class":86},[76,133800,86202],{"class":136},[76,133802,129451],{"class":86},[76,133804,133805],{"class":78,"line":1281},[76,133806,132041],{"class":146},[76,133808,133809,133811,133813,133815,133817,133819],{"class":78,"line":1293},[76,133810,132046],{"class":1927},[76,133812,79776],{"class":86},[76,133814,128881],{"class":136},[76,133816,51406],{"class":86},[76,133818,132055],{"class":136},[76,133820,129451],{"class":86},[21,133822,133823],{},"完整代码：",[66,133825,133826],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,133827,133828,133832,133846,133850,133864,133868,133882,133886,133900,133904],{"__ignoreMap":71},[76,133829,133830],{"class":78,"line":79},[76,133831,131960],{"class":146},[76,133833,133834,133836,133838,133840,133842,133844],{"class":78,"line":96},[76,133835,131965],{"class":1927},[76,133837,79776],{"class":86},[76,133839,128881],{"class":136},[76,133841,51406],{"class":86},[76,133843,131974],{"class":136},[76,133845,129451],{"class":86},[76,133847,133848],{"class":78,"line":1143},[76,133849,131981],{"class":146},[76,133851,133852,133854,133856,133858,133860,133862],{"class":78,"line":1158},[76,133853,131986],{"class":1927},[76,133855,79776],{"class":86},[76,133857,128881],{"class":136},[76,133859,51406],{"class":86},[76,133861,54733],{"class":136},[76,133863,129451],{"class":86},[76,133865,133866],{"class":78,"line":1164},[76,133867,132001],{"class":146},[76,133869,133870,133872,133874,133876,133878,133880],{"class":78,"line":1178},[76,133871,132006],{"class":1927},[76,133873,79776],{"class":86},[76,133875,128881],{"class":136},[76,133877,51406],{"class":86},[76,133879,54800],{"class":136},[76,133881,129451],{"class":86},[76,133883,133884],{"class":78,"line":1184},[76,133885,132021],{"class":146},[76,133887,133888,133890,133892,133894,133896,133898],{"class":78,"line":1275},[76,133889,132026],{"class":1927},[76,133891,79776],{"class":86},[76,133893,128881],{"class":136},[76,133895,51406],{"class":86},[76,133897,86202],{"class":136},[76,133899,129451],{"class":86},[76,133901,133902],{"class":78,"line":1281},[76,133903,132041],{"class":146},[76,133905,133906,133908,133910,133912,133914,133916],{"class":78,"line":1293},[76,133907,132046],{"class":1927},[76,133909,79776],{"class":86},[76,133911,128881],{"class":136},[76,133913,51406],{"class":86},[76,133915,132055],{"class":136},[76,133917,129451],{"class":86},[21,133919,133920],{},"分布思路重点详解：",[66,133922,133923],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,133924,133925,133929,133943,133947,133961,133965,133979,133983,133997,134001],{"__ignoreMap":71},[76,133926,133927],{"class":78,"line":79},[76,133928,131960],{"class":146},[76,133930,133931,133933,133935,133937,133939,133941],{"class":78,"line":96},[76,133932,131965],{"class":1927},[76,133934,79776],{"class":86},[76,133936,128881],{"class":136},[76,133938,51406],{"class":86},[76,133940,131974],{"class":136},[76,133942,129451],{"class":86},[76,133944,133945],{"class":78,"line":1143},[76,133946,131981],{"class":146},[76,133948,133949,133951,133953,133955,133957,133959],{"class":78,"line":1158},[76,133950,131986],{"class":1927},[76,133952,79776],{"class":86},[76,133954,128881],{"class":136},[76,133956,51406],{"class":86},[76,133958,54733],{"class":136},[76,133960,129451],{"class":86},[76,133962,133963],{"class":78,"line":1164},[76,133964,132001],{"class":146},[76,133966,133967,133969,133971,133973,133975,133977],{"class":78,"line":1178},[76,133968,132006],{"class":1927},[76,133970,79776],{"class":86},[76,133972,128881],{"class":136},[76,133974,51406],{"class":86},[76,133976,54800],{"class":136},[76,133978,129451],{"class":86},[76,133980,133981],{"class":78,"line":1184},[76,133982,132021],{"class":146},[76,133984,133985,133987,133989,133991,133993,133995],{"class":78,"line":1275},[76,133986,132026],{"class":1927},[76,133988,79776],{"class":86},[76,133990,128881],{"class":136},[76,133992,51406],{"class":86},[76,133994,86202],{"class":136},[76,133996,129451],{"class":86},[76,133998,133999],{"class":78,"line":1281},[76,134000,132041],{"class":146},[76,134002,134003,134005,134007,134009,134011,134013],{"class":78,"line":1293},[76,134004,132046],{"class":1927},[76,134006,79776],{"class":86},[76,134008,128881],{"class":136},[76,134010,51406],{"class":86},[76,134012,132055],{"class":136},[76,134014,129451],{"class":86},[1426,134016],{"style":126377,"src":134017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[21,134019,134020],{},"图片太大，盒子太小，此时需要修改图片的大小",[66,134022,134024],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[73,134025,134026],{"__ignoreMap":71},[76,134027,134028,134030,134032,134034,134036,134039,134041,134043,134046,134049,134051,134054],{"class":78,"line":79},[76,134029,998],{"class":86},[76,134031,1426],{"class":51269},[76,134033,55208],{"class":1927},[76,134035,133],{"class":86},[76,134037,134038],{"class":192},"\"images\u002Fpic.jpg\"",[76,134040,55216],{"class":1927},[76,134042,133],{"class":86},[76,134044,134045],{"class":192},"\"描述文字\"",[76,134047,134048],{"class":1927}," title",[76,134050,133],{"class":86},[76,134052,134053],{"class":192},"\"悬停提示\"",[76,134055,51276],{"class":86},[1426,134057],{"style":126377,"src":134058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[21,134060,134061],{},"制造遮罩层",[66,134063,134064],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,134065,134066],{"__ignoreMap":71},[76,134067,134068,134070,134072,134074,134076,134078,134080,134082,134084,134086,134088,134090],{"class":78,"line":79},[76,134069,998],{"class":86},[76,134071,1426],{"class":51269},[76,134073,55208],{"class":1927},[76,134075,133],{"class":86},[76,134077,134038],{"class":192},[76,134079,55216],{"class":1927},[76,134081,133],{"class":86},[76,134083,134045],{"class":192},[76,134085,134048],{"class":1927},[76,134087,133],{"class":86},[76,134089,134053],{"class":192},[76,134091,51276],{"class":86},[21,134093,134094],{},"此时是这样的为标准流",[1426,134096],{"style":126377,"src":134097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[21,134099,134100],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[21,134102,134103],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[21,134105,134106],{},"让他在中间，用center(background-position)",[21,134108,134109],{},"将需要变的尽可能放到一个盒子中",[21,134111,134112],{},"放大盒子上内部盒子发生变化",[66,134114,134116],{"className":126521,"code":134115,"language":126523,"meta":71,"style":71},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[73,134117,134118,134124,134134,134138,134145,134155,134167,134179],{"__ignoreMap":71},[76,134119,134120,134122],{"class":78,"line":79},[76,134121,127588],{"class":1927},[76,134123,15539],{"class":86},[76,134125,134126,134128,134130,134132],{"class":78,"line":96},[76,134127,132327],{"class":136},[76,134129,51406],{"class":86},[76,134131,54733],{"class":136},[76,134133,1254],{"class":86},[76,134135,134136],{"class":78,"line":1143},[76,134137,1529],{"class":86},[76,134139,134140,134143],{"class":78,"line":1158},[76,134141,134142],{"class":1927},".child",[76,134144,15539],{"class":86},[76,134146,134147,134149,134151,134153],{"class":78,"line":1164},[76,134148,132327],{"class":136},[76,134150,51406],{"class":86},[76,134152,54800],{"class":136},[76,134154,1254],{"class":86},[76,134156,134157,134159,134161,134163,134165],{"class":78,"line":1178},[76,134158,132341],{"class":136},[76,134160,51406],{"class":86},[76,134162,744],{"class":136},[76,134164,416],{"class":82},[76,134166,1254],{"class":86},[76,134168,134169,134171,134173,134175,134177],{"class":78,"line":1184},[76,134170,132358],{"class":136},[76,134172,51406],{"class":86},[76,134174,744],{"class":136},[76,134176,416],{"class":82},[76,134178,1254],{"class":86},[76,134180,134181],{"class":78,"line":1275},[76,134182,1529],{"class":86},[21,134184,134185],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[16,134187,134189],{"id":134188},"_122-精灵图","12.2 精灵图",[46,134191,134193],{"id":134192},"_1221-理解","12.2.1 理解",[29,134195,134196,134214],{},[32,134197,134198,134199,132427,134202,134205,134206,134209,134210,134213],{},"目的： ",[237,134200,134201],{},"为了有效地减少服务器接收和发送请求的次数",[237,134203,134204],{},"提高"," 页面的 ",[237,134207,134208],{},"加载速度"," ，出现了 ",[237,134211,134212],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[32,134215,134216,134217,134219,134220,134222,134223,134225,134226,134228,134229,134231,134232,134234],{},"使用精灵图核心：",[53685,134218],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53685,134221],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53685,134224],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53685,134227],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53685,134230],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53685,134233],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[46,134236,134238],{"id":134237},"_1222-扒图","12.2.2 扒图",[66,134240,134243],{"className":134241,"code":134242,"language":5154},[5152],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[73,134244,134242],{"__ignoreMap":71},[1426,134246],{"style":126377,"src":134247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1426,134249],{"style":126377,"src":134250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[46,134252,134254],{"id":134253},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1426,134256],{"style":126377,"src":134257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[21,134259,134260],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1426,134262],{"style":126377,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[66,134265,134267],{"className":126521,"code":134266,"language":126523,"meta":71,"style":71},"\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",[73,134268,134269,134274,134281,134293,134305,134324,134341],{"__ignoreMap":71},[76,134270,134271],{"class":78,"line":79},[76,134272,134273],{"class":146},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[76,134275,134276,134279],{"class":78,"line":96},[76,134277,134278],{"class":1927},".icon",[76,134280,15539],{"class":86},[76,134282,134283,134285,134287,134289,134291],{"class":78,"line":1143},[76,134284,70537],{"class":136},[76,134286,51406],{"class":86},[76,134288,788],{"class":136},[76,134290,51461],{"class":82},[76,134292,1254],{"class":86},[76,134294,134295,134297,134299,134301,134303],{"class":78,"line":1158},[76,134296,70757],{"class":136},[76,134298,51406],{"class":86},[76,134300,788],{"class":136},[76,134302,51461],{"class":82},[76,134304,1254],{"class":86},[76,134306,134307,134309,134311,134313,134315,134318,134320,134322],{"class":78,"line":1164},[76,134308,70580],{"class":136},[76,134310,51406],{"class":86},[76,134312,61695],{"class":136},[76,134314,87],{"class":86},[76,134316,134317],{"class":5183},"sprites.png",[76,134319,13681],{"class":86},[76,134321,61705],{"class":136},[76,134323,1254],{"class":86},[76,134325,134326,134328,134330,134332,134334,134337,134339],{"class":78,"line":1178},[76,134327,128781],{"class":136},[76,134329,51406],{"class":86},[76,134331,51732],{"class":136},[76,134333,51461],{"class":82},[76,134335,134336],{"class":136}," -20",[76,134338,51461],{"class":82},[76,134340,1254],{"class":86},[76,134342,134343],{"class":78,"line":1184},[76,134344,1529],{"class":86},[1426,134346],{"style":126377,"src":134347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[21,134349,134350],{},"在前端中坐标轴的正方向是右和下",[16,134352,134354],{"id":134353},"_123-字体图标","12.3 字体图标",[46,134356,134358],{"id":134357},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[21,134360,134361],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[21,134363,134364],{},"精灵图是有诸多优点的，但是缺点很明显。",[21,134366,134367],{},"1.图片文件还是比较大的。",[21,134369,134370],{},"2.图片本身放大和缩小会失真。",[21,134372,134373],{},"3.一旦图片制作完毕想要更换非常复杂。",[21,134375,134376,134377,25709],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[237,134378,134379],{},"字体图标 iconfont",[21,134381,134382,134385,134386,28354],{},[237,134383,134384],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[237,134387,134388],{},"展示的是图标，本质属于字体",[46,134390,134392],{"id":134391},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1095,134394,134395,134400,134403,134406,134409],{},[32,134396,134397,134399],{},[237,134398,25845],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[32,134401,134402],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[32,134404,134405],{},"兼容性：几乎支持所有的浏览器，请放心使用",[32,134407,134408],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[32,134410,134411],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[46,134413,134415],{"id":134414},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1095,134417,134418],{},[32,134419,134420,134421],{},"icomoon字体库：",[326,134422,134425],{"href":134423,"rel":134424},"http:\u002F\u002Ficomoon.io\u002F",[23833],"http:\u002F\u002Ficomoon.io",[21,134427,134428],{},"进去之后点icomoon app",[1426,134430],{"style":126377,"src":134431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[21,134433,134434],{},"可以对其编辑：",[1426,134436],{"style":126377,"src":134437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[21,134439,134440],{},"生成字体：",[1426,134442],{"style":126377,"src":134443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[21,134445,134446],{},"下载：",[1426,134448],{"style":126377,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1095,134451,134452],{},[32,134453,134454,134455],{},"阿里iconfont字体库： ",[326,134456,134457],{"href":134457,"rel":134458},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23833],[46,134460,134462],{"id":134461},"_1234-字体图标的引入","12.3.4 字体图标的引入",[29,134464,134465],{},[32,134466,134467,134468,134471],{},"把下载包里面的 ",[237,134469,134470],{},"fonts"," 文件夹放入页面根目录下",[1426,134473],{"style":126377,"src":134474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[29,134476,134477],{"start":96},[32,134478,134479],{},"字体文件格式",[225,134481,134482,134491],{},[228,134483,134484],{},[231,134485,134486,134489],{},[234,134487,134488],{"align":23704},"格式",[234,134490,23708],{"align":23704},[272,134492,134493,134503,134513,134523],{},[231,134494,134495,134500],{},[277,134496,134497],{"align":23704},[237,134498,134499],{},".ttf",[277,134501,134502],{"align":23704},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[231,134504,134505,134510],{},[277,134506,134507],{"align":23704},[237,134508,134509],{},".woff",[277,134511,134512],{"align":23704},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[231,134514,134515,134520],{},[277,134516,134517],{"align":23704},[237,134518,134519],{},".eot",[277,134521,134522],{"align":23704},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[231,134524,134525,134530],{},[277,134526,134527],{"align":23704},[237,134528,134529],{},"svg",[277,134531,134532],{"align":23704},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[29,134534,134535],{"start":1143},[32,134536,134537],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[66,134539,134541],{"className":126521,"code":134540,"language":126523,"meta":71,"style":71},"\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",[73,134542,134543,134548,134555,134567,134583,134608,134629,134649,134669,134673,134679,134689,134700],{"__ignoreMap":71},[76,134544,134545],{"class":78,"line":79},[76,134546,134547],{"class":146},"\u002F* 引入字体图标 *\u002F\n",[76,134549,134550,134553],{"class":78,"line":96},[76,134551,134552],{"class":82},"@font-face",[76,134554,15539],{"class":86},[76,134556,134557,134560,134562,134565],{"class":78,"line":1143},[76,134558,134559],{"class":136},"  font-family",[76,134561,51406],{"class":86},[76,134563,134564],{"class":192},"'icomoon'",[76,134566,1254],{"class":86},[76,134568,134569,134572,134574,134576,134578,134581],{"class":78,"line":1158},[76,134570,134571],{"class":136},"  src",[76,134573,51406],{"class":86},[76,134575,61695],{"class":136},[76,134577,87],{"class":86},[76,134579,134580],{"class":192},"'fonts\u002Ficomoon.eot'",[76,134582,2684],{"class":86},[76,134584,134585,134587,134589,134591,134593,134596,134598,134601,134603,134606],{"class":78,"line":1164},[76,134586,134571],{"class":136},[76,134588,51406],{"class":86},[76,134590,61695],{"class":136},[76,134592,87],{"class":86},[76,134594,134595],{"class":192},"'fonts\u002Ficomoon.eot?#iefix'",[76,134597,13681],{"class":86},[76,134599,134600],{"class":136},"format",[76,134602,87],{"class":86},[76,134604,134605],{"class":192},"'embedded-opentype'",[76,134607,38016],{"class":86},[76,134609,134610,134613,134615,134618,134620,134622,134624,134627],{"class":78,"line":1178},[76,134611,134612],{"class":136},"       url",[76,134614,87],{"class":86},[76,134616,134617],{"class":192},"'fonts\u002Ficomoon.woff'",[76,134619,13681],{"class":86},[76,134621,134600],{"class":136},[76,134623,87],{"class":86},[76,134625,134626],{"class":192},"'woff'",[76,134628,38016],{"class":86},[76,134630,134631,134633,134635,134638,134640,134642,134644,134647],{"class":78,"line":1184},[76,134632,134612],{"class":136},[76,134634,87],{"class":86},[76,134636,134637],{"class":192},"'fonts\u002Ficomoon.ttf'",[76,134639,13681],{"class":86},[76,134641,134600],{"class":136},[76,134643,87],{"class":86},[76,134645,134646],{"class":192},"'truetype'",[76,134648,38016],{"class":86},[76,134650,134651,134653,134655,134658,134660,134662,134664,134667],{"class":78,"line":1275},[76,134652,134612],{"class":136},[76,134654,87],{"class":86},[76,134656,134657],{"class":192},"'fonts\u002Ficomoon.svg#icomoon'",[76,134659,13681],{"class":86},[76,134661,134600],{"class":136},[76,134663,87],{"class":86},[76,134665,134666],{"class":192},"'svg'",[76,134668,2684],{"class":86},[76,134670,134671],{"class":78,"line":1281},[76,134672,1529],{"class":86},[76,134674,134675,134677],{"class":78,"line":1293},[76,134676,134278],{"class":1927},[76,134678,15539],{"class":86},[76,134680,134681,134683,134685,134687],{"class":78,"line":1576},[76,134682,134559],{"class":136},[76,134684,51406],{"class":86},[76,134686,134564],{"class":192},[76,134688,1254],{"class":86},[76,134690,134691,134694,134696,134698],{"class":78,"line":1581},[76,134692,134693],{"class":136},"  font-style",[76,134695,51406],{"class":86},[76,134697,63810],{"class":136},[76,134699,1254],{"class":86},[76,134701,134702],{"class":78,"line":1587},[76,134703,1529],{"class":86},[21,134705,134706],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1426,134708],{"style":126377,"src":134709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[29,134711,134712],{"start":1158},[32,134713,134714],{},"添加字体",[1426,134716],{"style":126377,"src":134717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[21,134719,134720],{},"复制：",[1426,134722],{"style":126377,"src":134723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[21,134725,134726],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[29,134728,134729],{"start":1164},[32,134730,134731],{},"代码展示：",[66,134733,134734],{"className":126521,"code":134540,"language":126523,"meta":71,"style":71},[73,134735,134736,134740,134746,134756,134770,134792,134810,134828,134846,134850,134856,134866,134876],{"__ignoreMap":71},[76,134737,134738],{"class":78,"line":79},[76,134739,134547],{"class":146},[76,134741,134742,134744],{"class":78,"line":96},[76,134743,134552],{"class":82},[76,134745,15539],{"class":86},[76,134747,134748,134750,134752,134754],{"class":78,"line":1143},[76,134749,134559],{"class":136},[76,134751,51406],{"class":86},[76,134753,134564],{"class":192},[76,134755,1254],{"class":86},[76,134757,134758,134760,134762,134764,134766,134768],{"class":78,"line":1158},[76,134759,134571],{"class":136},[76,134761,51406],{"class":86},[76,134763,61695],{"class":136},[76,134765,87],{"class":86},[76,134767,134580],{"class":192},[76,134769,2684],{"class":86},[76,134771,134772,134774,134776,134778,134780,134782,134784,134786,134788,134790],{"class":78,"line":1164},[76,134773,134571],{"class":136},[76,134775,51406],{"class":86},[76,134777,61695],{"class":136},[76,134779,87],{"class":86},[76,134781,134595],{"class":192},[76,134783,13681],{"class":86},[76,134785,134600],{"class":136},[76,134787,87],{"class":86},[76,134789,134605],{"class":192},[76,134791,38016],{"class":86},[76,134793,134794,134796,134798,134800,134802,134804,134806,134808],{"class":78,"line":1178},[76,134795,134612],{"class":136},[76,134797,87],{"class":86},[76,134799,134617],{"class":192},[76,134801,13681],{"class":86},[76,134803,134600],{"class":136},[76,134805,87],{"class":86},[76,134807,134626],{"class":192},[76,134809,38016],{"class":86},[76,134811,134812,134814,134816,134818,134820,134822,134824,134826],{"class":78,"line":1184},[76,134813,134612],{"class":136},[76,134815,87],{"class":86},[76,134817,134637],{"class":192},[76,134819,13681],{"class":86},[76,134821,134600],{"class":136},[76,134823,87],{"class":86},[76,134825,134646],{"class":192},[76,134827,38016],{"class":86},[76,134829,134830,134832,134834,134836,134838,134840,134842,134844],{"class":78,"line":1275},[76,134831,134612],{"class":136},[76,134833,87],{"class":86},[76,134835,134657],{"class":192},[76,134837,13681],{"class":86},[76,134839,134600],{"class":136},[76,134841,87],{"class":86},[76,134843,134666],{"class":192},[76,134845,2684],{"class":86},[76,134847,134848],{"class":78,"line":1281},[76,134849,1529],{"class":86},[76,134851,134852,134854],{"class":78,"line":1293},[76,134853,134278],{"class":1927},[76,134855,15539],{"class":86},[76,134857,134858,134860,134862,134864],{"class":78,"line":1576},[76,134859,134559],{"class":136},[76,134861,51406],{"class":86},[76,134863,134564],{"class":192},[76,134865,1254],{"class":86},[76,134867,134868,134870,134872,134874],{"class":78,"line":1581},[76,134869,134693],{"class":136},[76,134871,51406],{"class":86},[76,134873,63810],{"class":136},[76,134875,1254],{"class":86},[76,134877,134878],{"class":78,"line":1587},[76,134879,1529],{"class":86},[1426,134881],{"style":126377,"src":134882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[21,134884,134885],{},"更加细节展示：",[29,134887,134888],{},[32,134889,134890],{},"html 标签内添加小图标",[1426,134892],{"style":126377,"src":134893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[29,134895,134896],{"start":96},[32,134897,134898],{},"给标签定义字体",[66,134900,134901],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,134902,134903,134907,134921,134925],{"__ignoreMap":71},[76,134904,134905],{"class":78,"line":79},[76,134906,130632],{"class":146},[76,134908,134909,134911,134913,134915,134917,134919],{"class":78,"line":96},[76,134910,998],{"class":86},[76,134912,51580],{"class":51269},[76,134914,53455],{"class":1927},[76,134916,133],{"class":86},[76,134918,130645],{"class":192},[76,134920,51276],{"class":86},[76,134922,134923],{"class":78,"line":1143},[76,134924,130652],{"class":86},[76,134926,134927,134929,134931],{"class":78,"line":1158},[76,134928,51754],{"class":86},[76,134930,51580],{"class":51269},[76,134932,51276],{"class":86},[21,134934,134935],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1426,134937],{"style":126377,"src":134938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[46,134940,134942],{"id":134941},"_1235-字体图标的追加","12.3.5 字体图标的追加",[21,134944,134945],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[21,134947,134948,134949,134952],{},"把压缩包里面的 ",[237,134950,134951],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[21,134954,134955],{},"打开网站，点下方：",[1426,134957],{"style":126377,"src":134958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1426,134960],{"style":126377,"src":134961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1426,134963],{"style":126377,"src":134964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[21,134966,134967],{},"点yes重新加载",[21,134969,134970],{},"然后重复之前的操作就可以实现了",[21,134972,134973],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[46,134975,134977],{"id":134976},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1426,134979],{"style":126377,"src":134980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5092,134982,134983],{},"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":71,"searchDepth":96,"depth":96,"links":134985},[134986,134992,134997],{"id":133589,"depth":96,"text":133590,"children":134987},[134988,134989,134990,134991],{"id":133601,"depth":1143,"text":133602},{"id":133630,"depth":1143,"text":133631},{"id":133658,"depth":1143,"text":133659},{"id":133716,"depth":1143,"text":133717},{"id":134188,"depth":96,"text":134189,"children":134993},[134994,134995,134996],{"id":134192,"depth":1143,"text":134193},{"id":134237,"depth":1143,"text":134238},{"id":134253,"depth":1143,"text":134254},{"id":134353,"depth":96,"text":134354,"children":134998},[134999,135000,135001,135002,135003,135004],{"id":134357,"depth":1143,"text":134358},{"id":134391,"depth":1143,"text":134392},{"id":134414,"depth":1143,"text":134415},{"id":134461,"depth":1143,"text":134462},{"id":134941,"depth":1143,"text":134942},{"id":134976,"depth":1143,"text":134977},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133581,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135011,"title":135012,"body":135013,"description":23344,"extension":5123,"meta":136240,"navigation":2364,"path":136241,"seo":136242,"stem":136243,"__hash__":136244},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":9,"value":135014,"toc":136221},[135015,135018,135022,135025,135039,135107,135137,135140,135144,135148,135250,135297,135301,135304,135307,135341,135344,135347,135350,135353,135356,135359,135362,135364,135367,135370,135373,135376,135379,135382,135385,135413,135416,135420,135423,135430,135433,135436,135462,135465,135469,135472,135475,135482,135486,135489,135491,135523,135526,135529,135541,135547,135550,135553,135556,135558,135562,135565,135568,135571,135616,135620,135622,135625,135632,135674,135677,135681,135686,135700,135704,135707,135710,135713,135716,135719,135753,135756,135759,135813,135816,135819,135822,135825,135877,135880,135883,135932,135936,135938,135941,135944,135947,135950,135953,136011,136014,136020,136023,136026,136058,136061,136065,136069,136072,136104,136108,136111,136155,136159,136162,136165,136168,136171,136174,136177,136180,136182,136185,136187,136190,136193,136196,136199,136204,136207,136209,136212,136215,136218],[12,135016,135012],{"id":135017},"_13-界面样式与布局技巧",[16,135019,135021],{"id":135020},"_131-css三角","13.1 css三角",[21,135023,135024],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1095,135026,135027,135030,135033,135036],{},[32,135028,135029],{},"用css 边框可以模拟三角效果",[32,135031,135032],{},"宽度高度为0",[32,135034,135035],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[32,135037,135038],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[66,135040,135042],{"className":126521,"code":135041,"language":126523,"meta":71,"style":71},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[73,135043,135044,135049,135056,135066,135076,135092,135103],{"__ignoreMap":71},[76,135045,135046],{"class":78,"line":79},[76,135047,135048],{"class":146},"\u002F* CSS 实现三角形 *\u002F\n",[76,135050,135051,135054],{"class":78,"line":96},[76,135052,135053],{"class":1927},".triangle",[76,135055,15539],{"class":86},[76,135057,135058,135060,135062,135064],{"class":78,"line":1143},[76,135059,70537],{"class":136},[76,135061,51406],{"class":86},[76,135063,279],{"class":136},[76,135065,1254],{"class":86},[76,135067,135068,135070,135072,135074],{"class":78,"line":1158},[76,135069,70757],{"class":136},[76,135071,51406],{"class":86},[76,135073,279],{"class":136},[76,135075,1254],{"class":86},[76,135077,135078,135080,135082,135084,135086,135088,135090],{"class":78,"line":1164},[76,135079,70865],{"class":136},[76,135081,51406],{"class":86},[76,135083,534],{"class":136},[76,135085,51461],{"class":82},[76,135087,51490],{"class":136},[76,135089,63960],{"class":136},[76,135091,1254],{"class":86},[76,135093,135094,135097,135099,135101],{"class":78,"line":1178},[76,135095,135096],{"class":136},"  border-bottom-color",[76,135098,51406],{"class":86},[76,135100,62338],{"class":136},[76,135102,1254],{"class":86},[76,135104,135105],{"class":78,"line":1184},[76,135106,1529],{"class":86},[66,135108,135109],{"className":126521,"code":130678,"language":126523,"meta":71,"style":71},[73,135110,135111,135117,135133],{"__ignoreMap":71},[76,135112,135113,135115],{"class":78,"line":79},[76,135114,51580],{"class":51269},[76,135116,15539],{"class":86},[76,135118,135119,135121,135123,135125,135127,135129,135131],{"class":78,"line":96},[76,135120,70865],{"class":136},[76,135122,51406],{"class":86},[76,135124,305],{"class":136},[76,135126,51461],{"class":82},[76,135128,51490],{"class":136},[76,135130,129913],{"class":136},[76,135132,1254],{"class":86},[76,135134,135135],{"class":78,"line":1143},[76,135136,1529],{"class":86},[1426,135138],{"style":126377,"src":135139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[16,135141,135143],{"id":135142},"_132-css用户界面样式","13.2 css用户界面样式",[46,135145,135147],{"id":135146},"_1321-鼠标样式","13.2.1 鼠标样式",[66,135149,135151],{"className":126521,"code":135150,"language":126523,"meta":71,"style":71},"\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",[73,135152,135153,135158,135177,135195,135214,135231],{"__ignoreMap":71},[76,135154,135155],{"class":78,"line":79},[76,135156,135157],{"class":146},"\u002F* 鼠标样式 *\u002F\n",[76,135159,135160,135162,135164,135167,135169,135171,135174],{"class":78,"line":96},[76,135161,51580],{"class":51269},[76,135163,79776],{"class":86},[76,135165,135166],{"class":136},"cursor",[76,135168,51406],{"class":86},[76,135170,61999],{"class":136},[76,135172,135173],{"class":86},"; }   ",[76,135175,135176],{"class":146},"\u002F* 手型 *\u002F\n",[76,135178,135179,135181,135183,135185,135187,135190,135192],{"class":78,"line":1143},[76,135180,51580],{"class":51269},[76,135182,79776],{"class":86},[76,135184,135166],{"class":136},[76,135186,51406],{"class":86},[76,135188,135189],{"class":136},"default",[76,135191,135173],{"class":86},[76,135193,135194],{"class":146},"\u002F* 默认 *\u002F\n",[76,135196,135197,135199,135201,135203,135205,135208,135211],{"class":78,"line":1158},[76,135198,51580],{"class":51269},[76,135200,79776],{"class":86},[76,135202,135166],{"class":136},[76,135204,51406],{"class":86},[76,135206,135207],{"class":136},"move",[76,135209,135210],{"class":86},"; }      ",[76,135212,135213],{"class":146},"\u002F* 移动 *\u002F\n",[76,135215,135216,135218,135220,135222,135224,135226,135228],{"class":78,"line":1164},[76,135217,51580],{"class":51269},[76,135219,79776],{"class":86},[76,135221,135166],{"class":136},[76,135223,51406],{"class":86},[76,135225,5154],{"class":136},[76,135227,135210],{"class":86},[76,135229,135230],{"class":146},"\u002F* 文本 *\u002F\n",[76,135232,135233,135235,135237,135239,135241,135244,135247],{"class":78,"line":1178},[76,135234,51580],{"class":51269},[76,135236,79776],{"class":86},[76,135238,135166],{"class":136},[76,135240,51406],{"class":86},[76,135242,135243],{"class":136},"not-allowed",[76,135245,135246],{"class":86},"; } ",[76,135248,135249],{"class":146},"\u002F* 禁止 *\u002F\n",[225,135251,135252,135260],{},[228,135253,135254],{},[231,135255,135256,135258],{},[234,135257,126985],{"align":23704},[234,135259,27458],{"align":23704},[272,135261,135262,135269,135276,135283,135290],{},[231,135263,135264,135266],{},[277,135265,135189],{"align":23704},[277,135267,135268],{"align":23704},"小白 默认",[231,135270,135271,135273],{},[277,135272,61999],{"align":23704},[277,135274,135275],{"align":23704},"小手",[231,135277,135278,135280],{},[277,135279,135207],{"align":23704},[277,135281,135282],{"align":23704},"移动",[231,135284,135285,135287],{},[277,135286,5154],{"align":23704},[277,135288,135289],{"align":23704},"文本",[231,135291,135292,135294],{},[277,135293,135243],{"align":23704},[277,135295,135296],{"align":23704},"禁止",[46,135298,135300],{"id":135299},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[21,135302,135303],{},"去除表单轮廓线",[21,135305,135306],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[66,135308,135309],{"className":126521,"code":129885,"language":126523,"meta":71,"style":71},[73,135310,135311,135315,135321,135337],{"__ignoreMap":71},[76,135312,135313],{"class":78,"line":79},[76,135314,129892],{"class":146},[76,135316,135317,135319],{"class":78,"line":96},[76,135318,51580],{"class":51269},[76,135320,15539],{"class":86},[76,135322,135323,135325,135327,135329,135331,135333,135335],{"class":78,"line":1143},[76,135324,70865],{"class":136},[76,135326,51406],{"class":86},[76,135328,305],{"class":136},[76,135330,51461],{"class":82},[76,135332,51490],{"class":136},[76,135334,129913],{"class":136},[76,135336,1254],{"class":86},[76,135338,135339],{"class":78,"line":1158},[76,135340,1529],{"class":86},[21,135342,135343],{},"文本域：",[1426,135345],{"style":126377,"src":135346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[21,135348,135349],{},"此时会有一个空白区域",[1426,135351],{"style":126377,"src":135352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[21,135354,135355],{},"写在同一行就不会出现这个问题",[1426,135357],{"style":126377,"src":135358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[21,135360,135361],{},"文本域是行内块元素，一定记住！！！",[21,135363,98202],{},[1426,135365],{"style":126377,"src":135366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[21,135368,135369],{},"文本域尽量放在一行",[21,135371,135372],{},"知识回顾：cols是列，rols是行",[1426,135374],{"style":126377,"src":135375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[21,135377,135378],{},"它可以进行拖动，显然这是我们不愿意看到的",[1426,135380],{"style":126377,"src":135381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[21,135383,135384],{},"使用resize进行解决",[66,135386,135388],{"className":126521,"code":135387,"language":126523,"meta":71,"style":71},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[73,135389,135390,135396,135409],{"__ignoreMap":71},[76,135391,135392,135394],{"class":78,"line":79},[76,135393,53790],{"class":51269},[76,135395,15539],{"class":86},[76,135397,135398,135400,135402,135404,135406],{"class":78,"line":96},[76,135399,70767],{"class":136},[76,135401,51406],{"class":86},[76,135403,54706],{"class":136},[76,135405,130384],{"class":86},[76,135407,135408],{"class":146},"\u002F* 取消表单轮廓线 *\u002F\n",[76,135410,135411],{"class":78,"line":1143},[76,135412,1529],{"class":86},[21,135414,135415],{},"此时就无法通过右下方实现拖动了",[46,135417,135419],{"id":135418},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[21,135421,135422],{},"实现一个盒子中的文字和图片对齐",[21,135424,135425,135426,135429],{},"用于设置一个元素的 ",[237,135427,135428],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[21,135431,135432],{},"图片和文字默认是基线对齐",[1426,135434],{"style":126377,"src":135435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[66,135437,135438],{"className":126521,"code":135387,"language":126523,"meta":71,"style":71},[73,135439,135440,135446,135458],{"__ignoreMap":71},[76,135441,135442,135444],{"class":78,"line":79},[76,135443,53790],{"class":51269},[76,135445,15539],{"class":86},[76,135447,135448,135450,135452,135454,135456],{"class":78,"line":96},[76,135449,70767],{"class":136},[76,135451,51406],{"class":86},[76,135453,54706],{"class":136},[76,135455,130384],{"class":86},[76,135457,135408],{"class":146},[76,135459,135460],{"class":78,"line":1143},[76,135461,1529],{"class":86},[1426,135463],{"style":126377,"src":135464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21965,135466,135468],{"id":135467},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[21,135470,135471],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1426,135473],{"style":126377,"src":135474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[21,135476,135477,135478,135481],{},"此时可以给图片、表单这些行内块元素的 ",[237,135479,135480],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21965,135483,135485],{"id":135484},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[21,135487,135488],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[21,135490,14600],{},[66,135492,135494],{"className":126521,"code":135493,"language":126523,"meta":71,"style":71},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[73,135495,135496,135501,135507,135519],{"__ignoreMap":71},[76,135497,135498],{"class":78,"line":79},[76,135499,135500],{"class":146},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[76,135502,135503,135505],{"class":78,"line":96},[76,135504,1426],{"class":51269},[76,135506,15539],{"class":86},[76,135508,135509,135512,135514,135517],{"class":78,"line":1143},[76,135510,135511],{"class":136},"  vertical-align",[76,135513,51406],{"class":86},[76,135515,135516],{"class":136},"middle",[76,135518,1254],{"class":86},[76,135520,135521],{"class":78,"line":1158},[76,135522,1529],{"class":86},[1426,135524],{"style":126377,"src":135525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[21,135527,135528],{},"主要解决方法有两种：",[29,135530,135531],{},[32,135532,135533,135536,135537,135540],{},[237,135534,135535],{},"给图片"," 添加 ",[237,135538,135539],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[21,135542,135543,135544],{},"2.把图片转换为块级元素 ",[237,135545,135546],{},"display: block",[21,135548,135549],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[21,135551,135552],{},"img {",[21,135554,135555],{},"vertical-align:middle;",[21,135557,1034],{},[46,135559,135561],{"id":135560},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[21,135563,135564],{},"效果：",[1426,135566],{"style":126377,"src":135567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[21,135569,135570],{},"单行文本溢出显示省略号--必须满足三个条件：",[66,135572,135574],{"className":126521,"code":135573,"language":126523,"meta":71,"style":71},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[73,135575,135576,135581,135587,135597,135602,135612],{"__ignoreMap":71},[76,135577,135578],{"class":78,"line":79},[76,135579,135580],{"class":146},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[76,135582,135583,135585],{"class":78,"line":96},[76,135584,1426],{"class":51269},[76,135586,15539],{"class":86},[76,135588,135589,135591,135593,135595],{"class":78,"line":1143},[76,135590,135511],{"class":136},[76,135592,51406],{"class":86},[76,135594,135516],{"class":136},[76,135596,1254],{"class":86},[76,135598,135599],{"class":78,"line":1158},[76,135600,135601],{"class":146},"  \u002F* 或 *\u002F\n",[76,135603,135604,135606,135608,135610],{"class":78,"line":1164},[76,135605,128137],{"class":136},[76,135607,51406],{"class":86},[76,135609,60838],{"class":136},[76,135611,1254],{"class":86},[76,135613,135614],{"class":78,"line":1178},[76,135615,1529],{"class":86},[46,135617,135619],{"id":135618},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[21,135621,135564],{},[1426,135623],{"style":126377,"src":135624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[21,135626,135627,135628,135631],{},"多行文本溢出显示省略号， ",[237,135629,135630],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[66,135633,135634],{"className":126521,"code":135573,"language":126523,"meta":71,"style":71},[73,135635,135636,135640,135646,135656,135660,135670],{"__ignoreMap":71},[76,135637,135638],{"class":78,"line":79},[76,135639,135580],{"class":146},[76,135641,135642,135644],{"class":78,"line":96},[76,135643,1426],{"class":51269},[76,135645,15539],{"class":86},[76,135647,135648,135650,135652,135654],{"class":78,"line":1143},[76,135649,135511],{"class":136},[76,135651,51406],{"class":86},[76,135653,135516],{"class":136},[76,135655,1254],{"class":86},[76,135657,135658],{"class":78,"line":1158},[76,135659,135601],{"class":146},[76,135661,135662,135664,135666,135668],{"class":78,"line":1164},[76,135663,128137],{"class":136},[76,135665,51406],{"class":86},[76,135667,60838],{"class":136},[76,135669,1254],{"class":86},[76,135671,135672],{"class":78,"line":1178},[76,135673,1529],{"class":86},[21,135675,135676],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[16,135678,135680],{"id":135679},"_133-常见布局技巧","13.3 常见布局技巧",[21,135682,135683],{},[237,135684,135685],{},"巧妙利用一个技术更快更好的布局：",[29,135687,135688,135691,135694,135697],{},[32,135689,135690],{},"margin负值的运用",[32,135692,135693],{},"文字围绕浮动元素",[32,135695,135696],{},"行内块的巧妙运用",[32,135698,135699],{},"CSS三角强化",[46,135701,135703],{"id":135702},"_1331-margin负值的运用","13.3.1 margin负值的运用",[21,135705,135706],{},"应用场景：",[1426,135708],{"style":126377,"src":135709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1426,135711],{"style":126377,"src":135712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[21,135714,135715],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[21,135717,135718],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[66,135720,135721],{"className":126521,"code":129885,"language":126523,"meta":71,"style":71},[73,135722,135723,135727,135733,135749],{"__ignoreMap":71},[76,135724,135725],{"class":78,"line":79},[76,135726,129892],{"class":146},[76,135728,135729,135731],{"class":78,"line":96},[76,135730,51580],{"class":51269},[76,135732,15539],{"class":86},[76,135734,135735,135737,135739,135741,135743,135745,135747],{"class":78,"line":1143},[76,135736,70865],{"class":136},[76,135738,51406],{"class":86},[76,135740,305],{"class":136},[76,135742,51461],{"class":82},[76,135744,51490],{"class":136},[76,135746,129913],{"class":136},[76,135748,1254],{"class":86},[76,135750,135751],{"class":78,"line":1158},[76,135752,1529],{"class":86},[1426,135754],{"style":126377,"src":135755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[21,135757,135758],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[66,135760,135762],{"className":126521,"code":135761,"language":126523,"meta":71,"style":71},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[73,135763,135764,135769,135775,135785,135797,135809],{"__ignoreMap":71},[76,135765,135766],{"class":78,"line":79},[76,135767,135768],{"class":146},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[76,135770,135771,135773],{"class":78,"line":96},[76,135772,130369],{"class":1927},[76,135774,15539],{"class":86},[76,135776,135777,135779,135781,135783],{"class":78,"line":1143},[76,135778,132327],{"class":136},[76,135780,51406],{"class":86},[76,135782,54733],{"class":136},[76,135784,1254],{"class":86},[76,135786,135787,135789,135791,135793,135795],{"class":78,"line":1158},[76,135788,132341],{"class":136},[76,135790,51406],{"class":86},[76,135792,534],{"class":136},[76,135794,51461],{"class":82},[76,135796,1254],{"class":86},[76,135798,135799,135801,135803,135805,135807],{"class":78,"line":1164},[76,135800,132358],{"class":136},[76,135802,51406],{"class":86},[76,135804,788],{"class":136},[76,135806,51461],{"class":82},[76,135808,1254],{"class":86},[76,135810,135811],{"class":78,"line":1178},[76,135812,1529],{"class":86},[21,135814,135815],{},"加上上述代码会发现：",[1426,135817],{"style":126377,"src":135818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[21,135820,135821],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[21,135823,135824],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[66,135826,135827],{"className":126521,"code":135761,"language":126523,"meta":71,"style":71},[73,135828,135829,135833,135839,135849,135861,135873],{"__ignoreMap":71},[76,135830,135831],{"class":78,"line":79},[76,135832,135768],{"class":146},[76,135834,135835,135837],{"class":78,"line":96},[76,135836,130369],{"class":1927},[76,135838,15539],{"class":86},[76,135840,135841,135843,135845,135847],{"class":78,"line":1143},[76,135842,132327],{"class":136},[76,135844,51406],{"class":86},[76,135846,54733],{"class":136},[76,135848,1254],{"class":86},[76,135850,135851,135853,135855,135857,135859],{"class":78,"line":1158},[76,135852,132341],{"class":136},[76,135854,51406],{"class":86},[76,135856,534],{"class":136},[76,135858,51461],{"class":82},[76,135860,1254],{"class":86},[76,135862,135863,135865,135867,135869,135871],{"class":78,"line":1164},[76,135864,132358],{"class":136},[76,135866,51406],{"class":86},[76,135868,788],{"class":136},[76,135870,51461],{"class":82},[76,135872,1254],{"class":86},[76,135874,135875],{"class":78,"line":1178},[76,135876,1529],{"class":86},[21,135878,135879],{},"解决方式2：",[21,135881,135882],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[66,135884,135886],{"className":126521,"code":135885,"language":126523,"meta":71,"style":71},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[73,135887,135888,135894,135904,135916,135928],{"__ignoreMap":71},[76,135889,135890,135892],{"class":78,"line":79},[76,135891,51580],{"class":51269},[76,135893,15539],{"class":86},[76,135895,135896,135898,135900,135902],{"class":78,"line":96},[76,135897,132327],{"class":136},[76,135899,51406],{"class":86},[76,135901,54733],{"class":136},[76,135903,1254],{"class":86},[76,135905,135906,135908,135910,135912,135914],{"class":78,"line":1143},[76,135907,132341],{"class":136},[76,135909,51406],{"class":86},[76,135911,534],{"class":136},[76,135913,51461],{"class":82},[76,135915,1254],{"class":86},[76,135917,135918,135920,135922,135924,135926],{"class":78,"line":1158},[76,135919,132358],{"class":136},[76,135921,51406],{"class":86},[76,135923,788],{"class":136},[76,135925,51461],{"class":82},[76,135927,1254],{"class":86},[76,135929,135930],{"class":78,"line":1164},[76,135931,1529],{"class":86},[46,135933,135935],{"id":135934},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[21,135937,135706],{},[1426,135939],{"style":126377,"src":135940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[21,135942,135943],{},"实现结构图：",[1426,135945],{"style":126377,"src":135946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[21,135948,135949],{},"巧妙运用浮动元素不会压住文字的特性",[21,135951,135952],{},"代码显示：",[66,135954,135956],{"className":126521,"code":135955,"language":126523,"meta":71,"style":71},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[73,135957,135958,135964,135974,135978,135983,135987,135993,136007],{"__ignoreMap":71},[76,135959,135960,135962],{"class":78,"line":79},[76,135961,130369],{"class":1927},[76,135963,15539],{"class":86},[76,135965,135966,135968,135970,135972],{"class":78,"line":96},[76,135967,131001],{"class":136},[76,135969,51406],{"class":86},[76,135971,23704],{"class":136},[76,135973,1254],{"class":86},[76,135975,135976],{"class":78,"line":1143},[76,135977,1529],{"class":86},[76,135979,135980],{"class":78,"line":1158},[76,135981,135982],{"class":86},"```Css\n",[76,135984,135985],{"class":78,"line":1164},[76,135986,130364],{"class":146},[76,135988,135989,135991],{"class":78,"line":1178},[76,135990,130369],{"class":1927},[76,135992,15539],{"class":86},[76,135994,135995,135997,135999,136001,136003,136005],{"class":78,"line":1184},[76,135996,70439],{"class":136},[76,135998,51406],{"class":86},[76,136000,279],{"class":136},[76,136002,51525],{"class":136},[76,136004,130384],{"class":86},[76,136006,130387],{"class":146},[76,136008,136009],{"class":78,"line":1275},[76,136010,1529],{"class":86},[21,136012,136013],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[66,136015,136018],{"className":136016,"code":136017,"language":5154},[5152],"\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",[73,136019,136017],{"__ignoreMap":71},[1426,136021],{"style":126377,"src":136022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[21,136024,136025],{},"最终展示结果：",[66,136027,136028],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},[73,136029,136030,136034,136040,136054],{"__ignoreMap":71},[76,136031,136032],{"class":78,"line":79},[76,136033,130364],{"class":146},[76,136035,136036,136038],{"class":78,"line":96},[76,136037,130369],{"class":1927},[76,136039,15539],{"class":86},[76,136041,136042,136044,136046,136048,136050,136052],{"class":78,"line":1143},[76,136043,70439],{"class":136},[76,136045,51406],{"class":86},[76,136047,279],{"class":136},[76,136049,51525],{"class":136},[76,136051,130384],{"class":86},[76,136053,130387],{"class":146},[76,136055,136056],{"class":78,"line":1158},[76,136057,1529],{"class":86},[1426,136059],{"style":126377,"src":136060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[16,136062,136064],{"id":136063},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[46,136066,136068],{"id":136067},"_1341-原理","13.4.1 原理",[1426,136070],{"style":126377,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[66,136073,136074],{"className":126521,"code":130357,"language":126523,"meta":71,"style":71},[73,136075,136076,136080,136086,136100],{"__ignoreMap":71},[76,136077,136078],{"class":78,"line":79},[76,136079,130364],{"class":146},[76,136081,136082,136084],{"class":78,"line":96},[76,136083,130369],{"class":1927},[76,136085,15539],{"class":86},[76,136087,136088,136090,136092,136094,136096,136098],{"class":78,"line":1143},[76,136089,70439],{"class":136},[76,136091,51406],{"class":86},[76,136093,279],{"class":136},[76,136095,51525],{"class":136},[76,136097,130384],{"class":86},[76,136099,130387],{"class":146},[76,136101,136102],{"class":78,"line":1158},[76,136103,1529],{"class":86},[46,136105,136107],{"id":136106},"_1342-实例","13.4.2 实例",[1426,136109],{"style":126377,"src":136110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[66,136112,136113],{"className":126521,"code":130987,"language":126523,"meta":71,"style":71},[73,136114,136115,136121,136131,136135,136141,136151],{"__ignoreMap":71},[76,136116,136117,136119],{"class":78,"line":79},[76,136118,130994],{"class":1927},[76,136120,15539],{"class":86},[76,136122,136123,136125,136127,136129],{"class":78,"line":96},[76,136124,131001],{"class":136},[76,136126,51406],{"class":86},[76,136128,23704],{"class":136},[76,136130,1254],{"class":86},[76,136132,136133],{"class":78,"line":1143},[76,136134,1529],{"class":86},[76,136136,136137,136139],{"class":78,"line":1158},[76,136138,131016],{"class":1927},[76,136140,15539],{"class":86},[76,136142,136143,136145,136147,136149],{"class":78,"line":1164},[76,136144,131001],{"class":136},[76,136146,51406],{"class":86},[76,136148,72491],{"class":136},[76,136150,1254],{"class":86},[76,136152,136153],{"class":78,"line":1178},[76,136154,1529],{"class":86},[16,136156,136158],{"id":136157},"_135-css的初始化","13.5 css的初始化",[21,136160,136161],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[21,136163,136164],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[21,136166,136167],{},"每个网页都必须首先进行 CSS初始化。",[21,136169,136170],{},"这里我们以 京东CSS初始化代码为例。",[21,136172,136173],{},"在网页右键查看网页源代码",[21,136175,136176],{},"找到css的link引入语句",[21,136178,136179],{},"然后ctrl+f 输入body",[21,136181,77195],{},[1426,136183],{"style":126377,"src":136184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[21,136186,77218],{},[1426,136188],{"style":126377,"src":136189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[21,136191,136192],{},"③打开了网页上传压缩的代码",[1426,136194],{"style":126377,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[21,136197,136198],{},"④从body前可以查看这个网页的初始化代码",[21,136200,136201],{},[237,136202,136203],{},"Unicode编码字体：",[21,136205,136206],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[21,136208,83176],{},[21,136210,136211],{},"黑体 \\9ED1\\4F53",[21,136213,136214],{},"宋体 \\5B8B\\4F53",[21,136216,136217],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5092,136219,136220],{},"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":71,"searchDepth":96,"depth":96,"links":136222},[136223,136224,136231,136235,136239],{"id":135020,"depth":96,"text":135021},{"id":135142,"depth":96,"text":135143,"children":136225},[136226,136227,136228,136229,136230],{"id":135146,"depth":1143,"text":135147},{"id":135299,"depth":1143,"text":135300},{"id":135418,"depth":1143,"text":135419},{"id":135560,"depth":1143,"text":135561},{"id":135618,"depth":1143,"text":135619},{"id":135679,"depth":96,"text":135680,"children":136232},[136233,136234],{"id":135702,"depth":1143,"text":135703},{"id":135934,"depth":1143,"text":135935},{"id":136063,"depth":96,"text":136064,"children":136236},[136237,136238],{"id":136067,"depth":1143,"text":136068},{"id":136106,"depth":1143,"text":136107},{"id":136157,"depth":96,"text":136158},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135012,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136246,"title":136247,"body":136248,"description":23344,"extension":5123,"meta":137934,"navigation":2364,"path":137935,"seo":137936,"stem":137937,"__hash__":137938},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":9,"value":136249,"toc":137923},[136250,136253,136257,136261,136264,136271,136274,136277,136315,136318,136320,136334,136338,136347,136351,136356,136359,136362,136365,136400,136405,136408,136438,136441,136446,136449,136452,136482,136485,136539,136542,136546,136551,136563,136566,136570,136600,136603,136608,136611,136641,136644,136648,136665,136669,136673,136676,136709,136712,136716,136719,136722,136725,136728,136731,136842,136845,136848,136851,136953,136956,136960,136964,136968,136971,137011,137014,137016,137032,137036,137039,137044,137125,137128,137131,137257,137262,137265,137273,137276,137281,137366,137369,137373,137376,137379,137383,137403,137408,137492,137495,137500,137503,137506,137584,137587,137590,137593,137596,137599,137604,137607,137610,137682,137685,137690,137693,137790,137793,137799,137802,137805,137808,137811,137814,137817,137820,137823,137827,137832,137835,137868,137873,137876,137917,137920],[12,136251,136247],{"id":136252},"_14-html5与css3新特性",[16,136254,136256],{"id":136255},"_141-html5的新特性","14.1 HTML5的新特性",[46,136258,136260],{"id":136259},"_1411-基本标签","14.1.1 基本标签",[21,136262,136263],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[21,136265,136266,136267,136270],{},"这些新特性都有兼容性问题，基本是 ",[237,136268,136269],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[21,136272,136273],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[21,136275,136276],{},"现在使用的是新特性：",[1095,136278,136279,136285,136291,136297,136303,136309],{},[32,136280,136281,136284],{},[73,136282,136283],{},"\u003Cheader>"," 头部标签",[32,136286,136287,136290],{},[73,136288,136289],{},"\u003Cnav>"," 导航标签",[32,136292,136293,136296],{},[73,136294,136295],{},"\u003Carticle>"," 内容标签",[32,136298,136299,136302],{},[73,136300,136301],{},"\u003Csection>"," 定义文档某个区域",[32,136304,136305,136308],{},[73,136306,136307],{},"\u003Caside>"," 侧边栏标签",[32,136310,136311,136314],{},[73,136312,136313],{},"\u003Cfooter>"," 尾部标签",[1426,136316],{"style":126377,"src":136317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[21,136319,117],{},[1095,136321,136322,136325,136328,136331],{},[32,136323,136324],{},"这种语义化标准主要是针对搜索引擎的",[32,136326,136327],{},"这些标签页面中可以经常使用",[32,136329,136330],{},"在IE9中，需要把这些元素转换为块级元素",[32,136332,136333],{},"移动端更喜欢使用这些标签",[46,136335,136337],{"id":136336},"_1412-多媒体标签","14.1.2 多媒体标签",[21,136339,136340,136341,136343,136344,136346],{},"音频 ",[237,136342,28143],{}," 和视频 ",[237,136345,28152],{}," 两个标签",[21965,136348,136350],{"id":136349},"_14121-视频标签-video","14.1.2.1 视频标签- video",[29,136352,136353],{},[32,136354,136355],{},"支持格式：",[1426,136357],{"style":126377,"src":136358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[21,136360,136361],{},"尽量使用MP4，兼容性好",[21,136363,136364],{},"用MP4就可以",[66,136366,136368],{"className":127268,"code":136367,"language":127270,"meta":71,"style":71},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[73,136369,136370],{"__ignoreMap":71},[76,136371,136372,136374,136376,136378,136380,136383,136385,136388,136391,136394,136396,136398],{"class":78,"line":79},[76,136373,998],{"class":86},[76,136375,28152],{"class":51269},[76,136377,55208],{"class":1927},[76,136379,133],{"class":86},[76,136381,136382],{"class":192},"\"movie.mp4\"",[76,136384,92392],{"class":1927},[76,136386,136387],{"class":1927}," autoplay",[76,136389,136390],{"class":1927}," muted",[76,136392,136393],{"class":1927}," loop",[76,136395,55283],{"class":86},[76,136397,28152],{"class":51269},[76,136399,51276],{"class":86},[29,136401,136402],{"start":96},[32,136403,136404],{},"兼容写法",[21,136406,136407],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[66,136409,136410],{"className":127268,"code":136367,"language":127270,"meta":71,"style":71},[73,136411,136412],{"__ignoreMap":71},[76,136413,136414,136416,136418,136420,136422,136424,136426,136428,136430,136432,136434,136436],{"class":78,"line":79},[76,136415,998],{"class":86},[76,136417,28152],{"class":51269},[76,136419,55208],{"class":1927},[76,136421,133],{"class":86},[76,136423,136382],{"class":192},[76,136425,92392],{"class":1927},[76,136427,136387],{"class":1927},[76,136429,136390],{"class":1927},[76,136431,136393],{"class":1927},[76,136433,55283],{"class":86},[76,136435,28152],{"class":51269},[76,136437,51276],{"class":86},[21,136439,136440],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[29,136442,136443],{"start":1143},[32,136444,136445],{},"video常用属性",[1426,136447],{"style":126377,"src":136448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[21,136450,136451],{},"poster属性后面是跟的等待加载图片的地址",[66,136453,136454],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,136455,136456],{"__ignoreMap":71},[76,136457,136458,136460,136462,136464,136466,136468,136470,136472,136474,136476,136478,136480],{"class":78,"line":79},[76,136459,998],{"class":86},[76,136461,1426],{"class":51269},[76,136463,55208],{"class":1927},[76,136465,133],{"class":86},[76,136467,134038],{"class":192},[76,136469,55216],{"class":1927},[76,136471,133],{"class":86},[76,136473,134045],{"class":192},[76,136475,134048],{"class":1927},[76,136477,133],{"class":86},[76,136479,134053],{"class":192},[76,136481,51276],{"class":86},[21,136483,136484],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[66,136486,136488],{"className":126521,"code":136487,"language":126523,"meta":71,"style":71},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[73,136489,136490,136495,136501,136525,136530,136535],{"__ignoreMap":71},[76,136491,136492],{"class":78,"line":79},[76,136493,136494],{"class":146},"\u002F* 2D 位移 *\u002F\n",[76,136496,136497,136499],{"class":78,"line":96},[76,136498,51580],{"class":51269},[76,136500,15539],{"class":86},[76,136502,136503,136506,136508,136511,136513,136515,136517,136519,136521,136523],{"class":78,"line":1143},[76,136504,136505],{"class":136},"  transform",[76,136507,51406],{"class":86},[76,136509,136510],{"class":136},"translate",[76,136512,87],{"class":86},[76,136514,399],{"class":136},[76,136516,51461],{"class":82},[76,136518,12402],{"class":86},[76,136520,744],{"class":136},[76,136522,51461],{"class":82},[76,136524,2684],{"class":86},[76,136526,136527],{"class":78,"line":1158},[76,136528,136529],{"class":146},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[76,136531,136532],{"class":78,"line":1164},[76,136533,136534],{"class":146},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[76,136536,136537],{"class":78,"line":1178},[76,136538,1529],{"class":86},[21,136540,136541],{},"muted:自动静音属性",[21965,136543,136545],{"id":136544},"_14122-音频标签audio","14.1.2.2 音频标签audio",[29,136547,136548],{},[32,136549,136550],{},"基本使用",[21,136552,136553,136554,136559,136560],{},"当前 ",[237,136555,136556],{},[73,136557,136558],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[237,136561,136562],{},"mp3格式",[1426,136564],{"style":126377,"src":136565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[29,136567,136568],{"start":96},[32,136569,136404],{},[66,136571,136572],{"className":127268,"code":136367,"language":127270,"meta":71,"style":71},[73,136573,136574],{"__ignoreMap":71},[76,136575,136576,136578,136580,136582,136584,136586,136588,136590,136592,136594,136596,136598],{"class":78,"line":79},[76,136577,998],{"class":86},[76,136579,28152],{"class":51269},[76,136581,55208],{"class":1927},[76,136583,133],{"class":86},[76,136585,136382],{"class":192},[76,136587,92392],{"class":1927},[76,136589,136387],{"class":1927},[76,136591,136390],{"class":1927},[76,136593,136393],{"class":1927},[76,136595,55283],{"class":86},[76,136597,28152],{"class":51269},[76,136599,51276],{"class":86},[21,136601,136602],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[29,136604,136605],{"start":1143},[32,136606,136607],{},"常用属性",[1426,136609],{"style":126377,"src":136610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[66,136612,136613],{"className":127268,"code":136367,"language":127270,"meta":71,"style":71},[73,136614,136615],{"__ignoreMap":71},[76,136616,136617,136619,136621,136623,136625,136627,136629,136631,136633,136635,136637,136639],{"class":78,"line":79},[76,136618,998],{"class":86},[76,136620,28152],{"class":51269},[76,136622,55208],{"class":1927},[76,136624,133],{"class":86},[76,136626,136382],{"class":192},[76,136628,92392],{"class":1927},[76,136630,136387],{"class":1927},[76,136632,136390],{"class":1927},[76,136634,136393],{"class":1927},[76,136636,55283],{"class":86},[76,136638,28152],{"class":51269},[76,136640,51276],{"class":86},[21,136642,136643],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21965,136645,136647],{"id":136646},"_14123-总结","14.1.2.3 总结",[1095,136649,136650,136653,136656,136659,136662],{},[32,136651,136652],{},"音频标签和视频标签使用方式基本一致",[32,136654,136655],{},"浏览器支持情况不同",[32,136657,136658],{},"谷歌浏览器把音频和视频自动播放禁止了",[32,136660,136661],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[32,136663,136664],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[46,136666,136668],{"id":136667},"_1413-表单元素","14.1.3 表单元素",[21965,136670,136672],{"id":136671},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1426,136674],{"style":126377,"src":136675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[66,136677,136679],{"className":127268,"code":136678,"language":127270,"meta":71,"style":71},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[73,136680,136681],{"__ignoreMap":71},[76,136682,136683,136685,136687,136689,136691,136693,136695,136697,136700,136702,136704,136707],{"class":78,"line":79},[76,136684,998],{"class":86},[76,136686,53790],{"class":51269},[76,136688,53793],{"class":1927},[76,136690,133],{"class":86},[76,136692,62668],{"class":192},[76,136694,14887],{"class":1927},[76,136696,133],{"class":86},[76,136698,136699],{"class":192},"\"username\"",[76,136701,60989],{"class":1927},[76,136703,133],{"class":86},[76,136705,136706],{"class":192},"\"请输入用户名\"",[76,136708,51276],{"class":86},[1426,136710],{"style":126377,"src":136711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21965,136713,136715],{"id":136714},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1426,136717],{"style":126377,"src":136718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[21,136720,136721],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[21,136723,136724],{},"快捷操作：",[1426,136726],{"style":126377,"src":136727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[21,136729,136730],{},"例子1：",[66,136732,136734],{"className":127268,"code":136733,"language":127270,"meta":71,"style":71},"\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",[73,136735,136736,136759,136786,136815,136834],{"__ignoreMap":71},[76,136737,136738,136740,136742,136744,136746,136749,136752,136754,136757],{"class":78,"line":79},[76,136739,998],{"class":86},[76,136741,66594],{"class":51269},[76,136743,66597],{"class":1927},[76,136745,133],{"class":86},[76,136747,136748],{"class":192},"\"\u002Fsubmit\"",[76,136750,136751],{"class":1927}," method",[76,136753,133],{"class":86},[76,136755,136756],{"class":192},"\"post\"",[76,136758,51276],{"class":86},[76,136760,136761,136763,136765,136767,136769,136771,136773,136775,136777,136779,136781,136784],{"class":78,"line":96},[76,136762,52113],{"class":86},[76,136764,53790],{"class":51269},[76,136766,53793],{"class":1927},[76,136768,133],{"class":86},[76,136770,62668],{"class":192},[76,136772,14887],{"class":1927},[76,136774,133],{"class":86},[76,136776,136699],{"class":192},[76,136778,60989],{"class":1927},[76,136780,133],{"class":86},[76,136782,136783],{"class":192},"\"用户名\"",[76,136785,51276],{"class":86},[76,136787,136788,136790,136792,136794,136796,136799,136801,136803,136806,136808,136810,136813],{"class":78,"line":1143},[76,136789,52113],{"class":86},[76,136791,53790],{"class":51269},[76,136793,53793],{"class":1927},[76,136795,133],{"class":86},[76,136797,136798],{"class":192},"\"password\"",[76,136800,14887],{"class":1927},[76,136802,133],{"class":86},[76,136804,136805],{"class":192},"\"pwd\"",[76,136807,60989],{"class":1927},[76,136809,133],{"class":86},[76,136811,136812],{"class":192},"\"密码\"",[76,136814,51276],{"class":86},[76,136816,136817,136819,136821,136823,136825,136827,136830,136832],{"class":78,"line":1158},[76,136818,52113],{"class":86},[76,136820,53856],{"class":51269},[76,136822,53793],{"class":1927},[76,136824,133],{"class":86},[76,136826,66617],{"class":192},[76,136828,136829],{"class":86},">提交\u003C\u002F",[76,136831,53856],{"class":51269},[76,136833,51276],{"class":86},[76,136835,136836,136838,136840],{"class":78,"line":1164},[76,136837,51754],{"class":86},[76,136839,66594],{"class":51269},[76,136841,51276],{"class":86},[1426,136843],{"style":126377,"src":136844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[21,136846,136847],{},"value是表单域的内容",[21,136849,136850],{},"例子2：",[66,136852,136853],{"className":127268,"code":136733,"language":127270,"meta":71,"style":71},[73,136854,136855,136875,136901,136927,136945],{"__ignoreMap":71},[76,136856,136857,136859,136861,136863,136865,136867,136869,136871,136873],{"class":78,"line":79},[76,136858,998],{"class":86},[76,136860,66594],{"class":51269},[76,136862,66597],{"class":1927},[76,136864,133],{"class":86},[76,136866,136748],{"class":192},[76,136868,136751],{"class":1927},[76,136870,133],{"class":86},[76,136872,136756],{"class":192},[76,136874,51276],{"class":86},[76,136876,136877,136879,136881,136883,136885,136887,136889,136891,136893,136895,136897,136899],{"class":78,"line":96},[76,136878,52113],{"class":86},[76,136880,53790],{"class":51269},[76,136882,53793],{"class":1927},[76,136884,133],{"class":86},[76,136886,62668],{"class":192},[76,136888,14887],{"class":1927},[76,136890,133],{"class":86},[76,136892,136699],{"class":192},[76,136894,60989],{"class":1927},[76,136896,133],{"class":86},[76,136898,136783],{"class":192},[76,136900,51276],{"class":86},[76,136902,136903,136905,136907,136909,136911,136913,136915,136917,136919,136921,136923,136925],{"class":78,"line":1143},[76,136904,52113],{"class":86},[76,136906,53790],{"class":51269},[76,136908,53793],{"class":1927},[76,136910,133],{"class":86},[76,136912,136798],{"class":192},[76,136914,14887],{"class":1927},[76,136916,133],{"class":86},[76,136918,136805],{"class":192},[76,136920,60989],{"class":1927},[76,136922,133],{"class":86},[76,136924,136812],{"class":192},[76,136926,51276],{"class":86},[76,136928,136929,136931,136933,136935,136937,136939,136941,136943],{"class":78,"line":1158},[76,136930,52113],{"class":86},[76,136932,53856],{"class":51269},[76,136934,53793],{"class":1927},[76,136936,133],{"class":86},[76,136938,66617],{"class":192},[76,136940,136829],{"class":86},[76,136942,53856],{"class":51269},[76,136944,51276],{"class":86},[76,136946,136947,136949,136951],{"class":78,"line":1164},[76,136948,51754],{"class":86},[76,136950,66594],{"class":51269},[76,136952,51276],{"class":86},[1426,136954],{"style":126377,"src":136955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[16,136957,136959],{"id":136958},"_142-css新特性","14.2 CSS新特性",[46,136961,136963],{"id":136962},"_1421-新增选择器","14.2.1 新增选择器",[21965,136965,136967],{"id":136966},"_14211-属性选择器","14.2.1.1 属性选择器",[1426,136969],{"style":126377,"src":136970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[66,136972,136974],{"className":126521,"code":136973,"language":126523,"meta":71,"style":71},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[73,136975,136976,136991,137007],{"__ignoreMap":71},[76,136977,136978,136980,136982,136984,136986,136988],{"class":78,"line":79},[76,136979,53790],{"class":51269},[76,136981,978],{"class":86},[76,136983,103076],{"class":1927},[76,136985,133],{"class":82},[76,136987,62668],{"class":192},[76,136989,136990],{"class":86},"] {\n",[76,136992,136993,136995,136997,136999,137001,137003,137005],{"class":78,"line":96},[76,136994,70865],{"class":136},[76,136996,51406],{"class":86},[76,136998,305],{"class":136},[76,137000,51461],{"class":82},[76,137002,51490],{"class":136},[76,137004,130101],{"class":136},[76,137006,1254],{"class":86},[76,137008,137009],{"class":78,"line":1143},[76,137010,1529],{"class":86},[1426,137012],{"style":126377,"src":137013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[21,137015,117],{},[1095,137017,137018,137021,137024,137027],{},[32,137019,137020],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[32,137022,137023],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[32,137025,137026],{},"属性选择器也可以选择出来自定义的属性",[32,137028,137029,137031],{},[237,137030,8992],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21965,137033,137035],{"id":137034},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1426,137037],{"style":126377,"src":137038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[29,137040,137041],{},[32,137042,137043],{},"fist-child",[66,137045,137047],{"className":126521,"code":137046,"language":126523,"meta":71,"style":71},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[73,137048,137049,137054,137069,137089,137107],{"__ignoreMap":71},[76,137050,137051],{"class":78,"line":79},[76,137052,137053],{"class":146},"\u002F* 属性选择器 *\u002F\n",[76,137055,137056,137058,137060,137062,137064,137066],{"class":78,"line":96},[76,137057,53790],{"class":51269},[76,137059,978],{"class":86},[76,137061,103076],{"class":1927},[76,137063,133],{"class":82},[76,137065,62668],{"class":192},[76,137067,137068],{"class":86},"] { }\n",[76,137070,137071,137073,137075,137077,137080,137083,137086],{"class":78,"line":1143},[76,137072,53790],{"class":51269},[76,137074,978],{"class":86},[76,137076,14661],{"class":1927},[76,137078,137079],{"class":82},"^=",[76,137081,137082],{"class":192},"\"icon\"",[76,137084,137085],{"class":86},"] { }  ",[76,137087,137088],{"class":146},"\u002F* 以 icon 开头 *\u002F\n",[76,137090,137091,137093,137095,137097,137100,137102,137104],{"class":78,"line":1158},[76,137092,53790],{"class":51269},[76,137094,978],{"class":86},[76,137096,14661],{"class":1927},[76,137098,137099],{"class":82},"$=",[76,137101,137082],{"class":192},[76,137103,137085],{"class":86},[76,137105,137106],{"class":146},"\u002F* 以 icon 结尾 *\u002F\n",[76,137108,137109,137111,137113,137115,137118,137120,137122],{"class":78,"line":1164},[76,137110,53790],{"class":51269},[76,137112,978],{"class":86},[76,137114,14661],{"class":1927},[76,137116,137117],{"class":82},"*=",[76,137119,137082],{"class":192},[76,137121,137085],{"class":86},[76,137123,137124],{"class":146},"\u002F* 包含 icon *\u002F\n",[21,137126,137127],{},"ul的第一个儿子文本为红色",[21,137129,137130],{},"一定要在冒号前加空格，不然就是选中所有的了",[66,137132,137134],{"className":126521,"code":137133,"language":126523,"meta":71,"style":71},".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",[73,137135,137136,137142,137152,137156,137160,137165,137178,137191,137207,137224,137241],{"__ignoreMap":71},[76,137137,137138,137140],{"class":78,"line":79},[76,137139,126812],{"class":1927},[76,137141,15539],{"class":86},[76,137143,137144,137146,137148,137150],{"class":78,"line":96},[76,137145,70874],{"class":136},[76,137147,51406],{"class":86},[76,137149,57390],{"class":136},[76,137151,1254],{"class":86},[76,137153,137154],{"class":78,"line":1143},[76,137155,1529],{"class":86},[76,137157,137158],{"class":78,"line":1158},[76,137159,135982],{"class":86},[76,137161,137162],{"class":78,"line":1164},[76,137163,137164],{"class":146},"\u002F* 结构伪类选择器 *\u002F\n",[76,137166,137167,137169,137172,137175],{"class":78,"line":1178},[76,137168,32],{"class":51269},[76,137170,137171],{"class":1927},":first-child",[76,137173,137174],{"class":86}," { }           ",[76,137176,137177],{"class":146},"\u002F* 第一个 *\u002F\n",[76,137179,137180,137182,137185,137188],{"class":78,"line":1184},[76,137181,32],{"class":51269},[76,137183,137184],{"class":1927},":last-child",[76,137186,137187],{"class":86}," { }            ",[76,137189,137190],{"class":146},"\u002F* 最后一个 *\u002F\n",[76,137192,137193,137195,137197,137199,137201,137204],{"class":78,"line":1275},[76,137194,32],{"class":51269},[76,137196,129435],{"class":1927},[76,137198,87],{"class":86},[76,137200,165],{"class":136},[76,137202,137203],{"class":86},") { }          ",[76,137205,137206],{"class":146},"\u002F* 第2个 *\u002F\n",[76,137208,137209,137211,137213,137215,137218,137221],{"class":78,"line":1281},[76,137210,32],{"class":51269},[76,137212,129435],{"class":1927},[76,137214,87],{"class":86},[76,137216,137217],{"class":136},"2n",[76,137219,137220],{"class":86},") { }         ",[76,137222,137223],{"class":146},"\u002F* 偶数 *\u002F\n",[76,137225,137226,137228,137230,137232,137235,137238],{"class":78,"line":1293},[76,137227,32],{"class":51269},[76,137229,129435],{"class":1927},[76,137231,87],{"class":86},[76,137233,137234],{"class":136},"2n+1",[76,137236,137237],{"class":86},") { }       ",[76,137239,137240],{"class":146},"\u002F* 奇数 *\u002F\n",[76,137242,137243,137245,137247,137249,137252,137254],{"class":78,"line":1576},[76,137244,32],{"class":51269},[76,137246,129435],{"class":1927},[76,137248,87],{"class":86},[76,137250,137251],{"class":136},"-n+3",[76,137253,137237],{"class":86},[76,137255,137256],{"class":146},"\u002F* 前3个 *\u002F\n",[51580,137258,137261],{"className":137259},[137260],"example","\n  示例内容\n",[21,137263,137264],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1095,137266,137267],{},[32,137268,137269,137272],{},[73,137270,137271],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[21,137274,137275],{},"也就是说它选择的是熊大",[29,137277,137278],{"start":1178},[32,137279,137280],{},"权重",[66,137282,137284],{"className":126521,"code":137283,"language":126523,"meta":71,"style":71},"\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",[73,137285,137286,137290,137300,137310,137324,137338,137352],{"__ignoreMap":71},[76,137287,137288],{"class":78,"line":79},[76,137289,137164],{"class":146},[76,137291,137292,137294,137296,137298],{"class":78,"line":96},[76,137293,32],{"class":51269},[76,137295,137171],{"class":1927},[76,137297,137174],{"class":86},[76,137299,137177],{"class":146},[76,137301,137302,137304,137306,137308],{"class":78,"line":1143},[76,137303,32],{"class":51269},[76,137305,137184],{"class":1927},[76,137307,137187],{"class":86},[76,137309,137190],{"class":146},[76,137311,137312,137314,137316,137318,137320,137322],{"class":78,"line":1158},[76,137313,32],{"class":51269},[76,137315,129435],{"class":1927},[76,137317,87],{"class":86},[76,137319,165],{"class":136},[76,137321,137203],{"class":86},[76,137323,137206],{"class":146},[76,137325,137326,137328,137330,137332,137334,137336],{"class":78,"line":1164},[76,137327,32],{"class":51269},[76,137329,129435],{"class":1927},[76,137331,87],{"class":86},[76,137333,137217],{"class":136},[76,137335,137220],{"class":86},[76,137337,137223],{"class":146},[76,137339,137340,137342,137344,137346,137348,137350],{"class":78,"line":1178},[76,137341,32],{"class":51269},[76,137343,129435],{"class":1927},[76,137345,87],{"class":86},[76,137347,137234],{"class":136},[76,137349,137237],{"class":86},[76,137351,137240],{"class":146},[76,137353,137354,137356,137358,137360,137362,137364],{"class":78,"line":1184},[76,137355,32],{"class":51269},[76,137357,129435],{"class":1927},[76,137359,87],{"class":86},[76,137361,137251],{"class":136},[76,137363,137237],{"class":86},[76,137365,137256],{"class":146},[21,137367,137368],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21965,137370,137372],{"id":137371},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[21,137374,137375],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1426,137377],{"style":126377,"src":137378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[29,137380,137381],{},[32,137382,117],{},[1095,137384,137385,137388,137391,137394,137397,137400],{},[32,137386,137387],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[32,137389,137390],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[32,137392,137393],{},"语法： element::before {}",[32,137395,137396],{},"before 和 after 必须有 content 属性",[32,137398,137399],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[32,137401,137402],{},"伪元素选择器和标签选择器一样，权重为 1",[29,137404,137405],{"start":96},[32,137406,137407],{},"实例",[66,137409,137410],{"className":126521,"code":137283,"language":126523,"meta":71,"style":71},[73,137411,137412,137416,137426,137436,137450,137464,137478],{"__ignoreMap":71},[76,137413,137414],{"class":78,"line":79},[76,137415,137164],{"class":146},[76,137417,137418,137420,137422,137424],{"class":78,"line":96},[76,137419,32],{"class":51269},[76,137421,137171],{"class":1927},[76,137423,137174],{"class":86},[76,137425,137177],{"class":146},[76,137427,137428,137430,137432,137434],{"class":78,"line":1143},[76,137429,32],{"class":51269},[76,137431,137184],{"class":1927},[76,137433,137187],{"class":86},[76,137435,137190],{"class":146},[76,137437,137438,137440,137442,137444,137446,137448],{"class":78,"line":1158},[76,137439,32],{"class":51269},[76,137441,129435],{"class":1927},[76,137443,87],{"class":86},[76,137445,165],{"class":136},[76,137447,137203],{"class":86},[76,137449,137206],{"class":146},[76,137451,137452,137454,137456,137458,137460,137462],{"class":78,"line":1164},[76,137453,32],{"class":51269},[76,137455,129435],{"class":1927},[76,137457,87],{"class":86},[76,137459,137217],{"class":136},[76,137461,137220],{"class":86},[76,137463,137223],{"class":146},[76,137465,137466,137468,137470,137472,137474,137476],{"class":78,"line":1178},[76,137467,32],{"class":51269},[76,137469,129435],{"class":1927},[76,137471,87],{"class":86},[76,137473,137234],{"class":136},[76,137475,137237],{"class":86},[76,137477,137240],{"class":146},[76,137479,137480,137482,137484,137486,137488,137490],{"class":78,"line":1184},[76,137481,32],{"class":51269},[76,137483,129435],{"class":1927},[76,137485,87],{"class":86},[76,137487,137251],{"class":136},[76,137489,137237],{"class":86},[76,137491,137256],{"class":146},[1426,137493],{"style":126377,"src":137494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[29,137496,137497],{"start":1143},[32,137498,137499],{},"使用场景1",[1426,137501],{"style":126377,"src":137502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[21,137504,137505],{},"不需要再加盒子来整红色那部分了",[66,137507,137509],{"className":126521,"code":137508,"language":126523,"meta":71,"style":71},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[73,137510,137511,137516,137525,137536,137546,137550,137559,137570,137580],{"__ignoreMap":71},[76,137512,137513],{"class":78,"line":79},[76,137514,137515],{"class":146},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[76,137517,137518,137520,137523],{"class":78,"line":96},[76,137519,51580],{"class":51269},[76,137521,137522],{"class":1927},"::before",[76,137524,15539],{"class":86},[76,137526,137527,137530,137532,137534],{"class":78,"line":1143},[76,137528,137529],{"class":136},"  content",[76,137531,51406],{"class":86},[76,137533,7619],{"class":192},[76,137535,1254],{"class":86},[76,137537,137538,137540,137542,137544],{"class":78,"line":1158},[76,137539,128137],{"class":136},[76,137541,51406],{"class":86},[76,137543,60838],{"class":136},[76,137545,1254],{"class":86},[76,137547,137548],{"class":78,"line":1164},[76,137549,1529],{"class":86},[76,137551,137552,137554,137557],{"class":78,"line":1178},[76,137553,51580],{"class":51269},[76,137555,137556],{"class":1927},"::after",[76,137558,15539],{"class":86},[76,137560,137561,137563,137565,137568],{"class":78,"line":1184},[76,137562,137529],{"class":136},[76,137564,51406],{"class":86},[76,137566,137567],{"class":192},"\"→\"",[76,137569,1254],{"class":86},[76,137571,137572,137574,137576,137578],{"class":78,"line":1275},[76,137573,70874],{"class":136},[76,137575,51406],{"class":86},[76,137577,62039],{"class":136},[76,137579,1254],{"class":86},[76,137581,137582],{"class":78,"line":1281},[76,137583,1529],{"class":86},[1426,137585],{"style":126377,"src":137586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[21,137588,137589],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1426,137591],{"style":126377,"src":137592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[21,137594,137595],{},"但是在引用时需要先转义一下",[21,137597,137598],{},"content='\\e930'",[29,137600,137601],{"start":1158},[32,137602,137603],{},"使用场景2",[21,137605,137606],{},"仿土豆效果",[21,137608,137609],{},"通过使用伪元素选择器可以减少body中盒子的数量",[66,137611,137612],{"className":126521,"code":137508,"language":126523,"meta":71,"style":71},[73,137613,137614,137618,137626,137636,137646,137650,137658,137668,137678],{"__ignoreMap":71},[76,137615,137616],{"class":78,"line":79},[76,137617,137515],{"class":146},[76,137619,137620,137622,137624],{"class":78,"line":96},[76,137621,51580],{"class":51269},[76,137623,137522],{"class":1927},[76,137625,15539],{"class":86},[76,137627,137628,137630,137632,137634],{"class":78,"line":1143},[76,137629,137529],{"class":136},[76,137631,51406],{"class":86},[76,137633,7619],{"class":192},[76,137635,1254],{"class":86},[76,137637,137638,137640,137642,137644],{"class":78,"line":1158},[76,137639,128137],{"class":136},[76,137641,51406],{"class":86},[76,137643,60838],{"class":136},[76,137645,1254],{"class":86},[76,137647,137648],{"class":78,"line":1164},[76,137649,1529],{"class":86},[76,137651,137652,137654,137656],{"class":78,"line":1178},[76,137653,51580],{"class":51269},[76,137655,137556],{"class":1927},[76,137657,15539],{"class":86},[76,137659,137660,137662,137664,137666],{"class":78,"line":1184},[76,137661,137529],{"class":136},[76,137663,51406],{"class":86},[76,137665,137567],{"class":192},[76,137667,1254],{"class":86},[76,137669,137670,137672,137674,137676],{"class":78,"line":1275},[76,137671,70874],{"class":136},[76,137673,51406],{"class":86},[76,137675,62039],{"class":136},[76,137677,1254],{"class":86},[76,137679,137680],{"class":78,"line":1281},[76,137681,1529],{"class":86},[1426,137683],{"style":126377,"src":137684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[29,137686,137687],{"start":1164},[32,137688,137689],{},"使用场景3",[21,137691,137692],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[66,137694,137696],{"className":126521,"code":137695,"language":126523,"meta":71,"style":71},".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",[73,137697,137698,137704,137714,137718,137722,137726,137734,137744,137754,137758,137766,137776,137786],{"__ignoreMap":71},[76,137699,137700,137702],{"class":78,"line":79},[76,137701,130369],{"class":1927},[76,137703,15539],{"class":86},[76,137705,137706,137708,137710,137712],{"class":78,"line":96},[76,137707,131001],{"class":136},[76,137709,51406],{"class":86},[76,137711,23704],{"class":136},[76,137713,1254],{"class":86},[76,137715,137716],{"class":78,"line":1143},[76,137717,1529],{"class":86},[76,137719,137720],{"class":78,"line":1158},[76,137721,135982],{"class":86},[76,137723,137724],{"class":78,"line":1164},[76,137725,137515],{"class":146},[76,137727,137728,137730,137732],{"class":78,"line":1178},[76,137729,51580],{"class":51269},[76,137731,137522],{"class":1927},[76,137733,15539],{"class":86},[76,137735,137736,137738,137740,137742],{"class":78,"line":1184},[76,137737,137529],{"class":136},[76,137739,51406],{"class":86},[76,137741,7619],{"class":192},[76,137743,1254],{"class":86},[76,137745,137746,137748,137750,137752],{"class":78,"line":1275},[76,137747,128137],{"class":136},[76,137749,51406],{"class":86},[76,137751,60838],{"class":136},[76,137753,1254],{"class":86},[76,137755,137756],{"class":78,"line":1281},[76,137757,1529],{"class":86},[76,137759,137760,137762,137764],{"class":78,"line":1293},[76,137761,51580],{"class":51269},[76,137763,137556],{"class":1927},[76,137765,15539],{"class":86},[76,137767,137768,137770,137772,137774],{"class":78,"line":1576},[76,137769,137529],{"class":136},[76,137771,51406],{"class":86},[76,137773,137567],{"class":192},[76,137775,1254],{"class":86},[76,137777,137778,137780,137782,137784],{"class":78,"line":1581},[76,137779,70874],{"class":136},[76,137781,51406],{"class":86},[76,137783,62039],{"class":136},[76,137785,1254],{"class":86},[76,137787,137788],{"class":78,"line":1587},[76,137789,1529],{"class":86},[21,137791,137792],{},"div {\nmargin: 0 auto;\n}",[66,137794,137797],{"className":137795,"code":137796,"language":5154},[5152],"\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",[73,137798,137796],{"__ignoreMap":71},[21,137800,137801],{},"如果想让多个元素都发生变化",[21,137803,137804],{},"不能如下操作：",[21,137806,137807],{},"transition: width 2s ease 0.5s;",[21,137809,137810],{},"transition: height 2s ease 0.5s;不对！！！",[21,137812,137813],{},"上方会样式冲突，导致不显示任何过渡效果",[21,137815,137816],{},"使用如下：加逗号隔开",[21,137818,137819],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[21,137821,137822],{},"transition all 2s ease;",[46,137824,137826],{"id":137825},"_1426-过渡练习","14.2.6 过渡练习",[29,137828,137829],{},[32,137830,137831],{},"进度条",[1426,137833],{"style":126377,"src":137834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[66,137836,137838],{"className":126521,"code":137837,"language":126523,"meta":71,"style":71},"div {\n  transition: all 0.3s ease;\n}\n",[73,137839,137840,137846,137864],{"__ignoreMap":71},[76,137841,137842,137844],{"class":78,"line":79},[76,137843,51580],{"class":51269},[76,137845,15539],{"class":86},[76,137847,137848,137851,137853,137855,137858,137860,137862],{"class":78,"line":96},[76,137849,137850],{"class":136},"  transition",[76,137852,51406],{"class":86},[76,137854,28090],{"class":136},[76,137856,137857],{"class":136}," 0.3",[76,137859,783],{"class":82},[76,137861,78649],{"class":136},[76,137863,1254],{"class":86},[76,137865,137866],{"class":78,"line":1143},[76,137867,1529],{"class":86},[29,137869,137870],{"start":96},[32,137871,137872],{},"小米logo",[21,137874,137875],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[66,137877,137879],{"className":126521,"code":137878,"language":126523,"meta":71,"style":71},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[73,137880,137881,137886,137892,137908,137913],{"__ignoreMap":71},[76,137882,137883],{"class":78,"line":79},[76,137884,137885],{"class":146},"\u002F* CSS3 过渡 *\u002F\n",[76,137887,137888,137890],{"class":78,"line":96},[76,137889,51580],{"class":51269},[76,137891,15539],{"class":86},[76,137893,137894,137896,137898,137900,137902,137904,137906],{"class":78,"line":1143},[76,137895,137850],{"class":136},[76,137897,51406],{"class":86},[76,137899,28090],{"class":136},[76,137901,137857],{"class":136},[76,137903,783],{"class":82},[76,137905,78649],{"class":136},[76,137907,1254],{"class":86},[76,137909,137910],{"class":78,"line":1158},[76,137911,137912],{"class":146},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[76,137914,137915],{"class":78,"line":1164},[76,137916,1529],{"class":86},[21,137918,137919],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5092,137921,137922],{},"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":71,"searchDepth":96,"depth":96,"links":137924},[137925,137930],{"id":136255,"depth":96,"text":136256,"children":137926},[137927,137928,137929],{"id":136259,"depth":1143,"text":136260},{"id":136336,"depth":1143,"text":136337},{"id":136667,"depth":1143,"text":136668},{"id":136958,"depth":96,"text":136959,"children":137931},[137932,137933],{"id":136962,"depth":1143,"text":136963},{"id":137825,"depth":1143,"text":137826},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136247,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137940,"title":137941,"body":137942,"description":23344,"extension":5123,"meta":139686,"navigation":2364,"path":139687,"seo":139688,"stem":139689,"__hash__":139690},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":9,"value":137943,"toc":139667},[137944,137947,137951,137954,137960,137966,137970,137972,137975,137978,137981,137984,137987,137990,137993,137997,138001,138004,138007,138010,138014,138017,138020,138025,138028,138031,138034,138038,138041,138050,138053,138056,138060,138063,138066,138071,138078,138092,138100,138107,138112,138115,138118,138121,138128,138132,138138,138144,138147,138150,138155,138161,138163,138171,138176,138179,138185,138187,138192,138197,138200,138202,138207,138210,138215,138220,138254,138258,138262,138265,138269,138272,138358,138361,138398,138401,138437,138441,138446,138459,138513,138515,138543,138545,138573,138579,138593,138595,138639,138641,138685,138688,138695,138706,138708,138735,138737,138763,138770,138786,138788,138882,138884,138978,138985,138988,138993,138999,139073,139076,139078,139114,139116,139152,139155,139162,139181,139184,139187,139189,139214,139216,139240,139243,139246,139276,139280,139283,139346,139348,139414,139416,139480,139483,139515,139517,139543,139545,139571,139574,139605,139607,139633,139635,139661,139664],[12,137945,137941],{"id":137946},"_15-品优购项目上篇-搭建与公共模块",[16,137948,137950],{"id":137949},"_151-项目规划","15.1 项目规划",[1426,137952],{"style":126377,"src":137953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[21,137955,137956,137959],{},[237,137957,137958],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[21,137961,137962,137965],{},[237,137963,137964],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[16,137967,137969],{"id":137968},"_152-项目介绍","15.2 项目介绍",[21,137971,137958],{},[1426,137973],{"style":126377,"src":137974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[21,137976,137977],{},"主页：",[1426,137979],{"style":126377,"src":137980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[21,137982,137983],{},"列表页：",[1426,137985],{"style":126377,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[21,137988,137989],{},"注册页：",[1426,137991],{"style":126377,"src":137992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[16,137994,137996],{"id":137995},"_153-项目搭建工作","15.3 项目搭建工作",[46,137998,138000],{"id":137999},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1426,138002],{"style":126377,"src":138003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[21,138005,138006],{},"经常更换的图片要放到upload文件夹中",[21,138008,138009],{},"不经常换的放到images文件夹中",[46,138011,138013],{"id":138012},"_1532-创建文件如下","15.3.2 创建文件如下",[1426,138015],{"style":126377,"src":138016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1426,138018],{"style":126377,"src":138019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[21,138021,138022],{},[237,138023,138024],{},"初始化样式：",[21,138026,138027],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[21,138029,138030],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[21,138032,138033],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[46,138035,138037],{"id":138036},"_1533-项目模块化开发","15.3.3 项目模块化开发",[21,138039,138040],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[21,138042,138043,138044,138049],{},"这里最典型的应用就是 ",[237,138045,138046],{},[73,138047,138048],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1426,138051],{"style":126377,"src":138052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[21,138054,138055],{},"通过link方法来引入",[46,138057,138059],{"id":138058},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1426,138061],{"style":126377,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[21,138064,138065],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[29,138067,138068],{},[32,138069,138070],{},"制作favicon图标",[21,138072,138073,138074,138077],{},"①把品优购图标切成 ",[73,138075,138076],{},"png"," 图片",[21,138079,138080,138081,138083,138084,138087,138088],{},"②把 ",[73,138082,138076],{}," 图片转换为 ",[73,138085,138086],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[326,138089,138090],{"href":138090,"rel":138091},"http:\u002F\u002Fwww.bitbug.net\u002F",[23833],[29,138093,138094,138097],{"start":96},[32,138095,138096],{},"favicon图标放到网站根目录下",[32,138098,138099],{},"HTML页面引入favicon",[21,138101,138102,138103,138106],{},"在html 页面里面的 ",[73,138104,138105],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[21,138108,138109],{},[73,138110,138111],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[21,138113,138114],{},"复制这行代码或者在生成这个的网站进行复制",[1426,138116],{"style":126377,"src":138117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[21,138119,138120],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[21,138122,138123,138124],{},"例如:",[326,138125,138126],{"href":138126,"rel":138127},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23833],[46,138129,138131],{"id":138130},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[21,138133,138134,138137],{},[237,138135,138136],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[21,138139,138140,138143],{},[237,138141,138142],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[21,138145,138146],{},"页面必须有三个标签用来符合 SEO 优化",[1426,138148],{"style":126377,"src":138149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[29,138151,138152],{},[32,138153,138154],{},"title网站标题",[21,138156,138157,138160],{},[237,138158,138159],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[21,138162,68759],{},[1095,138164,138165,138168],{},[32,138166,138167],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[32,138169,138170],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[29,138172,138173],{"start":96},[32,138174,138175],{},"description网站描述",[21,138177,138178],{},"简要说明我们网站主要是做什么的",[21,138180,138181,138184],{},[237,138182,138183],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[21,138186,68759],{},[21,138188,138189],{},[73,138190,138191],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[29,138193,138194],{"start":1143},[32,138195,138196],{},"keywords关键词",[21,138198,138199],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[21,138201,68759],{},[21,138203,138204],{},[73,138205,138206],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[21,138208,138209],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[21,138211,138212],{},[237,138213,138214],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[29,138216,138217],{"start":1158},[32,138218,138219],{},"代码总结",[66,138221,138222],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,138223,138224,138228,138242,138246],{"__ignoreMap":71},[76,138225,138226],{"class":78,"line":79},[76,138227,130632],{"class":146},[76,138229,138230,138232,138234,138236,138238,138240],{"class":78,"line":96},[76,138231,998],{"class":86},[76,138233,51580],{"class":51269},[76,138235,53455],{"class":1927},[76,138237,133],{"class":86},[76,138239,130645],{"class":192},[76,138241,51276],{"class":86},[76,138243,138244],{"class":78,"line":1143},[76,138245,130652],{"class":86},[76,138247,138248,138250,138252],{"class":78,"line":1158},[76,138249,51754],{"class":86},[76,138251,51580],{"class":51269},[76,138253,51276],{"class":86},[16,138255,138257],{"id":138256},"_154-项目公共部分制作","15.4 项目公共部分制作",[46,138259,138261],{"id":138260},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1426,138263],{"style":126377,"src":138264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[46,138266,138268],{"id":138267},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[21,138270,138271],{},"布局思路：",[1095,138273,138274,138277,138280,138302,138335],{},[32,138275,138276],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[32,138278,138279],{},"里面包含版心的盒子",[32,138281,138282,138283],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1095,138284,138285,138293,138299],{},[32,138286,138287,138288,21467,138290,138292],{},"1 号盒子 里面包含一个",[73,138289,1095],{},[73,138291,1095],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[32,138294,138295,138296,138298],{},"里面的内容是水平排列，所以需要给",[73,138297,32],{},"设置浮动",[32,138300,138301],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[32,138303,138304,138305],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1095,138306,138307,138321,138326],{},[32,138308,138309,138310,21467,138312,138314,138315,138317,138318,138320],{},"2 号盒子 里面包含一个",[73,138311,1095],{},[73,138313,1095],{},"包裹",[73,138316,32],{},"，中间的",[73,138319,1009],{},"可以用样式去设置，也可以用字符 |",[32,138322,138323,138324,138298],{},"里面内容水平排列，给",[73,138325,32],{},[32,138327,138328,138329,138331,138332,138334],{},"找到里面所有偶数的 ",[73,138330,32],{}," 设置样式（偶数的 ",[73,138333,32],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[32,138336,138337,138338],{},"需要用到字体图标",[1095,138339,138340,138346,138349,138352,138355],{},[32,138341,138342,138343],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[73,138344,138345],{},"arrow-icon",[32,138347,138348],{},"先要引入字体图片的资源",[32,138350,138351],{},"在样式里面利用 font-face 来进行声明",[32,138353,138354],{},"在伪元素的 content属性设置 图标的编码",[32,138356,138357],{},"给伪元素设置font-family属性",[21,138359,138360],{},"结构实例代码：",[66,138362,138364],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},"div::before {\n  content: \"\";\n  display: block;\n}\n",[73,138365,138366,138374,138384,138394],{"__ignoreMap":71},[76,138367,138368,138370,138372],{"class":78,"line":79},[76,138369,51580],{"class":51269},[76,138371,137522],{"class":1927},[76,138373,15539],{"class":86},[76,138375,138376,138378,138380,138382],{"class":78,"line":96},[76,138377,137529],{"class":136},[76,138379,51406],{"class":86},[76,138381,7619],{"class":192},[76,138383,1254],{"class":86},[76,138385,138386,138388,138390,138392],{"class":78,"line":1143},[76,138387,128137],{"class":136},[76,138389,51406],{"class":86},[76,138391,60838],{"class":136},[76,138393,1254],{"class":86},[76,138395,138396],{"class":78,"line":1158},[76,138397,1529],{"class":86},[21,138399,138400],{},"样式实例代码：",[66,138402,138403],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,138404,138405,138413,138423,138433],{"__ignoreMap":71},[76,138406,138407,138409,138411],{"class":78,"line":79},[76,138408,51580],{"class":51269},[76,138410,137522],{"class":1927},[76,138412,15539],{"class":86},[76,138414,138415,138417,138419,138421],{"class":78,"line":96},[76,138416,137529],{"class":136},[76,138418,51406],{"class":86},[76,138420,7619],{"class":192},[76,138422,1254],{"class":86},[76,138424,138425,138427,138429,138431],{"class":78,"line":1143},[76,138426,128137],{"class":136},[76,138428,51406],{"class":86},[76,138430,60838],{"class":136},[76,138432,1254],{"class":86},[76,138434,138435],{"class":78,"line":1158},[76,138436,1529],{"class":86},[46,138438,138440],{"id":138439},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1095,138442,138443],{},[32,138444,138445],{},"header 盒子必须要有高度",[21,138447,138448,138449,138451,138452],{},"1 号盒子是 ",[73,138450,131533],{}," 标志定位，在正常开发过程中， ",[237,138453,138454,138455,138458],{},"logo的布局其实是有讲究的，需要进行 ",[73,138456,138457],{},"logoSEO","的优化 （★★★）",[1095,138460,138461,138469,138477,138504],{},[32,138462,138463,138465,138466,138468],{},[73,138464,131533],{}," 里面首先放一个 ",[73,138467,12],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[32,138470,138471,138473,138474,138476],{},[73,138472,12],{}," 里面再放一个链接，可以返回首页的，把 ",[73,138475,131533],{}," 的背景图片给链接即可",[32,138478,138479,138480],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1095,138481,138482,138497],{},[32,138483,138484,138485,138488,138489,138492,138493,138496],{},"方法1：",[73,138486,138487],{},"text-indent"," 移到盒子外面（",[73,138490,138491],{},"text-indent: -9999px",") ，然后 ",[73,138494,138495],{},"overflow:hidden"," ，淘宝的做法",[32,138498,138499,138500,138503],{},"方法2：直接给 ",[73,138501,138502],{},"font-size: 0;"," 就看不到文字了，京东的做法",[32,138505,138506,138507,138509,138510,138512],{},"最后给链接一个 ",[73,138508,51376],{}," 属性，这样鼠标放到 ",[73,138511,131533],{}," 上就可以看到提示文字了",[21,138514,138360],{},[66,138516,138517],{"className":127268,"code":131754,"language":127270,"meta":71,"style":71},[73,138518,138519],{"__ignoreMap":71},[76,138520,138521,138523,138525,138527,138529,138531,138533,138535,138537,138539,138541],{"class":78,"line":79},[76,138522,998],{"class":86},[76,138524,326],{"class":51269},[76,138526,61026],{"class":1927},[76,138528,133],{"class":86},[76,138530,131769],{"class":192},[76,138532,131772],{"class":1927},[76,138534,133],{"class":86},[76,138536,131777],{"class":192},[76,138538,131780],{"class":86},[76,138540,326],{"class":51269},[76,138542,51276],{"class":86},[21,138544,138400],{},[66,138546,138547],{"className":127268,"code":131754,"language":127270,"meta":71,"style":71},[73,138548,138549],{"__ignoreMap":71},[76,138550,138551,138553,138555,138557,138559,138561,138563,138565,138567,138569,138571],{"class":78,"line":79},[76,138552,998],{"class":86},[76,138554,326],{"class":51269},[76,138556,61026],{"class":1927},[76,138558,133],{"class":86},[76,138560,131769],{"class":192},[76,138562,131772],{"class":1927},[76,138564,133],{"class":86},[76,138566,131777],{"class":192},[76,138568,131780],{"class":86},[76,138570,326],{"class":51269},[76,138572,51276],{"class":86},[21,138574,138575,138576,138578],{},"2 号盒子是 ",[73,138577,131546],{}," 搜索模块定位",[1095,138580,138581,138584,138587,138590],{},[32,138582,138583],{},"search盒子利用定位的方式放在对应的位置",[32,138585,138586],{},"search盒子设置绝对定位，header盒子设置相对定位",[32,138588,138589],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[32,138591,138592],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[21,138594,138360],{},[66,138596,138597],{"className":126521,"code":131841,"language":126523,"meta":71,"style":71},[73,138598,138599,138621,138625,138635],{"__ignoreMap":71},[76,138600,138601,138603,138605,138607,138609,138611,138613,138615,138617,138619],{"class":78,"line":79},[76,138602,51580],{"class":51269},[76,138604,12402],{"class":86},[76,138606,21],{"class":51269},[76,138608,12402],{"class":86},[76,138610,12],{"class":51269},[76,138612,12402],{"class":86},[76,138614,1095],{"class":51269},[76,138616,12402],{"class":86},[76,138618,32],{"class":51269},[76,138620,15539],{"class":86},[76,138622,138623],{"class":78,"line":96},[76,138624,131870],{"class":146},[76,138626,138627,138629,138631,138633],{"class":78,"line":1143},[76,138628,128137],{"class":136},[76,138630,51406],{"class":86},[76,138632,60838],{"class":136},[76,138634,1254],{"class":86},[76,138636,138637],{"class":78,"line":1158},[76,138638,1529],{"class":86},[21,138640,138400],{},[66,138642,138643],{"className":126521,"code":131841,"language":126523,"meta":71,"style":71},[73,138644,138645,138667,138671,138681],{"__ignoreMap":71},[76,138646,138647,138649,138651,138653,138655,138657,138659,138661,138663,138665],{"class":78,"line":79},[76,138648,51580],{"class":51269},[76,138650,12402],{"class":86},[76,138652,21],{"class":51269},[76,138654,12402],{"class":86},[76,138656,12],{"class":51269},[76,138658,12402],{"class":86},[76,138660,1095],{"class":51269},[76,138662,12402],{"class":86},[76,138664,32],{"class":51269},[76,138666,15539],{"class":86},[76,138668,138669],{"class":78,"line":96},[76,138670,131870],{"class":146},[76,138672,138673,138675,138677,138679],{"class":78,"line":1143},[76,138674,128137],{"class":136},[76,138676,51406],{"class":86},[76,138678,60838],{"class":136},[76,138680,1254],{"class":86},[76,138682,138683],{"class":78,"line":1158},[76,138684,1529],{"class":86},[21,138686,138687],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[21,138689,138690,138691,138694],{},"3 号盒子是 ",[73,138692,138693],{},"hotwords"," 热词模块定位",[1095,138696,138697,138700,138703],{},[32,138698,138699],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[32,138701,138702],{},"给里面所有的a标签设置 左右10px的外边距",[32,138704,138705],{},"给第一个a标签设置文字变红色（#c81623）",[21,138707,138360],{},[66,138709,138711],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},"div {\n  margin: 0 auto;\n}\n",[73,138712,138713,138719,138731],{"__ignoreMap":71},[76,138714,138715,138717],{"class":78,"line":79},[76,138716,51580],{"class":51269},[76,138718,15539],{"class":86},[76,138720,138721,138723,138725,138727,138729],{"class":78,"line":96},[76,138722,70439],{"class":136},[76,138724,51406],{"class":86},[76,138726,279],{"class":136},[76,138728,51525],{"class":136},[76,138730,1254],{"class":86},[76,138732,138733],{"class":78,"line":1143},[76,138734,1529],{"class":86},[21,138736,138400],{},[66,138738,138739],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,138740,138741,138747,138759],{"__ignoreMap":71},[76,138742,138743,138745],{"class":78,"line":79},[76,138744,51580],{"class":51269},[76,138746,15539],{"class":86},[76,138748,138749,138751,138753,138755,138757],{"class":78,"line":96},[76,138750,70439],{"class":136},[76,138752,51406],{"class":86},[76,138754,279],{"class":136},[76,138756,51525],{"class":136},[76,138758,1254],{"class":86},[76,138760,138761],{"class":78,"line":1143},[76,138762,1529],{"class":86},[21,138764,138765,138766,138769],{},"4 号盒子是 ",[73,138767,138768],{},"shopcar"," 购物车模块",[1095,138771,138772,138777,138780,138783],{},[32,138773,123304,138774,138776],{},[73,138775,138768],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[32,138778,138779],{},"count 统计部分用绝对定位做",[32,138781,138782],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[32,138784,138785],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[21,138787,138360],{},[66,138789,138790],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,138791,138792,138796,138810,138814,138828,138832,138846,138850,138864,138868],{"__ignoreMap":71},[76,138793,138794],{"class":78,"line":79},[76,138795,131960],{"class":146},[76,138797,138798,138800,138802,138804,138806,138808],{"class":78,"line":96},[76,138799,131965],{"class":1927},[76,138801,79776],{"class":86},[76,138803,128881],{"class":136},[76,138805,51406],{"class":86},[76,138807,131974],{"class":136},[76,138809,129451],{"class":86},[76,138811,138812],{"class":78,"line":1143},[76,138813,131981],{"class":146},[76,138815,138816,138818,138820,138822,138824,138826],{"class":78,"line":1158},[76,138817,131986],{"class":1927},[76,138819,79776],{"class":86},[76,138821,128881],{"class":136},[76,138823,51406],{"class":86},[76,138825,54733],{"class":136},[76,138827,129451],{"class":86},[76,138829,138830],{"class":78,"line":1164},[76,138831,132001],{"class":146},[76,138833,138834,138836,138838,138840,138842,138844],{"class":78,"line":1178},[76,138835,132006],{"class":1927},[76,138837,79776],{"class":86},[76,138839,128881],{"class":136},[76,138841,51406],{"class":86},[76,138843,54800],{"class":136},[76,138845,129451],{"class":86},[76,138847,138848],{"class":78,"line":1184},[76,138849,132021],{"class":146},[76,138851,138852,138854,138856,138858,138860,138862],{"class":78,"line":1275},[76,138853,132026],{"class":1927},[76,138855,79776],{"class":86},[76,138857,128881],{"class":136},[76,138859,51406],{"class":86},[76,138861,86202],{"class":136},[76,138863,129451],{"class":86},[76,138865,138866],{"class":78,"line":1281},[76,138867,132041],{"class":146},[76,138869,138870,138872,138874,138876,138878,138880],{"class":78,"line":1293},[76,138871,132046],{"class":1927},[76,138873,79776],{"class":86},[76,138875,128881],{"class":136},[76,138877,51406],{"class":86},[76,138879,132055],{"class":136},[76,138881,129451],{"class":86},[21,138883,138400],{},[66,138885,138886],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,138887,138888,138892,138906,138910,138924,138928,138942,138946,138960,138964],{"__ignoreMap":71},[76,138889,138890],{"class":78,"line":79},[76,138891,131960],{"class":146},[76,138893,138894,138896,138898,138900,138902,138904],{"class":78,"line":96},[76,138895,131965],{"class":1927},[76,138897,79776],{"class":86},[76,138899,128881],{"class":136},[76,138901,51406],{"class":86},[76,138903,131974],{"class":136},[76,138905,129451],{"class":86},[76,138907,138908],{"class":78,"line":1143},[76,138909,131981],{"class":146},[76,138911,138912,138914,138916,138918,138920,138922],{"class":78,"line":1158},[76,138913,131986],{"class":1927},[76,138915,79776],{"class":86},[76,138917,128881],{"class":136},[76,138919,51406],{"class":86},[76,138921,54733],{"class":136},[76,138923,129451],{"class":86},[76,138925,138926],{"class":78,"line":1164},[76,138927,132001],{"class":146},[76,138929,138930,138932,138934,138936,138938,138940],{"class":78,"line":1178},[76,138931,132006],{"class":1927},[76,138933,79776],{"class":86},[76,138935,128881],{"class":136},[76,138937,51406],{"class":86},[76,138939,54800],{"class":136},[76,138941,129451],{"class":86},[76,138943,138944],{"class":78,"line":1184},[76,138945,132021],{"class":146},[76,138947,138948,138950,138952,138954,138956,138958],{"class":78,"line":1275},[76,138949,132026],{"class":1927},[76,138951,79776],{"class":86},[76,138953,128881],{"class":136},[76,138955,51406],{"class":86},[76,138957,86202],{"class":136},[76,138959,129451],{"class":86},[76,138961,138962],{"class":78,"line":1281},[76,138963,132041],{"class":146},[76,138965,138966,138968,138970,138972,138974,138976],{"class":78,"line":1293},[76,138967,132046],{"class":1927},[76,138969,79776],{"class":86},[76,138971,128881],{"class":136},[76,138973,51406],{"class":86},[76,138975,132055],{"class":136},[76,138977,129451],{"class":86},[46,138979,138981,138982,138984],{"id":138980},"_1544-nav导航模块制作","15.4.4 ",[73,138983,53682],{},"导航模块制作",[1426,138986],{"style":126377,"src":138987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[21,138989,138990,138992],{},[73,138991,53682],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[21,138994,138995,138996],{},"1 号盒子左侧浮动，",[73,138997,138998],{},"dropdown",[1095,139000,139001,139011,139019,139025,139033,139043,139051,139062],{},[32,139002,139003,139004,100987,139007,139010],{},"1号盒子有讲究，根据相关性 里面包含 ",[73,139005,139006],{},".dt",[73,139008,139009],{},".dd"," 两个盒子",[32,139012,139013,139015,139016,139018],{},[73,139014,139006],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[73,139017,139009],{}," 挤到下面去了",[32,139020,139021,139022,139024],{},"给 ",[73,139023,139009],{}," 盒子设置宽度 和 高度，以及背景颜色",[32,139026,139021,139027,139029,139030,120206],{},[73,139028,139009],{}," 盒子里面定义 无序列表 （",[73,139031,139032],{},"ul > li > a",[32,139034,139035,139036,139038,139039,139042],{},"每个 ",[73,139037,32],{}," 都有一个高度（",[73,139040,139041],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[32,139044,139021,139045,139047,139048,120206],{},[73,139046,32],{}," 里面的a设置文字大小（",[73,139049,139050],{},"14px",[32,139052,139021,139053,139055,139056,139058,139059,139061],{},[73,139054,32],{}," 设置 ",[73,139057,127682],{},"，当鼠标移入的时候，让",[73,139060,32],{},"的背景变成白色，让里面的文字变成红色",[32,139063,139064,139066,139067,139069,139070,139072],{},[73,139065,32],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[73,139068,32],{},"的右侧，那么给",[73,139071,32],{},"设置相对定位",[21,139074,139075],{},"一定要注意相关性",[21,139077,138360],{},[66,139079,139080],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,139081,139082,139090,139100,139110],{"__ignoreMap":71},[76,139083,139084,139086,139088],{"class":78,"line":79},[76,139085,51580],{"class":51269},[76,139087,137522],{"class":1927},[76,139089,15539],{"class":86},[76,139091,139092,139094,139096,139098],{"class":78,"line":96},[76,139093,137529],{"class":136},[76,139095,51406],{"class":86},[76,139097,7619],{"class":192},[76,139099,1254],{"class":86},[76,139101,139102,139104,139106,139108],{"class":78,"line":1143},[76,139103,128137],{"class":136},[76,139105,51406],{"class":86},[76,139107,60838],{"class":136},[76,139109,1254],{"class":86},[76,139111,139112],{"class":78,"line":1158},[76,139113,1529],{"class":86},[21,139115,138400],{},[66,139117,139118],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,139119,139120,139128,139138,139148],{"__ignoreMap":71},[76,139121,139122,139124,139126],{"class":78,"line":79},[76,139123,51580],{"class":51269},[76,139125,137522],{"class":1927},[76,139127,15539],{"class":86},[76,139129,139130,139132,139134,139136],{"class":78,"line":96},[76,139131,137529],{"class":136},[76,139133,51406],{"class":86},[76,139135,7619],{"class":192},[76,139137,1254],{"class":86},[76,139139,139140,139142,139144,139146],{"class":78,"line":1143},[76,139141,128137],{"class":136},[76,139143,51406],{"class":86},[76,139145,60838],{"class":136},[76,139147,1254],{"class":86},[76,139149,139150],{"class":78,"line":1158},[76,139151,1529],{"class":86},[21,139153,139154],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[21,139156,139157,139158,139161],{},"2 号盒子左侧浮动，",[73,139159,139160],{},"navitems"," 导航栏组",[1095,139163,139164,139169,139178],{},[32,139165,139166,139167],{},"里面结构是 ",[73,139168,139032],{},[32,139170,139171,139172,139174,139175,139177],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[73,139173,326],{},"左右的",[73,139176,30852],{},"把两侧撑开",[32,139179,139180],{},"让文字垂直居中（行高等于高度）",[1426,139182],{"style":126377,"src":139183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[21,139185,139186],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[21,139188,138360],{},[66,139190,139192],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},".box {\n  float: left;\n}\n",[73,139193,139194,139200,139210],{"__ignoreMap":71},[76,139195,139196,139198],{"class":78,"line":79},[76,139197,130369],{"class":1927},[76,139199,15539],{"class":86},[76,139201,139202,139204,139206,139208],{"class":78,"line":96},[76,139203,131001],{"class":136},[76,139205,51406],{"class":86},[76,139207,23704],{"class":136},[76,139209,1254],{"class":86},[76,139211,139212],{"class":78,"line":1143},[76,139213,1529],{"class":86},[21,139215,138400],{},[66,139217,139218],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,139219,139220,139226,139236],{"__ignoreMap":71},[76,139221,139222,139224],{"class":78,"line":79},[76,139223,130369],{"class":1927},[76,139225,15539],{"class":86},[76,139227,139228,139230,139232,139234],{"class":78,"line":96},[76,139229,131001],{"class":136},[76,139231,51406],{"class":86},[76,139233,23704],{"class":136},[76,139235,1254],{"class":86},[76,139237,139238],{"class":78,"line":1143},[76,139239,1529],{"class":86},[21,139241,139242],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1426,139244],{"style":126377,"src":139245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[66,139247,139248],{"className":126521,"code":130678,"language":126523,"meta":71,"style":71},[73,139249,139250,139256,139272],{"__ignoreMap":71},[76,139251,139252,139254],{"class":78,"line":79},[76,139253,51580],{"class":51269},[76,139255,15539],{"class":86},[76,139257,139258,139260,139262,139264,139266,139268,139270],{"class":78,"line":96},[76,139259,70865],{"class":136},[76,139261,51406],{"class":86},[76,139263,305],{"class":136},[76,139265,51461],{"class":82},[76,139267,51490],{"class":136},[76,139269,129913],{"class":136},[76,139271,1254],{"class":86},[76,139273,139274],{"class":78,"line":1143},[76,139275,1529],{"class":86},[46,139277,139279],{"id":139278},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1426,139281],{"style":126377,"src":139282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1095,139284,139285,139290,139295],{},[32,139286,139287,139289],{},[73,139288,131724],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[32,139291,139292,139294],{},[73,139293,131724],{}," 里面有一个大的版心",[32,139296,139297,139298,139301,139302],{},"版心里面包含 1 号盒子，",[73,139299,139300],{},"mod_service"," 是服务模块，mod 是模块的意思",[1095,139303,139304,139309,139322,139338,139343],{},[32,139305,139021,139306,139308],{},[73,139307,139300],{}," 设置高度（80px）和下边框",[32,139310,139311,139312,139315,139316,139318,139319,139321],{},"在里面定义 ",[73,139313,139314],{},"ul > li"," ,每个",[73,139317,32],{}," 宽度是300px 高度是 50px，给每个",[73,139320,32],{},"设置35px的左内边距",[32,139323,139324,139325,139327,139328,139330,139331,139333,139334,18377,139336,120206],{},"在每个",[73,139326,32],{},"里面，放一个 ",[73,139329,22877],{},"（里面放图标），一个",[73,139332,51580],{},"（里面放",[73,139335,51580],{},[73,139337,21],{},[32,139339,139021,139340,139342],{},[73,139341,22877],{},"设置浮动，让h5与这个div左右排列",[32,139344,139345],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[21,139347,138360],{},[66,139349,139351],{"className":126521,"code":139350,"language":126523,"meta":71,"style":71},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[73,139352,139353,139359,139371,139383,139410],{"__ignoreMap":71},[76,139354,139355,139357],{"class":78,"line":79},[76,139356,134278],{"class":1927},[76,139358,15539],{"class":86},[76,139360,139361,139363,139365,139367,139369],{"class":78,"line":96},[76,139362,70537],{"class":136},[76,139364,51406],{"class":86},[76,139366,788],{"class":136},[76,139368,51461],{"class":82},[76,139370,1254],{"class":86},[76,139372,139373,139375,139377,139379,139381],{"class":78,"line":1143},[76,139374,70757],{"class":136},[76,139376,51406],{"class":86},[76,139378,788],{"class":136},[76,139380,51461],{"class":82},[76,139382,1254],{"class":86},[76,139384,139385,139387,139389,139391,139393,139395,139397,139399,139402,139404,139406,139408],{"class":78,"line":1158},[76,139386,70580],{"class":136},[76,139388,51406],{"class":86},[76,139390,61695],{"class":136},[76,139392,87],{"class":86},[76,139394,134317],{"class":5183},[76,139396,13681],{"class":86},[76,139398,61705],{"class":136},[76,139400,139401],{"class":136}," -10",[76,139403,51461],{"class":82},[76,139405,134336],{"class":136},[76,139407,51461],{"class":82},[76,139409,1254],{"class":86},[76,139411,139412],{"class":78,"line":1164},[76,139413,1529],{"class":86},[21,139415,138400],{},[66,139417,139418],{"className":126521,"code":139350,"language":126523,"meta":71,"style":71},[73,139419,139420,139426,139438,139450,139476],{"__ignoreMap":71},[76,139421,139422,139424],{"class":78,"line":79},[76,139423,134278],{"class":1927},[76,139425,15539],{"class":86},[76,139427,139428,139430,139432,139434,139436],{"class":78,"line":96},[76,139429,70537],{"class":136},[76,139431,51406],{"class":86},[76,139433,788],{"class":136},[76,139435,51461],{"class":82},[76,139437,1254],{"class":86},[76,139439,139440,139442,139444,139446,139448],{"class":78,"line":1143},[76,139441,70757],{"class":136},[76,139443,51406],{"class":86},[76,139445,788],{"class":136},[76,139447,51461],{"class":82},[76,139449,1254],{"class":86},[76,139451,139452,139454,139456,139458,139460,139462,139464,139466,139468,139470,139472,139474],{"class":78,"line":1158},[76,139453,70580],{"class":136},[76,139455,51406],{"class":86},[76,139457,61695],{"class":136},[76,139459,87],{"class":86},[76,139461,134317],{"class":5183},[76,139463,13681],{"class":86},[76,139465,61705],{"class":136},[76,139467,139401],{"class":136},[76,139469,51461],{"class":82},[76,139471,134336],{"class":136},[76,139473,51461],{"class":82},[76,139475,1254],{"class":86},[76,139477,139478],{"class":78,"line":1164},[76,139479,1529],{"class":86},[21,139481,139482],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1095,139484,139485,139488,139494,139500,139512],{},[32,139486,139487],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[32,139489,139490,139491,120206],{},"里面的布局利用 自定义列表来实现（",[73,139492,139493],{},"dl > dt + dd",[32,139495,139021,139496,139499],{},[73,139497,139498],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[32,139501,139021,139502,139505,139506,18377,139508,139511],{},[73,139503,139504],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[73,139507,139504],{},[73,139509,139510],{},"dd","之间有些距离",[32,139513,139514],{},"最后一个 dl 结构和样式不一样，需要单独设置",[21,139516,138360],{},[66,139518,139519],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,139520,139521,139527,139539],{"__ignoreMap":71},[76,139522,139523,139525],{"class":78,"line":79},[76,139524,51580],{"class":51269},[76,139526,15539],{"class":86},[76,139528,139529,139531,139533,139535,139537],{"class":78,"line":96},[76,139530,70439],{"class":136},[76,139532,51406],{"class":86},[76,139534,279],{"class":136},[76,139536,51525],{"class":136},[76,139538,1254],{"class":86},[76,139540,139541],{"class":78,"line":1143},[76,139542,1529],{"class":86},[21,139544,138400],{},[66,139546,139547],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,139548,139549,139555,139567],{"__ignoreMap":71},[76,139550,139551,139553],{"class":78,"line":79},[76,139552,51580],{"class":51269},[76,139554,15539],{"class":86},[76,139556,139557,139559,139561,139563,139565],{"class":78,"line":96},[76,139558,70439],{"class":136},[76,139560,51406],{"class":86},[76,139562,279],{"class":136},[76,139564,51525],{"class":136},[76,139566,1254],{"class":86},[76,139568,139569],{"class":78,"line":1143},[76,139570,1529],{"class":86},[21,139572,139573],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1095,139575,139576,139585,139588,139599],{},[32,139577,139578,139579,139581,139582,139584],{},"分为上下两块，上面是 ",[73,139580,131741],{}," 友情链接，下面是 ",[73,139583,131734],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[32,139586,139587],{},"把内容分别复制到相应模块中",[32,139589,139021,139590,139592,139593,139595,139596,139598],{},[73,139591,131741],{}," 设置 15px 的下外边距，给",[73,139594,131741],{}," 里面 的 ",[73,139597,326],{}," 标签设置 左右 3px 的外边距",[32,139600,139601,139602,139604],{},"给",[73,139603,131734],{}," 设置 20px 的行高",[21,139606,138360],{},[66,139608,139609],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,139610,139611,139617,139629],{"__ignoreMap":71},[76,139612,139613,139615],{"class":78,"line":79},[76,139614,51580],{"class":51269},[76,139616,15539],{"class":86},[76,139618,139619,139621,139623,139625,139627],{"class":78,"line":96},[76,139620,70439],{"class":136},[76,139622,51406],{"class":86},[76,139624,279],{"class":136},[76,139626,51525],{"class":136},[76,139628,1254],{"class":86},[76,139630,139631],{"class":78,"line":1143},[76,139632,1529],{"class":86},[21,139634,138400],{},[66,139636,139637],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,139638,139639,139645,139657],{"__ignoreMap":71},[76,139640,139641,139643],{"class":78,"line":79},[76,139642,51580],{"class":51269},[76,139644,15539],{"class":86},[76,139646,139647,139649,139651,139653,139655],{"class":78,"line":96},[76,139648,70439],{"class":136},[76,139650,51406],{"class":86},[76,139652,279],{"class":136},[76,139654,51525],{"class":136},[76,139656,1254],{"class":86},[76,139658,139659],{"class":78,"line":1143},[76,139660,1529],{"class":86},[21,139662,139663],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5092,139665,139666],{},"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":71,"searchDepth":96,"depth":96,"links":139668},[139669,139670,139671,139678],{"id":137949,"depth":96,"text":137950},{"id":137968,"depth":96,"text":137969},{"id":137995,"depth":96,"text":137996,"children":139672},[139673,139674,139675,139676,139677],{"id":137999,"depth":1143,"text":138000},{"id":138012,"depth":1143,"text":138013},{"id":138036,"depth":1143,"text":138037},{"id":138058,"depth":1143,"text":138059},{"id":138130,"depth":1143,"text":138131},{"id":138256,"depth":96,"text":138257,"children":139679},[139680,139681,139682,139683,139685],{"id":138260,"depth":1143,"text":138261},{"id":138267,"depth":1143,"text":138268},{"id":138439,"depth":1143,"text":138440},{"id":138980,"depth":1143,"text":139684},"15.4.4 nav导航模块制作",{"id":139278,"depth":1143,"text":139279},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137941,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139692,"title":139693,"body":139694,"description":23344,"extension":5123,"meta":142096,"navigation":2364,"path":142097,"seo":142098,"stem":142099,"__hash__":142100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":9,"value":139695,"toc":142073},[139696,139699,139703,139707,139719,139722,139725,139728,139739,139741,139765,139767,139791,139796,139799,139801,139837,139839,139875,139878,139883,139886,139889,139892,139922,139929,139932,139942,139944,139978,139981,140015,140021,140038,140040,140076,140078,140114,140119,140144,140146,140172,140174,140198,140205,140208,140272,140274,140316,140318,140358,140365,140370,140372,140402,140404,140434,140438,140441,140448,140460,140462,140488,140490,140514,140517,140519,140543,140549,140559,140561,140591,140593,140623,140630,140671,140673,140709,140711,140747,140751,140754,140757,140760,140766,140771,140774,140797,140800,140824,140827,140851,140856,140859,140862,140865,140868,140871,140945,140947,140977,140979,141009,141012,141015,141047,141051,141055,141069,141078,141081,141086,141088,141182,141184,141278,141301,141303,141327,141329,141353,141360,141363,141373,141375,141399,141404,141412,141414,141444,141449,141489,141491,141517,141519,141545,141549,141552,141557,141560,141564,141572,141579,141587,141589,141619,141621,141651,141659,141662,141665,141667,141697,141699,141729,141732,141737,141739,141763,141765,141789,141792,141877,141879,141903,141905,141929,141933,141935,141959,141961,141995,141999,142013,142016,142021,142024,142029,142032,142062,142070],[12,139697,139693],{"id":139698},"_16-品优购项目下篇-主体与页面开发",[16,139700,139702],{"id":139701},"_161-项目主体模块制作","16.1 项目主体模块制作",[46,139704,139706],{"id":139705},"_1611-首页制作","16.1.1 首页制作",[21,139708,139709,139711,139712,139714,139715,139718],{},[237,139710,102027],{}," 主体模块是 ",[237,139713,74027],{}," 里面专有的，注意需要新的样式文件 ",[237,139716,139717],{},"index.css，"," 就不要写在common.css中了",[1426,139720],{"style":126377,"src":139721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1426,139723],{"style":126377,"src":139724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[21,139726,139727],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1095,139729,139730,139733,139736],{},[32,139731,139732],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[32,139734,139735],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[32,139737,139738],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[21,139740,138360],{},[66,139742,139743],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,139744,139745,139751,139761],{"__ignoreMap":71},[76,139746,139747,139749],{"class":78,"line":79},[76,139748,130369],{"class":1927},[76,139750,15539],{"class":86},[76,139752,139753,139755,139757,139759],{"class":78,"line":96},[76,139754,131001],{"class":136},[76,139756,51406],{"class":86},[76,139758,23704],{"class":136},[76,139760,1254],{"class":86},[76,139762,139763],{"class":78,"line":1143},[76,139764,1529],{"class":86},[21,139766,138400],{},[66,139768,139769],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,139770,139771,139777,139787],{"__ignoreMap":71},[76,139772,139773,139775],{"class":78,"line":79},[76,139774,130369],{"class":1927},[76,139776,15539],{"class":86},[76,139778,139779,139781,139783,139785],{"class":78,"line":96},[76,139780,131001],{"class":136},[76,139782,51406],{"class":86},[76,139784,23704],{"class":136},[76,139786,1254],{"class":86},[76,139788,139789],{"class":78,"line":1143},[76,139790,1529],{"class":86},[29,139792,139793],{},[32,139794,139795],{},"左侧focus模块制作",[1426,139797],{"style":126377,"src":139798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[21,139800,138360],{},[66,139802,139803],{"className":126521,"code":127844,"language":126523,"meta":71,"style":71},[73,139804,139805,139813,139823,139833],{"__ignoreMap":71},[76,139806,139807,139809,139811],{"class":78,"line":79},[76,139808,53790],{"class":51269},[76,139810,61869],{"class":1927},[76,139812,15539],{"class":86},[76,139814,139815,139817,139819,139821],{"class":78,"line":96},[76,139816,127859],{"class":136},[76,139818,51406],{"class":86},[76,139820,54858],{"class":136},[76,139822,1254],{"class":86},[76,139824,139825,139827,139829,139831],{"class":78,"line":1143},[76,139826,70767],{"class":136},[76,139828,51406],{"class":86},[76,139830,54706],{"class":136},[76,139832,1254],{"class":86},[76,139834,139835],{"class":78,"line":1158},[76,139836,1529],{"class":86},[21,139838,138400],{},[66,139840,139841],{"className":126521,"code":127844,"language":126523,"meta":71,"style":71},[73,139842,139843,139851,139861,139871],{"__ignoreMap":71},[76,139844,139845,139847,139849],{"class":78,"line":79},[76,139846,53790],{"class":51269},[76,139848,61869],{"class":1927},[76,139850,15539],{"class":86},[76,139852,139853,139855,139857,139859],{"class":78,"line":96},[76,139854,127859],{"class":136},[76,139856,51406],{"class":86},[76,139858,54858],{"class":136},[76,139860,1254],{"class":86},[76,139862,139863,139865,139867,139869],{"class":78,"line":1143},[76,139864,70767],{"class":136},[76,139866,51406],{"class":86},[76,139868,54706],{"class":136},[76,139870,1254],{"class":86},[76,139872,139873],{"class":78,"line":1158},[76,139874,1529],{"class":86},[21,139876,139877],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[29,139879,139880],{"start":96},[32,139881,139882],{},"右侧newsflash模块制作",[1426,139884],{"style":126377,"src":139885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[21,139887,139888],{},"右侧的模块 分为上中下三个盒子",[21,139890,139891],{},"结构代码：",[66,139893,139894],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,139895,139896],{"__ignoreMap":71},[76,139897,139898,139900,139902,139904,139906,139908,139910,139912,139914,139916,139918,139920],{"class":78,"line":79},[76,139899,998],{"class":86},[76,139901,1426],{"class":51269},[76,139903,55208],{"class":1927},[76,139905,133],{"class":86},[76,139907,134038],{"class":192},[76,139909,55216],{"class":1927},[76,139911,133],{"class":86},[76,139913,134045],{"class":192},[76,139915,134048],{"class":1927},[76,139917,133],{"class":86},[76,139919,134053],{"class":192},[76,139921,51276],{"class":86},[21,139923,139924,139925,139928],{},"1 号盒子为 ",[73,139926,139927],{},"news"," 新闻模块 高度为 165px",[1426,139930],{"style":126377,"src":139931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[21,139933,139934,139935,139938,139939],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[73,139936,139937],{},"news-hd","，下面是 ",[73,139940,139941],{},"news-bd",[21,139943,139891],{},[66,139945,139946],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,139947,139948,139952,139966,139970],{"__ignoreMap":71},[76,139949,139950],{"class":78,"line":79},[76,139951,130632],{"class":146},[76,139953,139954,139956,139958,139960,139962,139964],{"class":78,"line":96},[76,139955,998],{"class":86},[76,139957,51580],{"class":51269},[76,139959,53455],{"class":1927},[76,139961,133],{"class":86},[76,139963,130645],{"class":192},[76,139965,51276],{"class":86},[76,139967,139968],{"class":78,"line":1143},[76,139969,130652],{"class":86},[76,139971,139972,139974,139976],{"class":78,"line":1158},[76,139973,51754],{"class":86},[76,139975,51580],{"class":51269},[76,139977,51276],{"class":86},[21,139979,139980],{},"样式代码：",[66,139982,139983],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,139984,139985,139989,140003,140007],{"__ignoreMap":71},[76,139986,139987],{"class":78,"line":79},[76,139988,130632],{"class":146},[76,139990,139991,139993,139995,139997,139999,140001],{"class":78,"line":96},[76,139992,998],{"class":86},[76,139994,51580],{"class":51269},[76,139996,53455],{"class":1927},[76,139998,133],{"class":86},[76,140000,130645],{"class":192},[76,140002,51276],{"class":86},[76,140004,140005],{"class":78,"line":1143},[76,140006,130652],{"class":86},[76,140008,140009,140011,140013],{"class":78,"line":1158},[76,140010,51754],{"class":86},[76,140012,51580],{"class":51269},[76,140014,51276],{"class":86},[21,140016,140017,140018,140020],{},"上面是",[73,140019,139937],{},"，设置高度是 33px，设置下边框",[1095,140022,140023,140029],{},[32,140024,140025,140026,140028],{},"里面放一个",[73,140027,22877],{}," 标题",[32,140030,140031,140032,140034,140035,140037],{},"放一个a",[73,140033,102662],{},"，内容是 更多，然后让 ",[73,140036,326],{}," 进行右浮动，三角用伪元素设置字体图标就好",[21,140039,139891],{},[66,140041,140042],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,140043,140044,140052,140062,140072],{"__ignoreMap":71},[76,140045,140046,140048,140050],{"class":78,"line":79},[76,140047,51580],{"class":51269},[76,140049,137522],{"class":1927},[76,140051,15539],{"class":86},[76,140053,140054,140056,140058,140060],{"class":78,"line":96},[76,140055,137529],{"class":136},[76,140057,51406],{"class":86},[76,140059,7619],{"class":192},[76,140061,1254],{"class":86},[76,140063,140064,140066,140068,140070],{"class":78,"line":1143},[76,140065,128137],{"class":136},[76,140067,51406],{"class":86},[76,140069,60838],{"class":136},[76,140071,1254],{"class":86},[76,140073,140074],{"class":78,"line":1158},[76,140075,1529],{"class":86},[21,140077,139980],{},[66,140079,140080],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,140081,140082,140090,140100,140110],{"__ignoreMap":71},[76,140083,140084,140086,140088],{"class":78,"line":79},[76,140085,51580],{"class":51269},[76,140087,137522],{"class":1927},[76,140089,15539],{"class":86},[76,140091,140092,140094,140096,140098],{"class":78,"line":96},[76,140093,137529],{"class":136},[76,140095,51406],{"class":86},[76,140097,7619],{"class":192},[76,140099,1254],{"class":86},[76,140101,140102,140104,140106,140108],{"class":78,"line":1143},[76,140103,128137],{"class":136},[76,140105,51406],{"class":86},[76,140107,60838],{"class":136},[76,140109,1254],{"class":86},[76,140111,140112],{"class":78,"line":1158},[76,140113,1529],{"class":86},[21,140115,140116,140117],{},"下面是",[73,140118,139941],{},[1095,140120,140121,140129],{},[32,140122,140123,140124,100987,140126,140128],{},"里面包含 ",[73,140125,1095],{},[73,140127,32],{}," 还有链接",[32,140130,139601,140131,140133,140134,140136,140137,140140,140141],{},[73,140132,32],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[73,140135,131187],{}," 2.设置 ",[73,140138,140139],{},"white-space: nowrap;"," 3. 设置 ",[73,140142,140143],{},"text-overflow: ellipsis;",[21,140145,139891],{},[66,140147,140149],{"className":126521,"code":140148,"language":126523,"meta":71,"style":71},"div {\n  overflow: hidden;\n}\n",[73,140150,140151,140157,140168],{"__ignoreMap":71},[76,140152,140153,140155],{"class":78,"line":79},[76,140154,51580],{"class":51269},[76,140156,15539],{"class":86},[76,140158,140159,140162,140164,140166],{"class":78,"line":96},[76,140160,140161],{"class":136},"  overflow",[76,140163,51406],{"class":86},[76,140165,61683],{"class":136},[76,140167,1254],{"class":86},[76,140169,140170],{"class":78,"line":1143},[76,140171,1529],{"class":86},[21,140173,139980],{},[66,140175,140176],{"className":126521,"code":140148,"language":126523,"meta":71,"style":71},[73,140177,140178,140184,140194],{"__ignoreMap":71},[76,140179,140180,140182],{"class":78,"line":79},[76,140181,51580],{"class":51269},[76,140183,15539],{"class":86},[76,140185,140186,140188,140190,140192],{"class":78,"line":96},[76,140187,140161],{"class":136},[76,140189,51406],{"class":86},[76,140191,61683],{"class":136},[76,140193,1254],{"class":86},[76,140195,140196],{"class":78,"line":1143},[76,140197,1529],{"class":86},[21,140199,140200,140201,140204],{},"2 号盒子为 ",[73,140202,140203],{},"lifeservice"," 生活服务模块 高度为 209px",[1426,140206],{"style":126377,"src":140207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1095,140209,140210,140213,140223,140247,140258],{},[32,140211,140212],{},"设置边框（左右下边框）",[32,140214,140215,140216,140219,140220,140222],{},"里面的内容 是 ",[73,140217,140218],{},"ul > 12*li","，给",[73,140221,32],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[32,140224,140225,140226],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1095,140227,140228,140233,140242],{},[32,140229,140230,140232],{},[73,140231,140203],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[32,140234,140235,140236,140238,140239,140241],{},"可以让 ",[73,140237,140203],{}," 里面的 ",[73,140240,1095],{}," 宽度为 252，就可以装的下 4 个 小 li",[32,140243,140244,140246],{},[73,140245,140203],{}," 盒子 overflow 隐藏多余的部分就可以了",[32,140248,116436,140249,140251,140252,140254,140255,140257],{},[73,140250,32],{}," 里面放一个 ",[73,140253,529],{},"（里面放图标），下面的文本用 ",[73,140256,21],{}," 标签包裹",[32,140259,139021,140260,140262,140263,140265,140266,139055,140268,140271],{},[73,140261,529],{}," 设置 24px宽和28px的高（注意 ",[73,140264,529],{}," 是行内元素， 转成行内块），给 ",[73,140267,32],{},[73,140269,140270],{},"text-align:center"," 让里面内容居中显示",[21,140273,139891],{},[66,140275,140277],{"className":126521,"code":140276,"language":126523,"meta":71,"style":71},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[73,140278,140279,140297,140302,140312],{"__ignoreMap":71},[76,140280,140281,140283,140285,140287,140289,140291,140293,140295],{"class":78,"line":79},[76,140282,76],{"class":51269},[76,140284,12402],{"class":86},[76,140286,326],{"class":51269},[76,140288,12402],{"class":86},[76,140290,23521],{"class":51269},[76,140292,12402],{"class":86},[76,140294,237],{"class":51269},[76,140296,15539],{"class":86},[76,140298,140299],{"class":78,"line":96},[76,140300,140301],{"class":146},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[76,140303,140304,140306,140308,140310],{"class":78,"line":1143},[76,140305,128137],{"class":136},[76,140307,51406],{"class":86},[76,140309,128199],{"class":136},[76,140311,1254],{"class":86},[76,140313,140314],{"class":78,"line":1158},[76,140315,1529],{"class":86},[21,140317,139980],{},[66,140319,140320],{"className":126521,"code":140276,"language":126523,"meta":71,"style":71},[73,140321,140322,140340,140344,140354],{"__ignoreMap":71},[76,140323,140324,140326,140328,140330,140332,140334,140336,140338],{"class":78,"line":79},[76,140325,76],{"class":51269},[76,140327,12402],{"class":86},[76,140329,326],{"class":51269},[76,140331,12402],{"class":86},[76,140333,23521],{"class":51269},[76,140335,12402],{"class":86},[76,140337,237],{"class":51269},[76,140339,15539],{"class":86},[76,140341,140342],{"class":78,"line":96},[76,140343,140301],{"class":146},[76,140345,140346,140348,140350,140352],{"class":78,"line":1143},[76,140347,128137],{"class":136},[76,140349,51406],{"class":86},[76,140351,128199],{"class":136},[76,140353,1254],{"class":86},[76,140355,140356],{"class":78,"line":1158},[76,140357,1529],{"class":86},[21,140359,140360,140361,140364],{},"3 号盒子为 ",[73,140362,140363],{},"bargain"," 特价商品",[1095,140366,140367],{},[32,140368,140369],{},"这个比较简单，直接插入一张图片即可",[21,140371,139891],{},[66,140373,140374],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,140375,140376],{"__ignoreMap":71},[76,140377,140378,140380,140382,140384,140386,140388,140390,140392,140394,140396,140398,140400],{"class":78,"line":79},[76,140379,998],{"class":86},[76,140381,1426],{"class":51269},[76,140383,55208],{"class":1927},[76,140385,133],{"class":86},[76,140387,134038],{"class":192},[76,140389,55216],{"class":1927},[76,140391,133],{"class":86},[76,140393,134045],{"class":192},[76,140395,134048],{"class":1927},[76,140397,133],{"class":86},[76,140399,134053],{"class":192},[76,140401,51276],{"class":86},[21,140403,139980],{},[66,140405,140406],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,140407,140408],{"__ignoreMap":71},[76,140409,140410,140412,140414,140416,140418,140420,140422,140424,140426,140428,140430,140432],{"class":78,"line":79},[76,140411,998],{"class":86},[76,140413,1426],{"class":51269},[76,140415,55208],{"class":1927},[76,140417,133],{"class":86},[76,140419,134038],{"class":192},[76,140421,55216],{"class":1927},[76,140423,133],{"class":86},[76,140425,134045],{"class":192},[76,140427,134048],{"class":1927},[76,140429,133],{"class":86},[76,140431,134053],{"class":192},[76,140433,51276],{"class":86},[46,140435,140437],{"id":140436},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1426,140439],{"style":126377,"src":140440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[21,140442,140443,140444,140447],{},"大盒子 ",[73,140445,140446],{},"recom"," 推荐模块 recommend",[1095,140449,140450],{},[32,140451,140452,140453,140455,140456,140459],{},"给这个 ",[73,140454,140446],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[73,140457,140458],{},"#ebebeb","），设置距离上边 12px",[21,140461,139891],{},[66,140463,140465],{"className":126521,"code":140464,"language":126523,"meta":71,"style":71},"div {\n  background-color: #f0f0f0;\n}\n",[73,140466,140467,140473,140484],{"__ignoreMap":71},[76,140468,140469,140471],{"class":78,"line":79},[76,140470,51580],{"class":51269},[76,140472,15539],{"class":86},[76,140474,140475,140477,140479,140482],{"class":78,"line":96},[76,140476,70847],{"class":136},[76,140478,51406],{"class":86},[76,140480,140481],{"class":136},"#f0f0f0",[76,140483,1254],{"class":86},[76,140485,140486],{"class":78,"line":1143},[76,140487,1529],{"class":86},[21,140489,139980],{},[66,140491,140492],{"className":126521,"code":140464,"language":126523,"meta":71,"style":71},[73,140493,140494,140500,140510],{"__ignoreMap":71},[76,140495,140496,140498],{"class":78,"line":79},[76,140497,51580],{"class":51269},[76,140499,15539],{"class":86},[76,140501,140502,140504,140506,140508],{"class":78,"line":96},[76,140503,70847],{"class":136},[76,140505,51406],{"class":86},[76,140507,140481],{"class":136},[76,140509,1254],{"class":86},[76,140511,140512],{"class":78,"line":1143},[76,140513,1529],{"class":86},[21,140515,140516],{},"里面包含 2 个盒子， 浮动即可",[21,140518,139891],{},[66,140520,140521],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,140522,140523,140529,140539],{"__ignoreMap":71},[76,140524,140525,140527],{"class":78,"line":79},[76,140526,130369],{"class":1927},[76,140528,15539],{"class":86},[76,140530,140531,140533,140535,140537],{"class":78,"line":96},[76,140532,131001],{"class":136},[76,140534,51406],{"class":86},[76,140536,23704],{"class":136},[76,140538,1254],{"class":86},[76,140540,140541],{"class":78,"line":1143},[76,140542,1529],{"class":86},[21,140544,140545,140546],{},"1 号盒子 ",[73,140547,140548],{},"recom_hd",[1095,140550,140551,140554],{},[32,140552,140553],{},"设置宽度205px，高度163px",[32,140555,140025,140556,140558],{},[73,140557,1426],{},"标签，插入图片即可",[21,140560,139891],{},[66,140562,140563],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,140564,140565],{"__ignoreMap":71},[76,140566,140567,140569,140571,140573,140575,140577,140579,140581,140583,140585,140587,140589],{"class":78,"line":79},[76,140568,998],{"class":86},[76,140570,1426],{"class":51269},[76,140572,55208],{"class":1927},[76,140574,133],{"class":86},[76,140576,134038],{"class":192},[76,140578,55216],{"class":1927},[76,140580,133],{"class":86},[76,140582,134045],{"class":192},[76,140584,134048],{"class":1927},[76,140586,133],{"class":86},[76,140588,134053],{"class":192},[76,140590,51276],{"class":86},[21,140592,139980],{},[66,140594,140595],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,140596,140597],{"__ignoreMap":71},[76,140598,140599,140601,140603,140605,140607,140609,140611,140613,140615,140617,140619,140621],{"class":78,"line":79},[76,140600,998],{"class":86},[76,140602,1426],{"class":51269},[76,140604,55208],{"class":1927},[76,140606,133],{"class":86},[76,140608,134038],{"class":192},[76,140610,55216],{"class":1927},[76,140612,133],{"class":86},[76,140614,134045],{"class":192},[76,140616,134048],{"class":1927},[76,140618,133],{"class":86},[76,140620,134053],{"class":192},[76,140622,51276],{"class":86},[21,140624,140625,140626,140629],{},"2 号盒子 ",[73,140627,140628],{},"recom_bd"," ，注意里面的小竖线",[1095,140631,140632,140643,140646,140651,140656],{},[32,140633,140634,140635,140637,140638,140640,140641],{},"右侧结构里面放 ",[73,140636,1095],{}," 包含 4个 ",[73,140639,32],{},"，每个li里面包含一个",[73,140642,1426],{},[32,140644,140645],{},"直接利用切片工具把里面的内容当成一张图片",[32,140647,139021,140648,140650],{},[73,140649,32],{}," 设置浮动",[32,140652,139021,140653,140655],{},[73,140654,1426],{}," 设置宽高，宽度 248px，高度 163px",[32,140657,140658,140659,140219,140662,140664,140665,140667,140668],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[73,140660,140661],{},"top 10px",[73,140663,32],{},"设置相对定位（注意，最后一个",[73,140666,32],{},"不用设置伪元素），可以利用 ",[73,140669,140670],{},"nth-child(-n+3){...}",[21,140672,139891],{},[66,140674,140675],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,140676,140677,140685,140695,140705],{"__ignoreMap":71},[76,140678,140679,140681,140683],{"class":78,"line":79},[76,140680,51580],{"class":51269},[76,140682,137522],{"class":1927},[76,140684,15539],{"class":86},[76,140686,140687,140689,140691,140693],{"class":78,"line":96},[76,140688,137529],{"class":136},[76,140690,51406],{"class":86},[76,140692,7619],{"class":192},[76,140694,1254],{"class":86},[76,140696,140697,140699,140701,140703],{"class":78,"line":1143},[76,140698,128137],{"class":136},[76,140700,51406],{"class":86},[76,140702,60838],{"class":136},[76,140704,1254],{"class":86},[76,140706,140707],{"class":78,"line":1158},[76,140708,1529],{"class":86},[21,140710,139980],{},[66,140712,140713],{"className":126521,"code":138363,"language":126523,"meta":71,"style":71},[73,140714,140715,140723,140733,140743],{"__ignoreMap":71},[76,140716,140717,140719,140721],{"class":78,"line":79},[76,140718,51580],{"class":51269},[76,140720,137522],{"class":1927},[76,140722,15539],{"class":86},[76,140724,140725,140727,140729,140731],{"class":78,"line":96},[76,140726,137529],{"class":136},[76,140728,51406],{"class":86},[76,140730,7619],{"class":192},[76,140732,1254],{"class":86},[76,140734,140735,140737,140739,140741],{"class":78,"line":1143},[76,140736,128137],{"class":136},[76,140738,51406],{"class":86},[76,140740,60838],{"class":136},[76,140742,1254],{"class":86},[76,140744,140745],{"class":78,"line":1158},[76,140746,1529],{"class":86},[46,140748,140750],{"id":140749},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1426,140752],{"style":126377,"src":140753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[21,140755,140756],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[21,140758,140759],{},"第一楼是家用电器模块： 里面包含两个盒子",[21,140761,140762,140765],{},[73,140763,140764],{},"box_hd"," 制作",[21,140767,140545,140768,140770],{},[73,140769,140764],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1426,140772],{"style":126377,"src":140773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1095,140775,140776,140781,140786,140789],{},[32,140777,140778,140780],{},[73,140779,140764],{}," 给 30px 的高度，2个像素的下边框",[32,140782,140783,140784],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[73,140785,139032],{},[32,140787,140788],{},"左侧盒左浮动，右侧盒子右浮动",[32,140790,140791,140793,140794,140796],{},[73,140792,326],{},"标签之间的距离用左右的",[73,140795,30852],{},"撑开即可",[21,140798,140799],{},"结构代码",[66,140801,140802],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,140803,140804,140810,140820],{"__ignoreMap":71},[76,140805,140806,140808],{"class":78,"line":79},[76,140807,130369],{"class":1927},[76,140809,15539],{"class":86},[76,140811,140812,140814,140816,140818],{"class":78,"line":96},[76,140813,131001],{"class":136},[76,140815,51406],{"class":86},[76,140817,23704],{"class":136},[76,140819,1254],{"class":86},[76,140821,140822],{"class":78,"line":1143},[76,140823,1529],{"class":86},[21,140825,140826],{},"样式代码",[66,140828,140829],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,140830,140831,140837,140847],{"__ignoreMap":71},[76,140832,140833,140835],{"class":78,"line":79},[76,140834,130369],{"class":1927},[76,140836,15539],{"class":86},[76,140838,140839,140841,140843,140845],{"class":78,"line":96},[76,140840,131001],{"class":136},[76,140842,51406],{"class":86},[76,140844,23704],{"class":136},[76,140846,1254],{"class":86},[76,140848,140849],{"class":78,"line":1143},[76,140850,1529],{"class":86},[21,140852,140853,140765],{},[73,140854,140855],{},"box_bd",[21,140857,140858],{},"2 号盒子 box_bd，不要给高度",[1426,140860],{"style":126377,"src":140861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[21,140863,140864],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[21,140866,140867],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[21,140869,140870],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1095,140872,140873,140885,140901],{},[32,140874,140875,140877,140878,140881,140882,140884],{},[73,140876,140855],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[73,140879,140880],{},"tab_content","，在",[73,140883,140880],{}," 里面包裹tab选项卡对应的内容",[32,140886,140887,140888,140891,140892,140894,140895,140897,140898,140900],{},"内容被一个大盒子包裹（",[73,140889,140890],{},"tab_list_item","），里面是 ",[73,140893,1095],{}," 包裹 5个 ",[73,140896,32],{},"，每个",[73,140899,32],{},"设置对应的宽度，然后设置浮动",[32,140902,140903,140904,140906,140907,140909,140910],{},"而这5个",[73,140905,32],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[73,140908,32],{},"设置",[1095,140911,140912,140930,140933],{},[32,140913,140914,140915,140917,140918,140920,140921,140923,140924,140926,140927,140929],{},"第一个小 ",[73,140916,32],{}," 分为上下结构，上面是 ",[73,140919,1095],{}," 包裹 ",[73,140922,32],{}," ，",[73,140925,32],{},"里面包裹 ",[73,140928,326],{},"，下面插入一张图片",[32,140931,140932],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[32,140934,140935,140936,140938,140939,140941,140942,140944],{},"后面的小 ",[73,140937,32],{}," 里面先放一个",[73,140940,326],{},"标签，然后在",[73,140943,326],{},"标签里面插入图片即可",[21,140946,140799],{},[66,140948,140949],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,140950,140951],{"__ignoreMap":71},[76,140952,140953,140955,140957,140959,140961,140963,140965,140967,140969,140971,140973,140975],{"class":78,"line":79},[76,140954,998],{"class":86},[76,140956,1426],{"class":51269},[76,140958,55208],{"class":1927},[76,140960,133],{"class":86},[76,140962,134038],{"class":192},[76,140964,55216],{"class":1927},[76,140966,133],{"class":86},[76,140968,134045],{"class":192},[76,140970,134048],{"class":1927},[76,140972,133],{"class":86},[76,140974,134053],{"class":192},[76,140976,51276],{"class":86},[21,140978,140826],{},[66,140980,140981],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,140982,140983],{"__ignoreMap":71},[76,140984,140985,140987,140989,140991,140993,140995,140997,140999,141001,141003,141005,141007],{"class":78,"line":79},[76,140986,998],{"class":86},[76,140988,1426],{"class":51269},[76,140990,55208],{"class":1927},[76,140992,133],{"class":86},[76,140994,134038],{"class":192},[76,140996,55216],{"class":1927},[76,140998,133],{"class":86},[76,141000,134045],{"class":192},[76,141002,134048],{"class":1927},[76,141004,133],{"class":86},[76,141006,134053],{"class":192},[76,141008,51276],{"class":86},[21,141010,141011],{},"tab栏切换需求！！！！！！介绍：",[1426,141013],{"style":126377,"src":141014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1095,141016,141017,141025,141031,141034],{},[32,141018,141019,141022,141023],{},[73,141020,141021],{},"tab","栏的布局是 ",[73,141024,139032],{},[32,141026,141027,141028,141030],{},"有多少个",[73,141029,141021],{},"选项卡，那么对应就有多少个内容",[32,141032,141033],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[32,141035,141036,141037,141040,141041,141043,141044,141046],{},"等后面我们学习了",[73,141038,141039],{},"js","之后，我们就会配合",[73,141042,141039],{},"来实现，",[73,141045,141021],{},"栏的切换",[16,141048,141050],{"id":141049},"_162-列表制作","16.2 列表制作",[46,141052,141054],{"id":141053},"_1621-准备工作","16.2.1 准备工作",[1095,141056,141057,141060,141063,141066],{},[32,141058,141059],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[32,141061,141062],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[32,141064,141065],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[32,141067,141068],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[46,141070,141072,141073,100987,141075,141077],{"id":141071},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[73,141074,131526],{},[73,141076,53682],{}," 修改",[1426,141079],{"style":126377,"src":141080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1095,141082,141083],{},[32,141084,141085],{},"秒杀盒子 sk（ second kill ） 定位即可",[21,141087,139891],{},[66,141089,141090],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,141091,141092,141096,141110,141114,141128,141132,141146,141150,141164,141168],{"__ignoreMap":71},[76,141093,141094],{"class":78,"line":79},[76,141095,131960],{"class":146},[76,141097,141098,141100,141102,141104,141106,141108],{"class":78,"line":96},[76,141099,131965],{"class":1927},[76,141101,79776],{"class":86},[76,141103,128881],{"class":136},[76,141105,51406],{"class":86},[76,141107,131974],{"class":136},[76,141109,129451],{"class":86},[76,141111,141112],{"class":78,"line":1143},[76,141113,131981],{"class":146},[76,141115,141116,141118,141120,141122,141124,141126],{"class":78,"line":1158},[76,141117,131986],{"class":1927},[76,141119,79776],{"class":86},[76,141121,128881],{"class":136},[76,141123,51406],{"class":86},[76,141125,54733],{"class":136},[76,141127,129451],{"class":86},[76,141129,141130],{"class":78,"line":1164},[76,141131,132001],{"class":146},[76,141133,141134,141136,141138,141140,141142,141144],{"class":78,"line":1178},[76,141135,132006],{"class":1927},[76,141137,79776],{"class":86},[76,141139,128881],{"class":136},[76,141141,51406],{"class":86},[76,141143,54800],{"class":136},[76,141145,129451],{"class":86},[76,141147,141148],{"class":78,"line":1184},[76,141149,132021],{"class":146},[76,141151,141152,141154,141156,141158,141160,141162],{"class":78,"line":1275},[76,141153,132026],{"class":1927},[76,141155,79776],{"class":86},[76,141157,128881],{"class":136},[76,141159,51406],{"class":86},[76,141161,86202],{"class":136},[76,141163,129451],{"class":86},[76,141165,141166],{"class":78,"line":1281},[76,141167,132041],{"class":146},[76,141169,141170,141172,141174,141176,141178,141180],{"class":78,"line":1293},[76,141171,132046],{"class":1927},[76,141173,79776],{"class":86},[76,141175,128881],{"class":136},[76,141177,51406],{"class":86},[76,141179,132055],{"class":136},[76,141181,129451],{"class":86},[21,141183,139980],{},[66,141185,141186],{"className":126521,"code":131953,"language":126523,"meta":71,"style":71},[73,141187,141188,141192,141206,141210,141224,141228,141242,141246,141260,141264],{"__ignoreMap":71},[76,141189,141190],{"class":78,"line":79},[76,141191,131960],{"class":146},[76,141193,141194,141196,141198,141200,141202,141204],{"class":78,"line":96},[76,141195,131965],{"class":1927},[76,141197,79776],{"class":86},[76,141199,128881],{"class":136},[76,141201,51406],{"class":86},[76,141203,131974],{"class":136},[76,141205,129451],{"class":86},[76,141207,141208],{"class":78,"line":1143},[76,141209,131981],{"class":146},[76,141211,141212,141214,141216,141218,141220,141222],{"class":78,"line":1158},[76,141213,131986],{"class":1927},[76,141215,79776],{"class":86},[76,141217,128881],{"class":136},[76,141219,51406],{"class":86},[76,141221,54733],{"class":136},[76,141223,129451],{"class":86},[76,141225,141226],{"class":78,"line":1164},[76,141227,132001],{"class":146},[76,141229,141230,141232,141234,141236,141238,141240],{"class":78,"line":1178},[76,141231,132006],{"class":1927},[76,141233,79776],{"class":86},[76,141235,128881],{"class":136},[76,141237,51406],{"class":86},[76,141239,54800],{"class":136},[76,141241,129451],{"class":86},[76,141243,141244],{"class":78,"line":1184},[76,141245,132021],{"class":146},[76,141247,141248,141250,141252,141254,141256,141258],{"class":78,"line":1275},[76,141249,132026],{"class":1927},[76,141251,79776],{"class":86},[76,141253,128881],{"class":136},[76,141255,51406],{"class":86},[76,141257,86202],{"class":136},[76,141259,129451],{"class":86},[76,141261,141262],{"class":78,"line":1281},[76,141263,132041],{"class":146},[76,141265,141266,141268,141270,141272,141274,141276],{"class":78,"line":1293},[76,141267,132046],{"class":1927},[76,141269,79776],{"class":86},[76,141271,128881],{"class":136},[76,141273,51406],{"class":86},[76,141275,132055],{"class":136},[76,141277,129451],{"class":86},[1095,141279,141280,141291],{},[32,141281,141282,141283,141286,141287,100987,141289],{},"1 号盒子左侧浮动 ",[73,141284,141285],{},"sk_list"," 里面包含 ",[73,141288,1095],{},[73,141290,32],{},[32,141292,141293,141294,141286,141297,100987,141299],{},"2 号盒子左侧浮动 ",[73,141295,141296],{},"sk_con",[73,141298,1095],{},[73,141300,32],{},[21,141302,139891],{},[66,141304,141305],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,141306,141307,141313,141323],{"__ignoreMap":71},[76,141308,141309,141311],{"class":78,"line":79},[76,141310,130369],{"class":1927},[76,141312,15539],{"class":86},[76,141314,141315,141317,141319,141321],{"class":78,"line":96},[76,141316,131001],{"class":136},[76,141318,51406],{"class":86},[76,141320,23704],{"class":136},[76,141322,1254],{"class":86},[76,141324,141325],{"class":78,"line":1143},[76,141326,1529],{"class":86},[21,141328,139980],{},[66,141330,141331],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,141332,141333,141339,141349],{"__ignoreMap":71},[76,141334,141335,141337],{"class":78,"line":79},[76,141336,130369],{"class":1927},[76,141338,15539],{"class":86},[76,141340,141341,141343,141345,141347],{"class":78,"line":96},[76,141342,131001],{"class":136},[76,141344,51406],{"class":86},[76,141346,23704],{"class":136},[76,141348,1254],{"class":86},[76,141350,141351],{"class":78,"line":1143},[76,141352,1529],{"class":86},[46,141354,141356,141357],{"id":141355},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[73,141358,141359],{},"sk_container",[1426,141361],{"style":126377,"src":141362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1095,141364,141365,141370],{},[32,141366,140545,141367,141369],{},[73,141368,141359],{}," 给宽度 1200，不要给高度",[32,141371,141372],{},"一定不要忘记清除浮动",[21,141374,139891],{},[66,141376,141377],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,141378,141379,141385,141395],{"__ignoreMap":71},[76,141380,141381,141383],{"class":78,"line":79},[76,141382,130369],{"class":1927},[76,141384,15539],{"class":86},[76,141386,141387,141389,141391,141393],{"class":78,"line":96},[76,141388,131001],{"class":136},[76,141390,51406],{"class":86},[76,141392,23704],{"class":136},[76,141394,1254],{"class":86},[76,141396,141397],{"class":78,"line":1143},[76,141398,1529],{"class":86},[29,141400,141401],{},[32,141402,141403],{},"sk_hd制作",[1095,141405,141406],{},[32,141407,140625,141408,141411],{},[73,141409,141410],{},"sk_hd"," ，插入图片即可",[21,141413,139891],{},[66,141415,141416],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,141417,141418],{"__ignoreMap":71},[76,141419,141420,141422,141424,141426,141428,141430,141432,141434,141436,141438,141440,141442],{"class":78,"line":79},[76,141421,998],{"class":86},[76,141423,1426],{"class":51269},[76,141425,55208],{"class":1927},[76,141427,133],{"class":86},[76,141429,134038],{"class":192},[76,141431,55216],{"class":1927},[76,141433,133],{"class":86},[76,141435,134045],{"class":192},[76,141437,134048],{"class":1927},[76,141439,133],{"class":86},[76,141441,134053],{"class":192},[76,141443,51276],{"class":86},[29,141445,141446],{"start":96},[32,141447,141448],{},"sk_bd制作",[1095,141450,141451],{},[32,141452,141453,141454,141457,141458,100987,141460,141462],{},"3 号盒子 ",[73,141455,141456],{},"sk_bd"," ，里面包含很多的 ",[73,141459,1095],{},[73,141461,32],{},[1095,141463,141464,141473],{},[32,141465,141466,141467,141469,141470,141472],{},"当鼠标移入到 ",[73,141468,32],{}," 上面的时候显示红色的边框，在这里先给 ",[73,141471,32],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[32,141474,141475,141476,141478,141479,141481,141482,141485,141486,141488],{},"由于给每个 ",[73,141477,32],{}," 都设置了外边距，导致一行的最后一个 ",[73,141480,32],{}," 掉了下来，在这里我们利用 ",[73,141483,141484],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[73,141487,32],{},"，去掉外边距就好了",[21,141490,139891],{},[66,141492,141493],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,141494,141495,141501,141513],{"__ignoreMap":71},[76,141496,141497,141499],{"class":78,"line":79},[76,141498,51580],{"class":51269},[76,141500,15539],{"class":86},[76,141502,141503,141505,141507,141509,141511],{"class":78,"line":96},[76,141504,70439],{"class":136},[76,141506,51406],{"class":86},[76,141508,279],{"class":136},[76,141510,51525],{"class":136},[76,141512,1254],{"class":86},[76,141514,141515],{"class":78,"line":1143},[76,141516,1529],{"class":86},[21,141518,139980],{},[66,141520,141521],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,141522,141523,141529,141541],{"__ignoreMap":71},[76,141524,141525,141527],{"class":78,"line":79},[76,141526,51580],{"class":51269},[76,141528,15539],{"class":86},[76,141530,141531,141533,141535,141537,141539],{"class":78,"line":96},[76,141532,70439],{"class":136},[76,141534,51406],{"class":86},[76,141536,279],{"class":136},[76,141538,51525],{"class":136},[76,141540,1254],{"class":86},[76,141542,141543],{"class":78,"line":1143},[76,141544,1529],{"class":86},[16,141546,141548],{"id":141547},"_163-注册页面制作","16.3 注册页面制作",[1426,141550],{"style":126377,"src":141551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[21,141553,141554,141556],{},[237,141555,8992],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1426,141558],{"style":126377,"src":141559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[46,141561,141563],{"id":141562},"_1631-准备工作","16.3.1 准备工作",[1095,141565,141566,141569],{},[32,141567,141568],{},"创建register.html，引入 base.css，引入favicon图标",[32,141570,141571],{},"创建register.css ，在html页面进行引入",[46,141573,141575,141576,141578],{"id":141574},"_1632-header-头部实现","16.3.2 ",[73,141577,131526],{}," 头部实现",[1095,141580,141581,141584],{},[32,141582,141583],{},"整个内容用 版心 进行包裹",[32,141585,141586],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[21,141588,139891],{},[66,141590,141591],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,141592,141593],{"__ignoreMap":71},[76,141594,141595,141597,141599,141601,141603,141605,141607,141609,141611,141613,141615,141617],{"class":78,"line":79},[76,141596,998],{"class":86},[76,141598,1426],{"class":51269},[76,141600,55208],{"class":1927},[76,141602,133],{"class":86},[76,141604,134038],{"class":192},[76,141606,55216],{"class":1927},[76,141608,133],{"class":86},[76,141610,134045],{"class":192},[76,141612,134048],{"class":1927},[76,141614,133],{"class":86},[76,141616,134053],{"class":192},[76,141618,51276],{"class":86},[21,141620,139980],{},[66,141622,141623],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,141624,141625],{"__ignoreMap":71},[76,141626,141627,141629,141631,141633,141635,141637,141639,141641,141643,141645,141647,141649],{"class":78,"line":79},[76,141628,998],{"class":86},[76,141630,1426],{"class":51269},[76,141632,55208],{"class":1927},[76,141634,133],{"class":86},[76,141636,134038],{"class":192},[76,141638,55216],{"class":1927},[76,141640,133],{"class":86},[76,141642,134045],{"class":192},[76,141644,134048],{"class":1927},[76,141646,133],{"class":86},[76,141648,134053],{"class":192},[76,141650,51276],{"class":86},[46,141652,141654,141655,141658],{"id":141653},"_1633-registerarea-主体模块实现","16.3.3 ",[73,141656,141657],{},"registerarea"," 主体模块实现",[1426,141660],{"style":126377,"src":141661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[21,141663,141664],{},"整个大盒子 高度为 522px，设置4个边框",[21,141666,139891],{},[66,141668,141669],{"className":126521,"code":130678,"language":126523,"meta":71,"style":71},[73,141670,141671,141677,141693],{"__ignoreMap":71},[76,141672,141673,141675],{"class":78,"line":79},[76,141674,51580],{"class":51269},[76,141676,15539],{"class":86},[76,141678,141679,141681,141683,141685,141687,141689,141691],{"class":78,"line":96},[76,141680,70865],{"class":136},[76,141682,51406],{"class":86},[76,141684,305],{"class":136},[76,141686,51461],{"class":82},[76,141688,51490],{"class":136},[76,141690,129913],{"class":136},[76,141692,1254],{"class":86},[76,141694,141695],{"class":78,"line":1143},[76,141696,1529],{"class":86},[21,141698,139980],{},[66,141700,141701],{"className":126521,"code":130678,"language":126523,"meta":71,"style":71},[73,141702,141703,141709,141725],{"__ignoreMap":71},[76,141704,141705,141707],{"class":78,"line":79},[76,141706,51580],{"class":51269},[76,141708,15539],{"class":86},[76,141710,141711,141713,141715,141717,141719,141721,141723],{"class":78,"line":96},[76,141712,70865],{"class":136},[76,141714,51406],{"class":86},[76,141716,305],{"class":136},[76,141718,51461],{"class":82},[76,141720,51490],{"class":136},[76,141722,129913],{"class":136},[76,141724,1254],{"class":86},[76,141726,141727],{"class":78,"line":1143},[76,141728,1529],{"class":86},[21,141730,141731],{},"1号盒子 是一个 h3 标签，放标题",[1095,141733,141734],{},[32,141735,141736],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[21,141738,139891],{},[66,141740,141741],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,141742,141743,141749,141759],{"__ignoreMap":71},[76,141744,141745,141747],{"class":78,"line":79},[76,141746,130369],{"class":1927},[76,141748,15539],{"class":86},[76,141750,141751,141753,141755,141757],{"class":78,"line":96},[76,141752,131001],{"class":136},[76,141754,51406],{"class":86},[76,141756,23704],{"class":136},[76,141758,1254],{"class":86},[76,141760,141761],{"class":78,"line":1143},[76,141762,1529],{"class":86},[21,141764,139980],{},[66,141766,141767],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,141768,141769,141775,141785],{"__ignoreMap":71},[76,141770,141771,141773],{"class":78,"line":79},[76,141772,130369],{"class":1927},[76,141774,15539],{"class":86},[76,141776,141777,141779,141781,141783],{"class":78,"line":96},[76,141778,131001],{"class":136},[76,141780,51406],{"class":86},[76,141782,23704],{"class":136},[76,141784,1254],{"class":86},[76,141786,141787],{"class":78,"line":1143},[76,141788,1529],{"class":86},[21,141790,141791],{},"2号盒子 里面放注册的内容",[1095,141793,141794,141797,141806,141820,141833,141836,141839,141857,141871],{},[32,141795,141796],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[32,141798,141799,141800,141802,141803,141805],{},"里面的内容利用 ",[73,141801,1095],{}," 包含 ",[73,141804,32],{}," 来实现的（不需要用表格）",[32,141807,139035,141808,141810,141811,141813,141814,141816,141817,141819],{},[73,141809,32],{}," 里面，左侧放 ",[73,141812,33577],{}," 标签， 中间放",[73,141815,53790],{}," 标签， 右侧放 ",[73,141818,76],{}," 提示信息",[32,141821,141822,141823,141825,141826,141828,141829,141832],{},"左侧 ",[73,141824,33577],{},"里面的文字都是右对齐，我们可以给",[73,141827,33577],{},"设置一个宽度（88px），然后利用",[73,141830,141831],{},"text-align"," 来设置右对齐",[32,141834,141835],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[32,141837,141838],{},"右侧 span修饰一下文字颜色",[32,141840,141841,141842],{},"提示信息的样式优化",[1095,141843,141844,141847,141850],{},[32,141845,141846],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[32,141848,141849],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[32,141851,141852,141853,141856],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[73,141854,141855],{},"vertical-algin"," 来设置 图片与文字对齐方式",[32,141858,141859,141860],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1095,141861,141862,141868],{},[32,141863,141864,141865,141867],{},"设置 ",[73,141866,23521],{}," 的 左右 12px 的内边距，设置一下文字颜色",[32,141869,141870],{},"分别设置 背景颜色",[32,141872,141873,141874,141876],{},"同意协议 和 完成注册 都是用 ",[73,141875,32],{}," 进行包裹",[21,141878,139891],{},[66,141880,141881],{"className":126521,"code":140464,"language":126523,"meta":71,"style":71},[73,141882,141883,141889,141899],{"__ignoreMap":71},[76,141884,141885,141887],{"class":78,"line":79},[76,141886,51580],{"class":51269},[76,141888,15539],{"class":86},[76,141890,141891,141893,141895,141897],{"class":78,"line":96},[76,141892,70847],{"class":136},[76,141894,51406],{"class":86},[76,141896,140481],{"class":136},[76,141898,1254],{"class":86},[76,141900,141901],{"class":78,"line":1143},[76,141902,1529],{"class":86},[21,141904,139980],{},[66,141906,141907],{"className":126521,"code":140464,"language":126523,"meta":71,"style":71},[73,141908,141909,141915,141925],{"__ignoreMap":71},[76,141910,141911,141913],{"class":78,"line":79},[76,141912,51580],{"class":51269},[76,141914,15539],{"class":86},[76,141916,141917,141919,141921,141923],{"class":78,"line":96},[76,141918,70847],{"class":136},[76,141920,51406],{"class":86},[76,141922,140481],{"class":136},[76,141924,1254],{"class":86},[76,141926,141927],{"class":78,"line":1143},[76,141928,1529],{"class":86},[46,141930,141932],{"id":141931},"_1634-底部实现","16.3.4 底部实现",[21,141934,139891],{},[66,141936,141937],{"className":126521,"code":140464,"language":126523,"meta":71,"style":71},[73,141938,141939,141945,141955],{"__ignoreMap":71},[76,141940,141941,141943],{"class":78,"line":79},[76,141942,51580],{"class":51269},[76,141944,15539],{"class":86},[76,141946,141947,141949,141951,141953],{"class":78,"line":96},[76,141948,70847],{"class":136},[76,141950,51406],{"class":86},[76,141952,140481],{"class":136},[76,141954,1254],{"class":86},[76,141956,141957],{"class":78,"line":1143},[76,141958,1529],{"class":86},[21,141960,139980],{},[66,141962,141963],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,141964,141965,141969,141983,141987],{"__ignoreMap":71},[76,141966,141967],{"class":78,"line":79},[76,141968,130632],{"class":146},[76,141970,141971,141973,141975,141977,141979,141981],{"class":78,"line":96},[76,141972,998],{"class":86},[76,141974,51580],{"class":51269},[76,141976,53455],{"class":1927},[76,141978,133],{"class":86},[76,141980,130645],{"class":192},[76,141982,51276],{"class":86},[76,141984,141985],{"class":78,"line":1143},[76,141986,130652],{"class":86},[76,141988,141989,141991,141993],{"class":78,"line":1158},[76,141990,51754],{"class":86},[76,141992,51580],{"class":51269},[76,141994,51276],{"class":86},[16,141996,141998],{"id":141997},"_164-项目总结","16.4 项目总结",[29,142000,142001,142004,142007,142010],{},[32,142002,142003],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[32,142005,142006],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[32,142008,142009],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[32,142011,142012],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1426,142014],{"style":126377,"src":142015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[29,142017,142018],{"start":1164},[32,142019,142020],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1426,142022],{"style":126377,"src":142023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[29,142025,142026],{"start":1178},[32,142027,142028],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1426,142030],{"style":126377,"src":142031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[66,142033,142034],{"className":127268,"code":136678,"language":127270,"meta":71,"style":71},[73,142035,142036],{"__ignoreMap":71},[76,142037,142038,142040,142042,142044,142046,142048,142050,142052,142054,142056,142058,142060],{"class":78,"line":79},[76,142039,998],{"class":86},[76,142041,53790],{"class":51269},[76,142043,53793],{"class":1927},[76,142045,133],{"class":86},[76,142047,62668],{"class":192},[76,142049,14887],{"class":1927},[76,142051,133],{"class":86},[76,142053,136699],{"class":192},[76,142055,60989],{"class":1927},[76,142057,133],{"class":86},[76,142059,136706],{"class":192},[76,142061,51276],{"class":86},[29,142063,142064,142067],{"start":1184},[32,142065,142066],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[32,142068,142069],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5092,142071,142072],{},"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":71,"searchDepth":96,"depth":96,"links":142074},[142075,142080,142087,142095],{"id":139701,"depth":96,"text":139702,"children":142076},[142077,142078,142079],{"id":139705,"depth":1143,"text":139706},{"id":140436,"depth":1143,"text":140437},{"id":140749,"depth":1143,"text":140750},{"id":141049,"depth":96,"text":141050,"children":142081},[142082,142083,142085],{"id":141053,"depth":1143,"text":141054},{"id":141071,"depth":1143,"text":142084},"16.2.2 列表页 header 和 nav 修改",{"id":141355,"depth":1143,"text":142086},"16.2.3 列表页主体 sk_container",{"id":141547,"depth":96,"text":141548,"children":142088},[142089,142090,142092,142094],{"id":141562,"depth":1143,"text":141563},{"id":141574,"depth":1143,"text":142091},"16.3.2 header 头部实现",{"id":141653,"depth":1143,"text":142093},"16.3.3 registerarea 主体模块实现",{"id":141931,"depth":1143,"text":141932},{"id":141997,"depth":96,"text":141998},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139693,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142102,"title":142103,"body":142104,"description":23344,"extension":5123,"meta":142212,"navigation":2364,"path":142213,"seo":142214,"stem":142215,"__hash__":142216},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":9,"value":142105,"toc":142207},[142106,142109,142113,142116,142119,142128,142137,142141,142146,142153,142171,142174,142177,142180,142183,142186,142189,142192,142195,142198,142201,142204],[12,142107,142103],{"id":142108},"_17-web服务器与网站发布",[16,142110,142112],{"id":142111},"_171-web服务器","17.1 Web服务器",[21,142114,142115],{},"把自己网站上传到服务器上，可以让其他人访问",[1426,142117],{"style":126377,"src":142118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[21,142120,142121,142124,142125],{},[237,142122,142123],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[237,142126,142127],{},"Web 服务器等",[21,142129,142130,142131,100987,142134,25709],{},"根据服务器在网络中所在的位置不同，又可分为 ",[237,142132,142133],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[237,142135,142136],{},"远程服务器",[46,142138,142140],{"id":142139},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[21,142142,142143],{},[237,142144,142145],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[21,142147,142148,142149],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[326,142150,142151],{"href":142151,"rel":142152},"http:\u002F\u002Ffree.3v.do\u002F",[23833],[1095,142154,142155,142158,142161,142168],{},[32,142156,142157],{},"去免费空间网站注册账号。",[32,142159,142160],{},"记录下主机名、用户名、密码、域名。",[32,142162,142163,142164,142167],{},"利用 ",[73,142165,142166],{},"utftp"," 软件 上传网站到远程服务器",[32,142169,142170],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[21,142172,142173],{},"使用软件上传，对上传软件文件进行解压",[1426,142175],{"style":126377,"src":142176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1426,142178],{"style":126377,"src":142179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[21,142181,142182],{},"输入刚刚申请的服务器账号信息：",[1426,142184],{"style":126377,"src":142185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1426,142187],{"style":126377,"src":142188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1426,142190],{"style":126377,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1426,142193],{"style":126377,"src":142194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[21,142196,142197],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1426,142199],{"style":126377,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[21,142202,142203],{},"浏览器输入域名即可访问",[21,142205,142206],{},"首页一定必须是index",{"title":71,"searchDepth":96,"depth":96,"links":142208},[142209],{"id":142111,"depth":96,"text":142112,"children":142210},[142211],{"id":142139,"depth":1143,"text":142140},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142103,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142218,"title":142219,"body":142220,"description":23344,"extension":5123,"meta":143147,"navigation":2364,"path":143148,"seo":143149,"stem":143150,"__hash__":143151},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":9,"value":142221,"toc":143130},[142222,142225,142229,142232,142235,142246,142249,142253,142257,142262,142265,142268,142271,142274,142278,142304,142308,142312,142315,142318,142322,142355,142359,142362,142365,142429,142433,142437,142440,142443,142446,142450,142495,142499,142502,142532,142536,142540,142543,142546,142550,142553,142622,142625,142733,142735,142741,142745,142748,142751,142847,142850,142854,142878,142882,142885,142889,142892,142896,142899,142902,142905,142908,142912,142915,142918,142922,142926,142929,142932,142935,142938,142942,142945,142949,142952,142955,143000,143004,143008,143011,143014,143017,143049,143053,143056,143090,143094,143097,143127],[12,142223,142219],{"id":142224},"_18-2d动画与3d转换",[16,142226,142228],{"id":142227},"_181-css3-2d转换","18.1 CSS3 2D转换",[21,142230,142231],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[21,142233,142234],{},"转换（transform）你可以简单理解为变形",[1095,142236,142237,142240,142243],{},[32,142238,142239],{},"移动：translate",[32,142241,142242],{},"旋转：rotate",[32,142244,142245],{},"缩放：scale",[1426,142247],{"style":126377,"src":142248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[46,142250,142252],{"id":142251},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21965,142254,142256],{"id":142255},"_18111-translate介绍","18.1.1.1 translate介绍",[21,142258,142259,142260],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[237,142261,133180],{},[1426,142263],{"style":126377,"src":142264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[21,142266,142267],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[21,142269,142270],{},"对于行内元素无效",[21,142272,142273],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21965,142275,142277],{"id":142276},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[66,142279,142280],{"className":126521,"code":138710,"language":126523,"meta":71,"style":71},[73,142281,142282,142288,142300],{"__ignoreMap":71},[76,142283,142284,142286],{"class":78,"line":79},[76,142285,51580],{"class":51269},[76,142287,15539],{"class":86},[76,142289,142290,142292,142294,142296,142298],{"class":78,"line":96},[76,142291,70439],{"class":136},[76,142293,51406],{"class":86},[76,142295,279],{"class":136},[76,142297,51525],{"class":136},[76,142299,1254],{"class":86},[76,142301,142302],{"class":78,"line":1143},[76,142303,1529],{"class":86},[46,142305,142307],{"id":142306},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21965,142309,142311],{"id":142310},"_18121-rotate介绍","18.1.2.1 rotate介绍",[21,142313,142314],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1426,142316],{"style":126377,"src":142317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21965,142319,142321],{"id":142320},"_18122-旋转效果","18.1.2.2 旋转效果",[66,142323,142325],{"className":126521,"code":142324,"language":126523,"meta":71,"style":71},"div {\n  transform: rotate(45deg);\n}\n",[73,142326,142327,142333,142351],{"__ignoreMap":71},[76,142328,142329,142331],{"class":78,"line":79},[76,142330,51580],{"class":51269},[76,142332,15539],{"class":86},[76,142334,142335,142337,142339,142342,142344,142346,142349],{"class":78,"line":96},[76,142336,136505],{"class":136},[76,142338,51406],{"class":86},[76,142340,142341],{"class":136},"rotate",[76,142343,87],{"class":86},[76,142345,617],{"class":136},[76,142347,142348],{"class":82},"deg",[76,142350,2684],{"class":86},[76,142352,142353],{"class":78,"line":1143},[76,142354,1529],{"class":86},[21965,142356,142358],{"id":142357},"_18123-三角做法","18.1.2.3 三角做法",[21,142360,142361],{},"该下标当经过最外层大盒子时会实现向上反转",[1426,142363],{"style":126377,"src":142364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[66,142366,142367],{"className":126521,"code":135041,"language":126523,"meta":71,"style":71},[73,142368,142369,142373,142379,142389,142399,142415,142425],{"__ignoreMap":71},[76,142370,142371],{"class":78,"line":79},[76,142372,135048],{"class":146},[76,142374,142375,142377],{"class":78,"line":96},[76,142376,135053],{"class":1927},[76,142378,15539],{"class":86},[76,142380,142381,142383,142385,142387],{"class":78,"line":1143},[76,142382,70537],{"class":136},[76,142384,51406],{"class":86},[76,142386,279],{"class":136},[76,142388,1254],{"class":86},[76,142390,142391,142393,142395,142397],{"class":78,"line":1158},[76,142392,70757],{"class":136},[76,142394,51406],{"class":86},[76,142396,279],{"class":136},[76,142398,1254],{"class":86},[76,142400,142401,142403,142405,142407,142409,142411,142413],{"class":78,"line":1164},[76,142402,70865],{"class":136},[76,142404,51406],{"class":86},[76,142406,534],{"class":136},[76,142408,51461],{"class":82},[76,142410,51490],{"class":136},[76,142412,63960],{"class":136},[76,142414,1254],{"class":86},[76,142416,142417,142419,142421,142423],{"class":78,"line":1178},[76,142418,135096],{"class":136},[76,142420,51406],{"class":86},[76,142422,62338],{"class":136},[76,142424,1254],{"class":86},[76,142426,142427],{"class":78,"line":1184},[76,142428,1529],{"class":86},[46,142430,142432],{"id":142431},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21965,142434,142436],{"id":142435},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[21,142438,142439],{},"设置中心点",[1426,142441],{"style":126377,"src":142442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[21,142444,142445],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21965,142447,142449],{"id":142448},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[66,142451,142453],{"className":126521,"code":142452,"language":126523,"meta":71,"style":71},"\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",[73,142454,142455,142460,142466,142481,142486,142491],{"__ignoreMap":71},[76,142456,142457],{"class":78,"line":79},[76,142458,142459],{"class":146},"\u002F* 转换中心点 *\u002F\n",[76,142461,142462,142464],{"class":78,"line":96},[76,142463,51580],{"class":51269},[76,142465,15539],{"class":86},[76,142467,142468,142471,142473,142475,142477,142479],{"class":78,"line":1143},[76,142469,142470],{"class":136},"  transform-origin",[76,142472,51406],{"class":86},[76,142474,51561],{"class":136},[76,142476,17111],{"class":136},[76,142478,130384],{"class":86},[76,142480,135194],{"class":146},[76,142482,142483],{"class":78,"line":1158},[76,142484,142485],{"class":146},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[76,142487,142488],{"class":78,"line":1164},[76,142489,142490],{"class":146},"  \u002F* transform-origin: left top; *\u002F\n",[76,142492,142493],{"class":78,"line":1178},[76,142494,1529],{"class":86},[21965,142496,142498],{"id":142497},"_18133-旋转案例","18.1.3.3 旋转案例",[1426,142500],{"style":126377,"src":142501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[66,142503,142504],{"className":126521,"code":142324,"language":126523,"meta":71,"style":71},[73,142505,142506,142512,142528],{"__ignoreMap":71},[76,142507,142508,142510],{"class":78,"line":79},[76,142509,51580],{"class":51269},[76,142511,15539],{"class":86},[76,142513,142514,142516,142518,142520,142522,142524,142526],{"class":78,"line":96},[76,142515,136505],{"class":136},[76,142517,51406],{"class":86},[76,142519,142341],{"class":136},[76,142521,87],{"class":86},[76,142523,617],{"class":136},[76,142525,142348],{"class":82},[76,142527,2684],{"class":86},[76,142529,142530],{"class":78,"line":1143},[76,142531,1529],{"class":86},[46,142533,142535],{"id":142534},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21965,142537,142539],{"id":142538},"_18141-scale介绍","18.1.4.1 scale介绍",[21,142541,142542],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1426,142544],{"style":126377,"src":142545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21965,142547,142549],{"id":142548},"_18142-分页按钮","18.1.4.2 分页按钮",[1426,142551],{"style":126377,"src":142552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[66,142554,142556],{"className":126521,"code":142555,"language":126523,"meta":71,"style":71},"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",[73,142557,142558,142564,142580,142584,142588,142593,142599,142613,142618],{"__ignoreMap":71},[76,142559,142560,142562],{"class":78,"line":79},[76,142561,51580],{"class":51269},[76,142563,15539],{"class":86},[76,142565,142566,142568,142570,142573,142575,142578],{"class":78,"line":96},[76,142567,136505],{"class":136},[76,142569,51406],{"class":86},[76,142571,142572],{"class":136},"scale",[76,142574,87],{"class":86},[76,142576,142577],{"class":136},"1.2",[76,142579,2684],{"class":86},[76,142581,142582],{"class":78,"line":1143},[76,142583,1529],{"class":86},[76,142585,142586],{"class":78,"line":1158},[76,142587,135982],{"class":86},[76,142589,142590],{"class":78,"line":1164},[76,142591,142592],{"class":146},"\u002F* 2D 缩放 *\u002F\n",[76,142594,142595,142597],{"class":78,"line":1178},[76,142596,51580],{"class":51269},[76,142598,15539],{"class":86},[76,142600,142601,142603,142605,142607,142609,142611],{"class":78,"line":1184},[76,142602,136505],{"class":136},[76,142604,51406],{"class":86},[76,142606,142572],{"class":136},[76,142608,87],{"class":86},[76,142610,142577],{"class":136},[76,142612,2684],{"class":86},[76,142614,142615],{"class":78,"line":1275},[76,142616,142617],{"class":146},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[76,142619,142620],{"class":78,"line":1281},[76,142621,1529],{"class":86},[21,142623,142624],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[66,142626,142628],{"className":126521,"code":142627,"language":126523,"meta":71,"style":71},"\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",[73,142629,142630,142635,142645,142666,142687,142691,142696,142702,142729],{"__ignoreMap":71},[76,142631,142632],{"class":78,"line":79},[76,142633,142634],{"class":146},"\u002F* 定义动画 *\u002F\n",[76,142636,142637,142640,142643],{"class":78,"line":96},[76,142638,142639],{"class":82},"@keyframes",[76,142641,142642],{"class":5183}," move",[76,142644,15539],{"class":86},[76,142646,142647,142650,142652,142654,142656,142659,142661,142663],{"class":78,"line":1143},[76,142648,142649],{"class":1927},"  0%",[76,142651,79776],{"class":86},[76,142653,48103],{"class":136},[76,142655,51406],{"class":86},[76,142657,142658],{"class":136},"translateX",[76,142660,87],{"class":86},[76,142662,279],{"class":136},[76,142664,142665],{"class":86},"); }\n",[76,142667,142668,142671,142673,142675,142677,142679,142681,142683,142685],{"class":78,"line":1158},[76,142669,142670],{"class":1927},"  100%",[76,142672,79776],{"class":86},[76,142674,48103],{"class":136},[76,142676,51406],{"class":86},[76,142678,142658],{"class":136},[76,142680,87],{"class":86},[76,142682,399],{"class":136},[76,142684,51461],{"class":82},[76,142686,142665],{"class":86},[76,142688,142689],{"class":78,"line":1164},[76,142690,1529],{"class":86},[76,142692,142693],{"class":78,"line":1178},[76,142694,142695],{"class":146},"\u002F* 调用动画 *\u002F\n",[76,142697,142698,142700],{"class":78,"line":1184},[76,142699,51580],{"class":51269},[76,142701,15539],{"class":86},[76,142703,142704,142707,142709,142711,142713,142715,142717,142719,142721,142724,142727],{"class":78,"line":1275},[76,142705,142706],{"class":136},"  animation",[76,142708,51406],{"class":86},[76,142710,135207],{"class":136},[76,142712,25087],{"class":136},[76,142714,783],{"class":82},[76,142716,78649],{"class":136},[76,142718,4058],{"class":136},[76,142720,783],{"class":82},[76,142722,142723],{"class":136}," infinite",[76,142725,142726],{"class":136}," alternate",[76,142728,1254],{"class":86},[76,142730,142731],{"class":78,"line":1281},[76,142732,1529],{"class":86},[21,142734,142624],{},[66,142736,142739],{"className":142737,"code":142738,"language":5154},[5152],"\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",[73,142740,142738],{"__ignoreMap":71},[21965,142742,142744],{"id":142743},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[21,142746,142747],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1426,142749],{"style":126377,"src":142750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[66,142752,142753],{"className":126521,"code":142627,"language":126523,"meta":71,"style":71},[73,142754,142755,142759,142767,142785,142805,142809,142813,142819,142843],{"__ignoreMap":71},[76,142756,142757],{"class":78,"line":79},[76,142758,142634],{"class":146},[76,142760,142761,142763,142765],{"class":78,"line":96},[76,142762,142639],{"class":82},[76,142764,142642],{"class":5183},[76,142766,15539],{"class":86},[76,142768,142769,142771,142773,142775,142777,142779,142781,142783],{"class":78,"line":1143},[76,142770,142649],{"class":1927},[76,142772,79776],{"class":86},[76,142774,48103],{"class":136},[76,142776,51406],{"class":86},[76,142778,142658],{"class":136},[76,142780,87],{"class":86},[76,142782,279],{"class":136},[76,142784,142665],{"class":86},[76,142786,142787,142789,142791,142793,142795,142797,142799,142801,142803],{"class":78,"line":1158},[76,142788,142670],{"class":1927},[76,142790,79776],{"class":86},[76,142792,48103],{"class":136},[76,142794,51406],{"class":86},[76,142796,142658],{"class":136},[76,142798,87],{"class":86},[76,142800,399],{"class":136},[76,142802,51461],{"class":82},[76,142804,142665],{"class":86},[76,142806,142807],{"class":78,"line":1164},[76,142808,1529],{"class":86},[76,142810,142811],{"class":78,"line":1178},[76,142812,142695],{"class":146},[76,142814,142815,142817],{"class":78,"line":1184},[76,142816,51580],{"class":51269},[76,142818,15539],{"class":86},[76,142820,142821,142823,142825,142827,142829,142831,142833,142835,142837,142839,142841],{"class":78,"line":1275},[76,142822,142706],{"class":136},[76,142824,51406],{"class":86},[76,142826,135207],{"class":136},[76,142828,25087],{"class":136},[76,142830,783],{"class":82},[76,142832,78649],{"class":136},[76,142834,4058],{"class":136},[76,142836,783],{"class":82},[76,142838,142723],{"class":136},[76,142840,142726],{"class":136},[76,142842,1254],{"class":86},[76,142844,142845],{"class":78,"line":1281},[76,142846,1529],{"class":86},[21,142848,142849],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[46,142851,142853],{"id":142852},"_1823-知识点回顾","18.2.3 知识点回顾",[66,142855,142856],{"className":126521,"code":128690,"language":126523,"meta":71,"style":71},[73,142857,142858,142864,142874],{"__ignoreMap":71},[76,142859,142860,142862],{"class":78,"line":79},[76,142861,51580],{"class":51269},[76,142863,15539],{"class":86},[76,142865,142866,142868,142870,142872],{"class":78,"line":96},[76,142867,128703],{"class":136},[76,142869,51406],{"class":86},[76,142871,61705],{"class":136},[76,142873,1254],{"class":86},[76,142875,142876],{"class":78,"line":1143},[76,142877,1529],{"class":86},[16,142879,142881],{"id":142880},"_183-3d-转换","18.3 3D 转换",[21,142883,142884],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[46,142886,142888],{"id":142887},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1426,142890],{"style":126377,"src":142891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[46,142893,142895],{"id":142894},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1426,142897],{"style":126377,"src":142898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[21,142900,142901],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[21,142903,142904],{},"translate3d的效果需要搭配透视perspective来使用",[1426,142906],{"style":126377,"src":142907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[46,142909,142911],{"id":142910},"_1833-透视-perspective","18.3.3 透视 perspective",[1426,142913],{"style":126377,"src":142914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[21,142916,142917],{},"透视写在父盒子上，单位为像素",[46,142919,142921],{"id":142920},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21965,142923,142925],{"id":142924},"_18341-分开解释","18.3.4.1 分开解释",[1426,142927],{"style":126377,"src":142928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1426,142930],{"style":126377,"src":142931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1426,142933],{"style":126377,"src":142934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[21,142936,142937],{},"总结来说就是左手原则",[21965,142939,142941],{"id":142940},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1426,142943],{"style":126377,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[46,142946,142948],{"id":142947},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1426,142950],{"style":126377,"src":142951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1426,142953],{"style":126377,"src":142954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[66,142956,142958],{"className":126521,"code":142957,"language":126523,"meta":71,"style":71},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[73,142959,142960,142966,142979,142996],{"__ignoreMap":71},[76,142961,142962,142964],{"class":78,"line":79},[76,142963,51580],{"class":51269},[76,142965,15539],{"class":86},[76,142967,142968,142971,142973,142975,142977],{"class":78,"line":96},[76,142969,142970],{"class":136},"  perspective",[76,142972,51406],{"class":86},[76,142974,65043],{"class":136},[76,142976,51461],{"class":82},[76,142978,1254],{"class":86},[76,142980,142981,142983,142985,142988,142990,142992,142994],{"class":78,"line":1143},[76,142982,136505],{"class":136},[76,142984,51406],{"class":86},[76,142986,142987],{"class":136},"rotateX",[76,142989,87],{"class":86},[76,142991,617],{"class":136},[76,142993,142348],{"class":82},[76,142995,2684],{"class":86},[76,142997,142998],{"class":78,"line":1158},[76,142999,1529],{"class":86},[46,143001,143003],{"id":143002},"_1836-案例","18.3.6 案例",[21965,143005,143007],{"id":143006},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1426,143009],{"style":126377,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1426,143012],{"style":126377,"src":143013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1426,143015],{"style":126377,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[66,143018,143020],{"className":126521,"code":143019,"language":126523,"meta":71,"style":71},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[73,143021,143022,143027,143033,143045],{"__ignoreMap":71},[76,143023,143024],{"class":78,"line":79},[76,143025,143026],{"class":146},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[76,143028,143029,143031],{"class":78,"line":96},[76,143030,133518],{"class":1927},[76,143032,15539],{"class":86},[76,143034,143035,143037,143039,143041,143043],{"class":78,"line":1143},[76,143036,142970],{"class":136},[76,143038,51406],{"class":86},[76,143040,65043],{"class":136},[76,143042,51461],{"class":82},[76,143044,1254],{"class":86},[76,143046,143047],{"class":78,"line":1158},[76,143048,1529],{"class":86},[21965,143050,143052],{"id":143051},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1426,143054],{"style":126377,"src":143055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[66,143057,143058],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,143059,143060,143064,143078,143082],{"__ignoreMap":71},[76,143061,143062],{"class":78,"line":79},[76,143063,130632],{"class":146},[76,143065,143066,143068,143070,143072,143074,143076],{"class":78,"line":96},[76,143067,998],{"class":86},[76,143069,51580],{"class":51269},[76,143071,53455],{"class":1927},[76,143073,133],{"class":86},[76,143075,130645],{"class":192},[76,143077,51276],{"class":86},[76,143079,143080],{"class":78,"line":1143},[76,143081,130652],{"class":86},[76,143083,143084,143086,143088],{"class":78,"line":1158},[76,143085,51754],{"class":86},[76,143087,51580],{"class":51269},[76,143089,51276],{"class":86},[21965,143091,143093],{"id":143092},"_18363-旋转木马","18.3.6.3 旋转木马",[1426,143095],{"style":126377,"src":143096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[66,143098,143099],{"className":126521,"code":142324,"language":126523,"meta":71,"style":71},[73,143100,143101,143107,143123],{"__ignoreMap":71},[76,143102,143103,143105],{"class":78,"line":79},[76,143104,51580],{"class":51269},[76,143106,15539],{"class":86},[76,143108,143109,143111,143113,143115,143117,143119,143121],{"class":78,"line":96},[76,143110,136505],{"class":136},[76,143112,51406],{"class":86},[76,143114,142341],{"class":136},[76,143116,87],{"class":86},[76,143118,617],{"class":136},[76,143120,142348],{"class":82},[76,143122,2684],{"class":86},[76,143124,143125],{"class":78,"line":1143},[76,143126,1529],{"class":86},[5092,143128,143129],{},"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":71,"searchDepth":96,"depth":96,"links":143131},[143132,143139],{"id":142227,"depth":96,"text":142228,"children":143133},[143134,143135,143136,143137,143138],{"id":142251,"depth":1143,"text":142252},{"id":142306,"depth":1143,"text":142307},{"id":142431,"depth":1143,"text":142432},{"id":142534,"depth":1143,"text":142535},{"id":142852,"depth":1143,"text":142853},{"id":142880,"depth":96,"text":142881,"children":143140},[143141,143142,143143,143144,143145,143146],{"id":142887,"depth":1143,"text":142888},{"id":142894,"depth":1143,"text":142895},{"id":142910,"depth":1143,"text":142911},{"id":142920,"depth":1143,"text":142921},{"id":142947,"depth":1143,"text":142948},{"id":143002,"depth":1143,"text":143003},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142219,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143153,"title":143154,"body":143155,"description":23344,"extension":5123,"meta":143358,"navigation":2364,"path":143359,"seo":143360,"stem":143361,"__hash__":143362},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":9,"value":143156,"toc":143347},[143157,143160,143164,143167,143170,143174,143177,143180,143183,143187,143190,143194,143197,143201,143204,143208,143222,143226,143251,143254,143257,143274,143278,143282,143285,143288,143292,143295,143298,143316,143320,143323,143337,143341,143344],[12,143158,143154],{"id":143159},"_19-移动端基础-前缀现状与视口",[16,143161,143163],{"id":143162},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1426,143165],{"style":126377,"src":143166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[21,143168,143169],{},"意思就是加个前缀，增加兼容性",[16,143171,143173],{"id":143172},"_192-移动端现状认识","19.2 移动端现状认识",[1426,143175],{"style":126377,"src":143176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[21,143178,143179],{},"调试方法：",[1426,143181],{"style":126377,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[16,143184,143186],{"id":143185},"_193-视口","19.3 视口",[21,143188,143189],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[46,143191,143193],{"id":143192},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1426,143195],{"style":126377,"src":143196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[46,143198,143200],{"id":143199},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1426,143202],{"style":126377,"src":143203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[46,143205,143207],{"id":143206},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1095,143209,143210,143213,143216,143219],{},[32,143211,143212],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[32,143214,143215],{},"理想视口，对设备来讲，是最理想的视口尺寸",[32,143217,143218],{},"需要手动添写meta视口标签通知浏览器操作",[32,143220,143221],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[46,143223,143225],{"id":143224},"_1934-meta视口标签","19.3.4 meta视口标签",[66,143227,143229],{"className":127268,"code":143228,"language":127270,"meta":71,"style":71},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[73,143230,143231],{"__ignoreMap":71},[76,143232,143233,143235,143237,143239,143241,143243,143245,143247,143249],{"class":78,"line":79},[76,143234,998],{"class":86},[76,143236,51313],{"class":51269},[76,143238,14887],{"class":1927},[76,143240,133],{"class":86},[76,143242,51360],{"class":192},[76,143244,51340],{"class":1927},[76,143246,133],{"class":86},[76,143248,51367],{"class":192},[76,143250,51276],{"class":86},[1426,143252],{"style":126377,"src":143253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[21,143255,143256],{},"标准视口设置：",[29,143258,143259,143262,143265,143268,143271],{},[32,143260,143261],{},"视口宽度和设备保持一致",[32,143263,143264],{},"视口的默认缩放比例1.0",[32,143266,143267],{},"不允许用户自行缩放",[32,143269,143270],{},"最大允许的缩放比例1.0",[32,143272,143273],{},"最小允许的缩放比例1.0",[46,143275,143277],{"id":143276},"_1935-二倍图","19.3.5 二倍图",[21965,143279,143281],{"id":143280},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1426,143283],{"style":126377,"src":143284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1426,143286],{"style":126377,"src":143287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21965,143289,143291],{"id":143290},"_19352-多倍图","19.3.5.2 多倍图",[1426,143293],{"style":126377,"src":143294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[21,143296,143297],{},"二倍图法，代码如下：",[66,143299,143301],{"className":126521,"code":143300,"language":126523,"meta":71,"style":71},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[73,143302,143303,143308],{"__ignoreMap":71},[76,143304,143305],{"class":78,"line":79},[76,143306,143307],{"class":146},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[76,143309,143310,143313],{"class":78,"line":96},[76,143311,143312],{"class":51269},"background-size",[76,143314,143315],{"class":86},": 50% 50%;\n",[21965,143317,143319],{"id":143318},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1426,143321],{"style":126377,"src":143322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[29,143324,143325,143328,143331,143334],{},[32,143326,143327],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[32,143329,143330],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[32,143332,143333],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[32,143335,143336],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21965,143338,143340],{"id":143339},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1426,143342],{"style":126377,"src":143343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5092,143345,143346],{},"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":71,"searchDepth":96,"depth":96,"links":143348},[143349,143350,143351],{"id":143162,"depth":96,"text":143163},{"id":143172,"depth":96,"text":143173},{"id":143185,"depth":96,"text":143186,"children":143352},[143353,143354,143355,143356,143357],{"id":143192,"depth":1143,"text":143193},{"id":143199,"depth":1143,"text":143200},{"id":143206,"depth":1143,"text":143207},{"id":143224,"depth":1143,"text":143225},{"id":143276,"depth":1143,"text":143277},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143154,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143364,"title":143365,"body":143366,"description":23344,"extension":5123,"meta":144243,"navigation":2364,"path":144244,"seo":144245,"stem":144246,"__hash__":144247},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":9,"value":143367,"toc":144227},[143368,143371,143375,143382,143385,143392,143395,143400,143403,143407,143411,143418,143421,143424,143428,143431,143434,143437,143440,143443,143447,143450,143454,143456,143459,143462,143465,143468,143470,143473,143475,143505,143507,143537,143541,143544,143548,143551,143568,143571,143574,143650,143652,143655,143658,143661,143664,143666,143669,143672,143676,143698,143701,143704,143708,143711,143717,143720,143724,143727,143730,143734,143737,143740,143743,143747,143750,143753,143756,143759,143763,143766,143770,143777,143780,143783,143786,143789,143799,143802,143805,143812,143815,143819,143822,143825,143829,143832,143835,143838,143883,143886,143889,143892,143894,144023,144025,144063,144066,144069,144071,144189,144191,144225],[12,143369,143365],{"id":143370},"_20-移动端布局实战上篇",[16,143372,143374],{"id":143373},"_201-移动端主流方案","20.1 移动端主流方案",[29,143376,143377],{},[32,143378,143379],{},[237,143380,143381],{},"单独移动端页面（主流）",[1426,143383],{"style":126377,"src":143384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[29,143386,143387],{"start":96},[32,143388,143389],{},[237,143390,143391],{},"响应式兼容PC移动端",[1426,143393],{"style":126377,"src":143394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[29,143396,143397],{"start":1143},[32,143398,143399],{},"两种页面选型布局方式",[1426,143401],{"style":126377,"src":143402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[16,143404,143406],{"id":143405},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[46,143408,143410],{"id":143409},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[21,143412,143413,143414],{},"官网地址： ",[326,143415,143416],{"href":143416,"rel":143417},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23833],[1426,143419],{"style":126377,"src":143420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1426,143422],{"style":126377,"src":143423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[46,143425,143427],{"id":143426},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1426,143429],{"style":126377,"src":143430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1426,143432],{"style":126377,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[21,143435,143436],{},"去除高亮：",[21,143438,143439],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[21,143441,143442],{},"-webkit- tap-highlight-color: transparent;",[16,143444,143446],{"id":143445},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1426,143448],{"style":126377,"src":143449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[16,143451,143453],{"id":143452},"_204-流式布局案例","20.4 流式布局案例",[21,143455,117],{},[21,143457,143458],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[21,143460,143461],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[21,143463,143464],{},"图片格式：",[1426,143466],{"style":126377,"src":143467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[21,143469,135564],{},[1426,143471],{"style":126377,"src":143472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[21,143474,139891],{},[66,143476,143477],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,143478,143479],{"__ignoreMap":71},[76,143480,143481,143483,143485,143487,143489,143491,143493,143495,143497,143499,143501,143503],{"class":78,"line":79},[76,143482,998],{"class":86},[76,143484,1426],{"class":51269},[76,143486,55208],{"class":1927},[76,143488,133],{"class":86},[76,143490,134038],{"class":192},[76,143492,55216],{"class":1927},[76,143494,133],{"class":86},[76,143496,134045],{"class":192},[76,143498,134048],{"class":1927},[76,143500,133],{"class":86},[76,143502,134053],{"class":192},[76,143504,51276],{"class":86},[21,143506,139980],{},[66,143508,143509],{"className":127268,"code":134023,"language":127270,"meta":71,"style":71},[73,143510,143511],{"__ignoreMap":71},[76,143512,143513,143515,143517,143519,143521,143523,143525,143527,143529,143531,143533,143535],{"class":78,"line":79},[76,143514,998],{"class":86},[76,143516,1426],{"class":51269},[76,143518,55208],{"class":1927},[76,143520,133],{"class":86},[76,143522,134038],{"class":192},[76,143524,55216],{"class":1927},[76,143526,133],{"class":86},[76,143528,134045],{"class":192},[76,143530,134048],{"class":1927},[76,143532,133],{"class":86},[76,143534,134053],{"class":192},[76,143536,51276],{"class":86},[16,143538,143540],{"id":143539},"_205-flex布局","20.5 flex布局",[1426,143542],{"style":126377,"src":143543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[46,143545,143547],{"id":143546},"_2051-布局原理","20.5.1 布局原理",[21,143549,143550],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1095,143552,143553,143556,143559,143562,143565],{},[32,143554,143555],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[32,143557,143558],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[32,143560,143561],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[32,143563,143564],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[32,143566,143567],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[21,143569,143570],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[21,143572,143573],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[66,143575,143577],{"className":126521,"code":143576,"language":126523,"meta":71,"style":71},"\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",[73,143578,143579,143584,143591,143601,143613,143624,143635,143646],{"__ignoreMap":71},[76,143580,143581],{"class":78,"line":79},[76,143582,143583],{"class":146},"\u002F* Flex 弹性布局 *\u002F\n",[76,143585,143586,143589],{"class":78,"line":96},[76,143587,143588],{"class":1927},".container",[76,143590,15539],{"class":86},[76,143592,143593,143595,143597,143599],{"class":78,"line":1143},[76,143594,128137],{"class":136},[76,143596,51406],{"class":86},[76,143598,51446],{"class":136},[76,143600,1254],{"class":86},[76,143602,143603,143606,143608,143611],{"class":78,"line":1158},[76,143604,143605],{"class":136},"  flex-direction",[76,143607,51406],{"class":86},[76,143609,143610],{"class":136},"row",[76,143612,1254],{"class":86},[76,143614,143615,143618,143620,143622],{"class":78,"line":1164},[76,143616,143617],{"class":136},"  justify-content",[76,143619,51406],{"class":86},[76,143621,51637],{"class":136},[76,143623,1254],{"class":86},[76,143625,143626,143629,143631,143633],{"class":78,"line":1178},[76,143627,143628],{"class":136},"  align-items",[76,143630,51406],{"class":86},[76,143632,51561],{"class":136},[76,143634,1254],{"class":86},[76,143636,143637,143640,143642,143644],{"class":78,"line":1184},[76,143638,143639],{"class":136},"  flex-wrap",[76,143641,51406],{"class":86},[76,143643,78579],{"class":136},[76,143645,1254],{"class":86},[76,143647,143648],{"class":78,"line":1275},[76,143649,1529],{"class":86},[21,143651,70422],{},[21,143653,143654],{},".form-item .male-label {",[21,143656,143657],{},"   margin-right: 20px;",[21,143659,143660],{},"   display: inline-flex;",[21,143662,143663],{},"   align-items: center;",[21,143665,1034],{},[1426,143667],{"style":126377,"src":143668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1426,143670],{"style":126377,"src":143671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[46,143673,143675],{"id":143674},"_2052-常见父项属性","20.5.2 常见父项属性",[29,143677,143678,143681,143684,143687,143690,143693,143696],{},[32,143679,143680],{},"flex-direction：设置主轴的方向",[32,143682,143683],{},"justify-content：设置主轴上的子元素排列方式",[32,143685,143686],{},"flex-wrap：设置子元素是否换行",[32,143688,143689],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[32,143691,143692],{},"align-items：设置侧轴上的子元素排列方式（单行）",[32,143694,143695],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[32,143697,143680],{},[1426,143699],{"style":126377,"src":143700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1426,143702],{"style":126377,"src":143703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[29,143705,143706],{"start":96},[32,143707,143683],{},[1426,143709],{"style":126377,"src":143710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[21,143712,143713,143716],{},[73,143714,143715],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[21,143718,143719],{},"跟着主轴走",[29,143721,143722],{"start":1143},[32,143723,143686],{},[1426,143725],{"style":126377,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[21,143728,143729],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[29,143731,143732],{"start":1158},[32,143733,143689],{},[1426,143735],{"style":126377,"src":143736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[21,143738,143739],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[21,143741,143742],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[29,143744,143745],{"start":1164},[32,143746,143692],{},[1426,143748],{"style":126377,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[21,143751,143752],{},"align-items与align-content之间的区别：",[21,143754,143755],{},"单找items，多找content",[1426,143757],{"style":126377,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[29,143760,143761],{"start":1178},[32,143762,143695],{},[1426,143764],{"style":126377,"src":143765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[46,143767,143769],{"id":143768},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[29,143771,143772],{},[32,143773,143774],{},[237,143775,143776],{},"flex 属性",[21,143778,143779],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1426,143781],{"style":126377,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[21,143784,143785],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[21,143787,143788],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[29,143790,143791],{"start":96},[32,143792,143793,13762,143796],{},[237,143794,143795],{},"align-self",[237,143797,143798],{},"控制子项自己在侧轴上的排列方式",[1426,143800],{"style":126377,"src":143801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[21,143803,143804],{},"单个子盒子在父盒子侧轴上的排列方式",[29,143806,143807],{"start":1143},[32,143808,143809,143811],{},[237,143810,95266],{}," 属性定义项目的排列顺序",[1426,143813],{"style":126377,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[46,143816,143818],{"id":143817},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1426,143820],{"style":126377,"src":143821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[21,143823,143824],{},"必须要添加浏览器的私有前缀",[46,143826,143828],{"id":143827},"_2055-携程网首页案例","20.5.5 携程网首页案例",[21,143830,143831],{},"学到最重要的知识：",[21,143833,143834],{},"flex处理这样的布局思路",[1426,143836],{"style":126377,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[66,143839,143841],{"className":126521,"code":143840,"language":126523,"meta":71,"style":71},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[73,143842,143843,143849,143859,143869,143879],{"__ignoreMap":71},[76,143844,143845,143847],{"class":78,"line":79},[76,143846,143588],{"class":1927},[76,143848,15539],{"class":86},[76,143850,143851,143853,143855,143857],{"class":78,"line":96},[76,143852,128137],{"class":136},[76,143854,51406],{"class":86},[76,143856,51446],{"class":136},[76,143858,1254],{"class":86},[76,143860,143861,143863,143865,143867],{"class":78,"line":1143},[76,143862,143617],{"class":136},[76,143864,51406],{"class":86},[76,143866,51561],{"class":136},[76,143868,1254],{"class":86},[76,143870,143871,143873,143875,143877],{"class":78,"line":1158},[76,143872,143628],{"class":136},[76,143874,51406],{"class":86},[76,143876,51561],{"class":136},[76,143878,1254],{"class":86},[76,143880,143881],{"class":78,"line":1164},[76,143882,1529],{"class":86},[21,143884,143885],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[21,143887,143888],{},"使用属性选择器",[1426,143890],{"style":126377,"src":143891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[21,143893,68858],{},[66,143895,143897],{"className":127268,"code":143896,"language":127270,"meta":71,"style":71},"\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",[73,143898,143899,143904,143918,143923,143943,143948,143967,143972,143991,143996,144015],{"__ignoreMap":71},[76,143900,143901],{"class":78,"line":79},[76,143902,143903],{"class":146},"\u003C!-- 携程网移动端案例结构 -->\n",[76,143905,143906,143908,143910,143912,143914,143916],{"class":78,"line":96},[76,143907,998],{"class":86},[76,143909,51580],{"class":51269},[76,143911,53455],{"class":1927},[76,143913,133],{"class":86},[76,143915,92292],{"class":192},[76,143917,51276],{"class":86},[76,143919,143920],{"class":78,"line":1143},[76,143921,143922],{"class":146},"  \u003C!-- 搜索栏 -->\n",[76,143924,143925,143927,143929,143931,143933,143936,143939,143941],{"class":78,"line":1158},[76,143926,52113],{"class":86},[76,143928,51580],{"class":51269},[76,143930,53455],{"class":1927},[76,143932,133],{"class":86},[76,143934,143935],{"class":192},"\"search-index\"",[76,143937,143938],{"class":86},">...\u003C\u002F",[76,143940,51580],{"class":51269},[76,143942,51276],{"class":86},[76,143944,143945],{"class":78,"line":1164},[76,143946,143947],{"class":146},"  \u003C!-- 焦点图 -->\n",[76,143949,143950,143952,143954,143956,143958,143961,143963,143965],{"class":78,"line":1178},[76,143951,52113],{"class":86},[76,143953,51580],{"class":51269},[76,143955,53455],{"class":1927},[76,143957,133],{"class":86},[76,143959,143960],{"class":192},"\"focus\"",[76,143962,143938],{"class":86},[76,143964,51580],{"class":51269},[76,143966,51276],{"class":86},[76,143968,143969],{"class":78,"line":1184},[76,143970,143971],{"class":146},"  \u003C!-- 主导航 -->\n",[76,143973,143974,143976,143978,143980,143982,143985,143987,143989],{"class":78,"line":1275},[76,143975,52113],{"class":86},[76,143977,51580],{"class":51269},[76,143979,53455],{"class":1927},[76,143981,133],{"class":86},[76,143983,143984],{"class":192},"\"local-nav\"",[76,143986,143938],{"class":86},[76,143988,51580],{"class":51269},[76,143990,51276],{"class":86},[76,143992,143993],{"class":78,"line":1281},[76,143994,143995],{"class":146},"  \u003C!-- 子导航 -->\n",[76,143997,143998,144000,144002,144004,144006,144009,144011,144013],{"class":78,"line":1293},[76,143999,52113],{"class":86},[76,144001,51580],{"class":51269},[76,144003,53455],{"class":1927},[76,144005,133],{"class":86},[76,144007,144008],{"class":192},"\"nav-common\"",[76,144010,143938],{"class":86},[76,144012,51580],{"class":51269},[76,144014,51276],{"class":86},[76,144016,144017,144019,144021],{"class":78,"line":1576},[76,144018,51754],{"class":86},[76,144020,51580],{"class":51269},[76,144022,51276],{"class":86},[21,144024,70422],{},[66,144026,144027],{"className":126521,"code":136973,"language":126523,"meta":71,"style":71},[73,144028,144029,144043,144059],{"__ignoreMap":71},[76,144030,144031,144033,144035,144037,144039,144041],{"class":78,"line":79},[76,144032,53790],{"class":51269},[76,144034,978],{"class":86},[76,144036,103076],{"class":1927},[76,144038,133],{"class":82},[76,144040,62668],{"class":192},[76,144042,136990],{"class":86},[76,144044,144045,144047,144049,144051,144053,144055,144057],{"class":78,"line":96},[76,144046,70865],{"class":136},[76,144048,51406],{"class":86},[76,144050,305],{"class":136},[76,144052,51461],{"class":82},[76,144054,51490],{"class":136},[76,144056,130101],{"class":136},[76,144058,1254],{"class":86},[76,144060,144061],{"class":78,"line":1143},[76,144062,1529],{"class":86},[21,144064,144065],{},"总代码和效果展示：",[1426,144067],{"style":126377,"src":144068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[21,144070,68858],{},[66,144072,144073],{"className":127268,"code":143896,"language":127270,"meta":71,"style":71},[73,144074,144075,144079,144093,144097,144115,144119,144137,144141,144159,144163,144181],{"__ignoreMap":71},[76,144076,144077],{"class":78,"line":79},[76,144078,143903],{"class":146},[76,144080,144081,144083,144085,144087,144089,144091],{"class":78,"line":96},[76,144082,998],{"class":86},[76,144084,51580],{"class":51269},[76,144086,53455],{"class":1927},[76,144088,133],{"class":86},[76,144090,92292],{"class":192},[76,144092,51276],{"class":86},[76,144094,144095],{"class":78,"line":1143},[76,144096,143922],{"class":146},[76,144098,144099,144101,144103,144105,144107,144109,144111,144113],{"class":78,"line":1158},[76,144100,52113],{"class":86},[76,144102,51580],{"class":51269},[76,144104,53455],{"class":1927},[76,144106,133],{"class":86},[76,144108,143935],{"class":192},[76,144110,143938],{"class":86},[76,144112,51580],{"class":51269},[76,144114,51276],{"class":86},[76,144116,144117],{"class":78,"line":1164},[76,144118,143947],{"class":146},[76,144120,144121,144123,144125,144127,144129,144131,144133,144135],{"class":78,"line":1178},[76,144122,52113],{"class":86},[76,144124,51580],{"class":51269},[76,144126,53455],{"class":1927},[76,144128,133],{"class":86},[76,144130,143960],{"class":192},[76,144132,143938],{"class":86},[76,144134,51580],{"class":51269},[76,144136,51276],{"class":86},[76,144138,144139],{"class":78,"line":1184},[76,144140,143971],{"class":146},[76,144142,144143,144145,144147,144149,144151,144153,144155,144157],{"class":78,"line":1275},[76,144144,52113],{"class":86},[76,144146,51580],{"class":51269},[76,144148,53455],{"class":1927},[76,144150,133],{"class":86},[76,144152,143984],{"class":192},[76,144154,143938],{"class":86},[76,144156,51580],{"class":51269},[76,144158,51276],{"class":86},[76,144160,144161],{"class":78,"line":1281},[76,144162,143995],{"class":146},[76,144164,144165,144167,144169,144171,144173,144175,144177,144179],{"class":78,"line":1293},[76,144166,52113],{"class":86},[76,144168,51580],{"class":51269},[76,144170,53455],{"class":1927},[76,144172,133],{"class":86},[76,144174,144008],{"class":192},[76,144176,143938],{"class":86},[76,144178,51580],{"class":51269},[76,144180,51276],{"class":86},[76,144182,144183,144185,144187],{"class":78,"line":1576},[76,144184,51754],{"class":86},[76,144186,51580],{"class":51269},[76,144188,51276],{"class":86},[21,144190,70422],{},[66,144192,144193],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,144194,144195,144199,144213,144217],{"__ignoreMap":71},[76,144196,144197],{"class":78,"line":79},[76,144198,130632],{"class":146},[76,144200,144201,144203,144205,144207,144209,144211],{"class":78,"line":96},[76,144202,998],{"class":86},[76,144204,51580],{"class":51269},[76,144206,53455],{"class":1927},[76,144208,133],{"class":86},[76,144210,130645],{"class":192},[76,144212,51276],{"class":86},[76,144214,144215],{"class":78,"line":1143},[76,144216,130652],{"class":86},[76,144218,144219,144221,144223],{"class":78,"line":1158},[76,144220,51754],{"class":86},[76,144222,51580],{"class":51269},[76,144224,51276],{"class":86},[5092,144226,137922],{},{"title":71,"searchDepth":96,"depth":96,"links":144228},[144229,144230,144234,144235,144236],{"id":143373,"depth":96,"text":143374},{"id":143405,"depth":96,"text":143406,"children":144231},[144232,144233],{"id":143409,"depth":1143,"text":143410},{"id":143426,"depth":1143,"text":143427},{"id":143445,"depth":96,"text":143446},{"id":143452,"depth":96,"text":143453},{"id":143539,"depth":96,"text":143540,"children":144237},[144238,144239,144240,144241,144242],{"id":143546,"depth":1143,"text":143547},{"id":143674,"depth":1143,"text":143675},{"id":143768,"depth":1143,"text":143769},{"id":143817,"depth":1143,"text":143818},{"id":143827,"depth":1143,"text":143828},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143365,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144249,"title":144250,"body":144251,"description":23344,"extension":5123,"meta":145478,"navigation":2364,"path":145479,"seo":145480,"stem":145481,"__hash__":145482},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":9,"value":144252,"toc":145456},[144253,144256,144260,144264,144267,144270,144274,144279,144282,144285,144288,144291,144294,144351,144354,144359,144362,144365,144369,144380,144384,144387,144390,144397,144402,144406,144409,144415,144418,144422,144425,144432,144435,144438,144445,144448,144455,144458,144461,144468,144471,144474,144476,144493,144497,144500,144503,144506,144510,144513,144516,144519,144522,144525,144528,144530,144533,144536,144598,144601,144711,144718,144724,144727,144730,144734,144737,144741,144746,144749,144756,144759,144765,144770,144773,144776,144779,144782,144785,144788,144791,144794,144850,144852,144878,144882,144885,144888,144891,144899,144902,144905,144909,144965,144968,144972,144978,144989,144992,144997,145000,145003,145009,145012,145015,145018,145021,145024,145027,145030,145033,145058,145064,145067,145070,145073,145076,145079,145082,145087,145090,145093,145096,145104,145107,145114,145117,145120,145122,145146,145148,145151,145154,145157,145160,145163,145166,145169,145203,145206,145209,145243,145250,145253,145256,145259,145262,145265,145268,145275,145278,145281,145284,145287,145294,145297,145300,145307,145310,145313,145317,145320,145323,145326,145329,145332,145335,145338,145341,145343,145367,145369,145393,145397,145408,145411,145414,145417,145420,145423,145426,145429,145432,145435,145438,145441,145444,145447,145450,145453],[12,144254,144250],{"id":144255},"_21-移动端布局实战下篇",[16,144257,144259],{"id":144258},"_211-rem适配布局","21.1 rem适配布局",[46,144261,144263],{"id":144262},"_2111-rem单位","21.1.1 rem单位",[1426,144265],{"style":126377,"src":144266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[21,144268,144269],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[46,144271,144273],{"id":144272},"_2112-媒体查询","21.1.2 媒体查询",[29,144275,144276],{},[32,144277,144278],{},"参数介绍",[1426,144280],{"style":126377,"src":144281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1426,144283],{"style":126377,"src":144284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1426,144286],{"style":126377,"src":144287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1426,144289],{"style":126377,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1426,144292],{"style":126377,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[66,144295,144297],{"className":126521,"code":144296,"language":126523,"meta":71,"style":71},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[73,144298,144299,144304,144323,144330,144343,144347],{"__ignoreMap":71},[76,144300,144301],{"class":78,"line":79},[76,144302,144303],{"class":146},"\u002F* 媒体查询 *\u002F\n",[76,144305,144306,144309,144311,144314,144316,144319,144321],{"class":78,"line":96},[76,144307,144308],{"class":82},"@media",[76,144310,1622],{"class":86},[76,144312,144313],{"class":136},"max-width",[76,144315,51406],{"class":86},[76,144317,144318],{"class":136},"768",[76,144320,51461],{"class":82},[76,144322,12409],{"class":86},[76,144324,144325,144328],{"class":78,"line":1143},[76,144326,144327],{"class":1927},"  .container",[76,144329,15539],{"class":86},[76,144331,144332,144335,144337,144339,144341],{"class":78,"line":1158},[76,144333,144334],{"class":136},"    width",[76,144336,51406],{"class":86},[76,144338,399],{"class":136},[76,144340,416],{"class":82},[76,144342,1254],{"class":86},[76,144344,144345],{"class":78,"line":1164},[76,144346,127317],{"class":86},[76,144348,144349],{"class":78,"line":1178},[76,144350,1529],{"class":86},[21,144352,144353],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[29,144355,144356],{"start":96},[32,144357,144358],{},"引入资源",[1426,144360],{"style":126377,"src":144361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[21,144363,144364],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[46,144366,144368],{"id":144367},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1095,144370,144371,144374,144377],{},[32,144372,144373],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[32,144375,144376],{},"媒体查询可以根据不同设备宽度来修改样式",[32,144378,144379],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[16,144381,144383],{"id":144382},"_212-less基础","21.2 Less基础",[21,144385,144386],{},"css冗余度较高，不利于复用，没有很好的计算能力",[21,144388,144389],{},"Less可以解决该问题，它是css的扩展语言",[21,144391,144392,144393],{},"Less中文网址： ",[326,144394,144395],{"href":144395,"rel":144396},"http:\u002F\u002Flesscss.cn\u002F",[23833],[21,144398,144399],{},[237,144400,144401],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[46,144403,144405],{"id":144404},"_2121-less安装","21.2.1 less安装",[21,144407,144408],{},"如果使用vscode，则无需进行下方安装步骤",[21,144410,144411],{},[326,144412,144413],{"href":144413,"rel":144414},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23833],[1426,144416],{"style":126377,"src":144417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[46,144419,144421],{"id":144420},"_2122-less使用","21.2.2 less使用",[21,144423,144424],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[29,144426,144427],{},[32,144428,144429],{},[237,144430,144431],{},"Less 变量",[1426,144433],{"style":126377,"src":144434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1426,144436],{"style":126377,"src":144437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[29,144439,144440],{"start":96},[32,144441,144442],{},[237,144443,144444],{},"Less 编译",[1426,144446],{"style":126377,"src":144447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[29,144449,144450],{"start":1143},[32,144451,144452],{},[237,144453,144454],{},"Less 嵌套",[1426,144456],{"style":126377,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1426,144459],{"style":126377,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[29,144462,144463],{"start":1158},[32,144464,144465],{},[237,144466,144467],{},"Less 运算",[1426,144469],{"style":126377,"src":144470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[21,144472,144473],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[21,144475,117],{},[1095,144477,144478,144481,144484,144487,144490],{},[32,144479,144480],{},"乘号（*）和除号（\u002F）的写法",[32,144482,144483],{},"运算符中间左右有个空格隔开 1px + 5",[32,144485,144486],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[32,144488,144489],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[32,144491,144492],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[16,144494,144496],{"id":144495},"_213-rem-适配方案","21.3 rem 适配方案",[21,144498,144499],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[21,144501,144502],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1426,144504],{"style":126377,"src":144505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[46,144507,144509],{"id":144508},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[21,144511,144512],{},"rem + 媒体查询 + less 技术",[1426,144514],{"style":126377,"src":144515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[21,144517,144518],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[21,144520,144521],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1426,144523],{"style":126377,"src":144524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[21,144526,144527],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[21,144529,14600],{},[1426,144531],{"style":126377,"src":144532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[21,144534,144535],{},"index.html:",[66,144537,144539],{"className":126521,"code":144538,"language":126523,"meta":71,"style":71},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[73,144540,144541,144546,144552,144568,144572,144578,144594],{"__ignoreMap":71},[76,144542,144543],{"class":78,"line":79},[76,144544,144545],{"class":146},"\u002F* rem 适配方案 *\u002F\n",[76,144547,144548,144550],{"class":78,"line":96},[76,144549,50604],{"class":51269},[76,144551,15539],{"class":86},[76,144553,144554,144556,144558,144561,144563,144565],{"class":78,"line":1143},[76,144555,70595],{"class":136},[76,144557,51406],{"class":86},[76,144559,144560],{"class":136},"62.5",[76,144562,416],{"class":82},[76,144564,130384],{"class":86},[76,144566,144567],{"class":146},"\u002F* 1rem = 10px *\u002F\n",[76,144569,144570],{"class":78,"line":1158},[76,144571,1529],{"class":86},[76,144573,144574,144576],{"class":78,"line":1164},[76,144575,130369],{"class":1927},[76,144577,15539],{"class":86},[76,144579,144580,144582,144584,144586,144589,144591],{"class":78,"line":1178},[76,144581,70537],{"class":136},[76,144583,51406],{"class":86},[76,144585,534],{"class":136},[76,144587,144588],{"class":82},"rem",[76,144590,130384],{"class":86},[76,144592,144593],{"class":146},"\u002F* 100px *\u002F\n",[76,144595,144596],{"class":78,"line":1184},[76,144597,1529],{"class":86},[21,144599,144600],{},"common.less",[66,144602,144604],{"className":126521,"code":144603,"language":126523,"meta":71,"style":71},"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",[73,144605,144606,144612,144627,144631,144637,144651,144655,144659,144663,144669,144683,144687,144693,144707],{"__ignoreMap":71},[76,144607,144608,144610],{"class":78,"line":79},[76,144609,50604],{"class":51269},[76,144611,15539],{"class":86},[76,144613,144614,144616,144618,144620,144622,144624],{"class":78,"line":96},[76,144615,70595],{"class":136},[76,144617,51406],{"class":86},[76,144619,144560],{"class":136},[76,144621,416],{"class":82},[76,144623,26036],{"class":86},[76,144625,144626],{"class":146},"\u002F* 10px *\u002F\n",[76,144628,144629],{"class":78,"line":1143},[76,144630,1529],{"class":86},[76,144632,144633,144635],{"class":78,"line":1158},[76,144634,51580],{"class":51269},[76,144636,15539],{"class":86},[76,144638,144639,144641,144643,144645,144647,144649],{"class":78,"line":1164},[76,144640,70537],{"class":136},[76,144642,51406],{"class":86},[76,144644,534],{"class":136},[76,144646,144588],{"class":82},[76,144648,26036],{"class":86},[76,144650,144593],{"class":146},[76,144652,144653],{"class":78,"line":1178},[76,144654,1529],{"class":86},[76,144656,144657],{"class":78,"line":1184},[76,144658,135982],{"class":86},[76,144660,144661],{"class":78,"line":1275},[76,144662,144545],{"class":146},[76,144664,144665,144667],{"class":78,"line":1281},[76,144666,50604],{"class":51269},[76,144668,15539],{"class":86},[76,144670,144671,144673,144675,144677,144679,144681],{"class":78,"line":1293},[76,144672,70595],{"class":136},[76,144674,51406],{"class":86},[76,144676,144560],{"class":136},[76,144678,416],{"class":82},[76,144680,130384],{"class":86},[76,144682,144567],{"class":146},[76,144684,144685],{"class":78,"line":1576},[76,144686,1529],{"class":86},[76,144688,144689,144691],{"class":78,"line":1581},[76,144690,130369],{"class":1927},[76,144692,15539],{"class":86},[76,144694,144695,144697,144699,144701,144703,144705],{"class":78,"line":1587},[76,144696,70537],{"class":136},[76,144698,51406],{"class":86},[76,144700,534],{"class":136},[76,144702,144588],{"class":82},[76,144704,130384],{"class":86},[76,144706,144593],{"class":146},[76,144708,144709],{"class":78,"line":1592},[76,144710,1529],{"class":86},[21,144712,144713,144714,144717],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23521,144715,144716],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[66,144719,144722],{"className":144720,"code":144721,"language":5154},[5152],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[73,144723,144721],{"__ignoreMap":71},[21,144725,144726],{},"less保存时会自动变成.css文件",[21,144728,144729],{},"好好搞懂上述代码写法",[46,144731,144733],{"id":144732},"_2132-样式导入样式","21.3.2 样式导入样式",[1426,144735],{"style":126377,"src":144736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[46,144738,144740],{"id":144739},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[29,144742,144743],{},[32,144744,144745],{},"准备工作",[1426,144747],{"style":126377,"src":144748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[21,144750,144751,144752],{},"github地址：",[326,144753,144754],{"href":144754,"rel":144755},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23833],[21,144757,144758],{},"下载之后，将index.js文件拖到项目中就可以了",[21,144760,144761,144762],{},"js文件引入到index.html中使用的是",[73,144763,144764],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[29,144766,144767],{"start":96},[32,144768,144769],{},"vscode插件",[1426,144771],{"style":126377,"src":144772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[21,144774,144775],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[21,144777,144778],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1426,144780],{"style":126377,"src":144781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[21,144783,144784],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1426,144786],{"style":126377,"src":144787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[21,144789,144790],{},"修改成75就可以，alt+z为快捷键",[21,144792,144793],{},"index.css：",[66,144795,144796],{"className":126521,"code":144538,"language":126523,"meta":71,"style":71},[73,144797,144798,144802,144808,144822,144826,144832,144846],{"__ignoreMap":71},[76,144799,144800],{"class":78,"line":79},[76,144801,144545],{"class":146},[76,144803,144804,144806],{"class":78,"line":96},[76,144805,50604],{"class":51269},[76,144807,15539],{"class":86},[76,144809,144810,144812,144814,144816,144818,144820],{"class":78,"line":1143},[76,144811,70595],{"class":136},[76,144813,51406],{"class":86},[76,144815,144560],{"class":136},[76,144817,416],{"class":82},[76,144819,130384],{"class":86},[76,144821,144567],{"class":146},[76,144823,144824],{"class":78,"line":1158},[76,144825,1529],{"class":86},[76,144827,144828,144830],{"class":78,"line":1164},[76,144829,130369],{"class":1927},[76,144831,15539],{"class":86},[76,144833,144834,144836,144838,144840,144842,144844],{"class":78,"line":1178},[76,144835,70537],{"class":136},[76,144837,51406],{"class":86},[76,144839,534],{"class":136},[76,144841,144588],{"class":82},[76,144843,130384],{"class":86},[76,144845,144593],{"class":146},[76,144847,144848],{"class":78,"line":1184},[76,144849,1529],{"class":86},[21,144851,144535],{},[66,144853,144854],{"className":126521,"code":126925,"language":126523,"meta":71,"style":71},[73,144855,144856,144862,144874],{"__ignoreMap":71},[76,144857,144858,144860],{"class":78,"line":79},[76,144859,51769],{"class":51269},[76,144861,15539],{"class":86},[76,144863,144864,144866,144868,144870,144872],{"class":78,"line":96},[76,144865,70595],{"class":136},[76,144867,51406],{"class":86},[76,144869,689],{"class":136},[76,144871,51461],{"class":82},[76,144873,1254],{"class":86},[76,144875,144876],{"class":78,"line":1143},[76,144877,1529],{"class":86},[16,144879,144881],{"id":144880},"_214-响应式开发","21.4 响应式开发",[21,144883,144884],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1426,144886],{"style":126377,"src":144887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[21,144889,144890],{},"做法：",[1095,144892,144893,144896],{},[32,144894,144895],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[32,144897,144898],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1426,144900],{"style":126377,"src":144901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[21,144903,144904],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[46,144906,144908],{"id":144907},"_2141-简单代码示范","21.4.1 简单代码示范",[66,144910,144911],{"className":126521,"code":144538,"language":126523,"meta":71,"style":71},[73,144912,144913,144917,144923,144937,144941,144947,144961],{"__ignoreMap":71},[76,144914,144915],{"class":78,"line":79},[76,144916,144545],{"class":146},[76,144918,144919,144921],{"class":78,"line":96},[76,144920,50604],{"class":51269},[76,144922,15539],{"class":86},[76,144924,144925,144927,144929,144931,144933,144935],{"class":78,"line":1143},[76,144926,70595],{"class":136},[76,144928,51406],{"class":86},[76,144930,144560],{"class":136},[76,144932,416],{"class":82},[76,144934,130384],{"class":86},[76,144936,144567],{"class":146},[76,144938,144939],{"class":78,"line":1158},[76,144940,1529],{"class":86},[76,144942,144943,144945],{"class":78,"line":1164},[76,144944,130369],{"class":1927},[76,144946,15539],{"class":86},[76,144948,144949,144951,144953,144955,144957,144959],{"class":78,"line":1178},[76,144950,70537],{"class":136},[76,144952,51406],{"class":86},[76,144954,534],{"class":136},[76,144956,144588],{"class":82},[76,144958,130384],{"class":86},[76,144960,144593],{"class":146},[76,144962,144963],{"class":78,"line":1184},[76,144964,1529],{"class":86},[21,144966,144967],{},"父盒子一般命名为container",[46,144969,144971],{"id":144970},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[21,144973,144974,144975],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[237,144976,144977],{},"使得 Web 开发更加快捷",[1095,144979,144980],{},[32,144981,144982,144983],{},"官网：",[237,144984,144985],{},[326,144986,144987],{"href":144987,"rel":144988},"http:\u002F\u002Fgetbootstrap.com\u002F",[23833],[21,144990,144991],{},"可以直接去官网拿现成的东西",[29,144993,144994],{},[32,144995,144996],{},"Bootstrap的使用",[21,144998,144999],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[21,145001,145002],{},"Bootstrap 使用四步曲：",[21,145004,145005,145008],{},[237,145006,145007],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1426,145010],{"style":126377,"src":145011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[21,145013,145014],{},"打开Bootstrap官网，然后下载",[1426,145016],{"style":126377,"src":145017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1426,145019],{"style":126377,"src":145020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[21,145022,145023],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[21,145025,145026],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[21,145028,145029],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1426,145031],{"style":126377,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[66,145034,145036],{"className":126521,"code":145035,"language":126523,"meta":71,"style":71},".center {\n  color: red;\n}\n",[73,145037,145038,145044,145054],{"__ignoreMap":71},[76,145039,145040,145042],{"class":78,"line":79},[76,145041,126812],{"class":1927},[76,145043,15539],{"class":86},[76,145045,145046,145048,145050,145052],{"class":78,"line":96},[76,145047,70874],{"class":136},[76,145049,51406],{"class":86},[76,145051,57390],{"class":136},[76,145053,1254],{"class":86},[76,145055,145056],{"class":78,"line":1143},[76,145057,1529],{"class":86},[21,145059,145060,145063],{},[73,145061,145062],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1426,145065],{"style":126377,"src":145066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1426,145068],{"style":126377,"src":145069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1426,145071],{"style":126377,"src":145072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[21,145074,145075],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1426,145077],{"style":126377,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[21,145080,145081],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[29,145083,145084],{"start":96},[32,145085,145086],{},"布局容器",[1426,145088],{"style":126377,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[21,145091,145092],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[21,145094,145095],{},"container-fluid用于移动式布局比较方便",[29,145097,145098],{"start":1143},[32,145099,145100,145101],{},"bootstrap ",[237,145102,145103],{},"栅格系统原理",[1426,145105],{"style":126377,"src":145106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[29,145108,145109],{"start":1158},[32,145110,145111],{},[237,145112,145113],{},"栅格选项参数",[1426,145115],{"style":126377,"src":145116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[21,145118,145119],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[21,145121,14600],{},[66,145123,145124],{"className":126521,"code":145035,"language":126523,"meta":71,"style":71},[73,145125,145126,145132,145142],{"__ignoreMap":71},[76,145127,145128,145130],{"class":78,"line":79},[76,145129,126812],{"class":1927},[76,145131,15539],{"class":86},[76,145133,145134,145136,145138,145140],{"class":78,"line":96},[76,145135,70874],{"class":136},[76,145137,51406],{"class":86},[76,145139,57390],{"class":136},[76,145141,1254],{"class":86},[76,145143,145144],{"class":78,"line":1143},[76,145145,1529],{"class":86},[21,145147,135564],{},[1426,145149],{"style":126377,"src":145150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[21,145152,145153],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[21,145155,145156],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[21,145158,145159],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[21,145161,145162],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[21,145164,145165],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[21,145167,145168],{},"汇总展示说明：",[66,145170,145171],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,145172,145173,145177,145191,145195],{"__ignoreMap":71},[76,145174,145175],{"class":78,"line":79},[76,145176,130632],{"class":146},[76,145178,145179,145181,145183,145185,145187,145189],{"class":78,"line":96},[76,145180,998],{"class":86},[76,145182,51580],{"class":51269},[76,145184,53455],{"class":1927},[76,145186,133],{"class":86},[76,145188,130645],{"class":192},[76,145190,51276],{"class":86},[76,145192,145193],{"class":78,"line":1143},[76,145194,130652],{"class":86},[76,145196,145197,145199,145201],{"class":78,"line":1158},[76,145198,51754],{"class":86},[76,145200,51580],{"class":51269},[76,145202,51276],{"class":86},[1426,145204],{"style":126377,"src":145205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[21,145207,145208],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[66,145210,145211],{"className":127268,"code":130625,"language":127270,"meta":71,"style":71},[73,145212,145213,145217,145231,145235],{"__ignoreMap":71},[76,145214,145215],{"class":78,"line":79},[76,145216,130632],{"class":146},[76,145218,145219,145221,145223,145225,145227,145229],{"class":78,"line":96},[76,145220,998],{"class":86},[76,145222,51580],{"class":51269},[76,145224,53455],{"class":1927},[76,145226,133],{"class":86},[76,145228,130645],{"class":192},[76,145230,51276],{"class":86},[76,145232,145233],{"class":78,"line":1143},[76,145234,130652],{"class":86},[76,145236,145237,145239,145241],{"class":78,"line":1158},[76,145238,51754],{"class":86},[76,145240,51580],{"class":51269},[76,145242,51276],{"class":86},[29,145244,145245],{"start":1164},[32,145246,145247],{},[237,145248,145249],{},"列嵌套",[1426,145251],{"style":126377,"src":145252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[21,145254,145255],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[21,145257,145258],{},"没加row内部这样：",[1426,145260],{"style":126377,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[21,145263,145264],{},"加上row之后内部为：",[1426,145266],{"style":126377,"src":145267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[29,145269,145270],{"start":1178},[32,145271,145272],{},[237,145273,145274],{},"列偏移",[1426,145276],{"style":126377,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[21,145279,145280],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[21,145282,145283],{},"要加偏移量，即偏移份数",[21,145285,145286],{},"偏移的份数=12-两个盒子的份数",[29,145288,145289],{"start":1184},[32,145290,145291],{},[237,145292,145293],{},"列排序",[1426,145295],{"style":126377,"src":145296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[21,145298,145299],{},"pull拉左；push推右",[29,145301,145302],{"start":1275},[32,145303,145304],{},[237,145305,145306],{},"响应式工具",[1426,145308],{"style":126377,"src":145309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[21,145311,145312],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[46,145314,145316],{"id":145315},"_2143-响应式小项目","21.4.3 响应式小项目",[21,145318,145319],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[21,145321,145322],{},"ul {",[21,145324,145325],{},"list-style: none;",[21,145327,145328],{},"margin:0;",[21,145330,145331],{},"padding:0; }",[1426,145333],{"style":126377,"src":145334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1426,145336],{"style":126377,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[21,145339,145340],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[21,145342,68858],{},[66,145344,145345],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,145346,145347,145353,145363],{"__ignoreMap":71},[76,145348,145349,145351],{"class":78,"line":79},[76,145350,130369],{"class":1927},[76,145352,15539],{"class":86},[76,145354,145355,145357,145359,145361],{"class":78,"line":96},[76,145356,131001],{"class":136},[76,145358,51406],{"class":86},[76,145360,23704],{"class":136},[76,145362,1254],{"class":86},[76,145364,145365],{"class":78,"line":1143},[76,145366,1529],{"class":86},[21,145368,70422],{},[66,145370,145371],{"className":126521,"code":139191,"language":126523,"meta":71,"style":71},[73,145372,145373,145379,145389],{"__ignoreMap":71},[76,145374,145375,145377],{"class":78,"line":79},[76,145376,130369],{"class":1927},[76,145378,15539],{"class":86},[76,145380,145381,145383,145385,145387],{"class":78,"line":96},[76,145382,131001],{"class":136},[76,145384,51406],{"class":86},[76,145386,23704],{"class":136},[76,145388,1254],{"class":86},[76,145390,145391],{"class":78,"line":1143},[76,145392,1529],{"class":86},[16,145394,145396],{"id":145395},"_215-swiper-插件使用","21.5 swiper 插件使用",[1095,145398,145399,145402,145405],{},[32,145400,145401],{},"下载需要的css和js文件html页面中 引入相关文件",[32,145403,145404],{},"官网找到类似案例，复制html结构，css样式 js 语法",[32,145406,145407],{},"根据需求定制修改模块",[1426,145409],{"style":126377,"src":145410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[21,145412,145413],{},"解压后将这两部分放到项目中",[1426,145415],{"style":126377,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[21,145418,145419],{},"这个插件可以帮助我们实现轮播图效果",[21,145421,145422],{},"用法：",[1426,145424],{"style":126377,"src":145425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[21,145427,145428],{},"找到自己喜欢的",[1426,145430],{"style":126377,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[21,145433,145434],{},"右键，查看网页源代码",[1426,145436],{"style":126377,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[21,145439,145440],{},"复制人家的结构内容",[21,145442,145443],{},"然后去看API文档：",[1426,145445],{"style":126377,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[21,145448,145449],{},"可以看看如何修改样式",[21,145451,145452],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5092,145454,145455],{},"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":71,"searchDepth":96,"depth":96,"links":145457},[145458,145463,145467,145472,145477],{"id":144258,"depth":96,"text":144259,"children":145459},[145460,145461,145462],{"id":144262,"depth":1143,"text":144263},{"id":144272,"depth":1143,"text":144273},{"id":144367,"depth":1143,"text":144368},{"id":144382,"depth":96,"text":144383,"children":145464},[145465,145466],{"id":144404,"depth":1143,"text":144405},{"id":144420,"depth":1143,"text":144421},{"id":144495,"depth":96,"text":144496,"children":145468},[145469,145470,145471],{"id":144508,"depth":1143,"text":144509},{"id":144732,"depth":1143,"text":144733},{"id":144739,"depth":1143,"text":144740},{"id":144880,"depth":96,"text":144881,"children":145473},[145474,145475,145476],{"id":144907,"depth":1143,"text":144908},{"id":144970,"depth":1143,"text":144971},{"id":145315,"depth":1143,"text":145316},{"id":145395,"depth":96,"text":145396},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144250,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145484,"title":145485,"body":145486,"description":23344,"extension":5123,"meta":145706,"navigation":2364,"path":145707,"seo":145708,"stem":145709,"__hash__":145710},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":9,"value":145487,"toc":145702},[145488,145491,145495,145498,145513,145518,145521,145526,145561,145566,145578,145583,145596,145601,145618,145623,145643,145648,145666,145669,145672,145675,145678,145682,145685,145688,145691,145694,145697,145700],[12,145489,145485],{"id":145490},"_22-代码提交与新型相对单位",[16,145492,145494],{"id":145493},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[21,145496,145497],{},"法1：",[29,145499,145500,145507,145510],{},[32,145501,145502,145503],{},"登录网站注册：",[326,145504,145505],{"href":145505,"rel":145506},"https:\u002F\u002Fgitee.com\u002F",[23833],[32,145508,145509],{},"码云创建新的仓库",[32,145511,145512],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1095,145514,145515],{},[32,145516,145517],{},"在网站根目录右键-- Git Bash Here",[1426,145519],{"style":126377,"src":145520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1095,145522,145523],{},[32,145524,145525],{},"如果是第一次利用git提交，请配置好全局选项",[66,145527,145529],{"className":117265,"code":145528,"language":117267,"meta":71,"style":71},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[73,145530,145531,145547],{"__ignoreMap":71},[76,145532,145533,145536,145538,145541,145544],{"class":78,"line":79},[76,145534,145535],{"class":1927},"git",[76,145537,119688],{"class":192},[76,145539,145540],{"class":136}," --global",[76,145542,145543],{"class":192}," user.name",[76,145545,145546],{"class":192}," \"你的名字\"\n",[76,145548,145549,145551,145553,145555,145558],{"class":78,"line":96},[76,145550,145535],{"class":1927},[76,145552,119688],{"class":192},[76,145554,145540],{"class":136},[76,145556,145557],{"class":192}," user.email",[76,145559,145560],{"class":192}," \"你的邮箱\"\n",[1095,145562,145563],{},[32,145564,145565],{},"初始化仓库",[66,145567,145569],{"className":117265,"code":145568,"language":117267,"meta":71,"style":71},"git init\n",[73,145570,145571],{"__ignoreMap":71},[76,145572,145573,145575],{"class":78,"line":79},[76,145574,145535],{"class":1927},[76,145576,145577],{"class":192}," init\n",[1095,145579,145580],{},[32,145581,145582],{},"把本地文件放到暂存区",[66,145584,145586],{"className":117265,"code":145585,"language":117267,"meta":71,"style":71},"git add .\n",[73,145587,145588],{"__ignoreMap":71},[76,145589,145590,145592,145594],{"class":78,"line":79},[76,145591,145535],{"class":1927},[76,145593,5176],{"class":192},[76,145595,28710],{"class":192},[1095,145597,145598],{},[32,145599,145600],{},"把本地文件放到本地仓库里面",[66,145602,145604],{"className":117265,"code":145603,"language":117267,"meta":71,"style":71},"git commit -m \"first commit\"\n",[73,145605,145606],{"__ignoreMap":71},[76,145607,145608,145610,145613,145615],{"class":78,"line":79},[76,145609,145535],{"class":1927},[76,145611,145612],{"class":192}," commit",[76,145614,100851],{"class":136},[76,145616,145617],{"class":192}," \"first commit\"\n",[1095,145619,145620],{},[32,145621,145622],{},"链接远程仓库",[66,145624,145626],{"className":117265,"code":145625,"language":117267,"meta":71,"style":71},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[73,145627,145628],{"__ignoreMap":71},[76,145629,145630,145632,145635,145637,145640],{"class":78,"line":79},[76,145631,145535],{"class":1927},[76,145633,145634],{"class":192}," remote",[76,145636,5176],{"class":192},[76,145638,145639],{"class":192}," origin",[76,145641,145642],{"class":192}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1095,145644,145645],{},[32,145646,145647],{},"把本地仓库的文件推送到远程仓库 push",[66,145649,145651],{"className":117265,"code":145650,"language":117267,"meta":71,"style":71},"git push -u origin master\n",[73,145652,145653],{"__ignoreMap":71},[76,145654,145655,145657,145659,145661,145663],{"class":78,"line":79},[76,145656,145535],{"class":1927},[76,145658,28985],{"class":192},[76,145660,28259],{"class":136},[76,145662,145639],{"class":192},[76,145664,145665],{"class":192}," master\n",[1426,145667],{"style":126377,"src":145668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[21,145670,145671],{},"上方方法暂未实现，后边学完git后在整",[21,145673,145674],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1426,145676],{"style":126377,"src":145677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[16,145679,145681],{"id":145680},"_222-新型相对单位","22.2 新型相对单位",[1426,145683],{"style":126377,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1426,145686],{"style":126377,"src":145687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[21,145689,145690],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[21,145692,145693],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1426,145695],{"style":126377,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[21,145698,145699],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5092,145701,23926],{},{"title":71,"searchDepth":96,"depth":96,"links":145703},[145704,145705],{"id":145493,"depth":96,"text":145494},{"id":145680,"depth":96,"text":145681},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145485,"description":23344},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145712,"title":145713,"body":145714,"description":145718,"extension":5123,"meta":145719,"navigation":2364,"path":145720,"seo":145721,"stem":145722,"__hash__":145723},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":9,"value":145715,"toc":145716},[],{"title":71,"searchDepth":96,"depth":96,"links":145717},[],"自己正经开始学编程的第一门语言！",{"category":92808},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145713,"description":145718},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145725,"title":145726,"body":145727,"description":23344,"extension":5123,"meta":146874,"navigation":2364,"path":146875,"seo":146876,"stem":146877,"__hash__":146878},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":9,"value":145728,"toc":146850},[145729,145732,145736,145739,145742,145767,145770,145776,145780,145783,145810,145813,145853,145856,145868,145871,145877,145881,145885,145912,145929,145936,145940,145943,145969,145972,145976,145979,146019,146022,146039,146045,146049,146054,146098,146101,146119,146122,146190,146194,146201,146204,146219,146222,146231,146234,146245,146248,146257,146260,146277,146280,146295,146299,146303,146306,146308,146328,146332,146335,146338,146349,146352,146358,146362,146368,146395,146398,146410,146413,146424,146427,146433,146437,146443,146493,146496,146538,146541,146574,146577,146611,146615,146618,146638,146641,146677,146680,146693,146697,146701,146707,146710,146723,146727,146730,146736,146739,146743,146746,146749,146798,146802,146818,146824,146831,146837,146847],[12,145730,145726],{"id":145731},"_1-python环境与第一个程序",[16,145733,145735],{"id":145734},"_11-什么是python","1.1 什么是Python",[21,145737,145738],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[21,145740,145741],{},"理解 Python 时抓住三个关键词：",[29,145743,145744,145747,145750],{},[32,145745,145746],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[32,145748,145749],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[32,145751,145752,145753,300,145756,300,145759,300,145762,300,145764,28354],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[73,145754,145755],{},"os",[73,145757,145758],{},"sys",[73,145760,145761],{},"json",[73,145763,57829],{},[73,145765,145766],{},"datetime",[21,145768,145769],{},"Python 程序的运行链路：",[66,145771,145774],{"className":145772,"code":145773,"language":5154,"meta":71},[5152],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[73,145775,145773],{"__ignoreMap":71},[16,145777,145779],{"id":145778},"_12-python解释器","1.2 Python解释器",[21,145781,145782],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[66,145784,145786],{"className":23790,"code":145785,"language":23792,"meta":71,"style":71},"python --version\npython3 --version\npython\npython3\n",[73,145787,145788,145794,145800,145805],{"__ignoreMap":71},[76,145789,145790,145792],{"class":78,"line":79},[76,145791,30349],{"class":1927},[76,145793,26262],{"class":136},[76,145795,145796,145798],{"class":78,"line":96},[76,145797,100848],{"class":1927},[76,145799,26262],{"class":136},[76,145801,145802],{"class":78,"line":1143},[76,145803,145804],{"class":1927},"python\n",[76,145806,145807],{"class":78,"line":1158},[76,145808,145809],{"class":1927},"python3\n",[21,145811,145812],{},"进入交互模式后，可以直接输入表达式：",[66,145814,145816],{"className":30347,"code":145815,"language":30349,"meta":71,"style":71},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[73,145817,145818,145829,145834,145848],{"__ignoreMap":71},[76,145819,145820,145823,145825,145827],{"class":78,"line":79},[76,145821,145822],{"class":82},">>>",[76,145824,25087],{"class":136},[76,145826,45535],{"class":82},[76,145828,47692],{"class":136},[76,145830,145831],{"class":78,"line":96},[76,145832,145833],{"class":136},"3\n",[76,145835,145836,145838,145841,145843,145846],{"class":78,"line":1143},[76,145837,145822],{"class":82},[76,145839,145840],{"class":136}," print",[76,145842,87],{"class":86},[76,145844,145845],{"class":192},"\"hello python\"",[76,145847,93],{"class":86},[76,145849,145850],{"class":78,"line":1158},[76,145851,145852],{"class":86},"hello python\n",[21,145854,145855],{},"退出交互模式：",[66,145857,145859],{"className":30347,"code":145858,"language":30349,"meta":71,"style":71},"exit()\n",[73,145860,145861],{"__ignoreMap":71},[76,145862,145863,145866],{"class":78,"line":79},[76,145864,145865],{"class":136},"exit",[76,145867,1940],{"class":86},[21,145869,145870],{},"或使用快捷键：",[66,145872,145875],{"className":145873,"code":145874,"language":5154,"meta":71},[5152],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[73,145876,145874],{"__ignoreMap":71},[16,145878,145880],{"id":145879},"_13-安装python","1.3 安装Python",[46,145882,145884],{"id":145883},"_131-windows安装","1.3.1 Windows安装",[29,145886,145887,145894,145897,145903,145909],{},[32,145888,145889,145890],{},"打开 Python 官网：",[326,145891,145892],{"href":145892,"rel":145893},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23833],[32,145895,145896],{},"下载 Windows Installer。",[32,145898,145899,145900,28354],{},"安装时勾选 ",[73,145901,145902],{},"Add Python to PATH",[32,145904,145905,145906,28354],{},"点击 ",[73,145907,145908],{},"Install Now",[32,145910,145911],{},"安装完成后打开命令提示符验证：",[66,145913,145915],{"className":23790,"code":145914,"language":23792,"meta":71,"style":71},"python --version\npip --version\n",[73,145916,145917,145923],{"__ignoreMap":71},[76,145918,145919,145921],{"class":78,"line":79},[76,145920,30349],{"class":1927},[76,145922,26262],{"class":136},[76,145924,145925,145927],{"class":78,"line":96},[76,145926,23799],{"class":1927},[76,145928,26262],{"class":136},[21,145930,145931,145932,145935],{},"如果提示 ",[73,145933,145934],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[46,145937,145939],{"id":145938},"_132-macos安装","1.3.2 macOS安装",[21,145941,145942],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[66,145944,145946],{"className":23790,"code":145945,"language":23792,"meta":71,"style":71},"brew install python\npython3 --version\npip3 --version\n",[73,145947,145948,145957,145963],{"__ignoreMap":71},[76,145949,145950,145953,145955],{"class":78,"line":79},[76,145951,145952],{"class":1927},"brew",[76,145954,23802],{"class":192},[76,145956,124287],{"class":192},[76,145958,145959,145961],{"class":78,"line":96},[76,145960,100848],{"class":1927},[76,145962,26262],{"class":136},[76,145964,145965,145967],{"class":78,"line":1143},[76,145966,119669],{"class":1927},[76,145968,26262],{"class":136},[21,145970,145971],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[46,145973,145975],{"id":145974},"_133-linux安装","1.3.3 Linux安装",[21,145977,145978],{},"Ubuntu\u002FDebian：",[66,145980,145982],{"className":23790,"code":145981,"language":23792,"meta":71,"style":71},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[73,145983,145984,145992,146007,146013],{"__ignoreMap":71},[76,145985,145986,145988,145990],{"class":78,"line":79},[76,145987,24545],{"class":1927},[76,145989,117286],{"class":192},[76,145991,26211],{"class":192},[76,145993,145994,145996,145998,146000,146002,146004],{"class":78,"line":96},[76,145995,24545],{"class":1927},[76,145997,117286],{"class":192},[76,145999,23802],{"class":192},[76,146001,104372],{"class":192},[76,146003,100767],{"class":192},[76,146005,146006],{"class":192}," python3-venv\n",[76,146008,146009,146011],{"class":78,"line":1143},[76,146010,100848],{"class":1927},[76,146012,26262],{"class":136},[76,146014,146015,146017],{"class":78,"line":1158},[76,146016,119669],{"class":1927},[76,146018,26262],{"class":136},[21,146020,146021],{},"Fedora：",[66,146023,146025],{"className":23790,"code":146024,"language":23792,"meta":71,"style":71},"sudo dnf install python3 python3-pip\n",[73,146026,146027],{"__ignoreMap":71},[76,146028,146029,146031,146033,146035,146037],{"class":78,"line":79},[76,146030,24545],{"class":1927},[76,146032,26284],{"class":192},[76,146034,23802],{"class":192},[76,146036,104372],{"class":192},[76,146038,119734],{"class":192},[21,146040,146041,146042,146044],{},"Linux 上通常使用 ",[73,146043,100848],{}," 命令，避免和系统旧版本 Python 冲突。",[16,146046,146048],{"id":146047},"_14-pip包管理器","1.4 pip包管理器",[21,146050,146051,146053],{},[73,146052,23799],{}," 用来安装第三方库。",[66,146055,146057],{"className":23790,"code":146056,"language":23792,"meta":71,"style":71},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[73,146058,146059,146068,146077,146085,146091],{"__ignoreMap":71},[76,146060,146061,146063,146065],{"class":78,"line":79},[76,146062,23799],{"class":1927},[76,146064,23802],{"class":192},[76,146066,146067],{"class":192}," requests\n",[76,146069,146070,146072,146075],{"class":78,"line":96},[76,146071,23799],{"class":1927},[76,146073,146074],{"class":192}," uninstall",[76,146076,146067],{"class":192},[76,146078,146079,146081,146083],{"class":78,"line":1143},[76,146080,23799],{"class":1927},[76,146082,117543],{"class":192},[76,146084,146067],{"class":192},[76,146086,146087,146089],{"class":78,"line":1158},[76,146088,23799],{"class":1927},[76,146090,118924],{"class":192},[76,146092,146093,146095],{"class":78,"line":1164},[76,146094,23799],{"class":1927},[76,146096,146097],{"class":192}," freeze\n",[21,146099,146100],{},"国内网络较慢时可以临时使用镜像：",[66,146102,146104],{"className":23790,"code":146103,"language":23792,"meta":71,"style":71},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[73,146105,146106],{"__ignoreMap":71},[76,146107,146108,146110,146112,146115,146117],{"class":78,"line":79},[76,146109,23799],{"class":1927},[76,146111,23802],{"class":192},[76,146113,146114],{"class":192}," requests",[76,146116,26399],{"class":136},[76,146118,119697],{"class":192},[21,146120,146121],{},"常见第三方库：",[225,146123,146124,146133],{},[228,146125,146126],{},[231,146127,146128,146131],{},[234,146129,146130],{},"库",[234,146132,102665],{},[272,146134,146135,146143,146150,146158,146166,146174,146182],{},[231,146136,146137,146140],{},[277,146138,146139],{},"requests",[277,146141,146142],{},"网络请求",[231,146144,146145,146147],{},[277,146146,100595],{},[277,146148,146149],{},"数值计算",[231,146151,146152,146155],{},[277,146153,146154],{},"pandas",[277,146156,146157],{},"表格数据处理",[231,146159,146160,146163],{},[277,146161,146162],{},"matplotlib",[277,146164,146165],{},"绘图",[231,146167,146168,146171],{},[277,146169,146170],{},"pyecharts",[277,146172,146173],{},"ECharts 图表",[231,146175,146176,146179],{},[277,146177,146178],{},"flask",[277,146180,146181],{},"Web 后端",[231,146183,146184,146187],{},[277,146185,146186],{},"pytest",[277,146188,146189],{},"自动化测试",[16,146191,146193],{"id":146192},"_15-虚拟环境","1.5 虚拟环境",[21,146195,146196,146197,146200],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[73,146198,146199],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[21,146202,146203],{},"创建虚拟环境：",[66,146205,146207],{"className":23790,"code":146206,"language":23792,"meta":71,"style":71},"python -m venv .venv\n",[73,146208,146209],{"__ignoreMap":71},[76,146210,146211,146213,146215,146217],{"class":78,"line":79},[76,146212,30349],{"class":1927},[76,146214,100851],{"class":136},[76,146216,100854],{"class":192},[76,146218,100857],{"class":192},[21,146220,146221],{},"Windows 激活：",[66,146223,146225],{"className":23790,"code":146224,"language":23792,"meta":71,"style":71},".venv\\Scripts\\activate\n",[73,146226,146227],{"__ignoreMap":71},[76,146228,146229],{"class":78,"line":79},[76,146230,146224],{"class":1927},[21,146232,146233],{},"macOS\u002FLinux 激活：",[66,146235,146237],{"className":23790,"code":146236,"language":23792,"meta":71,"style":71},"source .venv\u002Fbin\u002Factivate\n",[73,146238,146239],{"__ignoreMap":71},[76,146240,146241,146243],{"class":78,"line":79},[76,146242,100862],{"class":136},[76,146244,100865],{"class":192},[21,146246,146247],{},"退出虚拟环境：",[66,146249,146251],{"className":23790,"code":146250,"language":23792,"meta":71,"style":71},"deactivate\n",[73,146252,146253],{"__ignoreMap":71},[76,146254,146255],{"class":78,"line":79},[76,146256,146250],{"class":1927},[21,146258,146259],{},"保存依赖：",[66,146261,146263],{"className":23790,"code":146262,"language":23792,"meta":71,"style":71},"pip freeze > requirements.txt\n",[73,146264,146265],{"__ignoreMap":71},[76,146266,146267,146269,146272,146274],{"class":78,"line":79},[76,146268,23799],{"class":1927},[76,146270,146271],{"class":192}," freeze",[76,146273,26191],{"class":82},[76,146275,146276],{"class":192}," requirements.txt\n",[21,146278,146279],{},"安装依赖：",[66,146281,146283],{"className":23790,"code":146282,"language":23792,"meta":71,"style":71},"pip install -r requirements.txt\n",[73,146284,146285],{"__ignoreMap":71},[76,146286,146287,146289,146291,146293],{"class":78,"line":79},[76,146288,23799],{"class":1927},[76,146290,23802],{"class":192},[76,146292,119608],{"class":136},[76,146294,146276],{"class":192},[16,146296,146298],{"id":146297},"_16-开发工具","1.6 开发工具",[46,146300,146302],{"id":146301},"_161-pycharm","1.6.1 PyCharm",[21,146304,146305],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[21,146307,122031],{},[29,146309,146310,146313,146316,146322,146325],{},[32,146311,146312],{},"New Project：创建项目。",[32,146314,146315],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[32,146317,146318,146319,125952],{},"New Python File：创建 ",[73,146320,146321],{},".py",[32,146323,146324],{},"Run：运行当前文件。",[32,146326,146327],{},"Debug：断点调试。",[46,146329,146331],{"id":146330},"_162-vs-code","1.6.2 VS Code",[21,146333,146334],{},"VS Code 轻量，适合后续多语言开发。",[21,146336,146337],{},"建议安装插件：",[29,146339,146340,146343,146346],{},[32,146341,146342],{},"Python。",[32,146344,146345],{},"Pylance。",[32,146347,146348],{},"Jupyter。",[21,146350,146351],{},"选择解释器：",[66,146353,146356],{"className":146354,"code":146355,"language":5154,"meta":71},[5152],"Ctrl + Shift + P -> Python: Select Interpreter\n",[73,146357,146355],{"__ignoreMap":71},[16,146359,146361],{"id":146360},"_17-第一个python程序","1.7 第一个Python程序",[21,146363,146364,146365,24587],{},"创建文件 ",[73,146366,146367],{},"hello.py",[66,146369,146371],{"className":30347,"code":146370,"language":30349,"meta":71,"style":71},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[73,146372,146373,146384],{"__ignoreMap":71},[76,146374,146375,146377,146379,146382],{"class":78,"line":79},[76,146376,30384],{"class":136},[76,146378,87],{"class":86},[76,146380,146381],{"class":192},"\"Hello World\"",[76,146383,93],{"class":86},[76,146385,146386,146388,146390,146393],{"class":78,"line":96},[76,146387,30384],{"class":136},[76,146389,87],{"class":86},[76,146391,146392],{"class":192},"\"你好，Python\"",[76,146394,93],{"class":86},[21,146396,146397],{},"在终端运行：",[66,146399,146401],{"className":23790,"code":146400,"language":23792,"meta":71,"style":71},"python hello.py\n",[73,146402,146403],{"__ignoreMap":71},[76,146404,146405,146407],{"class":78,"line":79},[76,146406,30349],{"class":1927},[76,146408,146409],{"class":192}," hello.py\n",[21,146411,146412],{},"或：",[66,146414,146416],{"className":23790,"code":146415,"language":23792,"meta":71,"style":71},"python3 hello.py\n",[73,146417,146418],{"__ignoreMap":71},[76,146419,146420,146422],{"class":78,"line":79},[76,146421,100848],{"class":1927},[76,146423,146409],{"class":192},[21,146425,146426],{},"输出：",[66,146428,146431],{"className":146429,"code":146430,"language":5154,"meta":71},[5152],"Hello World\n你好，Python\n",[73,146432,146430],{"__ignoreMap":71},[16,146434,146436],{"id":146435},"_18-print函数","1.8 print函数",[21,146438,146439,146442],{},[73,146440,146441],{},"print()"," 用来输出内容。",[66,146444,146446],{"className":30347,"code":146445,"language":30349,"meta":71,"style":71},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[73,146447,146448,146458,146468,146478],{"__ignoreMap":71},[76,146449,146450,146452,146454,146456],{"class":78,"line":79},[76,146451,30384],{"class":136},[76,146453,87],{"class":86},[76,146455,5811],{"class":192},[76,146457,93],{"class":86},[76,146459,146460,146462,146464,146466],{"class":78,"line":96},[76,146461,30384],{"class":136},[76,146463,87],{"class":86},[76,146465,399],{"class":136},[76,146467,93],{"class":86},[76,146469,146470,146472,146474,146476],{"class":78,"line":1143},[76,146471,30384],{"class":136},[76,146473,87],{"class":86},[76,146475,137],{"class":136},[76,146477,93],{"class":86},[76,146479,146480,146482,146484,146487,146489,146491],{"class":78,"line":1158},[76,146481,30384],{"class":136},[76,146483,87],{"class":86},[76,146485,146486],{"class":192},"\"年龄:\"",[76,146488,12402],{"class":86},[76,146490,738],{"class":136},[76,146492,93],{"class":86},[21,146494,146495],{},"多个内容用逗号隔开，默认中间加空格：",[66,146497,146499],{"className":30347,"code":146498,"language":30349,"meta":71,"style":71},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[73,146500,146501,146511,146521],{"__ignoreMap":71},[76,146502,146503,146506,146508],{"class":78,"line":79},[76,146504,146505],{"class":86},"name ",[76,146507,133],{"class":82},[76,146509,146510],{"class":192}," \"张三\"\n",[76,146512,146513,146516,146518],{"class":78,"line":96},[76,146514,146515],{"class":86},"age ",[76,146517,133],{"class":82},[76,146519,146520],{"class":136}," 18\n",[76,146522,146523,146525,146527,146530,146533,146535],{"class":78,"line":1143},[76,146524,30384],{"class":136},[76,146526,87],{"class":86},[76,146528,146529],{"class":192},"\"姓名:\"",[76,146531,146532],{"class":86},", name, ",[76,146534,146486],{"class":192},[76,146536,146537],{"class":86},", age)\n",[21,146539,146540],{},"修改分隔符：",[66,146542,146544],{"className":30347,"code":146543,"language":30349,"meta":71,"style":71},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[73,146545,146546],{"__ignoreMap":71},[76,146547,146548,146550,146552,146555,146557,146559,146561,146563,146565,146568,146570,146572],{"class":78,"line":79},[76,146549,30384],{"class":136},[76,146551,87],{"class":86},[76,146553,146554],{"class":192},"\"2024\"",[76,146556,12402],{"class":86},[76,146558,54285],{"class":192},[76,146560,12402],{"class":86},[76,146562,54285],{"class":192},[76,146564,12402],{"class":86},[76,146566,146567],{"class":5183},"sep",[76,146569,133],{"class":82},[76,146571,32452],{"class":192},[76,146573,93],{"class":86},[21,146575,146576],{},"修改结尾符：",[66,146578,146580],{"className":30347,"code":146579,"language":30349,"meta":71,"style":71},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[73,146581,146582,146600],{"__ignoreMap":71},[76,146583,146584,146586,146588,146590,146592,146594,146596,146598],{"class":78,"line":79},[76,146585,30384],{"class":136},[76,146587,87],{"class":86},[76,146589,5811],{"class":192},[76,146591,12402],{"class":86},[76,146593,45770],{"class":5183},[76,146595,133],{"class":82},[76,146597,4324],{"class":192},[76,146599,93],{"class":86},[76,146601,146602,146604,146606,146609],{"class":78,"line":96},[76,146603,30384],{"class":136},[76,146605,87],{"class":86},[76,146607,146608],{"class":192},"\"python\"",[76,146610,93],{"class":86},[16,146612,146614],{"id":146613},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[21,146616,146617],{},"交互运行适合临时验证：",[66,146619,146621],{"className":30347,"code":146620,"language":30349,"meta":71,"style":71},">>> 10 * 3\n30\n",[73,146622,146623,146633],{"__ignoreMap":71},[76,146624,146625,146627,146629,146631],{"class":78,"line":79},[76,146626,145822],{"class":82},[76,146628,2002],{"class":136},[76,146630,6485],{"class":82},[76,146632,120005],{"class":136},[76,146634,146635],{"class":78,"line":96},[76,146636,146637],{"class":136},"30\n",[21,146639,146640],{},"脚本运行适合保存程序：",[66,146642,146644],{"className":30347,"code":146643,"language":30349,"meta":71,"style":71},"price = 8\ncount = 5\nprint(price * count)\n",[73,146645,146646,146656,146665],{"__ignoreMap":71},[76,146647,146648,146651,146653],{"class":78,"line":79},[76,146649,146650],{"class":86},"price ",[76,146652,133],{"class":82},[76,146654,146655],{"class":136}," 8\n",[76,146657,146658,146661,146663],{"class":78,"line":96},[76,146659,146660],{"class":86},"count ",[76,146662,133],{"class":82},[76,146664,54396],{"class":136},[76,146666,146667,146669,146672,146674],{"class":78,"line":1143},[76,146668,30384],{"class":136},[76,146670,146671],{"class":86},"(price ",[76,146673,543],{"class":82},[76,146675,146676],{"class":86}," count)\n",[21,146678,146679],{},"实际学习中推荐：",[29,146681,146682,146685,146690],{},[32,146683,146684],{},"临时试一个语法，用交互模式。",[32,146686,146687,146688,125952],{},"写完整练习，用 ",[73,146689,146321],{},[32,146691,146692],{},"写项目，用独立目录和虚拟环境。",[16,146694,146696],{"id":146695},"_110-常见错误","1.10 常见错误",[46,146698,146700],{"id":146699},"_1101-命令找不到","1.10.1 命令找不到",[66,146702,146705],{"className":146703,"code":146704,"language":5154,"meta":71},[5152],"python: command not found\n",[73,146706,146704],{"__ignoreMap":71},[21,146708,146709],{},"原因：",[29,146711,146712,146715,146718],{},[32,146713,146714],{},"没安装 Python。",[32,146716,146717],{},"PATH 没配置。",[32,146719,146720,146721,28354],{},"Linux\u002FmacOS 应该使用 ",[73,146722,100848],{},[46,146724,146726],{"id":146725},"_1102-文件名冲突","1.10.2 文件名冲突",[21,146728,146729],{},"不要把文件命名为：",[66,146731,146734],{"className":146732,"code":146733,"language":5154,"meta":71},[5152],"random.py\njson.py\ntime.py\nrequests.py\n",[73,146735,146733],{"__ignoreMap":71},[21,146737,146738],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[46,146740,146742],{"id":146741},"_1103-中文乱码","1.10.3 中文乱码",[21,146744,146745],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[21,146747,146748],{},"如果读写文件出现乱码，要明确指定编码：",[66,146750,146752],{"className":30347,"code":146751,"language":30349,"meta":71,"style":71},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[73,146753,146754,146788],{"__ignoreMap":71},[76,146755,146756,146758,146761,146763,146766,146768,146771,146773,146776,146778,146781,146783,146785],{"class":78,"line":79},[76,146757,107802],{"class":82},[76,146759,146760],{"class":136}," open",[76,146762,87],{"class":86},[76,146764,146765],{"class":192},"\"data.txt\"",[76,146767,12402],{"class":86},[76,146769,146770],{"class":192},"\"r\"",[76,146772,12402],{"class":86},[76,146774,146775],{"class":5183},"encoding",[76,146777,133],{"class":82},[76,146779,146780],{"class":192},"\"utf-8\"",[76,146782,13681],{"class":86},[76,146784,31352],{"class":82},[76,146786,146787],{"class":86}," f:\n",[76,146789,146790,146793,146795],{"class":78,"line":96},[76,146791,146792],{"class":86},"    content ",[76,146794,133],{"class":82},[76,146796,146797],{"class":86}," f.read()\n",[16,146799,146801],{"id":146800},"_111-本章练习","1.11 本章练习",[29,146803,146804,146807,146813],{},[32,146805,146806],{},"安装 Python，并在终端输出版本号。",[32,146808,146809,146810,146812],{},"新建 ",[73,146811,146367],{},"，输出自己的姓名、年龄、学习目标。",[32,146814,104335,146815,146817],{},[73,146816,146441],{}," 输出下面格式：",[66,146819,146822],{"className":146820,"code":146821,"language":5154,"meta":71},[5152],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[73,146823,146821],{"__ignoreMap":71},[29,146825,146826],{"start":1158},[32,146827,104335,146828,146830],{},[73,146829,146567],{}," 输出日期：",[66,146832,146835],{"className":146833,"code":146834,"language":5154,"meta":71},[5152],"2024-10-10\n",[73,146836,146834],{"__ignoreMap":71},[29,146838,146839],{"start":1164},[32,146840,104335,146841,146843,146844,146846],{},[73,146842,45770],{}," 让两次 ",[73,146845,146441],{}," 输出在同一行。",[5092,146848,146849],{},"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":71,"searchDepth":96,"depth":96,"links":146851},[146852,146853,146854,146859,146860,146861,146865,146866,146867,146868,146873],{"id":145734,"depth":96,"text":145735},{"id":145778,"depth":96,"text":145779},{"id":145879,"depth":96,"text":145880,"children":146855},[146856,146857,146858],{"id":145883,"depth":1143,"text":145884},{"id":145938,"depth":1143,"text":145939},{"id":145974,"depth":1143,"text":145975},{"id":146047,"depth":96,"text":146048},{"id":146192,"depth":96,"text":146193},{"id":146297,"depth":96,"text":146298,"children":146862},[146863,146864],{"id":146301,"depth":1143,"text":146302},{"id":146330,"depth":1143,"text":146331},{"id":146360,"depth":96,"text":146361},{"id":146435,"depth":96,"text":146436},{"id":146613,"depth":96,"text":146614},{"id":146695,"depth":96,"text":146696,"children":146869},[146870,146871,146872],{"id":146699,"depth":1143,"text":146700},{"id":146725,"depth":1143,"text":146726},{"id":146741,"depth":1143,"text":146742},{"id":146800,"depth":96,"text":146801},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145726,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146880,"title":146881,"body":146882,"description":23344,"extension":5123,"meta":149286,"navigation":2364,"path":149287,"seo":149288,"stem":149289,"__hash__":149290},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":9,"value":146883,"toc":149271},[146884,146887,146891,146894,146897,146914,146917,146959,146962,146966,146969,146972,147009,147012,147046,147049,147141,147145,147159,147162,147189,147192,147196,147299,147306,147309,147326,147330,147337,147526,147529,147602,147606,147609,147693,147696,147728,147732,147936,147939,147943,147949,148051,148054,148310,148314,148317,148320,148334,148336,148522,148526,148888,148894,148898,148901,149025,149028,149207,149210,149214,149247,149251,149268],[12,146885,146881],{"id":146886},"_10-json与pyecharts折线图",[16,146888,146890],{"id":146889},"_101-数据可视化","10.1 数据可视化",[21,146892,146893],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[21,146895,146896],{},"常见图表：",[29,146898,146899,146902,146905,146908,146911],{},[32,146900,146901],{},"折线图：看趋势。",[32,146903,146904],{},"柱状图：看分类对比。",[32,146906,146907],{},"饼图：看占比。",[32,146909,146910],{},"地图：看地域分布。",[32,146912,146913],{},"散点图：看两个变量之间的关系。",[21,146915,146916],{},"Python 可视化常用库：",[225,146918,146919,146927],{},[228,146920,146921],{},[231,146922,146923,146925],{},[234,146924,146130],{},[234,146926,23708],{},[272,146928,146929,146936,146944,146951],{},[231,146930,146931,146933],{},[277,146932,146162],{},[277,146934,146935],{},"基础、经典、可定制",[231,146937,146938,146941],{},[277,146939,146940],{},"seaborn",[277,146942,146943],{},"统计图表更美观",[231,146945,146946,146948],{},[277,146947,146170],{},[277,146949,146950],{},"生成交互式网页图表",[231,146952,146953,146956],{},[277,146954,146955],{},"plotly",[277,146957,146958],{},"交互图表能力强",[21,146960,146961],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[16,146963,146965],{"id":146964},"_102-json回顾","10.2 JSON回顾",[21,146967,146968],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[21,146970,146971],{},"Python 字典：",[66,146973,146975],{"className":30347,"code":146974,"language":30349,"meta":71,"style":71},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[73,146976,146977,146985,146996,147005],{"__ignoreMap":71},[76,146978,146979,146981,146983],{"class":78,"line":79},[76,146980,101627],{"class":86},[76,146982,133],{"class":82},[76,146984,15539],{"class":86},[76,146986,146987,146990,146992,146994],{"class":78,"line":96},[76,146988,146989],{"class":192},"    \"name\"",[76,146991,51406],{"class":86},[76,146993,69238],{"class":192},[76,146995,31435],{"class":86},[76,146997,146998,147001,147003],{"class":78,"line":1143},[76,146999,147000],{"class":192},"    \"value\"",[76,147002,51406],{"class":86},[76,147004,97427],{"class":136},[76,147006,147007],{"class":78,"line":1158},[76,147008,1529],{"class":86},[21,147010,147011],{},"JSON 字符串：",[66,147013,147016],{"className":147014,"code":147015,"language":145761,"meta":71,"style":71},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[73,147017,147018,147022,147033,147042],{"__ignoreMap":71},[76,147019,147020],{"class":78,"line":79},[76,147021,1510],{"class":86},[76,147023,147024,147027,147029,147031],{"class":78,"line":96},[76,147025,147026],{"class":136},"  \"name\"",[76,147028,51406],{"class":86},[76,147030,69238],{"class":192},[76,147032,31435],{"class":86},[76,147034,147035,147038,147040],{"class":78,"line":1143},[76,147036,147037],{"class":136},"  \"value\"",[76,147039,51406],{"class":86},[76,147041,97427],{"class":136},[76,147043,147044],{"class":78,"line":1158},[76,147045,1529],{"class":86},[21,147047,147048],{},"Python 与 JSON 的转换：",[66,147050,147052],{"className":30347,"code":147051,"language":30349,"meta":71,"style":71},"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",[73,147053,147054,147061,147065,147090,147094,147113,147120,147124,147134],{"__ignoreMap":71},[76,147055,147056,147058],{"class":78,"line":79},[76,147057,30361],{"class":82},[76,147059,147060],{"class":86}," json\n",[76,147062,147063],{"class":78,"line":96},[76,147064,2365],{"emptyLinePlaceholder":2364},[76,147066,147067,147069,147071,147073,147075,147077,147079,147081,147084,147086,147088],{"class":78,"line":1143},[76,147068,101627],{"class":86},[76,147070,133],{"class":82},[76,147072,4413],{"class":86},[76,147074,62648],{"class":192},[76,147076,51406],{"class":86},[76,147078,69238],{"class":192},[76,147080,12402],{"class":86},[76,147082,147083],{"class":192},"\"value\"",[76,147085,51406],{"class":86},[76,147087,399],{"class":136},[76,147089,1529],{"class":86},[76,147091,147092],{"class":78,"line":1158},[76,147093,2365],{"emptyLinePlaceholder":2364},[76,147095,147096,147099,147101,147104,147107,147109,147111],{"class":78,"line":1164},[76,147097,147098],{"class":86},"json_text ",[76,147100,133],{"class":82},[76,147102,147103],{"class":86}," json.dumps(data, ",[76,147105,147106],{"class":5183},"ensure_ascii",[76,147108,133],{"class":82},[76,147110,33956],{"class":136},[76,147112,93],{"class":86},[76,147114,147115,147117],{"class":78,"line":1178},[76,147116,30384],{"class":136},[76,147118,147119],{"class":86},"(json_text)\n",[76,147121,147122],{"class":78,"line":1184},[76,147123,2365],{"emptyLinePlaceholder":2364},[76,147125,147126,147129,147131],{"class":78,"line":1275},[76,147127,147128],{"class":86},"new_data ",[76,147130,133],{"class":82},[76,147132,147133],{"class":86}," json.loads(json_text)\n",[76,147135,147136,147138],{"class":78,"line":1281},[76,147137,30384],{"class":136},[76,147139,147140],{"class":86},"(new_data)\n",[16,147142,147144],{"id":147143},"_103-安装pyecharts","10.3 安装pyecharts",[66,147146,147148],{"className":23790,"code":147147,"language":23792,"meta":71,"style":71},"pip install pyecharts\n",[73,147149,147150],{"__ignoreMap":71},[76,147151,147152,147154,147156],{"class":78,"line":79},[76,147153,23799],{"class":1927},[76,147155,23802],{"class":192},[76,147157,147158],{"class":192}," pyecharts\n",[21,147160,147161],{},"验证：",[66,147163,147165],{"className":30347,"code":147164,"language":30349,"meta":71,"style":71},"import pyecharts\n\nprint(pyecharts.__version__)\n",[73,147166,147167,147173,147177],{"__ignoreMap":71},[76,147168,147169,147171],{"class":78,"line":79},[76,147170,30361],{"class":82},[76,147172,147158],{"class":86},[76,147174,147175],{"class":78,"line":96},[76,147176,2365],{"emptyLinePlaceholder":2364},[76,147178,147179,147181,147184,147187],{"class":78,"line":1143},[76,147180,30384],{"class":136},[76,147182,147183],{"class":86},"(pyecharts.",[76,147185,147186],{"class":136},"__version__",[76,147188,93],{"class":86},[21,147190,147191],{},"如果使用虚拟环境，要先激活环境再安装。",[16,147193,147195],{"id":147194},"_104-第一个折线图","10.4 第一个折线图",[66,147197,147199],{"className":30347,"code":147198,"language":30349,"meta":71,"style":71},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[73,147200,147201,147213,147217,147227,147257,147289],{"__ignoreMap":71},[76,147202,147203,147205,147208,147210],{"class":78,"line":79},[76,147204,30706],{"class":82},[76,147206,147207],{"class":86}," pyecharts.charts ",[76,147209,30361],{"class":82},[76,147211,147212],{"class":86}," Line\n",[76,147214,147215],{"class":78,"line":96},[76,147216,2365],{"emptyLinePlaceholder":2364},[76,147218,147219,147222,147224],{"class":78,"line":1143},[76,147220,147221],{"class":86},"line ",[76,147223,133],{"class":82},[76,147225,147226],{"class":86}," Line()\n",[76,147228,147229,147232,147235,147237,147240,147242,147245,147247,147250,147252,147255],{"class":78,"line":1158},[76,147230,147231],{"class":86},"line.add_xaxis([",[76,147233,147234],{"class":192},"\"周一\"",[76,147236,12402],{"class":86},[76,147238,147239],{"class":192},"\"周二\"",[76,147241,12402],{"class":86},[76,147243,147244],{"class":192},"\"周三\"",[76,147246,12402],{"class":86},[76,147248,147249],{"class":192},"\"周四\"",[76,147251,12402],{"class":86},[76,147253,147254],{"class":192},"\"周五\"",[76,147256,4622],{"class":86},[76,147258,147259,147262,147265,147267,147269,147271,147273,147275,147277,147279,147282,147284,147287],{"class":78,"line":1164},[76,147260,147261],{"class":86},"line.add_yaxis(",[76,147263,147264],{"class":192},"\"销售额\"",[76,147266,77487],{"class":86},[76,147268,399],{"class":136},[76,147270,12402],{"class":86},[76,147272,905],{"class":136},[76,147274,12402],{"class":86},[76,147276,950],{"class":136},[76,147278,12402],{"class":86},[76,147280,147281],{"class":136},"150",[76,147283,12402],{"class":86},[76,147285,147286],{"class":136},"180",[76,147288,4622],{"class":86},[76,147290,147291,147294,147297],{"class":78,"line":1178},[76,147292,147293],{"class":86},"line.render(",[76,147295,147296],{"class":192},"\"line.html\"",[76,147298,93],{"class":86},[21,147300,147301,147302,147305],{},"运行后会生成 ",[73,147303,147304],{},"line.html","，用浏览器打开即可看到图表。",[21,147307,147308],{},"核心步骤：",[29,147310,147311,147314,147317,147320,147323],{},[32,147312,147313],{},"导入图表类。",[32,147315,147316],{},"创建图表对象。",[32,147318,147319],{},"添加 x 轴数据。",[32,147321,147322],{},"添加 y 轴数据。",[32,147324,147325],{},"渲染为 HTML。",[16,147327,147329],{"id":147328},"_105-全局配置","10.5 全局配置",[21,147331,147332,147333,147336],{},"常用配置在 ",[73,147334,147335],{},"pyecharts.options"," 中。",[66,147338,147340],{"className":30347,"code":147339,"language":30349,"meta":71,"style":71},"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",[73,147341,147342,147359,147369,147373,147381,147405,147433,147438,147457,147476,147494,147514,147518],{"__ignoreMap":71},[76,147343,147344,147346,147349,147351,147354,147356],{"class":78,"line":79},[76,147345,30706],{"class":82},[76,147347,147348],{"class":86}," pyecharts ",[76,147350,30361],{"class":82},[76,147352,147353],{"class":86}," options ",[76,147355,31352],{"class":82},[76,147357,147358],{"class":86}," opts\n",[76,147360,147361,147363,147365,147367],{"class":78,"line":96},[76,147362,30706],{"class":82},[76,147364,147207],{"class":86},[76,147366,30361],{"class":82},[76,147368,147212],{"class":86},[76,147370,147371],{"class":78,"line":1143},[76,147372,2365],{"emptyLinePlaceholder":2364},[76,147374,147375,147377,147379],{"class":78,"line":1158},[76,147376,147221],{"class":86},[76,147378,133],{"class":82},[76,147380,147226],{"class":86},[76,147382,147383,147385,147387,147389,147391,147393,147395,147397,147399,147401,147403],{"class":78,"line":1164},[76,147384,147231],{"class":86},[76,147386,147234],{"class":192},[76,147388,12402],{"class":86},[76,147390,147239],{"class":192},[76,147392,12402],{"class":86},[76,147394,147244],{"class":192},[76,147396,12402],{"class":86},[76,147398,147249],{"class":192},[76,147400,12402],{"class":86},[76,147402,147254],{"class":192},[76,147404,4622],{"class":86},[76,147406,147407,147409,147411,147413,147415,147417,147419,147421,147423,147425,147427,147429,147431],{"class":78,"line":1178},[76,147408,147261],{"class":86},[76,147410,147264],{"class":192},[76,147412,77487],{"class":86},[76,147414,399],{"class":136},[76,147416,12402],{"class":86},[76,147418,905],{"class":136},[76,147420,12402],{"class":86},[76,147422,950],{"class":136},[76,147424,12402],{"class":86},[76,147426,147281],{"class":136},[76,147428,12402],{"class":86},[76,147430,147286],{"class":136},[76,147432,4622],{"class":86},[76,147434,147435],{"class":78,"line":1184},[76,147436,147437],{"class":86},"line.set_global_opts(\n",[76,147439,147440,147443,147445,147448,147450,147452,147455],{"class":78,"line":1275},[76,147441,147442],{"class":5183},"    title_opts",[76,147444,133],{"class":82},[76,147446,147447],{"class":86},"opts.TitleOpts(",[76,147449,51376],{"class":5183},[76,147451,133],{"class":82},[76,147453,147454],{"class":192},"\"一周销售额\"",[76,147456,38016],{"class":86},[76,147458,147459,147462,147464,147467,147469,147471,147474],{"class":78,"line":1281},[76,147460,147461],{"class":5183},"    xaxis_opts",[76,147463,133],{"class":82},[76,147465,147466],{"class":86},"opts.AxisOpts(",[76,147468,79779],{"class":5183},[76,147470,133],{"class":82},[76,147472,147473],{"class":192},"\"日期\"",[76,147475,38016],{"class":86},[76,147477,147478,147481,147483,147485,147487,147489,147492],{"class":78,"line":1293},[76,147479,147480],{"class":5183},"    yaxis_opts",[76,147482,133],{"class":82},[76,147484,147466],{"class":86},[76,147486,79779],{"class":5183},[76,147488,133],{"class":82},[76,147490,147491],{"class":192},"\"金额\"",[76,147493,38016],{"class":86},[76,147495,147496,147499,147501,147504,147507,147509,147512],{"class":78,"line":1576},[76,147497,147498],{"class":5183},"    tooltip_opts",[76,147500,133],{"class":82},[76,147502,147503],{"class":86},"opts.TooltipOpts(",[76,147505,147506],{"class":5183},"trigger",[76,147508,133],{"class":82},[76,147510,147511],{"class":192},"\"axis\"",[76,147513,38016],{"class":86},[76,147515,147516],{"class":78,"line":1581},[76,147517,93],{"class":86},[76,147519,147520,147522,147524],{"class":78,"line":1587},[76,147521,147293],{"class":86},[76,147523,147296],{"class":192},[76,147525,93],{"class":86},[21,147527,147528],{},"常见全局配置：",[225,147530,147531,147540],{},[228,147532,147533],{},[231,147534,147535,147538],{},[234,147536,147537],{},"配置",[234,147539,102665],{},[272,147541,147542,147552,147562,147572,147582,147592],{},[231,147543,147544,147549],{},[277,147545,147546],{},[73,147547,147548],{},"TitleOpts",[277,147550,147551],{},"标题",[231,147553,147554,147559],{},[277,147555,147556],{},[73,147557,147558],{},"LegendOpts",[277,147560,147561],{},"图例",[231,147563,147564,147569],{},[277,147565,147566],{},[73,147567,147568],{},"TooltipOpts",[277,147570,147571],{},"提示框",[231,147573,147574,147579],{},[277,147575,147576],{},[73,147577,147578],{},"AxisOpts",[277,147580,147581],{},"坐标轴",[231,147583,147584,147589],{},[277,147585,147586],{},[73,147587,147588],{},"VisualMapOpts",[277,147590,147591],{},"视觉映射",[231,147593,147594,147599],{},[277,147595,147596],{},[73,147597,147598],{},"DataZoomOpts",[277,147600,147601],{},"区域缩放",[16,147603,147605],{"id":147604},"_106-系列配置","10.6 系列配置",[21,147607,147608],{},"系列配置作用于某一组数据。",[66,147610,147612],{"className":30347,"code":147611,"language":30349,"meta":71,"style":71},"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",[73,147613,147614,147619,147630,147659,147670,147689],{"__ignoreMap":71},[76,147615,147616],{"class":78,"line":79},[76,147617,147618],{"class":86},"line.add_yaxis(\n",[76,147620,147621,147624,147626,147628],{"class":78,"line":96},[76,147622,147623],{"class":5183},"    series_name",[76,147625,133],{"class":82},[76,147627,147264],{"class":192},[76,147629,31435],{"class":86},[76,147631,147632,147635,147637,147639,147641,147643,147645,147647,147649,147651,147653,147655,147657],{"class":78,"line":1143},[76,147633,147634],{"class":5183},"    y_axis",[76,147636,133],{"class":82},[76,147638,978],{"class":86},[76,147640,399],{"class":136},[76,147642,12402],{"class":86},[76,147644,905],{"class":136},[76,147646,12402],{"class":86},[76,147648,950],{"class":136},[76,147650,12402],{"class":86},[76,147652,147281],{"class":136},[76,147654,12402],{"class":86},[76,147656,147286],{"class":136},[76,147658,87805],{"class":86},[76,147660,147661,147664,147666,147668],{"class":78,"line":1158},[76,147662,147663],{"class":5183},"    is_smooth",[76,147665,133],{"class":82},[76,147667,31445],{"class":136},[76,147669,31435],{"class":86},[76,147671,147672,147675,147677,147680,147683,147685,147687],{"class":78,"line":1164},[76,147673,147674],{"class":5183},"    label_opts",[76,147676,133],{"class":82},[76,147678,147679],{"class":86},"opts.LabelOpts(",[76,147681,147682],{"class":5183},"is_show",[76,147684,133],{"class":82},[76,147686,31445],{"class":136},[76,147688,38016],{"class":86},[76,147690,147691],{"class":78,"line":1178},[76,147692,93],{"class":86},[21,147694,147695],{},"常用参数：",[29,147697,147698,147704,147710,147716,147722],{},[32,147699,147700,147703],{},[73,147701,147702],{},"series_name","：系列名称。",[32,147705,147706,147709],{},[73,147707,147708],{},"y_axis","：y 轴数据。",[32,147711,147712,147715],{},[73,147713,147714],{},"is_smooth","：是否平滑曲线。",[32,147717,147718,147721],{},[73,147719,147720],{},"label_opts","：标签配置。",[32,147723,147724,147727],{},[73,147725,147726],{},"symbol_size","：标记点大小。",[16,147729,147731],{"id":147730},"_107-多条折线","10.7 多条折线",[66,147733,147735],{"className":30347,"code":147734,"language":30349,"meta":71,"style":71},"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",[73,147736,147737,147751,147761,147765,147794,147798,147806,147811,147849,147886,147890,147907,147923,147927],{"__ignoreMap":71},[76,147738,147739,147741,147743,147745,147747,147749],{"class":78,"line":79},[76,147740,30706],{"class":82},[76,147742,147348],{"class":86},[76,147744,30361],{"class":82},[76,147746,147353],{"class":86},[76,147748,31352],{"class":82},[76,147750,147358],{"class":86},[76,147752,147753,147755,147757,147759],{"class":78,"line":96},[76,147754,30706],{"class":82},[76,147756,147207],{"class":86},[76,147758,30361],{"class":82},[76,147760,147212],{"class":86},[76,147762,147763],{"class":78,"line":1143},[76,147764,2365],{"emptyLinePlaceholder":2364},[76,147766,147767,147770,147772,147774,147776,147778,147780,147782,147784,147786,147788,147790,147792],{"class":78,"line":1158},[76,147768,147769],{"class":86},"dates ",[76,147771,133],{"class":82},[76,147773,52195],{"class":86},[76,147775,147234],{"class":192},[76,147777,12402],{"class":86},[76,147779,147239],{"class":192},[76,147781,12402],{"class":86},[76,147783,147244],{"class":192},[76,147785,12402],{"class":86},[76,147787,147249],{"class":192},[76,147789,12402],{"class":86},[76,147791,147254],{"class":192},[76,147793,33215],{"class":86},[76,147795,147796],{"class":78,"line":1164},[76,147797,2365],{"emptyLinePlaceholder":2364},[76,147799,147800,147802,147804],{"class":78,"line":1178},[76,147801,147221],{"class":86},[76,147803,133],{"class":82},[76,147805,147226],{"class":86},[76,147807,147808],{"class":78,"line":1184},[76,147809,147810],{"class":86},"line.add_xaxis(dates)\n",[76,147812,147813,147815,147818,147820,147822,147824,147827,147829,147831,147833,147835,147837,147839,147841,147843,147845,147847],{"class":78,"line":1275},[76,147814,147261],{"class":86},[76,147816,147817],{"class":192},"\"线上销售\"",[76,147819,77487],{"class":86},[76,147821,399],{"class":136},[76,147823,12402],{"class":86},[76,147825,147826],{"class":136},"130",[76,147828,12402],{"class":86},[76,147830,905],{"class":136},[76,147832,12402],{"class":86},[76,147834,21015],{"class":136},[76,147836,12402],{"class":86},[76,147838,1686],{"class":136},[76,147840,112171],{"class":86},[76,147842,147714],{"class":5183},[76,147844,133],{"class":82},[76,147846,31445],{"class":136},[76,147848,93],{"class":86},[76,147850,147851,147853,147856,147858,147860,147862,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884],{"class":78,"line":1281},[76,147852,147261],{"class":86},[76,147854,147855],{"class":192},"\"线下销售\"",[76,147857,77487],{"class":86},[76,147859,700],{"class":136},[76,147861,12402],{"class":86},[76,147863,950],{"class":136},[76,147865,12402],{"class":86},[76,147867,399],{"class":136},[76,147869,12402],{"class":86},[76,147871,905],{"class":136},[76,147873,12402],{"class":86},[76,147875,147281],{"class":136},[76,147877,112171],{"class":86},[76,147879,147714],{"class":5183},[76,147881,133],{"class":82},[76,147883,31445],{"class":136},[76,147885,93],{"class":86},[76,147887,147888],{"class":78,"line":1293},[76,147889,147437],{"class":86},[76,147891,147892,147894,147896,147898,147900,147902,147905],{"class":78,"line":1576},[76,147893,147442],{"class":5183},[76,147895,133],{"class":82},[76,147897,147447],{"class":86},[76,147899,51376],{"class":5183},[76,147901,133],{"class":82},[76,147903,147904],{"class":192},"\"线上线下销售趋势\"",[76,147906,38016],{"class":86},[76,147908,147909,147911,147913,147915,147917,147919,147921],{"class":78,"line":1581},[76,147910,147498],{"class":5183},[76,147912,133],{"class":82},[76,147914,147503],{"class":86},[76,147916,147506],{"class":5183},[76,147918,133],{"class":82},[76,147920,147511],{"class":192},[76,147922,38016],{"class":86},[76,147924,147925],{"class":78,"line":1587},[76,147926,93],{"class":86},[76,147928,147929,147931,147934],{"class":78,"line":1592},[76,147930,147293],{"class":86},[76,147932,147933],{"class":192},"\"sales.html\"",[76,147935,93],{"class":86},[21,147937,147938],{},"多条折线适合比较不同指标或不同地区。",[16,147940,147942],{"id":147941},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[21,147944,147945,147946,24587],{},"假设 ",[73,147947,147948],{},"sales.json",[66,147950,147952],{"className":147014,"code":147951,"language":145761,"meta":71,"style":71},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[73,147953,147954,147959,147991,148019,148047],{"__ignoreMap":71},[76,147955,147956],{"class":78,"line":79},[76,147957,147958],{"class":86},"[\n",[76,147960,147961,147964,147967,147969,147971,147973,147976,147978,147980,147982,147985,147987,147989],{"class":78,"line":96},[76,147962,147963],{"class":86},"  {",[76,147965,147966],{"class":136},"\"date\"",[76,147968,51406],{"class":86},[76,147970,147234],{"class":192},[76,147972,12402],{"class":86},[76,147974,147975],{"class":136},"\"online\"",[76,147977,51406],{"class":86},[76,147979,399],{"class":136},[76,147981,12402],{"class":86},[76,147983,147984],{"class":136},"\"offline\"",[76,147986,51406],{"class":86},[76,147988,700],{"class":136},[76,147990,4895],{"class":86},[76,147992,147993,147995,147997,147999,148001,148003,148005,148007,148009,148011,148013,148015,148017],{"class":78,"line":1143},[76,147994,147963],{"class":86},[76,147996,147966],{"class":136},[76,147998,51406],{"class":86},[76,148000,147239],{"class":192},[76,148002,12402],{"class":86},[76,148004,147975],{"class":136},[76,148006,51406],{"class":86},[76,148008,147826],{"class":136},[76,148010,12402],{"class":86},[76,148012,147984],{"class":136},[76,148014,51406],{"class":86},[76,148016,950],{"class":136},[76,148018,4895],{"class":86},[76,148020,148021,148023,148025,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045],{"class":78,"line":1158},[76,148022,147963],{"class":86},[76,148024,147966],{"class":136},[76,148026,51406],{"class":86},[76,148028,147244],{"class":192},[76,148030,12402],{"class":86},[76,148032,147975],{"class":136},[76,148034,51406],{"class":86},[76,148036,905],{"class":136},[76,148038,12402],{"class":86},[76,148040,147984],{"class":136},[76,148042,51406],{"class":86},[76,148044,399],{"class":136},[76,148046,1529],{"class":86},[76,148048,148049],{"class":78,"line":1164},[76,148050,33215],{"class":86},[21,148052,148053],{},"读取并绘图：",[66,148055,148057],{"className":30347,"code":148056,"language":30349,"meta":71,"style":71},"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",[73,148058,148059,148065,148079,148089,148093,148125,148138,148142,148150,148159,148168,148172,148184,148193,148202,148211,148215,148223,148227,148244,148261,148265,148282,148298,148302],{"__ignoreMap":71},[76,148060,148061,148063],{"class":78,"line":79},[76,148062,30361],{"class":82},[76,148064,147060],{"class":86},[76,148066,148067,148069,148071,148073,148075,148077],{"class":78,"line":96},[76,148068,30706],{"class":82},[76,148070,147348],{"class":86},[76,148072,30361],{"class":82},[76,148074,147353],{"class":86},[76,148076,31352],{"class":82},[76,148078,147358],{"class":86},[76,148080,148081,148083,148085,148087],{"class":78,"line":1143},[76,148082,30706],{"class":82},[76,148084,147207],{"class":86},[76,148086,30361],{"class":82},[76,148088,147212],{"class":86},[76,148090,148091],{"class":78,"line":1158},[76,148092,2365],{"emptyLinePlaceholder":2364},[76,148094,148095,148097,148099,148101,148104,148106,148108,148110,148112,148114,148116,148118,148120,148123],{"class":78,"line":1164},[76,148096,107802],{"class":82},[76,148098,146760],{"class":136},[76,148100,87],{"class":86},[76,148102,148103],{"class":192},"\"sales.json\"",[76,148105,12402],{"class":86},[76,148107,146770],{"class":192},[76,148109,12402],{"class":86},[76,148111,146775],{"class":5183},[76,148113,133],{"class":82},[76,148115,146780],{"class":192},[76,148117,13681],{"class":86},[76,148119,31352],{"class":82},[76,148121,148122],{"class":5183}," file",[76,148124,3704],{"class":86},[76,148126,148127,148129,148131,148134,148136],{"class":78,"line":1178},[76,148128,101390],{"class":86},[76,148130,133],{"class":82},[76,148132,148133],{"class":86}," json.load(",[76,148135,45323],{"class":5183},[76,148137,93],{"class":86},[76,148139,148140],{"class":78,"line":1184},[76,148141,2365],{"emptyLinePlaceholder":2364},[76,148143,148144,148146,148148],{"class":78,"line":1275},[76,148145,147769],{"class":86},[76,148147,133],{"class":82},[76,148149,51807],{"class":86},[76,148151,148152,148155,148157],{"class":78,"line":1281},[76,148153,148154],{"class":86},"online_sales ",[76,148156,133],{"class":82},[76,148158,51807],{"class":86},[76,148160,148161,148164,148166],{"class":78,"line":1293},[76,148162,148163],{"class":86},"offline_sales ",[76,148165,133],{"class":82},[76,148167,51807],{"class":86},[76,148169,148170],{"class":78,"line":1576},[76,148171,2365],{"emptyLinePlaceholder":2364},[76,148173,148174,148176,148179,148181],{"class":78,"line":1581},[76,148175,2990],{"class":82},[76,148177,148178],{"class":86}," item ",[76,148180,26012],{"class":82},[76,148182,148183],{"class":86}," data:\n",[76,148185,148186,148189,148191],{"class":78,"line":1587},[76,148187,148188],{"class":86},"    dates.append(item[",[76,148190,147966],{"class":192},[76,148192,4622],{"class":86},[76,148194,148195,148198,148200],{"class":78,"line":1592},[76,148196,148197],{"class":86},"    online_sales.append(item[",[76,148199,147975],{"class":192},[76,148201,4622],{"class":86},[76,148203,148204,148207,148209],{"class":78,"line":1606},[76,148205,148206],{"class":86},"    offline_sales.append(item[",[76,148208,147984],{"class":192},[76,148210,4622],{"class":86},[76,148212,148213],{"class":78,"line":1611},[76,148214,2365],{"emptyLinePlaceholder":2364},[76,148216,148217,148219,148221],{"class":78,"line":1617},[76,148218,147221],{"class":86},[76,148220,133],{"class":82},[76,148222,147226],{"class":86},[76,148224,148225],{"class":78,"line":1638},[76,148226,147810],{"class":86},[76,148228,148229,148231,148233,148236,148238,148240,148242],{"class":78,"line":1643},[76,148230,147261],{"class":86},[76,148232,147817],{"class":192},[76,148234,148235],{"class":86},", online_sales, ",[76,148237,147714],{"class":5183},[76,148239,133],{"class":82},[76,148241,31445],{"class":136},[76,148243,93],{"class":86},[76,148245,148246,148248,148250,148253,148255,148257,148259],{"class":78,"line":1657},[76,148247,147261],{"class":86},[76,148249,147855],{"class":192},[76,148251,148252],{"class":86},", offline_sales, ",[76,148254,147714],{"class":5183},[76,148256,133],{"class":82},[76,148258,31445],{"class":136},[76,148260,93],{"class":86},[76,148262,148263],{"class":78,"line":1662},[76,148264,147437],{"class":86},[76,148266,148267,148269,148271,148273,148275,148277,148280],{"class":78,"line":1691},[76,148268,147442],{"class":5183},[76,148270,133],{"class":82},[76,148272,147447],{"class":86},[76,148274,51376],{"class":5183},[76,148276,133],{"class":82},[76,148278,148279],{"class":192},"\"销售趋势\"",[76,148281,38016],{"class":86},[76,148283,148284,148286,148288,148290,148292,148294,148296],{"class":78,"line":1696},[76,148285,147498],{"class":5183},[76,148287,133],{"class":82},[76,148289,147503],{"class":86},[76,148291,147506],{"class":5183},[76,148293,133],{"class":82},[76,148295,147511],{"class":192},[76,148297,38016],{"class":86},[76,148299,148300],{"class":78,"line":1713},[76,148301,93],{"class":86},[76,148303,148304,148306,148308],{"class":78,"line":1718},[76,148305,147293],{"class":86},[76,148307,147933],{"class":192},[76,148309,93],{"class":86},[16,148311,148313],{"id":148312},"_109-数据清洗","10.9 数据清洗",[21,148315,148316],{},"真实数据经常不整齐，需要清洗。",[21,148318,148319],{},"常见问题：",[29,148321,148322,148325,148328,148331],{},[32,148323,148324],{},"数字是字符串。",[32,148326,148327],{},"字段缺失。",[32,148329,148330],{},"空值。",[32,148332,148333],{},"日期格式不统一。",[21,148335,15102],{},[66,148337,148339],{"className":30347,"code":148338,"language":30349,"meta":71,"style":71},"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",[73,148340,148341,148350,148373,148393,148414,148418,148422,148430,148439,148443,148454,148468,148477,148482,148486,148494,148504,148508,148515],{"__ignoreMap":71},[76,148342,148343,148346,148348],{"class":78,"line":79},[76,148344,148345],{"class":86},"raw_data ",[76,148347,133],{"class":82},[76,148349,55416],{"class":86},[76,148351,148352,148355,148357,148359,148361,148363,148366,148368,148371],{"class":78,"line":96},[76,148353,148354],{"class":86},"    {",[76,148356,147966],{"class":192},[76,148358,51406],{"class":86},[76,148360,147234],{"class":192},[76,148362,12402],{"class":86},[76,148364,148365],{"class":192},"\"sales\"",[76,148367,51406],{"class":86},[76,148369,148370],{"class":192},"\"100\"",[76,148372,4895],{"class":86},[76,148374,148375,148377,148379,148381,148383,148385,148387,148389,148391],{"class":78,"line":1143},[76,148376,148354],{"class":86},[76,148378,147966],{"class":192},[76,148380,51406],{"class":86},[76,148382,147239],{"class":192},[76,148384,12402],{"class":86},[76,148386,148365],{"class":192},[76,148388,51406],{"class":86},[76,148390,7619],{"class":192},[76,148392,4895],{"class":86},[76,148394,148395,148397,148399,148401,148403,148405,148407,148409,148412],{"class":78,"line":1158},[76,148396,148354],{"class":86},[76,148398,147966],{"class":192},[76,148400,51406],{"class":86},[76,148402,147244],{"class":192},[76,148404,12402],{"class":86},[76,148406,148365],{"class":192},[76,148408,51406],{"class":86},[76,148410,148411],{"class":192},"\"120\"",[76,148413,4895],{"class":86},[76,148415,148416],{"class":78,"line":1164},[76,148417,33215],{"class":86},[76,148419,148420],{"class":78,"line":1178},[76,148421,2365],{"emptyLinePlaceholder":2364},[76,148423,148424,148426,148428],{"class":78,"line":1184},[76,148425,147769],{"class":86},[76,148427,133],{"class":82},[76,148429,51807],{"class":86},[76,148431,148432,148435,148437],{"class":78,"line":1275},[76,148433,148434],{"class":86},"sales ",[76,148436,133],{"class":82},[76,148438,51807],{"class":86},[76,148440,148441],{"class":78,"line":1281},[76,148442,2365],{"emptyLinePlaceholder":2364},[76,148444,148445,148447,148449,148451],{"class":78,"line":1293},[76,148446,2990],{"class":82},[76,148448,148178],{"class":86},[76,148450,26012],{"class":82},[76,148452,148453],{"class":86}," raw_data:\n",[76,148455,148456,148459,148461,148464,148466],{"class":78,"line":1576},[76,148457,148458],{"class":86},"    value ",[76,148460,133],{"class":82},[76,148462,148463],{"class":86}," item.get(",[76,148465,148365],{"class":192},[76,148467,93],{"class":86},[76,148469,148470,148472,148474],{"class":78,"line":1581},[76,148471,3066],{"class":82},[76,148473,38899],{"class":82},[76,148475,148476],{"class":86}," value:\n",[76,148478,148479],{"class":78,"line":1587},[76,148480,148481],{"class":82},"        continue\n",[76,148483,148484],{"class":78,"line":1592},[76,148485,2365],{"emptyLinePlaceholder":2364},[76,148487,148488,148490,148492],{"class":78,"line":1606},[76,148489,148188],{"class":86},[76,148491,147966],{"class":192},[76,148493,4622],{"class":86},[76,148495,148496,148499,148501],{"class":78,"line":1611},[76,148497,148498],{"class":86},"    sales.append(",[76,148500,90],{"class":136},[76,148502,148503],{"class":86},"(value))\n",[76,148505,148506],{"class":78,"line":1617},[76,148507,2365],{"emptyLinePlaceholder":2364},[76,148509,148510,148512],{"class":78,"line":1638},[76,148511,30384],{"class":136},[76,148513,148514],{"class":86},"(dates)\n",[76,148516,148517,148519],{"class":78,"line":1643},[76,148518,30384],{"class":136},[76,148520,148521],{"class":86},"(sales)\n",[16,148523,148525],{"id":148524},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[66,148527,148529],{"className":30347,"code":148528,"language":30349,"meta":71,"style":71},"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",[73,148530,148531,148545,148555,148559,148567,148588,148610,148632,148654,148676,148680,148684,148706,148727,148731,148739,148743,148747,148757,148766,148776,148792,148796,148800,148817,148833,148849,148865,148875,148879],{"__ignoreMap":71},[76,148532,148533,148535,148537,148539,148541,148543],{"class":78,"line":79},[76,148534,30706],{"class":82},[76,148536,147348],{"class":86},[76,148538,30361],{"class":82},[76,148540,147353],{"class":86},[76,148542,31352],{"class":82},[76,148544,147358],{"class":86},[76,148546,148547,148549,148551,148553],{"class":78,"line":96},[76,148548,30706],{"class":82},[76,148550,147207],{"class":86},[76,148552,30361],{"class":82},[76,148554,147212],{"class":86},[76,148556,148557],{"class":78,"line":1143},[76,148558,2365],{"emptyLinePlaceholder":2364},[76,148560,148561,148563,148565],{"class":78,"line":1158},[76,148562,148434],{"class":86},[76,148564,133],{"class":82},[76,148566,55416],{"class":86},[76,148568,148569,148571,148573,148575,148578,148580,148582,148584,148586],{"class":78,"line":1164},[76,148570,148354],{"class":86},[76,148572,147966],{"class":192},[76,148574,51406],{"class":86},[76,148576,148577],{"class":192},"\"2024-10-01\"",[76,148579,12402],{"class":86},[76,148581,84053],{"class":192},[76,148583,51406],{"class":86},[76,148585,91992],{"class":136},[76,148587,4895],{"class":86},[76,148589,148590,148592,148594,148596,148599,148601,148603,148605,148608],{"class":78,"line":1178},[76,148591,148354],{"class":86},[76,148593,147966],{"class":192},[76,148595,51406],{"class":86},[76,148597,148598],{"class":192},"\"2024-10-02\"",[76,148600,12402],{"class":86},[76,148602,84053],{"class":192},[76,148604,51406],{"class":86},[76,148606,148607],{"class":136},"1800",[76,148609,4895],{"class":86},[76,148611,148612,148614,148616,148618,148621,148623,148625,148627,148630],{"class":78,"line":1184},[76,148613,148354],{"class":86},[76,148615,147966],{"class":192},[76,148617,51406],{"class":86},[76,148619,148620],{"class":192},"\"2024-10-03\"",[76,148622,12402],{"class":86},[76,148624,84053],{"class":192},[76,148626,51406],{"class":86},[76,148628,148629],{"class":136},"1500",[76,148631,4895],{"class":86},[76,148633,148634,148636,148638,148640,148643,148645,148647,148649,148652],{"class":78,"line":1275},[76,148635,148354],{"class":86},[76,148637,147966],{"class":192},[76,148639,51406],{"class":86},[76,148641,148642],{"class":192},"\"2024-10-04\"",[76,148644,12402],{"class":86},[76,148646,84053],{"class":192},[76,148648,51406],{"class":86},[76,148650,148651],{"class":136},"2100",[76,148653,4895],{"class":86},[76,148655,148656,148658,148660,148662,148665,148667,148669,148671,148674],{"class":78,"line":1281},[76,148657,148354],{"class":86},[76,148659,147966],{"class":192},[76,148661,51406],{"class":86},[76,148663,148664],{"class":192},"\"2024-10-05\"",[76,148666,12402],{"class":86},[76,148668,84053],{"class":192},[76,148670,51406],{"class":86},[76,148672,148673],{"class":136},"2600",[76,148675,4895],{"class":86},[76,148677,148678],{"class":78,"line":1293},[76,148679,33215],{"class":86},[76,148681,148682],{"class":78,"line":1576},[76,148683,2365],{"emptyLinePlaceholder":2364},[76,148685,148686,148688,148690,148693,148695,148697,148699,148701,148703],{"class":78,"line":1581},[76,148687,147769],{"class":86},[76,148689,133],{"class":82},[76,148691,148692],{"class":86}," [item[",[76,148694,147966],{"class":192},[76,148696,4408],{"class":86},[76,148698,2990],{"class":82},[76,148700,148178],{"class":86},[76,148702,26012],{"class":82},[76,148704,148705],{"class":86}," sales]\n",[76,148707,148708,148711,148713,148715,148717,148719,148721,148723,148725],{"class":78,"line":1587},[76,148709,148710],{"class":86},"amounts ",[76,148712,133],{"class":82},[76,148714,148692],{"class":86},[76,148716,84053],{"class":192},[76,148718,4408],{"class":86},[76,148720,2990],{"class":82},[76,148722,148178],{"class":86},[76,148724,26012],{"class":82},[76,148726,148705],{"class":86},[76,148728,148729],{"class":78,"line":1592},[76,148730,2365],{"emptyLinePlaceholder":2364},[76,148732,148733,148735,148737],{"class":78,"line":1606},[76,148734,147221],{"class":86},[76,148736,133],{"class":82},[76,148738,147226],{"class":86},[76,148740,148741],{"class":78,"line":1611},[76,148742,147810],{"class":86},[76,148744,148745],{"class":78,"line":1617},[76,148746,147618],{"class":86},[76,148748,148749,148751,148753,148755],{"class":78,"line":1638},[76,148750,147623],{"class":5183},[76,148752,133],{"class":82},[76,148754,147264],{"class":192},[76,148756,31435],{"class":86},[76,148758,148759,148761,148763],{"class":78,"line":1643},[76,148760,147634],{"class":5183},[76,148762,133],{"class":82},[76,148764,148765],{"class":86},"amounts,\n",[76,148767,148768,148770,148772,148774],{"class":78,"line":1657},[76,148769,147663],{"class":5183},[76,148771,133],{"class":82},[76,148773,31445],{"class":136},[76,148775,31435],{"class":86},[76,148777,148778,148780,148782,148784,148786,148788,148790],{"class":78,"line":1662},[76,148779,147674],{"class":5183},[76,148781,133],{"class":82},[76,148783,147679],{"class":86},[76,148785,147682],{"class":5183},[76,148787,133],{"class":82},[76,148789,31445],{"class":136},[76,148791,38016],{"class":86},[76,148793,148794],{"class":78,"line":1691},[76,148795,93],{"class":86},[76,148797,148798],{"class":78,"line":1696},[76,148799,147437],{"class":86},[76,148801,148802,148804,148806,148808,148810,148812,148815],{"class":78,"line":1713},[76,148803,147442],{"class":5183},[76,148805,133],{"class":82},[76,148807,147447],{"class":86},[76,148809,51376],{"class":5183},[76,148811,133],{"class":82},[76,148813,148814],{"class":192},"\"每日销售额\"",[76,148816,38016],{"class":86},[76,148818,148819,148821,148823,148825,148827,148829,148831],{"class":78,"line":1718},[76,148820,147461],{"class":5183},[76,148822,133],{"class":82},[76,148824,147466],{"class":86},[76,148826,79779],{"class":5183},[76,148828,133],{"class":82},[76,148830,147473],{"class":192},[76,148832,38016],{"class":86},[76,148834,148835,148837,148839,148841,148843,148845,148847],{"class":78,"line":1723},[76,148836,147480],{"class":5183},[76,148838,133],{"class":82},[76,148840,147466],{"class":86},[76,148842,79779],{"class":5183},[76,148844,133],{"class":82},[76,148846,147491],{"class":192},[76,148848,38016],{"class":86},[76,148850,148851,148853,148855,148857,148859,148861,148863],{"class":78,"line":1728},[76,148852,147498],{"class":5183},[76,148854,133],{"class":82},[76,148856,147503],{"class":86},[76,148858,147506],{"class":5183},[76,148860,133],{"class":82},[76,148862,147511],{"class":192},[76,148864,38016],{"class":86},[76,148866,148867,148870,148872],{"class":78,"line":1742},[76,148868,148869],{"class":5183},"    datazoom_opts",[76,148871,133],{"class":82},[76,148873,148874],{"class":86},"[opts.DataZoomOpts()],\n",[76,148876,148877],{"class":78,"line":1747},[76,148878,93],{"class":86},[76,148880,148881,148883,148886],{"class":78,"line":2542},[76,148882,147293],{"class":86},[76,148884,148885],{"class":192},"\"daily_sales.html\"",[76,148887,93],{"class":86},[21,148889,148890,148893],{},[73,148891,148892],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[16,148895,148897],{"id":148896},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[21,148899,148900],{},"如果数据结构如下：",[66,148902,148904],{"className":30347,"code":148903,"language":30349,"meta":71,"style":71},"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",[73,148905,148906,148914,148922,148944,148965,148970,148977,148997,149017,149021],{"__ignoreMap":71},[76,148907,148908,148910,148912],{"class":78,"line":79},[76,148909,101627],{"class":86},[76,148911,133],{"class":82},[76,148913,15539],{"class":86},[76,148915,148916,148919],{"class":78,"line":96},[76,148917,148918],{"class":192},"    \"北京\"",[76,148920,148921],{"class":86},": [\n",[76,148923,148924,148926,148928,148930,148933,148935,148938,148940,148942],{"class":78,"line":1143},[76,148925,4882],{"class":86},[76,148927,147966],{"class":192},[76,148929,51406],{"class":86},[76,148931,148932],{"class":192},"\"2024-01-01\"",[76,148934,12402],{"class":86},[76,148936,148937],{"class":192},"\"confirm\"",[76,148939,51406],{"class":86},[76,148941,534],{"class":136},[76,148943,4895],{"class":86},[76,148945,148946,148948,148950,148952,148955,148957,148959,148961,148963],{"class":78,"line":1158},[76,148947,4882],{"class":86},[76,148949,147966],{"class":192},[76,148951,51406],{"class":86},[76,148953,148954],{"class":192},"\"2024-01-02\"",[76,148956,12402],{"class":86},[76,148958,148937],{"class":192},[76,148960,51406],{"class":86},[76,148962,586],{"class":136},[76,148964,4895],{"class":86},[76,148966,148967],{"class":78,"line":1164},[76,148968,148969],{"class":86},"    ],\n",[76,148971,148972,148975],{"class":78,"line":1178},[76,148973,148974],{"class":192},"    \"上海\"",[76,148976,148921],{"class":86},[76,148978,148979,148981,148983,148985,148987,148989,148991,148993,148995],{"class":78,"line":1184},[76,148980,4882],{"class":86},[76,148982,147966],{"class":192},[76,148984,51406],{"class":86},[76,148986,148932],{"class":192},[76,148988,12402],{"class":86},[76,148990,148937],{"class":192},[76,148992,51406],{"class":86},[76,148994,483],{"class":136},[76,148996,4895],{"class":86},[76,148998,148999,149001,149003,149005,149007,149009,149011,149013,149015],{"class":78,"line":1275},[76,149000,4882],{"class":86},[76,149002,147966],{"class":192},[76,149004,51406],{"class":86},[76,149006,148954],{"class":192},[76,149008,12402],{"class":86},[76,149010,148937],{"class":192},[76,149012,51406],{"class":86},[76,149014,611],{"class":136},[76,149016,4895],{"class":86},[76,149018,149019],{"class":78,"line":1281},[76,149020,148969],{"class":86},[76,149022,149023],{"class":78,"line":1293},[76,149024,1529],{"class":86},[21,149026,149027],{},"绘制多地区趋势：",[66,149029,149031],{"className":30347,"code":149030,"language":30349,"meta":71,"style":71},"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",[73,149032,149033,149047,149057,149061,149086,149090,149098,149102,149106,149118,149140,149153,149157,149161,149178,149194,149198],{"__ignoreMap":71},[76,149034,149035,149037,149039,149041,149043,149045],{"class":78,"line":79},[76,149036,30706],{"class":82},[76,149038,147348],{"class":86},[76,149040,30361],{"class":82},[76,149042,147353],{"class":86},[76,149044,31352],{"class":82},[76,149046,147358],{"class":86},[76,149048,149049,149051,149053,149055],{"class":78,"line":96},[76,149050,30706],{"class":82},[76,149052,147207],{"class":86},[76,149054,30361],{"class":82},[76,149056,147212],{"class":86},[76,149058,149059],{"class":78,"line":1143},[76,149060,2365],{"emptyLinePlaceholder":2364},[76,149062,149063,149065,149067,149069,149071,149073,149075,149077,149079,149082,149084],{"class":78,"line":1158},[76,149064,147769],{"class":86},[76,149066,133],{"class":82},[76,149068,148692],{"class":86},[76,149070,147966],{"class":192},[76,149072,4408],{"class":86},[76,149074,2990],{"class":82},[76,149076,148178],{"class":86},[76,149078,26012],{"class":82},[76,149080,149081],{"class":86}," data[",[76,149083,69238],{"class":192},[76,149085,77496],{"class":86},[76,149087,149088],{"class":78,"line":1164},[76,149089,2365],{"emptyLinePlaceholder":2364},[76,149091,149092,149094,149096],{"class":78,"line":1178},[76,149093,147221],{"class":86},[76,149095,133],{"class":82},[76,149097,147226],{"class":86},[76,149099,149100],{"class":78,"line":1184},[76,149101,147810],{"class":86},[76,149103,149104],{"class":78,"line":1275},[76,149105,2365],{"emptyLinePlaceholder":2364},[76,149107,149108,149110,149113,149115],{"class":78,"line":1281},[76,149109,2990],{"class":82},[76,149111,149112],{"class":86}," city, records ",[76,149114,26012],{"class":82},[76,149116,149117],{"class":86}," data.items():\n",[76,149119,149120,149123,149125,149127,149129,149131,149133,149135,149137],{"class":78,"line":1293},[76,149121,149122],{"class":86},"    values ",[76,149124,133],{"class":82},[76,149126,148692],{"class":86},[76,149128,148937],{"class":192},[76,149130,4408],{"class":86},[76,149132,2990],{"class":82},[76,149134,148178],{"class":86},[76,149136,26012],{"class":82},[76,149138,149139],{"class":86}," records]\n",[76,149141,149142,149145,149147,149149,149151],{"class":78,"line":1576},[76,149143,149144],{"class":86},"    line.add_yaxis(city, values, ",[76,149146,147714],{"class":5183},[76,149148,133],{"class":82},[76,149150,31445],{"class":136},[76,149152,93],{"class":86},[76,149154,149155],{"class":78,"line":1581},[76,149156,2365],{"emptyLinePlaceholder":2364},[76,149158,149159],{"class":78,"line":1587},[76,149160,147437],{"class":86},[76,149162,149163,149165,149167,149169,149171,149173,149176],{"class":78,"line":1592},[76,149164,147442],{"class":5183},[76,149166,133],{"class":82},[76,149168,147447],{"class":86},[76,149170,51376],{"class":5183},[76,149172,133],{"class":82},[76,149174,149175],{"class":192},"\"多地区趋势图\"",[76,149177,38016],{"class":86},[76,149179,149180,149182,149184,149186,149188,149190,149192],{"class":78,"line":1606},[76,149181,147498],{"class":5183},[76,149183,133],{"class":82},[76,149185,147503],{"class":86},[76,149187,147506],{"class":5183},[76,149189,133],{"class":82},[76,149191,147511],{"class":192},[76,149193,38016],{"class":86},[76,149195,149196],{"class":78,"line":1611},[76,149197,93],{"class":86},[76,149199,149200,149202,149205],{"class":78,"line":1617},[76,149201,147293],{"class":86},[76,149203,149204],{"class":192},"\"trend.html\"",[76,149206,93],{"class":86},[21,149208,149209],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[16,149211,149213],{"id":149212},"_1012-易错点","10.12 易错点",[29,149215,149216,149222,149228,149238,149244],{},[32,149217,149218,149221],{},[73,149219,149220],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[32,149223,149224,149227],{},[73,149225,149226],{},"render()"," 生成的是 HTML，不是图片。",[32,149229,149230,149231,149234,149235,28354],{},"JSON 字符串用 ",[73,149232,149233],{},"json.loads()","，JSON 文件用 ",[73,149236,149237],{},"json.load()",[32,149239,149240,149241,28354],{},"中文 JSON 保存时加 ",[73,149242,149243],{},"ensure_ascii=False",[32,149245,149246],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[16,149248,149250],{"id":149249},"_1013-本章练习","10.13 本章练习",[29,149252,149253,149256,149259,149262,149265],{},[32,149254,149255],{},"安装 pyecharts 并生成第一个折线图。",[32,149257,149258],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[32,149260,149261],{},"绘制两条折线，对比线上和线下销售额。",[32,149263,149264],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[32,149266,149267],{},"对含有空值的销售数据进行清洗后再绘图。",[5092,149269,149270],{},"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":71,"searchDepth":96,"depth":96,"links":149272},[149273,149274,149275,149276,149277,149278,149279,149280,149281,149282,149283,149284,149285],{"id":146889,"depth":96,"text":146890},{"id":146964,"depth":96,"text":146965},{"id":147143,"depth":96,"text":147144},{"id":147194,"depth":96,"text":147195},{"id":147328,"depth":96,"text":147329},{"id":147604,"depth":96,"text":147605},{"id":147730,"depth":96,"text":147731},{"id":147941,"depth":96,"text":147942},{"id":148312,"depth":96,"text":148313},{"id":148524,"depth":96,"text":148525},{"id":148896,"depth":96,"text":148897},{"id":149212,"depth":96,"text":149213},{"id":149249,"depth":96,"text":149250},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146881,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149292,"title":149293,"body":149294,"description":23344,"extension":5123,"meta":151654,"navigation":2364,"path":151655,"seo":151656,"stem":151657,"__hash__":151658},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":9,"value":149295,"toc":151631},[149296,149299,149303,149306,149309,149385,149388,149479,149482,149486,149489,149533,149546,149550,149553,149620,149623,149627,149630,149714,149722,149726,149731,149872,149875,149886,149892,149898,150012,150016,150019,150022,150275,150278,150282,150285,150389,150392,150396,150547,150551,150558,150671,150675,150678,150784,150787,150791,150794,150825,150828,150933,150936,150940,150944,150954,151022,151026,151033,151097,151100,151104,151110,151206,151215,151219,151543,151552,151556,151584,151588,151628],[12,149297,149293],{"id":149298},"_11-面向对象基础",[16,149300,149302],{"id":149301},"_111-什么是面向对象","11.1 什么是面向对象",[21,149304,149305],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[21,149307,149308],{},"面向过程：",[66,149310,149312],{"className":30347,"code":149311,"language":30349,"meta":71,"style":71},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[73,149313,149314,149323,149331,149335,149345,149376,149380],{"__ignoreMap":71},[76,149315,149316,149318,149320],{"class":78,"line":79},[76,149317,146505],{"class":86},[76,149319,133],{"class":82},[76,149321,149322],{"class":192}," \"小明\"\n",[76,149324,149325,149327,149329],{"class":78,"line":96},[76,149326,146515],{"class":86},[76,149328,133],{"class":82},[76,149330,146520],{"class":136},[76,149332,149333],{"class":78,"line":1143},[76,149334,2365],{"emptyLinePlaceholder":2364},[76,149336,149337,149339,149342],{"class":78,"line":1158},[76,149338,31916],{"class":82},[76,149340,149341],{"class":1927}," introduce",[76,149343,149344],{"class":86},"(name, age):\n",[76,149346,149347,149349,149351,149353,149356,149358,149360,149362,149365,149367,149369,149371,149374],{"class":78,"line":1164},[76,149348,31268],{"class":136},[76,149350,87],{"class":86},[76,149352,140],{"class":82},[76,149354,149355],{"class":192},"\"我叫",[76,149357,984],{"class":136},[76,149359,79779],{"class":86},[76,149361,1034],{"class":136},[76,149363,149364],{"class":192},"，今年",[76,149366,984],{"class":136},[76,149368,70190],{"class":86},[76,149370,1034],{"class":136},[76,149372,149373],{"class":192},"岁\"",[76,149375,93],{"class":86},[76,149377,149378],{"class":78,"line":1178},[76,149379,2365],{"emptyLinePlaceholder":2364},[76,149381,149382],{"class":78,"line":1184},[76,149383,149384],{"class":86},"introduce(name, age)\n",[21,149386,149387],{},"面向对象：",[66,149389,149391],{"className":30347,"code":149390,"language":30349,"meta":71,"style":71},"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",[73,149392,149393,149401,149409,149438,149442,149446,149456,149465,149474],{"__ignoreMap":71},[76,149394,149395,149397,149399],{"class":78,"line":79},[76,149396,14661],{"class":82},[76,149398,7865],{"class":1927},[76,149400,3704],{"class":86},[76,149402,149403,149405,149407],{"class":78,"line":96},[76,149404,30770],{"class":82},[76,149406,149341],{"class":1927},[76,149408,30776],{"class":86},[76,149410,149411,149413,149415,149417,149419,149422,149424,149426,149428,149430,149432,149434,149436],{"class":78,"line":1143},[76,149412,32420],{"class":136},[76,149414,87],{"class":86},[76,149416,140],{"class":82},[76,149418,149355],{"class":192},[76,149420,149421],{"class":136},"{self",[76,149423,80270],{"class":86},[76,149425,1034],{"class":136},[76,149427,149364],{"class":192},[76,149429,149421],{"class":136},[76,149431,80282],{"class":86},[76,149433,1034],{"class":136},[76,149435,149373],{"class":192},[76,149437,93],{"class":86},[76,149439,149440],{"class":78,"line":1158},[76,149441,2365],{"emptyLinePlaceholder":2364},[76,149443,149444],{"class":78,"line":1164},[76,149445,2365],{"emptyLinePlaceholder":2364},[76,149447,149448,149451,149453],{"class":78,"line":1178},[76,149449,149450],{"class":86},"student ",[76,149452,133],{"class":82},[76,149454,149455],{"class":86}," Student()\n",[76,149457,149458,149461,149463],{"class":78,"line":1184},[76,149459,149460],{"class":86},"student.name ",[76,149462,133],{"class":82},[76,149464,149322],{"class":192},[76,149466,149467,149470,149472],{"class":78,"line":1275},[76,149468,149469],{"class":86},"student.age ",[76,149471,133],{"class":82},[76,149473,146520],{"class":136},[76,149475,149476],{"class":78,"line":1281},[76,149477,149478],{"class":86},"student.introduce()\n",[21,149480,149481],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[16,149483,149485],{"id":149484},"_112-类和对象","11.2 类和对象",[21,149487,149488],{},"类是模板，对象是根据模板创建出来的具体实例。",[66,149490,149492],{"className":30347,"code":149491,"language":30349,"meta":71,"style":71},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[73,149493,149494,149502,149507,149511,149515,149524],{"__ignoreMap":71},[76,149495,149496,149498,149500],{"class":78,"line":79},[76,149497,14661],{"class":82},[76,149499,7865],{"class":1927},[76,149501,3704],{"class":86},[76,149503,149504],{"class":78,"line":96},[76,149505,149506],{"class":82},"    pass\n",[76,149508,149509],{"class":78,"line":1143},[76,149510,2365],{"emptyLinePlaceholder":2364},[76,149512,149513],{"class":78,"line":1158},[76,149514,2365],{"emptyLinePlaceholder":2364},[76,149516,149517,149520,149522],{"class":78,"line":1164},[76,149518,149519],{"class":86},"student1 ",[76,149521,133],{"class":82},[76,149523,149455],{"class":86},[76,149525,149526,149529,149531],{"class":78,"line":1178},[76,149527,149528],{"class":86},"student2 ",[76,149530,133],{"class":82},[76,149532,149455],{"class":86},[21,149534,149535,149538,149539,100987,149542,149545],{},[73,149536,149537],{},"Student"," 是类，",[73,149540,149541],{},"student1",[73,149543,149544],{},"student2"," 是对象。",[16,149547,149549],{"id":149548},"_113-属性","11.3 属性",[21,149551,149552],{},"属性是对象保存的数据。",[66,149554,149556],{"className":30347,"code":149555,"language":30349,"meta":71,"style":71},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[73,149557,149558,149566,149570,149574,149578,149586,149594,149602,149606,149613],{"__ignoreMap":71},[76,149559,149560,149562,149564],{"class":78,"line":79},[76,149561,14661],{"class":82},[76,149563,7865],{"class":1927},[76,149565,3704],{"class":86},[76,149567,149568],{"class":78,"line":96},[76,149569,149506],{"class":82},[76,149571,149572],{"class":78,"line":1143},[76,149573,2365],{"emptyLinePlaceholder":2364},[76,149575,149576],{"class":78,"line":1158},[76,149577,2365],{"emptyLinePlaceholder":2364},[76,149579,149580,149582,149584],{"class":78,"line":1164},[76,149581,149450],{"class":86},[76,149583,133],{"class":82},[76,149585,149455],{"class":86},[76,149587,149588,149590,149592],{"class":78,"line":1178},[76,149589,149460],{"class":86},[76,149591,133],{"class":82},[76,149593,149322],{"class":192},[76,149595,149596,149598,149600],{"class":78,"line":1184},[76,149597,149469],{"class":86},[76,149599,133],{"class":82},[76,149601,146520],{"class":136},[76,149603,149604],{"class":78,"line":1275},[76,149605,2365],{"emptyLinePlaceholder":2364},[76,149607,149608,149610],{"class":78,"line":1281},[76,149609,30384],{"class":136},[76,149611,149612],{"class":86},"(student.name)\n",[76,149614,149615,149617],{"class":78,"line":1293},[76,149616,30384],{"class":136},[76,149618,149619],{"class":86},"(student.age)\n",[21,149621,149622],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[16,149624,149626],{"id":149625},"_114-方法","11.4 方法",[21,149628,149629],{},"类中的函数叫方法。",[66,149631,149632],{"className":30347,"code":149390,"language":30349,"meta":71,"style":71},[73,149633,149634,149642,149650,149678,149682,149686,149694,149702,149710],{"__ignoreMap":71},[76,149635,149636,149638,149640],{"class":78,"line":79},[76,149637,14661],{"class":82},[76,149639,7865],{"class":1927},[76,149641,3704],{"class":86},[76,149643,149644,149646,149648],{"class":78,"line":96},[76,149645,30770],{"class":82},[76,149647,149341],{"class":1927},[76,149649,30776],{"class":86},[76,149651,149652,149654,149656,149658,149660,149662,149664,149666,149668,149670,149672,149674,149676],{"class":78,"line":1143},[76,149653,32420],{"class":136},[76,149655,87],{"class":86},[76,149657,140],{"class":82},[76,149659,149355],{"class":192},[76,149661,149421],{"class":136},[76,149663,80270],{"class":86},[76,149665,1034],{"class":136},[76,149667,149364],{"class":192},[76,149669,149421],{"class":136},[76,149671,80282],{"class":86},[76,149673,1034],{"class":136},[76,149675,149373],{"class":192},[76,149677,93],{"class":86},[76,149679,149680],{"class":78,"line":1158},[76,149681,2365],{"emptyLinePlaceholder":2364},[76,149683,149684],{"class":78,"line":1164},[76,149685,2365],{"emptyLinePlaceholder":2364},[76,149687,149688,149690,149692],{"class":78,"line":1178},[76,149689,149450],{"class":86},[76,149691,133],{"class":82},[76,149693,149455],{"class":86},[76,149695,149696,149698,149700],{"class":78,"line":1184},[76,149697,149460],{"class":86},[76,149699,133],{"class":82},[76,149701,149322],{"class":192},[76,149703,149704,149706,149708],{"class":78,"line":1275},[76,149705,149469],{"class":86},[76,149707,133],{"class":82},[76,149709,146520],{"class":136},[76,149711,149712],{"class":78,"line":1281},[76,149713,149478],{"class":86},[21,149715,149716,149718,149719,149721],{},[73,149717,30792],{}," 表示当前对象。调用方法时不需要手动传入 ",[73,149720,30792],{},"，Python 会自动传。",[16,149723,149725],{"id":149724},"_115-构造方法__init__","11.5 构造方法__init__",[21,149727,149728,149730],{},[73,149729,30798],{}," 在对象创建时自动执行，用于初始化属性。",[66,149732,149734],{"className":30347,"code":149733,"language":30349,"meta":71,"style":71},"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",[73,149735,149736,149744,149753,149765,149777,149788,149792,149800,149838,149842,149846,149868],{"__ignoreMap":71},[76,149737,149738,149740,149742],{"class":78,"line":79},[76,149739,14661],{"class":82},[76,149741,7865],{"class":1927},[76,149743,3704],{"class":86},[76,149745,149746,149748,149750],{"class":78,"line":96},[76,149747,30770],{"class":82},[76,149749,30773],{"class":136},[76,149751,149752],{"class":86},"(self, name, age, score):\n",[76,149754,149755,149757,149760,149762],{"class":78,"line":1143},[76,149756,30814],{"class":136},[76,149758,149759],{"class":86},".name ",[76,149761,133],{"class":82},[76,149763,149764],{"class":86}," name\n",[76,149766,149767,149769,149772,149774],{"class":78,"line":1158},[76,149768,30814],{"class":136},[76,149770,149771],{"class":86},".age ",[76,149773,133],{"class":82},[76,149775,149776],{"class":86}," age\n",[76,149778,149779,149781,149784,149786],{"class":78,"line":1164},[76,149780,30814],{"class":136},[76,149782,149783],{"class":86},".score ",[76,149785,133],{"class":82},[76,149787,1543],{"class":86},[76,149789,149790],{"class":78,"line":1178},[76,149791,2365],{"emptyLinePlaceholder":2364},[76,149793,149794,149796,149798],{"class":78,"line":1184},[76,149795,30770],{"class":82},[76,149797,149341],{"class":1927},[76,149799,30776],{"class":86},[76,149801,149802,149804,149806,149808,149810,149812,149814,149816,149818,149820,149822,149824,149827,149829,149832,149834,149836],{"class":78,"line":1275},[76,149803,32420],{"class":136},[76,149805,87],{"class":86},[76,149807,140],{"class":82},[76,149809,149355],{"class":192},[76,149811,149421],{"class":136},[76,149813,80270],{"class":86},[76,149815,1034],{"class":136},[76,149817,149364],{"class":192},[76,149819,149421],{"class":136},[76,149821,80282],{"class":86},[76,149823,1034],{"class":136},[76,149825,149826],{"class":192},"岁，成绩",[76,149828,149421],{"class":136},[76,149830,149831],{"class":86},".score",[76,149833,1034],{"class":136},[76,149835,339],{"class":192},[76,149837,93],{"class":86},[76,149839,149840],{"class":78,"line":1281},[76,149841,2365],{"emptyLinePlaceholder":2364},[76,149843,149844],{"class":78,"line":1293},[76,149845,2365],{"emptyLinePlaceholder":2364},[76,149847,149848,149850,149852,149855,149858,149860,149862,149864,149866],{"class":78,"line":1576},[76,149849,149450],{"class":86},[76,149851,133],{"class":82},[76,149853,149854],{"class":86}," Student(",[76,149856,149857],{"class":192},"\"小明\"",[76,149859,12402],{"class":86},[76,149861,738],{"class":136},[76,149863,12402],{"class":86},[76,149865,1077],{"class":136},[76,149867,93],{"class":86},[76,149869,149870],{"class":78,"line":1581},[76,149871,149478],{"class":86},[21,149873,149874],{},"构造方法的好处：",[29,149876,149877,149880,149883],{},[32,149878,149879],{},"创建对象时必须提供必要数据。",[32,149881,149882],{},"属性初始化集中，不容易漏。",[32,149884,149885],{},"对象状态更完整。",[16,149887,149889,149890],{"id":149888},"_116-str","11.6 ",[237,149891,1263],{},[21,149893,149894,149895,28354],{},"直接打印对象时，默认输出不直观。可以定义 ",[73,149896,149897],{},"__str__",[66,149899,149901],{"className":30347,"code":149900,"language":30349,"meta":71,"style":71},"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",[73,149902,149903,149911,149920,149930,149940,149944,149953,149981,149985,149989,150005],{"__ignoreMap":71},[76,149904,149905,149907,149909],{"class":78,"line":79},[76,149906,14661],{"class":82},[76,149908,7865],{"class":1927},[76,149910,3704],{"class":86},[76,149912,149913,149915,149917],{"class":78,"line":96},[76,149914,30770],{"class":82},[76,149916,30773],{"class":136},[76,149918,149919],{"class":86},"(self, name, age):\n",[76,149921,149922,149924,149926,149928],{"class":78,"line":1143},[76,149923,30814],{"class":136},[76,149925,149759],{"class":86},[76,149927,133],{"class":82},[76,149929,149764],{"class":86},[76,149931,149932,149934,149936,149938],{"class":78,"line":1158},[76,149933,30814],{"class":136},[76,149935,149771],{"class":86},[76,149937,133],{"class":82},[76,149939,149776],{"class":86},[76,149941,149942],{"class":78,"line":1164},[76,149943,2365],{"emptyLinePlaceholder":2364},[76,149945,149946,149948,149951],{"class":78,"line":1178},[76,149947,30770],{"class":82},[76,149949,149950],{"class":136}," __str__",[76,149952,30776],{"class":86},[76,149954,149955,149957,149960,149963,149965,149967,149969,149972,149974,149976,149978],{"class":78,"line":1184},[76,149956,14719],{"class":82},[76,149958,149959],{"class":82}," f",[76,149961,149962],{"class":192},"\"Student(name=",[76,149964,149421],{"class":136},[76,149966,80270],{"class":86},[76,149968,1034],{"class":136},[76,149970,149971],{"class":192},", age=",[76,149973,149421],{"class":136},[76,149975,80282],{"class":86},[76,149977,1034],{"class":136},[76,149979,149980],{"class":192},")\"\n",[76,149982,149983],{"class":78,"line":1275},[76,149984,2365],{"emptyLinePlaceholder":2364},[76,149986,149987],{"class":78,"line":1281},[76,149988,2365],{"emptyLinePlaceholder":2364},[76,149990,149991,149993,149995,149997,149999,150001,150003],{"class":78,"line":1293},[76,149992,149450],{"class":86},[76,149994,133],{"class":82},[76,149996,149854],{"class":86},[76,149998,149857],{"class":192},[76,150000,12402],{"class":86},[76,150002,738],{"class":136},[76,150004,93],{"class":86},[76,150006,150007,150009],{"class":78,"line":1576},[76,150008,30384],{"class":136},[76,150010,150011],{"class":86},"(student)\n",[16,150013,150015],{"id":150014},"_117-封装","11.7 封装",[21,150017,150018],{},"封装就是把数据和方法放到类中，并控制访问方式。",[21,150020,150021],{},"Python 中以双下划线开头的属性通常视为私有属性。",[66,150023,150025],{"className":30347,"code":150024,"language":30349,"meta":71,"style":71},"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",[73,150026,150027,150036,150045,150057,150069,150073,150082,150091,150095,150105,150118,150129,150134,150145,150149,150158,150170,150181,150185,150198,150209,150213,150224,150228,150232,150250,150259,150268],{"__ignoreMap":71},[76,150028,150029,150031,150034],{"class":78,"line":79},[76,150030,14661],{"class":82},[76,150032,150033],{"class":1927}," Account",[76,150035,3704],{"class":86},[76,150037,150038,150040,150042],{"class":78,"line":96},[76,150039,30770],{"class":82},[76,150041,30773],{"class":136},[76,150043,150044],{"class":86},"(self, owner, balance):\n",[76,150046,150047,150049,150052,150054],{"class":78,"line":1143},[76,150048,30814],{"class":136},[76,150050,150051],{"class":86},".owner ",[76,150053,133],{"class":82},[76,150055,150056],{"class":86}," owner\n",[76,150058,150059,150061,150064,150066],{"class":78,"line":1158},[76,150060,30814],{"class":136},[76,150062,150063],{"class":86},".__balance ",[76,150065,133],{"class":82},[76,150067,150068],{"class":86}," balance\n",[76,150070,150071],{"class":78,"line":1164},[76,150072,2365],{"emptyLinePlaceholder":2364},[76,150074,150075,150077,150080],{"class":78,"line":1178},[76,150076,30770],{"class":82},[76,150078,150079],{"class":1927}," get_balance",[76,150081,30776],{"class":86},[76,150083,150084,150086,150088],{"class":78,"line":1184},[76,150085,14719],{"class":82},[76,150087,38842],{"class":136},[76,150089,150090],{"class":86},".__balance\n",[76,150092,150093],{"class":78,"line":1275},[76,150094,2365],{"emptyLinePlaceholder":2364},[76,150096,150097,150099,150102],{"class":78,"line":1281},[76,150098,30770],{"class":82},[76,150100,150101],{"class":1927}," deposit",[76,150103,150104],{"class":86},"(self, money):\n",[76,150106,150107,150109,150112,150114,150116],{"class":78,"line":1293},[76,150108,2462],{"class":82},[76,150110,150111],{"class":86}," money ",[76,150113,1552],{"class":82},[76,150115,4058],{"class":136},[76,150117,3704],{"class":86},[76,150119,150120,150122,150124,150127],{"class":78,"line":1576},[76,150121,34619],{"class":136},[76,150123,87],{"class":86},[76,150125,150126],{"class":192},"\"存款金额必须大于0\"",[76,150128,93],{"class":86},[76,150130,150131],{"class":78,"line":1581},[76,150132,150133],{"class":82},"            return\n",[76,150135,150136,150138,150140,150142],{"class":78,"line":1587},[76,150137,30814],{"class":136},[76,150139,150063],{"class":86},[76,150141,9444],{"class":82},[76,150143,150144],{"class":86}," money\n",[76,150146,150147],{"class":78,"line":1592},[76,150148,2365],{"emptyLinePlaceholder":2364},[76,150150,150151,150153,150156],{"class":78,"line":1606},[76,150152,30770],{"class":82},[76,150154,150155],{"class":1927}," withdraw",[76,150157,150104],{"class":86},[76,150159,150160,150162,150164,150166,150168],{"class":78,"line":1611},[76,150161,2462],{"class":82},[76,150163,150111],{"class":86},[76,150165,1552],{"class":82},[76,150167,4058],{"class":136},[76,150169,3704],{"class":86},[76,150171,150172,150174,150176,150179],{"class":78,"line":1617},[76,150173,34619],{"class":136},[76,150175,87],{"class":86},[76,150177,150178],{"class":192},"\"取款金额必须大于0\"",[76,150180,93],{"class":86},[76,150182,150183],{"class":78,"line":1638},[76,150184,150133],{"class":82},[76,150186,150187,150189,150191,150193,150195],{"class":78,"line":1643},[76,150188,2462],{"class":82},[76,150190,150111],{"class":86},[76,150192,1048],{"class":82},[76,150194,38842],{"class":136},[76,150196,150197],{"class":86},".__balance:\n",[76,150199,150200,150202,150204,150207],{"class":78,"line":1657},[76,150201,34619],{"class":136},[76,150203,87],{"class":86},[76,150205,150206],{"class":192},"\"余额不足\"",[76,150208,93],{"class":86},[76,150210,150211],{"class":78,"line":1662},[76,150212,150133],{"class":82},[76,150214,150215,150217,150219,150222],{"class":78,"line":1691},[76,150216,30814],{"class":136},[76,150218,150063],{"class":86},[76,150220,150221],{"class":82},"-=",[76,150223,150144],{"class":86},[76,150225,150226],{"class":78,"line":1696},[76,150227,2365],{"emptyLinePlaceholder":2364},[76,150229,150230],{"class":78,"line":1713},[76,150231,2365],{"emptyLinePlaceholder":2364},[76,150233,150234,150237,150239,150242,150244,150246,150248],{"class":78,"line":1718},[76,150235,150236],{"class":86},"account ",[76,150238,133],{"class":82},[76,150240,150241],{"class":86}," Account(",[76,150243,149857],{"class":192},[76,150245,12402],{"class":86},[76,150247,6377],{"class":136},[76,150249,93],{"class":86},[76,150251,150252,150255,150257],{"class":78,"line":1723},[76,150253,150254],{"class":86},"account.deposit(",[76,150256,1686],{"class":136},[76,150258,93],{"class":86},[76,150260,150261,150264,150266],{"class":78,"line":1728},[76,150262,150263],{"class":86},"account.withdraw(",[76,150265,399],{"class":136},[76,150267,93],{"class":86},[76,150269,150270,150272],{"class":78,"line":1742},[76,150271,30384],{"class":136},[76,150273,150274],{"class":86},"(account.get_balance())\n",[21,150276,150277],{},"封装的意义是避免外部随意修改内部状态。",[16,150279,150281],{"id":150280},"_118-继承","11.8 继承",[21,150283,150284],{},"继承可以让子类复用父类的属性和方法。",[66,150286,150288],{"className":30347,"code":150287,"language":30349,"meta":71,"style":71},"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",[73,150289,150290,150299,150308,150319,150323,150327,150341,150350,150361,150365,150369,150379,150384],{"__ignoreMap":71},[76,150291,150292,150294,150297],{"class":78,"line":79},[76,150293,14661],{"class":82},[76,150295,150296],{"class":1927}," Animal",[76,150298,3704],{"class":86},[76,150300,150301,150303,150306],{"class":78,"line":96},[76,150302,30770],{"class":82},[76,150304,150305],{"class":1927}," eat",[76,150307,30776],{"class":86},[76,150309,150310,150312,150314,150317],{"class":78,"line":1143},[76,150311,32420],{"class":136},[76,150313,87],{"class":86},[76,150315,150316],{"class":192},"\"吃东西\"",[76,150318,93],{"class":86},[76,150320,150321],{"class":78,"line":1158},[76,150322,2365],{"emptyLinePlaceholder":2364},[76,150324,150325],{"class":78,"line":1164},[76,150326,2365],{"emptyLinePlaceholder":2364},[76,150328,150329,150331,150334,150336,150339],{"class":78,"line":1178},[76,150330,14661],{"class":82},[76,150332,150333],{"class":1927}," Dog",[76,150335,87],{"class":86},[76,150337,150338],{"class":1927},"Animal",[76,150340,30755],{"class":86},[76,150342,150343,150345,150348],{"class":78,"line":1184},[76,150344,30770],{"class":82},[76,150346,150347],{"class":1927}," bark",[76,150349,30776],{"class":86},[76,150351,150352,150354,150356,150359],{"class":78,"line":1275},[76,150353,32420],{"class":136},[76,150355,87],{"class":86},[76,150357,150358],{"class":192},"\"汪汪\"",[76,150360,93],{"class":86},[76,150362,150363],{"class":78,"line":1281},[76,150364,2365],{"emptyLinePlaceholder":2364},[76,150366,150367],{"class":78,"line":1293},[76,150368,2365],{"emptyLinePlaceholder":2364},[76,150370,150371,150374,150376],{"class":78,"line":1576},[76,150372,150373],{"class":86},"dog ",[76,150375,133],{"class":82},[76,150377,150378],{"class":86}," Dog()\n",[76,150380,150381],{"class":78,"line":1581},[76,150382,150383],{"class":86},"dog.eat()\n",[76,150385,150386],{"class":78,"line":1587},[76,150387,150388],{"class":86},"dog.bark()\n",[21,150390,150391],{},"子类可以扩展新方法，也可以重写父类方法。",[16,150393,150395],{"id":150394},"_119-方法重写","11.9 方法重写",[66,150397,150399],{"className":30347,"code":150398,"language":30349,"meta":71,"style":71},"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",[73,150400,150401,150409,150418,150429,150433,150437,150449,150457,150467,150471,150475,150488,150496,150507,150511,150515,150523,150533,150537,150542],{"__ignoreMap":71},[76,150402,150403,150405,150407],{"class":78,"line":79},[76,150404,14661],{"class":82},[76,150406,150296],{"class":1927},[76,150408,3704],{"class":86},[76,150410,150411,150413,150416],{"class":78,"line":96},[76,150412,30770],{"class":82},[76,150414,150415],{"class":1927}," speak",[76,150417,30776],{"class":86},[76,150419,150420,150422,150424,150427],{"class":78,"line":1143},[76,150421,32420],{"class":136},[76,150423,87],{"class":86},[76,150425,150426],{"class":192},"\"动物叫\"",[76,150428,93],{"class":86},[76,150430,150431],{"class":78,"line":1158},[76,150432,2365],{"emptyLinePlaceholder":2364},[76,150434,150435],{"class":78,"line":1164},[76,150436,2365],{"emptyLinePlaceholder":2364},[76,150438,150439,150441,150443,150445,150447],{"class":78,"line":1178},[76,150440,14661],{"class":82},[76,150442,150333],{"class":1927},[76,150444,87],{"class":86},[76,150446,150338],{"class":1927},[76,150448,30755],{"class":86},[76,150450,150451,150453,150455],{"class":78,"line":1184},[76,150452,30770],{"class":82},[76,150454,150415],{"class":1927},[76,150456,30776],{"class":86},[76,150458,150459,150461,150463,150465],{"class":78,"line":1275},[76,150460,32420],{"class":136},[76,150462,87],{"class":86},[76,150464,150358],{"class":192},[76,150466,93],{"class":86},[76,150468,150469],{"class":78,"line":1281},[76,150470,2365],{"emptyLinePlaceholder":2364},[76,150472,150473],{"class":78,"line":1293},[76,150474,2365],{"emptyLinePlaceholder":2364},[76,150476,150477,150479,150482,150484,150486],{"class":78,"line":1576},[76,150478,14661],{"class":82},[76,150480,150481],{"class":1927}," Cat",[76,150483,87],{"class":86},[76,150485,150338],{"class":1927},[76,150487,30755],{"class":86},[76,150489,150490,150492,150494],{"class":78,"line":1581},[76,150491,30770],{"class":82},[76,150493,150415],{"class":1927},[76,150495,30776],{"class":86},[76,150497,150498,150500,150502,150505],{"class":78,"line":1587},[76,150499,32420],{"class":136},[76,150501,87],{"class":86},[76,150503,150504],{"class":192},"\"喵喵\"",[76,150506,93],{"class":86},[76,150508,150509],{"class":78,"line":1592},[76,150510,2365],{"emptyLinePlaceholder":2364},[76,150512,150513],{"class":78,"line":1606},[76,150514,2365],{"emptyLinePlaceholder":2364},[76,150516,150517,150519,150521],{"class":78,"line":1611},[76,150518,150373],{"class":86},[76,150520,133],{"class":82},[76,150522,150378],{"class":86},[76,150524,150525,150528,150530],{"class":78,"line":1617},[76,150526,150527],{"class":86},"cat ",[76,150529,133],{"class":82},[76,150531,150532],{"class":86}," Cat()\n",[76,150534,150535],{"class":78,"line":1638},[76,150536,2365],{"emptyLinePlaceholder":2364},[76,150538,150539],{"class":78,"line":1643},[76,150540,150541],{"class":86},"dog.speak()\n",[76,150543,150544],{"class":78,"line":1657},[76,150545,150546],{"class":86},"cat.speak()\n",[16,150548,150550],{"id":150549},"_1110-super","11.10 super",[21,150552,150553,150554,150557],{},"子类可以通过 ",[73,150555,150556],{},"super()"," 调用父类方法。",[66,150559,150561],{"className":30347,"code":150560,"language":30349,"meta":71,"style":71},"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",[73,150562,150563,150571,150580,150590,150594,150598,150610,150619,150630,150640,150644,150648,150664],{"__ignoreMap":71},[76,150564,150565,150567,150569],{"class":78,"line":79},[76,150566,14661],{"class":82},[76,150568,15536],{"class":1927},[76,150570,3704],{"class":86},[76,150572,150573,150575,150577],{"class":78,"line":96},[76,150574,30770],{"class":82},[76,150576,30773],{"class":136},[76,150578,150579],{"class":86},"(self, name):\n",[76,150581,150582,150584,150586,150588],{"class":78,"line":1143},[76,150583,30814],{"class":136},[76,150585,149759],{"class":86},[76,150587,133],{"class":82},[76,150589,149764],{"class":86},[76,150591,150592],{"class":78,"line":1158},[76,150593,2365],{"emptyLinePlaceholder":2364},[76,150595,150596],{"class":78,"line":1164},[76,150597,2365],{"emptyLinePlaceholder":2364},[76,150599,150600,150602,150604,150606,150608],{"class":78,"line":1178},[76,150601,14661],{"class":82},[76,150603,7865],{"class":1927},[76,150605,87],{"class":86},[76,150607,19013],{"class":1927},[76,150609,30755],{"class":86},[76,150611,150612,150614,150616],{"class":78,"line":1184},[76,150613,30770],{"class":82},[76,150615,30773],{"class":136},[76,150617,150618],{"class":86},"(self, name, score):\n",[76,150620,150621,150623,150625,150627],{"class":78,"line":1275},[76,150622,30786],{"class":136},[76,150624,17228],{"class":86},[76,150626,30798],{"class":136},[76,150628,150629],{"class":86},"(name)\n",[76,150631,150632,150634,150636,150638],{"class":78,"line":1281},[76,150633,30814],{"class":136},[76,150635,149783],{"class":86},[76,150637,133],{"class":82},[76,150639,1543],{"class":86},[76,150641,150642],{"class":78,"line":1293},[76,150643,2365],{"emptyLinePlaceholder":2364},[76,150645,150646],{"class":78,"line":1576},[76,150647,2365],{"emptyLinePlaceholder":2364},[76,150649,150650,150652,150654,150656,150658,150660,150662],{"class":78,"line":1581},[76,150651,149450],{"class":86},[76,150653,133],{"class":82},[76,150655,149854],{"class":86},[76,150657,149857],{"class":192},[76,150659,12402],{"class":86},[76,150661,1077],{"class":136},[76,150663,93],{"class":86},[76,150665,150666,150668],{"class":78,"line":1587},[76,150667,30384],{"class":136},[76,150669,150670],{"class":86},"(student.name, student.score)\n",[16,150672,150674],{"id":150673},"_1111-多态","11.11 多态",[21,150676,150677],{},"多态指不同对象响应同一个方法，表现出不同结果。",[66,150679,150681],{"className":30347,"code":150680,"language":30349,"meta":71,"style":71},"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",[73,150682,150683,150691,150699,150709,150713,150717,150725,150733,150743,150747,150751,150761,150766,150770,150774,150779],{"__ignoreMap":71},[76,150684,150685,150687,150689],{"class":78,"line":79},[76,150686,14661],{"class":82},[76,150688,150333],{"class":1927},[76,150690,3704],{"class":86},[76,150692,150693,150695,150697],{"class":78,"line":96},[76,150694,30770],{"class":82},[76,150696,150415],{"class":1927},[76,150698,30776],{"class":86},[76,150700,150701,150703,150705,150707],{"class":78,"line":1143},[76,150702,32420],{"class":136},[76,150704,87],{"class":86},[76,150706,150358],{"class":192},[76,150708,93],{"class":86},[76,150710,150711],{"class":78,"line":1158},[76,150712,2365],{"emptyLinePlaceholder":2364},[76,150714,150715],{"class":78,"line":1164},[76,150716,2365],{"emptyLinePlaceholder":2364},[76,150718,150719,150721,150723],{"class":78,"line":1178},[76,150720,14661],{"class":82},[76,150722,150481],{"class":1927},[76,150724,3704],{"class":86},[76,150726,150727,150729,150731],{"class":78,"line":1184},[76,150728,30770],{"class":82},[76,150730,150415],{"class":1927},[76,150732,30776],{"class":86},[76,150734,150735,150737,150739,150741],{"class":78,"line":1275},[76,150736,32420],{"class":136},[76,150738,87],{"class":86},[76,150740,150504],{"class":192},[76,150742,93],{"class":86},[76,150744,150745],{"class":78,"line":1281},[76,150746,2365],{"emptyLinePlaceholder":2364},[76,150748,150749],{"class":78,"line":1293},[76,150750,2365],{"emptyLinePlaceholder":2364},[76,150752,150753,150755,150758],{"class":78,"line":1576},[76,150754,31916],{"class":82},[76,150756,150757],{"class":1927}," make_sound",[76,150759,150760],{"class":86},"(animal):\n",[76,150762,150763],{"class":78,"line":1581},[76,150764,150765],{"class":86},"    animal.speak()\n",[76,150767,150768],{"class":78,"line":1587},[76,150769,2365],{"emptyLinePlaceholder":2364},[76,150771,150772],{"class":78,"line":1592},[76,150773,2365],{"emptyLinePlaceholder":2364},[76,150775,150776],{"class":78,"line":1606},[76,150777,150778],{"class":86},"make_sound(Dog())\n",[76,150780,150781],{"class":78,"line":1611},[76,150782,150783],{"class":86},"make_sound(Cat())\n",[21,150785,150786],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[16,150788,150790],{"id":150789},"_1112-类属性和实例属性","11.12 类属性和实例属性",[21,150792,150793],{},"实例属性属于对象：",[66,150795,150797],{"className":30347,"code":150796,"language":30349,"meta":71,"style":71},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[73,150798,150799,150807,150815],{"__ignoreMap":71},[76,150800,150801,150803,150805],{"class":78,"line":79},[76,150802,14661],{"class":82},[76,150804,7865],{"class":1927},[76,150806,3704],{"class":86},[76,150808,150809,150811,150813],{"class":78,"line":96},[76,150810,30770],{"class":82},[76,150812,30773],{"class":136},[76,150814,150579],{"class":86},[76,150816,150817,150819,150821,150823],{"class":78,"line":1143},[76,150818,30814],{"class":136},[76,150820,149759],{"class":86},[76,150822,133],{"class":82},[76,150824,149764],{"class":86},[21,150826,150827],{},"类属性属于类，所有对象共享：",[66,150829,150831],{"className":30347,"code":150830,"language":30349,"meta":71,"style":71},"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",[73,150832,150833,150841,150851,150855,150863,150873,150877,150881,150894,150908,150912,150919,150926],{"__ignoreMap":71},[76,150834,150835,150837,150839],{"class":78,"line":79},[76,150836,14661],{"class":82},[76,150838,7865],{"class":1927},[76,150840,3704],{"class":86},[76,150842,150843,150846,150848],{"class":78,"line":96},[76,150844,150845],{"class":86},"    school ",[76,150847,133],{"class":82},[76,150849,150850],{"class":192}," \"黑马学校\"\n",[76,150852,150853],{"class":78,"line":1143},[76,150854,2365],{"emptyLinePlaceholder":2364},[76,150856,150857,150859,150861],{"class":78,"line":1158},[76,150858,30770],{"class":82},[76,150860,30773],{"class":136},[76,150862,150579],{"class":86},[76,150864,150865,150867,150869,150871],{"class":78,"line":1164},[76,150866,30814],{"class":136},[76,150868,149759],{"class":86},[76,150870,133],{"class":82},[76,150872,149764],{"class":86},[76,150874,150875],{"class":78,"line":1178},[76,150876,2365],{"emptyLinePlaceholder":2364},[76,150878,150879],{"class":78,"line":1184},[76,150880,2365],{"emptyLinePlaceholder":2364},[76,150882,150883,150886,150888,150890,150892],{"class":78,"line":1275},[76,150884,150885],{"class":86},"s1 ",[76,150887,133],{"class":82},[76,150889,149854],{"class":86},[76,150891,149857],{"class":192},[76,150893,93],{"class":86},[76,150895,150896,150899,150901,150903,150906],{"class":78,"line":1281},[76,150897,150898],{"class":86},"s2 ",[76,150900,133],{"class":82},[76,150902,149854],{"class":86},[76,150904,150905],{"class":192},"\"小红\"",[76,150907,93],{"class":86},[76,150909,150910],{"class":78,"line":1293},[76,150911,2365],{"emptyLinePlaceholder":2364},[76,150913,150914,150916],{"class":78,"line":1576},[76,150915,30384],{"class":136},[76,150917,150918],{"class":86},"(s1.school)\n",[76,150920,150921,150923],{"class":78,"line":1581},[76,150922,30384],{"class":136},[76,150924,150925],{"class":86},"(s2.school)\n",[76,150927,150928,150930],{"class":78,"line":1587},[76,150929,30384],{"class":136},[76,150931,150932],{"class":86},"(Student.school)\n",[21,150934,150935],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[16,150937,150939],{"id":150938},"_1113-类方法和静态方法","11.13 类方法和静态方法",[46,150941,150943],{"id":150942},"_11131-类方法","11.13.1 类方法",[21,150945,150946,150947,150950,150951,28354],{},"类方法使用 ",[73,150948,150949],{},"@classmethod","，第一个参数通常是 ",[73,150952,150953],{},"cls",[66,150955,150957],{"className":30347,"code":150956,"language":30349,"meta":71,"style":71},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[73,150958,150959,150967,150975,150979,150987,150997,151007,151011,151015],{"__ignoreMap":71},[76,150960,150961,150963,150965],{"class":78,"line":79},[76,150962,14661],{"class":82},[76,150964,7865],{"class":1927},[76,150966,3704],{"class":86},[76,150968,150969,150971,150973],{"class":78,"line":96},[76,150970,150845],{"class":86},[76,150972,133],{"class":82},[76,150974,150850],{"class":192},[76,150976,150977],{"class":78,"line":1143},[76,150978,2365],{"emptyLinePlaceholder":2364},[76,150980,150981,150984],{"class":78,"line":1158},[76,150982,150983],{"class":1927},"    @",[76,150985,150986],{"class":136},"classmethod\n",[76,150988,150989,150991,150994],{"class":78,"line":1164},[76,150990,30770],{"class":82},[76,150992,150993],{"class":1927}," get_school",[76,150995,150996],{"class":86},"(cls):\n",[76,150998,150999,151001,151004],{"class":78,"line":1178},[76,151000,14719],{"class":82},[76,151002,151003],{"class":136}," cls",[76,151005,151006],{"class":86},".school\n",[76,151008,151009],{"class":78,"line":1184},[76,151010,2365],{"emptyLinePlaceholder":2364},[76,151012,151013],{"class":78,"line":1275},[76,151014,2365],{"emptyLinePlaceholder":2364},[76,151016,151017,151019],{"class":78,"line":1281},[76,151018,30384],{"class":136},[76,151020,151021],{"class":86},"(Student.get_school())\n",[46,151023,151025],{"id":151024},"_11132-静态方法","11.13.2 静态方法",[21,151027,151028,151029,151032],{},"静态方法使用 ",[73,151030,151031],{},"@staticmethod","，不需要访问实例和类。",[66,151034,151036],{"className":30347,"code":151035,"language":30349,"meta":71,"style":71},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[73,151037,151038,151047,151054,151063,151074,151078,151082],{"__ignoreMap":71},[76,151039,151040,151042,151045],{"class":78,"line":79},[76,151041,14661],{"class":82},[76,151043,151044],{"class":1927}," MathUtils",[76,151046,3704],{"class":86},[76,151048,151049,151051],{"class":78,"line":96},[76,151050,150983],{"class":1927},[76,151052,151053],{"class":136},"staticmethod\n",[76,151055,151056,151058,151060],{"class":78,"line":1143},[76,151057,30770],{"class":82},[76,151059,5176],{"class":1927},[76,151061,151062],{"class":86},"(a, b):\n",[76,151064,151065,151067,151069,151071],{"class":78,"line":1158},[76,151066,14719],{"class":82},[76,151068,10836],{"class":86},[76,151070,569],{"class":82},[76,151072,151073],{"class":86}," b\n",[76,151075,151076],{"class":78,"line":1164},[76,151077,2365],{"emptyLinePlaceholder":2364},[76,151079,151080],{"class":78,"line":1178},[76,151081,2365],{"emptyLinePlaceholder":2364},[76,151083,151084,151086,151089,151091,151093,151095],{"class":78,"line":1184},[76,151085,30384],{"class":136},[76,151087,151088],{"class":86},"(MathUtils.add(",[76,151090,305],{"class":136},[76,151092,12402],{"class":86},[76,151094,165],{"class":136},[76,151096,30466],{"class":86},[21,151098,151099],{},"静态方法本质上是放在类命名空间里的普通函数。",[16,151101,151103],{"id":151102},"_1114-dataclass","11.14 dataclass",[21,151105,151106,151109],{},[73,151107,151108],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[66,151111,151113],{"className":30347,"code":151112,"language":30349,"meta":71,"style":71},"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",[73,151114,151115,151127,151131,151135,151140,151148,151156,151164,151172,151176,151180,151200],{"__ignoreMap":71},[76,151116,151117,151119,151122,151124],{"class":78,"line":79},[76,151118,30706],{"class":82},[76,151120,151121],{"class":86}," dataclasses ",[76,151123,30361],{"class":82},[76,151125,151126],{"class":86}," dataclass\n",[76,151128,151129],{"class":78,"line":96},[76,151130,2365],{"emptyLinePlaceholder":2364},[76,151132,151133],{"class":78,"line":1143},[76,151134,2365],{"emptyLinePlaceholder":2364},[76,151136,151137],{"class":78,"line":1158},[76,151138,151139],{"class":1927},"@dataclass\n",[76,151141,151142,151144,151146],{"class":78,"line":1164},[76,151143,14661],{"class":82},[76,151145,7865],{"class":1927},[76,151147,3704],{"class":86},[76,151149,151150,151153],{"class":78,"line":1178},[76,151151,151152],{"class":86},"    name: ",[76,151154,151155],{"class":136},"str\n",[76,151157,151158,151161],{"class":78,"line":1184},[76,151159,151160],{"class":86},"    age: ",[76,151162,151163],{"class":136},"int\n",[76,151165,151166,151169],{"class":78,"line":1275},[76,151167,151168],{"class":86},"    score: ",[76,151170,151171],{"class":136},"float\n",[76,151173,151174],{"class":78,"line":1281},[76,151175,2365],{"emptyLinePlaceholder":2364},[76,151177,151178],{"class":78,"line":1293},[76,151179,2365],{"emptyLinePlaceholder":2364},[76,151181,151182,151184,151186,151188,151190,151192,151194,151196,151198],{"class":78,"line":1576},[76,151183,149450],{"class":86},[76,151185,133],{"class":82},[76,151187,149854],{"class":86},[76,151189,149857],{"class":192},[76,151191,12402],{"class":86},[76,151193,738],{"class":136},[76,151195,12402],{"class":86},[76,151197,1077],{"class":136},[76,151199,93],{"class":86},[76,151201,151202,151204],{"class":78,"line":1581},[76,151203,30384],{"class":136},[76,151205,150011],{"class":86},[21,151207,151208,151209,300,151211,151214],{},"它会自动生成 ",[73,151210,30798],{},[73,151212,151213],{},"__repr__"," 等方法。适合数据模型类。",[16,151216,151218],{"id":151217},"_1115-小案例学生类","11.15 小案例：学生类",[66,151220,151222],{"className":30347,"code":151221,"language":30349,"meta":71,"style":71},"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",[73,151223,151224,151232,151241,151253,151263,151273,151283,151287,151296,151309,151313,151322,151328,151340,151352,151364,151376,151380,151384,151390,151400,151409,151419,151427,151435,151444,151448,151452,151460,151496,151500,151504,151529,151536],{"__ignoreMap":71},[76,151225,151226,151228,151230],{"class":78,"line":79},[76,151227,14661],{"class":82},[76,151229,7865],{"class":1927},[76,151231,3704],{"class":86},[76,151233,151234,151236,151238],{"class":78,"line":96},[76,151235,30770],{"class":82},[76,151237,30773],{"class":136},[76,151239,151240],{"class":86},"(self, student_id, name, age, score):\n",[76,151242,151243,151245,151248,151250],{"class":78,"line":1143},[76,151244,30814],{"class":136},[76,151246,151247],{"class":86},".student_id ",[76,151249,133],{"class":82},[76,151251,151252],{"class":86}," student_id\n",[76,151254,151255,151257,151259,151261],{"class":78,"line":1158},[76,151256,30814],{"class":136},[76,151258,149759],{"class":86},[76,151260,133],{"class":82},[76,151262,149764],{"class":86},[76,151264,151265,151267,151269,151271],{"class":78,"line":1164},[76,151266,30814],{"class":136},[76,151268,149771],{"class":86},[76,151270,133],{"class":82},[76,151272,149776],{"class":86},[76,151274,151275,151277,151279,151281],{"class":78,"line":1178},[76,151276,30814],{"class":136},[76,151278,149783],{"class":86},[76,151280,133],{"class":82},[76,151282,1543],{"class":86},[76,151284,151285],{"class":78,"line":1184},[76,151286,2365],{"emptyLinePlaceholder":2364},[76,151288,151289,151291,151294],{"class":78,"line":1275},[76,151290,30770],{"class":82},[76,151292,151293],{"class":1927}," is_passed",[76,151295,30776],{"class":86},[76,151297,151298,151300,151302,151304,151306],{"class":78,"line":1281},[76,151299,14719],{"class":82},[76,151301,38842],{"class":136},[76,151303,149783],{"class":86},[76,151305,1674],{"class":82},[76,151307,151308],{"class":136}," 60\n",[76,151310,151311],{"class":78,"line":1293},[76,151312,2365],{"emptyLinePlaceholder":2364},[76,151314,151315,151317,151320],{"class":78,"line":1576},[76,151316,30770],{"class":82},[76,151318,151319],{"class":1927}," to_dict",[76,151321,30776],{"class":86},[76,151323,151324,151326],{"class":78,"line":1581},[76,151325,14719],{"class":82},[76,151327,15539],{"class":86},[76,151329,151330,151333,151335,151337],{"class":78,"line":1587},[76,151331,151332],{"class":192},"            \"student_id\"",[76,151334,51406],{"class":86},[76,151336,30792],{"class":136},[76,151338,151339],{"class":86},".student_id,\n",[76,151341,151342,151345,151347,151349],{"class":78,"line":1592},[76,151343,151344],{"class":192},"            \"name\"",[76,151346,51406],{"class":86},[76,151348,30792],{"class":136},[76,151350,151351],{"class":86},".name,\n",[76,151353,151354,151357,151359,151361],{"class":78,"line":1606},[76,151355,151356],{"class":192},"            \"age\"",[76,151358,51406],{"class":86},[76,151360,30792],{"class":136},[76,151362,151363],{"class":86},".age,\n",[76,151365,151366,151369,151371,151373],{"class":78,"line":1611},[76,151367,151368],{"class":192},"            \"score\"",[76,151370,51406],{"class":86},[76,151372,30792],{"class":136},[76,151374,151375],{"class":86},".score,\n",[76,151377,151378],{"class":78,"line":1617},[76,151379,2494],{"class":86},[76,151381,151382],{"class":78,"line":1638},[76,151383,2365],{"emptyLinePlaceholder":2364},[76,151385,151386,151388],{"class":78,"line":1643},[76,151387,150983],{"class":1927},[76,151389,150986],{"class":136},[76,151391,151392,151394,151397],{"class":78,"line":1657},[76,151393,30770],{"class":82},[76,151395,151396],{"class":1927}," from_dict",[76,151398,151399],{"class":86},"(cls, data):\n",[76,151401,151402,151404,151406],{"class":78,"line":1662},[76,151403,14719],{"class":82},[76,151405,151003],{"class":136},[76,151407,151408],{"class":86},"(\n",[76,151410,151411,151414,151417],{"class":78,"line":1691},[76,151412,151413],{"class":86},"            data[",[76,151415,151416],{"class":192},"\"student_id\"",[76,151418,87805],{"class":86},[76,151420,151421,151423,151425],{"class":78,"line":1696},[76,151422,151413],{"class":86},[76,151424,62648],{"class":192},[76,151426,87805],{"class":86},[76,151428,151429,151431,151433],{"class":78,"line":1713},[76,151430,151413],{"class":86},[76,151432,69093],{"class":192},[76,151434,87805],{"class":86},[76,151436,151437,151439,151442],{"class":78,"line":1718},[76,151438,151413],{"class":86},[76,151440,151441],{"class":192},"\"score\"",[76,151443,87805],{"class":86},[76,151445,151446],{"class":78,"line":1723},[76,151447,38095],{"class":86},[76,151449,151450],{"class":78,"line":1728},[76,151451,2365],{"emptyLinePlaceholder":2364},[76,151453,151454,151456,151458],{"class":78,"line":1742},[76,151455,30770],{"class":82},[76,151457,149950],{"class":136},[76,151459,30776],{"class":86},[76,151461,151462,151464,151466,151468,151470,151473,151475,151478,151480,151482,151484,151486,151488,151490,151492,151494],{"class":78,"line":1747},[76,151463,14719],{"class":82},[76,151465,149959],{"class":82},[76,151467,339],{"class":192},[76,151469,149421],{"class":136},[76,151471,151472],{"class":86},".student_id",[76,151474,1034],{"class":136},[76,151476,151477],{"class":136}," {self",[76,151479,80270],{"class":86},[76,151481,1034],{"class":136},[76,151483,151477],{"class":136},[76,151485,80282],{"class":86},[76,151487,1034],{"class":136},[76,151489,151477],{"class":136},[76,151491,149831],{"class":86},[76,151493,1034],{"class":136},[76,151495,25102],{"class":192},[76,151497,151498],{"class":78,"line":2542},[76,151499,2365],{"emptyLinePlaceholder":2364},[76,151501,151502],{"class":78,"line":2556},[76,151503,2365],{"emptyLinePlaceholder":2364},[76,151505,151506,151508,151510,151512,151515,151517,151519,151521,151523,151525,151527],{"class":78,"line":2564},[76,151507,149450],{"class":86},[76,151509,133],{"class":82},[76,151511,149854],{"class":86},[76,151513,151514],{"class":192},"\"001\"",[76,151516,12402],{"class":86},[76,151518,149857],{"class":192},[76,151520,12402],{"class":86},[76,151522,738],{"class":136},[76,151524,12402],{"class":86},[76,151526,1077],{"class":136},[76,151528,93],{"class":86},[76,151530,151531,151533],{"class":78,"line":2569},[76,151532,30384],{"class":136},[76,151534,151535],{"class":86},"(student.is_passed())\n",[76,151537,151538,151540],{"class":78,"line":2575},[76,151539,30384],{"class":136},[76,151541,151542],{"class":86},"(student.to_dict())\n",[21,151544,151545,100987,151548,151551],{},[73,151546,151547],{},"to_dict()",[73,151549,151550],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[16,151553,151555],{"id":151554},"_1116-易错点","11.16 易错点",[29,151557,151558,151564,151570,151575,151578,151581],{},[32,151559,151560,151561,28354],{},"类名推荐使用大驼峰，如 ",[73,151562,151563],{},"StudentManager",[32,151565,151566,151567,151569],{},"方法第一个参数必须写 ",[73,151568,30792],{},"，调用时不用传。",[32,151571,151572,151574],{},[73,151573,30798],{}," 不是普通方法，它在创建对象时自动执行。",[32,151576,151577],{},"私有属性不是绝对安全，只是约定和名称改写。",[32,151579,151580],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[32,151582,151583],{},"类中方法太多时，说明职责可能过重。",[16,151585,151587],{"id":151586},"_1117-本章练习","11.17 本章练习",[29,151589,151590,151596,151602,151607,151620],{},[32,151591,151592,151593,151595],{},"定义 ",[73,151594,149537],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[32,151597,151592,151598,151601],{},[73,151599,151600],{},"Account"," 类，实现存款、取款、查询余额。",[32,151603,151592,151604,151606],{},[73,151605,17193],{}," 类，计算圆的周长和面积。",[32,151608,151592,151609,300,151612,151615,151616,151619],{},[73,151610,151611],{},"Dog",[73,151613,151614],{},"Cat"," 类，并用同一个函数调用它们的 ",[73,151617,151618],{},"speak()"," 方法。",[32,151621,104335,151622,151624,151625,28354],{},[73,151623,151108],{}," 定义一个商品类 ",[73,151626,151627],{},"Product",[5092,151629,151630],{},"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":71,"searchDepth":96,"depth":96,"links":151632},[151633,151634,151635,151636,151637,151638,151640,151641,151642,151643,151644,151645,151646,151650,151651,151652,151653],{"id":149301,"depth":96,"text":149302},{"id":149484,"depth":96,"text":149485},{"id":149548,"depth":96,"text":149549},{"id":149625,"depth":96,"text":149626},{"id":149724,"depth":96,"text":149725},{"id":149888,"depth":96,"text":151639},"11.6 str",{"id":150014,"depth":96,"text":150015},{"id":150280,"depth":96,"text":150281},{"id":150394,"depth":96,"text":150395},{"id":150549,"depth":96,"text":150550},{"id":150673,"depth":96,"text":150674},{"id":150789,"depth":96,"text":150790},{"id":150938,"depth":96,"text":150939,"children":151647},[151648,151649],{"id":150942,"depth":1143,"text":150943},{"id":151024,"depth":1143,"text":151025},{"id":151102,"depth":96,"text":151103},{"id":151217,"depth":96,"text":151218},{"id":151554,"depth":96,"text":151555},{"id":151586,"depth":96,"text":151587},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149293,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151660,"title":151661,"body":151662,"description":23344,"extension":5123,"meta":154975,"navigation":2364,"path":154976,"seo":154977,"stem":154978,"__hash__":154979},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":9,"value":151663,"toc":154951},[151664,151667,151671,151674,151677,151706,151709,151717,151721,151725,151728,151751,151754,151760,151764,153210,153213,153234,153238,153241,153253,153256,153440,153443,153569,153572,153576,153580,153716,153720,153806,153810,153892,153896,153933,153937,154126,154130,154133,154363,154367,154370,154551,154554,154558,154561,154567,154570,154596,154600,154603,154617,154620,154645,154648,154662,154665,154682,154685,154702,154705,154722,154726,154752,154756,154779,154783,154786,154788,154794,154796,154817,154820,154826,154832,154836,154839,154915,154918,154922,154948],[12,151665,151661],{"id":151666},"_12-综合案例与复习路线",[16,151668,151670],{"id":151669},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[21,151672,151673],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[21,151675,151676],{},"一个合格的入门综合项目最好覆盖：",[29,151678,151679,151682,151685,151688,151691,151694,151697,151700,151703],{},[32,151680,151681],{},"输入输出。",[32,151683,151684],{},"判断和循环。",[32,151686,151687],{},"函数拆分。",[32,151689,151690],{},"列表、字典等容器。",[32,151692,151693],{},"文件持久化。",[32,151695,151696],{},"异常处理。",[32,151698,151699],{},"模块拆分。",[32,151701,151702],{},"可选：面向对象。",[32,151704,151705],{},"可选：数据可视化。",[21,151707,151708],{},"本章整理两个方向：",[29,151710,151711,151714],{},[32,151712,151713],{},"学生管理系统。",[32,151715,151716],{},"销售数据统计和可视化。",[16,151718,151720],{"id":151719},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[46,151722,151724],{"id":151723},"_1221-需求","12.2.1 需求",[21,151726,151727],{},"实现一个命令行学生管理系统：",[29,151729,151730,151733,151736,151739,151742,151745,151748],{},[32,151731,151732],{},"添加学生。",[32,151734,151735],{},"删除学生。",[32,151737,151738],{},"修改学生。",[32,151740,151741],{},"查询学生。",[32,151743,151744],{},"显示所有学生。",[32,151746,151747],{},"保存到 JSON 文件。",[32,151749,151750],{},"程序启动时自动读取 JSON 文件。",[21,151752,151753],{},"学生字段：",[66,151755,151758],{"className":151756,"code":151757,"language":5154,"meta":71},[5152],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[73,151759,151757],{"__ignoreMap":71},[16,151761,151763],{"id":151762},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[66,151765,151767],{"className":30347,"code":151766,"language":30349,"meta":71,"style":71},"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",[73,151768,151769,151775,151785,151789,151803,151807,151811,151820,151832,151838,151842,151848,151879,151889,151896,151907,151913,151917,151921,151931,151962,151988,151992,151996,152005,152016,152027,152038,152049,152060,152071,152082,152086,152090,152100,152112,152128,152135,152142,152146,152150,152160,152168,152175,152188,152198,152209,152213,152217,152226,152234,152240,152252,152260,152271,152275,152279,152288,152304,152308,152315,152326,152331,152335,152351,152366,152381,152385,152390,152398,152406,152414,152422,152426,152431,152442,152446,152450,152459,152474,152484,152488,152500,152511,152515,152519,152524,152528,152539,152543,152547,152556,152571,152579,152583,152595,152605,152609,152613,152628,152641,152654,152658,152671,152683,152695,152699,152703,152714,152718,152722,152731,152746,152754,152758,152770,152780,152784,152788,152793,152797,152801,152811,152817,152839,152858,152877,152896,152901,152905,152909,152918,152926,152937,152941,152945,152971,152981,152986,152990,152994,153002,153012,153016,153024,153029,153045,153049,153063,153068,153082,153087,153100,153105,153118,153123,153136,153141,153154,153165,153169,153175,153186,153190,153194,153206],{"__ignoreMap":71},[76,151770,151771,151773],{"class":78,"line":79},[76,151772,30361],{"class":82},[76,151774,147060],{"class":86},[76,151776,151777,151779,151781,151783],{"class":78,"line":96},[76,151778,30706],{"class":82},[76,151780,108280],{"class":86},[76,151782,30361],{"class":82},[76,151784,108285],{"class":86},[76,151786,151787],{"class":78,"line":1143},[76,151788,2365],{"emptyLinePlaceholder":2364},[76,151790,151791,151794,151796,151798,151801],{"class":78,"line":1158},[76,151792,151793],{"class":136},"DATA_FILE",[76,151795,13531],{"class":82},[76,151797,108514],{"class":86},[76,151799,151800],{"class":192},"\"students.json\"",[76,151802,93],{"class":86},[76,151804,151805],{"class":78,"line":1164},[76,151806,2365],{"emptyLinePlaceholder":2364},[76,151808,151809],{"class":78,"line":1178},[76,151810,2365],{"emptyLinePlaceholder":2364},[76,151812,151813,151815,151818],{"class":78,"line":1184},[76,151814,31916],{"class":82},[76,151816,151817],{"class":1927}," load_students",[76,151819,31922],{"class":86},[76,151821,151822,151824,151826,151829],{"class":78,"line":1275},[76,151823,3066],{"class":82},[76,151825,38899],{"class":82},[76,151827,151828],{"class":136}," DATA_FILE",[76,151830,151831],{"class":86},".exists():\n",[76,151833,151834,151836],{"class":78,"line":1281},[76,151835,14719],{"class":82},[76,151837,51807],{"class":86},[76,151839,151840],{"class":78,"line":1293},[76,151841,2365],{"emptyLinePlaceholder":2364},[76,151843,151844,151846],{"class":78,"line":1576},[76,151845,125753],{"class":82},[76,151847,3704],{"class":86},[76,151849,151850,151853,151855,151857,151859,151861,151863,151865,151867,151869,151871,151873,151875,151877],{"class":78,"line":1581},[76,151851,151852],{"class":82},"        with",[76,151854,146760],{"class":136},[76,151856,87],{"class":86},[76,151858,151793],{"class":136},[76,151860,12402],{"class":86},[76,151862,146770],{"class":192},[76,151864,12402],{"class":86},[76,151866,146775],{"class":5183},[76,151868,133],{"class":82},[76,151870,146780],{"class":192},[76,151872,13681],{"class":86},[76,151874,31352],{"class":82},[76,151876,148122],{"class":5183},[76,151878,3704],{"class":86},[76,151880,151881,151883,151885,151887],{"class":78,"line":1587},[76,151882,15699],{"class":82},[76,151884,148133],{"class":86},[76,151886,45323],{"class":5183},[76,151888,93],{"class":86},[76,151890,151891,151893],{"class":78,"line":1592},[76,151892,125781],{"class":82},[76,151894,151895],{"class":86}," json.JSONDecodeError:\n",[76,151897,151898,151900,151902,151905],{"class":78,"line":1606},[76,151899,32420],{"class":136},[76,151901,87],{"class":86},[76,151903,151904],{"class":192},"\"数据文件格式错误，已使用空数据启动\"",[76,151906,93],{"class":86},[76,151908,151909,151911],{"class":78,"line":1611},[76,151910,14719],{"class":82},[76,151912,51807],{"class":86},[76,151914,151915],{"class":78,"line":1617},[76,151916,2365],{"emptyLinePlaceholder":2364},[76,151918,151919],{"class":78,"line":1638},[76,151920,2365],{"emptyLinePlaceholder":2364},[76,151922,151923,151925,151928],{"class":78,"line":1643},[76,151924,31916],{"class":82},[76,151926,151927],{"class":1927}," save_students",[76,151929,151930],{"class":86},"(students):\n",[76,151932,151933,151935,151937,151939,151941,151943,151946,151948,151950,151952,151954,151956,151958,151960],{"class":78,"line":1657},[76,151934,34147],{"class":82},[76,151936,146760],{"class":136},[76,151938,87],{"class":86},[76,151940,151793],{"class":136},[76,151942,12402],{"class":86},[76,151944,151945],{"class":192},"\"w\"",[76,151947,12402],{"class":86},[76,151949,146775],{"class":5183},[76,151951,133],{"class":82},[76,151953,146780],{"class":192},[76,151955,13681],{"class":86},[76,151957,31352],{"class":82},[76,151959,148122],{"class":5183},[76,151961,3704],{"class":86},[76,151963,151964,151967,151969,151971,151973,151975,151977,151979,151982,151984,151986],{"class":78,"line":1662},[76,151965,151966],{"class":86},"        json.dump(students, ",[76,151968,45323],{"class":5183},[76,151970,12402],{"class":86},[76,151972,147106],{"class":5183},[76,151974,133],{"class":82},[76,151976,33956],{"class":136},[76,151978,12402],{"class":86},[76,151980,151981],{"class":5183},"indent",[76,151983,133],{"class":82},[76,151985,165],{"class":136},[76,151987,93],{"class":86},[76,151989,151990],{"class":78,"line":1691},[76,151991,2365],{"emptyLinePlaceholder":2364},[76,151993,151994],{"class":78,"line":1696},[76,151995,2365],{"emptyLinePlaceholder":2364},[76,151997,151998,152000,152003],{"class":78,"line":1713},[76,151999,31916],{"class":82},[76,152001,152002],{"class":1927}," show_menu",[76,152004,31922],{"class":86},[76,152006,152007,152009,152011,152014],{"class":78,"line":1718},[76,152008,31268],{"class":136},[76,152010,87],{"class":86},[76,152012,152013],{"class":192},"\"====== 学生管理系统 ======\"",[76,152015,93],{"class":86},[76,152017,152018,152020,152022,152025],{"class":78,"line":1723},[76,152019,31268],{"class":136},[76,152021,87],{"class":86},[76,152023,152024],{"class":192},"\"1. 添加学生\"",[76,152026,93],{"class":86},[76,152028,152029,152031,152033,152036],{"class":78,"line":1728},[76,152030,31268],{"class":136},[76,152032,87],{"class":86},[76,152034,152035],{"class":192},"\"2. 删除学生\"",[76,152037,93],{"class":86},[76,152039,152040,152042,152044,152047],{"class":78,"line":1742},[76,152041,31268],{"class":136},[76,152043,87],{"class":86},[76,152045,152046],{"class":192},"\"3. 修改学生\"",[76,152048,93],{"class":86},[76,152050,152051,152053,152055,152058],{"class":78,"line":1747},[76,152052,31268],{"class":136},[76,152054,87],{"class":86},[76,152056,152057],{"class":192},"\"4. 查询学生\"",[76,152059,93],{"class":86},[76,152061,152062,152064,152066,152069],{"class":78,"line":2542},[76,152063,31268],{"class":136},[76,152065,87],{"class":86},[76,152067,152068],{"class":192},"\"5. 显示所有学生\"",[76,152070,93],{"class":86},[76,152072,152073,152075,152077,152080],{"class":78,"line":2556},[76,152074,31268],{"class":136},[76,152076,87],{"class":86},[76,152078,152079],{"class":192},"\"0. 退出系统\"",[76,152081,93],{"class":86},[76,152083,152084],{"class":78,"line":2564},[76,152085,2365],{"emptyLinePlaceholder":2364},[76,152087,152088],{"class":78,"line":2569},[76,152089,2365],{"emptyLinePlaceholder":2364},[76,152091,152092,152094,152097],{"class":78,"line":2575},[76,152093,31916],{"class":82},[76,152095,152096],{"class":1927}," find_student",[76,152098,152099],{"class":86},"(students, student_id):\n",[76,152101,152102,152104,152107,152109],{"class":78,"line":2581},[76,152103,3166],{"class":82},[76,152105,152106],{"class":86}," student ",[76,152108,26012],{"class":82},[76,152110,152111],{"class":86}," students:\n",[76,152113,152114,152116,152119,152121,152123,152125],{"class":78,"line":2586},[76,152115,2462],{"class":82},[76,152117,152118],{"class":86}," student[",[76,152120,151416],{"class":192},[76,152122,4408],{"class":86},[76,152124,2914],{"class":82},[76,152126,152127],{"class":86}," student_id:\n",[76,152129,152130,152132],{"class":78,"line":7915},[76,152131,15699],{"class":82},[76,152133,152134],{"class":86}," student\n",[76,152136,152137,152139],{"class":78,"line":7939},[76,152138,4055],{"class":82},[76,152140,152141],{"class":136}," None\n",[76,152143,152144],{"class":78,"line":7944},[76,152145,2365],{"emptyLinePlaceholder":2364},[76,152147,152148],{"class":78,"line":7950},[76,152149,2365],{"emptyLinePlaceholder":2364},[76,152151,152152,152154,152157],{"class":78,"line":7977},[76,152153,31916],{"class":82},[76,152155,152156],{"class":1927}," input_int",[76,152158,152159],{"class":86},"(prompt):\n",[76,152161,152162,152164,152166],{"class":78,"line":7982},[76,152163,2215],{"class":82},[76,152165,95261],{"class":136},[76,152167,3704],{"class":86},[76,152169,152170,152173],{"class":78,"line":7988},[76,152171,152172],{"class":82},"        try",[76,152174,3704],{"class":86},[76,152176,152177,152179,152181,152183,152185],{"class":78,"line":8000},[76,152178,15699],{"class":82},[76,152180,2346],{"class":136},[76,152182,87],{"class":86},[76,152184,53790],{"class":136},[76,152186,152187],{"class":86},"(prompt))\n",[76,152189,152190,152193,152196],{"class":78,"line":8012},[76,152191,152192],{"class":82},"        except",[76,152194,152195],{"class":136}," ValueError",[76,152197,3704],{"class":86},[76,152199,152200,152202,152204,152207],{"class":78,"line":8024},[76,152201,34619],{"class":136},[76,152203,87],{"class":86},[76,152205,152206],{"class":192},"\"请输入整数\"",[76,152208,93],{"class":86},[76,152210,152211],{"class":78,"line":9683},[76,152212,2365],{"emptyLinePlaceholder":2364},[76,152214,152215],{"class":78,"line":9708},[76,152216,2365],{"emptyLinePlaceholder":2364},[76,152218,152219,152221,152224],{"class":78,"line":9731},[76,152220,31916],{"class":82},[76,152222,152223],{"class":1927}," input_float",[76,152225,152159],{"class":86},[76,152227,152228,152230,152232],{"class":78,"line":9755},[76,152229,2215],{"class":82},[76,152231,95261],{"class":136},[76,152233,3704],{"class":86},[76,152235,152236,152238],{"class":78,"line":9760},[76,152237,152172],{"class":82},[76,152239,3704],{"class":86},[76,152241,152242,152244,152246,152248,152250],{"class":78,"line":9765},[76,152243,15699],{"class":82},[76,152245,109766],{"class":136},[76,152247,87],{"class":86},[76,152249,53790],{"class":136},[76,152251,152187],{"class":86},[76,152253,152254,152256,152258],{"class":78,"line":9770},[76,152255,152192],{"class":82},[76,152257,152195],{"class":136},[76,152259,3704],{"class":86},[76,152261,152262,152264,152266,152269],{"class":78,"line":9779},[76,152263,34619],{"class":136},[76,152265,87],{"class":86},[76,152267,152268],{"class":192},"\"请输入数字\"",[76,152270,93],{"class":86},[76,152272,152273],{"class":78,"line":9784},[76,152274,2365],{"emptyLinePlaceholder":2364},[76,152276,152277],{"class":78,"line":9790},[76,152278,2365],{"emptyLinePlaceholder":2364},[76,152280,152281,152283,152286],{"class":78,"line":9811},[76,152282,31916],{"class":82},[76,152284,152285],{"class":1927}," add_student",[76,152287,151930],{"class":86},[76,152289,152290,152293,152295,152297,152299,152302],{"class":78,"line":9817},[76,152291,152292],{"class":86},"    student_id ",[76,152294,133],{"class":82},[76,152296,60574],{"class":136},[76,152298,87],{"class":86},[76,152300,152301],{"class":192},"\"请输入学号:\"",[76,152303,93],{"class":86},[76,152305,152306],{"class":78,"line":9831},[76,152307,2365],{"emptyLinePlaceholder":2364},[76,152309,152310,152312],{"class":78,"line":9837},[76,152311,3066],{"class":82},[76,152313,152314],{"class":86}," find_student(students, student_id):\n",[76,152316,152317,152319,152321,152324],{"class":78,"line":9864},[76,152318,32420],{"class":136},[76,152320,87],{"class":86},[76,152322,152323],{"class":192},"\"学号已存在\"",[76,152325,93],{"class":86},[76,152327,152328],{"class":78,"line":9873},[76,152329,152330],{"class":82},"        return\n",[76,152332,152333],{"class":78,"line":9879},[76,152334,2365],{"emptyLinePlaceholder":2364},[76,152336,152337,152340,152342,152344,152346,152349],{"class":78,"line":9887},[76,152338,152339],{"class":86},"    name ",[76,152341,133],{"class":82},[76,152343,60574],{"class":136},[76,152345,87],{"class":86},[76,152347,152348],{"class":192},"\"请输入姓名:\"",[76,152350,93],{"class":86},[76,152352,152353,152356,152358,152361,152364],{"class":78,"line":9892},[76,152354,152355],{"class":86},"    age ",[76,152357,133],{"class":82},[76,152359,152360],{"class":86}," input_int(",[76,152362,152363],{"class":192},"\"请输入年龄:\"",[76,152365,93],{"class":86},[76,152367,152368,152371,152373,152376,152379],{"class":78,"line":16571},[76,152369,152370],{"class":86},"    score ",[76,152372,133],{"class":82},[76,152374,152375],{"class":86}," input_float(",[76,152377,152378],{"class":192},"\"请输入成绩:\"",[76,152380,93],{"class":86},[76,152382,152383],{"class":78,"line":16577},[76,152384,2365],{"emptyLinePlaceholder":2364},[76,152386,152387],{"class":78,"line":16600},[76,152388,152389],{"class":86},"    students.append({\n",[76,152391,152392,152395],{"class":78,"line":16606},[76,152393,152394],{"class":192},"        \"student_id\"",[76,152396,152397],{"class":86},": student_id,\n",[76,152399,152400,152403],{"class":78,"line":16629},[76,152401,152402],{"class":192},"        \"name\"",[76,152404,152405],{"class":86},": name,\n",[76,152407,152408,152411],{"class":78,"line":16643},[76,152409,152410],{"class":192},"        \"age\"",[76,152412,152413],{"class":86},": age,\n",[76,152415,152416,152419],{"class":78,"line":16663},[76,152417,152418],{"class":192},"        \"score\"",[76,152420,152421],{"class":86},": score,\n",[76,152423,152424],{"class":78,"line":16669},[76,152425,33430],{"class":86},[76,152427,152428],{"class":78,"line":16680},[76,152429,152430],{"class":86},"    save_students(students)\n",[76,152432,152433,152435,152437,152440],{"class":78,"line":16703},[76,152434,31268],{"class":136},[76,152436,87],{"class":86},[76,152438,152439],{"class":192},"\"添加成功\"",[76,152441,93],{"class":86},[76,152443,152444],{"class":78,"line":16725},[76,152445,2365],{"emptyLinePlaceholder":2364},[76,152447,152448],{"class":78,"line":16730},[76,152449,2365],{"emptyLinePlaceholder":2364},[76,152451,152452,152454,152457],{"class":78,"line":16736},[76,152453,31916],{"class":82},[76,152455,152456],{"class":1927}," delete_student",[76,152458,151930],{"class":86},[76,152460,152461,152463,152465,152467,152469,152472],{"class":78,"line":16750},[76,152462,152292],{"class":86},[76,152464,133],{"class":82},[76,152466,60574],{"class":136},[76,152468,87],{"class":86},[76,152470,152471],{"class":192},"\"请输入要删除的学号:\"",[76,152473,93],{"class":86},[76,152475,152476,152479,152481],{"class":78,"line":16763},[76,152477,152478],{"class":86},"    student ",[76,152480,133],{"class":82},[76,152482,152483],{"class":86}," find_student(students, student_id)\n",[76,152485,152486],{"class":78,"line":16768},[76,152487,2365],{"emptyLinePlaceholder":2364},[76,152489,152490,152492,152494,152496,152498],{"class":78,"line":16782},[76,152491,3066],{"class":82},[76,152493,152106],{"class":86},[76,152495,38896],{"class":82},[76,152497,38902],{"class":136},[76,152499,3704],{"class":86},[76,152501,152502,152504,152506,152509],{"class":78,"line":16787},[76,152503,32420],{"class":136},[76,152505,87],{"class":86},[76,152507,152508],{"class":192},"\"学生不存在\"",[76,152510,93],{"class":86},[76,152512,152513],{"class":78,"line":16793},[76,152514,152330],{"class":82},[76,152516,152517],{"class":78,"line":16798},[76,152518,2365],{"emptyLinePlaceholder":2364},[76,152520,152521],{"class":78,"line":16812},[76,152522,152523],{"class":86},"    students.remove(student)\n",[76,152525,152526],{"class":78,"line":16817},[76,152527,152430],{"class":86},[76,152529,152530,152532,152534,152537],{"class":78,"line":16822},[76,152531,31268],{"class":136},[76,152533,87],{"class":86},[76,152535,152536],{"class":192},"\"删除成功\"",[76,152538,93],{"class":86},[76,152540,152541],{"class":78,"line":16836},[76,152542,2365],{"emptyLinePlaceholder":2364},[76,152544,152545],{"class":78,"line":16848},[76,152546,2365],{"emptyLinePlaceholder":2364},[76,152548,152549,152551,152554],{"class":78,"line":16853},[76,152550,31916],{"class":82},[76,152552,152553],{"class":1927}," update_student",[76,152555,151930],{"class":86},[76,152557,152558,152560,152562,152564,152566,152569],{"class":78,"line":16866},[76,152559,152292],{"class":86},[76,152561,133],{"class":82},[76,152563,60574],{"class":136},[76,152565,87],{"class":86},[76,152567,152568],{"class":192},"\"请输入要修改的学号:\"",[76,152570,93],{"class":86},[76,152572,152573,152575,152577],{"class":78,"line":16871},[76,152574,152478],{"class":86},[76,152576,133],{"class":82},[76,152578,152483],{"class":86},[76,152580,152581],{"class":78,"line":16876},[76,152582,2365],{"emptyLinePlaceholder":2364},[76,152584,152585,152587,152589,152591,152593],{"class":78,"line":16881},[76,152586,3066],{"class":82},[76,152588,152106],{"class":86},[76,152590,38896],{"class":82},[76,152592,38902],{"class":136},[76,152594,3704],{"class":86},[76,152596,152597,152599,152601,152603],{"class":78,"line":16894},[76,152598,32420],{"class":136},[76,152600,87],{"class":86},[76,152602,152508],{"class":192},[76,152604,93],{"class":86},[76,152606,152607],{"class":78,"line":16899},[76,152608,152330],{"class":82},[76,152610,152611],{"class":78,"line":32602},[76,152612,2365],{"emptyLinePlaceholder":2364},[76,152614,152615,152617,152619,152621,152623,152626],{"class":78,"line":32608},[76,152616,152339],{"class":86},[76,152618,133],{"class":82},[76,152620,60574],{"class":136},[76,152622,87],{"class":86},[76,152624,152625],{"class":192},"\"请输入新姓名:\"",[76,152627,93],{"class":86},[76,152629,152630,152632,152634,152636,152639],{"class":78,"line":32614},[76,152631,152355],{"class":86},[76,152633,133],{"class":82},[76,152635,152360],{"class":86},[76,152637,152638],{"class":192},"\"请输入新年龄:\"",[76,152640,93],{"class":86},[76,152642,152643,152645,152647,152649,152652],{"class":78,"line":32620},[76,152644,152370],{"class":86},[76,152646,133],{"class":82},[76,152648,152375],{"class":86},[76,152650,152651],{"class":192},"\"请输入新成绩:\"",[76,152653,93],{"class":86},[76,152655,152656],{"class":78,"line":32626},[76,152657,2365],{"emptyLinePlaceholder":2364},[76,152659,152660,152663,152665,152667,152669],{"class":78,"line":32637},[76,152661,152662],{"class":86},"    student[",[76,152664,62648],{"class":192},[76,152666,4408],{"class":86},[76,152668,133],{"class":82},[76,152670,149764],{"class":86},[76,152672,152673,152675,152677,152679,152681],{"class":78,"line":32643},[76,152674,152662],{"class":86},[76,152676,69093],{"class":192},[76,152678,4408],{"class":86},[76,152680,133],{"class":82},[76,152682,149776],{"class":86},[76,152684,152685,152687,152689,152691,152693],{"class":78,"line":32663},[76,152686,152662],{"class":86},[76,152688,151441],{"class":192},[76,152690,4408],{"class":86},[76,152692,133],{"class":82},[76,152694,1543],{"class":86},[76,152696,152697],{"class":78,"line":32669},[76,152698,2365],{"emptyLinePlaceholder":2364},[76,152700,152701],{"class":78,"line":32680},[76,152702,152430],{"class":86},[76,152704,152705,152707,152709,152712],{"class":78,"line":32686},[76,152706,31268],{"class":136},[76,152708,87],{"class":86},[76,152710,152711],{"class":192},"\"修改成功\"",[76,152713,93],{"class":86},[76,152715,152716],{"class":78,"line":32692},[76,152717,2365],{"emptyLinePlaceholder":2364},[76,152719,152720],{"class":78,"line":32698},[76,152721,2365],{"emptyLinePlaceholder":2364},[76,152723,152724,152726,152729],{"class":78,"line":32704},[76,152725,31916],{"class":82},[76,152727,152728],{"class":1927}," query_student",[76,152730,151930],{"class":86},[76,152732,152733,152735,152737,152739,152741,152744],{"class":78,"line":32710},[76,152734,152292],{"class":86},[76,152736,133],{"class":82},[76,152738,60574],{"class":136},[76,152740,87],{"class":86},[76,152742,152743],{"class":192},"\"请输入要查询的学号:\"",[76,152745,93],{"class":86},[76,152747,152748,152750,152752],{"class":78,"line":32716},[76,152749,152478],{"class":86},[76,152751,133],{"class":82},[76,152753,152483],{"class":86},[76,152755,152756],{"class":78,"line":32722},[76,152757,2365],{"emptyLinePlaceholder":2364},[76,152759,152760,152762,152764,152766,152768],{"class":78,"line":32742},[76,152761,3066],{"class":82},[76,152763,152106],{"class":86},[76,152765,38896],{"class":82},[76,152767,38902],{"class":136},[76,152769,3704],{"class":86},[76,152771,152772,152774,152776,152778],{"class":78,"line":32748},[76,152773,32420],{"class":136},[76,152775,87],{"class":86},[76,152777,152508],{"class":192},[76,152779,93],{"class":86},[76,152781,152782],{"class":78,"line":32764},[76,152783,152330],{"class":82},[76,152785,152786],{"class":78,"line":32770},[76,152787,2365],{"emptyLinePlaceholder":2364},[76,152789,152790],{"class":78,"line":32784},[76,152791,152792],{"class":86},"    print_student(student)\n",[76,152794,152795],{"class":78,"line":32790},[76,152796,2365],{"emptyLinePlaceholder":2364},[76,152798,152799],{"class":78,"line":32805},[76,152800,2365],{"emptyLinePlaceholder":2364},[76,152802,152803,152805,152808],{"class":78,"line":32811},[76,152804,31916],{"class":82},[76,152806,152807],{"class":1927}," print_student",[76,152809,152810],{"class":86},"(student):\n",[76,152812,152813,152815],{"class":78,"line":32820},[76,152814,31268],{"class":136},[76,152816,151408],{"class":86},[76,152818,152819,152822,152824,152826,152829,152832,152834,152837],{"class":78,"line":32826},[76,152820,152821],{"class":82},"        f",[76,152823,339],{"class":192},[76,152825,984],{"class":136},[76,152827,152828],{"class":86},"student[",[76,152830,152831],{"class":192},"'student_id'",[76,152833,1028],{"class":86},[76,152835,152836],{"class":136},"}\\t",[76,152838,25102],{"class":192},[76,152840,152841,152843,152845,152847,152849,152852,152854,152856],{"class":78,"line":32835},[76,152842,152821],{"class":82},[76,152844,339],{"class":192},[76,152846,984],{"class":136},[76,152848,152828],{"class":86},[76,152850,152851],{"class":192},"'name'",[76,152853,1028],{"class":86},[76,152855,152836],{"class":136},[76,152857,25102],{"class":192},[76,152859,152860,152862,152864,152866,152868,152871,152873,152875],{"class":78,"line":32841},[76,152861,152821],{"class":82},[76,152863,339],{"class":192},[76,152865,984],{"class":136},[76,152867,152828],{"class":86},[76,152869,152870],{"class":192},"'age'",[76,152872,1028],{"class":86},[76,152874,152836],{"class":136},[76,152876,25102],{"class":192},[76,152878,152879,152881,152883,152885,152887,152890,152892,152894],{"class":78,"line":32847},[76,152880,152821],{"class":82},[76,152882,339],{"class":192},[76,152884,984],{"class":136},[76,152886,152828],{"class":86},[76,152888,152889],{"class":192},"'score'",[76,152891,1028],{"class":86},[76,152893,1034],{"class":136},[76,152895,25102],{"class":192},[76,152897,152898],{"class":78,"line":32856},[76,152899,152900],{"class":86},"    )\n",[76,152902,152903],{"class":78,"line":32862},[76,152904,2365],{"emptyLinePlaceholder":2364},[76,152906,152907],{"class":78,"line":32873},[76,152908,2365],{"emptyLinePlaceholder":2364},[76,152910,152911,152913,152916],{"class":78,"line":32879},[76,152912,31916],{"class":82},[76,152914,152915],{"class":1927}," show_all_students",[76,152917,151930],{"class":86},[76,152919,152920,152922,152924],{"class":78,"line":32898},[76,152921,3066],{"class":82},[76,152923,38899],{"class":82},[76,152925,152111],{"class":86},[76,152927,152928,152930,152932,152935],{"class":78,"line":32904},[76,152929,32420],{"class":136},[76,152931,87],{"class":86},[76,152933,152934],{"class":192},"\"暂无学生\"",[76,152936,93],{"class":86},[76,152938,152939],{"class":78,"line":32915},[76,152940,152330],{"class":82},[76,152942,152943],{"class":78,"line":32921},[76,152944,2365],{"emptyLinePlaceholder":2364},[76,152946,152947,152949,152951,152954,152956,152959,152961,152964,152966,152969],{"class":78,"line":32941},[76,152948,31268],{"class":136},[76,152950,87],{"class":86},[76,152952,152953],{"class":192},"\"学号",[76,152955,1194],{"class":136},[76,152957,152958],{"class":192},"姓名",[76,152960,1194],{"class":136},[76,152962,152963],{"class":192},"年龄",[76,152965,1194],{"class":136},[76,152967,152968],{"class":192},"成绩\"",[76,152970,93],{"class":86},[76,152972,152973,152975,152977,152979],{"class":78,"line":32957},[76,152974,3166],{"class":82},[76,152976,152106],{"class":86},[76,152978,26012],{"class":82},[76,152980,152111],{"class":86},[76,152982,152983],{"class":78,"line":32963},[76,152984,152985],{"class":86},"        print_student(student)\n",[76,152987,152988],{"class":78,"line":32977},[76,152989,2365],{"emptyLinePlaceholder":2364},[76,152991,152992],{"class":78,"line":32983},[76,152993,2365],{"emptyLinePlaceholder":2364},[76,152995,152996,152998,153000],{"class":78,"line":32989},[76,152997,31916],{"class":82},[76,152999,1937],{"class":1927},[76,153001,31922],{"class":86},[76,153003,153004,153007,153009],{"class":78,"line":33000},[76,153005,153006],{"class":86},"    students ",[76,153008,133],{"class":82},[76,153010,153011],{"class":86}," load_students()\n",[76,153013,153014],{"class":78,"line":33006},[76,153015,2365],{"emptyLinePlaceholder":2364},[76,153017,153018,153020,153022],{"class":78,"line":33012},[76,153019,2215],{"class":82},[76,153021,95261],{"class":136},[76,153023,3704],{"class":86},[76,153025,153026],{"class":78,"line":33022},[76,153027,153028],{"class":86},"        show_menu()\n",[76,153030,153031,153034,153036,153038,153040,153043],{"class":78,"line":33028},[76,153032,153033],{"class":86},"        choice ",[76,153035,133],{"class":82},[76,153037,60574],{"class":136},[76,153039,87],{"class":86},[76,153041,153042],{"class":192},"\"请输入操作:\"",[76,153044,93],{"class":86},[76,153046,153047],{"class":78,"line":33039},[76,153048,2365],{"emptyLinePlaceholder":2364},[76,153050,153051,153053,153056,153058,153061],{"class":78,"line":33045},[76,153052,2462],{"class":82},[76,153054,153055],{"class":86}," choice ",[76,153057,2914],{"class":82},[76,153059,153060],{"class":192}," \"1\"",[76,153062,3704],{"class":86},[76,153064,153065],{"class":78,"line":33055},[76,153066,153067],{"class":86},"            add_student(students)\n",[76,153069,153070,153073,153075,153077,153080],{"class":78,"line":33060},[76,153071,153072],{"class":82},"        elif",[76,153074,153055],{"class":86},[76,153076,2914],{"class":82},[76,153078,153079],{"class":192}," \"2\"",[76,153081,3704],{"class":86},[76,153083,153084],{"class":78,"line":33066},[76,153085,153086],{"class":86},"            delete_student(students)\n",[76,153088,153089,153091,153093,153095,153098],{"class":78,"line":33115},[76,153090,153072],{"class":82},[76,153092,153055],{"class":86},[76,153094,2914],{"class":82},[76,153096,153097],{"class":192}," \"3\"",[76,153099,3704],{"class":86},[76,153101,153102],{"class":78,"line":33162},[76,153103,153104],{"class":86},"            update_student(students)\n",[76,153106,153107,153109,153111,153113,153116],{"class":78,"line":33167},[76,153108,153072],{"class":82},[76,153110,153055],{"class":86},[76,153112,2914],{"class":82},[76,153114,153115],{"class":192}," \"4\"",[76,153117,3704],{"class":86},[76,153119,153120],{"class":78,"line":33173},[76,153121,153122],{"class":86},"            query_student(students)\n",[76,153124,153125,153127,153129,153131,153134],{"class":78,"line":33192},[76,153126,153072],{"class":82},[76,153128,153055],{"class":86},[76,153130,2914],{"class":82},[76,153132,153133],{"class":192}," \"5\"",[76,153135,3704],{"class":86},[76,153137,153138],{"class":78,"line":33198},[76,153139,153140],{"class":86},"            show_all_students(students)\n",[76,153142,153143,153145,153147,153149,153152],{"class":78,"line":33218},[76,153144,153072],{"class":82},[76,153146,153055],{"class":86},[76,153148,2914],{"class":82},[76,153150,153151],{"class":192}," \"0\"",[76,153153,3704],{"class":86},[76,153155,153156,153158,153160,153163],{"class":78,"line":33224},[76,153157,34619],{"class":136},[76,153159,87],{"class":86},[76,153161,153162],{"class":192},"\"退出系统\"",[76,153164,93],{"class":86},[76,153166,153167],{"class":78,"line":33230},[76,153168,115067],{"class":82},[76,153170,153171,153173],{"class":78,"line":33240},[76,153172,2499],{"class":82},[76,153174,3704],{"class":86},[76,153176,153177,153179,153181,153184],{"class":78,"line":33245},[76,153178,34619],{"class":136},[76,153180,87],{"class":86},[76,153182,153183],{"class":192},"\"输入错误\"",[76,153185,93],{"class":86},[76,153187,153188],{"class":78,"line":33251},[76,153189,2365],{"emptyLinePlaceholder":2364},[76,153191,153192],{"class":78,"line":33267},[76,153193,2365],{"emptyLinePlaceholder":2364},[76,153195,153196,153198,153200,153202,153204],{"class":78,"line":33312},[76,153197,1495],{"class":82},[76,153199,31189],{"class":136},[76,153201,101528],{"class":82},[76,153203,101531],{"class":192},[76,153205,3704],{"class":86},[76,153207,153208],{"class":78,"line":33318},[76,153209,101538],{"class":86},[21,153211,153212],{},"这个项目串联了：",[29,153214,153215,153218,153221,153224,153227,153229],{},[32,153216,153217],{},"菜单循环。",[32,153219,153220],{},"函数封装。",[32,153222,153223],{},"列表字典。",[32,153225,153226],{},"JSON 读写。",[32,153228,151696],{},[32,153230,153231,28354],{},[73,153232,153233],{},"if __name__ == \"__main__\"",[16,153235,153237],{"id":153236},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[21,153239,153240],{},"可以进一步拆成两个类：",[29,153242,153243,153248],{},[32,153244,153245,153247],{},[73,153246,149537],{},"：表示单个学生。",[32,153249,153250,153252],{},[73,153251,151563],{},"：负责学生增删改查和文件保存。",[21,153254,153255],{},"示意代码：",[66,153257,153259],{"className":30347,"code":153258,"language":30349,"meta":71,"style":71},"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",[73,153260,153261,153271,153275,153279,153283,153291,153298,153304,153310,153316,153320,153328,153334,153344,153354,153364,153374,153378,153382,153388,153396,153404,153412,153420,153428,153436],{"__ignoreMap":71},[76,153262,153263,153265,153267,153269],{"class":78,"line":79},[76,153264,30706],{"class":82},[76,153266,151121],{"class":86},[76,153268,30361],{"class":82},[76,153270,151126],{"class":86},[76,153272,153273],{"class":78,"line":96},[76,153274,2365],{"emptyLinePlaceholder":2364},[76,153276,153277],{"class":78,"line":1143},[76,153278,2365],{"emptyLinePlaceholder":2364},[76,153280,153281],{"class":78,"line":1158},[76,153282,151139],{"class":1927},[76,153284,153285,153287,153289],{"class":78,"line":1164},[76,153286,14661],{"class":82},[76,153288,7865],{"class":1927},[76,153290,3704],{"class":86},[76,153292,153293,153296],{"class":78,"line":1178},[76,153294,153295],{"class":86},"    student_id: ",[76,153297,151155],{"class":136},[76,153299,153300,153302],{"class":78,"line":1184},[76,153301,151152],{"class":86},[76,153303,151155],{"class":136},[76,153305,153306,153308],{"class":78,"line":1275},[76,153307,151160],{"class":86},[76,153309,151163],{"class":136},[76,153311,153312,153314],{"class":78,"line":1281},[76,153313,151168],{"class":86},[76,153315,151171],{"class":136},[76,153317,153318],{"class":78,"line":1293},[76,153319,2365],{"emptyLinePlaceholder":2364},[76,153321,153322,153324,153326],{"class":78,"line":1576},[76,153323,30770],{"class":82},[76,153325,151319],{"class":1927},[76,153327,30776],{"class":86},[76,153329,153330,153332],{"class":78,"line":1581},[76,153331,14719],{"class":82},[76,153333,15539],{"class":86},[76,153335,153336,153338,153340,153342],{"class":78,"line":1587},[76,153337,151332],{"class":192},[76,153339,51406],{"class":86},[76,153341,30792],{"class":136},[76,153343,151339],{"class":86},[76,153345,153346,153348,153350,153352],{"class":78,"line":1592},[76,153347,151344],{"class":192},[76,153349,51406],{"class":86},[76,153351,30792],{"class":136},[76,153353,151351],{"class":86},[76,153355,153356,153358,153360,153362],{"class":78,"line":1606},[76,153357,151356],{"class":192},[76,153359,51406],{"class":86},[76,153361,30792],{"class":136},[76,153363,151363],{"class":86},[76,153365,153366,153368,153370,153372],{"class":78,"line":1611},[76,153367,151368],{"class":192},[76,153369,51406],{"class":86},[76,153371,30792],{"class":136},[76,153373,151375],{"class":86},[76,153375,153376],{"class":78,"line":1617},[76,153377,2494],{"class":86},[76,153379,153380],{"class":78,"line":1638},[76,153381,2365],{"emptyLinePlaceholder":2364},[76,153383,153384,153386],{"class":78,"line":1643},[76,153385,150983],{"class":1927},[76,153387,150986],{"class":136},[76,153389,153390,153392,153394],{"class":78,"line":1657},[76,153391,30770],{"class":82},[76,153393,151396],{"class":1927},[76,153395,151399],{"class":86},[76,153397,153398,153400,153402],{"class":78,"line":1662},[76,153399,14719],{"class":82},[76,153401,151003],{"class":136},[76,153403,151408],{"class":86},[76,153405,153406,153408,153410],{"class":78,"line":1691},[76,153407,151413],{"class":86},[76,153409,151416],{"class":192},[76,153411,87805],{"class":86},[76,153413,153414,153416,153418],{"class":78,"line":1696},[76,153415,151413],{"class":86},[76,153417,62648],{"class":192},[76,153419,87805],{"class":86},[76,153421,153422,153424,153426],{"class":78,"line":1713},[76,153423,151413],{"class":86},[76,153425,69093],{"class":192},[76,153427,87805],{"class":86},[76,153429,153430,153432,153434],{"class":78,"line":1718},[76,153431,151413],{"class":86},[76,153433,151441],{"class":192},[76,153435,87805],{"class":86},[76,153437,153438],{"class":78,"line":1723},[76,153439,38095],{"class":86},[21,153441,153442],{},"管理器示意：",[66,153444,153446],{"className":30347,"code":153445,"language":30349,"meta":71,"style":71},"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",[73,153447,153448,153457,153465,153476,153480,153490,153503,153514,153521,153527,153531,153540,153549,153555,153562],{"__ignoreMap":71},[76,153449,153450,153452,153455],{"class":78,"line":79},[76,153451,14661],{"class":82},[76,153453,153454],{"class":1927}," StudentManager",[76,153456,3704],{"class":86},[76,153458,153459,153461,153463],{"class":78,"line":96},[76,153460,30770],{"class":82},[76,153462,30773],{"class":136},[76,153464,30776],{"class":86},[76,153466,153467,153469,153472,153474],{"class":78,"line":1143},[76,153468,30814],{"class":136},[76,153470,153471],{"class":86},".students ",[76,153473,133],{"class":82},[76,153475,51807],{"class":86},[76,153477,153478],{"class":78,"line":1158},[76,153479,2365],{"emptyLinePlaceholder":2364},[76,153481,153482,153484,153487],{"class":78,"line":1164},[76,153483,30770],{"class":82},[76,153485,153486],{"class":1927}," find_by_id",[76,153488,153489],{"class":86},"(self, student_id):\n",[76,153491,153492,153494,153496,153498,153500],{"class":78,"line":1178},[76,153493,3368],{"class":82},[76,153495,152106],{"class":86},[76,153497,26012],{"class":82},[76,153499,38842],{"class":136},[76,153501,153502],{"class":86},".students:\n",[76,153504,153505,153507,153510,153512],{"class":78,"line":1184},[76,153506,4607],{"class":82},[76,153508,153509],{"class":86}," student.student_id ",[76,153511,2914],{"class":82},[76,153513,152127],{"class":86},[76,153515,153516,153519],{"class":78,"line":1275},[76,153517,153518],{"class":82},"                return",[76,153520,152134],{"class":86},[76,153522,153523,153525],{"class":78,"line":1281},[76,153524,14719],{"class":82},[76,153526,152141],{"class":136},[76,153528,153529],{"class":78,"line":1293},[76,153530,2365],{"emptyLinePlaceholder":2364},[76,153532,153533,153535,153537],{"class":78,"line":1576},[76,153534,30770],{"class":82},[76,153536,5176],{"class":1927},[76,153538,153539],{"class":86},"(self, student):\n",[76,153541,153542,153544,153546],{"class":78,"line":1581},[76,153543,2462],{"class":82},[76,153545,38842],{"class":136},[76,153547,153548],{"class":86},".find_by_id(student.student_id):\n",[76,153550,153551,153553],{"class":78,"line":1587},[76,153552,15699],{"class":82},[76,153554,125776],{"class":136},[76,153556,153557,153559],{"class":78,"line":1592},[76,153558,30814],{"class":136},[76,153560,153561],{"class":86},".students.append(student)\n",[76,153563,153564,153566],{"class":78,"line":1606},[76,153565,14719],{"class":82},[76,153567,153568],{"class":136}," True\n",[21,153570,153571],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[16,153573,153575],{"id":153574},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[46,153577,153579],{"id":153578},"_1251-数据结构","12.5.1 数据结构",[66,153581,153583],{"className":30347,"code":153582,"language":30349,"meta":71,"style":71},"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",[73,153584,153585,153593,153624,153654,153683,153712],{"__ignoreMap":71},[76,153586,153587,153589,153591],{"class":78,"line":79},[76,153588,148434],{"class":86},[76,153590,133],{"class":82},[76,153592,55416],{"class":86},[76,153594,153595,153597,153599,153601,153603,153605,153608,153610,153613,153615,153617,153619,153622],{"class":78,"line":96},[76,153596,148354],{"class":86},[76,153598,147966],{"class":192},[76,153600,51406],{"class":86},[76,153602,148577],{"class":192},[76,153604,12402],{"class":86},[76,153606,153607],{"class":192},"\"category\"",[76,153609,51406],{"class":86},[76,153611,153612],{"class":192},"\"手机\"",[76,153614,12402],{"class":86},[76,153616,84053],{"class":192},[76,153618,51406],{"class":86},[76,153620,153621],{"class":136},"12000",[76,153623,4895],{"class":86},[76,153625,153626,153628,153630,153632,153634,153636,153638,153640,153643,153645,153647,153649,153652],{"class":78,"line":1143},[76,153627,148354],{"class":86},[76,153629,147966],{"class":192},[76,153631,51406],{"class":86},[76,153633,148577],{"class":192},[76,153635,12402],{"class":86},[76,153637,153607],{"class":192},[76,153639,51406],{"class":86},[76,153641,153642],{"class":192},"\"电脑\"",[76,153644,12402],{"class":86},[76,153646,84053],{"class":192},[76,153648,51406],{"class":86},[76,153650,153651],{"class":136},"18000",[76,153653,4895],{"class":86},[76,153655,153656,153658,153660,153662,153664,153666,153668,153670,153672,153674,153676,153678,153681],{"class":78,"line":1158},[76,153657,148354],{"class":86},[76,153659,147966],{"class":192},[76,153661,51406],{"class":86},[76,153663,148598],{"class":192},[76,153665,12402],{"class":86},[76,153667,153607],{"class":192},[76,153669,51406],{"class":86},[76,153671,153612],{"class":192},[76,153673,12402],{"class":86},[76,153675,84053],{"class":192},[76,153677,51406],{"class":86},[76,153679,153680],{"class":136},"15000",[76,153682,4895],{"class":86},[76,153684,153685,153687,153689,153691,153693,153695,153697,153699,153701,153703,153705,153707,153710],{"class":78,"line":1164},[76,153686,148354],{"class":86},[76,153688,147966],{"class":192},[76,153690,51406],{"class":86},[76,153692,148598],{"class":192},[76,153694,12402],{"class":86},[76,153696,153607],{"class":192},[76,153698,51406],{"class":86},[76,153700,153642],{"class":192},[76,153702,12402],{"class":86},[76,153704,84053],{"class":192},[76,153706,51406],{"class":86},[76,153708,153709],{"class":136},"16000",[76,153711,4895],{"class":86},[76,153713,153714],{"class":78,"line":1178},[76,153715,33215],{"class":86},[46,153717,153719],{"id":153718},"_1252-按日期统计","12.5.2 按日期统计",[66,153721,153723],{"className":30347,"code":153722,"language":30349,"meta":71,"style":71},"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",[73,153724,153725,153734,153738,153749,153763,153776,153795,153799],{"__ignoreMap":71},[76,153726,153727,153730,153732],{"class":78,"line":79},[76,153728,153729],{"class":86},"daily_total ",[76,153731,133],{"class":82},[76,153733,87837],{"class":86},[76,153735,153736],{"class":78,"line":96},[76,153737,2365],{"emptyLinePlaceholder":2364},[76,153739,153740,153742,153744,153746],{"class":78,"line":1143},[76,153741,2990],{"class":82},[76,153743,148178],{"class":86},[76,153745,26012],{"class":82},[76,153747,153748],{"class":86}," sales:\n",[76,153750,153751,153754,153756,153759,153761],{"class":78,"line":1158},[76,153752,153753],{"class":86},"    date ",[76,153755,133],{"class":82},[76,153757,153758],{"class":86}," item[",[76,153760,147966],{"class":192},[76,153762,33215],{"class":86},[76,153764,153765,153768,153770,153772,153774],{"class":78,"line":1164},[76,153766,153767],{"class":86},"    amount ",[76,153769,133],{"class":82},[76,153771,153758],{"class":86},[76,153773,84053],{"class":192},[76,153775,33215],{"class":86},[76,153777,153778,153781,153783,153786,153788,153790,153792],{"class":78,"line":1178},[76,153779,153780],{"class":86},"    daily_total[date] ",[76,153782,133],{"class":82},[76,153784,153785],{"class":86}," daily_total.get(date, ",[76,153787,279],{"class":136},[76,153789,13681],{"class":86},[76,153791,569],{"class":82},[76,153793,153794],{"class":86}," amount\n",[76,153796,153797],{"class":78,"line":1184},[76,153798,2365],{"emptyLinePlaceholder":2364},[76,153800,153801,153803],{"class":78,"line":1275},[76,153802,30384],{"class":136},[76,153804,153805],{"class":86},"(daily_total)\n",[46,153807,153809],{"id":153808},"_1253-按类别统计","12.5.3 按类别统计",[66,153811,153813],{"className":30347,"code":153812,"language":30349,"meta":71,"style":71},"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",[73,153814,153815,153824,153828,153838,153851,153863,153881,153885],{"__ignoreMap":71},[76,153816,153817,153820,153822],{"class":78,"line":79},[76,153818,153819],{"class":86},"category_total ",[76,153821,133],{"class":82},[76,153823,87837],{"class":86},[76,153825,153826],{"class":78,"line":96},[76,153827,2365],{"emptyLinePlaceholder":2364},[76,153829,153830,153832,153834,153836],{"class":78,"line":1143},[76,153831,2990],{"class":82},[76,153833,148178],{"class":86},[76,153835,26012],{"class":82},[76,153837,153748],{"class":86},[76,153839,153840,153843,153845,153847,153849],{"class":78,"line":1158},[76,153841,153842],{"class":86},"    category ",[76,153844,133],{"class":82},[76,153846,153758],{"class":86},[76,153848,153607],{"class":192},[76,153850,33215],{"class":86},[76,153852,153853,153855,153857,153859,153861],{"class":78,"line":1164},[76,153854,153767],{"class":86},[76,153856,133],{"class":82},[76,153858,153758],{"class":86},[76,153860,84053],{"class":192},[76,153862,33215],{"class":86},[76,153864,153865,153868,153870,153873,153875,153877,153879],{"class":78,"line":1178},[76,153866,153867],{"class":86},"    category_total[category] ",[76,153869,133],{"class":82},[76,153871,153872],{"class":86}," category_total.get(category, ",[76,153874,279],{"class":136},[76,153876,13681],{"class":86},[76,153878,569],{"class":82},[76,153880,153794],{"class":86},[76,153882,153883],{"class":78,"line":1184},[76,153884,2365],{"emptyLinePlaceholder":2364},[76,153886,153887,153889],{"class":78,"line":1275},[76,153888,30384],{"class":136},[76,153890,153891],{"class":86},"(category_total)\n",[46,153893,153895],{"id":153894},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[66,153897,153899],{"className":30347,"code":153898,"language":30349,"meta":71,"style":71},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[73,153900,153901,153926],{"__ignoreMap":71},[76,153902,153903,153906,153908,153910,153913,153916,153919,153922,153924],{"class":78,"line":79},[76,153904,153905],{"class":86},"top_date, top_amount ",[76,153907,133],{"class":82},[76,153909,5918],{"class":136},[76,153911,153912],{"class":86},"(daily_total.items(), ",[76,153914,153915],{"class":5183},"key",[76,153917,153918],{"class":82},"=lambda",[76,153920,153921],{"class":86}," item: item[",[76,153923,305],{"class":136},[76,153925,4622],{"class":86},[76,153927,153928,153930],{"class":78,"line":96},[76,153929,30384],{"class":136},[76,153931,153932],{"class":86},"(top_date, top_amount)\n",[16,153934,153936],{"id":153935},"_126-绘制柱状图","12.6 绘制柱状图",[66,153938,153940],{"className":30347,"code":153939,"language":30349,"meta":71,"style":71},"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",[73,153941,153942,153956,153967,153971,153979,153991,154003,154014,154018,154022,154032,154043,154057,154062,154079,154096,154112,154116],{"__ignoreMap":71},[76,153943,153944,153946,153948,153950,153952,153954],{"class":78,"line":79},[76,153945,30706],{"class":82},[76,153947,147348],{"class":86},[76,153949,30361],{"class":82},[76,153951,147353],{"class":86},[76,153953,31352],{"class":82},[76,153955,147358],{"class":86},[76,153957,153958,153960,153962,153964],{"class":78,"line":96},[76,153959,30706],{"class":82},[76,153961,147207],{"class":86},[76,153963,30361],{"class":82},[76,153965,153966],{"class":86}," Bar\n",[76,153968,153969],{"class":78,"line":1143},[76,153970,2365],{"emptyLinePlaceholder":2364},[76,153972,153973,153975,153977],{"class":78,"line":1158},[76,153974,153819],{"class":86},[76,153976,133],{"class":82},[76,153978,15539],{"class":86},[76,153980,153981,153984,153986,153989],{"class":78,"line":1164},[76,153982,153983],{"class":192},"    \"手机\"",[76,153985,51406],{"class":86},[76,153987,153988],{"class":136},"27000",[76,153990,31435],{"class":86},[76,153992,153993,153996,153998,154001],{"class":78,"line":1178},[76,153994,153995],{"class":192},"    \"电脑\"",[76,153997,51406],{"class":86},[76,153999,154000],{"class":136},"34000",[76,154002,31435],{"class":86},[76,154004,154005,154008,154010,154012],{"class":78,"line":1184},[76,154006,154007],{"class":192},"    \"耳机\"",[76,154009,51406],{"class":86},[76,154011,124368],{"class":136},[76,154013,31435],{"class":86},[76,154015,154016],{"class":78,"line":1275},[76,154017,1529],{"class":86},[76,154019,154020],{"class":78,"line":1281},[76,154021,2365],{"emptyLinePlaceholder":2364},[76,154023,154024,154027,154029],{"class":78,"line":1293},[76,154025,154026],{"class":86},"bar ",[76,154028,133],{"class":82},[76,154030,154031],{"class":86}," Bar()\n",[76,154033,154034,154037,154040],{"class":78,"line":1576},[76,154035,154036],{"class":86},"bar.add_xaxis(",[76,154038,154039],{"class":136},"list",[76,154041,154042],{"class":86},"(category_total.keys()))\n",[76,154044,154045,154048,154050,154052,154054],{"class":78,"line":1581},[76,154046,154047],{"class":86},"bar.add_yaxis(",[76,154049,147264],{"class":192},[76,154051,12402],{"class":86},[76,154053,154039],{"class":136},[76,154055,154056],{"class":86},"(category_total.values()))\n",[76,154058,154059],{"class":78,"line":1587},[76,154060,154061],{"class":86},"bar.set_global_opts(\n",[76,154063,154064,154066,154068,154070,154072,154074,154077],{"class":78,"line":1592},[76,154065,147442],{"class":5183},[76,154067,133],{"class":82},[76,154069,147447],{"class":86},[76,154071,51376],{"class":5183},[76,154073,133],{"class":82},[76,154075,154076],{"class":192},"\"品类销售额\"",[76,154078,38016],{"class":86},[76,154080,154081,154083,154085,154087,154089,154091,154094],{"class":78,"line":1606},[76,154082,147461],{"class":5183},[76,154084,133],{"class":82},[76,154086,147466],{"class":86},[76,154088,79779],{"class":5183},[76,154090,133],{"class":82},[76,154092,154093],{"class":192},"\"品类\"",[76,154095,38016],{"class":86},[76,154097,154098,154100,154102,154104,154106,154108,154110],{"class":78,"line":1611},[76,154099,147480],{"class":5183},[76,154101,133],{"class":82},[76,154103,147466],{"class":86},[76,154105,79779],{"class":5183},[76,154107,133],{"class":82},[76,154109,147264],{"class":192},[76,154111,38016],{"class":86},[76,154113,154114],{"class":78,"line":1617},[76,154115,93],{"class":86},[76,154117,154118,154121,154124],{"class":78,"line":1638},[76,154119,154120],{"class":86},"bar.render(",[76,154122,154123],{"class":192},"\"category_sales.html\"",[76,154125,93],{"class":86},[16,154127,154129],{"id":154128},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[21,154131,154132],{},"时间线适合展示不同日期、月份、年份的数据变化。",[66,154134,154136],{"className":30347,"code":154135,"language":30349,"meta":71,"style":71},"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",[73,154137,154138,154152,154163,154167,154175,154199,154222,154247,154251,154255,154265,154269,154280,154289,154299,154313,154344,154349,154353],{"__ignoreMap":71},[76,154139,154140,154142,154144,154146,154148,154150],{"class":78,"line":79},[76,154141,30706],{"class":82},[76,154143,147348],{"class":86},[76,154145,30361],{"class":82},[76,154147,147353],{"class":86},[76,154149,31352],{"class":82},[76,154151,147358],{"class":86},[76,154153,154154,154156,154158,154160],{"class":78,"line":96},[76,154155,30706],{"class":82},[76,154157,147207],{"class":86},[76,154159,30361],{"class":82},[76,154161,154162],{"class":86}," Bar, Timeline\n",[76,154164,154165],{"class":78,"line":1143},[76,154166,2365],{"emptyLinePlaceholder":2364},[76,154168,154169,154171,154173],{"class":78,"line":1158},[76,154170,101627],{"class":86},[76,154172,133],{"class":82},[76,154174,15539],{"class":86},[76,154176,154177,154180,154183,154185,154187,154189,154191,154193,154195,154197],{"class":78,"line":1164},[76,154178,154179],{"class":192},"    \"2024-10-01\"",[76,154181,154182],{"class":86},": {",[76,154184,153612],{"class":192},[76,154186,51406],{"class":86},[76,154188,153621],{"class":136},[76,154190,12402],{"class":86},[76,154192,153642],{"class":192},[76,154194,51406],{"class":86},[76,154196,153651],{"class":136},[76,154198,4895],{"class":86},[76,154200,154201,154204,154206,154208,154210,154212,154214,154216,154218,154220],{"class":78,"line":1178},[76,154202,154203],{"class":192},"    \"2024-10-02\"",[76,154205,154182],{"class":86},[76,154207,153612],{"class":192},[76,154209,51406],{"class":86},[76,154211,153680],{"class":136},[76,154213,12402],{"class":86},[76,154215,153642],{"class":192},[76,154217,51406],{"class":86},[76,154219,153709],{"class":136},[76,154221,4895],{"class":86},[76,154223,154224,154227,154229,154231,154233,154236,154238,154240,154242,154245],{"class":78,"line":1184},[76,154225,154226],{"class":192},"    \"2024-10-03\"",[76,154228,154182],{"class":86},[76,154230,153612],{"class":192},[76,154232,51406],{"class":86},[76,154234,154235],{"class":136},"17000",[76,154237,12402],{"class":86},[76,154239,153642],{"class":192},[76,154241,51406],{"class":86},[76,154243,154244],{"class":136},"19000",[76,154246,4895],{"class":86},[76,154248,154249],{"class":78,"line":1275},[76,154250,1529],{"class":86},[76,154252,154253],{"class":78,"line":1281},[76,154254,2365],{"emptyLinePlaceholder":2364},[76,154256,154257,154260,154262],{"class":78,"line":1293},[76,154258,154259],{"class":86},"timeline ",[76,154261,133],{"class":82},[76,154263,154264],{"class":86}," Timeline()\n",[76,154266,154267],{"class":78,"line":1576},[76,154268,2365],{"emptyLinePlaceholder":2364},[76,154270,154271,154273,154276,154278],{"class":78,"line":1581},[76,154272,2990],{"class":82},[76,154274,154275],{"class":86}," date, category_data ",[76,154277,26012],{"class":82},[76,154279,149117],{"class":86},[76,154281,154282,154285,154287],{"class":78,"line":1587},[76,154283,154284],{"class":86},"    bar ",[76,154286,133],{"class":82},[76,154288,154031],{"class":86},[76,154290,154291,154294,154296],{"class":78,"line":1592},[76,154292,154293],{"class":86},"    bar.add_xaxis(",[76,154295,154039],{"class":136},[76,154297,154298],{"class":86},"(category_data.keys()))\n",[76,154300,154301,154304,154306,154308,154310],{"class":78,"line":1606},[76,154302,154303],{"class":86},"    bar.add_yaxis(",[76,154305,147264],{"class":192},[76,154307,12402],{"class":86},[76,154309,154039],{"class":136},[76,154311,154312],{"class":86},"(category_data.values()))\n",[76,154314,154315,154318,154321,154323,154325,154327,154329,154331,154333,154335,154337,154339,154342],{"class":78,"line":1611},[76,154316,154317],{"class":86},"    bar.set_global_opts(",[76,154319,154320],{"class":5183},"title_opts",[76,154322,133],{"class":82},[76,154324,147447],{"class":86},[76,154326,51376],{"class":5183},[76,154328,133],{"class":82},[76,154330,140],{"class":82},[76,154332,339],{"class":192},[76,154334,984],{"class":136},[76,154336,73895],{"class":86},[76,154338,1034],{"class":136},[76,154340,154341],{"class":192},"销售额\"",[76,154343,30466],{"class":86},[76,154345,154346],{"class":78,"line":1617},[76,154347,154348],{"class":86},"    timeline.add(bar, date)\n",[76,154350,154351],{"class":78,"line":1638},[76,154352,2365],{"emptyLinePlaceholder":2364},[76,154354,154355,154358,154361],{"class":78,"line":1643},[76,154356,154357],{"class":86},"timeline.render(",[76,154359,154360],{"class":192},"\"timeline_sales.html\"",[76,154362,93],{"class":86},[16,154364,154366],{"id":154365},"_128-绘制地图","12.8 绘制地图",[21,154368,154369],{},"地图适合展示地区数据。",[66,154371,154373],{"className":30347,"code":154372,"language":30349,"meta":71,"style":71},"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",[73,154374,154375,154389,154400,154404,154412,154425,154437,154450,154463,154467,154471,154481,154496,154501,154518,154537,154541],{"__ignoreMap":71},[76,154376,154377,154379,154381,154383,154385,154387],{"class":78,"line":79},[76,154378,30706],{"class":82},[76,154380,147348],{"class":86},[76,154382,30361],{"class":82},[76,154384,147353],{"class":86},[76,154386,31352],{"class":82},[76,154388,147358],{"class":86},[76,154390,154391,154393,154395,154397],{"class":78,"line":96},[76,154392,30706],{"class":82},[76,154394,147207],{"class":86},[76,154396,30361],{"class":82},[76,154398,154399],{"class":86}," Map\n",[76,154401,154402],{"class":78,"line":1143},[76,154403,2365],{"emptyLinePlaceholder":2364},[76,154405,154406,154408,154410],{"class":78,"line":1158},[76,154407,101627],{"class":86},[76,154409,133],{"class":82},[76,154411,55416],{"class":86},[76,154413,154414,154417,154419,154421,154423],{"class":78,"line":1164},[76,154415,154416],{"class":86},"    (",[76,154418,69238],{"class":192},[76,154420,12402],{"class":86},[76,154422,905],{"class":136},[76,154424,38016],{"class":86},[76,154426,154427,154429,154431,154433,154435],{"class":78,"line":1178},[76,154428,154416],{"class":86},[76,154430,69258],{"class":192},[76,154432,12402],{"class":86},[76,154434,147281],{"class":136},[76,154436,38016],{"class":86},[76,154438,154439,154441,154444,154446,154448],{"class":78,"line":1184},[76,154440,154416],{"class":86},[76,154442,154443],{"class":192},"\"广东\"",[76,154445,12402],{"class":86},[76,154447,1686],{"class":136},[76,154449,38016],{"class":86},[76,154451,154452,154454,154457,154459,154461],{"class":78,"line":1275},[76,154453,154416],{"class":86},[76,154455,154456],{"class":192},"\"浙江\"",[76,154458,12402],{"class":86},[76,154460,147286],{"class":136},[76,154462,38016],{"class":86},[76,154464,154465],{"class":78,"line":1281},[76,154466,33215],{"class":86},[76,154468,154469],{"class":78,"line":1293},[76,154470,2365],{"emptyLinePlaceholder":2364},[76,154472,154473,154476,154478],{"class":78,"line":1576},[76,154474,154475],{"class":86},"map_chart ",[76,154477,133],{"class":82},[76,154479,154480],{"class":86}," Map()\n",[76,154482,154483,154486,154488,154491,154494],{"class":78,"line":1581},[76,154484,154485],{"class":86},"map_chart.add(",[76,154487,147264],{"class":192},[76,154489,154490],{"class":86},", data, ",[76,154492,154493],{"class":192},"\"china\"",[76,154495,93],{"class":86},[76,154497,154498],{"class":78,"line":1587},[76,154499,154500],{"class":86},"map_chart.set_global_opts(\n",[76,154502,154503,154505,154507,154509,154511,154513,154516],{"class":78,"line":1592},[76,154504,147442],{"class":5183},[76,154506,133],{"class":82},[76,154508,147447],{"class":86},[76,154510,51376],{"class":5183},[76,154512,133],{"class":82},[76,154514,154515],{"class":192},"\"地区销售额\"",[76,154517,38016],{"class":86},[76,154519,154520,154523,154525,154528,154531,154533,154535],{"class":78,"line":1606},[76,154521,154522],{"class":5183},"    visualmap_opts",[76,154524,133],{"class":82},[76,154526,154527],{"class":86},"opts.VisualMapOpts(",[76,154529,154530],{"class":5183},"max_",[76,154532,133],{"class":82},[76,154534,1686],{"class":136},[76,154536,38016],{"class":86},[76,154538,154539],{"class":78,"line":1611},[76,154540,93],{"class":86},[76,154542,154543,154546,154549],{"class":78,"line":1617},[76,154544,154545],{"class":86},"map_chart.render(",[76,154547,154548],{"class":192},"\"map_sales.html\"",[76,154550,93],{"class":86},[21,154552,154553],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[16,154555,154557],{"id":154556},"_129-项目拆分建议","12.9 项目拆分建议",[21,154559,154560],{},"当代码超过一个文件时，可以这样组织：",[66,154562,154565],{"className":154563,"code":154564,"language":5154,"meta":71},[5152],"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",[73,154566,154564],{"__ignoreMap":71},[21,154568,154569],{},"职责：",[29,154571,154572,154578,154584,154590],{},[32,154573,154574,154577],{},[73,154575,154576],{},"main.py","：程序入口。",[32,154579,154580,154583],{},[73,154581,154582],{},"file_utils.py","：读写 JSON。",[32,154585,154586,154589],{},[73,154587,154588],{},"sales_service.py","：统计销售数据。",[32,154591,154592,154595],{},[73,154593,154594],{},"chart_builder.py","：生成图表。",[16,154597,154599],{"id":154598},"_1210-python基础复习清单","12.10 Python基础复习清单",[21,154601,154602],{},"语法基础：",[29,154604,154605,154608,154611,154614],{},[32,154606,154607],{},"会写变量、注释、输入输出。",[32,154609,154610],{},"会使用 int、float、str、bool。",[32,154612,154613],{},"会做类型转换。",[32,154615,154616],{},"会使用 f-string 格式化输出。",[21,154618,154619],{},"流程控制：",[29,154621,154622,154628,154634,154642],{},[32,154623,154624,154625,28354],{},"会写 ",[73,154626,154627],{},"if elif else",[32,154629,154624,154630,100987,154632,28354],{},[73,154631,108632],{},[73,154633,2990],{},[32,154635,154636,154637,100987,154639,28354],{},"理解 ",[73,154638,2017],{},[73,154640,154641],{},"continue",[32,154643,154644],{},"能写嵌套循环。",[21,154646,154647],{},"函数：",[29,154649,154650,154653,154656,154659],{},[32,154651,154652],{},"会定义和调用函数。",[32,154654,154655],{},"理解参数和返回值。",[32,154657,154658],{},"知道局部变量和全局变量。",[32,154660,154661],{},"会使用默认参数、关键字参数、不定长参数。",[21,154663,154664],{},"容器：",[29,154666,154667,154670,154673,154676,154679],{},[32,154668,154669],{},"会使用列表增删改查。",[32,154671,154672],{},"会遍历列表、字典。",[32,154674,154675],{},"会使用切片。",[32,154677,154678],{},"会用集合去重。",[32,154680,154681],{},"会处理列表嵌套字典。",[21,154683,154684],{},"文件和模块：",[29,154686,154687,154690,154693,154696,154699],{},[32,154688,154689],{},"会读写文本文件。",[32,154691,154692],{},"会读写 JSON。",[32,154694,154695],{},"会捕获常见异常。",[32,154697,154698],{},"会导入模块和第三方包。",[32,154700,154701],{},"会创建简单包结构。",[21,154703,154704],{},"项目能力：",[29,154706,154707,154710,154713,154716,154719],{},[32,154708,154709],{},"能把代码拆成函数。",[32,154711,154712],{},"能把数据保存到文件。",[32,154714,154715],{},"能处理用户输入错误。",[32,154717,154718],{},"能写一个完整菜单程序。",[32,154720,154721],{},"能用 pyecharts 生成图表。",[16,154723,154725],{"id":154724},"_1211-推荐练习顺序","12.11 推荐练习顺序",[29,154727,154728,154731,154734,154737,154740,154743,154746,154749],{},[32,154729,154730],{},"猜数字游戏。",[32,154732,154733],{},"ATM 菜单程序。",[32,154735,154736],{},"学生成绩统计。",[32,154738,154739],{},"学生管理系统函数版。",[32,154741,154742],{},"学生管理系统文件持久化版。",[32,154744,154745],{},"学生管理系统面向对象版。",[32,154747,154748],{},"销售数据统计。",[32,154750,154751],{},"销售数据可视化。",[16,154753,154755],{"id":154754},"_1212-常见学习误区","12.12 常见学习误区",[29,154757,154758,154761,154764,154767,154770,154773,154776],{},[32,154759,154760],{},"只看视频不敲代码。",[32,154762,154763],{},"一报错就复制错误去搜，不先读报错位置。",[32,154765,154766],{},"变量名随便写，后续自己看不懂。",[32,154768,154769],{},"所有代码都写在一个文件一个函数里。",[32,154771,154772],{},"不保存练习代码，复习时没有材料。",[32,154774,154775],{},"还没掌握列表字典就急着学框架。",[32,154777,154778],{},"不会读官方文档，只依赖教程。",[16,154780,154782],{"id":154781},"_1213-如何读报错","12.13 如何读报错",[21,154784,154785],{},"报错通常从下往上看最后几行。",[21,154787,15102],{},[66,154789,154792],{"className":154790,"code":154791,"language":5154,"meta":71},[5152],"ValueError: invalid literal for int() with base 10: 'abc'\n",[73,154793,154791],{"__ignoreMap":71},[21,154795,24568],{},[29,154797,154798,154804,154814],{},[32,154799,154800,154801,28354],{},"异常类型是 ",[73,154802,154803],{},"ValueError",[32,154805,107314,154806,154809,154810,154813],{},[73,154807,154808],{},"int()"," 无法把 ",[73,154811,154812],{},"'abc'"," 转成整数。",[32,154815,154816],{},"应该检查输入内容或增加异常处理。",[21,154818,154819],{},"再看文件名和行号：",[66,154821,154824],{"className":154822,"code":154823,"language":5154,"meta":71},[5152],"File \"main.py\", line 10, in \u003Cmodule>\n",[73,154825,154823],{"__ignoreMap":71},[21,154827,154828,154829,154831],{},"表示错误发生在 ",[73,154830,154576],{}," 第 10 行。",[16,154833,154835],{"id":154834},"_1214-后续学习方向","12.14 后续学习方向",[21,154837,154838],{},"Python 基础完成后，可以按兴趣选择方向：",[29,154840,154841,154853,154862,154874,154885,154894,154904],{},[32,154842,154843,154844,300,154847,300,154850,28354],{},"自动化办公：",[73,154845,154846],{},"openpyxl",[73,154848,154849],{},"python-docx",[73,154851,154852],{},"pdfplumber",[32,154854,154855,154856,300,154858,300,154860,28354],{},"数据分析：",[73,154857,100595],{},[73,154859,146154],{},[73,154861,146162],{},[32,154863,154864,154865,300,154868,300,154871,28354],{},"Web 后端：",[73,154866,154867],{},"Flask",[73,154869,154870],{},"FastAPI",[73,154872,154873],{},"Django",[32,154875,154876,154877,300,154879,300,154882,28354],{},"爬虫：",[73,154878,146139],{},[73,154880,154881],{},"BeautifulSoup",[73,154883,154884],{},"Scrapy",[32,154886,154887,154888,300,154890,154893],{},"测试开发：",[73,154889,146186],{},[73,154891,154892],{},"selenium","、接口测试。",[32,154895,154896,154897,300,154899,300,154901,28354],{},"人工智能：",[73,154898,100595],{},[73,154900,146154],{},[73,154902,154903],{},"pytorch",[32,154905,154906,154907,300,154909,300,154912,28354],{},"运维脚本：",[73,154908,145755],{},[73,154910,154911],{},"subprocess",[73,154913,154914],{},"paramiko",[21,154916,154917],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[16,154919,154921],{"id":154920},"_1215-结课练习","12.15 结课练习",[29,154923,154924,154927,154930,154933,154936,154939,154942,154945],{},[32,154925,154926],{},"完成函数版学生管理系统。",[32,154928,154929],{},"给学生管理系统增加 JSON 持久化。",[32,154931,154932],{},"给学生管理系统增加异常处理。",[32,154934,154935],{},"把学生管理系统改成面向对象版。",[32,154937,154938],{},"使用 pyecharts 绘制学生成绩柱状图。",[32,154940,154941],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[32,154943,154944],{},"按品类统计销售额并绘制柱状图。",[32,154946,154947],{},"写一份自己的 Python 学习路线图。",[5092,154949,154950],{},"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":71,"searchDepth":96,"depth":96,"links":154952},[154953,154954,154957,154958,154959,154965,154966,154967,154968,154969,154970,154971,154972,154973,154974],{"id":151669,"depth":96,"text":151670},{"id":151719,"depth":96,"text":151720,"children":154955},[154956],{"id":151723,"depth":1143,"text":151724},{"id":151762,"depth":96,"text":151763},{"id":153236,"depth":96,"text":153237},{"id":153574,"depth":96,"text":153575,"children":154960},[154961,154962,154963,154964],{"id":153578,"depth":1143,"text":153579},{"id":153718,"depth":1143,"text":153719},{"id":153808,"depth":1143,"text":153809},{"id":153894,"depth":1143,"text":153895},{"id":153935,"depth":96,"text":153936},{"id":154128,"depth":96,"text":154129},{"id":154365,"depth":96,"text":154366},{"id":154556,"depth":96,"text":154557},{"id":154598,"depth":96,"text":154599},{"id":154724,"depth":96,"text":154725},{"id":154754,"depth":96,"text":154755},{"id":154781,"depth":96,"text":154782},{"id":154834,"depth":96,"text":154835},{"id":154920,"depth":96,"text":154921},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151661,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154981,"title":154982,"body":154983,"description":23344,"extension":5123,"meta":157452,"navigation":2364,"path":157453,"seo":157454,"stem":157455,"__hash__":157456},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":9,"value":154984,"toc":157427},[154985,154988,154992,154995,154998,155018,155021,155044,155047,155050,155072,155075,155097,155101,155104,155144,155147,155268,155272,155275,155315,155318,155342,155345,155349,155352,155366,155399,155402,155437,155440,155463,155466,155499,155502,155504,155510,155585,155588,155594,155611,155651,155655,155658,155704,155706,155744,155747,155782,155785,155820,155823,155855,155858,155877,155881,155885,155998,156000,156075,156079,156125,156128,156154,156163,156167,156170,156233,156241,156269,156273,156313,156378,156382,156385,156424,156427,156472,156475,156536,156540,156567,156570,156598,156601,156605,156609,156674,156677,156715,156718,156750,156754,156853,156857,156860,156933,156936,156984,156988,156994,157034,157037,157084,157087,157136,157140,157142,157156,157158,157339,157343,157370,157390,157397,157401,157418,157424],[12,154986,154982],{"id":154987},"_2-基础语法变量与字符串",[16,154989,154991],{"id":154990},"_21-注释","2.1 注释",[21,154993,154994],{},"注释是给人看的说明文字，不会被 Python 执行。",[21,154996,154997],{},"单行注释：",[66,154999,155001],{"className":30347,"code":155000,"language":30349,"meta":71,"style":71},"# 这是单行注释\nprint(\"hello\")\n",[73,155002,155003,155008],{"__ignoreMap":71},[76,155004,155005],{"class":78,"line":79},[76,155006,155007],{"class":146},"# 这是单行注释\n",[76,155009,155010,155012,155014,155016],{"class":78,"line":96},[76,155011,30384],{"class":136},[76,155013,87],{"class":86},[76,155015,5811],{"class":192},[76,155017,93],{"class":86},[21,155019,155020],{},"多行说明常用三引号：",[66,155022,155024],{"className":30347,"code":155023,"language":30349,"meta":71,"style":71},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[73,155025,155026,155030,155035,155040],{"__ignoreMap":71},[76,155027,155028],{"class":78,"line":79},[76,155029,95667],{"class":192},[76,155031,155032],{"class":78,"line":96},[76,155033,155034],{"class":192},"这是多行说明。\n",[76,155036,155037],{"class":78,"line":1143},[76,155038,155039],{"class":192},"常用于文件顶部说明、函数说明等。\n",[76,155041,155042],{"class":78,"line":1158},[76,155043,95667],{"class":192},[21,155045,155046],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[21,155048,155049],{},"不好：",[66,155051,155053],{"className":30347,"code":155052,"language":30349,"meta":71,"style":71},"# age 加 1\nage = age + 1\n",[73,155054,155055,155060],{"__ignoreMap":71},[76,155056,155057],{"class":78,"line":79},[76,155058,155059],{"class":146},"# age 加 1\n",[76,155061,155062,155064,155066,155068,155070],{"class":78,"line":96},[76,155063,146515],{"class":86},[76,155065,133],{"class":82},[76,155067,15674],{"class":86},[76,155069,569],{"class":82},[76,155071,55668],{"class":136},[21,155073,155074],{},"较好：",[66,155076,155078],{"className":30347,"code":155077,"language":30349,"meta":71,"style":71},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[73,155079,155080,155085],{"__ignoreMap":71},[76,155081,155082],{"class":78,"line":79},[76,155083,155084],{"class":146},"# 用户过完生日后，年龄增加一岁\n",[76,155086,155087,155089,155091,155093,155095],{"class":78,"line":96},[76,155088,146515],{"class":86},[76,155090,133],{"class":82},[76,155092,15674],{"class":86},[76,155094,569],{"class":82},[76,155096,55668],{"class":136},[16,155098,155100],{"id":155099},"_22-字面量","2.2 字面量",[21,155102,155103],{},"字面量就是代码中直接写出来的数据。",[66,155105,155107],{"className":30347,"code":155106,"language":30349,"meta":71,"style":71},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[73,155108,155109,155116,155123,155130,155137],{"__ignoreMap":71},[76,155110,155111,155113],{"class":78,"line":79},[76,155112,399],{"class":136},[76,155114,155115],{"class":146},"          # 整数\n",[76,155117,155118,155120],{"class":78,"line":96},[76,155119,137],{"class":136},[76,155121,155122],{"class":146},"         # 小数\n",[76,155124,155125,155127],{"class":78,"line":1143},[76,155126,5811],{"class":192},[76,155128,155129],{"class":146},"      # 字符串\n",[76,155131,155132,155134],{"class":78,"line":1158},[76,155133,31445],{"class":136},[76,155135,155136],{"class":146},"         # 布尔值\n",[76,155138,155139,155141],{"class":78,"line":1164},[76,155140,95655],{"class":136},[76,155142,155143],{"class":146},"         # 空值\n",[21,155145,155146],{},"常见字面量类型：",[225,155148,155149,155159],{},[228,155150,155151],{},[231,155152,155153,155155,155157],{},[234,155154,23705],{},[234,155156,27461],{},[234,155158,25838],{},[272,155160,155161,155172,155183,155194,155206,155218,155230,155243,155255],{},[231,155162,155163,155165,155169],{},[277,155164,90],{},[277,155166,155167],{},[73,155168,399],{},[277,155170,155171],{},"整数",[231,155173,155174,155176,155180],{},[277,155175,127],{},[277,155177,155178],{},[73,155179,137],{},[277,155181,155182],{},"浮点数",[231,155184,155185,155187,155191],{},[277,155186,1263],{},[277,155188,155189],{},[73,155190,5811],{},[277,155192,155193],{},"字符串",[231,155195,155196,155198,155204],{},[277,155197,1318],{},[277,155199,155200,300,155202],{},[73,155201,31445],{},[73,155203,33956],{},[277,155205,65984],{},[231,155207,155208,155211,155215],{},[277,155209,155210],{},"NoneType",[277,155212,155213],{},[73,155214,95655],{},[277,155216,155217],{},"空值",[231,155219,155220,155222,155227],{},[277,155221,154039],{},[277,155223,155224],{},[73,155225,155226],{},"[1, 2, 3]",[277,155228,155229],{},"列表",[231,155231,155232,155235,155240],{},[277,155233,155234],{},"tuple",[277,155236,155237],{},[73,155238,155239],{},"(1, 2, 3)",[277,155241,155242],{},"元组",[231,155244,155245,155247,155252],{},[277,155246,114515],{},[277,155248,155249],{},[73,155250,155251],{},"{\"name\": \"张三\"}",[277,155253,155254],{},"字典",[231,155256,155257,155260,155265],{},[277,155258,155259],{},"set",[277,155261,155262],{},[73,155263,155264],{},"{1, 2, 3}",[277,155266,155267],{},"集合",[16,155269,155271],{"id":155270},"_23-变量","2.3 变量",[21,155273,155274],{},"变量是保存数据的名字。",[66,155276,155278],{"className":30347,"code":155277,"language":30349,"meta":71,"style":71},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[73,155279,155280,155288,155296,155306],{"__ignoreMap":71},[76,155281,155282,155284,155286],{"class":78,"line":79},[76,155283,146505],{"class":86},[76,155285,133],{"class":82},[76,155287,149322],{"class":192},[76,155289,155290,155292,155294],{"class":78,"line":96},[76,155291,146515],{"class":86},[76,155293,133],{"class":82},[76,155295,146520],{"class":136},[76,155297,155298,155301,155303],{"class":78,"line":1143},[76,155299,155300],{"class":86},"height ",[76,155302,133],{"class":82},[76,155304,155305],{"class":136}," 1.75\n",[76,155307,155308,155311,155313],{"class":78,"line":1158},[76,155309,155310],{"class":86},"is_student ",[76,155312,133],{"class":82},[76,155314,153568],{"class":136},[21,155316,155317],{},"Python 的变量不需要提前声明类型：",[66,155319,155321],{"className":30347,"code":155320,"language":30349,"meta":71,"style":71},"score = 100\nscore = \"满分\"\n",[73,155322,155323,155333],{"__ignoreMap":71},[76,155324,155325,155328,155330],{"class":78,"line":79},[76,155326,155327],{"class":86},"score ",[76,155329,133],{"class":82},[76,155331,155332],{"class":136}," 100\n",[76,155334,155335,155337,155339],{"class":78,"line":96},[76,155336,155327],{"class":86},[76,155338,133],{"class":82},[76,155340,155341],{"class":192}," \"满分\"\n",[21,155343,155344],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[16,155346,155348],{"id":155347},"_24-变量命名规则","2.4 变量命名规则",[21,155350,155351],{},"硬性规则：",[29,155353,155354,155357,155360,155363],{},[32,155355,155356],{},"只能由字母、数字、下划线组成。",[32,155358,155359],{},"不能以数字开头。",[32,155361,155362],{},"不能使用 Python 关键字。",[32,155364,155365],{},"区分大小写。",[66,155367,155369],{"className":30347,"code":155368,"language":30349,"meta":71,"style":71},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[73,155370,155371,155380,155389],{"__ignoreMap":71},[76,155372,155373,155376,155378],{"class":78,"line":79},[76,155374,155375],{"class":86},"user_name ",[76,155377,133],{"class":82},[76,155379,146510],{"class":192},[76,155381,155382,155385,155387],{"class":78,"line":96},[76,155383,155384],{"class":86},"age2 ",[76,155386,133],{"class":82},[76,155388,146520],{"class":136},[76,155390,155391,155394,155396],{"class":78,"line":1143},[76,155392,155393],{"class":86},"_token ",[76,155395,133],{"class":82},[76,155397,155398],{"class":192}," \"abc\"\n",[21,155400,155401],{},"错误写法：",[66,155403,155405],{"className":30347,"code":155404,"language":30349,"meta":71,"style":71},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[73,155406,155407,155416,155428],{"__ignoreMap":71},[76,155408,155409,155412,155414],{"class":78,"line":79},[76,155410,155411],{"class":77372},"2age",[76,155413,13531],{"class":82},[76,155415,146520],{"class":136},[76,155417,155418,155420,155422,155424,155426],{"class":78,"line":96},[76,155419,131553],{"class":86},[76,155421,620],{"class":82},[76,155423,146505],{"class":86},[76,155425,133],{"class":82},[76,155427,146510],{"class":192},[76,155429,155430,155432,155434],{"class":78,"line":1143},[76,155431,14661],{"class":82},[76,155433,13531],{"class":82},[76,155435,155436],{"class":192}," \"一班\"\n",[21,155438,155439],{},"查看关键字：",[66,155441,155443],{"className":30347,"code":155442,"language":30349,"meta":71,"style":71},"import keyword\n\nprint(keyword.kwlist)\n",[73,155444,155445,155452,155456],{"__ignoreMap":71},[76,155446,155447,155449],{"class":78,"line":79},[76,155448,30361],{"class":82},[76,155450,155451],{"class":86}," keyword\n",[76,155453,155454],{"class":78,"line":96},[76,155455,2365],{"emptyLinePlaceholder":2364},[76,155457,155458,155460],{"class":78,"line":1143},[76,155459,30384],{"class":136},[76,155461,155462],{"class":86},"(keyword.kwlist)\n",[21,155464,155465],{},"推荐命名风格：",[66,155467,155469],{"className":30347,"code":155468,"language":30349,"meta":71,"style":71},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[73,155470,155471,155480,155490],{"__ignoreMap":71},[76,155472,155473,155476,155478],{"class":78,"line":79},[76,155474,155475],{"class":86},"student_name ",[76,155477,133],{"class":82},[76,155479,149322],{"class":192},[76,155481,155482,155485,155487],{"class":78,"line":96},[76,155483,155484],{"class":86},"total_price ",[76,155486,133],{"class":82},[76,155488,155489],{"class":136}," 99.8\n",[76,155491,155492,155495,155497],{"class":78,"line":1143},[76,155493,155494],{"class":86},"is_finished ",[76,155496,133],{"class":82},[76,155498,125776],{"class":136},[21,155500,155501],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[16,155503,50701],{"id":50700},[21,155505,104335,155506,155509],{},[73,155507,155508],{},"type()"," 查看数据类型：",[66,155511,155513],{"className":30347,"code":155512,"language":30349,"meta":71,"style":71},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[73,155514,155515,155529,155543,155557,155571],{"__ignoreMap":71},[76,155516,155517,155519,155521,155523,155525,155527],{"class":78,"line":79},[76,155518,30384],{"class":136},[76,155520,87],{"class":86},[76,155522,103076],{"class":136},[76,155524,87],{"class":86},[76,155526,399],{"class":136},[76,155528,30466],{"class":86},[76,155530,155531,155533,155535,155537,155539,155541],{"class":78,"line":96},[76,155532,30384],{"class":136},[76,155534,87],{"class":86},[76,155536,103076],{"class":136},[76,155538,87],{"class":86},[76,155540,137],{"class":136},[76,155542,30466],{"class":86},[76,155544,155545,155547,155549,155551,155553,155555],{"class":78,"line":1143},[76,155546,30384],{"class":136},[76,155548,87],{"class":86},[76,155550,103076],{"class":136},[76,155552,87],{"class":86},[76,155554,5811],{"class":192},[76,155556,30466],{"class":86},[76,155558,155559,155561,155563,155565,155567,155569],{"class":78,"line":1158},[76,155560,30384],{"class":136},[76,155562,87],{"class":86},[76,155564,103076],{"class":136},[76,155566,87],{"class":86},[76,155568,31445],{"class":136},[76,155570,30466],{"class":86},[76,155572,155573,155575,155577,155579,155581,155583],{"class":78,"line":1164},[76,155574,30384],{"class":136},[76,155576,87],{"class":86},[76,155578,103076],{"class":136},[76,155580,87],{"class":86},[76,155582,95655],{"class":136},[76,155584,30466],{"class":86},[21,155586,155587],{},"输出类似：",[66,155589,155592],{"className":155590,"code":155591,"language":5154,"meta":71},[5152],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[73,155593,155591],{"__ignoreMap":71},[21,155595,8992,155596,107252,155598,155600,155601,155603,155604,21467,155606,155603,155608,155610],{},[73,155597,1318],{},[73,155599,90],{}," 的子类，",[73,155602,31445],{}," 可以当作 ",[73,155605,305],{},[73,155607,33956],{},[73,155609,279],{},"，但业务代码中不要滥用。",[66,155612,155614],{"className":30347,"code":155613,"language":30349,"meta":71,"style":71},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[73,155615,155616,155634],{"__ignoreMap":71},[76,155617,155618,155620,155622,155624,155626,155628,155631],{"class":78,"line":79},[76,155619,30384],{"class":136},[76,155621,87],{"class":86},[76,155623,31445],{"class":136},[76,155625,45535],{"class":82},[76,155627,25087],{"class":136},[76,155629,155630],{"class":86},")   ",[76,155632,155633],{"class":146},"# 2\n",[76,155635,155636,155638,155640,155642,155644,155646,155648],{"class":78,"line":96},[76,155637,30384],{"class":136},[76,155639,87],{"class":86},[76,155641,33956],{"class":136},[76,155643,45535],{"class":82},[76,155645,25087],{"class":136},[76,155647,45777],{"class":86},[76,155649,155650],{"class":146},"# 1\n",[16,155652,155654],{"id":155653},"_26-类型转换","2.6 类型转换",[21,155656,155657],{},"常用转换函数：",[66,155659,155661],{"className":30347,"code":155660,"language":30349,"meta":71,"style":71},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[73,155662,155663,155673,155684,155694],{"__ignoreMap":71},[76,155664,155665,155667,155669,155671],{"class":78,"line":79},[76,155666,90],{"class":136},[76,155668,87],{"class":86},[76,155670,54285],{"class":192},[76,155672,93],{"class":86},[76,155674,155675,155677,155679,155682],{"class":78,"line":96},[76,155676,127],{"class":136},[76,155678,87],{"class":86},[76,155680,155681],{"class":192},"\"3.14\"",[76,155683,93],{"class":86},[76,155685,155686,155688,155690,155692],{"class":78,"line":1143},[76,155687,1263],{"class":136},[76,155689,87],{"class":86},[76,155691,399],{"class":136},[76,155693,93],{"class":86},[76,155695,155696,155698,155700,155702],{"class":78,"line":1158},[76,155697,1318],{"class":136},[76,155699,87],{"class":86},[76,155701,305],{"class":136},[76,155703,93],{"class":86},[21,155705,15102],{},[66,155707,155709],{"className":30347,"code":155708,"language":30349,"meta":71,"style":71},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[73,155710,155711,155720,155731],{"__ignoreMap":71},[76,155712,155713,155715,155717],{"class":78,"line":79},[76,155714,146515],{"class":86},[76,155716,133],{"class":82},[76,155718,155719],{"class":192}," \"18\"\n",[76,155721,155722,155724,155726,155728],{"class":78,"line":96},[76,155723,146515],{"class":86},[76,155725,133],{"class":82},[76,155727,2346],{"class":136},[76,155729,155730],{"class":86},"(age)\n",[76,155732,155733,155735,155738,155740,155742],{"class":78,"line":1143},[76,155734,30384],{"class":136},[76,155736,155737],{"class":86},"(age ",[76,155739,569],{"class":82},[76,155741,25087],{"class":136},[76,155743,93],{"class":86},[21,155745,155746],{},"输入得到的内容永远是字符串：",[66,155748,155750],{"className":30347,"code":155749,"language":30349,"meta":71,"style":71},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[73,155751,155752,155768],{"__ignoreMap":71},[76,155753,155754,155757,155759,155761,155763,155766],{"class":78,"line":79},[76,155755,155756],{"class":86},"num ",[76,155758,133],{"class":82},[76,155760,60574],{"class":136},[76,155762,87],{"class":86},[76,155764,155765],{"class":192},"\"请输入数字:\"",[76,155767,93],{"class":86},[76,155769,155770,155772,155774,155776,155779],{"class":78,"line":96},[76,155771,30384],{"class":136},[76,155773,87],{"class":86},[76,155775,103076],{"class":136},[76,155777,155778],{"class":86},"(num))  ",[76,155780,155781],{"class":146},"# str\n",[21,155783,155784],{},"如果要做数学运算，必须转换：",[66,155786,155788],{"className":30347,"code":155787,"language":30349,"meta":71,"style":71},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[73,155789,155790,155808],{"__ignoreMap":71},[76,155791,155792,155794,155796,155798,155800,155802,155804,155806],{"class":78,"line":79},[76,155793,155756],{"class":86},[76,155795,133],{"class":82},[76,155797,2346],{"class":136},[76,155799,87],{"class":86},[76,155801,53790],{"class":136},[76,155803,87],{"class":86},[76,155805,155765],{"class":192},[76,155807,30466],{"class":86},[76,155809,155810,155812,155814,155816,155818],{"class":78,"line":96},[76,155811,30384],{"class":136},[76,155813,45588],{"class":86},[76,155815,569],{"class":82},[76,155817,2002],{"class":136},[76,155819,93],{"class":86},[21,155821,155822],{},"常见错误：",[66,155824,155826],{"className":30347,"code":155825,"language":30349,"meta":71,"style":71},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[73,155827,155828,155841],{"__ignoreMap":71},[76,155829,155830,155832,155834,155836,155838],{"class":78,"line":79},[76,155831,90],{"class":136},[76,155833,87],{"class":86},[76,155835,155681],{"class":192},[76,155837,155630],{"class":86},[76,155839,155840],{"class":146},"# 错误\n",[76,155842,155843,155845,155847,155850,155853],{"class":78,"line":96},[76,155844,90],{"class":136},[76,155846,87],{"class":86},[76,155848,155849],{"class":192},"\"abc\"",[76,155851,155852],{"class":86},")    ",[76,155854,155840],{"class":146},[21,155856,155857],{},"正确写法：",[66,155859,155861],{"className":30347,"code":155860,"language":30349,"meta":71,"style":71},"num = float(\"3.14\")\n",[73,155862,155863],{"__ignoreMap":71},[76,155864,155865,155867,155869,155871,155873,155875],{"class":78,"line":79},[76,155866,155756],{"class":86},[76,155868,133],{"class":82},[76,155870,109766],{"class":136},[76,155872,87],{"class":86},[76,155874,155681],{"class":192},[76,155876,93],{"class":86},[16,155878,155880],{"id":155879},"_27-运算符","2.7 运算符",[46,155882,155884],{"id":155883},"_271-算术运算符","2.7.1 算术运算符",[225,155886,155887,155898],{},[228,155888,155889],{},[231,155890,155891,155894,155896],{},[234,155892,155893],{},"运算符",[234,155895,25838],{},[234,155897,27461],{},[272,155899,155900,155914,155928,155942,155956,155970,155984],{},[231,155901,155902,155906,155909],{},[277,155903,155904],{},[73,155905,569],{},[277,155907,155908],{},"加法",[277,155910,155911],{},[73,155912,155913],{},"1 + 2",[231,155915,155916,155920,155923],{},[277,155917,155918],{},[73,155919,620],{},[277,155921,155922],{},"减法",[277,155924,155925],{},[73,155926,155927],{},"5 - 3",[231,155929,155930,155934,155937],{},[277,155931,155932],{},[73,155933,543],{},[277,155935,155936],{},"乘法",[277,155938,155939],{},[73,155940,155941],{},"2 * 3",[231,155943,155944,155948,155951],{},[277,155945,155946],{},[73,155947,672],{},[277,155949,155950],{},"除法，结果是浮点数",[277,155952,155953],{},[73,155954,155955],{},"5 \u002F 2",[231,155957,155958,155962,155965],{},[277,155959,155960],{},[73,155961,33298],{},[277,155963,155964],{},"整除",[277,155966,155967],{},[73,155968,155969],{},"5 \u002F\u002F 2",[231,155971,155972,155976,155979],{},[277,155973,155974],{},[73,155975,416],{},[277,155977,155978],{},"取余",[277,155980,155981],{},[73,155982,155983],{},"5 % 2",[231,155985,155986,155990,155993],{},[277,155987,155988],{},[73,155989,10628],{},[277,155991,155992],{},"幂运算",[277,155994,155995],{},[73,155996,155997],{},"2 ** 3",[21,155999,15102],{},[66,156001,156003],{"className":30347,"code":156002,"language":30349,"meta":71,"style":71},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[73,156004,156005,156023,156040,156057],{"__ignoreMap":71},[76,156006,156007,156009,156011,156013,156016,156018,156020],{"class":78,"line":79},[76,156008,30384],{"class":136},[76,156010,87],{"class":86},[76,156012,407],{"class":136},[76,156014,156015],{"class":82}," \u002F",[76,156017,14722],{"class":136},[76,156019,155630],{"class":86},[76,156021,156022],{"class":146},"# 2.5\n",[76,156024,156025,156027,156029,156031,156034,156036,156038],{"class":78,"line":96},[76,156026,30384],{"class":136},[76,156028,87],{"class":86},[76,156030,407],{"class":136},[76,156032,156033],{"class":82}," \u002F\u002F",[76,156035,14722],{"class":136},[76,156037,45777],{"class":86},[76,156039,155633],{"class":146},[76,156041,156042,156044,156046,156048,156051,156053,156055],{"class":78,"line":1143},[76,156043,30384],{"class":136},[76,156045,87],{"class":86},[76,156047,407],{"class":136},[76,156049,156050],{"class":82}," %",[76,156052,14722],{"class":136},[76,156054,155630],{"class":86},[76,156056,155650],{"class":146},[76,156058,156059,156061,156063,156065,156068,156070,156072],{"class":78,"line":1158},[76,156060,30384],{"class":136},[76,156062,87],{"class":86},[76,156064,165],{"class":136},[76,156066,156067],{"class":82}," **",[76,156069,78039],{"class":136},[76,156071,45777],{"class":86},[76,156073,156074],{"class":146},"# 8\n",[46,156076,156078],{"id":156077},"_272-赋值运算符","2.7.2 赋值运算符",[66,156080,156082],{"className":30347,"code":156081,"language":30349,"meta":71,"style":71},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[73,156083,156084,156092,156100,156108,156116],{"__ignoreMap":71},[76,156085,156086,156088,156090],{"class":78,"line":79},[76,156087,155756],{"class":86},[76,156089,133],{"class":82},[76,156091,58397],{"class":136},[76,156093,156094,156096,156098],{"class":78,"line":96},[76,156095,155756],{"class":86},[76,156097,9444],{"class":82},[76,156099,54396],{"class":136},[76,156101,156102,156104,156106],{"class":78,"line":1143},[76,156103,155756],{"class":86},[76,156105,150221],{"class":82},[76,156107,47692],{"class":136},[76,156109,156110,156112,156114],{"class":78,"line":1158},[76,156111,155756],{"class":86},[76,156113,137117],{"class":82},[76,156115,120005],{"class":136},[76,156117,156118,156120,156123],{"class":78,"line":1164},[76,156119,155756],{"class":86},[76,156121,156122],{"class":82},"\u002F=",[76,156124,47692],{"class":136},[21,156126,156127],{},"等价关系：",[66,156129,156131],{"className":30347,"code":156130,"language":30349,"meta":71,"style":71},"num += 1\nnum = num + 1\n",[73,156132,156133,156141],{"__ignoreMap":71},[76,156134,156135,156137,156139],{"class":78,"line":79},[76,156136,155756],{"class":86},[76,156138,9444],{"class":82},[76,156140,55668],{"class":136},[76,156142,156143,156145,156147,156150,156152],{"class":78,"line":96},[76,156144,155756],{"class":86},[76,156146,133],{"class":82},[76,156148,156149],{"class":86}," num ",[76,156151,569],{"class":82},[76,156153,55668],{"class":136},[21,156155,156156,156157,100987,156160,28354],{},"Python 没有 ",[73,156158,156159],{},"num++",[73,156161,156162],{},"num--",[46,156164,156166],{"id":156165},"_273-比较运算符","2.7.3 比较运算符",[21,156168,156169],{},"比较运算结果是布尔值。",[66,156171,156173],{"className":30347,"code":156172,"language":30349,"meta":71,"style":71},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[73,156174,156175,156189,156204,156218],{"__ignoreMap":71},[76,156176,156177,156179,156181,156183,156185,156187],{"class":78,"line":79},[76,156178,30384],{"class":136},[76,156180,87],{"class":86},[76,156182,534],{"class":136},[76,156184,26191],{"class":82},[76,156186,2112],{"class":136},[76,156188,93],{"class":86},[76,156190,156191,156193,156195,156197,156200,156202],{"class":78,"line":96},[76,156192,30384],{"class":136},[76,156194,87],{"class":86},[76,156196,534],{"class":136},[76,156198,156199],{"class":82}," >=",[76,156201,2002],{"class":136},[76,156203,93],{"class":86},[76,156205,156206,156208,156210,156212,156214,156216],{"class":78,"line":1143},[76,156207,30384],{"class":136},[76,156209,87],{"class":86},[76,156211,534],{"class":136},[76,156213,101528],{"class":82},[76,156215,2047],{"class":136},[76,156217,93],{"class":86},[76,156219,156220,156222,156224,156226,156229,156231],{"class":78,"line":1158},[76,156221,30384],{"class":136},[76,156223,87],{"class":86},[76,156225,534],{"class":136},[76,156227,156228],{"class":82}," !=",[76,156230,2047],{"class":136},[76,156232,93],{"class":86},[21,156234,156235,156236,156238,156239,28354],{},"注意：判断相等用 ",[73,156237,2914],{},"，赋值用 ",[73,156240,133],{},[66,156242,156244],{"className":30347,"code":156243,"language":30349,"meta":71,"style":71},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[73,156245,156246,156258],{"__ignoreMap":71},[76,156247,156248,156250,156252,156255],{"class":78,"line":79},[76,156249,146515],{"class":86},[76,156251,133],{"class":82},[76,156253,156254],{"class":136}," 18",[76,156256,156257],{"class":146},"       # 赋值\n",[76,156259,156260,156262,156264,156266],{"class":78,"line":96},[76,156261,146515],{"class":86},[76,156263,2914],{"class":82},[76,156265,156254],{"class":136},[76,156267,156268],{"class":146},"      # 判断是否相等\n",[46,156270,156272],{"id":156271},"_274-逻辑运算符","2.7.4 逻辑运算符",[225,156274,156275,156283],{},[228,156276,156277],{},[231,156278,156279,156281],{},[234,156280,155893],{},[234,156282,25838],{},[272,156284,156285,156294,156303],{},[231,156286,156287,156291],{},[277,156288,156289],{},[73,156290,30431],{},[277,156292,156293],{},"并且",[231,156295,156296,156300],{},[277,156297,156298],{},[73,156299,115059],{},[277,156301,156302],{},"或者",[231,156304,156305,156310],{},[277,156306,156307],{},[73,156308,156309],{},"not",[277,156311,156312],{},"取反",[66,156314,156316],{"className":30347,"code":156315,"language":30349,"meta":71,"style":71},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[73,156317,156318,156326,156335,156339,156354,156368],{"__ignoreMap":71},[76,156319,156320,156322,156324],{"class":78,"line":79},[76,156321,146515],{"class":86},[76,156323,133],{"class":82},[76,156325,88034],{"class":136},[76,156327,156328,156331,156333],{"class":78,"line":96},[76,156329,156330],{"class":86},"has_ticket ",[76,156332,133],{"class":82},[76,156334,153568],{"class":136},[76,156336,156337],{"class":78,"line":1143},[76,156338,2365],{"emptyLinePlaceholder":2364},[76,156340,156341,156343,156345,156347,156349,156351],{"class":78,"line":1158},[76,156342,30384],{"class":136},[76,156344,155737],{"class":86},[76,156346,1674],{"class":82},[76,156348,156254],{"class":136},[76,156350,120398],{"class":82},[76,156352,156353],{"class":86}," has_ticket)\n",[76,156355,156356,156358,156360,156362,156364,156366],{"class":78,"line":1164},[76,156357,30384],{"class":136},[76,156359,155737],{"class":86},[76,156361,998],{"class":82},[76,156363,156254],{"class":136},[76,156365,114170],{"class":82},[76,156367,156353],{"class":86},[76,156369,156370,156372,156374,156376],{"class":78,"line":1178},[76,156371,30384],{"class":136},[76,156373,87],{"class":86},[76,156375,156309],{"class":82},[76,156377,156353],{"class":86},[16,156379,156381],{"id":156380},"_28-字符串定义","2.8 字符串定义",[21,156383,156384],{},"三种常见写法：",[66,156386,156388],{"className":30347,"code":156387,"language":30349,"meta":71,"style":71},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[73,156389,156390,156400,156409,156419],{"__ignoreMap":71},[76,156391,156392,156395,156397],{"class":78,"line":79},[76,156393,156394],{"class":86},"name1 ",[76,156396,133],{"class":82},[76,156398,156399],{"class":192}," '小明'\n",[76,156401,156402,156405,156407],{"class":78,"line":96},[76,156403,156404],{"class":86},"name2 ",[76,156406,133],{"class":82},[76,156408,149322],{"class":192},[76,156410,156411,156414,156416],{"class":78,"line":1143},[76,156412,156413],{"class":86},"text ",[76,156415,133],{"class":82},[76,156417,156418],{"class":192}," \"\"\"这是多行字符串\n",[76,156420,156421],{"class":78,"line":1158},[76,156422,156423],{"class":192},"可以换行\"\"\"\n",[21,156425,156426],{},"字符串中包含引号：",[66,156428,156430],{"className":30347,"code":156429,"language":30349,"meta":71,"style":71},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[73,156431,156432,156442,156452],{"__ignoreMap":71},[76,156433,156434,156437,156439],{"class":78,"line":79},[76,156435,156436],{"class":86},"msg ",[76,156438,133],{"class":82},[76,156440,156441],{"class":192}," \"他说:'你好'\"\n",[76,156443,156444,156447,156449],{"class":78,"line":96},[76,156445,156446],{"class":86},"msg2 ",[76,156448,133],{"class":82},[76,156450,156451],{"class":192}," '他说:\"你好\"'\n",[76,156453,156454,156457,156459,156462,156465,156468,156470],{"class":78,"line":1143},[76,156455,156456],{"class":86},"msg3 ",[76,156458,133],{"class":82},[76,156460,156461],{"class":192}," \"他说:",[76,156463,156464],{"class":136},"\\\"",[76,156466,156467],{"class":192},"你好",[76,156469,156464],{"class":136},[76,156471,25102],{"class":192},[21,156473,156474],{},"常见转义字符：",[225,156476,156477,156486],{},[228,156478,156479],{},[231,156480,156481,156484],{},[234,156482,156483],{},"写法",[234,156485,100669],{},[272,156487,156488,156498,156507,156517,156526],{},[231,156489,156490,156495],{},[277,156491,156492],{},[73,156493,156494],{},"\\n",[277,156496,156497],{},"换行",[231,156499,156500,156504],{},[277,156501,156502],{},[73,156503,1194],{},[277,156505,156506],{},"制表符",[231,156508,156509,156514],{},[277,156510,156511],{},[73,156512,156513],{},"\\\\",[277,156515,156516],{},"反斜杠",[231,156518,156519,156523],{},[277,156520,156521],{},[73,156522,156464],{},[277,156524,156525],{},"双引号",[231,156527,156528,156533],{},[277,156529,156530],{},[73,156531,156532],{},"\\'",[277,156534,156535],{},"单引号",[16,156537,156539],{"id":156538},"_29-字符串拼接","2.9 字符串拼接",[66,156541,156543],{"className":30347,"code":156542,"language":30349,"meta":71,"style":71},"name = \"小明\"\nprint(\"你好，\" + name)\n",[73,156544,156545,156553],{"__ignoreMap":71},[76,156546,156547,156549,156551],{"class":78,"line":79},[76,156548,146505],{"class":86},[76,156550,133],{"class":82},[76,156552,149322],{"class":192},[76,156554,156555,156557,156559,156562,156564],{"class":78,"line":96},[76,156556,30384],{"class":136},[76,156558,87],{"class":86},[76,156560,156561],{"class":192},"\"你好，\"",[76,156563,45535],{"class":82},[76,156565,156566],{"class":86}," name)\n",[21,156568,156569],{},"字符串只能和字符串拼接：",[66,156571,156573],{"className":30347,"code":156572,"language":30349,"meta":71,"style":71},"age = 18\nprint(\"年龄:\" + str(age))\n",[73,156574,156575,156583],{"__ignoreMap":71},[76,156576,156577,156579,156581],{"class":78,"line":79},[76,156578,146515],{"class":86},[76,156580,133],{"class":82},[76,156582,146520],{"class":136},[76,156584,156585,156587,156589,156591,156593,156595],{"class":78,"line":96},[76,156586,30384],{"class":136},[76,156588,87],{"class":86},[76,156590,146486],{"class":192},[76,156592,45535],{"class":82},[76,156594,73888],{"class":136},[76,156596,156597],{"class":86},"(age))\n",[21,156599,156600],{},"更推荐使用格式化字符串。",[16,156602,156604],{"id":156603},"_210-字符串格式化","2.10 字符串格式化",[46,156606,156608],{"id":156607},"_2101-百分号格式化","2.10.1 百分号格式化",[66,156610,156612],{"className":30347,"code":156611,"language":30349,"meta":71,"style":71},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[73,156613,156614,156622,156630,156639,156643],{"__ignoreMap":71},[76,156615,156616,156618,156620],{"class":78,"line":79},[76,156617,146505],{"class":86},[76,156619,133],{"class":82},[76,156621,149322],{"class":192},[76,156623,156624,156626,156628],{"class":78,"line":96},[76,156625,146515],{"class":86},[76,156627,133],{"class":82},[76,156629,146520],{"class":136},[76,156631,156632,156634,156636],{"class":78,"line":1143},[76,156633,155327],{"class":86},[76,156635,133],{"class":82},[76,156637,156638],{"class":136}," 95.5\n",[76,156640,156641],{"class":78,"line":1158},[76,156642,2365],{"emptyLinePlaceholder":2364},[76,156644,156645,156647,156649,156652,156655,156658,156661,156664,156667,156669,156671],{"class":78,"line":1164},[76,156646,30384],{"class":136},[76,156648,87],{"class":86},[76,156650,156651],{"class":192},"\"姓名:",[76,156653,156654],{"class":136},"%s",[76,156656,156657],{"class":192}," 年龄:",[76,156659,156660],{"class":136},"%d",[76,156662,156663],{"class":192}," 分数:",[76,156665,156666],{"class":136},"%.1f",[76,156668,339],{"class":192},[76,156670,156050],{"class":82},[76,156672,156673],{"class":86}," (name, age, score))\n",[21,156675,156676],{},"常用占位符：",[225,156678,156679,156688],{},[228,156680,156681],{},[231,156682,156683,156686],{},[234,156684,156685],{},"占位符",[234,156687,25838],{},[272,156689,156690,156698,156706],{},[231,156691,156692,156696],{},[277,156693,156694],{},[73,156695,156654],{},[277,156697,155193],{},[231,156699,156700,156704],{},[277,156701,156702],{},[73,156703,156660],{},[277,156705,155171],{},[231,156707,156708,156713],{},[277,156709,156710],{},[73,156711,156712],{},"%f",[277,156714,155182],{},[21,156716,156717],{},"精度控制：",[66,156719,156721],{"className":30347,"code":156720,"language":30349,"meta":71,"style":71},"price = 12.3456\nprint(\"%.2f\" % price)\n",[73,156722,156723,156732],{"__ignoreMap":71},[76,156724,156725,156727,156729],{"class":78,"line":79},[76,156726,146650],{"class":86},[76,156728,133],{"class":82},[76,156730,156731],{"class":136}," 12.3456\n",[76,156733,156734,156736,156738,156740,156743,156745,156747],{"class":78,"line":96},[76,156735,30384],{"class":136},[76,156737,87],{"class":86},[76,156739,339],{"class":192},[76,156741,156742],{"class":136},"%.2f",[76,156744,339],{"class":192},[76,156746,156050],{"class":82},[76,156748,156749],{"class":86}," price)\n",[46,156751,156753],{"id":156752},"_2102-format方法","2.10.2 format方法",[66,156755,156757],{"className":30347,"code":156756,"language":30349,"meta":71,"style":71},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[73,156758,156759,156767,156775,156779,156798,156818],{"__ignoreMap":71},[76,156760,156761,156763,156765],{"class":78,"line":79},[76,156762,146505],{"class":86},[76,156764,133],{"class":82},[76,156766,149322],{"class":192},[76,156768,156769,156771,156773],{"class":78,"line":96},[76,156770,146515],{"class":86},[76,156772,133],{"class":82},[76,156774,146520],{"class":136},[76,156776,156777],{"class":78,"line":1143},[76,156778,2365],{"emptyLinePlaceholder":2364},[76,156780,156781,156783,156785,156787,156789,156791,156793,156795],{"class":78,"line":1158},[76,156782,30384],{"class":136},[76,156784,87],{"class":86},[76,156786,156651],{"class":192},[76,156788,32428],{"class":136},[76,156790,156657],{"class":192},[76,156792,32428],{"class":136},[76,156794,339],{"class":192},[76,156796,156797],{"class":86},".format(name, age))\n",[76,156799,156800,156802,156804,156806,156809,156811,156814,156816],{"class":78,"line":1164},[76,156801,30384],{"class":136},[76,156803,87],{"class":86},[76,156805,156651],{"class":192},[76,156807,156808],{"class":136},"{0}",[76,156810,156657],{"class":192},[76,156812,156813],{"class":136},"{1}",[76,156815,339],{"class":192},[76,156817,156797],{"class":86},[76,156819,156820,156822,156824,156826,156829,156831,156834,156836,156839,156841,156843,156846,156848,156850],{"class":78,"line":1178},[76,156821,30384],{"class":136},[76,156823,87],{"class":86},[76,156825,156651],{"class":192},[76,156827,156828],{"class":136},"{name}",[76,156830,156657],{"class":192},[76,156832,156833],{"class":136},"{age}",[76,156835,339],{"class":192},[76,156837,156838],{"class":86},".format(",[76,156840,79779],{"class":5183},[76,156842,133],{"class":82},[76,156844,156845],{"class":86},"name, ",[76,156847,70190],{"class":5183},[76,156849,133],{"class":82},[76,156851,156852],{"class":86},"age))\n",[46,156854,156856],{"id":156855},"_2103-f-string","2.10.3 f-string",[21,156858,156859],{},"推荐写法：",[66,156861,156863],{"className":30347,"code":156862,"language":30349,"meta":71,"style":71},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[73,156864,156865,156873,156881,156889,156893],{"__ignoreMap":71},[76,156866,156867,156869,156871],{"class":78,"line":79},[76,156868,146505],{"class":86},[76,156870,133],{"class":82},[76,156872,149322],{"class":192},[76,156874,156875,156877,156879],{"class":78,"line":96},[76,156876,146515],{"class":86},[76,156878,133],{"class":82},[76,156880,146520],{"class":136},[76,156882,156883,156885,156887],{"class":78,"line":1143},[76,156884,155327],{"class":86},[76,156886,133],{"class":82},[76,156888,156638],{"class":136},[76,156890,156891],{"class":78,"line":1158},[76,156892,2365],{"emptyLinePlaceholder":2364},[76,156894,156895,156897,156899,156901,156903,156905,156907,156909,156911,156913,156915,156917,156919,156921,156924,156927,156929,156931],{"class":78,"line":1164},[76,156896,30384],{"class":136},[76,156898,87],{"class":86},[76,156900,140],{"class":82},[76,156902,156651],{"class":192},[76,156904,984],{"class":136},[76,156906,79779],{"class":86},[76,156908,1034],{"class":136},[76,156910,156657],{"class":192},[76,156912,984],{"class":136},[76,156914,70190],{"class":86},[76,156916,1034],{"class":136},[76,156918,156663],{"class":192},[76,156920,984],{"class":136},[76,156922,156923],{"class":86},"score",[76,156925,156926],{"class":82},":.1f",[76,156928,1034],{"class":136},[76,156930,339],{"class":192},[76,156932,93],{"class":86},[21,156934,156935],{},"表达式也可以放进去：",[66,156937,156939],{"className":30347,"code":156938,"language":30349,"meta":71,"style":71},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[73,156940,156941,156949,156957],{"__ignoreMap":71},[76,156942,156943,156945,156947],{"class":78,"line":79},[76,156944,146650],{"class":86},[76,156946,133],{"class":82},[76,156948,146655],{"class":136},[76,156950,156951,156953,156955],{"class":78,"line":96},[76,156952,146660],{"class":86},[76,156954,133],{"class":82},[76,156956,54396],{"class":136},[76,156958,156959,156961,156963,156965,156968,156970,156972,156974,156977,156979,156982],{"class":78,"line":1143},[76,156960,30384],{"class":136},[76,156962,87],{"class":86},[76,156964,140],{"class":82},[76,156966,156967],{"class":192},"\"总价:",[76,156969,984],{"class":136},[76,156971,146650],{"class":86},[76,156973,543],{"class":82},[76,156975,156976],{"class":86}," count",[76,156978,1034],{"class":136},[76,156980,156981],{"class":192},"元\"",[76,156983,93],{"class":86},[16,156985,156987],{"id":156986},"_211-input输入","2.11 input输入",[21,156989,156990,156993],{},[73,156991,156992],{},"input()"," 会暂停程序，等待用户输入。",[66,156995,156997],{"className":30347,"code":156996,"language":30349,"meta":71,"style":71},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[73,156998,156999,157013],{"__ignoreMap":71},[76,157000,157001,157003,157005,157007,157009,157011],{"class":78,"line":79},[76,157002,146505],{"class":86},[76,157004,133],{"class":82},[76,157006,60574],{"class":136},[76,157008,87],{"class":86},[76,157010,152348],{"class":192},[76,157012,93],{"class":86},[76,157014,157015,157017,157019,157021,157024,157026,157028,157030,157032],{"class":78,"line":96},[76,157016,30384],{"class":136},[76,157018,87],{"class":86},[76,157020,140],{"class":82},[76,157022,157023],{"class":192},"\"你好，",[76,157025,984],{"class":136},[76,157027,79779],{"class":86},[76,157029,1034],{"class":136},[76,157031,339],{"class":192},[76,157033,93],{"class":86},[21,157035,157036],{},"输入整数：",[66,157038,157040],{"className":30347,"code":157039,"language":30349,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[73,157041,157042,157060],{"__ignoreMap":71},[76,157043,157044,157046,157048,157050,157052,157054,157056,157058],{"class":78,"line":79},[76,157045,146515],{"class":86},[76,157047,133],{"class":82},[76,157049,2346],{"class":136},[76,157051,87],{"class":86},[76,157053,53790],{"class":136},[76,157055,87],{"class":86},[76,157057,152363],{"class":192},[76,157059,30466],{"class":86},[76,157061,157062,157064,157066,157068,157071,157073,157075,157077,157080,157082],{"class":78,"line":96},[76,157063,30384],{"class":136},[76,157065,87],{"class":86},[76,157067,140],{"class":82},[76,157069,157070],{"class":192},"\"明年你",[76,157072,984],{"class":136},[76,157074,146515],{"class":86},[76,157076,569],{"class":82},[76,157078,157079],{"class":136}," 1}",[76,157081,149373],{"class":192},[76,157083,93],{"class":86},[21,157085,157086],{},"输入小数：",[66,157088,157090],{"className":30347,"code":157089,"language":30349,"meta":71,"style":71},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[73,157091,157092,157111],{"__ignoreMap":71},[76,157093,157094,157096,157098,157100,157102,157104,157106,157109],{"class":78,"line":79},[76,157095,155300],{"class":86},[76,157097,133],{"class":82},[76,157099,109766],{"class":136},[76,157101,87],{"class":86},[76,157103,53790],{"class":136},[76,157105,87],{"class":86},[76,157107,157108],{"class":192},"\"请输入身高:\"",[76,157110,30466],{"class":86},[76,157112,157113,157115,157117,157119,157122,157124,157126,157129,157131,157134],{"class":78,"line":96},[76,157114,30384],{"class":136},[76,157116,87],{"class":86},[76,157118,140],{"class":82},[76,157120,157121],{"class":192},"\"身高:",[76,157123,984],{"class":136},[76,157125,24950],{"class":86},[76,157127,157128],{"class":82},":.2f",[76,157130,1034],{"class":136},[76,157132,157133],{"class":192},"米\"",[76,157135,93],{"class":86},[16,157137,157139],{"id":157138},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[21,157141,123261],{},[29,157143,157144,157147,157150,157153],{},[32,157145,157146],{},"输入商品单价。",[32,157148,157149],{},"输入购买数量。",[32,157151,157152],{},"输入折扣，例如 0.8 表示八折。",[32,157154,157155],{},"输出最终金额，保留两位小数。",[21,157157,10002],{},[66,157159,157161],{"className":30347,"code":157160,"language":30349,"meta":71,"style":71},"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",[73,157162,157163,157182,157201,157221,157225,157245,157249,157272,157293,157315],{"__ignoreMap":71},[76,157164,157165,157167,157169,157171,157173,157175,157177,157180],{"class":78,"line":79},[76,157166,146650],{"class":86},[76,157168,133],{"class":82},[76,157170,109766],{"class":136},[76,157172,87],{"class":86},[76,157174,53790],{"class":136},[76,157176,87],{"class":86},[76,157178,157179],{"class":192},"\"请输入商品单价:\"",[76,157181,30466],{"class":86},[76,157183,157184,157186,157188,157190,157192,157194,157196,157199],{"class":78,"line":96},[76,157185,146660],{"class":86},[76,157187,133],{"class":82},[76,157189,2346],{"class":136},[76,157191,87],{"class":86},[76,157193,53790],{"class":136},[76,157195,87],{"class":86},[76,157197,157198],{"class":192},"\"请输入购买数量:\"",[76,157200,30466],{"class":86},[76,157202,157203,157206,157208,157210,157212,157214,157216,157219],{"class":78,"line":1143},[76,157204,157205],{"class":86},"discount ",[76,157207,133],{"class":82},[76,157209,109766],{"class":136},[76,157211,87],{"class":86},[76,157213,53790],{"class":136},[76,157215,87],{"class":86},[76,157217,157218],{"class":192},"\"请输入折扣:\"",[76,157220,30466],{"class":86},[76,157222,157223],{"class":78,"line":1158},[76,157224,2365],{"emptyLinePlaceholder":2364},[76,157226,157227,157230,157232,157235,157237,157240,157242],{"class":78,"line":1164},[76,157228,157229],{"class":86},"total ",[76,157231,133],{"class":82},[76,157233,157234],{"class":86}," price ",[76,157236,543],{"class":82},[76,157238,157239],{"class":86}," count ",[76,157241,543],{"class":82},[76,157243,157244],{"class":86}," discount\n",[76,157246,157247],{"class":78,"line":1178},[76,157248,2365],{"emptyLinePlaceholder":2364},[76,157250,157251,157253,157255,157257,157260,157262,157264,157266,157268,157270],{"class":78,"line":1184},[76,157252,30384],{"class":136},[76,157254,87],{"class":86},[76,157256,140],{"class":82},[76,157258,157259],{"class":192},"\"商品单价:",[76,157261,984],{"class":136},[76,157263,79784],{"class":86},[76,157265,157128],{"class":82},[76,157267,1034],{"class":136},[76,157269,339],{"class":192},[76,157271,93],{"class":86},[76,157273,157274,157276,157278,157280,157283,157285,157287,157289,157291],{"class":78,"line":1275},[76,157275,30384],{"class":136},[76,157277,87],{"class":86},[76,157279,140],{"class":82},[76,157281,157282],{"class":192},"\"购买数量:",[76,157284,984],{"class":136},[76,157286,84403],{"class":86},[76,157288,1034],{"class":136},[76,157290,339],{"class":192},[76,157292,93],{"class":86},[76,157294,157295,157297,157299,157301,157304,157306,157309,157311,157313],{"class":78,"line":1281},[76,157296,30384],{"class":136},[76,157298,87],{"class":86},[76,157300,140],{"class":82},[76,157302,157303],{"class":192},"\"折扣:",[76,157305,984],{"class":136},[76,157307,157308],{"class":86},"discount",[76,157310,1034],{"class":136},[76,157312,339],{"class":192},[76,157314,93],{"class":86},[76,157316,157317,157319,157321,157323,157326,157328,157331,157333,157335,157337],{"class":78,"line":1293},[76,157318,30384],{"class":136},[76,157320,87],{"class":86},[76,157322,140],{"class":82},[76,157324,157325],{"class":192},"\"应付金额:",[76,157327,984],{"class":136},[76,157329,157330],{"class":86},"total",[76,157332,157128],{"class":82},[76,157334,1034],{"class":136},[76,157336,156981],{"class":192},[76,157338,93],{"class":86},[16,157340,157342],{"id":157341},"_213-易错点","2.13 易错点",[29,157344,157345,157350,157356,157364,157367],{},[32,157346,157347,157349],{},[73,157348,156992],{}," 的结果是字符串，做运算前要转换。",[32,157351,157352,157353,28354],{},"字符串拼接时，数字要先 ",[73,157354,157355],{},"str()",[32,157357,157358,157360,157361,157363],{},[73,157359,133],{}," 是赋值，",[73,157362,2914],{}," 是比较。",[32,157365,157366],{},"Python 没有自增自减运算符。",[32,157368,157369],{},"浮点数计算可能有精度误差：",[66,157371,157373],{"className":30347,"code":157372,"language":30349,"meta":71,"style":71},"print(0.1 + 0.2)\n",[73,157374,157375],{"__ignoreMap":71},[76,157376,157377,157379,157381,157383,157385,157388],{"class":78,"line":79},[76,157378,30384],{"class":136},[76,157380,87],{"class":86},[76,157382,86179],{"class":136},[76,157384,45535],{"class":82},[76,157386,157387],{"class":136}," 0.2",[76,157389,93],{"class":86},[21,157391,157392,157393,157396],{},"金额计算如果要求严格，可以后续学习 ",[73,157394,157395],{},"decimal"," 模块。",[16,157398,157400],{"id":157399},"_214-本章练习","2.14 本章练习",[29,157402,157403,157406,157409,157412,157415],{},[32,157404,157405],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[32,157407,157408],{},"输入圆的半径，计算面积，保留两位小数。",[32,157410,157411],{},"输入工资和奖金，计算总收入。",[32,157413,157414],{},"输入摄氏温度，转换为华氏温度。",[32,157416,157417],{},"写一个 BMI 计算程序：",[66,157419,157422],{"className":157420,"code":157421,"language":5154,"meta":71},[5152],"BMI = 体重kg \u002F 身高m ** 2\n",[73,157423,157421],{"__ignoreMap":71},[5092,157425,157426],{},"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":71,"searchDepth":96,"depth":96,"links":157428},[157429,157430,157431,157432,157433,157434,157435,157441,157442,157443,157448,157449,157450,157451],{"id":154990,"depth":96,"text":154991},{"id":155099,"depth":96,"text":155100},{"id":155270,"depth":96,"text":155271},{"id":155347,"depth":96,"text":155348},{"id":50700,"depth":96,"text":50701},{"id":155653,"depth":96,"text":155654},{"id":155879,"depth":96,"text":155880,"children":157436},[157437,157438,157439,157440],{"id":155883,"depth":1143,"text":155884},{"id":156077,"depth":1143,"text":156078},{"id":156165,"depth":1143,"text":156166},{"id":156271,"depth":1143,"text":156272},{"id":156380,"depth":96,"text":156381},{"id":156538,"depth":96,"text":156539},{"id":156603,"depth":96,"text":156604,"children":157444},[157445,157446,157447],{"id":156607,"depth":1143,"text":156608},{"id":156752,"depth":1143,"text":156753},{"id":156855,"depth":1143,"text":156856},{"id":156986,"depth":96,"text":156987},{"id":157138,"depth":96,"text":157139},{"id":157341,"depth":96,"text":157342},{"id":157399,"depth":96,"text":157400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154982,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157458,"title":157459,"body":157460,"description":23344,"extension":5123,"meta":159096,"navigation":2364,"path":159097,"seo":159098,"stem":159099,"__hash__":159100},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":9,"value":157461,"toc":159077},[157462,157465,157469,157472,157487,157490,157518,157522,157572,157574,157590,157593,157619,157622,157626,157693,157696,157712,157716,157719,157837,157840,157847,157896,157902,157906,157909,158022,158025,158029,158033,158036,158086,158090,158093,158143,158147,158150,158188,158192,158195,158241,158244,158279,158283,158288,158291,158337,158339,158406,158410,158416,158527,158536,158540,158542,158553,158555,158721,158725,158727,158741,158743,158957,158961,158980,158997,159000,159046,159050,159074],[12,157463,157459],{"id":157464},"_3-判断语句",[16,157466,157468],{"id":157467},"_31-布尔值","3.1 布尔值",[21,157470,157471],{},"判断语句依赖布尔值：",[66,157473,157475],{"className":30347,"code":157474,"language":30349,"meta":71,"style":71},"True\nFalse\n",[73,157476,157477,157482],{"__ignoreMap":71},[76,157478,157479],{"class":78,"line":79},[76,157480,157481],{"class":136},"True\n",[76,157483,157484],{"class":78,"line":96},[76,157485,157486],{"class":136},"False\n",[21,157488,157489],{},"比较表达式会产生布尔值：",[66,157491,157493],{"className":30347,"code":157492,"language":30349,"meta":71,"style":71},"age = 18\nprint(age >= 18)  # True\n",[73,157494,157495,157503],{"__ignoreMap":71},[76,157496,157497,157499,157501],{"class":78,"line":79},[76,157498,146515],{"class":86},[76,157500,133],{"class":82},[76,157502,146520],{"class":136},[76,157504,157505,157507,157509,157511,157513,157515],{"class":78,"line":96},[76,157506,30384],{"class":136},[76,157508,155737],{"class":86},[76,157510,1674],{"class":82},[76,157512,156254],{"class":136},[76,157514,45777],{"class":86},[76,157516,157517],{"class":146},"# True\n",[16,157519,157521],{"id":157520},"_32-if基础语法","3.2 if基础语法",[66,157523,157525],{"className":30347,"code":157524,"language":30349,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[73,157526,157527,157545,157549,157561],{"__ignoreMap":71},[76,157528,157529,157531,157533,157535,157537,157539,157541,157543],{"class":78,"line":79},[76,157530,146515],{"class":86},[76,157532,133],{"class":82},[76,157534,2346],{"class":136},[76,157536,87],{"class":86},[76,157538,53790],{"class":136},[76,157540,87],{"class":86},[76,157542,152363],{"class":192},[76,157544,30466],{"class":86},[76,157546,157547],{"class":78,"line":96},[76,157548,2365],{"emptyLinePlaceholder":2364},[76,157550,157551,157553,157555,157557,157559],{"class":78,"line":1143},[76,157552,1495],{"class":82},[76,157554,15674],{"class":86},[76,157556,1674],{"class":82},[76,157558,156254],{"class":136},[76,157560,3704],{"class":86},[76,157562,157563,157565,157567,157570],{"class":78,"line":1158},[76,157564,31268],{"class":136},[76,157566,87],{"class":86},[76,157568,157569],{"class":192},"\"可以进入网吧\"",[76,157571,93],{"class":86},[21,157573,8992],{},[29,157575,157576,157581,157584,157587],{},[32,157577,157578,157580],{},[73,157579,1495],{}," 后面是条件表达式。",[32,157582,157583],{},"条件后面必须写冒号。",[32,157585,157586],{},"条件成立时执行缩进代码块。",[32,157588,157589],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[21,157591,157592],{},"错误示例：",[66,157594,157596],{"className":30347,"code":157595,"language":30349,"meta":71,"style":71},"if age >= 18\n    print(\"可以进入\")\n",[73,157597,157598,157608],{"__ignoreMap":71},[76,157599,157600,157602,157604,157606],{"class":78,"line":79},[76,157601,1495],{"class":82},[76,157603,15674],{"class":86},[76,157605,1674],{"class":82},[76,157607,146520],{"class":136},[76,157609,157610,157612,157614,157617],{"class":78,"line":96},[76,157611,31268],{"class":136},[76,157613,87],{"class":86},[76,157615,157616],{"class":192},"\"可以进入\"",[76,157618,93],{"class":86},[21,157620,157621],{},"缺少冒号。",[16,157623,157625],{"id":157624},"_33-if-else","3.3 if else",[66,157627,157629],{"className":30347,"code":157628,"language":30349,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[73,157630,157631,157649,157653,157665,157676,157682],{"__ignoreMap":71},[76,157632,157633,157635,157637,157639,157641,157643,157645,157647],{"class":78,"line":79},[76,157634,146515],{"class":86},[76,157636,133],{"class":82},[76,157638,2346],{"class":136},[76,157640,87],{"class":86},[76,157642,53790],{"class":136},[76,157644,87],{"class":86},[76,157646,152363],{"class":192},[76,157648,30466],{"class":86},[76,157650,157651],{"class":78,"line":96},[76,157652,2365],{"emptyLinePlaceholder":2364},[76,157654,157655,157657,157659,157661,157663],{"class":78,"line":1143},[76,157656,1495],{"class":82},[76,157658,15674],{"class":86},[76,157660,1674],{"class":82},[76,157662,156254],{"class":136},[76,157664,3704],{"class":86},[76,157666,157667,157669,157671,157674],{"class":78,"line":1158},[76,157668,31268],{"class":136},[76,157670,87],{"class":86},[76,157672,157673],{"class":192},"\"成年人\"",[76,157675,93],{"class":86},[76,157677,157678,157680],{"class":78,"line":1164},[76,157679,1665],{"class":82},[76,157681,3704],{"class":86},[76,157683,157684,157686,157688,157691],{"class":78,"line":1178},[76,157685,31268],{"class":136},[76,157687,87],{"class":86},[76,157689,157690],{"class":192},"\"未成年人\"",[76,157692,93],{"class":86},[21,157694,157695],{},"执行逻辑：",[29,157697,157698,157704,157709],{},[32,157699,157700,157701,157703],{},"条件成立，执行 ",[73,157702,1495],{}," 代码块。",[32,157705,157706,157707,157703],{},"条件不成立，执行 ",[73,157708,1665],{},[32,157710,157711],{},"两个代码块只会执行其中一个。",[16,157713,157715],{"id":157714},"_34-if-elif-else","3.4 if elif else",[21,157717,157718],{},"多条件判断：",[66,157720,157722],{"className":30347,"code":157721,"language":30349,"meta":71,"style":71},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[73,157723,157724,157742,157746,157760,157771,157785,157796,157809,157820,157826],{"__ignoreMap":71},[76,157725,157726,157728,157730,157732,157734,157736,157738,157740],{"class":78,"line":79},[76,157727,155327],{"class":86},[76,157729,133],{"class":82},[76,157731,2346],{"class":136},[76,157733,87],{"class":86},[76,157735,53790],{"class":136},[76,157737,87],{"class":86},[76,157739,152378],{"class":192},[76,157741,30466],{"class":86},[76,157743,157744],{"class":78,"line":96},[76,157745,2365],{"emptyLinePlaceholder":2364},[76,157747,157748,157750,157753,157755,157758],{"class":78,"line":1143},[76,157749,1495],{"class":82},[76,157751,157752],{"class":86}," score ",[76,157754,1674],{"class":82},[76,157756,157757],{"class":136}," 90",[76,157759,3704],{"class":86},[76,157761,157762,157764,157766,157769],{"class":78,"line":1158},[76,157763,31268],{"class":136},[76,157765,87],{"class":86},[76,157767,157768],{"class":192},"\"优秀\"",[76,157770,93],{"class":86},[76,157772,157773,157776,157778,157780,157783],{"class":78,"line":1164},[76,157774,157775],{"class":82},"elif",[76,157777,157752],{"class":86},[76,157779,1674],{"class":82},[76,157781,157782],{"class":136}," 80",[76,157784,3704],{"class":86},[76,157786,157787,157789,157791,157794],{"class":78,"line":1178},[76,157788,31268],{"class":136},[76,157790,87],{"class":86},[76,157792,157793],{"class":192},"\"良好\"",[76,157795,93],{"class":86},[76,157797,157798,157800,157802,157804,157807],{"class":78,"line":1184},[76,157799,157775],{"class":82},[76,157801,157752],{"class":86},[76,157803,1674],{"class":82},[76,157805,157806],{"class":136}," 60",[76,157808,3704],{"class":86},[76,157810,157811,157813,157815,157818],{"class":78,"line":1275},[76,157812,31268],{"class":136},[76,157814,87],{"class":86},[76,157816,157817],{"class":192},"\"及格\"",[76,157819,93],{"class":86},[76,157821,157822,157824],{"class":78,"line":1281},[76,157823,1665],{"class":82},[76,157825,3704],{"class":86},[76,157827,157828,157830,157832,157835],{"class":78,"line":1293},[76,157829,31268],{"class":136},[76,157831,87],{"class":86},[76,157833,157834],{"class":192},"\"不及格\"",[76,157836,93],{"class":86},[21,157838,157839],{},"注意判断顺序很重要。",[21,157841,157842,157843,157846],{},"如果把 ",[73,157844,157845],{},"score >= 60"," 放在最前面：",[66,157848,157850],{"className":30347,"code":157849,"language":30349,"meta":71,"style":71},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[73,157851,157852,157864,157874,157886],{"__ignoreMap":71},[76,157853,157854,157856,157858,157860,157862],{"class":78,"line":79},[76,157855,1495],{"class":82},[76,157857,157752],{"class":86},[76,157859,1674],{"class":82},[76,157861,157806],{"class":136},[76,157863,3704],{"class":86},[76,157865,157866,157868,157870,157872],{"class":78,"line":96},[76,157867,31268],{"class":136},[76,157869,87],{"class":86},[76,157871,157817],{"class":192},[76,157873,93],{"class":86},[76,157875,157876,157878,157880,157882,157884],{"class":78,"line":1143},[76,157877,157775],{"class":82},[76,157879,157752],{"class":86},[76,157881,1674],{"class":82},[76,157883,157757],{"class":136},[76,157885,3704],{"class":86},[76,157887,157888,157890,157892,157894],{"class":78,"line":1158},[76,157889,31268],{"class":136},[76,157891,87],{"class":86},[76,157893,157768],{"class":192},[76,157895,93],{"class":86},[21,157897,157898,157899,157901],{},"成绩 95 会先满足 ",[73,157900,157845],{},"，后面的优秀分支就不会执行。",[16,157903,157905],{"id":157904},"_35-判断语句嵌套","3.5 判断语句嵌套",[21,157907,157908],{},"嵌套判断就是在一个判断内部再写判断。",[66,157910,157912],{"className":30347,"code":157911,"language":30349,"meta":71,"style":71},"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",[73,157913,157914,157932,157947,157951,157963,157977,157987,157994,158005,158011],{"__ignoreMap":71},[76,157915,157916,157918,157920,157922,157924,157926,157928,157930],{"class":78,"line":79},[76,157917,146515],{"class":86},[76,157919,133],{"class":82},[76,157921,2346],{"class":136},[76,157923,87],{"class":86},[76,157925,53790],{"class":136},[76,157927,87],{"class":86},[76,157929,152363],{"class":192},[76,157931,30466],{"class":86},[76,157933,157934,157936,157938,157940,157942,157945],{"class":78,"line":96},[76,157935,156330],{"class":86},[76,157937,133],{"class":82},[76,157939,60574],{"class":136},[76,157941,87],{"class":86},[76,157943,157944],{"class":192},"\"是否有票(y\u002Fn):\"",[76,157946,93],{"class":86},[76,157948,157949],{"class":78,"line":1143},[76,157950,2365],{"emptyLinePlaceholder":2364},[76,157952,157953,157955,157957,157959,157961],{"class":78,"line":1158},[76,157954,1495],{"class":82},[76,157956,15674],{"class":86},[76,157958,1674],{"class":82},[76,157960,156254],{"class":136},[76,157962,3704],{"class":86},[76,157964,157965,157967,157970,157972,157975],{"class":78,"line":1164},[76,157966,3066],{"class":82},[76,157968,157969],{"class":86}," has_ticket ",[76,157971,2914],{"class":82},[76,157973,157974],{"class":192}," \"y\"",[76,157976,3704],{"class":86},[76,157978,157979,157981,157983,157985],{"class":78,"line":1178},[76,157980,32420],{"class":136},[76,157982,87],{"class":86},[76,157984,157616],{"class":192},[76,157986,93],{"class":86},[76,157988,157989,157992],{"class":78,"line":1184},[76,157990,157991],{"class":82},"    else",[76,157993,3704],{"class":86},[76,157995,157996,157998,158000,158003],{"class":78,"line":1275},[76,157997,32420],{"class":136},[76,157999,87],{"class":86},[76,158001,158002],{"class":192},"\"请先买票\"",[76,158004,93],{"class":86},[76,158006,158007,158009],{"class":78,"line":1281},[76,158008,1665],{"class":82},[76,158010,3704],{"class":86},[76,158012,158013,158015,158017,158020],{"class":78,"line":1293},[76,158014,31268],{"class":136},[76,158016,87],{"class":86},[76,158018,158019],{"class":192},"\"未成年人禁止进入\"",[76,158021,93],{"class":86},[21,158023,158024],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[16,158026,158028],{"id":158027},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[46,158030,158032],{"id":158031},"_361-and","3.6.1 and",[21,158034,158035],{},"两个条件都成立才成立。",[66,158037,158039],{"className":30347,"code":158038,"language":30349,"meta":71,"style":71},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[73,158040,158041,158049,158057,158061,158076],{"__ignoreMap":71},[76,158042,158043,158045,158047],{"class":78,"line":79},[76,158044,146515],{"class":86},[76,158046,133],{"class":82},[76,158048,88034],{"class":136},[76,158050,158051,158053,158055],{"class":78,"line":96},[76,158052,156330],{"class":86},[76,158054,133],{"class":82},[76,158056,153568],{"class":136},[76,158058,158059],{"class":78,"line":1143},[76,158060,2365],{"emptyLinePlaceholder":2364},[76,158062,158063,158065,158067,158069,158071,158073],{"class":78,"line":1158},[76,158064,1495],{"class":82},[76,158066,15674],{"class":86},[76,158068,1674],{"class":82},[76,158070,156254],{"class":136},[76,158072,120398],{"class":82},[76,158074,158075],{"class":86}," has_ticket:\n",[76,158077,158078,158080,158082,158084],{"class":78,"line":1164},[76,158079,31268],{"class":136},[76,158081,87],{"class":86},[76,158083,157616],{"class":192},[76,158085,93],{"class":86},[46,158087,158089],{"id":158088},"_362-or","3.6.2 or",[21,158091,158092],{},"只要一个条件成立就成立。",[66,158094,158096],{"className":30347,"code":158095,"language":30349,"meta":71,"style":71},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[73,158097,158098,158107,158116,158120,158132],{"__ignoreMap":71},[76,158099,158100,158103,158105],{"class":78,"line":79},[76,158101,158102],{"class":86},"is_vip ",[76,158104,133],{"class":82},[76,158106,125776],{"class":136},[76,158108,158109,158112,158114],{"class":78,"line":96},[76,158110,158111],{"class":86},"coupon ",[76,158113,133],{"class":82},[76,158115,153568],{"class":136},[76,158117,158118],{"class":78,"line":1143},[76,158119,2365],{"emptyLinePlaceholder":2364},[76,158121,158122,158124,158127,158129],{"class":78,"line":1158},[76,158123,1495],{"class":82},[76,158125,158126],{"class":86}," is_vip ",[76,158128,115059],{"class":82},[76,158130,158131],{"class":86}," coupon:\n",[76,158133,158134,158136,158138,158141],{"class":78,"line":1164},[76,158135,31268],{"class":136},[76,158137,87],{"class":86},[76,158139,158140],{"class":192},"\"可以享受优惠\"",[76,158142,93],{"class":86},[46,158144,158146],{"id":158145},"_363-not","3.6.3 not",[21,158148,158149],{},"取反。",[66,158151,158153],{"className":30347,"code":158152,"language":30349,"meta":71,"style":71},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[73,158154,158155,158164,158168,158177],{"__ignoreMap":71},[76,158156,158157,158160,158162],{"class":78,"line":79},[76,158158,158159],{"class":86},"is_closed ",[76,158161,133],{"class":82},[76,158163,125776],{"class":136},[76,158165,158166],{"class":78,"line":96},[76,158167,2365],{"emptyLinePlaceholder":2364},[76,158169,158170,158172,158174],{"class":78,"line":1143},[76,158171,1495],{"class":82},[76,158173,38899],{"class":82},[76,158175,158176],{"class":86}," is_closed:\n",[76,158178,158179,158181,158183,158186],{"class":78,"line":1158},[76,158180,31268],{"class":136},[76,158182,87],{"class":86},[76,158184,158185],{"class":192},"\"店铺营业中\"",[76,158187,93],{"class":86},[16,158189,158191],{"id":158190},"_37-链式比较","3.7 链式比较",[21,158193,158194],{},"Python 支持链式比较：",[66,158196,158198],{"className":30347,"code":158197,"language":30349,"meta":71,"style":71},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[73,158199,158200,158209,158213,158230],{"__ignoreMap":71},[76,158201,158202,158204,158206],{"class":78,"line":79},[76,158203,155327],{"class":86},[76,158205,133],{"class":82},[76,158207,158208],{"class":136}," 85\n",[76,158210,158211],{"class":78,"line":96},[76,158212,2365],{"emptyLinePlaceholder":2364},[76,158214,158215,158217,158219,158222,158224,158226,158228],{"class":78,"line":1143},[76,158216,1495],{"class":82},[76,158218,4058],{"class":136},[76,158220,158221],{"class":82}," \u003C=",[76,158223,157752],{"class":86},[76,158225,1552],{"class":82},[76,158227,5721],{"class":136},[76,158229,3704],{"class":86},[76,158231,158232,158234,158236,158239],{"class":78,"line":1158},[76,158233,31268],{"class":136},[76,158235,87],{"class":86},[76,158237,158238],{"class":192},"\"成绩合法\"",[76,158240,93],{"class":86},[21,158242,158243],{},"等价于：",[66,158245,158247],{"className":30347,"code":158246,"language":30349,"meta":71,"style":71},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[73,158248,158249,158269],{"__ignoreMap":71},[76,158250,158251,158253,158255,158257,158259,158261,158263,158265,158267],{"class":78,"line":79},[76,158252,1495],{"class":82},[76,158254,157752],{"class":86},[76,158256,1674],{"class":82},[76,158258,4058],{"class":136},[76,158260,120398],{"class":82},[76,158262,157752],{"class":86},[76,158264,1552],{"class":82},[76,158266,5721],{"class":136},[76,158268,3704],{"class":86},[76,158270,158271,158273,158275,158277],{"class":78,"line":96},[76,158272,31268],{"class":136},[76,158274,87],{"class":86},[76,158276,158238],{"class":192},[76,158278,93],{"class":86},[16,158280,158282],{"id":158281},"_38-真值和假值","3.8 真值和假值",[21,158284,116436,158285,158287],{},[73,158286,1495],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[21,158289,158290],{},"假值：",[66,158292,158294],{"className":30347,"code":158293,"language":30349,"meta":71,"style":71},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[73,158295,158296,158300,158305,158309,158313,158318,158322,158326,158331],{"__ignoreMap":71},[76,158297,158298],{"class":78,"line":79},[76,158299,157486],{"class":136},[76,158301,158302],{"class":78,"line":96},[76,158303,158304],{"class":136},"None\n",[76,158306,158307],{"class":78,"line":1143},[76,158308,3050],{"class":136},[76,158310,158311],{"class":78,"line":1158},[76,158312,32311],{"class":136},[76,158314,158315],{"class":78,"line":1164},[76,158316,158317],{"class":192},"\"\"\n",[76,158319,158320],{"class":78,"line":1178},[76,158321,32326],{"class":86},[76,158323,158324],{"class":78,"line":1184},[76,158325,1940],{"class":86},[76,158327,158328],{"class":78,"line":1275},[76,158329,158330],{"class":86},"{}\n",[76,158332,158333,158335],{"class":78,"line":1281},[76,158334,155259],{"class":136},[76,158336,1940],{"class":86},[21,158338,15102],{},[66,158340,158342],{"className":30347,"code":158341,"language":30349,"meta":71,"style":71},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[73,158343,158344,158358,158362,158369,158389,158395],{"__ignoreMap":71},[76,158345,158346,158348,158350,158352,158354,158356],{"class":78,"line":79},[76,158347,146505],{"class":86},[76,158349,133],{"class":82},[76,158351,60574],{"class":136},[76,158353,87],{"class":86},[76,158355,152348],{"class":192},[76,158357,93],{"class":86},[76,158359,158360],{"class":78,"line":96},[76,158361,2365],{"emptyLinePlaceholder":2364},[76,158363,158364,158366],{"class":78,"line":1143},[76,158365,1495],{"class":82},[76,158367,158368],{"class":86}," name:\n",[76,158370,158371,158373,158375,158377,158379,158381,158383,158385,158387],{"class":78,"line":1158},[76,158372,31268],{"class":136},[76,158374,87],{"class":86},[76,158376,140],{"class":82},[76,158378,157023],{"class":192},[76,158380,984],{"class":136},[76,158382,79779],{"class":86},[76,158384,1034],{"class":136},[76,158386,339],{"class":192},[76,158388,93],{"class":86},[76,158390,158391,158393],{"class":78,"line":1164},[76,158392,1665],{"class":82},[76,158394,3704],{"class":86},[76,158396,158397,158399,158401,158404],{"class":78,"line":1178},[76,158398,31268],{"class":136},[76,158400,87],{"class":86},[76,158402,158403],{"class":192},"\"姓名不能为空\"",[76,158405,93],{"class":86},[16,158407,158409],{"id":158408},"_39-match语句","3.9 match语句",[21,158411,158412,158413,158415],{},"Python 3.10 开始支持 ",[73,158414,71234],{},"。它适合处理固定选项。",[66,158417,158419],{"className":30347,"code":158418,"language":30349,"meta":71,"style":71},"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",[73,158420,158421,158437,158441,158448,158458,158469,158478,158489,158498,158509,158516],{"__ignoreMap":71},[76,158422,158423,158426,158428,158430,158432,158435],{"class":78,"line":79},[76,158424,158425],{"class":86},"command ",[76,158427,133],{"class":82},[76,158429,60574],{"class":136},[76,158431,87],{"class":86},[76,158433,158434],{"class":192},"\"请输入命令:\"",[76,158436,93],{"class":86},[76,158438,158439],{"class":78,"line":96},[76,158440,2365],{"emptyLinePlaceholder":2364},[76,158442,158443,158445],{"class":78,"line":1143},[76,158444,71234],{"class":82},[76,158446,158447],{"class":86}," command:\n",[76,158449,158450,158453,158456],{"class":78,"line":1158},[76,158451,158452],{"class":82},"    case",[76,158454,158455],{"class":192}," \"start\"",[76,158457,3704],{"class":86},[76,158459,158460,158462,158464,158467],{"class":78,"line":1164},[76,158461,32420],{"class":136},[76,158463,87],{"class":86},[76,158465,158466],{"class":192},"\"启动\"",[76,158468,93],{"class":86},[76,158470,158471,158473,158476],{"class":78,"line":1178},[76,158472,158452],{"class":82},[76,158474,158475],{"class":192}," \"stop\"",[76,158477,3704],{"class":86},[76,158479,158480,158482,158484,158487],{"class":78,"line":1184},[76,158481,32420],{"class":136},[76,158483,87],{"class":86},[76,158485,158486],{"class":192},"\"停止\"",[76,158488,93],{"class":86},[76,158490,158491,158493,158496],{"class":78,"line":1275},[76,158492,158452],{"class":82},[76,158494,158495],{"class":192}," \"restart\"",[76,158497,3704],{"class":86},[76,158499,158500,158502,158504,158507],{"class":78,"line":1281},[76,158501,32420],{"class":136},[76,158503,87],{"class":86},[76,158505,158506],{"class":192},"\"重启\"",[76,158508,93],{"class":86},[76,158510,158511,158513],{"class":78,"line":1293},[76,158512,158452],{"class":82},[76,158514,158515],{"class":86}," _:\n",[76,158517,158518,158520,158522,158525],{"class":78,"line":1576},[76,158519,32420],{"class":136},[76,158521,87],{"class":86},[76,158523,158524],{"class":192},"\"未知命令\"",[76,158526,93],{"class":86},[21,158528,158529,158530,158532,158533,158535],{},"入门阶段掌握 ",[73,158531,154627],{}," 更重要，",[73,158534,71234],{}," 可以作为补充。",[16,158537,158539],{"id":158538},"_310-小案例成绩等级","3.10 小案例：成绩等级",[21,158541,123261],{},[29,158543,158544,158547,158550],{},[32,158545,158546],{},"输入成绩。",[32,158548,158549],{},"判断成绩是否合法。",[32,158551,158552],{},"输出等级。",[21,158554,10002],{},[66,158556,158558],{"className":30347,"code":158557,"language":30349,"meta":71,"style":71},"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",[73,158559,158560,158578,158582,158600,158611,158623,158634,158646,158657,158670,158681,158693,158704,158710],{"__ignoreMap":71},[76,158561,158562,158564,158566,158568,158570,158572,158574,158576],{"class":78,"line":79},[76,158563,155327],{"class":86},[76,158565,133],{"class":82},[76,158567,109766],{"class":136},[76,158569,87],{"class":86},[76,158571,53790],{"class":136},[76,158573,87],{"class":86},[76,158575,152378],{"class":192},[76,158577,30466],{"class":86},[76,158579,158580],{"class":78,"line":96},[76,158581,2365],{"emptyLinePlaceholder":2364},[76,158583,158584,158586,158588,158590,158592,158594,158596,158598],{"class":78,"line":1143},[76,158585,1495],{"class":82},[76,158587,38899],{"class":82},[76,158589,4058],{"class":136},[76,158591,158221],{"class":82},[76,158593,157752],{"class":86},[76,158595,1552],{"class":82},[76,158597,5721],{"class":136},[76,158599,3704],{"class":86},[76,158601,158602,158604,158606,158609],{"class":78,"line":1158},[76,158603,31268],{"class":136},[76,158605,87],{"class":86},[76,158607,158608],{"class":192},"\"成绩不合法\"",[76,158610,93],{"class":86},[76,158612,158613,158615,158617,158619,158621],{"class":78,"line":1164},[76,158614,157775],{"class":82},[76,158616,157752],{"class":86},[76,158618,1674],{"class":82},[76,158620,157757],{"class":136},[76,158622,3704],{"class":86},[76,158624,158625,158627,158629,158632],{"class":78,"line":1178},[76,158626,31268],{"class":136},[76,158628,87],{"class":86},[76,158630,158631],{"class":192},"\"等级:A\"",[76,158633,93],{"class":86},[76,158635,158636,158638,158640,158642,158644],{"class":78,"line":1184},[76,158637,157775],{"class":82},[76,158639,157752],{"class":86},[76,158641,1674],{"class":82},[76,158643,157782],{"class":136},[76,158645,3704],{"class":86},[76,158647,158648,158650,158652,158655],{"class":78,"line":1275},[76,158649,31268],{"class":136},[76,158651,87],{"class":86},[76,158653,158654],{"class":192},"\"等级:B\"",[76,158656,93],{"class":86},[76,158658,158659,158661,158663,158665,158668],{"class":78,"line":1281},[76,158660,157775],{"class":82},[76,158662,157752],{"class":86},[76,158664,1674],{"class":82},[76,158666,158667],{"class":136}," 70",[76,158669,3704],{"class":86},[76,158671,158672,158674,158676,158679],{"class":78,"line":1293},[76,158673,31268],{"class":136},[76,158675,87],{"class":86},[76,158677,158678],{"class":192},"\"等级:C\"",[76,158680,93],{"class":86},[76,158682,158683,158685,158687,158689,158691],{"class":78,"line":1576},[76,158684,157775],{"class":82},[76,158686,157752],{"class":86},[76,158688,1674],{"class":82},[76,158690,157806],{"class":136},[76,158692,3704],{"class":86},[76,158694,158695,158697,158699,158702],{"class":78,"line":1581},[76,158696,31268],{"class":136},[76,158698,87],{"class":86},[76,158700,158701],{"class":192},"\"等级:D\"",[76,158703,93],{"class":86},[76,158705,158706,158708],{"class":78,"line":1587},[76,158707,1665],{"class":82},[76,158709,3704],{"class":86},[76,158711,158712,158714,158716,158719],{"class":78,"line":1592},[76,158713,31268],{"class":136},[76,158715,87],{"class":86},[76,158717,158718],{"class":192},"\"等级:E\"",[76,158720,93],{"class":86},[16,158722,158724],{"id":158723},"_311-小案例会员折扣","3.11 小案例：会员折扣",[21,158726,123261],{},[29,158728,158729,158732,158735,158738],{},[32,158730,158731],{},"输入消费金额。",[32,158733,158734],{},"输入会员等级，普通、银卡、金卡。",[32,158736,158737],{},"普通不打折，银卡 9 折，金卡 8 折。",[32,158739,158740],{},"满 500 再减 50。",[21,158742,10002],{},[66,158744,158746],{"className":30347,"code":158745,"language":30349,"meta":71,"style":71},"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",[73,158747,158748,158768,158784,158788,158796,158800,158814,158824,158837,158846,158859,158867,158873,158884,158888,158902,158906,158920,158930,158934],{"__ignoreMap":71},[76,158749,158750,158753,158755,158757,158759,158761,158763,158766],{"class":78,"line":79},[76,158751,158752],{"class":86},"amount ",[76,158754,133],{"class":82},[76,158756,109766],{"class":136},[76,158758,87],{"class":86},[76,158760,53790],{"class":136},[76,158762,87],{"class":86},[76,158764,158765],{"class":192},"\"请输入消费金额:\"",[76,158767,30466],{"class":86},[76,158769,158770,158773,158775,158777,158779,158782],{"class":78,"line":96},[76,158771,158772],{"class":86},"level ",[76,158774,133],{"class":82},[76,158776,60574],{"class":136},[76,158778,87],{"class":86},[76,158780,158781],{"class":192},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[76,158783,93],{"class":86},[76,158785,158786],{"class":78,"line":1143},[76,158787,2365],{"emptyLinePlaceholder":2364},[76,158789,158790,158792,158794],{"class":78,"line":1158},[76,158791,157205],{"class":86},[76,158793,133],{"class":82},[76,158795,55668],{"class":136},[76,158797,158798],{"class":78,"line":1164},[76,158799,2365],{"emptyLinePlaceholder":2364},[76,158801,158802,158804,158807,158809,158812],{"class":78,"line":1178},[76,158803,1495],{"class":82},[76,158805,158806],{"class":86}," level ",[76,158808,2914],{"class":82},[76,158810,158811],{"class":192}," \"银卡\"",[76,158813,3704],{"class":86},[76,158815,158816,158819,158821],{"class":78,"line":1184},[76,158817,158818],{"class":86},"    discount ",[76,158820,133],{"class":82},[76,158822,158823],{"class":136}," 0.9\n",[76,158825,158826,158828,158830,158832,158835],{"class":78,"line":1275},[76,158827,157775],{"class":82},[76,158829,158806],{"class":86},[76,158831,2914],{"class":82},[76,158833,158834],{"class":192}," \"金卡\"",[76,158836,3704],{"class":86},[76,158838,158839,158841,158843],{"class":78,"line":1281},[76,158840,158818],{"class":86},[76,158842,133],{"class":82},[76,158844,158845],{"class":136}," 0.8\n",[76,158847,158848,158850,158852,158854,158857],{"class":78,"line":1293},[76,158849,157775],{"class":82},[76,158851,158806],{"class":86},[76,158853,2914],{"class":82},[76,158855,158856],{"class":192}," \"普通\"",[76,158858,3704],{"class":86},[76,158860,158861,158863,158865],{"class":78,"line":1576},[76,158862,158818],{"class":86},[76,158864,133],{"class":82},[76,158866,55668],{"class":136},[76,158868,158869,158871],{"class":78,"line":1581},[76,158870,1665],{"class":82},[76,158872,3704],{"class":86},[76,158874,158875,158877,158879,158882],{"class":78,"line":1587},[76,158876,31268],{"class":136},[76,158878,87],{"class":86},[76,158880,158881],{"class":192},"\"会员等级输入错误，按普通会员计算\"",[76,158883,93],{"class":86},[76,158885,158886],{"class":78,"line":1592},[76,158887,2365],{"emptyLinePlaceholder":2364},[76,158889,158890,158893,158895,158898,158900],{"class":78,"line":1606},[76,158891,158892],{"class":86},"pay ",[76,158894,133],{"class":82},[76,158896,158897],{"class":86}," amount ",[76,158899,543],{"class":82},[76,158901,157244],{"class":86},[76,158903,158904],{"class":78,"line":1611},[76,158905,2365],{"emptyLinePlaceholder":2364},[76,158907,158908,158910,158913,158915,158918],{"class":78,"line":1617},[76,158909,1495],{"class":82},[76,158911,158912],{"class":86}," pay ",[76,158914,1674],{"class":82},[76,158916,158917],{"class":136}," 500",[76,158919,3704],{"class":86},[76,158921,158922,158925,158927],{"class":78,"line":1638},[76,158923,158924],{"class":86},"    pay ",[76,158926,150221],{"class":82},[76,158928,158929],{"class":136}," 50\n",[76,158931,158932],{"class":78,"line":1643},[76,158933,2365],{"emptyLinePlaceholder":2364},[76,158935,158936,158938,158940,158942,158944,158946,158949,158951,158953,158955],{"class":78,"line":1657},[76,158937,30384],{"class":136},[76,158939,87],{"class":86},[76,158941,140],{"class":82},[76,158943,157325],{"class":192},[76,158945,984],{"class":136},[76,158947,158948],{"class":86},"pay",[76,158950,157128],{"class":82},[76,158952,1034],{"class":136},[76,158954,156981],{"class":192},[76,158956,93],{"class":86},[16,158958,158960],{"id":158959},"_312-易错点","3.12 易错点",[29,158962,158963,158966,158969,158972,158977],{},[32,158964,158965],{},"冒号不能漏。",[32,158967,158968],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[32,158970,158971],{},"多分支判断要注意顺序。",[32,158973,158974,158975,28354],{},"判断相等用 ",[73,158976,2914],{},[32,158978,158979],{},"字符串比较区分大小写：",[66,158981,158983],{"className":30347,"code":158982,"language":30349,"meta":71,"style":71},"\"Y\" == \"y\"  # False\n",[73,158984,158985],{"__ignoreMap":71},[76,158986,158987,158990,158992,158994],{"class":78,"line":79},[76,158988,158989],{"class":192},"\"Y\"",[76,158991,101528],{"class":82},[76,158993,157974],{"class":192},[76,158995,158996],{"class":146},"  # False\n",[21,158998,158999],{},"可转换后再判断：",[66,159001,159003],{"className":30347,"code":159002,"language":30349,"meta":71,"style":71},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[73,159004,159005,159022,159035],{"__ignoreMap":71},[76,159006,159007,159010,159012,159014,159016,159019],{"class":78,"line":79},[76,159008,159009],{"class":86},"answer ",[76,159011,133],{"class":82},[76,159013,60574],{"class":136},[76,159015,87],{"class":86},[76,159017,159018],{"class":192},"\"是否继续(y\u002Fn):\"",[76,159020,159021],{"class":86},").lower()\n",[76,159023,159024,159026,159029,159031,159033],{"class":78,"line":96},[76,159025,1495],{"class":82},[76,159027,159028],{"class":86}," answer ",[76,159030,2914],{"class":82},[76,159032,157974],{"class":192},[76,159034,3704],{"class":86},[76,159036,159037,159039,159041,159044],{"class":78,"line":1143},[76,159038,31268],{"class":136},[76,159040,87],{"class":86},[76,159042,159043],{"class":192},"\"继续\"",[76,159045,93],{"class":86},[16,159047,159049],{"id":159048},"_313-本章练习","3.13 本章练习",[29,159051,159052,159055,159058,159061,159071],{},[32,159053,159054],{},"输入年龄，判断是否成年。",[32,159056,159057],{},"输入年份，判断是否为闰年。",[32,159059,159060],{},"输入三个数字，输出最大值。",[32,159062,159063,159064,159067,159068,159070],{},"写登录判断：用户名是 ",[73,159065,159066],{},"admin"," 且密码是 ",[73,159069,15051],{}," 才登录成功。",[32,159072,159073],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5092,159075,159076],{},"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":71,"searchDepth":96,"depth":96,"links":159078},[159079,159080,159081,159082,159083,159084,159089,159090,159091,159092,159093,159094,159095],{"id":157467,"depth":96,"text":157468},{"id":157520,"depth":96,"text":157521},{"id":157624,"depth":96,"text":157625},{"id":157714,"depth":96,"text":157715},{"id":157904,"depth":96,"text":157905},{"id":158027,"depth":96,"text":158028,"children":159085},[159086,159087,159088],{"id":158031,"depth":1143,"text":158032},{"id":158088,"depth":1143,"text":158089},{"id":158145,"depth":1143,"text":158146},{"id":158190,"depth":96,"text":158191},{"id":158281,"depth":96,"text":158282},{"id":158408,"depth":96,"text":158409},{"id":158538,"depth":96,"text":158539},{"id":158723,"depth":96,"text":158724},{"id":158959,"depth":96,"text":158960},{"id":159048,"depth":96,"text":159049},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157459,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159102,"title":159103,"body":159104,"description":23344,"extension":5123,"meta":160873,"navigation":2364,"path":160874,"seo":160875,"stem":160876,"__hash__":160877},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":9,"value":159105,"toc":160853},[159106,159109,159113,159119,159122,159139,159143,159145,159162,159164,159209,159211,159228,159232,159235,159301,159304,159322,159326,159487,159496,159500,159504,159509,159556,159558,159564,159568,159573,159620,159622,159628,159632,159637,159673,159676,159723,159727,159733,159791,159796,159827,159832,159836,159891,159894,159966,159969,160028,160032,160035,160110,160113,160117,160223,160226,160252,160256,160268,160337,160340,160432,160436,160438,160449,160451,160581,160585,160787,160795,160799,160829,160833,160850],[12,159107,159103],{"id":159108},"_4-循环语句",[16,159110,159112],{"id":159111},"_41-为什么需要循环","4.1 为什么需要循环",[21,159114,159115,159116,159118],{},"如果要输出 1 到 100，不应该写 100 行 ",[73,159117,146441],{},"，而应该用循环。",[21,159120,159121],{},"循环适合处理重复任务：",[29,159123,159124,159127,159130,159133,159136],{},[32,159125,159126],{},"重复输出。",[32,159128,159129],{},"重复输入。",[32,159131,159132],{},"遍历数据。",[32,159134,159135],{},"持续执行菜单。",[32,159137,159138],{},"批量处理文件或数据。",[16,159140,159142],{"id":159141},"_42-while循环","4.2 while循环",[21,159144,5148],{},[66,159146,159148],{"className":30347,"code":159147,"language":30349,"meta":71,"style":71},"while 条件:\n    循环体\n",[73,159149,159150,159157],{"__ignoreMap":71},[76,159151,159152,159154],{"class":78,"line":79},[76,159153,108632],{"class":82},[76,159155,159156],{"class":86}," 条件:\n",[76,159158,159159],{"class":78,"line":96},[76,159160,159161],{"class":86},"    循环体\n",[21,159163,15102],{},[66,159165,159167],{"className":30347,"code":159166,"language":30349,"meta":71,"style":71},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[73,159168,159169,159177,159181,159193,159200],{"__ignoreMap":71},[76,159170,159171,159173,159175],{"class":78,"line":79},[76,159172,100117],{"class":86},[76,159174,133],{"class":82},[76,159176,55668],{"class":136},[76,159178,159179],{"class":78,"line":96},[76,159180,2365],{"emptyLinePlaceholder":2364},[76,159182,159183,159185,159187,159189,159191],{"class":78,"line":1143},[76,159184,108632],{"class":82},[76,159186,9405],{"class":86},[76,159188,1552],{"class":82},[76,159190,2112],{"class":136},[76,159192,3704],{"class":86},[76,159194,159195,159197],{"class":78,"line":1158},[76,159196,31268],{"class":136},[76,159198,159199],{"class":86},"(i)\n",[76,159201,159202,159205,159207],{"class":78,"line":1164},[76,159203,159204],{"class":86},"    i ",[76,159206,9444],{"class":82},[76,159208,55668],{"class":136},[21,159210,80898],{},[29,159212,159213,159219,159222,159225],{},[32,159214,159215,159216,28354],{},"判断条件 ",[73,159217,159218],{},"i \u003C= 5",[32,159220,159221],{},"条件成立，执行循环体。",[32,159223,159224],{},"执行完后回到条件判断。",[32,159226,159227],{},"条件不成立，退出循环。",[16,159229,159231],{"id":159230},"_43-while累加","4.3 while累加",[21,159233,159234],{},"计算 1 到 100 的和：",[66,159236,159238],{"className":30347,"code":159237,"language":30349,"meta":71,"style":71},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[73,159239,159240,159248,159256,159260,159272,159282,159290,159294],{"__ignoreMap":71},[76,159241,159242,159244,159246],{"class":78,"line":79},[76,159243,100117],{"class":86},[76,159245,133],{"class":82},[76,159247,55668],{"class":136},[76,159249,159250,159252,159254],{"class":78,"line":96},[76,159251,157229],{"class":86},[76,159253,133],{"class":82},[76,159255,47302],{"class":136},[76,159257,159258],{"class":78,"line":1143},[76,159259,2365],{"emptyLinePlaceholder":2364},[76,159261,159262,159264,159266,159268,159270],{"class":78,"line":1158},[76,159263,108632],{"class":82},[76,159265,9405],{"class":86},[76,159267,1552],{"class":82},[76,159269,5721],{"class":136},[76,159271,3704],{"class":86},[76,159273,159274,159277,159279],{"class":78,"line":1164},[76,159275,159276],{"class":86},"    total ",[76,159278,9444],{"class":82},[76,159280,159281],{"class":86}," i\n",[76,159283,159284,159286,159288],{"class":78,"line":1178},[76,159285,159204],{"class":86},[76,159287,9444],{"class":82},[76,159289,55668],{"class":136},[76,159291,159292],{"class":78,"line":1184},[76,159293,2365],{"emptyLinePlaceholder":2364},[76,159295,159296,159298],{"class":78,"line":1275},[76,159297,30384],{"class":136},[76,159299,159300],{"class":86},"(total)\n",[21,159302,159303],{},"核心思想：",[29,159305,159306,159311,159316],{},[32,159307,159308,159310],{},[73,159309,529],{}," 控制循环次数。",[32,159312,159313,159315],{},[73,159314,157330],{}," 保存累加结果。",[32,159317,159318,159319,159321],{},"每轮循环都要更新 ",[73,159320,529],{},"，否则可能死循环。",[16,159323,159325],{"id":159324},"_44-while猜数字","4.4 while猜数字",[66,159327,159329],{"className":30347,"code":159328,"language":30349,"meta":71,"style":71},"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",[73,159330,159331,159337,159341,159358,159366,159370,159378,159398,159407,159411,159423,159434,159444,159455,159461,159483],{"__ignoreMap":71},[76,159332,159333,159335],{"class":78,"line":79},[76,159334,30361],{"class":82},[76,159336,45297],{"class":86},[76,159338,159339],{"class":78,"line":96},[76,159340,2365],{"emptyLinePlaceholder":2364},[76,159342,159343,159345,159347,159350,159352,159354,159356],{"class":78,"line":1143},[76,159344,159009],{"class":86},[76,159346,133],{"class":82},[76,159348,159349],{"class":86}," random.randint(",[76,159351,305],{"class":136},[76,159353,12402],{"class":86},[76,159355,399],{"class":136},[76,159357,93],{"class":86},[76,159359,159360,159362,159364],{"class":78,"line":1158},[76,159361,146660],{"class":86},[76,159363,133],{"class":82},[76,159365,47302],{"class":136},[76,159367,159368],{"class":78,"line":1164},[76,159369,2365],{"emptyLinePlaceholder":2364},[76,159371,159372,159374,159376],{"class":78,"line":1178},[76,159373,108632],{"class":82},[76,159375,95261],{"class":136},[76,159377,3704],{"class":86},[76,159379,159380,159383,159385,159387,159389,159391,159393,159396],{"class":78,"line":1184},[76,159381,159382],{"class":86},"    guess ",[76,159384,133],{"class":82},[76,159386,2346],{"class":136},[76,159388,87],{"class":86},[76,159390,53790],{"class":136},[76,159392,87],{"class":86},[76,159394,159395],{"class":192},"\"请输入1到100之间的数字:\"",[76,159397,30466],{"class":86},[76,159399,159400,159403,159405],{"class":78,"line":1275},[76,159401,159402],{"class":86},"    count ",[76,159404,9444],{"class":82},[76,159406,55668],{"class":136},[76,159408,159409],{"class":78,"line":1281},[76,159410,2365],{"emptyLinePlaceholder":2364},[76,159412,159413,159415,159418,159420],{"class":78,"line":1293},[76,159414,3066],{"class":82},[76,159416,159417],{"class":86}," guess ",[76,159419,1048],{"class":82},[76,159421,159422],{"class":86}," answer:\n",[76,159424,159425,159427,159429,159432],{"class":78,"line":1576},[76,159426,32420],{"class":136},[76,159428,87],{"class":86},[76,159430,159431],{"class":192},"\"猜大了\"",[76,159433,93],{"class":86},[76,159435,159436,159438,159440,159442],{"class":78,"line":1581},[76,159437,39262],{"class":82},[76,159439,159417],{"class":86},[76,159441,998],{"class":82},[76,159443,159422],{"class":86},[76,159445,159446,159448,159450,159453],{"class":78,"line":1587},[76,159447,32420],{"class":136},[76,159449,87],{"class":86},[76,159451,159452],{"class":192},"\"猜小了\"",[76,159454,93],{"class":86},[76,159456,159457,159459],{"class":78,"line":1592},[76,159458,157991],{"class":82},[76,159460,3704],{"class":86},[76,159462,159463,159465,159467,159469,159472,159474,159476,159478,159481],{"class":78,"line":1606},[76,159464,32420],{"class":136},[76,159466,87],{"class":86},[76,159468,140],{"class":82},[76,159470,159471],{"class":192},"\"猜对了，一共猜了",[76,159473,984],{"class":136},[76,159475,84403],{"class":86},[76,159477,1034],{"class":136},[76,159479,159480],{"class":192},"次\"",[76,159482,93],{"class":86},[76,159484,159485],{"class":78,"line":1611},[76,159486,31596],{"class":82},[21,159488,159489,159492,159493,159495],{},[73,159490,159491],{},"while True"," 表示无限循环，通常配合 ",[73,159494,2017],{}," 使用。",[16,159497,159499],{"id":159498},"_45-break和continue","4.5 break和continue",[46,159501,159503],{"id":159502},"_451-break","4.5.1 break",[21,159505,159506,159508],{},[73,159507,2017],{}," 直接结束整个循环。",[66,159510,159512],{"className":30347,"code":159511,"language":30349,"meta":71,"style":71},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[73,159513,159514,159534,159546,159550],{"__ignoreMap":71},[76,159515,159516,159518,159520,159522,159524,159526,159528,159530,159532],{"class":78,"line":79},[76,159517,2990],{"class":82},[76,159519,9405],{"class":86},[76,159521,26012],{"class":82},[76,159523,32412],{"class":136},[76,159525,87],{"class":86},[76,159527,305],{"class":136},[76,159529,12402],{"class":86},[76,159531,432],{"class":136},[76,159533,30755],{"class":86},[76,159535,159536,159538,159540,159542,159544],{"class":78,"line":96},[76,159537,3066],{"class":82},[76,159539,9405],{"class":86},[76,159541,2914],{"class":82},[76,159543,78039],{"class":136},[76,159545,3704],{"class":86},[76,159547,159548],{"class":78,"line":1143},[76,159549,31596],{"class":82},[76,159551,159552,159554],{"class":78,"line":1158},[76,159553,31268],{"class":136},[76,159555,159199],{"class":86},[21,159557,146426],{},[66,159559,159562],{"className":159560,"code":159561,"language":5154,"meta":71},[5152],"1\n2\n",[73,159563,159561],{"__ignoreMap":71},[46,159565,159567],{"id":159566},"_452-continue","4.5.2 continue",[21,159569,159570,159572],{},[73,159571,154641],{}," 跳过本轮剩余代码，进入下一轮循环。",[66,159574,159576],{"className":30347,"code":159575,"language":30349,"meta":71,"style":71},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[73,159577,159578,159598,159610,159614],{"__ignoreMap":71},[76,159579,159580,159582,159584,159586,159588,159590,159592,159594,159596],{"class":78,"line":79},[76,159581,2990],{"class":82},[76,159583,9405],{"class":86},[76,159585,26012],{"class":82},[76,159587,32412],{"class":136},[76,159589,87],{"class":86},[76,159591,305],{"class":136},[76,159593,12402],{"class":86},[76,159595,432],{"class":136},[76,159597,30755],{"class":86},[76,159599,159600,159602,159604,159606,159608],{"class":78,"line":96},[76,159601,3066],{"class":82},[76,159603,9405],{"class":86},[76,159605,2914],{"class":82},[76,159607,78039],{"class":136},[76,159609,3704],{"class":86},[76,159611,159612],{"class":78,"line":1143},[76,159613,148481],{"class":82},[76,159615,159616,159618],{"class":78,"line":1158},[76,159617,31268],{"class":136},[76,159619,159199],{"class":86},[21,159621,146426],{},[66,159623,159626],{"className":159624,"code":159625,"language":5154,"meta":71},[5152],"1\n2\n4\n5\n",[73,159627,159625],{"__ignoreMap":71},[16,159629,159631],{"id":159630},"_46-for循环","4.6 for循环",[21,159633,159634,159636],{},[73,159635,2990],{}," 常用于遍历序列。",[66,159638,159640],{"className":30347,"code":159639,"language":30349,"meta":71,"style":71},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[73,159641,159642,159651,159655,159666],{"__ignoreMap":71},[76,159643,159644,159646,159648],{"class":78,"line":79},[76,159645,146505],{"class":86},[76,159647,133],{"class":82},[76,159649,159650],{"class":192}," \"python\"\n",[76,159652,159653],{"class":78,"line":96},[76,159654,2365],{"emptyLinePlaceholder":2364},[76,159656,159657,159659,159662,159664],{"class":78,"line":1143},[76,159658,2990],{"class":82},[76,159660,159661],{"class":86}," ch ",[76,159663,26012],{"class":82},[76,159665,158368],{"class":86},[76,159667,159668,159670],{"class":78,"line":1158},[76,159669,31268],{"class":136},[76,159671,159672],{"class":86},"(ch)\n",[21,159674,159675],{},"遍历列表：",[66,159677,159679],{"className":30347,"code":159678,"language":30349,"meta":71,"style":71},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[73,159680,159681,159703,159707,159717],{"__ignoreMap":71},[76,159682,159683,159686,159688,159690,159692,159694,159696,159698,159701],{"class":78,"line":79},[76,159684,159685],{"class":86},"students ",[76,159687,133],{"class":82},[76,159689,52195],{"class":86},[76,159691,149857],{"class":192},[76,159693,12402],{"class":86},[76,159695,150905],{"class":192},[76,159697,12402],{"class":86},[76,159699,159700],{"class":192},"\"小刚\"",[76,159702,33215],{"class":86},[76,159704,159705],{"class":78,"line":96},[76,159706,2365],{"emptyLinePlaceholder":2364},[76,159708,159709,159711,159713,159715],{"class":78,"line":1143},[76,159710,2990],{"class":82},[76,159712,152106],{"class":86},[76,159714,26012],{"class":82},[76,159716,152111],{"class":86},[76,159718,159719,159721],{"class":78,"line":1158},[76,159720,31268],{"class":136},[76,159722,150011],{"class":86},[16,159724,159726],{"id":159725},"_47-range函数","4.7 range函数",[21,159728,159729,159732],{},[73,159730,159731],{},"range()"," 用于生成整数序列。",[66,159734,159736],{"className":30347,"code":159735,"language":30349,"meta":71,"style":71},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[73,159737,159738,159752,159770],{"__ignoreMap":71},[76,159739,159740,159742,159744,159746,159749],{"class":78,"line":79},[76,159741,33385],{"class":136},[76,159743,87],{"class":86},[76,159745,407],{"class":136},[76,159747,159748],{"class":86},")          ",[76,159750,159751],{"class":146},"# 0,1,2,3,4\n",[76,159753,159754,159756,159758,159760,159762,159764,159767],{"class":78,"line":96},[76,159755,33385],{"class":136},[76,159757,87],{"class":86},[76,159759,305],{"class":136},[76,159761,12402],{"class":86},[76,159763,407],{"class":136},[76,159765,159766],{"class":86},")       ",[76,159768,159769],{"class":146},"# 1,2,3,4\n",[76,159771,159772,159774,159776,159778,159780,159782,159784,159786,159788],{"class":78,"line":1143},[76,159773,33385],{"class":136},[76,159775,87],{"class":86},[76,159777,305],{"class":136},[76,159779,12402],{"class":86},[76,159781,534],{"class":136},[76,159783,12402],{"class":86},[76,159785,165],{"class":136},[76,159787,155630],{"class":86},[76,159789,159790],{"class":146},"# 1,3,5,7,9\n",[21,159792,159793,159794,24587],{},"配合 ",[73,159795,2990],{},[66,159797,159799],{"className":30347,"code":159798,"language":30349,"meta":71,"style":71},"for i in range(1, 6):\n    print(i)\n",[73,159800,159801,159821],{"__ignoreMap":71},[76,159802,159803,159805,159807,159809,159811,159813,159815,159817,159819],{"class":78,"line":79},[76,159804,2990],{"class":82},[76,159806,9405],{"class":86},[76,159808,26012],{"class":82},[76,159810,32412],{"class":136},[76,159812,87],{"class":86},[76,159814,305],{"class":136},[76,159816,12402],{"class":86},[76,159818,432],{"class":136},[76,159820,30755],{"class":86},[76,159822,159823,159825],{"class":78,"line":96},[76,159824,31268],{"class":136},[76,159826,159199],{"class":86},[21,159828,8992,159829,159831],{},[73,159830,33385],{}," 的结束值不包含在内。",[16,159833,159835],{"id":159834},"_48-for循环求和","4.8 for循环求和",[66,159837,159839],{"className":30347,"code":159838,"language":30349,"meta":71,"style":71},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[73,159840,159841,159849,159853,159873,159881,159885],{"__ignoreMap":71},[76,159842,159843,159845,159847],{"class":78,"line":79},[76,159844,157229],{"class":86},[76,159846,133],{"class":82},[76,159848,47302],{"class":136},[76,159850,159851],{"class":78,"line":96},[76,159852,2365],{"emptyLinePlaceholder":2364},[76,159854,159855,159857,159859,159861,159863,159865,159867,159869,159871],{"class":78,"line":1143},[76,159856,2990],{"class":82},[76,159858,9405],{"class":86},[76,159860,26012],{"class":82},[76,159862,32412],{"class":136},[76,159864,87],{"class":86},[76,159866,305],{"class":136},[76,159868,12402],{"class":86},[76,159870,425],{"class":136},[76,159872,30755],{"class":86},[76,159874,159875,159877,159879],{"class":78,"line":1158},[76,159876,159276],{"class":86},[76,159878,9444],{"class":82},[76,159880,159281],{"class":86},[76,159882,159883],{"class":78,"line":1164},[76,159884,2365],{"emptyLinePlaceholder":2364},[76,159886,159887,159889],{"class":78,"line":1178},[76,159888,30384],{"class":136},[76,159890,159300],{"class":86},[21,159892,159893],{},"求偶数和：",[66,159895,159897],{"className":30347,"code":159896,"language":30349,"meta":71,"style":71},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[73,159898,159899,159907,159911,159931,159947,159956,159960],{"__ignoreMap":71},[76,159900,159901,159903,159905],{"class":78,"line":79},[76,159902,157229],{"class":86},[76,159904,133],{"class":82},[76,159906,47302],{"class":136},[76,159908,159909],{"class":78,"line":96},[76,159910,2365],{"emptyLinePlaceholder":2364},[76,159912,159913,159915,159917,159919,159921,159923,159925,159927,159929],{"class":78,"line":1143},[76,159914,2990],{"class":82},[76,159916,9405],{"class":86},[76,159918,26012],{"class":82},[76,159920,32412],{"class":136},[76,159922,87],{"class":86},[76,159924,305],{"class":136},[76,159926,12402],{"class":86},[76,159928,425],{"class":136},[76,159930,30755],{"class":86},[76,159932,159933,159935,159937,159939,159941,159943,159945],{"class":78,"line":1158},[76,159934,3066],{"class":82},[76,159936,9405],{"class":86},[76,159938,416],{"class":82},[76,159940,14722],{"class":136},[76,159942,101528],{"class":82},[76,159944,4058],{"class":136},[76,159946,3704],{"class":86},[76,159948,159949,159952,159954],{"class":78,"line":1164},[76,159950,159951],{"class":86},"        total ",[76,159953,9444],{"class":82},[76,159955,159281],{"class":86},[76,159957,159958],{"class":78,"line":1178},[76,159959,2365],{"emptyLinePlaceholder":2364},[76,159961,159962,159964],{"class":78,"line":1184},[76,159963,30384],{"class":136},[76,159965,159300],{"class":86},[21,159967,159968],{},"也可以：",[66,159970,159972],{"className":30347,"code":159971,"language":30349,"meta":71,"style":71},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[73,159973,159974,159982,159986,160010,160018,160022],{"__ignoreMap":71},[76,159975,159976,159978,159980],{"class":78,"line":79},[76,159977,157229],{"class":86},[76,159979,133],{"class":82},[76,159981,47302],{"class":136},[76,159983,159984],{"class":78,"line":96},[76,159985,2365],{"emptyLinePlaceholder":2364},[76,159987,159988,159990,159992,159994,159996,159998,160000,160002,160004,160006,160008],{"class":78,"line":1143},[76,159989,2990],{"class":82},[76,159991,9405],{"class":86},[76,159993,26012],{"class":82},[76,159995,32412],{"class":136},[76,159997,87],{"class":86},[76,159999,165],{"class":136},[76,160001,12402],{"class":86},[76,160003,425],{"class":136},[76,160005,12402],{"class":86},[76,160007,165],{"class":136},[76,160009,30755],{"class":86},[76,160011,160012,160014,160016],{"class":78,"line":1158},[76,160013,159276],{"class":86},[76,160015,9444],{"class":82},[76,160017,159281],{"class":86},[76,160019,160020],{"class":78,"line":1164},[76,160021,2365],{"emptyLinePlaceholder":2364},[76,160023,160024,160026],{"class":78,"line":1178},[76,160025,30384],{"class":136},[76,160027,159300],{"class":86},[16,160029,160031],{"id":160030},"_49-循环嵌套","4.9 循环嵌套",[21,160033,160034],{},"嵌套循环就是循环里面再写循环。",[66,160036,160038],{"className":30347,"code":160037,"language":30349,"meta":71,"style":71},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[73,160039,160040,160060,160080],{"__ignoreMap":71},[76,160041,160042,160044,160046,160048,160050,160052,160054,160056,160058],{"class":78,"line":79},[76,160043,2990],{"class":82},[76,160045,9405],{"class":86},[76,160047,26012],{"class":82},[76,160049,32412],{"class":136},[76,160051,87],{"class":86},[76,160053,305],{"class":136},[76,160055,12402],{"class":86},[76,160057,381],{"class":136},[76,160059,30755],{"class":86},[76,160061,160062,160064,160066,160068,160070,160072,160074,160076,160078],{"class":78,"line":96},[76,160063,3166],{"class":82},[76,160065,9467],{"class":86},[76,160067,26012],{"class":82},[76,160069,32412],{"class":136},[76,160071,87],{"class":86},[76,160073,305],{"class":136},[76,160075,12402],{"class":86},[76,160077,381],{"class":136},[76,160079,30755],{"class":86},[76,160081,160082,160084,160086,160088,160091,160093,160095,160097,160100,160102,160104,160106,160108],{"class":78,"line":1143},[76,160083,32420],{"class":136},[76,160085,87],{"class":86},[76,160087,140],{"class":82},[76,160089,160090],{"class":192},"\"i=",[76,160092,984],{"class":136},[76,160094,529],{"class":86},[76,160096,1034],{"class":136},[76,160098,160099],{"class":192},", j=",[76,160101,984],{"class":136},[76,160103,555],{"class":86},[76,160105,1034],{"class":136},[76,160107,339],{"class":192},[76,160109,93],{"class":86},[21,160111,160112],{},"外层循环执行一次，内层循环执行完整一轮。",[16,160114,160116],{"id":160115},"_410-九九乘法表","4.10 九九乘法表",[66,160118,160120],{"className":30347,"code":160119,"language":30349,"meta":71,"style":71},"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",[73,160121,160122,160142,160165,160217],{"__ignoreMap":71},[76,160123,160124,160126,160128,160130,160132,160134,160136,160138,160140],{"class":78,"line":79},[76,160125,2990],{"class":82},[76,160127,9405],{"class":86},[76,160129,26012],{"class":82},[76,160131,32412],{"class":136},[76,160133,87],{"class":86},[76,160135,305],{"class":136},[76,160137,12402],{"class":86},[76,160139,534],{"class":136},[76,160141,30755],{"class":86},[76,160143,160144,160146,160148,160150,160152,160154,160156,160159,160161,160163],{"class":78,"line":96},[76,160145,3166],{"class":82},[76,160147,9467],{"class":86},[76,160149,26012],{"class":82},[76,160151,32412],{"class":136},[76,160153,87],{"class":86},[76,160155,305],{"class":136},[76,160157,160158],{"class":86},", i ",[76,160160,569],{"class":82},[76,160162,25087],{"class":136},[76,160164,30755],{"class":86},[76,160166,160167,160169,160171,160173,160175,160177,160179,160181,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215],{"class":78,"line":1143},[76,160168,32420],{"class":136},[76,160170,87],{"class":86},[76,160172,140],{"class":82},[76,160174,339],{"class":192},[76,160176,984],{"class":136},[76,160178,555],{"class":86},[76,160180,1034],{"class":136},[76,160182,543],{"class":192},[76,160184,984],{"class":136},[76,160186,529],{"class":86},[76,160188,1034],{"class":136},[76,160190,133],{"class":192},[76,160192,984],{"class":136},[76,160194,100117],{"class":86},[76,160196,543],{"class":82},[76,160198,3375],{"class":86},[76,160200,1034],{"class":136},[76,160202,339],{"class":192},[76,160204,12402],{"class":86},[76,160206,45770],{"class":5183},[76,160208,133],{"class":82},[76,160210,339],{"class":192},[76,160212,1194],{"class":136},[76,160214,339],{"class":192},[76,160216,93],{"class":86},[76,160218,160219,160221],{"class":78,"line":1158},[76,160220,31268],{"class":136},[76,160222,1940],{"class":86},[21,160224,160225],{},"关键点：",[29,160227,160228,160234,160240,160246],{},[32,160229,160230,160231,160233],{},"外层 ",[73,160232,529],{}," 控制行。",[32,160235,160236,160237,160239],{},"内层 ",[73,160238,555],{}," 控制列。",[32,160241,160242,160243,160245],{},"每行结束后用 ",[73,160244,146441],{}," 换行。",[32,160247,160248,160251],{},[73,160249,160250],{},"end=\"\\t\""," 让同一行的内容横向排列。",[16,160253,160255],{"id":160254},"_411-循环else","4.11 循环else",[21,160257,160258,160259,160261,160262,160264,160265,160267],{},"Python 的循环可以带 ",[73,160260,1665],{},"。当循环正常结束时执行 ",[73,160263,1665],{},"，如果被 ",[73,160266,2017],{}," 打断，则不执行。",[66,160269,160271],{"className":30347,"code":160270,"language":30349,"meta":71,"style":71},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[73,160272,160273,160293,160305,160316,160320,160326],{"__ignoreMap":71},[76,160274,160275,160277,160279,160281,160283,160285,160287,160289,160291],{"class":78,"line":79},[76,160276,2990],{"class":82},[76,160278,9405],{"class":86},[76,160280,26012],{"class":82},[76,160282,32412],{"class":136},[76,160284,87],{"class":86},[76,160286,305],{"class":136},[76,160288,12402],{"class":86},[76,160290,432],{"class":136},[76,160292,30755],{"class":86},[76,160294,160295,160297,160299,160301,160303],{"class":78,"line":96},[76,160296,3066],{"class":82},[76,160298,9405],{"class":86},[76,160300,2914],{"class":82},[76,160302,2002],{"class":136},[76,160304,3704],{"class":86},[76,160306,160307,160309,160311,160314],{"class":78,"line":1143},[76,160308,32420],{"class":136},[76,160310,87],{"class":86},[76,160312,160313],{"class":192},"\"找到了\"",[76,160315,93],{"class":86},[76,160317,160318],{"class":78,"line":1158},[76,160319,31596],{"class":82},[76,160321,160322,160324],{"class":78,"line":1164},[76,160323,1665],{"class":82},[76,160325,3704],{"class":86},[76,160327,160328,160330,160332,160335],{"class":78,"line":1178},[76,160329,31268],{"class":136},[76,160331,87],{"class":86},[76,160333,160334],{"class":192},"\"没找到\"",[76,160336,93],{"class":86},[21,160338,160339],{},"常用于搜索。",[66,160341,160343],{"className":30347,"code":160342,"language":30349,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[73,160344,160345,160366,160375,160379,160391,160402,160412,160416,160422],{"__ignoreMap":71},[76,160346,160347,160350,160352,160354,160356,160358,160360,160362,160364],{"class":78,"line":79},[76,160348,160349],{"class":86},"names ",[76,160351,133],{"class":82},[76,160353,52195],{"class":86},[76,160355,149857],{"class":192},[76,160357,12402],{"class":86},[76,160359,150905],{"class":192},[76,160361,12402],{"class":86},[76,160363,159700],{"class":192},[76,160365,33215],{"class":86},[76,160367,160368,160370,160372],{"class":78,"line":96},[76,160369,111547],{"class":86},[76,160371,133],{"class":82},[76,160373,160374],{"class":192}," \"小李\"\n",[76,160376,160377],{"class":78,"line":1143},[76,160378,2365],{"emptyLinePlaceholder":2364},[76,160380,160381,160383,160386,160388],{"class":78,"line":1158},[76,160382,2990],{"class":82},[76,160384,160385],{"class":86}," name ",[76,160387,26012],{"class":82},[76,160389,160390],{"class":86}," names:\n",[76,160392,160393,160395,160397,160399],{"class":78,"line":1164},[76,160394,3066],{"class":82},[76,160396,160385],{"class":86},[76,160398,2914],{"class":82},[76,160400,160401],{"class":86}," target:\n",[76,160403,160404,160406,160408,160410],{"class":78,"line":1178},[76,160405,32420],{"class":136},[76,160407,87],{"class":86},[76,160409,160313],{"class":192},[76,160411,93],{"class":86},[76,160413,160414],{"class":78,"line":1184},[76,160415,31596],{"class":82},[76,160417,160418,160420],{"class":78,"line":1275},[76,160419,1665],{"class":82},[76,160421,3704],{"class":86},[76,160423,160424,160426,160428,160430],{"class":78,"line":1281},[76,160425,31268],{"class":136},[76,160427,87],{"class":86},[76,160429,160334],{"class":192},[76,160431,93],{"class":86},[16,160433,160435],{"id":160434},"_412-小案例登录重试","4.12 小案例：登录重试",[21,160437,123261],{},[29,160439,160440,160443,160446],{},[32,160441,160442],{},"用户最多输入 3 次密码。",[32,160444,160445],{},"密码正确则登录成功。",[32,160447,160448],{},"3 次都错误则锁定账号。",[21,160450,10002],{},[66,160452,160454],{"className":30347,"code":160453,"language":30349,"meta":71,"style":71},"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",[73,160455,160456,160466,160470,160486,160502,160506,160518,160529,160533,160539,160564,160570],{"__ignoreMap":71},[76,160457,160458,160461,160463],{"class":78,"line":79},[76,160459,160460],{"class":86},"password ",[76,160462,133],{"class":82},[76,160464,160465],{"class":192}," \"123456\"\n",[76,160467,160468],{"class":78,"line":96},[76,160469,2365],{"emptyLinePlaceholder":2364},[76,160471,160472,160474,160476,160478,160480,160482,160484],{"class":78,"line":1143},[76,160473,2990],{"class":82},[76,160475,9405],{"class":86},[76,160477,26012],{"class":82},[76,160479,32412],{"class":136},[76,160481,87],{"class":86},[76,160483,159],{"class":136},[76,160485,30755],{"class":86},[76,160487,160488,160491,160493,160495,160497,160500],{"class":78,"line":1158},[76,160489,160490],{"class":86},"    user_password ",[76,160492,133],{"class":82},[76,160494,60574],{"class":136},[76,160496,87],{"class":86},[76,160498,160499],{"class":192},"\"请输入密码:\"",[76,160501,93],{"class":86},[76,160503,160504],{"class":78,"line":1164},[76,160505,2365],{"emptyLinePlaceholder":2364},[76,160507,160508,160510,160513,160515],{"class":78,"line":1178},[76,160509,3066],{"class":82},[76,160511,160512],{"class":86}," user_password ",[76,160514,2914],{"class":82},[76,160516,160517],{"class":86}," password:\n",[76,160519,160520,160522,160524,160527],{"class":78,"line":1184},[76,160521,32420],{"class":136},[76,160523,87],{"class":86},[76,160525,160526],{"class":192},"\"登录成功\"",[76,160528,93],{"class":86},[76,160530,160531],{"class":78,"line":1275},[76,160532,31596],{"class":82},[76,160534,160535,160537],{"class":78,"line":1281},[76,160536,157991],{"class":82},[76,160538,3704],{"class":86},[76,160540,160541,160543,160545,160547,160550,160553,160555,160557,160559,160562],{"class":78,"line":1293},[76,160542,32420],{"class":136},[76,160544,87],{"class":86},[76,160546,140],{"class":82},[76,160548,160549],{"class":192},"\"密码错误，还剩",[76,160551,160552],{"class":136},"{2",[76,160554,52240],{"class":82},[76,160556,2997],{"class":86},[76,160558,1034],{"class":136},[76,160560,160561],{"class":192},"次机会\"",[76,160563,93],{"class":86},[76,160565,160566,160568],{"class":78,"line":1576},[76,160567,1665],{"class":82},[76,160569,3704],{"class":86},[76,160571,160572,160574,160576,160579],{"class":78,"line":1581},[76,160573,31268],{"class":136},[76,160575,87],{"class":86},[76,160577,160578],{"class":192},"\"账号已锁定\"",[76,160580,93],{"class":86},[16,160582,160584],{"id":160583},"_413-小案例菜单程序","4.13 小案例：菜单程序",[66,160586,160588],{"className":30347,"code":160587,"language":30349,"meta":71,"style":71},"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",[73,160589,160590,160598,160609,160620,160631,160642,160653,160657,160672,160676,160688,160699,160711,160722,160734,160745,160757,160767,160771,160777],{"__ignoreMap":71},[76,160591,160592,160594,160596],{"class":78,"line":79},[76,160593,108632],{"class":82},[76,160595,95261],{"class":136},[76,160597,3704],{"class":86},[76,160599,160600,160602,160604,160607],{"class":78,"line":96},[76,160601,31268],{"class":136},[76,160603,87],{"class":86},[76,160605,160606],{"class":192},"\"====== 菜单 ======\"",[76,160608,93],{"class":86},[76,160610,160611,160613,160615,160618],{"class":78,"line":1143},[76,160612,31268],{"class":136},[76,160614,87],{"class":86},[76,160616,160617],{"class":192},"\"1. 查询余额\"",[76,160619,93],{"class":86},[76,160621,160622,160624,160626,160629],{"class":78,"line":1158},[76,160623,31268],{"class":136},[76,160625,87],{"class":86},[76,160627,160628],{"class":192},"\"2. 存款\"",[76,160630,93],{"class":86},[76,160632,160633,160635,160637,160640],{"class":78,"line":1164},[76,160634,31268],{"class":136},[76,160636,87],{"class":86},[76,160638,160639],{"class":192},"\"3. 取款\"",[76,160641,93],{"class":86},[76,160643,160644,160646,160648,160651],{"class":78,"line":1178},[76,160645,31268],{"class":136},[76,160647,87],{"class":86},[76,160649,160650],{"class":192},"\"0. 退出\"",[76,160652,93],{"class":86},[76,160654,160655],{"class":78,"line":1184},[76,160656,2365],{"emptyLinePlaceholder":2364},[76,160658,160659,160662,160664,160666,160668,160670],{"class":78,"line":1275},[76,160660,160661],{"class":86},"    choice ",[76,160663,133],{"class":82},[76,160665,60574],{"class":136},[76,160667,87],{"class":86},[76,160669,153042],{"class":192},[76,160671,93],{"class":86},[76,160673,160674],{"class":78,"line":1281},[76,160675,2365],{"emptyLinePlaceholder":2364},[76,160677,160678,160680,160682,160684,160686],{"class":78,"line":1293},[76,160679,3066],{"class":82},[76,160681,153055],{"class":86},[76,160683,2914],{"class":82},[76,160685,153060],{"class":192},[76,160687,3704],{"class":86},[76,160689,160690,160692,160694,160697],{"class":78,"line":1576},[76,160691,32420],{"class":136},[76,160693,87],{"class":86},[76,160695,160696],{"class":192},"\"余额为1000元\"",[76,160698,93],{"class":86},[76,160700,160701,160703,160705,160707,160709],{"class":78,"line":1581},[76,160702,39262],{"class":82},[76,160704,153055],{"class":86},[76,160706,2914],{"class":82},[76,160708,153079],{"class":192},[76,160710,3704],{"class":86},[76,160712,160713,160715,160717,160720],{"class":78,"line":1587},[76,160714,32420],{"class":136},[76,160716,87],{"class":86},[76,160718,160719],{"class":192},"\"存款功能\"",[76,160721,93],{"class":86},[76,160723,160724,160726,160728,160730,160732],{"class":78,"line":1592},[76,160725,39262],{"class":82},[76,160727,153055],{"class":86},[76,160729,2914],{"class":82},[76,160731,153097],{"class":192},[76,160733,3704],{"class":86},[76,160735,160736,160738,160740,160743],{"class":78,"line":1606},[76,160737,32420],{"class":136},[76,160739,87],{"class":86},[76,160741,160742],{"class":192},"\"取款功能\"",[76,160744,93],{"class":86},[76,160746,160747,160749,160751,160753,160755],{"class":78,"line":1611},[76,160748,39262],{"class":82},[76,160750,153055],{"class":86},[76,160752,2914],{"class":82},[76,160754,153151],{"class":192},[76,160756,3704],{"class":86},[76,160758,160759,160761,160763,160765],{"class":78,"line":1617},[76,160760,32420],{"class":136},[76,160762,87],{"class":86},[76,160764,153162],{"class":192},[76,160766,93],{"class":86},[76,160768,160769],{"class":78,"line":1638},[76,160770,31596],{"class":82},[76,160772,160773,160775],{"class":78,"line":1643},[76,160774,157991],{"class":82},[76,160776,3704],{"class":86},[76,160778,160779,160781,160783,160785],{"class":78,"line":1657},[76,160780,32420],{"class":136},[76,160782,87],{"class":86},[76,160784,153183],{"class":192},[76,160786,93],{"class":86},[21,160788,160789,160790,160792,160793,28354],{},"菜单类程序通常使用 ",[73,160791,159491],{},"，用户选择退出时 ",[73,160794,2017],{},[16,160796,160798],{"id":160797},"_414-易错点","4.14 易错点",[29,160800,160801,160806,160812,160820,160826],{},[32,160802,160803,160805],{},[73,160804,108632],{}," 循环必须更新控制变量。",[32,160807,160808,160811],{},[73,160809,160810],{},"range(1, 10)"," 不包含 10。",[32,160813,160814,160816,160817,160819],{},[73,160815,2017],{}," 结束整个循环，",[73,160818,154641],{}," 只跳过本轮。",[32,160821,160822,160823,160825],{},"嵌套循环中，",[73,160824,2017],{}," 只跳出当前所在的一层循环。",[32,160827,160828],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[16,160830,160832],{"id":160831},"_415-本章练习","4.15 本章练习",[29,160834,160835,160838,160841,160844,160847],{},[32,160836,160837],{},"输出 1 到 100。",[32,160839,160840],{},"计算 1 到 100 的偶数和。",[32,160842,160843],{},"输出 100 以内能被 3 和 5 同时整除的数。",[32,160845,160846],{},"编写猜数字游戏，限制最多猜 7 次。",[32,160848,160849],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5092,160851,160852],{},"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":71,"searchDepth":96,"depth":96,"links":160854},[160855,160856,160857,160858,160859,160863,160864,160865,160866,160867,160868,160869,160870,160871,160872],{"id":159111,"depth":96,"text":159112},{"id":159141,"depth":96,"text":159142},{"id":159230,"depth":96,"text":159231},{"id":159324,"depth":96,"text":159325},{"id":159498,"depth":96,"text":159499,"children":160860},[160861,160862],{"id":159502,"depth":1143,"text":159503},{"id":159566,"depth":1143,"text":159567},{"id":159630,"depth":96,"text":159631},{"id":159725,"depth":96,"text":159726},{"id":159834,"depth":96,"text":159835},{"id":160030,"depth":96,"text":160031},{"id":160115,"depth":96,"text":160116},{"id":160254,"depth":96,"text":160255},{"id":160434,"depth":96,"text":160435},{"id":160583,"depth":96,"text":160584},{"id":160797,"depth":96,"text":160798},{"id":160831,"depth":96,"text":160832},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159103,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160879,"title":160880,"body":160881,"description":23344,"extension":5123,"meta":162886,"navigation":2364,"path":162887,"seo":162888,"stem":162889,"__hash__":162890},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":9,"value":160882,"toc":162866},[160883,160886,160890,160893,160896,160910,160913,160927,160931,160933,160952,160954,161001,161003,161017,161021,161095,161098,161102,161105,161164,161172,161175,161228,161231,161235,161240,161295,161303,161353,161357,161362,161370,161469,161475,161479,161484,161487,161498,161539,161552,161556,161559,161595,161598,161611,161614,161674,161678,161682,161685,161736,161740,161743,161790,161796,161862,161865,161869,161872,161988,161991,161995,161998,162104,162108,162111,162149,162152,162194,162197,162257,162260,162264,162728,162731,162735,162762,162768,162829,162833,162863],[12,160884,160880],{"id":160885},"_5-函数基础",[16,160887,160889],{"id":160888},"_51-为什么需要函数","5.1 为什么需要函数",[21,160891,160892],{},"函数用于封装一段可以重复使用的代码。",[21,160894,160895],{},"不使用函数的问题：",[29,160897,160898,160901,160904,160907],{},[32,160899,160900],{},"重复代码多。",[32,160902,160903],{},"修改逻辑时容易漏改。",[32,160905,160906],{},"主流程不清晰。",[32,160908,160909],{},"程序越写越长，难以维护。",[21,160911,160912],{},"使用函数后的好处：",[29,160914,160915,160918,160921,160924],{},[32,160916,160917],{},"提高复用性。",[32,160919,160920],{},"提高可读性。",[32,160922,160923],{},"便于调试。",[32,160925,160926],{},"便于分工。",[16,160928,160930],{"id":160929},"_52-函数定义","5.2 函数定义",[21,160932,5148],{},[66,160934,160936],{"className":30347,"code":160935,"language":30349,"meta":71,"style":71},"def 函数名():\n    函数体\n",[73,160937,160938,160947],{"__ignoreMap":71},[76,160939,160940,160942,160945],{"class":78,"line":79},[76,160941,31916],{"class":82},[76,160943,160944],{"class":1927}," 函数名",[76,160946,31922],{"class":86},[76,160948,160949],{"class":78,"line":96},[76,160950,160951],{"class":86},"    函数体\n",[21,160953,15102],{},[66,160955,160957],{"className":30347,"code":160956,"language":30349,"meta":71,"style":71},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[73,160958,160959,160968,160978,160988,160992,160996],{"__ignoreMap":71},[76,160960,160961,160963,160966],{"class":78,"line":79},[76,160962,31916],{"class":82},[76,160964,160965],{"class":1927}," say_hello",[76,160967,31922],{"class":86},[76,160969,160970,160972,160974,160976],{"class":78,"line":96},[76,160971,31268],{"class":136},[76,160973,87],{"class":86},[76,160975,5811],{"class":192},[76,160977,93],{"class":86},[76,160979,160980,160982,160984,160986],{"class":78,"line":1143},[76,160981,31268],{"class":136},[76,160983,87],{"class":86},[76,160985,146608],{"class":192},[76,160987,93],{"class":86},[76,160989,160990],{"class":78,"line":1158},[76,160991,2365],{"emptyLinePlaceholder":2364},[76,160993,160994],{"class":78,"line":1164},[76,160995,2365],{"emptyLinePlaceholder":2364},[76,160997,160998],{"class":78,"line":1178},[76,160999,161000],{"class":86},"say_hello()\n",[21,161002,8992],{},[29,161004,161005,161008,161011,161014],{},[32,161006,161007],{},"函数必须先定义，再调用。",[32,161009,161010],{},"函数名遵循变量命名规则。",[32,161012,161013],{},"函数体需要缩进。",[32,161015,161016],{},"函数不调用就不会执行。",[16,161018,161020],{"id":161019},"_53-函数调用","5.3 函数调用",[66,161022,161024],{"className":30347,"code":161023,"language":30349,"meta":71,"style":71},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[73,161025,161026,161035,161046,161057,161068,161078,161082,161086,161091],{"__ignoreMap":71},[76,161027,161028,161030,161033],{"class":78,"line":79},[76,161029,31916],{"class":82},[76,161031,161032],{"class":1927}," print_menu",[76,161034,31922],{"class":86},[76,161036,161037,161039,161041,161044],{"class":78,"line":96},[76,161038,31268],{"class":136},[76,161040,87],{"class":86},[76,161042,161043],{"class":192},"\"1. 查询\"",[76,161045,93],{"class":86},[76,161047,161048,161050,161052,161055],{"class":78,"line":1143},[76,161049,31268],{"class":136},[76,161051,87],{"class":86},[76,161053,161054],{"class":192},"\"2. 添加\"",[76,161056,93],{"class":86},[76,161058,161059,161061,161063,161066],{"class":78,"line":1158},[76,161060,31268],{"class":136},[76,161062,87],{"class":86},[76,161064,161065],{"class":192},"\"3. 删除\"",[76,161067,93],{"class":86},[76,161069,161070,161072,161074,161076],{"class":78,"line":1164},[76,161071,31268],{"class":136},[76,161073,87],{"class":86},[76,161075,160650],{"class":192},[76,161077,93],{"class":86},[76,161079,161080],{"class":78,"line":1178},[76,161081,2365],{"emptyLinePlaceholder":2364},[76,161083,161084],{"class":78,"line":1184},[76,161085,2365],{"emptyLinePlaceholder":2364},[76,161087,161088],{"class":78,"line":1275},[76,161089,161090],{"class":86},"print_menu()\n",[76,161092,161093],{"class":78,"line":1281},[76,161094,161090],{"class":86},[21,161096,161097],{},"函数可以多次调用，每次调用都会执行函数体。",[16,161099,161101],{"id":161100},"_54-参数","5.4 参数",[21,161103,161104],{},"参数用于向函数传递数据。",[66,161106,161108],{"className":30347,"code":161107,"language":30349,"meta":71,"style":71},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[73,161109,161110,161119,161139,161143,161147,161156],{"__ignoreMap":71},[76,161111,161112,161114,161116],{"class":78,"line":79},[76,161113,31916],{"class":82},[76,161115,160965],{"class":1927},[76,161117,161118],{"class":86},"(name):\n",[76,161120,161121,161123,161125,161127,161129,161131,161133,161135,161137],{"class":78,"line":96},[76,161122,31268],{"class":136},[76,161124,87],{"class":86},[76,161126,140],{"class":82},[76,161128,157023],{"class":192},[76,161130,984],{"class":136},[76,161132,79779],{"class":86},[76,161134,1034],{"class":136},[76,161136,339],{"class":192},[76,161138,93],{"class":86},[76,161140,161141],{"class":78,"line":1143},[76,161142,2365],{"emptyLinePlaceholder":2364},[76,161144,161145],{"class":78,"line":1158},[76,161146,2365],{"emptyLinePlaceholder":2364},[76,161148,161149,161152,161154],{"class":78,"line":1164},[76,161150,161151],{"class":86},"say_hello(",[76,161153,149857],{"class":192},[76,161155,93],{"class":86},[76,161157,161158,161160,161162],{"class":78,"line":1178},[76,161159,161151],{"class":86},[76,161161,150905],{"class":192},[76,161163,93],{"class":86},[21,161165,161166,161168,161169,161171],{},[73,161167,79779],{}," 是形参，",[73,161170,149857],{}," 是实参。",[21,161173,161174],{},"多个参数：",[66,161176,161178],{"className":30347,"code":161177,"language":30349,"meta":71,"style":71},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[73,161179,161180,161188,161201,161207,161211,161215],{"__ignoreMap":71},[76,161181,161182,161184,161186],{"class":78,"line":79},[76,161183,31916],{"class":82},[76,161185,5176],{"class":1927},[76,161187,151062],{"class":86},[76,161189,161190,161193,161195,161197,161199],{"class":78,"line":96},[76,161191,161192],{"class":86},"    result ",[76,161194,133],{"class":82},[76,161196,10836],{"class":86},[76,161198,569],{"class":82},[76,161200,151073],{"class":86},[76,161202,161203,161205],{"class":78,"line":1143},[76,161204,31268],{"class":136},[76,161206,76554],{"class":86},[76,161208,161209],{"class":78,"line":1158},[76,161210,2365],{"emptyLinePlaceholder":2364},[76,161212,161213],{"class":78,"line":1164},[76,161214,2365],{"emptyLinePlaceholder":2364},[76,161216,161217,161220,161222,161224,161226],{"class":78,"line":1178},[76,161218,161219],{"class":86},"add(",[76,161221,534],{"class":136},[76,161223,12402],{"class":86},[76,161225,788],{"class":136},[76,161227,93],{"class":86},[21,161229,161230],{},"调用时参数数量必须匹配。",[16,161232,161234],{"id":161233},"_55-返回值","5.5 返回值",[21,161236,161237,161239],{},[73,161238,17013],{}," 用于把函数内部的结果返回给调用者。",[66,161241,161243],{"className":30347,"code":161242,"language":30349,"meta":71,"style":71},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[73,161244,161245,161253,161263,161267,161271,161289],{"__ignoreMap":71},[76,161246,161247,161249,161251],{"class":78,"line":79},[76,161248,31916],{"class":82},[76,161250,5176],{"class":1927},[76,161252,151062],{"class":86},[76,161254,161255,161257,161259,161261],{"class":78,"line":96},[76,161256,4055],{"class":82},[76,161258,10836],{"class":86},[76,161260,569],{"class":82},[76,161262,151073],{"class":86},[76,161264,161265],{"class":78,"line":1143},[76,161266,2365],{"emptyLinePlaceholder":2364},[76,161268,161269],{"class":78,"line":1158},[76,161270,2365],{"emptyLinePlaceholder":2364},[76,161272,161273,161276,161278,161281,161283,161285,161287],{"class":78,"line":1164},[76,161274,161275],{"class":86},"result ",[76,161277,133],{"class":82},[76,161279,161280],{"class":86}," add(",[76,161282,534],{"class":136},[76,161284,12402],{"class":86},[76,161286,788],{"class":136},[76,161288,93],{"class":86},[76,161290,161291,161293],{"class":78,"line":1178},[76,161292,30384],{"class":136},[76,161294,76554],{"class":86},[21,161296,161297,161298,161300,161301,28354],{},"如果函数没有写 ",[73,161299,17013],{},"，默认返回 ",[73,161302,95655],{},[66,161304,161306],{"className":30347,"code":161305,"language":30349,"meta":71,"style":71},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[73,161307,161308,161316,161326,161330,161334,161343],{"__ignoreMap":71},[76,161309,161310,161312,161314],{"class":78,"line":79},[76,161311,31916],{"class":82},[76,161313,160965],{"class":1927},[76,161315,31922],{"class":86},[76,161317,161318,161320,161322,161324],{"class":78,"line":96},[76,161319,31268],{"class":136},[76,161321,87],{"class":86},[76,161323,5811],{"class":192},[76,161325,93],{"class":86},[76,161327,161328],{"class":78,"line":1143},[76,161329,2365],{"emptyLinePlaceholder":2364},[76,161331,161332],{"class":78,"line":1158},[76,161333,2365],{"emptyLinePlaceholder":2364},[76,161335,161336,161338,161340],{"class":78,"line":1164},[76,161337,161275],{"class":86},[76,161339,133],{"class":82},[76,161341,161342],{"class":86}," say_hello()\n",[76,161344,161345,161347,161350],{"class":78,"line":1178},[76,161346,30384],{"class":136},[76,161348,161349],{"class":86},"(result)  ",[76,161351,161352],{"class":146},"# None\n",[16,161354,161356],{"id":161355},"_56-return的作用","5.6 return的作用",[21,161358,161359,161361],{},[73,161360,17013],{}," 有两个作用：",[29,161363,161364,161367],{},[32,161365,161366],{},"返回结果。",[32,161368,161369],{},"结束函数。",[66,161371,161373],{"className":30347,"code":161372,"language":30349,"meta":71,"style":71},"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",[73,161374,161375,161385,161397,161404,161408,161420,161427,161431,161438,161442,161446,161457],{"__ignoreMap":71},[76,161376,161377,161379,161382],{"class":78,"line":79},[76,161378,31916],{"class":82},[76,161380,161381],{"class":1927}," check_age",[76,161383,161384],{"class":86},"(age):\n",[76,161386,161387,161389,161391,161393,161395],{"class":78,"line":96},[76,161388,3066],{"class":82},[76,161390,15674],{"class":86},[76,161392,998],{"class":82},[76,161394,4058],{"class":136},[76,161396,3704],{"class":86},[76,161398,161399,161401],{"class":78,"line":1143},[76,161400,14719],{"class":82},[76,161402,161403],{"class":192}," \"年龄不合法\"\n",[76,161405,161406],{"class":78,"line":1158},[76,161407,2365],{"emptyLinePlaceholder":2364},[76,161409,161410,161412,161414,161416,161418],{"class":78,"line":1164},[76,161411,3066],{"class":82},[76,161413,15674],{"class":86},[76,161415,1674],{"class":82},[76,161417,156254],{"class":136},[76,161419,3704],{"class":86},[76,161421,161422,161424],{"class":78,"line":1178},[76,161423,14719],{"class":82},[76,161425,161426],{"class":192}," \"成年人\"\n",[76,161428,161429],{"class":78,"line":1184},[76,161430,2365],{"emptyLinePlaceholder":2364},[76,161432,161433,161435],{"class":78,"line":1275},[76,161434,4055],{"class":82},[76,161436,161437],{"class":192}," \"未成年人\"\n",[76,161439,161440],{"class":78,"line":1281},[76,161441,2365],{"emptyLinePlaceholder":2364},[76,161443,161444],{"class":78,"line":1293},[76,161445,2365],{"emptyLinePlaceholder":2364},[76,161447,161448,161450,161453,161455],{"class":78,"line":1576},[76,161449,30384],{"class":136},[76,161451,161452],{"class":86},"(check_age(",[76,161454,788],{"class":136},[76,161456,30466],{"class":86},[76,161458,161459,161461,161463,161465,161467],{"class":78,"line":1581},[76,161460,30384],{"class":136},[76,161462,161452],{"class":86},[76,161464,620],{"class":82},[76,161466,305],{"class":136},[76,161468,30466],{"class":86},[21,161470,161471,161472,161474],{},"函数执行到 ",[73,161473,17013],{}," 后，后面的代码不会继续执行。",[16,161476,161478],{"id":161477},"_57-none","5.7 None",[21,161480,161481,161483],{},[73,161482,95655],{}," 表示空值或没有结果。",[21,161485,161486],{},"常见使用场景：",[29,161488,161489,161492,161495],{},[32,161490,161491],{},"函数没有返回值。",[32,161493,161494],{},"变量暂时没有具体值。",[32,161496,161497],{},"表示查询不到结果。",[66,161499,161501],{"className":30347,"code":161500,"language":30349,"meta":71,"style":71},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[73,161502,161503,161511,161515,161528],{"__ignoreMap":71},[76,161504,161505,161507,161509],{"class":78,"line":79},[76,161506,161275],{"class":86},[76,161508,133],{"class":82},[76,161510,152141],{"class":136},[76,161512,161513],{"class":78,"line":96},[76,161514,2365],{"emptyLinePlaceholder":2364},[76,161516,161517,161519,161522,161524,161526],{"class":78,"line":1143},[76,161518,1495],{"class":82},[76,161520,161521],{"class":86}," result ",[76,161523,38896],{"class":82},[76,161525,38902],{"class":136},[76,161527,3704],{"class":86},[76,161529,161530,161532,161534,161537],{"class":78,"line":1158},[76,161531,31268],{"class":136},[76,161533,87],{"class":86},[76,161535,161536],{"class":192},"\"没有数据\"",[76,161538,93],{"class":86},[21,161540,161541,161542,161544,161545,161548,161549,28354],{},"判断 ",[73,161543,95655],{}," 推荐使用 ",[73,161546,161547],{},"is None","，不要写成 ",[73,161550,161551],{},"== None",[16,161553,161555],{"id":161554},"_58-函数文档字符串","5.8 函数文档字符串",[21,161557,161558],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[66,161560,161562],{"className":30347,"code":161561,"language":30349,"meta":71,"style":71},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[73,161563,161564,161574,161579],{"__ignoreMap":71},[76,161565,161566,161568,161571],{"class":78,"line":79},[76,161567,31916],{"class":82},[76,161569,161570],{"class":1927}," calculate_bmi",[76,161572,161573],{"class":86},"(weight, height):\n",[76,161575,161576],{"class":78,"line":96},[76,161577,161578],{"class":192},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[76,161580,161581,161583,161586,161588,161591,161593],{"class":78,"line":1143},[76,161582,4055],{"class":82},[76,161584,161585],{"class":86}," weight ",[76,161587,672],{"class":82},[76,161589,161590],{"class":86}," height ",[76,161592,10628],{"class":82},[76,161594,47692],{"class":136},[21,161596,161597],{},"查看说明：",[66,161599,161601],{"className":30347,"code":161600,"language":30349,"meta":71,"style":71},"help(calculate_bmi)\n",[73,161602,161603],{"__ignoreMap":71},[76,161604,161605,161608],{"class":78,"line":79},[76,161606,161607],{"class":136},"help",[76,161609,161610],{"class":86},"(calculate_bmi)\n",[21,161612,161613],{},"较完整的写法：",[66,161615,161617],{"className":30347,"code":161616,"language":30349,"meta":71,"style":71},"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",[73,161618,161619,161627,161632,161637,161641,161646,161651,161656,161660],{"__ignoreMap":71},[76,161620,161621,161623,161625],{"class":78,"line":79},[76,161622,31916],{"class":82},[76,161624,161570],{"class":1927},[76,161626,161573],{"class":86},[76,161628,161629],{"class":78,"line":96},[76,161630,161631],{"class":192},"    \"\"\"\n",[76,161633,161634],{"class":78,"line":1143},[76,161635,161636],{"class":192},"    计算BMI。\n",[76,161638,161639],{"class":78,"line":1158},[76,161640,2365],{"emptyLinePlaceholder":2364},[76,161642,161643],{"class":78,"line":1164},[76,161644,161645],{"class":192},"    :param weight: 体重，单位kg\n",[76,161647,161648],{"class":78,"line":1178},[76,161649,161650],{"class":192},"    :param height: 身高，单位m\n",[76,161652,161653],{"class":78,"line":1184},[76,161654,161655],{"class":192},"    :return: BMI数值\n",[76,161657,161658],{"class":78,"line":1275},[76,161659,161631],{"class":192},[76,161661,161662,161664,161666,161668,161670,161672],{"class":78,"line":1281},[76,161663,4055],{"class":82},[76,161665,161585],{"class":86},[76,161667,672],{"class":82},[76,161669,161590],{"class":86},[76,161671,10628],{"class":82},[76,161673,47692],{"class":136},[16,161675,161677],{"id":161676},"_59-变量作用域","5.9 变量作用域",[46,161679,161681],{"id":161680},"_591-局部变量","5.9.1 局部变量",[21,161683,161684],{},"在函数内部定义的变量，只能在函数内部使用。",[66,161686,161688],{"className":30347,"code":161687,"language":30349,"meta":71,"style":71},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[73,161689,161690,161699,161707,161713,161717,161721,161726],{"__ignoreMap":71},[76,161691,161692,161694,161697],{"class":78,"line":79},[76,161693,31916],{"class":82},[76,161695,161696],{"class":1927}," test",[76,161698,31922],{"class":86},[76,161700,161701,161703,161705],{"class":78,"line":96},[76,161702,45562],{"class":86},[76,161704,133],{"class":82},[76,161706,58397],{"class":136},[76,161708,161709,161711],{"class":78,"line":1143},[76,161710,31268],{"class":136},[76,161712,101],{"class":86},[76,161714,161715],{"class":78,"line":1158},[76,161716,2365],{"emptyLinePlaceholder":2364},[76,161718,161719],{"class":78,"line":1164},[76,161720,2365],{"emptyLinePlaceholder":2364},[76,161722,161723],{"class":78,"line":1178},[76,161724,161725],{"class":86},"test()\n",[76,161727,161728,161730,161733],{"class":78,"line":1184},[76,161729,30384],{"class":136},[76,161731,161732],{"class":86},"(num)  ",[76,161734,161735],{"class":146},"# 报错\n",[46,161737,161739],{"id":161738},"_592-全局变量","5.9.2 全局变量",[21,161741,161742],{},"在函数外部定义的变量，可以在函数内部读取。",[66,161744,161746],{"className":30347,"code":161745,"language":30349,"meta":71,"style":71},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[73,161747,161748,161756,161760,161764,161772,161778,161782,161786],{"__ignoreMap":71},[76,161749,161750,161752,161754],{"class":78,"line":79},[76,161751,146505],{"class":86},[76,161753,133],{"class":82},[76,161755,149322],{"class":192},[76,161757,161758],{"class":78,"line":96},[76,161759,2365],{"emptyLinePlaceholder":2364},[76,161761,161762],{"class":78,"line":1143},[76,161763,2365],{"emptyLinePlaceholder":2364},[76,161765,161766,161768,161770],{"class":78,"line":1158},[76,161767,31916],{"class":82},[76,161769,160965],{"class":1927},[76,161771,31922],{"class":86},[76,161773,161774,161776],{"class":78,"line":1164},[76,161775,31268],{"class":136},[76,161777,150629],{"class":86},[76,161779,161780],{"class":78,"line":1178},[76,161781,2365],{"emptyLinePlaceholder":2364},[76,161783,161784],{"class":78,"line":1184},[76,161785,2365],{"emptyLinePlaceholder":2364},[76,161787,161788],{"class":78,"line":1275},[76,161789,161000],{"class":86},[21,161791,161792,161793,28354],{},"如果要在函数内部修改全局变量，需要 ",[73,161794,161795],{},"global",[66,161797,161799],{"className":30347,"code":161798,"language":30349,"meta":71,"style":71},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[73,161800,161801,161809,161813,161817,161826,161834,161842,161846,161850,161855],{"__ignoreMap":71},[76,161802,161803,161805,161807],{"class":78,"line":79},[76,161804,146660],{"class":86},[76,161806,133],{"class":82},[76,161808,47302],{"class":136},[76,161810,161811],{"class":78,"line":96},[76,161812,2365],{"emptyLinePlaceholder":2364},[76,161814,161815],{"class":78,"line":1143},[76,161816,2365],{"emptyLinePlaceholder":2364},[76,161818,161819,161821,161824],{"class":78,"line":1158},[76,161820,31916],{"class":82},[76,161822,161823],{"class":1927}," add_count",[76,161825,31922],{"class":86},[76,161827,161828,161831],{"class":78,"line":1164},[76,161829,161830],{"class":82},"    global",[76,161832,161833],{"class":86}," count\n",[76,161835,161836,161838,161840],{"class":78,"line":1178},[76,161837,159402],{"class":86},[76,161839,9444],{"class":82},[76,161841,55668],{"class":136},[76,161843,161844],{"class":78,"line":1184},[76,161845,2365],{"emptyLinePlaceholder":2364},[76,161847,161848],{"class":78,"line":1275},[76,161849,2365],{"emptyLinePlaceholder":2364},[76,161851,161852],{"class":78,"line":1281},[76,161853,161854],{"class":86},"add_count()\n",[76,161856,161857,161859],{"class":78,"line":1293},[76,161858,30384],{"class":136},[76,161860,161861],{"class":86},"(count)\n",[21,161863,161864],{},"不建议大量使用全局变量，项目变大后很难维护。",[16,161866,161868],{"id":161867},"_510-函数嵌套调用","5.10 函数嵌套调用",[21,161870,161871],{},"一个函数中可以调用另一个函数。",[66,161873,161875],{"className":30347,"code":161874,"language":30349,"meta":71,"style":71},"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",[73,161876,161877,161886,161900,161904,161908,161917,161922,161942,161963,161967,161971,161975],{"__ignoreMap":71},[76,161878,161879,161881,161884],{"class":78,"line":79},[76,161880,31916],{"class":82},[76,161882,161883],{"class":1927}," print_line",[76,161885,31922],{"class":86},[76,161887,161888,161890,161892,161894,161896,161898],{"class":78,"line":96},[76,161889,31268],{"class":136},[76,161891,87],{"class":86},[76,161893,32452],{"class":192},[76,161895,6485],{"class":82},[76,161897,78634],{"class":136},[76,161899,93],{"class":86},[76,161901,161902],{"class":78,"line":1143},[76,161903,2365],{"emptyLinePlaceholder":2364},[76,161905,161906],{"class":78,"line":1158},[76,161907,2365],{"emptyLinePlaceholder":2364},[76,161909,161910,161912,161915],{"class":78,"line":1164},[76,161911,31916],{"class":82},[76,161913,161914],{"class":1927}," print_info",[76,161916,149344],{"class":86},[76,161918,161919],{"class":78,"line":1178},[76,161920,161921],{"class":86},"    print_line()\n",[76,161923,161924,161926,161928,161930,161932,161934,161936,161938,161940],{"class":78,"line":1184},[76,161925,31268],{"class":136},[76,161927,87],{"class":86},[76,161929,140],{"class":82},[76,161931,156651],{"class":192},[76,161933,984],{"class":136},[76,161935,79779],{"class":86},[76,161937,1034],{"class":136},[76,161939,339],{"class":192},[76,161941,93],{"class":86},[76,161943,161944,161946,161948,161950,161953,161955,161957,161959,161961],{"class":78,"line":1275},[76,161945,31268],{"class":136},[76,161947,87],{"class":86},[76,161949,140],{"class":82},[76,161951,161952],{"class":192},"\"年龄:",[76,161954,984],{"class":136},[76,161956,70190],{"class":86},[76,161958,1034],{"class":136},[76,161960,339],{"class":192},[76,161962,93],{"class":86},[76,161964,161965],{"class":78,"line":1281},[76,161966,161921],{"class":86},[76,161968,161969],{"class":78,"line":1293},[76,161970,2365],{"emptyLinePlaceholder":2364},[76,161972,161973],{"class":78,"line":1576},[76,161974,2365],{"emptyLinePlaceholder":2364},[76,161976,161977,161980,161982,161984,161986],{"class":78,"line":1581},[76,161978,161979],{"class":86},"print_info(",[76,161981,149857],{"class":192},[76,161983,12402],{"class":86},[76,161985,738],{"class":136},[76,161987,93],{"class":86},[21,161989,161990],{},"这种方式可以把小功能组合成大功能。",[16,161992,161994],{"id":161993},"_511-参数检查","5.11 参数检查",[21,161996,161997],{},"函数内部可以检查参数是否合法。",[66,161999,162001],{"className":30347,"code":162000,"language":30349,"meta":71,"style":71},"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",[73,162002,162003,162012,162024,162030,162040,162044,162048,162065,162069,162081,162092,162098],{"__ignoreMap":71},[76,162004,162005,162007,162010],{"class":78,"line":79},[76,162006,31916],{"class":82},[76,162008,162009],{"class":1927}," divide",[76,162011,151062],{"class":86},[76,162013,162014,162016,162018,162020,162022],{"class":78,"line":96},[76,162015,3066],{"class":82},[76,162017,10849],{"class":86},[76,162019,2914],{"class":82},[76,162021,4058],{"class":136},[76,162023,3704],{"class":86},[76,162025,162026,162028],{"class":78,"line":1143},[76,162027,14719],{"class":82},[76,162029,152141],{"class":136},[76,162031,162032,162034,162036,162038],{"class":78,"line":1158},[76,162033,4055],{"class":82},[76,162035,10836],{"class":86},[76,162037,672],{"class":82},[76,162039,151073],{"class":86},[76,162041,162042],{"class":78,"line":1164},[76,162043,2365],{"emptyLinePlaceholder":2364},[76,162045,162046],{"class":78,"line":1178},[76,162047,2365],{"emptyLinePlaceholder":2364},[76,162049,162050,162052,162054,162057,162059,162061,162063],{"class":78,"line":1184},[76,162051,161275],{"class":86},[76,162053,133],{"class":82},[76,162055,162056],{"class":86}," divide(",[76,162058,534],{"class":136},[76,162060,12402],{"class":86},[76,162062,279],{"class":136},[76,162064,93],{"class":86},[76,162066,162067],{"class":78,"line":1275},[76,162068,2365],{"emptyLinePlaceholder":2364},[76,162070,162071,162073,162075,162077,162079],{"class":78,"line":1281},[76,162072,1495],{"class":82},[76,162074,161521],{"class":86},[76,162076,38896],{"class":82},[76,162078,38902],{"class":136},[76,162080,3704],{"class":86},[76,162082,162083,162085,162087,162090],{"class":78,"line":1293},[76,162084,31268],{"class":136},[76,162086,87],{"class":86},[76,162088,162089],{"class":192},"\"除数不能为0\"",[76,162091,93],{"class":86},[76,162093,162094,162096],{"class":78,"line":1576},[76,162095,1665],{"class":82},[76,162097,3704],{"class":86},[76,162099,162100,162102],{"class":78,"line":1581},[76,162101,31268],{"class":136},[76,162103,76554],{"class":86},[16,162105,162107],{"id":162106},"_512-类型提示","5.12 类型提示",[21,162109,162110],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[66,162112,162114],{"className":30347,"code":162113,"language":30349,"meta":71,"style":71},"def add(a: int, b: int) -> int:\n    return a + b\n",[73,162115,162116,162139],{"__ignoreMap":71},[76,162117,162118,162120,162122,162125,162127,162130,162132,162135,162137],{"class":78,"line":79},[76,162119,31916],{"class":82},[76,162121,5176],{"class":1927},[76,162123,162124],{"class":86},"(a: ",[76,162126,90],{"class":136},[76,162128,162129],{"class":86},", b: ",[76,162131,90],{"class":136},[76,162133,162134],{"class":86},") -> ",[76,162136,90],{"class":136},[76,162138,3704],{"class":86},[76,162140,162141,162143,162145,162147],{"class":78,"line":96},[76,162142,4055],{"class":82},[76,162144,10836],{"class":86},[76,162146,569],{"class":82},[76,162148,151073],{"class":86},[21,162150,162151],{},"字符串参数：",[66,162153,162155],{"className":30347,"code":162154,"language":30349,"meta":71,"style":71},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[73,162156,162157,162174],{"__ignoreMap":71},[76,162158,162159,162161,162163,162166,162168,162170,162172],{"class":78,"line":79},[76,162160,31916],{"class":82},[76,162162,160965],{"class":1927},[76,162164,162165],{"class":86},"(name: ",[76,162167,1263],{"class":136},[76,162169,162134],{"class":86},[76,162171,95655],{"class":136},[76,162173,3704],{"class":86},[76,162175,162176,162178,162180,162182,162184,162186,162188,162190,162192],{"class":78,"line":96},[76,162177,31268],{"class":136},[76,162179,87],{"class":86},[76,162181,140],{"class":82},[76,162183,157023],{"class":192},[76,162185,984],{"class":136},[76,162187,79779],{"class":86},[76,162189,1034],{"class":136},[76,162191,339],{"class":192},[76,162193,93],{"class":86},[21,162195,162196],{},"列表参数：",[66,162198,162200],{"className":30347,"code":162199,"language":30349,"meta":71,"style":71},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[73,162201,162202,162221,162229,162241,162250],{"__ignoreMap":71},[76,162203,162204,162206,162209,162212,162214,162217,162219],{"class":78,"line":79},[76,162205,31916],{"class":82},[76,162207,162208],{"class":1927}," get_total",[76,162210,162211],{"class":86},"(numbers: list[",[76,162213,90],{"class":136},[76,162215,162216],{"class":86},"]) -> ",[76,162218,90],{"class":136},[76,162220,3704],{"class":86},[76,162222,162223,162225,162227],{"class":78,"line":96},[76,162224,159276],{"class":86},[76,162226,133],{"class":82},[76,162228,47302],{"class":136},[76,162230,162231,162233,162236,162238],{"class":78,"line":1143},[76,162232,3166],{"class":82},[76,162234,162235],{"class":86}," number ",[76,162237,26012],{"class":82},[76,162239,162240],{"class":86}," numbers:\n",[76,162242,162243,162245,162247],{"class":78,"line":1158},[76,162244,159951],{"class":86},[76,162246,9444],{"class":82},[76,162248,162249],{"class":86}," number\n",[76,162251,162252,162254],{"class":78,"line":1164},[76,162253,4055],{"class":82},[76,162255,162256],{"class":86}," total\n",[21,162258,162259],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[16,162261,162263],{"id":162262},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[66,162265,162267],{"className":30347,"code":162266,"language":30349,"meta":71,"style":71},"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",[73,162268,162269,162279,162283,162287,162295,162306,162316,162326,162336,162346,162350,162354,162363,162385,162389,162393,162402,162408,162428,162440,162451,162455,162464,162475,162480,162484,162488,162497,162503,162522,162534,162544,162548,162559,162569,162573,162581,162592,162596,162600,162604,162612,162617,162631,162635,162647,162652,162664,162669,162681,162686,162698,162708,162712,162718],{"__ignoreMap":71},[76,162270,162271,162274,162276],{"class":78,"line":79},[76,162272,162273],{"class":86},"balance ",[76,162275,133],{"class":82},[76,162277,162278],{"class":136}," 1000\n",[76,162280,162281],{"class":78,"line":96},[76,162282,2365],{"emptyLinePlaceholder":2364},[76,162284,162285],{"class":78,"line":1143},[76,162286,2365],{"emptyLinePlaceholder":2364},[76,162288,162289,162291,162293],{"class":78,"line":1158},[76,162290,31916],{"class":82},[76,162292,152002],{"class":1927},[76,162294,31922],{"class":86},[76,162296,162297,162299,162301,162304],{"class":78,"line":1164},[76,162298,31268],{"class":136},[76,162300,87],{"class":86},[76,162302,162303],{"class":192},"\"====== ATM ======\"",[76,162305,93],{"class":86},[76,162307,162308,162310,162312,162314],{"class":78,"line":1178},[76,162309,31268],{"class":136},[76,162311,87],{"class":86},[76,162313,160617],{"class":192},[76,162315,93],{"class":86},[76,162317,162318,162320,162322,162324],{"class":78,"line":1184},[76,162319,31268],{"class":136},[76,162321,87],{"class":86},[76,162323,160628],{"class":192},[76,162325,93],{"class":86},[76,162327,162328,162330,162332,162334],{"class":78,"line":1275},[76,162329,31268],{"class":136},[76,162331,87],{"class":86},[76,162333,160639],{"class":192},[76,162335,93],{"class":86},[76,162337,162338,162340,162342,162344],{"class":78,"line":1281},[76,162339,31268],{"class":136},[76,162341,87],{"class":86},[76,162343,160650],{"class":192},[76,162345,93],{"class":86},[76,162347,162348],{"class":78,"line":1293},[76,162349,2365],{"emptyLinePlaceholder":2364},[76,162351,162352],{"class":78,"line":1576},[76,162353,2365],{"emptyLinePlaceholder":2364},[76,162355,162356,162358,162361],{"class":78,"line":1581},[76,162357,31916],{"class":82},[76,162359,162360],{"class":1927}," show_balance",[76,162362,31922],{"class":86},[76,162364,162365,162367,162369,162371,162374,162376,162379,162381,162383],{"class":78,"line":1587},[76,162366,31268],{"class":136},[76,162368,87],{"class":86},[76,162370,140],{"class":82},[76,162372,162373],{"class":192},"\"当前余额:",[76,162375,984],{"class":136},[76,162377,162378],{"class":86},"balance",[76,162380,1034],{"class":136},[76,162382,156981],{"class":192},[76,162384,93],{"class":86},[76,162386,162387],{"class":78,"line":1592},[76,162388,2365],{"emptyLinePlaceholder":2364},[76,162390,162391],{"class":78,"line":1606},[76,162392,2365],{"emptyLinePlaceholder":2364},[76,162394,162395,162397,162400],{"class":78,"line":1611},[76,162396,31916],{"class":82},[76,162398,162399],{"class":1927}," save_money",[76,162401,31922],{"class":86},[76,162403,162404,162406],{"class":78,"line":1617},[76,162405,161830],{"class":82},[76,162407,150068],{"class":86},[76,162409,162410,162413,162415,162417,162419,162421,162423,162426],{"class":78,"line":1638},[76,162411,162412],{"class":86},"    money ",[76,162414,133],{"class":82},[76,162416,109766],{"class":136},[76,162418,87],{"class":86},[76,162420,53790],{"class":136},[76,162422,87],{"class":86},[76,162424,162425],{"class":192},"\"请输入存款金额:\"",[76,162427,30466],{"class":86},[76,162429,162430,162432,162434,162436,162438],{"class":78,"line":1643},[76,162431,3066],{"class":82},[76,162433,150111],{"class":86},[76,162435,1552],{"class":82},[76,162437,4058],{"class":136},[76,162439,3704],{"class":86},[76,162441,162442,162444,162446,162449],{"class":78,"line":1657},[76,162443,32420],{"class":136},[76,162445,87],{"class":86},[76,162447,162448],{"class":192},"\"金额必须大于0\"",[76,162450,93],{"class":86},[76,162452,162453],{"class":78,"line":1662},[76,162454,152330],{"class":82},[76,162456,162457,162460,162462],{"class":78,"line":1691},[76,162458,162459],{"class":86},"    balance ",[76,162461,9444],{"class":82},[76,162463,150144],{"class":86},[76,162465,162466,162468,162470,162473],{"class":78,"line":1696},[76,162467,31268],{"class":136},[76,162469,87],{"class":86},[76,162471,162472],{"class":192},"\"存款成功\"",[76,162474,93],{"class":86},[76,162476,162477],{"class":78,"line":1713},[76,162478,162479],{"class":86},"    show_balance()\n",[76,162481,162482],{"class":78,"line":1718},[76,162483,2365],{"emptyLinePlaceholder":2364},[76,162485,162486],{"class":78,"line":1723},[76,162487,2365],{"emptyLinePlaceholder":2364},[76,162489,162490,162492,162495],{"class":78,"line":1728},[76,162491,31916],{"class":82},[76,162493,162494],{"class":1927}," withdraw_money",[76,162496,31922],{"class":86},[76,162498,162499,162501],{"class":78,"line":1742},[76,162500,161830],{"class":82},[76,162502,150068],{"class":86},[76,162504,162505,162507,162509,162511,162513,162515,162517,162520],{"class":78,"line":1747},[76,162506,162412],{"class":86},[76,162508,133],{"class":82},[76,162510,109766],{"class":136},[76,162512,87],{"class":86},[76,162514,53790],{"class":136},[76,162516,87],{"class":86},[76,162518,162519],{"class":192},"\"请输入取款金额:\"",[76,162521,30466],{"class":86},[76,162523,162524,162526,162528,162530,162532],{"class":78,"line":2542},[76,162525,3066],{"class":82},[76,162527,150111],{"class":86},[76,162529,1552],{"class":82},[76,162531,4058],{"class":136},[76,162533,3704],{"class":86},[76,162535,162536,162538,162540,162542],{"class":78,"line":2556},[76,162537,32420],{"class":136},[76,162539,87],{"class":86},[76,162541,162448],{"class":192},[76,162543,93],{"class":86},[76,162545,162546],{"class":78,"line":2564},[76,162547,152330],{"class":82},[76,162549,162550,162552,162554,162556],{"class":78,"line":2569},[76,162551,3066],{"class":82},[76,162553,150111],{"class":86},[76,162555,1048],{"class":82},[76,162557,162558],{"class":86}," balance:\n",[76,162560,162561,162563,162565,162567],{"class":78,"line":2575},[76,162562,32420],{"class":136},[76,162564,87],{"class":86},[76,162566,150206],{"class":192},[76,162568,93],{"class":86},[76,162570,162571],{"class":78,"line":2581},[76,162572,152330],{"class":82},[76,162574,162575,162577,162579],{"class":78,"line":2586},[76,162576,162459],{"class":86},[76,162578,150221],{"class":82},[76,162580,150144],{"class":86},[76,162582,162583,162585,162587,162590],{"class":78,"line":7915},[76,162584,31268],{"class":136},[76,162586,87],{"class":86},[76,162588,162589],{"class":192},"\"取款成功\"",[76,162591,93],{"class":86},[76,162593,162594],{"class":78,"line":7939},[76,162595,162479],{"class":86},[76,162597,162598],{"class":78,"line":7944},[76,162599,2365],{"emptyLinePlaceholder":2364},[76,162601,162602],{"class":78,"line":7950},[76,162603,2365],{"emptyLinePlaceholder":2364},[76,162605,162606,162608,162610],{"class":78,"line":7977},[76,162607,108632],{"class":82},[76,162609,95261],{"class":136},[76,162611,3704],{"class":86},[76,162613,162614],{"class":78,"line":7982},[76,162615,162616],{"class":86},"    show_menu()\n",[76,162618,162619,162621,162623,162625,162627,162629],{"class":78,"line":7988},[76,162620,160661],{"class":86},[76,162622,133],{"class":82},[76,162624,60574],{"class":136},[76,162626,87],{"class":86},[76,162628,153042],{"class":192},[76,162630,93],{"class":86},[76,162632,162633],{"class":78,"line":8000},[76,162634,2365],{"emptyLinePlaceholder":2364},[76,162636,162637,162639,162641,162643,162645],{"class":78,"line":8012},[76,162638,3066],{"class":82},[76,162640,153055],{"class":86},[76,162642,2914],{"class":82},[76,162644,153060],{"class":192},[76,162646,3704],{"class":86},[76,162648,162649],{"class":78,"line":8024},[76,162650,162651],{"class":86},"        show_balance()\n",[76,162653,162654,162656,162658,162660,162662],{"class":78,"line":9683},[76,162655,39262],{"class":82},[76,162657,153055],{"class":86},[76,162659,2914],{"class":82},[76,162661,153079],{"class":192},[76,162663,3704],{"class":86},[76,162665,162666],{"class":78,"line":9708},[76,162667,162668],{"class":86},"        save_money()\n",[76,162670,162671,162673,162675,162677,162679],{"class":78,"line":9731},[76,162672,39262],{"class":82},[76,162674,153055],{"class":86},[76,162676,2914],{"class":82},[76,162678,153097],{"class":192},[76,162680,3704],{"class":86},[76,162682,162683],{"class":78,"line":9755},[76,162684,162685],{"class":86},"        withdraw_money()\n",[76,162687,162688,162690,162692,162694,162696],{"class":78,"line":9760},[76,162689,39262],{"class":82},[76,162691,153055],{"class":86},[76,162693,2914],{"class":82},[76,162695,153151],{"class":192},[76,162697,3704],{"class":86},[76,162699,162700,162702,162704,162706],{"class":78,"line":9765},[76,162701,32420],{"class":136},[76,162703,87],{"class":86},[76,162705,153162],{"class":192},[76,162707,93],{"class":86},[76,162709,162710],{"class":78,"line":9770},[76,162711,31596],{"class":82},[76,162713,162714,162716],{"class":78,"line":9779},[76,162715,157991],{"class":82},[76,162717,3704],{"class":86},[76,162719,162720,162722,162724,162726],{"class":78,"line":9784},[76,162721,32420],{"class":136},[76,162723,87],{"class":86},[76,162725,153183],{"class":192},[76,162727,93],{"class":86},[21,162729,162730],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[16,162732,162734],{"id":162733},"_514-易错点","5.14 易错点",[29,162736,162737,162740,162743,162748,162753,162756],{},[32,162738,162739],{},"函数定义后必须调用才会执行。",[32,162741,162742],{},"函数名后面有括号才是调用。",[32,162744,162745,162747],{},[73,162746,17013],{}," 后面的代码不会执行。",[32,162749,162750,162751,28354],{},"没有返回值的函数默认返回 ",[73,162752,95655],{},[32,162754,162755],{},"局部变量不能在函数外部访问。",[32,162757,162758,162759,162761],{},"不要滥用 ",[73,162760,161795],{},"，更好的方式是让函数返回新值。",[21,162763,162764,162765,162767],{},"例如不用 ",[73,162766,161795],{}," 改写存款：",[66,162769,162771],{"className":30347,"code":162770,"language":30349,"meta":71,"style":71},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[73,162772,162773,162782,162793,162797,162801,162809,162822],{"__ignoreMap":71},[76,162774,162775,162777,162779],{"class":78,"line":79},[76,162776,31916],{"class":82},[76,162778,162399],{"class":1927},[76,162780,162781],{"class":86},"(balance, money):\n",[76,162783,162784,162786,162789,162791],{"class":78,"line":96},[76,162785,4055],{"class":82},[76,162787,162788],{"class":86}," balance ",[76,162790,569],{"class":82},[76,162792,150144],{"class":86},[76,162794,162795],{"class":78,"line":1143},[76,162796,2365],{"emptyLinePlaceholder":2364},[76,162798,162799],{"class":78,"line":1158},[76,162800,2365],{"emptyLinePlaceholder":2364},[76,162802,162803,162805,162807],{"class":78,"line":1164},[76,162804,162273],{"class":86},[76,162806,133],{"class":82},[76,162808,162278],{"class":136},[76,162810,162811,162813,162815,162818,162820],{"class":78,"line":1178},[76,162812,162273],{"class":86},[76,162814,133],{"class":82},[76,162816,162817],{"class":86}," save_money(balance, ",[76,162819,1686],{"class":136},[76,162821,93],{"class":86},[76,162823,162824,162826],{"class":78,"line":1184},[76,162825,30384],{"class":136},[76,162827,162828],{"class":86},"(balance)\n",[16,162830,162832],{"id":162831},"_515-本章练习","5.15 本章练习",[29,162834,162835,162842,162848,162854,162860],{},[32,162836,162837,162838,162841],{},"定义函数 ",[73,162839,162840],{},"print_student(name, age)","，输出学生信息。",[32,162843,162837,162844,162847],{},[73,162845,162846],{},"get_max(a, b, c)","，返回三个数中的最大值。",[32,162849,162837,162850,162853],{},[73,162851,162852],{},"is_even(num)","，判断一个数是否为偶数。",[32,162855,162837,162856,162859],{},[73,162857,162858],{},"calculate_bmi(weight, height)","，返回 BMI。",[32,162861,162862],{},"把第 4 章的菜单程序拆分成多个函数。",[5092,162864,162865],{},"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":71,"searchDepth":96,"depth":96,"links":162867},[162868,162869,162870,162871,162872,162873,162874,162875,162876,162880,162881,162882,162883,162884,162885],{"id":160888,"depth":96,"text":160889},{"id":160929,"depth":96,"text":160930},{"id":161019,"depth":96,"text":161020},{"id":161100,"depth":96,"text":161101},{"id":161233,"depth":96,"text":161234},{"id":161355,"depth":96,"text":161356},{"id":161477,"depth":96,"text":161478},{"id":161554,"depth":96,"text":161555},{"id":161676,"depth":96,"text":161677,"children":162877},[162878,162879],{"id":161680,"depth":1143,"text":161681},{"id":161738,"depth":1143,"text":161739},{"id":161867,"depth":96,"text":161868},{"id":161993,"depth":96,"text":161994},{"id":162106,"depth":96,"text":162107},{"id":162262,"depth":96,"text":162263},{"id":162733,"depth":96,"text":162734},{"id":162831,"depth":96,"text":162832},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160880,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162892,"title":162893,"body":162894,"description":23344,"extension":5123,"meta":165938,"navigation":2364,"path":165939,"seo":165940,"stem":165941,"__hash__":165942},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":9,"value":162895,"toc":165919},[162896,162899,162903,162906,162909,163013,163016,163020,163023,163103,163106,163110,163113,163173,163176,163212,163215,163230,163234,163307,163310,163365,163368,163438,163441,163525,163535,163593,163597,163642,163645,163671,163674,163780,163784,163787,163829,163832,163896,163899,163903,163906,163967,163970,164000,164003,164041,164045,164048,164057,164060,164184,164187,164228,164232,164235,164246,164286,164289,164304,164309,164312,164379,164382,164472,164476,164479,164527,164530,164557,164559,164589,164592,164612,164615,164646,164649,164682,164686,164689,164713,164716,164740,164743,164767,164771,164774,164904,164907,164987,164990,165065,165069,165072,165122,165125,165167,165170,165194,165196,165220,165223,165278,165281,165347,165351,165354,165357,165395,165398,165451,165454,165500,165503,165536,165539,165543,165862,165866,165895,165899,165916],[12,162897,162893],{"id":162898},"_6-数据容器",[16,162900,162902],{"id":162901},"_61-什么是数据容器","6.1 什么是数据容器",[21,162904,162905],{},"数据容器用于一次保存多个数据。",[21,162907,162908],{},"常见容器：",[225,162910,162911,162928],{},[228,162912,162913],{},[231,162914,162915,162917,162920,162923,162926],{},[234,162916,25740],{},[234,162918,162919],{},"是否有序",[234,162921,162922],{},"是否可变",[234,162924,162925],{},"是否允许重复",[234,162927,27461],{},[272,162929,162930,162948,162964,162979,162996],{},[231,162931,162932,162935,162938,162941,162944],{},[277,162933,162934],{},"list列表",[277,162936,162937],{},"有序",[277,162939,162940],{},"可变",[277,162942,162943],{},"允许",[277,162945,162946],{},[73,162947,155226],{},[231,162949,162950,162953,162955,162958,162960],{},[277,162951,162952],{},"tuple元组",[277,162954,162937],{},[277,162956,162957],{},"不可变",[277,162959,162943],{},[277,162961,162962],{},[73,162963,155239],{},[231,162965,162966,162969,162971,162973,162975],{},[277,162967,162968],{},"str字符串",[277,162970,162937],{},[277,162972,162957],{},[277,162974,162943],{},[277,162976,162977],{},[73,162978,155849],{},[231,162980,162981,162984,162987,162989,162992],{},[277,162982,162983],{},"set集合",[277,162985,162986],{},"无序",[277,162988,162940],{},[277,162990,162991],{},"不允许",[277,162993,162994],{},[73,162995,155264],{},[231,162997,162998,163001,163003,163005,163008],{},[277,162999,163000],{},"dict字典",[277,163002,162937],{},[277,163004,162940],{},[277,163006,163007],{},"key不允许重复",[277,163009,163010],{},[73,163011,163012],{},"{\"name\": \"小明\"}",[21,163014,163015],{},"Python 3.7 之后，字典保持插入顺序。",[16,163017,163019],{"id":163018},"_62-列表list","6.2 列表list",[21,163021,163022],{},"列表用于保存一组有顺序的数据。",[66,163024,163026],{"className":30347,"code":163025,"language":30349,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[73,163027,163028,163048,163073,163094],{"__ignoreMap":71},[76,163029,163030,163032,163034,163036,163038,163040,163042,163044,163046],{"class":78,"line":79},[76,163031,160349],{"class":86},[76,163033,133],{"class":82},[76,163035,52195],{"class":86},[76,163037,149857],{"class":192},[76,163039,12402],{"class":86},[76,163041,150905],{"class":192},[76,163043,12402],{"class":86},[76,163045,159700],{"class":192},[76,163047,33215],{"class":86},[76,163049,163050,163053,163055,163057,163059,163061,163063,163065,163067,163069,163071],{"class":78,"line":96},[76,163051,163052],{"class":86},"numbers ",[76,163054,133],{"class":82},[76,163056,52195],{"class":86},[76,163058,305],{"class":136},[76,163060,12402],{"class":86},[76,163062,165],{"class":136},[76,163064,12402],{"class":86},[76,163066,159],{"class":136},[76,163068,12402],{"class":86},[76,163070,381],{"class":136},[76,163072,33215],{"class":86},[76,163074,163075,163078,163080,163082,163084,163086,163088,163090,163092],{"class":78,"line":1143},[76,163076,163077],{"class":86},"mixed ",[76,163079,133],{"class":82},[76,163081,52195],{"class":86},[76,163083,149857],{"class":192},[76,163085,12402],{"class":86},[76,163087,738],{"class":136},[76,163089,12402],{"class":86},[76,163091,31445],{"class":136},[76,163093,33215],{"class":86},[76,163095,163096,163099,163101],{"class":78,"line":1158},[76,163097,163098],{"class":86},"empty ",[76,163100,133],{"class":82},[76,163102,51807],{"class":86},[21,163104,163105],{},"推荐一个列表中保存同类数据，代码更清晰。",[16,163107,163109],{"id":163108},"_63-列表索引","6.3 列表索引",[21,163111,163112],{},"正向索引从 0 开始：",[66,163114,163116],{"className":30347,"code":163115,"language":30349,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[73,163117,163118,163138,163142,163153,163163],{"__ignoreMap":71},[76,163119,163120,163122,163124,163126,163128,163130,163132,163134,163136],{"class":78,"line":79},[76,163121,160349],{"class":86},[76,163123,133],{"class":82},[76,163125,52195],{"class":86},[76,163127,149857],{"class":192},[76,163129,12402],{"class":86},[76,163131,150905],{"class":192},[76,163133,12402],{"class":86},[76,163135,159700],{"class":192},[76,163137,33215],{"class":86},[76,163139,163140],{"class":78,"line":96},[76,163141,2365],{"emptyLinePlaceholder":2364},[76,163143,163144,163146,163149,163151],{"class":78,"line":1143},[76,163145,30384],{"class":136},[76,163147,163148],{"class":86},"(names[",[76,163150,279],{"class":136},[76,163152,4622],{"class":86},[76,163154,163155,163157,163159,163161],{"class":78,"line":1158},[76,163156,30384],{"class":136},[76,163158,163148],{"class":86},[76,163160,305],{"class":136},[76,163162,4622],{"class":86},[76,163164,163165,163167,163169,163171],{"class":78,"line":1164},[76,163166,30384],{"class":136},[76,163168,163148],{"class":86},[76,163170,165],{"class":136},[76,163172,4622],{"class":86},[21,163174,163175],{},"反向索引从 -1 开始：",[66,163177,163179],{"className":30347,"code":163178,"language":30349,"meta":71,"style":71},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[73,163180,163181,163197],{"__ignoreMap":71},[76,163182,163183,163185,163187,163189,163191,163194],{"class":78,"line":79},[76,163184,30384],{"class":136},[76,163186,163148],{"class":86},[76,163188,620],{"class":82},[76,163190,305],{"class":136},[76,163192,163193],{"class":86},"])  ",[76,163195,163196],{"class":146},"# 小刚\n",[76,163198,163199,163201,163203,163205,163207,163209],{"class":78,"line":96},[76,163200,30384],{"class":136},[76,163202,163148],{"class":86},[76,163204,620],{"class":82},[76,163206,165],{"class":136},[76,163208,163193],{"class":86},[76,163210,163211],{"class":146},"# 小红\n",[21,163213,163214],{},"索引越界会报错：",[66,163216,163218],{"className":30347,"code":163217,"language":30349,"meta":71,"style":71},"print(names[3])\n",[73,163219,163220],{"__ignoreMap":71},[76,163221,163222,163224,163226,163228],{"class":78,"line":79},[76,163223,30384],{"class":136},[76,163225,163148],{"class":86},[76,163227,159],{"class":136},[76,163229,4622],{"class":86},[16,163231,163233],{"id":163232},"_64-列表常用方法","6.4 列表常用方法",[66,163235,163237],{"className":30347,"code":163236,"language":30349,"meta":71,"style":71},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[73,163238,163239,163255,163259,163268,163282,163296,163300],{"__ignoreMap":71},[76,163240,163241,163243,163245,163247,163249,163251,163253],{"class":78,"line":79},[76,163242,160349],{"class":86},[76,163244,133],{"class":82},[76,163246,52195],{"class":86},[76,163248,149857],{"class":192},[76,163250,12402],{"class":86},[76,163252,150905],{"class":192},[76,163254,33215],{"class":86},[76,163256,163257],{"class":78,"line":96},[76,163258,2365],{"emptyLinePlaceholder":2364},[76,163260,163261,163264,163266],{"class":78,"line":1143},[76,163262,163263],{"class":86},"names.append(",[76,163265,159700],{"class":192},[76,163267,93],{"class":86},[76,163269,163270,163273,163275,163277,163280],{"class":78,"line":1158},[76,163271,163272],{"class":86},"names.insert(",[76,163274,305],{"class":136},[76,163276,12402],{"class":86},[76,163278,163279],{"class":192},"\"小李\"",[76,163281,93],{"class":86},[76,163283,163284,163287,163289,163291,163294],{"class":78,"line":1164},[76,163285,163286],{"class":86},"names.extend([",[76,163288,8650],{"class":192},[76,163290,12402],{"class":86},[76,163292,163293],{"class":192},"\"小赵\"",[76,163295,4622],{"class":86},[76,163297,163298],{"class":78,"line":1178},[76,163299,2365],{"emptyLinePlaceholder":2364},[76,163301,163302,163304],{"class":78,"line":1184},[76,163303,30384],{"class":136},[76,163305,163306],{"class":86},"(names)\n",[21,163308,163309],{},"删除元素：",[66,163311,163313],{"className":30347,"code":163312,"language":30349,"meta":71,"style":71},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[73,163314,163315,163324,163334,163348,163360],{"__ignoreMap":71},[76,163316,163317,163320,163322],{"class":78,"line":79},[76,163318,163319],{"class":86},"names.remove(",[76,163321,150905],{"class":192},[76,163323,93],{"class":86},[76,163325,163326,163329,163331],{"class":78,"line":96},[76,163327,163328],{"class":86},"last ",[76,163330,133],{"class":82},[76,163332,163333],{"class":86}," names.pop()\n",[76,163335,163336,163339,163341,163344,163346],{"class":78,"line":1143},[76,163337,163338],{"class":86},"first ",[76,163340,133],{"class":82},[76,163342,163343],{"class":86}," names.pop(",[76,163345,279],{"class":136},[76,163347,93],{"class":86},[76,163349,163350,163353,163356,163358],{"class":78,"line":1158},[76,163351,163352],{"class":82},"del",[76,163354,163355],{"class":86}," names[",[76,163357,279],{"class":136},[76,163359,33215],{"class":86},[76,163361,163362],{"class":78,"line":1164},[76,163363,163364],{"class":86},"names.clear()\n",[21,163366,163367],{},"查询和统计：",[66,163369,163371],{"className":30347,"code":163370,"language":30349,"meta":71,"style":71},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[73,163372,163373,163401,163405,163416,163427],{"__ignoreMap":71},[76,163374,163375,163377,163379,163381,163383,163385,163387,163389,163391,163393,163395,163397,163399],{"class":78,"line":79},[76,163376,163052],{"class":86},[76,163378,133],{"class":82},[76,163380,52195],{"class":86},[76,163382,305],{"class":136},[76,163384,12402],{"class":86},[76,163386,165],{"class":136},[76,163388,12402],{"class":86},[76,163390,159],{"class":136},[76,163392,12402],{"class":86},[76,163394,165],{"class":136},[76,163396,12402],{"class":86},[76,163398,381],{"class":136},[76,163400,33215],{"class":86},[76,163402,163403],{"class":78,"line":96},[76,163404,2365],{"emptyLinePlaceholder":2364},[76,163406,163407,163409,163412,163414],{"class":78,"line":1143},[76,163408,30384],{"class":136},[76,163410,163411],{"class":86},"(numbers.index(",[76,163413,159],{"class":136},[76,163415,30466],{"class":86},[76,163417,163418,163420,163423,163425],{"class":78,"line":1158},[76,163419,30384],{"class":136},[76,163421,163422],{"class":86},"(numbers.count(",[76,163424,165],{"class":136},[76,163426,30466],{"class":86},[76,163428,163429,163431,163433,163435],{"class":78,"line":1164},[76,163430,30384],{"class":136},[76,163432,87],{"class":86},[76,163434,7325],{"class":136},[76,163436,163437],{"class":86},"(numbers))\n",[21,163439,163440],{},"排序：",[66,163442,163444],{"className":30347,"code":163443,"language":30349,"meta":71,"style":71},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[73,163445,163446,163470,163474,163479,163486,163490,163504,163510,163514,163519],{"__ignoreMap":71},[76,163447,163448,163450,163452,163454,163456,163458,163460,163462,163464,163466,163468],{"class":78,"line":79},[76,163449,163052],{"class":86},[76,163451,133],{"class":82},[76,163453,52195],{"class":86},[76,163455,159],{"class":136},[76,163457,12402],{"class":86},[76,163459,305],{"class":136},[76,163461,12402],{"class":86},[76,163463,407],{"class":136},[76,163465,12402],{"class":86},[76,163467,165],{"class":136},[76,163469,33215],{"class":86},[76,163471,163472],{"class":78,"line":96},[76,163473,2365],{"emptyLinePlaceholder":2364},[76,163475,163476],{"class":78,"line":1143},[76,163477,163478],{"class":86},"numbers.sort()\n",[76,163480,163481,163483],{"class":78,"line":1158},[76,163482,30384],{"class":136},[76,163484,163485],{"class":86},"(numbers)\n",[76,163487,163488],{"class":78,"line":1164},[76,163489,2365],{"emptyLinePlaceholder":2364},[76,163491,163492,163495,163498,163500,163502],{"class":78,"line":1178},[76,163493,163494],{"class":86},"numbers.sort(",[76,163496,163497],{"class":5183},"reverse",[76,163499,133],{"class":82},[76,163501,31445],{"class":136},[76,163503,93],{"class":86},[76,163505,163506,163508],{"class":78,"line":1184},[76,163507,30384],{"class":136},[76,163509,163485],{"class":86},[76,163511,163512],{"class":78,"line":1275},[76,163513,2365],{"emptyLinePlaceholder":2364},[76,163515,163516],{"class":78,"line":1281},[76,163517,163518],{"class":86},"numbers.reverse()\n",[76,163520,163521,163523],{"class":78,"line":1293},[76,163522,30384],{"class":136},[76,163524,163485],{"class":86},[21,163526,163527,163530,163531,163534],{},[73,163528,163529],{},"sort()"," 会修改原列表，",[73,163532,163533],{},"sorted()"," 返回新列表。",[66,163536,163538],{"className":30347,"code":163537,"language":30349,"meta":71,"style":71},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[73,163539,163540,163564,163576,163580,163586],{"__ignoreMap":71},[76,163541,163542,163544,163546,163548,163550,163552,163554,163556,163558,163560,163562],{"class":78,"line":79},[76,163543,163052],{"class":86},[76,163545,133],{"class":82},[76,163547,52195],{"class":86},[76,163549,159],{"class":136},[76,163551,12402],{"class":86},[76,163553,305],{"class":136},[76,163555,12402],{"class":86},[76,163557,407],{"class":136},[76,163559,12402],{"class":86},[76,163561,165],{"class":136},[76,163563,33215],{"class":86},[76,163565,163566,163569,163571,163574],{"class":78,"line":96},[76,163567,163568],{"class":86},"new_numbers ",[76,163570,133],{"class":82},[76,163572,163573],{"class":136}," sorted",[76,163575,163485],{"class":86},[76,163577,163578],{"class":78,"line":1143},[76,163579,2365],{"emptyLinePlaceholder":2364},[76,163581,163582,163584],{"class":78,"line":1158},[76,163583,30384],{"class":136},[76,163585,163485],{"class":86},[76,163587,163588,163590],{"class":78,"line":1164},[76,163589,30384],{"class":136},[76,163591,163592],{"class":86},"(new_numbers)\n",[16,163594,163596],{"id":163595},"_65-列表遍历","6.5 列表遍历",[66,163598,163600],{"className":30347,"code":163599,"language":30349,"meta":71,"style":71},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[73,163601,163602,163622,163626,163636],{"__ignoreMap":71},[76,163603,163604,163606,163608,163610,163612,163614,163616,163618,163620],{"class":78,"line":79},[76,163605,160349],{"class":86},[76,163607,133],{"class":82},[76,163609,52195],{"class":86},[76,163611,149857],{"class":192},[76,163613,12402],{"class":86},[76,163615,150905],{"class":192},[76,163617,12402],{"class":86},[76,163619,159700],{"class":192},[76,163621,33215],{"class":86},[76,163623,163624],{"class":78,"line":96},[76,163625,2365],{"emptyLinePlaceholder":2364},[76,163627,163628,163630,163632,163634],{"class":78,"line":1143},[76,163629,2990],{"class":82},[76,163631,160385],{"class":86},[76,163633,26012],{"class":82},[76,163635,160390],{"class":86},[76,163637,163638,163640],{"class":78,"line":1158},[76,163639,31268],{"class":136},[76,163641,150629],{"class":86},[21,163643,163644],{},"需要索引时：",[66,163646,163648],{"className":30347,"code":163647,"language":30349,"meta":71,"style":71},"for index, name in enumerate(names):\n    print(index, name)\n",[73,163649,163650,163664],{"__ignoreMap":71},[76,163651,163652,163654,163657,163659,163661],{"class":78,"line":79},[76,163653,2990],{"class":82},[76,163655,163656],{"class":86}," index, name ",[76,163658,26012],{"class":82},[76,163660,31575],{"class":136},[76,163662,163663],{"class":86},"(names):\n",[76,163665,163666,163668],{"class":78,"line":96},[76,163667,31268],{"class":136},[76,163669,163670],{"class":86},"(index, name)\n",[21,163672,163673],{},"统计总分：",[66,163675,163677],{"className":30347,"code":163676,"language":30349,"meta":71,"style":71},"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",[73,163678,163679,163704,163712,163716,163727,163735,163739,163756],{"__ignoreMap":71},[76,163680,163681,163684,163686,163688,163690,163692,163694,163696,163698,163700,163702],{"class":78,"line":79},[76,163682,163683],{"class":86},"scores ",[76,163685,133],{"class":82},[76,163687,52195],{"class":86},[76,163689,950],{"class":136},[76,163691,12402],{"class":86},[76,163693,824],{"class":136},[76,163695,12402],{"class":86},[76,163697,342],{"class":136},[76,163699,12402],{"class":86},[76,163701,649],{"class":136},[76,163703,33215],{"class":86},[76,163705,163706,163708,163710],{"class":78,"line":96},[76,163707,157229],{"class":86},[76,163709,133],{"class":82},[76,163711,47302],{"class":136},[76,163713,163714],{"class":78,"line":1143},[76,163715,2365],{"emptyLinePlaceholder":2364},[76,163717,163718,163720,163722,163724],{"class":78,"line":1158},[76,163719,2990],{"class":82},[76,163721,157752],{"class":86},[76,163723,26012],{"class":82},[76,163725,163726],{"class":86}," scores:\n",[76,163728,163729,163731,163733],{"class":78,"line":1164},[76,163730,159276],{"class":86},[76,163732,9444],{"class":82},[76,163734,1543],{"class":86},[76,163736,163737],{"class":78,"line":1178},[76,163738,2365],{"emptyLinePlaceholder":2364},[76,163740,163741,163744,163746,163749,163751,163753],{"class":78,"line":1184},[76,163742,163743],{"class":86},"avg ",[76,163745,133],{"class":82},[76,163747,163748],{"class":86}," total ",[76,163750,672],{"class":82},[76,163752,7298],{"class":136},[76,163754,163755],{"class":86},"(scores)\n",[76,163757,163758,163760,163762,163764,163767,163769,163772,163774,163776,163778],{"class":78,"line":1275},[76,163759,30384],{"class":136},[76,163761,87],{"class":86},[76,163763,140],{"class":82},[76,163765,163766],{"class":192},"\"平均分:",[76,163768,984],{"class":136},[76,163770,163771],{"class":86},"avg",[76,163773,157128],{"class":82},[76,163775,1034],{"class":136},[76,163777,339],{"class":192},[76,163779,93],{"class":86},[16,163781,163783],{"id":163782},"_66-元组tuple","6.6 元组tuple",[21,163785,163786],{},"元组和列表类似，但不可修改。",[66,163788,163790],{"className":30347,"code":163789,"language":30349,"meta":71,"style":71},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[73,163791,163792,163809],{"__ignoreMap":71},[76,163793,163794,163797,163799,163801,163803,163805,163807],{"class":78,"line":79},[76,163795,163796],{"class":86},"point ",[76,163798,133],{"class":82},[76,163800,1622],{"class":86},[76,163802,534],{"class":136},[76,163804,12402],{"class":86},[76,163806,788],{"class":136},[76,163808,93],{"class":86},[76,163810,163811,163813,163815,163817,163819,163821,163823,163825,163827],{"class":78,"line":96},[76,163812,116283],{"class":86},[76,163814,133],{"class":82},[76,163816,1622],{"class":86},[76,163818,149857],{"class":192},[76,163820,12402],{"class":86},[76,163822,738],{"class":136},[76,163824,12402],{"class":86},[76,163826,69238],{"class":192},[76,163828,93],{"class":86},[21,163830,163831],{},"单元素元组必须加逗号：",[66,163833,163835],{"className":30347,"code":163834,"language":30349,"meta":71,"style":71},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[73,163836,163837,163851,163864,163868,163882],{"__ignoreMap":71},[76,163838,163839,163842,163844,163846,163848],{"class":78,"line":79},[76,163840,163841],{"class":86},"t1 ",[76,163843,133],{"class":82},[76,163845,1622],{"class":86},[76,163847,534],{"class":136},[76,163849,163850],{"class":86},",)\n",[76,163852,163853,163856,163858,163860,163862],{"class":78,"line":96},[76,163854,163855],{"class":86},"t2 ",[76,163857,133],{"class":82},[76,163859,1622],{"class":86},[76,163861,534],{"class":136},[76,163863,93],{"class":86},[76,163865,163866],{"class":78,"line":1143},[76,163867,2365],{"emptyLinePlaceholder":2364},[76,163869,163870,163872,163874,163876,163879],{"class":78,"line":1158},[76,163871,30384],{"class":136},[76,163873,87],{"class":86},[76,163875,103076],{"class":136},[76,163877,163878],{"class":86},"(t1))  ",[76,163880,163881],{"class":146},"# tuple\n",[76,163883,163884,163886,163888,163890,163893],{"class":78,"line":1164},[76,163885,30384],{"class":136},[76,163887,87],{"class":86},[76,163889,103076],{"class":136},[76,163891,163892],{"class":86},"(t2))  ",[76,163894,163895],{"class":146},"# int\n",[21,163897,163898],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[16,163900,163902],{"id":163901},"_67-字符串str","6.7 字符串str",[21,163904,163905],{},"字符串也是序列，可以索引、切片和遍历。",[66,163907,163909],{"className":30347,"code":163908,"language":30349,"meta":71,"style":71},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[73,163910,163911,163919,163923,163934,163946,163950,163961],{"__ignoreMap":71},[76,163912,163913,163915,163917],{"class":78,"line":79},[76,163914,156413],{"class":86},[76,163916,133],{"class":82},[76,163918,159650],{"class":192},[76,163920,163921],{"class":78,"line":96},[76,163922,2365],{"emptyLinePlaceholder":2364},[76,163924,163925,163927,163930,163932],{"class":78,"line":1143},[76,163926,30384],{"class":136},[76,163928,163929],{"class":86},"(text[",[76,163931,279],{"class":136},[76,163933,4622],{"class":86},[76,163935,163936,163938,163940,163942,163944],{"class":78,"line":1158},[76,163937,30384],{"class":136},[76,163939,163929],{"class":86},[76,163941,620],{"class":82},[76,163943,305],{"class":136},[76,163945,4622],{"class":86},[76,163947,163948],{"class":78,"line":1164},[76,163949,2365],{"emptyLinePlaceholder":2364},[76,163951,163952,163954,163956,163958],{"class":78,"line":1178},[76,163953,2990],{"class":82},[76,163955,159661],{"class":86},[76,163957,26012],{"class":82},[76,163959,163960],{"class":86}," text:\n",[76,163962,163963,163965],{"class":78,"line":1184},[76,163964,31268],{"class":136},[76,163966,159672],{"class":86},[21,163968,163969],{},"字符串不可变：",[66,163971,163973],{"className":30347,"code":163972,"language":30349,"meta":71,"style":71},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[73,163974,163975,163983],{"__ignoreMap":71},[76,163976,163977,163979,163981],{"class":78,"line":79},[76,163978,156413],{"class":86},[76,163980,133],{"class":82},[76,163982,159650],{"class":192},[76,163984,163985,163988,163990,163992,163994,163997],{"class":78,"line":96},[76,163986,163987],{"class":86},"text[",[76,163989,279],{"class":136},[76,163991,4408],{"class":86},[76,163993,133],{"class":82},[76,163995,163996],{"class":192}," \"P\"",[76,163998,163999],{"class":146},"  # 报错\n",[21,164001,164002],{},"如果要得到新字符串：",[66,164004,164006],{"className":30347,"code":164005,"language":30349,"meta":71,"style":71},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[73,164007,164008,164016,164034],{"__ignoreMap":71},[76,164009,164010,164012,164014],{"class":78,"line":79},[76,164011,156413],{"class":86},[76,164013,133],{"class":82},[76,164015,159650],{"class":192},[76,164017,164018,164020,164022,164024,164026,164029,164031],{"class":78,"line":96},[76,164019,156413],{"class":86},[76,164021,133],{"class":82},[76,164023,163996],{"class":192},[76,164025,45535],{"class":82},[76,164027,164028],{"class":86}," text[",[76,164030,305],{"class":136},[76,164032,164033],{"class":86},":]\n",[76,164035,164036,164038],{"class":78,"line":1143},[76,164037,30384],{"class":136},[76,164039,164040],{"class":86},"(text)\n",[16,164042,164044],{"id":164043},"_68-切片","6.8 切片",[21,164046,164047],{},"切片用于从序列中取一部分。",[66,164049,164051],{"className":30347,"code":164050,"language":30349,"meta":71,"style":71},"序列[开始:结束:步长]\n",[73,164052,164053],{"__ignoreMap":71},[76,164054,164055],{"class":78,"line":79},[76,164056,164050],{"class":86},[21,164058,164059],{},"结束位置不包含。",[66,164061,164063],{"className":30347,"code":164062,"language":30349,"meta":71,"style":71},"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",[73,164064,164065,164102,164106,164125,164140,164154,164168],{"__ignoreMap":71},[76,164066,164067,164070,164072,164074,164076,164078,164080,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100],{"class":78,"line":79},[76,164068,164069],{"class":86},"nums ",[76,164071,133],{"class":82},[76,164073,52195],{"class":86},[76,164075,279],{"class":136},[76,164077,12402],{"class":86},[76,164079,305],{"class":136},[76,164081,12402],{"class":86},[76,164083,165],{"class":136},[76,164085,12402],{"class":86},[76,164087,159],{"class":136},[76,164089,12402],{"class":86},[76,164091,381],{"class":136},[76,164093,12402],{"class":86},[76,164095,407],{"class":136},[76,164097,12402],{"class":86},[76,164099,432],{"class":136},[76,164101,33215],{"class":86},[76,164103,164104],{"class":78,"line":96},[76,164105,2365],{"emptyLinePlaceholder":2364},[76,164107,164108,164110,164113,164115,164117,164119,164122],{"class":78,"line":1143},[76,164109,30384],{"class":136},[76,164111,164112],{"class":86},"(nums[",[76,164114,305],{"class":136},[76,164116,947],{"class":86},[76,164118,381],{"class":136},[76,164120,164121],{"class":86},"])    ",[76,164123,164124],{"class":146},"# [1, 2, 3]\n",[76,164126,164127,164129,164132,164134,164137],{"class":78,"line":1158},[76,164128,30384],{"class":136},[76,164130,164131],{"class":86},"(nums[:",[76,164133,159],{"class":136},[76,164135,164136],{"class":86},"])     ",[76,164138,164139],{"class":146},"# [0, 1, 2]\n",[76,164141,164142,164144,164146,164148,164151],{"class":78,"line":1164},[76,164143,30384],{"class":136},[76,164145,164112],{"class":86},[76,164147,159],{"class":136},[76,164149,164150],{"class":86},":])     ",[76,164152,164153],{"class":146},"# [3, 4, 5, 6]\n",[76,164155,164156,164158,164161,164163,164165],{"class":78,"line":1178},[76,164157,30384],{"class":136},[76,164159,164160],{"class":86},"(nums[::",[76,164162,165],{"class":136},[76,164164,164121],{"class":86},[76,164166,164167],{"class":146},"# [0, 2, 4, 6]\n",[76,164169,164170,164172,164174,164176,164178,164181],{"class":78,"line":1184},[76,164171,30384],{"class":136},[76,164173,164160],{"class":86},[76,164175,620],{"class":82},[76,164177,305],{"class":136},[76,164179,164180],{"class":86},"])   ",[76,164182,164183],{"class":146},"# 反转\n",[21,164185,164186],{},"字符串切片：",[66,164188,164190],{"className":30347,"code":164189,"language":30349,"meta":71,"style":71},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[73,164191,164192,164201,164215],{"__ignoreMap":71},[76,164193,164194,164196,164198],{"class":78,"line":79},[76,164195,156413],{"class":86},[76,164197,133],{"class":82},[76,164199,164200],{"class":192}," \"abcdef\"\n",[76,164202,164203,164205,164207,164209,164211,164213],{"class":78,"line":96},[76,164204,30384],{"class":136},[76,164206,163929],{"class":86},[76,164208,305],{"class":136},[76,164210,947],{"class":86},[76,164212,381],{"class":136},[76,164214,4622],{"class":86},[76,164216,164217,164219,164222,164224,164226],{"class":78,"line":1143},[76,164218,30384],{"class":136},[76,164220,164221],{"class":86},"(text[::",[76,164223,620],{"class":82},[76,164225,305],{"class":136},[76,164227,4622],{"class":86},[16,164229,164231],{"id":164230},"_69-集合set","6.9 集合set",[21,164233,164234],{},"集合特点：",[29,164236,164237,164240,164243],{},[32,164238,164239],{},"无序。",[32,164241,164242],{},"元素不重复。",[32,164244,164245],{},"可以做交集、并集、差集。",[66,164247,164249],{"className":30347,"code":164248,"language":30349,"meta":71,"style":71},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[73,164250,164251,164279],{"__ignoreMap":71},[76,164252,164253,164255,164257,164259,164261,164263,164265,164267,164269,164271,164273,164275,164277],{"class":78,"line":79},[76,164254,164069],{"class":86},[76,164256,133],{"class":82},[76,164258,4413],{"class":86},[76,164260,305],{"class":136},[76,164262,12402],{"class":86},[76,164264,165],{"class":136},[76,164266,12402],{"class":86},[76,164268,159],{"class":136},[76,164270,12402],{"class":86},[76,164272,159],{"class":136},[76,164274,12402],{"class":86},[76,164276,381],{"class":136},[76,164278,1529],{"class":86},[76,164280,164281,164283],{"class":78,"line":96},[76,164282,30384],{"class":136},[76,164284,164285],{"class":86},"(nums)\n",[21,164287,164288],{},"创建空集合：",[66,164290,164292],{"className":30347,"code":164291,"language":30349,"meta":71,"style":71},"s = set()\n",[73,164293,164294],{"__ignoreMap":71},[76,164295,164296,164298,164300,164302],{"class":78,"line":79},[76,164297,10546],{"class":86},[76,164299,133],{"class":82},[76,164301,119691],{"class":136},[76,164303,1940],{"class":86},[21,164305,8992,164306,164308],{},[73,164307,32428],{}," 是空字典，不是空集合。",[21,164310,164311],{},"集合常用操作：",[66,164313,164315],{"className":30347,"code":164314,"language":30349,"meta":71,"style":71},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[73,164316,164317,164337,164341,164350,164359,164368],{"__ignoreMap":71},[76,164318,164319,164321,164323,164325,164327,164329,164331,164333,164335],{"class":78,"line":79},[76,164320,10546],{"class":86},[76,164322,133],{"class":82},[76,164324,4413],{"class":86},[76,164326,305],{"class":136},[76,164328,12402],{"class":86},[76,164330,165],{"class":136},[76,164332,12402],{"class":86},[76,164334,159],{"class":136},[76,164336,1529],{"class":86},[76,164338,164339],{"class":78,"line":96},[76,164340,2365],{"emptyLinePlaceholder":2364},[76,164342,164343,164346,164348],{"class":78,"line":1143},[76,164344,164345],{"class":86},"s.add(",[76,164347,381],{"class":136},[76,164349,93],{"class":86},[76,164351,164352,164355,164357],{"class":78,"line":1158},[76,164353,164354],{"class":86},"s.remove(",[76,164356,165],{"class":136},[76,164358,93],{"class":86},[76,164360,164361,164364,164366],{"class":78,"line":1164},[76,164362,164363],{"class":86},"s.discard(",[76,164365,534],{"class":136},[76,164367,93],{"class":86},[76,164369,164370,164372,164374,164376],{"class":78,"line":1178},[76,164371,30384],{"class":136},[76,164373,87],{"class":86},[76,164375,7325],{"class":136},[76,164377,164378],{"class":86},"(s))\n",[21,164380,164381],{},"交并差：",[66,164383,164385],{"className":30347,"code":164384,"language":30349,"meta":71,"style":71},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[73,164386,164387,164407,164427,164431,164446,164459],{"__ignoreMap":71},[76,164388,164389,164391,164393,164395,164397,164399,164401,164403,164405],{"class":78,"line":79},[76,164390,10886],{"class":86},[76,164392,133],{"class":82},[76,164394,4413],{"class":86},[76,164396,305],{"class":136},[76,164398,12402],{"class":86},[76,164400,165],{"class":136},[76,164402,12402],{"class":86},[76,164404,159],{"class":136},[76,164406,1529],{"class":86},[76,164408,164409,164411,164413,164415,164417,164419,164421,164423,164425],{"class":78,"line":96},[76,164410,10912],{"class":86},[76,164412,133],{"class":82},[76,164414,4413],{"class":86},[76,164416,159],{"class":136},[76,164418,12402],{"class":86},[76,164420,381],{"class":136},[76,164422,12402],{"class":86},[76,164424,407],{"class":136},[76,164426,1529],{"class":86},[76,164428,164429],{"class":78,"line":1143},[76,164430,2365],{"emptyLinePlaceholder":2364},[76,164432,164433,164435,164438,164440,164443],{"class":78,"line":1158},[76,164434,30384],{"class":136},[76,164436,164437],{"class":86},"(a ",[76,164439,441],{"class":82},[76,164441,164442],{"class":86}," b)  ",[76,164444,164445],{"class":146},"# 交集\n",[76,164447,164448,164450,164452,164454,164456],{"class":78,"line":1164},[76,164449,30384],{"class":136},[76,164451,164437],{"class":86},[76,164453,1009],{"class":82},[76,164455,164442],{"class":86},[76,164457,164458],{"class":146},"# 并集\n",[76,164460,164461,164463,164465,164467,164469],{"class":78,"line":1178},[76,164462,30384],{"class":136},[76,164464,164437],{"class":86},[76,164466,620],{"class":82},[76,164468,164442],{"class":86},[76,164470,164471],{"class":146},"# 差集\n",[16,164473,164475],{"id":164474},"_610-字典dict","6.10 字典dict",[21,164477,164478],{},"字典通过 key-value 保存数据。",[66,164480,164482],{"className":30347,"code":164481,"language":30349,"meta":71,"style":71},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[73,164483,164484,164492,164502,164513,164523],{"__ignoreMap":71},[76,164485,164486,164488,164490],{"class":78,"line":79},[76,164487,149450],{"class":86},[76,164489,133],{"class":82},[76,164491,15539],{"class":86},[76,164493,164494,164496,164498,164500],{"class":78,"line":96},[76,164495,146989],{"class":192},[76,164497,51406],{"class":86},[76,164499,149857],{"class":192},[76,164501,31435],{"class":86},[76,164503,164504,164507,164509,164511],{"class":78,"line":1143},[76,164505,164506],{"class":192},"    \"age\"",[76,164508,51406],{"class":86},[76,164510,738],{"class":136},[76,164512,31435],{"class":86},[76,164514,164515,164518,164520],{"class":78,"line":1158},[76,164516,164517],{"class":192},"    \"score\"",[76,164519,51406],{"class":86},[76,164521,164522],{"class":136},"95\n",[76,164524,164525],{"class":78,"line":1164},[76,164526,1529],{"class":86},[21,164528,164529],{},"获取值：",[66,164531,164533],{"className":30347,"code":164532,"language":30349,"meta":71,"style":71},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[73,164534,164535,164546],{"__ignoreMap":71},[76,164536,164537,164539,164542,164544],{"class":78,"line":79},[76,164538,30384],{"class":136},[76,164540,164541],{"class":86},"(student[",[76,164543,62648],{"class":192},[76,164545,4622],{"class":86},[76,164547,164548,164550,164553,164555],{"class":78,"line":96},[76,164549,30384],{"class":136},[76,164551,164552],{"class":86},"(student.get(",[76,164554,62648],{"class":192},[76,164556,30466],{"class":86},[21,164558,15355],{},[66,164560,164562],{"className":30347,"code":164561,"language":30349,"meta":71,"style":71},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[73,164563,164564,164577],{"__ignoreMap":71},[76,164565,164566,164568,164571,164574],{"class":78,"line":79},[76,164567,152828],{"class":86},[76,164569,164570],{"class":192},"\"address\"",[76,164572,164573],{"class":86},"]     ",[76,164575,164576],{"class":146},"# key不存在会报错\n",[76,164578,164579,164582,164584,164586],{"class":78,"line":96},[76,164580,164581],{"class":86},"student.get(",[76,164583,164570],{"class":192},[76,164585,13681],{"class":86},[76,164587,164588],{"class":146},"# key不存在返回None\n",[21,164590,164591],{},"设置默认值：",[66,164593,164595],{"className":30347,"code":164594,"language":30349,"meta":71,"style":71},"print(student.get(\"address\", \"未知\"))\n",[73,164596,164597],{"__ignoreMap":71},[76,164598,164599,164601,164603,164605,164607,164610],{"class":78,"line":79},[76,164600,30384],{"class":136},[76,164602,164552],{"class":86},[76,164604,164570],{"class":192},[76,164606,12402],{"class":86},[76,164608,164609],{"class":192},"\"未知\"",[76,164611,30466],{"class":86},[21,164613,164614],{},"新增和修改：",[66,164616,164618],{"className":30347,"code":164617,"language":30349,"meta":71,"style":71},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[73,164619,164620,164633],{"__ignoreMap":71},[76,164621,164622,164624,164626,164628,164630],{"class":78,"line":79},[76,164623,152828],{"class":86},[76,164625,69093],{"class":192},[76,164627,4408],{"class":86},[76,164629,133],{"class":82},[76,164631,164632],{"class":136}," 19\n",[76,164634,164635,164637,164639,164641,164643],{"class":78,"line":96},[76,164636,152828],{"class":86},[76,164638,164570],{"class":192},[76,164640,4408],{"class":86},[76,164642,133],{"class":82},[76,164644,164645],{"class":192}," \"北京\"\n",[21,164647,164648],{},"删除：",[66,164650,164652],{"className":30347,"code":164651,"language":30349,"meta":71,"style":71},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[73,164653,164654,164667,164677],{"__ignoreMap":71},[76,164655,164656,164658,164660,164663,164665],{"class":78,"line":79},[76,164657,155327],{"class":86},[76,164659,133],{"class":82},[76,164661,164662],{"class":86}," student.pop(",[76,164664,151441],{"class":192},[76,164666,93],{"class":86},[76,164668,164669,164671,164673,164675],{"class":78,"line":96},[76,164670,163352],{"class":82},[76,164672,152118],{"class":86},[76,164674,69093],{"class":192},[76,164676,33215],{"class":86},[76,164678,164679],{"class":78,"line":1143},[76,164680,164681],{"class":86},"student.clear()\n",[16,164683,164685],{"id":164684},"_611-字典遍历","6.11 字典遍历",[21,164687,164688],{},"遍历 key：",[66,164690,164692],{"className":30347,"code":164691,"language":30349,"meta":71,"style":71},"for key in student:\n    print(key, student[key])\n",[73,164693,164694,164706],{"__ignoreMap":71},[76,164695,164696,164698,164701,164703],{"class":78,"line":79},[76,164697,2990],{"class":82},[76,164699,164700],{"class":86}," key ",[76,164702,26012],{"class":82},[76,164704,164705],{"class":86}," student:\n",[76,164707,164708,164710],{"class":78,"line":96},[76,164709,31268],{"class":136},[76,164711,164712],{"class":86},"(key, student[key])\n",[21,164714,164715],{},"遍历 value：",[66,164717,164719],{"className":30347,"code":164718,"language":30349,"meta":71,"style":71},"for value in student.values():\n    print(value)\n",[73,164720,164721,164733],{"__ignoreMap":71},[76,164722,164723,164725,164728,164730],{"class":78,"line":79},[76,164724,2990],{"class":82},[76,164726,164727],{"class":86}," value ",[76,164729,26012],{"class":82},[76,164731,164732],{"class":86}," student.values():\n",[76,164734,164735,164737],{"class":78,"line":96},[76,164736,31268],{"class":136},[76,164738,164739],{"class":86},"(value)\n",[21,164741,164742],{},"遍历 key 和 value：",[66,164744,164746],{"className":30347,"code":164745,"language":30349,"meta":71,"style":71},"for key, value in student.items():\n    print(key, value)\n",[73,164747,164748,164760],{"__ignoreMap":71},[76,164749,164750,164752,164755,164757],{"class":78,"line":79},[76,164751,2990],{"class":82},[76,164753,164754],{"class":86}," key, value ",[76,164756,26012],{"class":82},[76,164758,164759],{"class":86}," student.items():\n",[76,164761,164762,164764],{"class":78,"line":96},[76,164763,31268],{"class":136},[76,164765,164766],{"class":86},"(key, value)\n",[16,164768,164770],{"id":164769},"_612-嵌套容器","6.12 嵌套容器",[21,164772,164773],{},"列表中保存字典，是项目中最常见的结构之一。",[66,164775,164777],{"className":30347,"code":164776,"language":30349,"meta":71,"style":71},"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",[73,164778,164779,164787,164815,164843,164871,164875,164879,164889],{"__ignoreMap":71},[76,164780,164781,164783,164785],{"class":78,"line":79},[76,164782,159685],{"class":86},[76,164784,133],{"class":82},[76,164786,55416],{"class":86},[76,164788,164789,164791,164793,164795,164797,164799,164801,164803,164805,164807,164809,164811,164813],{"class":78,"line":96},[76,164790,148354],{"class":86},[76,164792,62648],{"class":192},[76,164794,51406],{"class":86},[76,164796,149857],{"class":192},[76,164798,12402],{"class":86},[76,164800,69093],{"class":192},[76,164802,51406],{"class":86},[76,164804,738],{"class":136},[76,164806,12402],{"class":86},[76,164808,151441],{"class":192},[76,164810,51406],{"class":86},[76,164812,1077],{"class":136},[76,164814,4895],{"class":86},[76,164816,164817,164819,164821,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841],{"class":78,"line":1143},[76,164818,148354],{"class":86},[76,164820,62648],{"class":192},[76,164822,51406],{"class":86},[76,164824,150905],{"class":192},[76,164826,12402],{"class":86},[76,164828,69093],{"class":192},[76,164830,51406],{"class":86},[76,164832,713],{"class":136},[76,164834,12402],{"class":86},[76,164836,151441],{"class":192},[76,164838,51406],{"class":86},[76,164840,899],{"class":136},[76,164842,4895],{"class":86},[76,164844,164845,164847,164849,164851,164853,164855,164857,164859,164861,164863,164865,164867,164869],{"class":78,"line":1158},[76,164846,148354],{"class":86},[76,164848,62648],{"class":192},[76,164850,51406],{"class":86},[76,164852,159700],{"class":192},[76,164854,12402],{"class":86},[76,164856,69093],{"class":192},[76,164858,51406],{"class":86},[76,164860,763],{"class":136},[76,164862,12402],{"class":86},[76,164864,151441],{"class":192},[76,164866,51406],{"class":86},[76,164868,494],{"class":136},[76,164870,4895],{"class":86},[76,164872,164873],{"class":78,"line":1164},[76,164874,33215],{"class":86},[76,164876,164877],{"class":78,"line":1178},[76,164878,2365],{"emptyLinePlaceholder":2364},[76,164880,164881,164883,164885,164887],{"class":78,"line":1184},[76,164882,2990],{"class":82},[76,164884,152106],{"class":86},[76,164886,26012],{"class":82},[76,164888,152111],{"class":86},[76,164890,164891,164893,164895,164897,164900,164902],{"class":78,"line":1275},[76,164892,31268],{"class":136},[76,164894,164541],{"class":86},[76,164896,62648],{"class":192},[76,164898,164899],{"class":86},"], student[",[76,164901,151441],{"class":192},[76,164903,4622],{"class":86},[21,164905,164906],{},"统计平均分：",[66,164908,164910],{"className":30347,"code":164909,"language":30349,"meta":71,"style":71},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[73,164911,164912,164920,164924,164934,164946,164950,164965],{"__ignoreMap":71},[76,164913,164914,164916,164918],{"class":78,"line":79},[76,164915,157229],{"class":86},[76,164917,133],{"class":82},[76,164919,47302],{"class":136},[76,164921,164922],{"class":78,"line":96},[76,164923,2365],{"emptyLinePlaceholder":2364},[76,164925,164926,164928,164930,164932],{"class":78,"line":1143},[76,164927,2990],{"class":82},[76,164929,152106],{"class":86},[76,164931,26012],{"class":82},[76,164933,152111],{"class":86},[76,164935,164936,164938,164940,164942,164944],{"class":78,"line":1158},[76,164937,159276],{"class":86},[76,164939,9444],{"class":82},[76,164941,152118],{"class":86},[76,164943,151441],{"class":192},[76,164945,33215],{"class":86},[76,164947,164948],{"class":78,"line":1164},[76,164949,2365],{"emptyLinePlaceholder":2364},[76,164951,164952,164954,164956,164958,164960,164962],{"class":78,"line":1178},[76,164953,163743],{"class":86},[76,164955,133],{"class":82},[76,164957,163748],{"class":86},[76,164959,672],{"class":82},[76,164961,7298],{"class":136},[76,164963,164964],{"class":86},"(students)\n",[76,164966,164967,164969,164971,164973,164975,164977,164979,164981,164983,164985],{"class":78,"line":1184},[76,164968,30384],{"class":136},[76,164970,87],{"class":86},[76,164972,140],{"class":82},[76,164974,163766],{"class":192},[76,164976,984],{"class":136},[76,164978,163771],{"class":86},[76,164980,157128],{"class":82},[76,164982,1034],{"class":136},[76,164984,339],{"class":192},[76,164986,93],{"class":86},[21,164988,164989],{},"查找学生：",[66,164991,164993],{"className":30347,"code":164992,"language":30349,"meta":71,"style":71},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[73,164994,164995,165010,165014,165024,165038,165044,165048,165054],{"__ignoreMap":71},[76,164996,164997,164999,165001,165003,165005,165008],{"class":78,"line":79},[76,164998,111547],{"class":86},[76,165000,133],{"class":82},[76,165002,60574],{"class":136},[76,165004,87],{"class":86},[76,165006,165007],{"class":192},"\"请输入学生姓名:\"",[76,165009,93],{"class":86},[76,165011,165012],{"class":78,"line":96},[76,165013,2365],{"emptyLinePlaceholder":2364},[76,165015,165016,165018,165020,165022],{"class":78,"line":1143},[76,165017,2990],{"class":82},[76,165019,152106],{"class":86},[76,165021,26012],{"class":82},[76,165023,152111],{"class":86},[76,165025,165026,165028,165030,165032,165034,165036],{"class":78,"line":1158},[76,165027,3066],{"class":82},[76,165029,152118],{"class":86},[76,165031,62648],{"class":192},[76,165033,4408],{"class":86},[76,165035,2914],{"class":82},[76,165037,160401],{"class":86},[76,165039,165040,165042],{"class":78,"line":1164},[76,165041,32420],{"class":136},[76,165043,150011],{"class":86},[76,165045,165046],{"class":78,"line":1178},[76,165047,31596],{"class":82},[76,165049,165050,165052],{"class":78,"line":1184},[76,165051,1665],{"class":82},[76,165053,3704],{"class":86},[76,165055,165056,165058,165060,165063],{"class":78,"line":1275},[76,165057,31268],{"class":136},[76,165059,87],{"class":86},[76,165061,165062],{"class":192},"\"没有找到\"",[76,165064,93],{"class":86},[16,165066,165068],{"id":165067},"_613-容器通用操作","6.13 容器通用操作",[21,165070,165071],{},"长度：",[66,165073,165075],{"className":30347,"code":165074,"language":30349,"meta":71,"style":71},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[73,165076,165077,165096,165106],{"__ignoreMap":71},[76,165078,165079,165081,165084,165086,165088,165090,165092,165094],{"class":78,"line":79},[76,165080,7325],{"class":136},[76,165082,165083],{"class":86},"([",[76,165085,305],{"class":136},[76,165087,12402],{"class":86},[76,165089,165],{"class":136},[76,165091,12402],{"class":86},[76,165093,159],{"class":136},[76,165095,4622],{"class":86},[76,165097,165098,165100,165102,165104],{"class":78,"line":96},[76,165099,7325],{"class":136},[76,165101,87],{"class":86},[76,165103,155849],{"class":192},[76,165105,93],{"class":86},[76,165107,165108,165110,165113,165115,165117,165119],{"class":78,"line":1143},[76,165109,7325],{"class":136},[76,165111,165112],{"class":86},"({",[76,165114,62648],{"class":192},[76,165116,51406],{"class":86},[76,165118,149857],{"class":192},[76,165120,165121],{"class":86},"})\n",[21,165123,165124],{},"最大最小：",[66,165126,165128],{"className":30347,"code":165127,"language":30349,"meta":71,"style":71},"max([1, 2, 3])\nmin([1, 2, 3])\n",[73,165129,165130,165148],{"__ignoreMap":71},[76,165131,165132,165134,165136,165138,165140,165142,165144,165146],{"class":78,"line":79},[76,165133,5982],{"class":136},[76,165135,165083],{"class":86},[76,165137,305],{"class":136},[76,165139,12402],{"class":86},[76,165141,165],{"class":136},[76,165143,12402],{"class":86},[76,165145,159],{"class":136},[76,165147,4622],{"class":86},[76,165149,165150,165153,165155,165157,165159,165161,165163,165165],{"class":78,"line":96},[76,165151,165152],{"class":136},"min",[76,165154,165083],{"class":86},[76,165156,305],{"class":136},[76,165158,12402],{"class":86},[76,165160,165],{"class":136},[76,165162,12402],{"class":86},[76,165164,159],{"class":136},[76,165166,4622],{"class":86},[21,165168,165169],{},"求和：",[66,165171,165173],{"className":30347,"code":165172,"language":30349,"meta":71,"style":71},"sum([1, 2, 3])\n",[73,165174,165175],{"__ignoreMap":71},[76,165176,165177,165180,165182,165184,165186,165188,165190,165192],{"class":78,"line":79},[76,165178,165179],{"class":136},"sum",[76,165181,165083],{"class":86},[76,165183,305],{"class":136},[76,165185,12402],{"class":86},[76,165187,165],{"class":136},[76,165189,12402],{"class":86},[76,165191,159],{"class":136},[76,165193,4622],{"class":86},[21,165195,163440],{},[66,165197,165199],{"className":30347,"code":165198,"language":30349,"meta":71,"style":71},"sorted([3, 1, 2])\n",[73,165200,165201],{"__ignoreMap":71},[76,165202,165203,165206,165208,165210,165212,165214,165216,165218],{"class":78,"line":79},[76,165204,165205],{"class":136},"sorted",[76,165207,165083],{"class":86},[76,165209,159],{"class":136},[76,165211,12402],{"class":86},[76,165213,305],{"class":136},[76,165215,12402],{"class":86},[76,165217,165],{"class":136},[76,165219,4622],{"class":86},[21,165221,165222],{},"类型转换：",[66,165224,165226],{"className":30347,"code":165225,"language":30349,"meta":71,"style":71},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[73,165227,165228,165238,165256],{"__ignoreMap":71},[76,165229,165230,165232,165234,165236],{"class":78,"line":79},[76,165231,154039],{"class":136},[76,165233,87],{"class":86},[76,165235,155849],{"class":192},[76,165237,93],{"class":86},[76,165239,165240,165242,165244,165246,165248,165250,165252,165254],{"class":78,"line":96},[76,165241,155234],{"class":136},[76,165243,165083],{"class":86},[76,165245,305],{"class":136},[76,165247,12402],{"class":86},[76,165249,165],{"class":136},[76,165251,12402],{"class":86},[76,165253,159],{"class":136},[76,165255,4622],{"class":86},[76,165257,165258,165260,165262,165264,165266,165268,165270,165272,165274,165276],{"class":78,"line":1143},[76,165259,155259],{"class":136},[76,165261,165083],{"class":86},[76,165263,305],{"class":136},[76,165265,12402],{"class":86},[76,165267,305],{"class":136},[76,165269,12402],{"class":86},[76,165271,165],{"class":136},[76,165273,12402],{"class":86},[76,165275,159],{"class":136},[76,165277,4622],{"class":86},[21,165279,165280],{},"成员判断：",[66,165282,165284],{"className":30347,"code":165283,"language":30349,"meta":71,"style":71},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[73,165285,165286,165303,165327],{"__ignoreMap":71},[76,165287,165288,165290,165292,165295,165298,165301],{"class":78,"line":79},[76,165289,30384],{"class":136},[76,165291,87],{"class":86},[76,165293,165294],{"class":192},"\"a\"",[76,165296,165297],{"class":82}," in",[76,165299,165300],{"class":192}," \"abc\"",[76,165302,93],{"class":86},[76,165304,165305,165307,165309,165311,165313,165315,165317,165319,165321,165323,165325],{"class":78,"line":96},[76,165306,30384],{"class":136},[76,165308,87],{"class":86},[76,165310,305],{"class":136},[76,165312,165297],{"class":82},[76,165314,52195],{"class":86},[76,165316,305],{"class":136},[76,165318,12402],{"class":86},[76,165320,165],{"class":136},[76,165322,12402],{"class":86},[76,165324,159],{"class":136},[76,165326,4622],{"class":86},[76,165328,165329,165331,165333,165335,165337,165339,165341,165343,165345],{"class":78,"line":1143},[76,165330,30384],{"class":136},[76,165332,87],{"class":86},[76,165334,62648],{"class":192},[76,165336,165297],{"class":82},[76,165338,4413],{"class":86},[76,165340,62648],{"class":192},[76,165342,51406],{"class":86},[76,165344,149857],{"class":192},[76,165346,165121],{"class":86},[16,165348,165350],{"id":165349},"_614-推导式","6.14 推导式",[21,165352,165353],{},"推导式用于快速生成容器。",[21,165355,165356],{},"列表推导式：",[66,165358,165360],{"className":30347,"code":165359,"language":30349,"meta":71,"style":71},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[73,165361,165362,165389],{"__ignoreMap":71},[76,165363,165364,165366,165368,165371,165373,165375,165377,165379,165381,165383,165385,165387],{"class":78,"line":79},[76,165365,164069],{"class":86},[76,165367,133],{"class":82},[76,165369,165370],{"class":86}," [i ",[76,165372,2990],{"class":82},[76,165374,9405],{"class":86},[76,165376,26012],{"class":82},[76,165378,32412],{"class":136},[76,165380,87],{"class":86},[76,165382,305],{"class":136},[76,165384,12402],{"class":86},[76,165386,432],{"class":136},[76,165388,97269],{"class":86},[76,165390,165391,165393],{"class":78,"line":96},[76,165392,30384],{"class":136},[76,165394,164285],{"class":86},[21,165396,165397],{},"带条件：",[66,165399,165401],{"className":30347,"code":165400,"language":30349,"meta":71,"style":71},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[73,165402,165403,165444],{"__ignoreMap":71},[76,165404,165405,165408,165410,165412,165414,165416,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442],{"class":78,"line":79},[76,165406,165407],{"class":86},"even_nums ",[76,165409,133],{"class":82},[76,165411,165370],{"class":86},[76,165413,2990],{"class":82},[76,165415,9405],{"class":86},[76,165417,26012],{"class":82},[76,165419,32412],{"class":136},[76,165421,87],{"class":86},[76,165423,305],{"class":136},[76,165425,12402],{"class":86},[76,165427,425],{"class":136},[76,165429,13681],{"class":86},[76,165431,1495],{"class":82},[76,165433,9405],{"class":86},[76,165435,416],{"class":82},[76,165437,14722],{"class":136},[76,165439,101528],{"class":82},[76,165441,4058],{"class":136},[76,165443,33215],{"class":86},[76,165445,165446,165448],{"class":78,"line":96},[76,165447,30384],{"class":136},[76,165449,165450],{"class":86},"(even_nums)\n",[21,165452,165453],{},"字典推导式：",[66,165455,165457],{"className":30347,"code":165456,"language":30349,"meta":71,"style":71},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[73,165458,165459,165493],{"__ignoreMap":71},[76,165460,165461,165464,165466,165469,165471,165473,165476,165478,165480,165482,165484,165486,165488,165490],{"class":78,"line":79},[76,165462,165463],{"class":86},"squares ",[76,165465,133],{"class":82},[76,165467,165468],{"class":86}," {i: i ",[76,165470,10628],{"class":82},[76,165472,14722],{"class":136},[76,165474,165475],{"class":82}," for",[76,165477,9405],{"class":86},[76,165479,26012],{"class":82},[76,165481,32412],{"class":136},[76,165483,87],{"class":86},[76,165485,305],{"class":136},[76,165487,12402],{"class":86},[76,165489,432],{"class":136},[76,165491,165492],{"class":86},")}\n",[76,165494,165495,165497],{"class":78,"line":96},[76,165496,30384],{"class":136},[76,165498,165499],{"class":86},"(squares)\n",[21,165501,165502],{},"集合推导式：",[66,165504,165506],{"className":30347,"code":165505,"language":30349,"meta":71,"style":71},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[73,165507,165508,165529],{"__ignoreMap":71},[76,165509,165510,165513,165515,165518,165520,165522,165524,165527],{"class":78,"line":79},[76,165511,165512],{"class":86},"chars ",[76,165514,133],{"class":82},[76,165516,165517],{"class":86}," {ch ",[76,165519,2990],{"class":82},[76,165521,159661],{"class":86},[76,165523,26012],{"class":82},[76,165525,165526],{"class":192}," \"hello\"",[76,165528,1529],{"class":86},[76,165530,165531,165533],{"class":78,"line":96},[76,165532,30384],{"class":136},[76,165534,165535],{"class":86},"(chars)\n",[21,165537,165538],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[16,165540,165542],{"id":165541},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[66,165544,165546],{"className":30347,"code":165545,"language":30349,"meta":71,"style":71},"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",[73,165547,165548,165556,165576,165596,165616,165636,165640,165644,165652,165666,165675,165679,165689,165701,165705,165725,165734,165738,165754,165759,165763,165777,165781,165803,165839],{"__ignoreMap":71},[76,165549,165550,165552,165554],{"class":78,"line":79},[76,165551,159685],{"class":86},[76,165553,133],{"class":82},[76,165555,55416],{"class":86},[76,165557,165558,165560,165562,165564,165566,165568,165570,165572,165574],{"class":78,"line":96},[76,165559,148354],{"class":86},[76,165561,62648],{"class":192},[76,165563,51406],{"class":86},[76,165565,149857],{"class":192},[76,165567,12402],{"class":86},[76,165569,151441],{"class":192},[76,165571,51406],{"class":86},[76,165573,1077],{"class":136},[76,165575,4895],{"class":86},[76,165577,165578,165580,165582,165584,165586,165588,165590,165592,165594],{"class":78,"line":1143},[76,165579,148354],{"class":86},[76,165581,62648],{"class":192},[76,165583,51406],{"class":86},[76,165585,150905],{"class":192},[76,165587,12402],{"class":86},[76,165589,151441],{"class":192},[76,165591,51406],{"class":86},[76,165593,899],{"class":136},[76,165595,4895],{"class":86},[76,165597,165598,165600,165602,165604,165606,165608,165610,165612,165614],{"class":78,"line":1158},[76,165599,148354],{"class":86},[76,165601,62648],{"class":192},[76,165603,51406],{"class":86},[76,165605,159700],{"class":192},[76,165607,12402],{"class":86},[76,165609,151441],{"class":192},[76,165611,51406],{"class":86},[76,165613,494],{"class":136},[76,165615,4895],{"class":86},[76,165617,165618,165620,165622,165624,165626,165628,165630,165632,165634],{"class":78,"line":1164},[76,165619,148354],{"class":86},[76,165621,62648],{"class":192},[76,165623,51406],{"class":86},[76,165625,163279],{"class":192},[76,165627,12402],{"class":86},[76,165629,151441],{"class":192},[76,165631,51406],{"class":86},[76,165633,970],{"class":136},[76,165635,4895],{"class":86},[76,165637,165638],{"class":78,"line":1178},[76,165639,33215],{"class":86},[76,165641,165642],{"class":78,"line":1184},[76,165643,2365],{"emptyLinePlaceholder":2364},[76,165645,165646,165648,165650],{"class":78,"line":1275},[76,165647,157229],{"class":86},[76,165649,133],{"class":82},[76,165651,47302],{"class":136},[76,165653,165654,165657,165659,165662,165664],{"class":78,"line":1281},[76,165655,165656],{"class":86},"max_student ",[76,165658,133],{"class":82},[76,165660,165661],{"class":86}," students[",[76,165663,279],{"class":136},[76,165665,33215],{"class":86},[76,165667,165668,165671,165673],{"class":78,"line":1293},[76,165669,165670],{"class":86},"passed ",[76,165672,133],{"class":82},[76,165674,51807],{"class":86},[76,165676,165677],{"class":78,"line":1576},[76,165678,2365],{"emptyLinePlaceholder":2364},[76,165680,165681,165683,165685,165687],{"class":78,"line":1581},[76,165682,2990],{"class":82},[76,165684,152106],{"class":86},[76,165686,26012],{"class":82},[76,165688,152111],{"class":86},[76,165690,165691,165693,165695,165697,165699],{"class":78,"line":1587},[76,165692,159276],{"class":86},[76,165694,9444],{"class":82},[76,165696,152118],{"class":86},[76,165698,151441],{"class":192},[76,165700,33215],{"class":86},[76,165702,165703],{"class":78,"line":1592},[76,165704,2365],{"emptyLinePlaceholder":2364},[76,165706,165707,165709,165711,165713,165715,165717,165720,165722],{"class":78,"line":1606},[76,165708,3066],{"class":82},[76,165710,152118],{"class":86},[76,165712,151441],{"class":192},[76,165714,4408],{"class":86},[76,165716,1048],{"class":82},[76,165718,165719],{"class":86}," max_student[",[76,165721,151441],{"class":192},[76,165723,165724],{"class":86},"]:\n",[76,165726,165727,165730,165732],{"class":78,"line":1611},[76,165728,165729],{"class":86},"        max_student ",[76,165731,133],{"class":82},[76,165733,152134],{"class":86},[76,165735,165736],{"class":78,"line":1617},[76,165737,2365],{"emptyLinePlaceholder":2364},[76,165739,165740,165742,165744,165746,165748,165750,165752],{"class":78,"line":1638},[76,165741,3066],{"class":82},[76,165743,152118],{"class":86},[76,165745,151441],{"class":192},[76,165747,4408],{"class":86},[76,165749,1674],{"class":82},[76,165751,157806],{"class":136},[76,165753,3704],{"class":86},[76,165755,165756],{"class":78,"line":1643},[76,165757,165758],{"class":86},"        passed.append(student)\n",[76,165760,165761],{"class":78,"line":1657},[76,165762,2365],{"emptyLinePlaceholder":2364},[76,165764,165765,165767,165769,165771,165773,165775],{"class":78,"line":1662},[76,165766,163743],{"class":86},[76,165768,133],{"class":82},[76,165770,163748],{"class":86},[76,165772,672],{"class":82},[76,165774,7298],{"class":136},[76,165776,164964],{"class":86},[76,165778,165779],{"class":78,"line":1691},[76,165780,2365],{"emptyLinePlaceholder":2364},[76,165782,165783,165785,165787,165789,165791,165793,165795,165797,165799,165801],{"class":78,"line":1696},[76,165784,30384],{"class":136},[76,165786,87],{"class":86},[76,165788,140],{"class":82},[76,165790,163766],{"class":192},[76,165792,984],{"class":136},[76,165794,163771],{"class":86},[76,165796,157128],{"class":82},[76,165798,1034],{"class":136},[76,165800,339],{"class":192},[76,165802,93],{"class":86},[76,165804,165805,165807,165809,165811,165814,165816,165819,165821,165823,165825,165827,165829,165831,165833,165835,165837],{"class":78,"line":1713},[76,165806,30384],{"class":136},[76,165808,87],{"class":86},[76,165810,140],{"class":82},[76,165812,165813],{"class":192},"\"最高分学生:",[76,165815,984],{"class":136},[76,165817,165818],{"class":86},"max_student[",[76,165820,152851],{"class":192},[76,165822,1028],{"class":86},[76,165824,1034],{"class":136},[76,165826,4413],{"class":136},[76,165828,165818],{"class":86},[76,165830,152889],{"class":192},[76,165832,1028],{"class":86},[76,165834,1034],{"class":136},[76,165836,339],{"class":192},[76,165838,93],{"class":86},[76,165840,165841,165843,165845,165847,165850,165853,165856,165858,165860],{"class":78,"line":1718},[76,165842,30384],{"class":136},[76,165844,87],{"class":86},[76,165846,140],{"class":82},[76,165848,165849],{"class":192},"\"及格人数:",[76,165851,165852],{"class":136},"{len",[76,165854,165855],{"class":86},"(passed)",[76,165857,1034],{"class":136},[76,165859,339],{"class":192},[76,165861,93],{"class":86},[16,165863,165865],{"id":165864},"_616-易错点","6.16 易错点",[29,165867,165868,165871,165874,165877,165883,165892],{},[32,165869,165870],{},"列表可变，元组和字符串不可变。",[32,165872,165873],{},"切片结束位置不包含。",[32,165875,165876],{},"字典通过 key 取值，不是通过索引。",[32,165878,165879,165880,28354],{},"空集合要用 ",[73,165881,165882],{},"set()",[32,165884,104335,165885,165888,165889,28354],{},[73,165886,165887],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[73,165890,165891],{},"get()",[32,165893,165894],{},"嵌套容器要先看清楚每一层是什么类型。",[16,165896,165898],{"id":165897},"_617-本章练习","6.17 本章练习",[29,165900,165901,165904,165907,165910,165913],{},[32,165902,165903],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[32,165905,165906],{},"输入一句话，统计每个字符出现次数。",[32,165908,165909],{},"使用集合去除列表中的重复元素。",[32,165911,165912],{},"使用字典保存一个学生的信息，并实现修改成绩。",[32,165914,165915],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5092,165917,165918],{},"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":71,"searchDepth":96,"depth":96,"links":165920},[165921,165922,165923,165924,165925,165926,165927,165928,165929,165930,165931,165932,165933,165934,165935,165936,165937],{"id":162901,"depth":96,"text":162902},{"id":163018,"depth":96,"text":163019},{"id":163108,"depth":96,"text":163109},{"id":163232,"depth":96,"text":163233},{"id":163595,"depth":96,"text":163596},{"id":163782,"depth":96,"text":163783},{"id":163901,"depth":96,"text":163902},{"id":164043,"depth":96,"text":164044},{"id":164230,"depth":96,"text":164231},{"id":164474,"depth":96,"text":164475},{"id":164684,"depth":96,"text":164685},{"id":164769,"depth":96,"text":164770},{"id":165067,"depth":96,"text":165068},{"id":165349,"depth":96,"text":165350},{"id":165541,"depth":96,"text":165542},{"id":165864,"depth":96,"text":165865},{"id":165897,"depth":96,"text":165898},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162893,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165944,"title":165945,"body":165946,"description":23344,"extension":5123,"meta":168118,"navigation":2364,"path":168119,"seo":168120,"stem":168121,"__hash__":168122},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":9,"value":165947,"toc":168093},[165948,165951,165955,165958,166038,166041,166062,166065,166069,166072,166134,166137,166154,166158,166161,166206,166208,166216,166220,166223,166305,166308,166311,166336,166339,166362,166366,166369,166371,166433,166436,166438,166489,166493,166497,166503,166608,166612,166618,166689,166693,166696,166764,166767,166847,166851,166857,166893,166896,166899,167009,167015,167019,167022,167094,167097,167101,167105,167110,167172,167176,167181,167249,167253,167258,167374,167378,167381,167461,167464,167468,167471,167575,167577,167592,167595,167599,167737,167745,167749,167751,167762,167764,168022,168026,168058,168062,168090],[12,165949,165945],{"id":165950},"_7-函数进阶",[16,165952,165954],{"id":165953},"_71-多返回值","7.1 多返回值",[21,165956,165957],{},"Python 函数可以返回多个值，本质上返回的是元组。",[66,165959,165961],{"className":30347,"code":165960,"language":30349,"meta":71,"style":71},"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",[73,165962,165963,165972,165980,165988,165997,166004,166008,166012,166021,166027],{"__ignoreMap":71},[76,165964,165965,165967,165970],{"class":78,"line":79},[76,165966,31916],{"class":82},[76,165968,165969],{"class":1927}," get_info",[76,165971,31922],{"class":86},[76,165973,165974,165976,165978],{"class":78,"line":96},[76,165975,152339],{"class":86},[76,165977,133],{"class":82},[76,165979,149322],{"class":192},[76,165981,165982,165984,165986],{"class":78,"line":1143},[76,165983,152355],{"class":86},[76,165985,133],{"class":82},[76,165987,146520],{"class":136},[76,165989,165990,165992,165994],{"class":78,"line":1158},[76,165991,152370],{"class":86},[76,165993,133],{"class":82},[76,165995,165996],{"class":136}," 95\n",[76,165998,165999,166001],{"class":78,"line":1164},[76,166000,4055],{"class":82},[76,166002,166003],{"class":86}," name, age, score\n",[76,166005,166006],{"class":78,"line":1178},[76,166007,2365],{"emptyLinePlaceholder":2364},[76,166009,166010],{"class":78,"line":1184},[76,166011,2365],{"emptyLinePlaceholder":2364},[76,166013,166014,166016,166018],{"class":78,"line":1275},[76,166015,161275],{"class":86},[76,166017,133],{"class":82},[76,166019,166020],{"class":86}," get_info()\n",[76,166022,166023,166025],{"class":78,"line":1281},[76,166024,30384],{"class":136},[76,166026,76554],{"class":86},[76,166028,166029,166031,166033,166035],{"class":78,"line":1293},[76,166030,30384],{"class":136},[76,166032,87],{"class":86},[76,166034,103076],{"class":136},[76,166036,166037],{"class":86},"(result))\n",[21,166039,166040],{},"可以直接解包：",[66,166042,166044],{"className":30347,"code":166043,"language":30349,"meta":71,"style":71},"name, age, score = get_info()\nprint(name, age, score)\n",[73,166045,166046,166055],{"__ignoreMap":71},[76,166047,166048,166051,166053],{"class":78,"line":79},[76,166049,166050],{"class":86},"name, age, score ",[76,166052,133],{"class":82},[76,166054,166020],{"class":86},[76,166056,166057,166059],{"class":78,"line":96},[76,166058,30384],{"class":136},[76,166060,166061],{"class":86},"(name, age, score)\n",[21,166063,166064],{},"返回多个值适合函数需要同时给出多个结果时使用。",[16,166066,166068],{"id":166067},"_72-位置参数","7.2 位置参数",[21,166070,166071],{},"位置参数按顺序传递。",[66,166073,166075],{"className":30347,"code":166074,"language":30349,"meta":71,"style":71},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[73,166076,166077,166085,166113,166117,166121],{"__ignoreMap":71},[76,166078,166079,166081,166083],{"class":78,"line":79},[76,166080,31916],{"class":82},[76,166082,149341],{"class":1927},[76,166084,149344],{"class":86},[76,166086,166087,166089,166091,166093,166095,166097,166099,166101,166103,166105,166107,166109,166111],{"class":78,"line":96},[76,166088,31268],{"class":136},[76,166090,87],{"class":86},[76,166092,140],{"class":82},[76,166094,149355],{"class":192},[76,166096,984],{"class":136},[76,166098,79779],{"class":86},[76,166100,1034],{"class":136},[76,166102,149364],{"class":192},[76,166104,984],{"class":136},[76,166106,70190],{"class":86},[76,166108,1034],{"class":136},[76,166110,149373],{"class":192},[76,166112,93],{"class":86},[76,166114,166115],{"class":78,"line":1143},[76,166116,2365],{"emptyLinePlaceholder":2364},[76,166118,166119],{"class":78,"line":1158},[76,166120,2365],{"emptyLinePlaceholder":2364},[76,166122,166123,166126,166128,166130,166132],{"class":78,"line":1164},[76,166124,166125],{"class":86},"introduce(",[76,166127,149857],{"class":192},[76,166129,12402],{"class":86},[76,166131,738],{"class":136},[76,166133,93],{"class":86},[21,166135,166136],{},"顺序错了就会得到错误含义：",[66,166138,166140],{"className":30347,"code":166139,"language":30349,"meta":71,"style":71},"introduce(18, \"小明\")\n",[73,166141,166142],{"__ignoreMap":71},[76,166143,166144,166146,166148,166150,166152],{"class":78,"line":79},[76,166145,166125],{"class":86},[76,166147,738],{"class":136},[76,166149,12402],{"class":86},[76,166151,149857],{"class":192},[76,166153,93],{"class":86},[16,166155,166157],{"id":166156},"_73-关键字参数","7.3 关键字参数",[21,166159,166160],{},"关键字参数按参数名传递。",[66,166162,166164],{"className":30347,"code":166163,"language":30349,"meta":71,"style":71},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[73,166165,166166,166186],{"__ignoreMap":71},[76,166167,166168,166170,166172,166174,166176,166178,166180,166182,166184],{"class":78,"line":79},[76,166169,166125],{"class":86},[76,166171,79779],{"class":5183},[76,166173,133],{"class":82},[76,166175,149857],{"class":192},[76,166177,12402],{"class":86},[76,166179,70190],{"class":5183},[76,166181,133],{"class":82},[76,166183,738],{"class":136},[76,166185,93],{"class":86},[76,166187,166188,166190,166192,166194,166196,166198,166200,166202,166204],{"class":78,"line":96},[76,166189,166125],{"class":86},[76,166191,70190],{"class":5183},[76,166193,133],{"class":82},[76,166195,738],{"class":136},[76,166197,12402],{"class":86},[76,166199,79779],{"class":5183},[76,166201,133],{"class":82},[76,166203,149857],{"class":192},[76,166205,93],{"class":86},[21,166207,117903],{},[29,166209,166210,166213],{},[32,166211,166212],{},"顺序不容易错。",[32,166214,166215],{},"调用时可读性更强。",[16,166217,166219],{"id":166218},"_74-默认参数","7.4 默认参数",[21,166221,166222],{},"默认参数给参数设置默认值。",[66,166224,166226],{"className":30347,"code":166225,"language":30349,"meta":71,"style":71},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[73,166227,166228,166244,166274,166278,166282,166292],{"__ignoreMap":71},[76,166229,166230,166232,166234,166237,166239,166242],{"class":78,"line":79},[76,166231,31916],{"class":82},[76,166233,122062],{"class":1927},[76,166235,166236],{"class":86},"(host, port",[76,166238,133],{"class":82},[76,166240,166241],{"class":136},"3306",[76,166243,30755],{"class":86},[76,166245,166246,166248,166250,166252,166255,166257,166259,166261,166263,166265,166268,166270,166272],{"class":78,"line":96},[76,166247,31268],{"class":136},[76,166249,87],{"class":86},[76,166251,140],{"class":82},[76,166253,166254],{"class":192},"\"连接",[76,166256,984],{"class":136},[76,166258,27364],{"class":86},[76,166260,1034],{"class":136},[76,166262,947],{"class":192},[76,166264,984],{"class":136},[76,166266,166267],{"class":86},"port",[76,166269,1034],{"class":136},[76,166271,339],{"class":192},[76,166273,93],{"class":86},[76,166275,166276],{"class":78,"line":1143},[76,166277,2365],{"emptyLinePlaceholder":2364},[76,166279,166280],{"class":78,"line":1158},[76,166281,2365],{"emptyLinePlaceholder":2364},[76,166283,166284,166287,166290],{"class":78,"line":1164},[76,166285,166286],{"class":86},"connect(",[76,166288,166289],{"class":192},"\"localhost\"",[76,166291,93],{"class":86},[76,166293,166294,166296,166298,166300,166303],{"class":78,"line":1178},[76,166295,166286],{"class":86},[76,166297,166289],{"class":192},[76,166299,12402],{"class":86},[76,166301,166302],{"class":136},"6379",[76,166304,93],{"class":86},[21,166306,166307],{},"注意：默认参数必须放在非默认参数后面。",[21,166309,166310],{},"错误：",[66,166312,166314],{"className":30347,"code":166313,"language":30349,"meta":71,"style":71},"def connect(port=3306, host):\n    pass\n",[73,166315,166316,166332],{"__ignoreMap":71},[76,166317,166318,166320,166322,166325,166327,166329],{"class":78,"line":79},[76,166319,31916],{"class":82},[76,166321,122062],{"class":1927},[76,166323,166324],{"class":86},"(port",[76,166326,133],{"class":82},[76,166328,166241],{"class":136},[76,166330,166331],{"class":86},", host):\n",[76,166333,166334],{"class":78,"line":96},[76,166335,149506],{"class":82},[21,166337,166338],{},"正确：",[66,166340,166342],{"className":30347,"code":166341,"language":30349,"meta":71,"style":71},"def connect(host, port=3306):\n    pass\n",[73,166343,166344,166358],{"__ignoreMap":71},[76,166345,166346,166348,166350,166352,166354,166356],{"class":78,"line":79},[76,166347,31916],{"class":82},[76,166349,122062],{"class":1927},[76,166351,166236],{"class":86},[76,166353,133],{"class":82},[76,166355,166241],{"class":136},[76,166357,30755],{"class":86},[76,166359,166360],{"class":78,"line":96},[76,166361,149506],{"class":82},[16,166363,166365],{"id":166364},"_75-默认参数的坑","7.5 默认参数的坑",[21,166367,166368],{},"不要使用可变对象作为默认参数。",[21,166370,157592],{},[66,166372,166374],{"className":30347,"code":166373,"language":30349,"meta":71,"style":71},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[73,166375,166376,166391,166396,166403,166407,166411,166422],{"__ignoreMap":71},[76,166377,166378,166380,166383,166386,166388],{"class":78,"line":79},[76,166379,31916],{"class":82},[76,166381,166382],{"class":1927}," add_item",[76,166384,166385],{"class":86},"(item, items",[76,166387,133],{"class":82},[76,166389,166390],{"class":86},"[]):\n",[76,166392,166393],{"class":78,"line":96},[76,166394,166395],{"class":86},"    items.append(item)\n",[76,166397,166398,166400],{"class":78,"line":1143},[76,166399,4055],{"class":82},[76,166401,166402],{"class":86}," items\n",[76,166404,166405],{"class":78,"line":1158},[76,166406,2365],{"emptyLinePlaceholder":2364},[76,166408,166409],{"class":78,"line":1164},[76,166410,2365],{"emptyLinePlaceholder":2364},[76,166412,166413,166415,166418,166420],{"class":78,"line":1178},[76,166414,30384],{"class":136},[76,166416,166417],{"class":86},"(add_item(",[76,166419,165294],{"class":192},[76,166421,30466],{"class":86},[76,166423,166424,166426,166428,166431],{"class":78,"line":1184},[76,166425,30384],{"class":136},[76,166427,166417],{"class":86},[76,166429,166430],{"class":192},"\"b\"",[76,166432,30466],{"class":86},[21,166434,166435],{},"第二次调用会复用第一次的列表。",[21,166437,155857],{},[66,166439,166441],{"className":30347,"code":166440,"language":30349,"meta":71,"style":71},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[73,166442,166443,166457,166470,166479,166483],{"__ignoreMap":71},[76,166444,166445,166447,166449,166451,166453,166455],{"class":78,"line":79},[76,166446,31916],{"class":82},[76,166448,166382],{"class":1927},[76,166450,166385],{"class":86},[76,166452,133],{"class":82},[76,166454,95655],{"class":136},[76,166456,30755],{"class":86},[76,166458,166459,166461,166464,166466,166468],{"class":78,"line":96},[76,166460,3066],{"class":82},[76,166462,166463],{"class":86}," items ",[76,166465,38896],{"class":82},[76,166467,38902],{"class":136},[76,166469,3704],{"class":86},[76,166471,166472,166475,166477],{"class":78,"line":1143},[76,166473,166474],{"class":86},"        items ",[76,166476,133],{"class":82},[76,166478,51807],{"class":86},[76,166480,166481],{"class":78,"line":1158},[76,166482,166395],{"class":86},[76,166484,166485,166487],{"class":78,"line":1164},[76,166486,4055],{"class":82},[76,166488,166402],{"class":86},[16,166490,166492],{"id":166491},"_76-不定长参数","7.6 不定长参数",[46,166494,166496],{"id":166495},"_761-args","7.6.1 *args",[21,166498,166499,166502],{},[73,166500,166501],{},"*args"," 接收任意数量的位置参数，得到元组。",[66,166504,166506],{"className":30347,"code":166505,"language":30349,"meta":71,"style":71},"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",[73,166507,166508,166521,166529,166540,166549,166555,166559,166563,166582],{"__ignoreMap":71},[76,166509,166510,166512,166514,166516,166518],{"class":78,"line":79},[76,166511,31916],{"class":82},[76,166513,5176],{"class":1927},[76,166515,87],{"class":86},[76,166517,543],{"class":82},[76,166519,166520],{"class":86},"args):\n",[76,166522,166523,166525,166527],{"class":78,"line":96},[76,166524,159276],{"class":86},[76,166526,133],{"class":82},[76,166528,47302],{"class":136},[76,166530,166531,166533,166535,166537],{"class":78,"line":1143},[76,166532,3166],{"class":82},[76,166534,156149],{"class":86},[76,166536,26012],{"class":82},[76,166538,166539],{"class":86}," args:\n",[76,166541,166542,166544,166546],{"class":78,"line":1158},[76,166543,159951],{"class":86},[76,166545,9444],{"class":82},[76,166547,166548],{"class":86}," num\n",[76,166550,166551,166553],{"class":78,"line":1164},[76,166552,4055],{"class":82},[76,166554,162256],{"class":86},[76,166556,166557],{"class":78,"line":1178},[76,166558,2365],{"emptyLinePlaceholder":2364},[76,166560,166561],{"class":78,"line":1184},[76,166562,2365],{"emptyLinePlaceholder":2364},[76,166564,166565,166567,166570,166572,166574,166576,166578,166580],{"class":78,"line":1275},[76,166566,30384],{"class":136},[76,166568,166569],{"class":86},"(add(",[76,166571,305],{"class":136},[76,166573,12402],{"class":86},[76,166575,165],{"class":136},[76,166577,12402],{"class":86},[76,166579,159],{"class":136},[76,166581,30466],{"class":86},[76,166583,166584,166586,166588,166590,166592,166594,166596,166598,166600,166602,166604,166606],{"class":78,"line":1281},[76,166585,30384],{"class":136},[76,166587,166569],{"class":86},[76,166589,305],{"class":136},[76,166591,12402],{"class":86},[76,166593,165],{"class":136},[76,166595,12402],{"class":86},[76,166597,159],{"class":136},[76,166599,12402],{"class":86},[76,166601,381],{"class":136},[76,166603,12402],{"class":86},[76,166605,407],{"class":136},[76,166607,30466],{"class":86},[46,166609,166611],{"id":166610},"_762-kwargs","7.6.2 **kwargs",[21,166613,166614,166617],{},[73,166615,166616],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[66,166619,166621],{"className":30347,"code":166620,"language":30349,"meta":71,"style":71},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[73,166622,166623,166636,166647,166653,166657,166661],{"__ignoreMap":71},[76,166624,166625,166627,166629,166631,166633],{"class":78,"line":79},[76,166626,31916],{"class":82},[76,166628,161914],{"class":1927},[76,166630,87],{"class":86},[76,166632,10628],{"class":82},[76,166634,166635],{"class":86},"kwargs):\n",[76,166637,166638,166640,166642,166644],{"class":78,"line":96},[76,166639,3166],{"class":82},[76,166641,164754],{"class":86},[76,166643,26012],{"class":82},[76,166645,166646],{"class":86}," kwargs.items():\n",[76,166648,166649,166651],{"class":78,"line":1143},[76,166650,32420],{"class":136},[76,166652,164766],{"class":86},[76,166654,166655],{"class":78,"line":1158},[76,166656,2365],{"emptyLinePlaceholder":2364},[76,166658,166659],{"class":78,"line":1164},[76,166660,2365],{"emptyLinePlaceholder":2364},[76,166662,166663,166665,166667,166669,166671,166673,166675,166677,166679,166681,166683,166685,166687],{"class":78,"line":1178},[76,166664,161979],{"class":86},[76,166666,79779],{"class":5183},[76,166668,133],{"class":82},[76,166670,149857],{"class":192},[76,166672,12402],{"class":86},[76,166674,70190],{"class":5183},[76,166676,133],{"class":82},[76,166678,738],{"class":136},[76,166680,12402],{"class":86},[76,166682,70241],{"class":5183},[76,166684,133],{"class":82},[76,166686,69238],{"class":192},[76,166688,93],{"class":86},[16,166690,166692],{"id":166691},"_77-参数解包","7.7 参数解包",[21,166694,166695],{},"列表或元组解包为位置参数：",[66,166697,166699],{"className":30347,"code":166698,"language":30349,"meta":71,"style":71},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[73,166700,166701,166710,166725,166729,166733,166753],{"__ignoreMap":71},[76,166702,166703,166705,166707],{"class":78,"line":79},[76,166704,31916],{"class":82},[76,166706,5176],{"class":1927},[76,166708,166709],{"class":86},"(a, b, c):\n",[76,166711,166712,166714,166716,166718,166720,166722],{"class":78,"line":96},[76,166713,4055],{"class":82},[76,166715,10836],{"class":86},[76,166717,569],{"class":82},[76,166719,10849],{"class":86},[76,166721,569],{"class":82},[76,166723,166724],{"class":86}," c\n",[76,166726,166727],{"class":78,"line":1143},[76,166728,2365],{"emptyLinePlaceholder":2364},[76,166730,166731],{"class":78,"line":1158},[76,166732,2365],{"emptyLinePlaceholder":2364},[76,166734,166735,166737,166739,166741,166743,166745,166747,166749,166751],{"class":78,"line":1164},[76,166736,164069],{"class":86},[76,166738,133],{"class":82},[76,166740,52195],{"class":86},[76,166742,305],{"class":136},[76,166744,12402],{"class":86},[76,166746,165],{"class":136},[76,166748,12402],{"class":86},[76,166750,159],{"class":136},[76,166752,33215],{"class":86},[76,166754,166755,166757,166759,166761],{"class":78,"line":1178},[76,166756,30384],{"class":136},[76,166758,166569],{"class":86},[76,166760,543],{"class":82},[76,166762,166763],{"class":86},"nums))\n",[21,166765,166766],{},"字典解包为关键字参数：",[66,166768,166770],{"className":30347,"code":166769,"language":30349,"meta":71,"style":71},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[73,166771,166772,166780,166806,166810,166814,166838],{"__ignoreMap":71},[76,166773,166774,166776,166778],{"class":78,"line":79},[76,166775,31916],{"class":82},[76,166777,149341],{"class":1927},[76,166779,149344],{"class":86},[76,166781,166782,166784,166786,166788,166790,166792,166794,166796,166798,166800,166802,166804],{"class":78,"line":96},[76,166783,31268],{"class":136},[76,166785,87],{"class":86},[76,166787,140],{"class":82},[76,166789,339],{"class":192},[76,166791,984],{"class":136},[76,166793,79779],{"class":86},[76,166795,1034],{"class":136},[76,166797,4413],{"class":136},[76,166799,70190],{"class":86},[76,166801,1034],{"class":136},[76,166803,339],{"class":192},[76,166805,93],{"class":86},[76,166807,166808],{"class":78,"line":1143},[76,166809,2365],{"emptyLinePlaceholder":2364},[76,166811,166812],{"class":78,"line":1158},[76,166813,2365],{"emptyLinePlaceholder":2364},[76,166815,166816,166818,166820,166822,166824,166826,166828,166830,166832,166834,166836],{"class":78,"line":1164},[76,166817,116283],{"class":86},[76,166819,133],{"class":82},[76,166821,4413],{"class":86},[76,166823,62648],{"class":192},[76,166825,51406],{"class":86},[76,166827,149857],{"class":192},[76,166829,12402],{"class":86},[76,166831,69093],{"class":192},[76,166833,51406],{"class":86},[76,166835,738],{"class":136},[76,166837,1529],{"class":86},[76,166839,166840,166842,166844],{"class":78,"line":1178},[76,166841,166125],{"class":86},[76,166843,10628],{"class":82},[76,166845,166846],{"class":86},"info)\n",[16,166848,166850],{"id":166849},"_78-匿名函数lambda","7.8 匿名函数lambda",[21,166852,166853,166856],{},[73,166854,166855],{},"lambda"," 用于定义简单匿名函数。",[66,166858,166860],{"className":30347,"code":166859,"language":30349,"meta":71,"style":71},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[73,166861,166862,166879],{"__ignoreMap":71},[76,166863,166864,166867,166869,166872,166875,166877],{"class":78,"line":79},[76,166865,166866],{"class":86},"add ",[76,166868,133],{"class":82},[76,166870,166871],{"class":82}," lambda",[76,166873,166874],{"class":86}," a, b: a ",[76,166876,569],{"class":82},[76,166878,151073],{"class":86},[76,166880,166881,166883,166885,166887,166889,166891],{"class":78,"line":96},[76,166882,30384],{"class":136},[76,166884,166569],{"class":86},[76,166886,305],{"class":136},[76,166888,12402],{"class":86},[76,166890,165],{"class":136},[76,166892,30466],{"class":86},[21,166894,166895],{},"常和排序、过滤等函数一起使用。",[21,166897,166898],{},"按分数排序：",[66,166900,166902],{"className":30347,"code":166901,"language":30349,"meta":71,"style":71},"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",[73,166903,166904,166912,166932,166952,166972,166976,166980,167003],{"__ignoreMap":71},[76,166905,166906,166908,166910],{"class":78,"line":79},[76,166907,159685],{"class":86},[76,166909,133],{"class":82},[76,166911,55416],{"class":86},[76,166913,166914,166916,166918,166920,166922,166924,166926,166928,166930],{"class":78,"line":96},[76,166915,148354],{"class":86},[76,166917,62648],{"class":192},[76,166919,51406],{"class":86},[76,166921,149857],{"class":192},[76,166923,12402],{"class":86},[76,166925,151441],{"class":192},[76,166927,51406],{"class":86},[76,166929,1077],{"class":136},[76,166931,4895],{"class":86},[76,166933,166934,166936,166938,166940,166942,166944,166946,166948,166950],{"class":78,"line":1143},[76,166935,148354],{"class":86},[76,166937,62648],{"class":192},[76,166939,51406],{"class":86},[76,166941,150905],{"class":192},[76,166943,12402],{"class":86},[76,166945,151441],{"class":192},[76,166947,51406],{"class":86},[76,166949,899],{"class":136},[76,166951,4895],{"class":86},[76,166953,166954,166956,166958,166960,166962,166964,166966,166968,166970],{"class":78,"line":1158},[76,166955,148354],{"class":86},[76,166957,62648],{"class":192},[76,166959,51406],{"class":86},[76,166961,159700],{"class":192},[76,166963,12402],{"class":86},[76,166965,151441],{"class":192},[76,166967,51406],{"class":86},[76,166969,494],{"class":136},[76,166971,4895],{"class":86},[76,166973,166974],{"class":78,"line":1164},[76,166975,33215],{"class":86},[76,166977,166978],{"class":78,"line":1178},[76,166979,2365],{"emptyLinePlaceholder":2364},[76,166981,166982,166985,166987,166989,166991,166993,166995,166997,166999,167001],{"class":78,"line":1184},[76,166983,166984],{"class":86},"students.sort(",[76,166986,153915],{"class":5183},[76,166988,153918],{"class":82},[76,166990,153921],{"class":86},[76,166992,151441],{"class":192},[76,166994,112171],{"class":86},[76,166996,163497],{"class":5183},[76,166998,133],{"class":82},[76,167000,31445],{"class":136},[76,167002,93],{"class":86},[76,167004,167005,167007],{"class":78,"line":1275},[76,167006,30384],{"class":136},[76,167008,164964],{"class":86},[21,167010,167011,167012,167014],{},"如果逻辑复杂，不要硬写 ",[73,167013,166855],{},"，定义普通函数更清晰。",[16,167016,167018],{"id":167017},"_79-函数作为参数","7.9 函数作为参数",[21,167020,167021],{},"函数可以作为参数传给另一个函数。",[66,167023,167025],{"className":30347,"code":167024,"language":30349,"meta":71,"style":71},"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",[73,167026,167027,167035,167045,167049,167053,167063,167070,167074,167078],{"__ignoreMap":71},[76,167028,167029,167031,167033],{"class":78,"line":79},[76,167030,31916],{"class":82},[76,167032,5176],{"class":1927},[76,167034,151062],{"class":86},[76,167036,167037,167039,167041,167043],{"class":78,"line":96},[76,167038,4055],{"class":82},[76,167040,10836],{"class":86},[76,167042,569],{"class":82},[76,167044,151073],{"class":86},[76,167046,167047],{"class":78,"line":1143},[76,167048,2365],{"emptyLinePlaceholder":2364},[76,167050,167051],{"class":78,"line":1158},[76,167052,2365],{"emptyLinePlaceholder":2364},[76,167054,167055,167057,167060],{"class":78,"line":1164},[76,167056,31916],{"class":82},[76,167058,167059],{"class":1927}," calculate",[76,167061,167062],{"class":86},"(a, b, func):\n",[76,167064,167065,167067],{"class":78,"line":1178},[76,167066,4055],{"class":82},[76,167068,167069],{"class":86}," func(a, b)\n",[76,167071,167072],{"class":78,"line":1184},[76,167073,2365],{"emptyLinePlaceholder":2364},[76,167075,167076],{"class":78,"line":1275},[76,167077,2365],{"emptyLinePlaceholder":2364},[76,167079,167080,167082,167085,167087,167089,167091],{"class":78,"line":1281},[76,167081,30384],{"class":136},[76,167083,167084],{"class":86},"(calculate(",[76,167086,534],{"class":136},[76,167088,12402],{"class":86},[76,167090,788],{"class":136},[76,167092,167093],{"class":86},", add))\n",[21,167095,167096],{},"这种思想在排序、回调、框架中经常出现。",[16,167098,167100],{"id":167099},"_710-mapfiltersorted","7.10 map、filter、sorted",[46,167102,167104],{"id":167103},"_7101-map","7.10.1 map",[21,167106,167107,167109],{},[73,167108,74013],{}," 对每个元素执行函数。",[66,167111,167113],{"className":30347,"code":167112,"language":30349,"meta":71,"style":71},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[73,167114,167115,167139,167162],{"__ignoreMap":71},[76,167116,167117,167119,167121,167123,167125,167127,167129,167131,167133,167135,167137],{"class":78,"line":79},[76,167118,164069],{"class":86},[76,167120,133],{"class":82},[76,167122,52195],{"class":86},[76,167124,305],{"class":136},[76,167126,12402],{"class":86},[76,167128,165],{"class":136},[76,167130,12402],{"class":86},[76,167132,159],{"class":136},[76,167134,12402],{"class":86},[76,167136,381],{"class":136},[76,167138,33215],{"class":86},[76,167140,167141,167143,167145,167148,167150,167152,167155,167157,167159],{"class":78,"line":96},[76,167142,161275],{"class":86},[76,167144,133],{"class":82},[76,167146,167147],{"class":136}," map",[76,167149,87],{"class":86},[76,167151,166855],{"class":82},[76,167153,167154],{"class":86}," x: x ",[76,167156,543],{"class":82},[76,167158,14722],{"class":136},[76,167160,167161],{"class":86},", nums)\n",[76,167163,167164,167166,167168,167170],{"class":78,"line":1143},[76,167165,30384],{"class":136},[76,167167,87],{"class":86},[76,167169,154039],{"class":136},[76,167171,166037],{"class":86},[46,167173,167175],{"id":167174},"_7102-filter","7.10.2 filter",[21,167177,167178,167180],{},[73,167179,80020],{}," 保留满足条件的元素。",[66,167182,167184],{"className":30347,"code":167183,"language":30349,"meta":71,"style":71},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[73,167185,167186,167214,167239],{"__ignoreMap":71},[76,167187,167188,167190,167192,167194,167196,167198,167200,167202,167204,167206,167208,167210,167212],{"class":78,"line":79},[76,167189,164069],{"class":86},[76,167191,133],{"class":82},[76,167193,52195],{"class":86},[76,167195,305],{"class":136},[76,167197,12402],{"class":86},[76,167199,165],{"class":136},[76,167201,12402],{"class":86},[76,167203,159],{"class":136},[76,167205,12402],{"class":86},[76,167207,381],{"class":136},[76,167209,12402],{"class":86},[76,167211,407],{"class":136},[76,167213,33215],{"class":86},[76,167215,167216,167218,167220,167223,167225,167227,167229,167231,167233,167235,167237],{"class":78,"line":96},[76,167217,161275],{"class":86},[76,167219,133],{"class":82},[76,167221,167222],{"class":136}," filter",[76,167224,87],{"class":86},[76,167226,166855],{"class":82},[76,167228,167154],{"class":86},[76,167230,416],{"class":82},[76,167232,14722],{"class":136},[76,167234,101528],{"class":82},[76,167236,4058],{"class":136},[76,167238,167161],{"class":86},[76,167240,167241,167243,167245,167247],{"class":78,"line":1143},[76,167242,30384],{"class":136},[76,167244,87],{"class":86},[76,167246,154039],{"class":136},[76,167248,166037],{"class":86},[46,167250,167252],{"id":167251},"_7103-sorted","7.10.3 sorted",[21,167254,167255,167257],{},[73,167256,165205],{}," 返回排序后的新列表。",[66,167259,167261],{"className":30347,"code":167260,"language":30349,"meta":71,"style":71},"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",[73,167262,167263,167271,167291,167311,167331,167335,167339,167368],{"__ignoreMap":71},[76,167264,167265,167267,167269],{"class":78,"line":79},[76,167266,159685],{"class":86},[76,167268,133],{"class":82},[76,167270,55416],{"class":86},[76,167272,167273,167275,167277,167279,167281,167283,167285,167287,167289],{"class":78,"line":96},[76,167274,148354],{"class":86},[76,167276,62648],{"class":192},[76,167278,51406],{"class":86},[76,167280,149857],{"class":192},[76,167282,12402],{"class":86},[76,167284,151441],{"class":192},[76,167286,51406],{"class":86},[76,167288,1077],{"class":136},[76,167290,4895],{"class":86},[76,167292,167293,167295,167297,167299,167301,167303,167305,167307,167309],{"class":78,"line":1143},[76,167294,148354],{"class":86},[76,167296,62648],{"class":192},[76,167298,51406],{"class":86},[76,167300,150905],{"class":192},[76,167302,12402],{"class":86},[76,167304,151441],{"class":192},[76,167306,51406],{"class":86},[76,167308,899],{"class":136},[76,167310,4895],{"class":86},[76,167312,167313,167315,167317,167319,167321,167323,167325,167327,167329],{"class":78,"line":1158},[76,167314,148354],{"class":86},[76,167316,62648],{"class":192},[76,167318,51406],{"class":86},[76,167320,159700],{"class":192},[76,167322,12402],{"class":86},[76,167324,151441],{"class":192},[76,167326,51406],{"class":86},[76,167328,494],{"class":136},[76,167330,4895],{"class":86},[76,167332,167333],{"class":78,"line":1164},[76,167334,33215],{"class":86},[76,167336,167337],{"class":78,"line":1178},[76,167338,2365],{"emptyLinePlaceholder":2364},[76,167340,167341,167343,167345,167347,167350,167352,167354,167356,167358,167360,167362,167364,167366],{"class":78,"line":1184},[76,167342,161275],{"class":86},[76,167344,133],{"class":82},[76,167346,163573],{"class":136},[76,167348,167349],{"class":86},"(students, ",[76,167351,153915],{"class":5183},[76,167353,153918],{"class":82},[76,167355,153921],{"class":86},[76,167357,151441],{"class":192},[76,167359,112171],{"class":86},[76,167361,163497],{"class":5183},[76,167363,133],{"class":82},[76,167365,31445],{"class":136},[76,167367,93],{"class":86},[76,167369,167370,167372],{"class":78,"line":1275},[76,167371,30384],{"class":136},[76,167373,76554],{"class":86},[16,167375,167377],{"id":167376},"_711-闭包入门","7.11 闭包入门",[21,167379,167380],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[66,167382,167384],{"className":30347,"code":167383,"language":30349,"meta":71,"style":71},"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",[73,167385,167386,167396,167406,167417,167421,167428,167432,167436,167450],{"__ignoreMap":71},[76,167387,167388,167390,167393],{"class":78,"line":79},[76,167389,31916],{"class":82},[76,167391,167392],{"class":1927}," outer",[76,167394,167395],{"class":86},"(base):\n",[76,167397,167398,167400,167403],{"class":78,"line":96},[76,167399,30770],{"class":82},[76,167401,167402],{"class":1927}," inner",[76,167404,167405],{"class":86},"(num):\n",[76,167407,167408,167410,167413,167415],{"class":78,"line":1143},[76,167409,14719],{"class":82},[76,167411,167412],{"class":86}," base ",[76,167414,569],{"class":82},[76,167416,166548],{"class":86},[76,167418,167419],{"class":78,"line":1158},[76,167420,2365],{"emptyLinePlaceholder":2364},[76,167422,167423,167425],{"class":78,"line":1164},[76,167424,4055],{"class":82},[76,167426,167427],{"class":86}," inner\n",[76,167429,167430],{"class":78,"line":1178},[76,167431,2365],{"emptyLinePlaceholder":2364},[76,167433,167434],{"class":78,"line":1184},[76,167435,2365],{"emptyLinePlaceholder":2364},[76,167437,167438,167441,167443,167446,167448],{"class":78,"line":1275},[76,167439,167440],{"class":86},"add_10 ",[76,167442,133],{"class":82},[76,167444,167445],{"class":86}," outer(",[76,167447,534],{"class":136},[76,167449,93],{"class":86},[76,167451,167452,167454,167457,167459],{"class":78,"line":1281},[76,167453,30384],{"class":136},[76,167455,167456],{"class":86},"(add_10(",[76,167458,407],{"class":136},[76,167460,30466],{"class":86},[21,167462,167463],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[16,167465,167467],{"id":167466},"_712-装饰器入门","7.12 装饰器入门",[21,167469,167470],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[66,167472,167474],{"className":30347,"code":167473,"language":30349,"meta":71,"style":71},"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",[73,167475,167476,167485,167494,167505,167510,167521,167525,167532,167536,167540,167545,167553,167563,167567,167571],{"__ignoreMap":71},[76,167477,167478,167480,167482],{"class":78,"line":79},[76,167479,31916],{"class":82},[76,167481,87160],{"class":1927},[76,167483,167484],{"class":86},"(func):\n",[76,167486,167487,167489,167492],{"class":78,"line":96},[76,167488,30770],{"class":82},[76,167490,167491],{"class":1927}," wrapper",[76,167493,31922],{"class":86},[76,167495,167496,167498,167500,167503],{"class":78,"line":1143},[76,167497,32420],{"class":136},[76,167499,87],{"class":86},[76,167501,167502],{"class":192},"\"函数开始执行\"",[76,167504,93],{"class":86},[76,167506,167507],{"class":78,"line":1158},[76,167508,167509],{"class":86},"        func()\n",[76,167511,167512,167514,167516,167519],{"class":78,"line":1164},[76,167513,32420],{"class":136},[76,167515,87],{"class":86},[76,167517,167518],{"class":192},"\"函数执行结束\"",[76,167520,93],{"class":86},[76,167522,167523],{"class":78,"line":1178},[76,167524,2365],{"emptyLinePlaceholder":2364},[76,167526,167527,167529],{"class":78,"line":1184},[76,167528,4055],{"class":82},[76,167530,167531],{"class":86}," wrapper\n",[76,167533,167534],{"class":78,"line":1275},[76,167535,2365],{"emptyLinePlaceholder":2364},[76,167537,167538],{"class":78,"line":1281},[76,167539,2365],{"emptyLinePlaceholder":2364},[76,167541,167542],{"class":78,"line":1293},[76,167543,167544],{"class":1927},"@log\n",[76,167546,167547,167549,167551],{"class":78,"line":1576},[76,167548,31916],{"class":82},[76,167550,160965],{"class":1927},[76,167552,31922],{"class":86},[76,167554,167555,167557,167559,167561],{"class":78,"line":1581},[76,167556,31268],{"class":136},[76,167558,87],{"class":86},[76,167560,5811],{"class":192},[76,167562,93],{"class":86},[76,167564,167565],{"class":78,"line":1587},[76,167566,2365],{"emptyLinePlaceholder":2364},[76,167568,167569],{"class":78,"line":1592},[76,167570,2365],{"emptyLinePlaceholder":2364},[76,167572,167573],{"class":78,"line":1606},[76,167574,161000],{"class":86},[21,167576,158243],{},[66,167578,167580],{"className":30347,"code":167579,"language":30349,"meta":71,"style":71},"say_hello = log(say_hello)\n",[73,167581,167582],{"__ignoreMap":71},[76,167583,167584,167587,167589],{"class":78,"line":79},[76,167585,167586],{"class":86},"say_hello ",[76,167588,133],{"class":82},[76,167590,167591],{"class":86}," log(say_hello)\n",[21,167593,167594],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[16,167596,167598],{"id":167597},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[66,167600,167602],{"className":30347,"code":167601,"language":30349,"meta":71,"style":71},"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",[73,167603,167604,167612,167629,167639,167658,167668,167675,167679,167685,167689,167693,167697,167705,167715,167719,167723],{"__ignoreMap":71},[76,167605,167606,167608,167610],{"class":78,"line":79},[76,167607,31916],{"class":82},[76,167609,87160],{"class":1927},[76,167611,167484],{"class":86},[76,167613,167614,167616,167618,167620,167622,167625,167627],{"class":78,"line":96},[76,167615,30770],{"class":82},[76,167617,167491],{"class":1927},[76,167619,87],{"class":86},[76,167621,543],{"class":82},[76,167623,167624],{"class":86},"args, ",[76,167626,10628],{"class":82},[76,167628,166635],{"class":86},[76,167630,167631,167633,167635,167637],{"class":78,"line":1143},[76,167632,32420],{"class":136},[76,167634,87],{"class":86},[76,167636,167502],{"class":192},[76,167638,93],{"class":86},[76,167640,167641,167644,167646,167649,167651,167653,167655],{"class":78,"line":1158},[76,167642,167643],{"class":86},"        result ",[76,167645,133],{"class":82},[76,167647,167648],{"class":86}," func(",[76,167650,543],{"class":82},[76,167652,167624],{"class":86},[76,167654,10628],{"class":82},[76,167656,167657],{"class":86},"kwargs)\n",[76,167659,167660,167662,167664,167666],{"class":78,"line":1164},[76,167661,32420],{"class":136},[76,167663,87],{"class":86},[76,167665,167518],{"class":192},[76,167667,93],{"class":86},[76,167669,167670,167672],{"class":78,"line":1178},[76,167671,14719],{"class":82},[76,167673,167674],{"class":86}," result\n",[76,167676,167677],{"class":78,"line":1184},[76,167678,2365],{"emptyLinePlaceholder":2364},[76,167680,167681,167683],{"class":78,"line":1275},[76,167682,4055],{"class":82},[76,167684,167531],{"class":86},[76,167686,167687],{"class":78,"line":1281},[76,167688,2365],{"emptyLinePlaceholder":2364},[76,167690,167691],{"class":78,"line":1293},[76,167692,2365],{"emptyLinePlaceholder":2364},[76,167694,167695],{"class":78,"line":1576},[76,167696,167544],{"class":1927},[76,167698,167699,167701,167703],{"class":78,"line":1581},[76,167700,31916],{"class":82},[76,167702,5176],{"class":1927},[76,167704,151062],{"class":86},[76,167706,167707,167709,167711,167713],{"class":78,"line":1587},[76,167708,4055],{"class":82},[76,167710,10836],{"class":86},[76,167712,569],{"class":82},[76,167714,151073],{"class":86},[76,167716,167717],{"class":78,"line":1592},[76,167718,2365],{"emptyLinePlaceholder":2364},[76,167720,167721],{"class":78,"line":1606},[76,167722,2365],{"emptyLinePlaceholder":2364},[76,167724,167725,167727,167729,167731,167733,167735],{"class":78,"line":1611},[76,167726,30384],{"class":136},[76,167728,166569],{"class":86},[76,167730,534],{"class":136},[76,167732,12402],{"class":86},[76,167734,788],{"class":136},[76,167736,30466],{"class":86},[21,167738,167739,167740,100987,167742,167744],{},"这个写法使用 ",[73,167741,166501],{},[73,167743,166616],{}," 接收原函数的所有参数。",[16,167746,167748],{"id":167747},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[21,167750,123261],{},[29,167752,167753,167756,167759],{},[32,167754,167755],{},"给定一组学生数据。",[32,167757,167758],{},"封装函数，根据传入规则筛选学生。",[32,167760,167761],{},"筛选及格、优秀、未成年学生。",[21,167763,10002],{},[66,167765,167767],{"className":30347,"code":167766,"language":30349,"meta":71,"style":71},"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",[73,167768,167769,167777,167805,167833,167861,167865,167869,167873,167883,167891,167901,167908,167913,167919,167923,167927,167951,167974,167997,168001,168008,168015],{"__ignoreMap":71},[76,167770,167771,167773,167775],{"class":78,"line":79},[76,167772,159685],{"class":86},[76,167774,133],{"class":82},[76,167776,55416],{"class":86},[76,167778,167779,167781,167783,167785,167787,167789,167791,167793,167795,167797,167799,167801,167803],{"class":78,"line":96},[76,167780,148354],{"class":86},[76,167782,62648],{"class":192},[76,167784,51406],{"class":86},[76,167786,149857],{"class":192},[76,167788,12402],{"class":86},[76,167790,69093],{"class":192},[76,167792,51406],{"class":86},[76,167794,738],{"class":136},[76,167796,12402],{"class":86},[76,167798,151441],{"class":192},[76,167800,51406],{"class":86},[76,167802,1077],{"class":136},[76,167804,4895],{"class":86},[76,167806,167807,167809,167811,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831],{"class":78,"line":1143},[76,167808,148354],{"class":86},[76,167810,62648],{"class":192},[76,167812,51406],{"class":86},[76,167814,150905],{"class":192},[76,167816,12402],{"class":86},[76,167818,69093],{"class":192},[76,167820,51406],{"class":86},[76,167822,713],{"class":136},[76,167824,12402],{"class":86},[76,167826,151441],{"class":192},[76,167828,51406],{"class":86},[76,167830,899],{"class":136},[76,167832,4895],{"class":86},[76,167834,167835,167837,167839,167841,167843,167845,167847,167849,167851,167853,167855,167857,167859],{"class":78,"line":1158},[76,167836,148354],{"class":86},[76,167838,62648],{"class":192},[76,167840,51406],{"class":86},[76,167842,159700],{"class":192},[76,167844,12402],{"class":86},[76,167846,69093],{"class":192},[76,167848,51406],{"class":86},[76,167850,763],{"class":136},[76,167852,12402],{"class":86},[76,167854,151441],{"class":192},[76,167856,51406],{"class":86},[76,167858,970],{"class":136},[76,167860,4895],{"class":86},[76,167862,167863],{"class":78,"line":1164},[76,167864,33215],{"class":86},[76,167866,167867],{"class":78,"line":1178},[76,167868,2365],{"emptyLinePlaceholder":2364},[76,167870,167871],{"class":78,"line":1184},[76,167872,2365],{"emptyLinePlaceholder":2364},[76,167874,167875,167877,167880],{"class":78,"line":1275},[76,167876,31916],{"class":82},[76,167878,167879],{"class":1927}," filter_students",[76,167881,167882],{"class":86},"(students, condition):\n",[76,167884,167885,167887,167889],{"class":78,"line":1281},[76,167886,161192],{"class":86},[76,167888,133],{"class":82},[76,167890,51807],{"class":86},[76,167892,167893,167895,167897,167899],{"class":78,"line":1293},[76,167894,3166],{"class":82},[76,167896,152106],{"class":86},[76,167898,26012],{"class":82},[76,167900,152111],{"class":86},[76,167902,167903,167905],{"class":78,"line":1576},[76,167904,2462],{"class":82},[76,167906,167907],{"class":86}," condition(student):\n",[76,167909,167910],{"class":78,"line":1581},[76,167911,167912],{"class":86},"            result.append(student)\n",[76,167914,167915,167917],{"class":78,"line":1587},[76,167916,4055],{"class":82},[76,167918,167674],{"class":86},[76,167920,167921],{"class":78,"line":1592},[76,167922,2365],{"emptyLinePlaceholder":2364},[76,167924,167925],{"class":78,"line":1606},[76,167926,2365],{"emptyLinePlaceholder":2364},[76,167928,167929,167931,167933,167936,167938,167941,167943,167945,167947,167949],{"class":78,"line":1611},[76,167930,165670],{"class":86},[76,167932,133],{"class":82},[76,167934,167935],{"class":86}," filter_students(students, ",[76,167937,166855],{"class":82},[76,167939,167940],{"class":86}," s: s[",[76,167942,151441],{"class":192},[76,167944,4408],{"class":86},[76,167946,1674],{"class":82},[76,167948,157806],{"class":136},[76,167950,93],{"class":86},[76,167952,167953,167956,167958,167960,167962,167964,167966,167968,167970,167972],{"class":78,"line":1617},[76,167954,167955],{"class":86},"excellent ",[76,167957,133],{"class":82},[76,167959,167935],{"class":86},[76,167961,166855],{"class":82},[76,167963,167940],{"class":86},[76,167965,151441],{"class":192},[76,167967,4408],{"class":86},[76,167969,1674],{"class":82},[76,167971,157757],{"class":136},[76,167973,93],{"class":86},[76,167975,167976,167979,167981,167983,167985,167987,167989,167991,167993,167995],{"class":78,"line":1638},[76,167977,167978],{"class":86},"under_age ",[76,167980,133],{"class":82},[76,167982,167935],{"class":86},[76,167984,166855],{"class":82},[76,167986,167940],{"class":86},[76,167988,69093],{"class":192},[76,167990,4408],{"class":86},[76,167992,998],{"class":82},[76,167994,156254],{"class":136},[76,167996,93],{"class":86},[76,167998,167999],{"class":78,"line":1643},[76,168000,2365],{"emptyLinePlaceholder":2364},[76,168002,168003,168005],{"class":78,"line":1657},[76,168004,30384],{"class":136},[76,168006,168007],{"class":86},"(passed)\n",[76,168009,168010,168012],{"class":78,"line":1662},[76,168011,30384],{"class":136},[76,168013,168014],{"class":86},"(excellent)\n",[76,168016,168017,168019],{"class":78,"line":1691},[76,168018,30384],{"class":136},[76,168020,168021],{"class":86},"(under_age)\n",[16,168023,168025],{"id":168024},"_715-易错点","7.15 易错点",[29,168027,168028,168031,168039,168044,168055],{},[32,168029,168030],{},"默认参数不要写可变对象。",[32,168032,168033,168035,168036,168038],{},[73,168034,166501],{}," 是元组，",[73,168037,166616],{}," 是字典。",[32,168040,168041,168043],{},[73,168042,166855],{}," 只适合简单表达式。",[32,168045,168046,100987,168048,168050,168051,168054],{},[73,168047,74013],{},[73,168049,80020],{}," 的结果是迭代器，常用 ",[73,168052,168053],{},"list()"," 转换查看。",[32,168056,168057],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[16,168059,168061],{"id":168060},"_716-本章练习","7.16 本章练习",[29,168063,168064,168071,168077,168082,168087],{},[32,168065,168066,168067,168070],{},"写函数 ",[73,168068,168069],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[32,168072,168066,168073,168076],{},[73,168074,168075],{},"print_user(**kwargs)","，输出用户所有字段。",[32,168078,104335,168079,168081],{},[73,168080,166855],{}," 对学生列表按年龄排序。",[32,168083,104335,168084,168086],{},[73,168085,80020],{}," 找出成绩不及格的学生。",[32,168088,168089],{},"写一个装饰器，统计函数执行前后的提示信息。",[5092,168091,168092],{},"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":71,"searchDepth":96,"depth":96,"links":168094},[168095,168096,168097,168098,168099,168100,168104,168105,168106,168107,168112,168113,168114,168115,168116,168117],{"id":165953,"depth":96,"text":165954},{"id":166067,"depth":96,"text":166068},{"id":166156,"depth":96,"text":166157},{"id":166218,"depth":96,"text":166219},{"id":166364,"depth":96,"text":166365},{"id":166491,"depth":96,"text":166492,"children":168101},[168102,168103],{"id":166495,"depth":1143,"text":166496},{"id":166610,"depth":1143,"text":166611},{"id":166691,"depth":96,"text":166692},{"id":166849,"depth":96,"text":166850},{"id":167017,"depth":96,"text":167018},{"id":167099,"depth":96,"text":167100,"children":168108},[168109,168110,168111],{"id":167103,"depth":1143,"text":167104},{"id":167174,"depth":1143,"text":167175},{"id":167251,"depth":1143,"text":167252},{"id":167376,"depth":96,"text":167377},{"id":167466,"depth":96,"text":167467},{"id":167597,"depth":96,"text":167598},{"id":167747,"depth":96,"text":167748},{"id":168024,"depth":96,"text":168025},{"id":168060,"depth":96,"text":168061},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165945,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168124,"title":168125,"body":168126,"description":23344,"extension":5123,"meta":170645,"navigation":2364,"path":170646,"seo":170647,"stem":170648,"__hash__":170649},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":9,"value":168127,"toc":170620},[168128,168131,168135,168138,168141,168172,168176,168180,168183,168210,168214,168217,168268,168271,168286,168289,168324,168328,168330,168354,168357,168417,168421,168425,168428,168485,168488,168508,168512,168515,168578,168582,168585,168641,168648,168672,168676,168679,168742,168746,168751,168802,168805,168809,168814,168881,168884,168966,168970,168975,169026,169029,169033,169036,169039,169047,169050,169096,169099,169145,169149,169155,169199,169202,169248,169251,169291,169294,169355,169359,169362,169452,169455,169597,169600,169667,169671,169674,169677,169818,169821,169899,169902,170078,170082,170084,170095,170097,170296,170300,170544,170548,170582,170586,170617],[12,168129,168125],{"id":168130},"_8-文件操作",[16,168132,168134],{"id":168133},"_81-文件操作的意义","8.1 文件操作的意义",[21,168136,168137],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[21,168139,168140],{},"常见文件类型：",[29,168142,168143,168149,168155,168161,168167],{},[32,168144,168145,168148],{},[73,168146,168147],{},".txt","：普通文本。",[32,168150,168151,168154],{},[73,168152,168153],{},".csv","：表格文本。",[32,168156,168157,168160],{},[73,168158,168159],{},".json","：结构化数据。",[32,168162,168163,168166],{},[73,168164,168165],{},".log","：日志文件。",[32,168168,168169,168171],{},[73,168170,146321],{},"：Python 源代码。",[16,168173,168175],{"id":168174},"_82-路径","8.2 路径",[46,168177,168179],{"id":168178},"_821-相对路径","8.2.1 相对路径",[21,168181,168182],{},"相对当前运行目录：",[66,168184,168186],{"className":30347,"code":168185,"language":30349,"meta":71,"style":71},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[73,168187,168188],{"__ignoreMap":71},[76,168189,168190,168192,168194,168196,168198,168200,168202,168204,168206,168208],{"class":78,"line":79},[76,168191,86884],{"class":136},[76,168193,87],{"class":86},[76,168195,146765],{"class":192},[76,168197,12402],{"class":86},[76,168199,146770],{"class":192},[76,168201,12402],{"class":86},[76,168203,146775],{"class":5183},[76,168205,133],{"class":82},[76,168207,146780],{"class":192},[76,168209,93],{"class":86},[46,168211,168213],{"id":168212},"_822-绝对路径","8.2.2 绝对路径",[21,168215,168216],{},"从根目录或盘符开始：",[66,168218,168220],{"className":30347,"code":168219,"language":30349,"meta":71,"style":71},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[73,168221,168222,168245],{"__ignoreMap":71},[76,168223,168224,168226,168228,168231,168233,168235,168237,168239,168241,168243],{"class":78,"line":79},[76,168225,86884],{"class":136},[76,168227,87],{"class":86},[76,168229,168230],{"class":192},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[76,168232,12402],{"class":86},[76,168234,146770],{"class":192},[76,168236,12402],{"class":86},[76,168238,146775],{"class":5183},[76,168240,133],{"class":82},[76,168242,146780],{"class":192},[76,168244,93],{"class":86},[76,168246,168247,168249,168251,168254,168256,168258,168260,168262,168264,168266],{"class":78,"line":96},[76,168248,86884],{"class":136},[76,168250,87],{"class":86},[76,168252,168253],{"class":192},"\"D:\u002Fdata\u002Fdata.txt\"",[76,168255,12402],{"class":86},[76,168257,146770],{"class":192},[76,168259,12402],{"class":86},[76,168261,146775],{"class":5183},[76,168263,133],{"class":82},[76,168265,146780],{"class":192},[76,168267,93],{"class":86},[21,168269,168270],{},"Windows 路径建议写成：",[66,168272,168274],{"className":30347,"code":168273,"language":30349,"meta":71,"style":71},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[73,168275,168276],{"__ignoreMap":71},[76,168277,168278,168281,168283],{"class":78,"line":79},[76,168279,168280],{"class":86},"path ",[76,168282,133],{"class":82},[76,168284,168285],{"class":192}," \"D:\u002Fdata\u002Fdata.txt\"\n",[21,168287,168288],{},"或原始字符串：",[66,168290,168292],{"className":30347,"code":168291,"language":30349,"meta":71,"style":71},"path = r\"D:\\data\\data.txt\"\n",[73,168293,168294],{"__ignoreMap":71},[76,168295,168296,168298,168300,168302,168304,168307,168310,168313,168315,168317,168319,168322],{"class":78,"line":79},[76,168297,168280],{"class":86},[76,168299,133],{"class":82},[76,168301,17088],{"class":82},[76,168303,339],{"class":192},[76,168305,168306],{"class":47946},"D:",[76,168308,168309],{"class":136},"\\d",[76,168311,168312],{"class":47946},"ata",[76,168314,168309],{"class":136},[76,168316,168312],{"class":47946},[76,168318,646],{"class":136},[76,168320,168321],{"class":47946},"txt",[76,168323,25102],{"class":192},[16,168325,168327],{"id":168326},"_83-open函数","8.3 open函数",[21,168329,5148],{},[66,168331,168333],{"className":30347,"code":168332,"language":30349,"meta":71,"style":71},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[73,168334,168335],{"__ignoreMap":71},[76,168336,168337,168339,168341,168343,168346,168348,168350,168352],{"class":78,"line":79},[76,168338,45323],{"class":5183},[76,168340,13531],{"class":82},[76,168342,146760],{"class":136},[76,168344,168345],{"class":86},"(文件路径, 打开模式, ",[76,168347,146775],{"class":5183},[76,168349,133],{"class":82},[76,168351,146780],{"class":192},[76,168353,93],{"class":86},[21,168355,168356],{},"常见模式：",[225,168358,168359,168368],{},[228,168360,168361],{},[231,168362,168363,168366],{},[234,168364,168365],{},"模式",[234,168367,25838],{},[272,168369,168370,168379,168388,168397,168407],{},[231,168371,168372,168376],{},[277,168373,168374],{},[73,168375,758],{},[277,168377,168378],{},"只读，文件不存在会报错",[231,168380,168381,168385],{},[277,168382,168383],{},[73,168384,883],{},[277,168386,168387],{},"只写，文件不存在会创建，存在会清空",[231,168389,168390,168394],{},[277,168391,168392],{},[73,168393,326],{},[277,168395,168396],{},"追加，文件不存在会创建",[231,168398,168399,168404],{},[277,168400,168401],{},[73,168402,168403],{},"rb",[277,168405,168406],{},"二进制只读",[231,168408,168409,168414],{},[277,168410,168411],{},[73,168412,168413],{},"wb",[277,168415,168416],{},"二进制只写",[16,168418,168420],{"id":168419},"_84-读取文件","8.4 读取文件",[46,168422,168424],{"id":168423},"_841-read","8.4.1 read",[21,168426,168427],{},"一次读取全部内容：",[66,168429,168431],{"className":30347,"code":168430,"language":30349,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[73,168432,168433,168459,168471,168478],{"__ignoreMap":71},[76,168434,168435,168437,168439,168441,168443,168445,168447,168449,168451,168453,168455,168457],{"class":78,"line":79},[76,168436,45323],{"class":5183},[76,168438,13531],{"class":82},[76,168440,146760],{"class":136},[76,168442,87],{"class":86},[76,168444,146765],{"class":192},[76,168446,12402],{"class":86},[76,168448,146770],{"class":192},[76,168450,12402],{"class":86},[76,168452,146775],{"class":5183},[76,168454,133],{"class":82},[76,168456,146780],{"class":192},[76,168458,93],{"class":86},[76,168460,168461,168464,168466,168468],{"class":78,"line":96},[76,168462,168463],{"class":86},"content ",[76,168465,133],{"class":82},[76,168467,148122],{"class":5183},[76,168469,168470],{"class":86},".read()\n",[76,168472,168473,168475],{"class":78,"line":1143},[76,168474,30384],{"class":136},[76,168476,168477],{"class":86},"(content)\n",[76,168479,168480,168482],{"class":78,"line":1158},[76,168481,45323],{"class":5183},[76,168483,168484],{"class":86},".close()\n",[21,168486,168487],{},"可以指定读取字符数：",[66,168489,168491],{"className":30347,"code":168490,"language":30349,"meta":71,"style":71},"content = file.read(10)\n",[73,168492,168493],{"__ignoreMap":71},[76,168494,168495,168497,168499,168501,168504,168506],{"class":78,"line":79},[76,168496,168463],{"class":86},[76,168498,133],{"class":82},[76,168500,148122],{"class":5183},[76,168502,168503],{"class":86},".read(",[76,168505,534],{"class":136},[76,168507,93],{"class":86},[46,168509,168511],{"id":168510},"_842-readline","8.4.2 readline",[21,168513,168514],{},"一次读取一行：",[66,168516,168518],{"className":30347,"code":168517,"language":30349,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[73,168519,168520,168546,168550,168561,168568,168572],{"__ignoreMap":71},[76,168521,168522,168524,168526,168528,168530,168532,168534,168536,168538,168540,168542,168544],{"class":78,"line":79},[76,168523,45323],{"class":5183},[76,168525,13531],{"class":82},[76,168527,146760],{"class":136},[76,168529,87],{"class":86},[76,168531,146765],{"class":192},[76,168533,12402],{"class":86},[76,168535,146770],{"class":192},[76,168537,12402],{"class":86},[76,168539,146775],{"class":5183},[76,168541,133],{"class":82},[76,168543,146780],{"class":192},[76,168545,93],{"class":86},[76,168547,168548],{"class":78,"line":96},[76,168549,2365],{"emptyLinePlaceholder":2364},[76,168551,168552,168554,168556,168558],{"class":78,"line":1143},[76,168553,147221],{"class":86},[76,168555,133],{"class":82},[76,168557,148122],{"class":5183},[76,168559,168560],{"class":86},".readline()\n",[76,168562,168563,168565],{"class":78,"line":1158},[76,168564,30384],{"class":136},[76,168566,168567],{"class":86},"(line)\n",[76,168569,168570],{"class":78,"line":1164},[76,168571,2365],{"emptyLinePlaceholder":2364},[76,168573,168574,168576],{"class":78,"line":1178},[76,168575,45323],{"class":5183},[76,168577,168484],{"class":86},[46,168579,168581],{"id":168580},"_843-readlines","8.4.3 readlines",[21,168583,168584],{},"读取所有行，返回列表：",[66,168586,168588],{"className":30347,"code":168587,"language":30349,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[73,168589,168590,168616,168628,168635],{"__ignoreMap":71},[76,168591,168592,168594,168596,168598,168600,168602,168604,168606,168608,168610,168612,168614],{"class":78,"line":79},[76,168593,45323],{"class":5183},[76,168595,13531],{"class":82},[76,168597,146760],{"class":136},[76,168599,87],{"class":86},[76,168601,146765],{"class":192},[76,168603,12402],{"class":86},[76,168605,146770],{"class":192},[76,168607,12402],{"class":86},[76,168609,146775],{"class":5183},[76,168611,133],{"class":82},[76,168613,146780],{"class":192},[76,168615,93],{"class":86},[76,168617,168618,168621,168623,168625],{"class":78,"line":96},[76,168619,168620],{"class":86},"lines ",[76,168622,133],{"class":82},[76,168624,148122],{"class":5183},[76,168626,168627],{"class":86},".readlines()\n",[76,168629,168630,168632],{"class":78,"line":1143},[76,168631,30384],{"class":136},[76,168633,168634],{"class":86},"(lines)\n",[76,168636,168637,168639],{"class":78,"line":1158},[76,168638,45323],{"class":5183},[76,168640,168484],{"class":86},[21,168642,168643,168644,168647],{},"每一行通常带有换行符，可以用 ",[73,168645,168646],{},"strip()"," 去掉：",[66,168649,168651],{"className":30347,"code":168650,"language":30349,"meta":71,"style":71},"for line in lines:\n    print(line.strip())\n",[73,168652,168653,168665],{"__ignoreMap":71},[76,168654,168655,168657,168660,168662],{"class":78,"line":79},[76,168656,2990],{"class":82},[76,168658,168659],{"class":86}," line ",[76,168661,26012],{"class":82},[76,168663,168664],{"class":86}," lines:\n",[76,168666,168667,168669],{"class":78,"line":96},[76,168668,31268],{"class":136},[76,168670,168671],{"class":86},"(line.strip())\n",[46,168673,168675],{"id":168674},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[21,168677,168678],{},"推荐读取大文件时使用：",[66,168680,168682],{"className":30347,"code":168681,"language":30349,"meta":71,"style":71},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[73,168683,168684,168710,168714,168726,168732,168736],{"__ignoreMap":71},[76,168685,168686,168688,168690,168692,168694,168696,168698,168700,168702,168704,168706,168708],{"class":78,"line":79},[76,168687,45323],{"class":5183},[76,168689,13531],{"class":82},[76,168691,146760],{"class":136},[76,168693,87],{"class":86},[76,168695,146765],{"class":192},[76,168697,12402],{"class":86},[76,168699,146770],{"class":192},[76,168701,12402],{"class":86},[76,168703,146775],{"class":5183},[76,168705,133],{"class":82},[76,168707,146780],{"class":192},[76,168709,93],{"class":86},[76,168711,168712],{"class":78,"line":96},[76,168713,2365],{"emptyLinePlaceholder":2364},[76,168715,168716,168718,168720,168722,168724],{"class":78,"line":1143},[76,168717,2990],{"class":82},[76,168719,168659],{"class":86},[76,168721,26012],{"class":82},[76,168723,148122],{"class":5183},[76,168725,3704],{"class":86},[76,168727,168728,168730],{"class":78,"line":1158},[76,168729,31268],{"class":136},[76,168731,168671],{"class":86},[76,168733,168734],{"class":78,"line":1164},[76,168735,2365],{"emptyLinePlaceholder":2364},[76,168737,168738,168740],{"class":78,"line":1178},[76,168739,45323],{"class":5183},[76,168741,168484],{"class":86},[16,168743,168745],{"id":168744},"_85-with语句","8.5 with语句",[21,168747,168748,168750],{},[73,168749,107802],{}," 会自动关闭文件，推荐使用。",[66,168752,168754],{"className":30347,"code":168753,"language":30349,"meta":71,"style":71},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[73,168755,168756,168786,168796],{"__ignoreMap":71},[76,168757,168758,168760,168762,168764,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784],{"class":78,"line":79},[76,168759,107802],{"class":82},[76,168761,146760],{"class":136},[76,168763,87],{"class":86},[76,168765,146765],{"class":192},[76,168767,12402],{"class":86},[76,168769,146770],{"class":192},[76,168771,12402],{"class":86},[76,168773,146775],{"class":5183},[76,168775,133],{"class":82},[76,168777,146780],{"class":192},[76,168779,13681],{"class":86},[76,168781,31352],{"class":82},[76,168783,148122],{"class":5183},[76,168785,3704],{"class":86},[76,168787,168788,168790,168792,168794],{"class":78,"line":96},[76,168789,146792],{"class":86},[76,168791,133],{"class":82},[76,168793,148122],{"class":5183},[76,168795,168470],{"class":86},[76,168797,168798,168800],{"class":78,"line":1143},[76,168799,31268],{"class":136},[76,168801,168477],{"class":86},[21,168803,168804],{},"等价于打开文件、读取、最后关闭，但更安全。",[16,168806,168808],{"id":168807},"_86-写入文件","8.6 写入文件",[21,168810,168811,168813],{},[73,168812,883],{}," 模式会清空原文件。",[66,168815,168817],{"className":30347,"code":168816,"language":30349,"meta":71,"style":71},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[73,168818,168819,168849,168866],{"__ignoreMap":71},[76,168820,168821,168823,168825,168827,168829,168831,168833,168835,168837,168839,168841,168843,168845,168847],{"class":78,"line":79},[76,168822,107802],{"class":82},[76,168824,146760],{"class":136},[76,168826,87],{"class":86},[76,168828,146765],{"class":192},[76,168830,12402],{"class":86},[76,168832,151945],{"class":192},[76,168834,12402],{"class":86},[76,168836,146775],{"class":5183},[76,168838,133],{"class":82},[76,168840,146780],{"class":192},[76,168842,13681],{"class":86},[76,168844,31352],{"class":82},[76,168846,148122],{"class":5183},[76,168848,3704],{"class":86},[76,168850,168851,168854,168857,168860,168862,168864],{"class":78,"line":96},[76,168852,168853],{"class":5183},"    file",[76,168855,168856],{"class":86},".write(",[76,168858,168859],{"class":192},"\"hello",[76,168861,156494],{"class":136},[76,168863,339],{"class":192},[76,168865,93],{"class":86},[76,168867,168868,168870,168872,168875,168877,168879],{"class":78,"line":1143},[76,168869,168853],{"class":5183},[76,168871,168856],{"class":86},[76,168873,168874],{"class":192},"\"python",[76,168876,156494],{"class":136},[76,168878,339],{"class":192},[76,168880,93],{"class":86},[21,168882,168883],{},"写入多行：",[66,168885,168887],{"className":30347,"code":168886,"language":30349,"meta":71,"style":71},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[73,168888,168889,168924,168928,168959],{"__ignoreMap":71},[76,168890,168891,168893,168895,168897,168900,168902,168904,168906,168909,168911,168913,168915,168918,168920,168922],{"class":78,"line":79},[76,168892,168620],{"class":86},[76,168894,133],{"class":82},[76,168896,52195],{"class":86},[76,168898,168899],{"class":192},"\"小明,18",[76,168901,156494],{"class":136},[76,168903,339],{"class":192},[76,168905,12402],{"class":86},[76,168907,168908],{"class":192},"\"小红,17",[76,168910,156494],{"class":136},[76,168912,339],{"class":192},[76,168914,12402],{"class":86},[76,168916,168917],{"class":192},"\"小刚,19",[76,168919,156494],{"class":136},[76,168921,339],{"class":192},[76,168923,33215],{"class":86},[76,168925,168926],{"class":78,"line":96},[76,168927,2365],{"emptyLinePlaceholder":2364},[76,168929,168930,168932,168934,168936,168939,168941,168943,168945,168947,168949,168951,168953,168955,168957],{"class":78,"line":1143},[76,168931,107802],{"class":82},[76,168933,146760],{"class":136},[76,168935,87],{"class":86},[76,168937,168938],{"class":192},"\"students.txt\"",[76,168940,12402],{"class":86},[76,168942,151945],{"class":192},[76,168944,12402],{"class":86},[76,168946,146775],{"class":5183},[76,168948,133],{"class":82},[76,168950,146780],{"class":192},[76,168952,13681],{"class":86},[76,168954,31352],{"class":82},[76,168956,148122],{"class":5183},[76,168958,3704],{"class":86},[76,168960,168961,168963],{"class":78,"line":1158},[76,168962,168853],{"class":5183},[76,168964,168965],{"class":86},".writelines(lines)\n",[16,168967,168969],{"id":168968},"_87-追加文件","8.7 追加文件",[21,168971,168972,168974],{},[73,168973,326],{}," 模式不会清空原内容，而是在末尾追加。",[66,168976,168978],{"className":30347,"code":168977,"language":30349,"meta":71,"style":71},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[73,168979,168980,169011],{"__ignoreMap":71},[76,168981,168982,168984,168986,168988,168991,168993,168995,168997,168999,169001,169003,169005,169007,169009],{"class":78,"line":79},[76,168983,107802],{"class":82},[76,168985,146760],{"class":136},[76,168987,87],{"class":86},[76,168989,168990],{"class":192},"\"log.txt\"",[76,168992,12402],{"class":86},[76,168994,165294],{"class":192},[76,168996,12402],{"class":86},[76,168998,146775],{"class":5183},[76,169000,133],{"class":82},[76,169002,146780],{"class":192},[76,169004,13681],{"class":86},[76,169006,31352],{"class":82},[76,169008,148122],{"class":5183},[76,169010,3704],{"class":86},[76,169012,169013,169015,169017,169020,169022,169024],{"class":78,"line":96},[76,169014,168853],{"class":5183},[76,169016,168856],{"class":86},[76,169018,169019],{"class":192},"\"程序启动",[76,169021,156494],{"class":136},[76,169023,339],{"class":192},[76,169025,93],{"class":86},[21,169027,169028],{},"日志类文件常用追加模式。",[16,169030,169032],{"id":169031},"_88-文件编码","8.8 文件编码",[21,169034,169035],{},"编码决定文字如何保存为字节。",[21,169037,169038],{},"常见编码：",[29,169040,169041,169044],{},[32,169042,169043],{},"UTF-8：推荐。",[32,169045,169046],{},"GBK：部分 Windows 中文文件常见。",[21,169048,169049],{},"读取文件乱码时，可以尝试：",[66,169051,169053],{"className":30347,"code":169052,"language":30349,"meta":71,"style":71},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[73,169054,169055,169086],{"__ignoreMap":71},[76,169056,169057,169059,169061,169063,169065,169067,169069,169071,169073,169075,169078,169080,169082,169084],{"class":78,"line":79},[76,169058,107802],{"class":82},[76,169060,146760],{"class":136},[76,169062,87],{"class":86},[76,169064,146765],{"class":192},[76,169066,12402],{"class":86},[76,169068,146770],{"class":192},[76,169070,12402],{"class":86},[76,169072,146775],{"class":5183},[76,169074,133],{"class":82},[76,169076,169077],{"class":192},"\"gbk\"",[76,169079,13681],{"class":86},[76,169081,31352],{"class":82},[76,169083,148122],{"class":5183},[76,169085,3704],{"class":86},[76,169087,169088,169090,169092,169094],{"class":78,"line":96},[76,169089,146792],{"class":86},[76,169091,133],{"class":82},[76,169093,148122],{"class":5183},[76,169095,168470],{"class":86},[21,169097,169098],{},"写文件时建议统一 UTF-8：",[66,169100,169102],{"className":30347,"code":169101,"language":30349,"meta":71,"style":71},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[73,169103,169104,169134],{"__ignoreMap":71},[76,169105,169106,169108,169110,169112,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132],{"class":78,"line":79},[76,169107,107802],{"class":82},[76,169109,146760],{"class":136},[76,169111,87],{"class":86},[76,169113,146765],{"class":192},[76,169115,12402],{"class":86},[76,169117,151945],{"class":192},[76,169119,12402],{"class":86},[76,169121,146775],{"class":5183},[76,169123,133],{"class":82},[76,169125,146780],{"class":192},[76,169127,13681],{"class":86},[76,169129,31352],{"class":82},[76,169131,148122],{"class":5183},[76,169133,3704],{"class":86},[76,169135,169136,169138,169140,169143],{"class":78,"line":96},[76,169137,168853],{"class":5183},[76,169139,168856],{"class":86},[76,169141,169142],{"class":192},"\"中文内容\"",[76,169144,93],{"class":86},[16,169146,169148],{"id":169147},"_89-pathlib","8.9 pathlib",[21,169150,169151,169154],{},[73,169152,169153],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[66,169156,169158],{"className":30347,"code":169157,"language":30349,"meta":71,"style":71},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[73,169159,169160,169170,169174,169192],{"__ignoreMap":71},[76,169161,169162,169164,169166,169168],{"class":78,"line":79},[76,169163,30706],{"class":82},[76,169165,108280],{"class":86},[76,169167,30361],{"class":82},[76,169169,108285],{"class":86},[76,169171,169172],{"class":78,"line":96},[76,169173,2365],{"emptyLinePlaceholder":2364},[76,169175,169176,169178,169180,169182,169185,169187,169189],{"class":78,"line":1143},[76,169177,168280],{"class":86},[76,169179,133],{"class":82},[76,169181,108514],{"class":86},[76,169183,169184],{"class":192},"\"data\"",[76,169186,13681],{"class":86},[76,169188,672],{"class":82},[76,169190,169191],{"class":192}," \"students.txt\"\n",[76,169193,169194,169196],{"class":78,"line":1158},[76,169195,30384],{"class":136},[76,169197,169198],{"class":86},"(path)\n",[21,169200,169201],{},"创建目录：",[66,169203,169205],{"className":30347,"code":169204,"language":30349,"meta":71,"style":71},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[73,169206,169207,169217,169221,169234],{"__ignoreMap":71},[76,169208,169209,169211,169213,169215],{"class":78,"line":79},[76,169210,30706],{"class":82},[76,169212,108280],{"class":86},[76,169214,30361],{"class":82},[76,169216,108285],{"class":86},[76,169218,169219],{"class":78,"line":96},[76,169220,2365],{"emptyLinePlaceholder":2364},[76,169222,169223,169226,169228,169230,169232],{"class":78,"line":1143},[76,169224,169225],{"class":86},"data_dir ",[76,169227,133],{"class":82},[76,169229,108514],{"class":86},[76,169231,169184],{"class":192},[76,169233,93],{"class":86},[76,169235,169236,169239,169242,169244,169246],{"class":78,"line":1158},[76,169237,169238],{"class":86},"data_dir.mkdir(",[76,169240,169241],{"class":5183},"exist_ok",[76,169243,133],{"class":82},[76,169245,31445],{"class":136},[76,169247,93],{"class":86},[21,169249,169250],{},"判断文件是否存在：",[66,169252,169254],{"className":30347,"code":169253,"language":30349,"meta":71,"style":71},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[73,169255,169256,169269,169273,169280],{"__ignoreMap":71},[76,169257,169258,169260,169262,169264,169267],{"class":78,"line":79},[76,169259,168280],{"class":86},[76,169261,133],{"class":82},[76,169263,108514],{"class":86},[76,169265,169266],{"class":192},"\"data\u002Fstudents.txt\"",[76,169268,93],{"class":86},[76,169270,169271],{"class":78,"line":96},[76,169272,2365],{"emptyLinePlaceholder":2364},[76,169274,169275,169277],{"class":78,"line":1143},[76,169276,1495],{"class":82},[76,169278,169279],{"class":86}," path.exists():\n",[76,169281,169282,169284,169286,169289],{"class":78,"line":1158},[76,169283,31268],{"class":136},[76,169285,87],{"class":86},[76,169287,169288],{"class":192},"\"文件存在\"",[76,169290,93],{"class":86},[21,169292,169293],{},"读写文本：",[66,169295,169297],{"className":30347,"code":169296,"language":30349,"meta":71,"style":71},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[73,169298,169299,169311,169315,169332,169349],{"__ignoreMap":71},[76,169300,169301,169303,169305,169307,169309],{"class":78,"line":79},[76,169302,168280],{"class":86},[76,169304,133],{"class":82},[76,169306,108514],{"class":86},[76,169308,146765],{"class":192},[76,169310,93],{"class":86},[76,169312,169313],{"class":78,"line":96},[76,169314,2365],{"emptyLinePlaceholder":2364},[76,169316,169317,169320,169322,169324,169326,169328,169330],{"class":78,"line":1143},[76,169318,169319],{"class":86},"path.write_text(",[76,169321,145845],{"class":192},[76,169323,12402],{"class":86},[76,169325,146775],{"class":5183},[76,169327,133],{"class":82},[76,169329,146780],{"class":192},[76,169331,93],{"class":86},[76,169333,169334,169336,169338,169341,169343,169345,169347],{"class":78,"line":1158},[76,169335,168463],{"class":86},[76,169337,133],{"class":82},[76,169339,169340],{"class":86}," path.read_text(",[76,169342,146775],{"class":5183},[76,169344,133],{"class":82},[76,169346,146780],{"class":192},[76,169348,93],{"class":86},[76,169350,169351,169353],{"class":78,"line":1164},[76,169352,30384],{"class":136},[76,169354,168477],{"class":86},[16,169356,169358],{"id":169357},"_810-json文件","8.10 JSON文件",[21,169360,169361],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[66,169363,169365],{"className":30347,"code":169364,"language":30349,"meta":71,"style":71},"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",[73,169366,169367,169373,169377,169385,169395,169405,169413,169417,169421,169446],{"__ignoreMap":71},[76,169368,169369,169371],{"class":78,"line":79},[76,169370,30361],{"class":82},[76,169372,147060],{"class":86},[76,169374,169375],{"class":78,"line":96},[76,169376,2365],{"emptyLinePlaceholder":2364},[76,169378,169379,169381,169383],{"class":78,"line":1143},[76,169380,149450],{"class":86},[76,169382,133],{"class":82},[76,169384,15539],{"class":86},[76,169386,169387,169389,169391,169393],{"class":78,"line":1158},[76,169388,146989],{"class":192},[76,169390,51406],{"class":86},[76,169392,149857],{"class":192},[76,169394,31435],{"class":86},[76,169396,169397,169399,169401,169403],{"class":78,"line":1164},[76,169398,164506],{"class":192},[76,169400,51406],{"class":86},[76,169402,738],{"class":136},[76,169404,31435],{"class":86},[76,169406,169407,169409,169411],{"class":78,"line":1178},[76,169408,164517],{"class":192},[76,169410,51406],{"class":86},[76,169412,164522],{"class":136},[76,169414,169415],{"class":78,"line":1184},[76,169416,1529],{"class":86},[76,169418,169419],{"class":78,"line":1275},[76,169420,2365],{"emptyLinePlaceholder":2364},[76,169422,169423,169425,169427,169430,169432,169434,169436,169438,169440,169442,169444],{"class":78,"line":1281},[76,169424,156413],{"class":86},[76,169426,133],{"class":82},[76,169428,169429],{"class":86}," json.dumps(student, ",[76,169431,147106],{"class":5183},[76,169433,133],{"class":82},[76,169435,33956],{"class":136},[76,169437,12402],{"class":86},[76,169439,151981],{"class":5183},[76,169441,133],{"class":82},[76,169443,165],{"class":136},[76,169445,93],{"class":86},[76,169447,169448,169450],{"class":78,"line":1293},[76,169449,30384],{"class":136},[76,169451,164040],{"class":86},[21,169453,169454],{},"写入 JSON 文件：",[66,169456,169458],{"className":30347,"code":169457,"language":30349,"meta":71,"style":71},"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",[73,169459,169460,169466,169470,169478,169506,169534,169538,169542,169572],{"__ignoreMap":71},[76,169461,169462,169464],{"class":78,"line":79},[76,169463,30361],{"class":82},[76,169465,147060],{"class":86},[76,169467,169468],{"class":78,"line":96},[76,169469,2365],{"emptyLinePlaceholder":2364},[76,169471,169472,169474,169476],{"class":78,"line":1143},[76,169473,159685],{"class":86},[76,169475,133],{"class":82},[76,169477,55416],{"class":86},[76,169479,169480,169482,169484,169486,169488,169490,169492,169494,169496,169498,169500,169502,169504],{"class":78,"line":1158},[76,169481,148354],{"class":86},[76,169483,62648],{"class":192},[76,169485,51406],{"class":86},[76,169487,149857],{"class":192},[76,169489,12402],{"class":86},[76,169491,69093],{"class":192},[76,169493,51406],{"class":86},[76,169495,738],{"class":136},[76,169497,12402],{"class":86},[76,169499,151441],{"class":192},[76,169501,51406],{"class":86},[76,169503,1077],{"class":136},[76,169505,4895],{"class":86},[76,169507,169508,169510,169512,169514,169516,169518,169520,169522,169524,169526,169528,169530,169532],{"class":78,"line":1164},[76,169509,148354],{"class":86},[76,169511,62648],{"class":192},[76,169513,51406],{"class":86},[76,169515,150905],{"class":192},[76,169517,12402],{"class":86},[76,169519,69093],{"class":192},[76,169521,51406],{"class":86},[76,169523,713],{"class":136},[76,169525,12402],{"class":86},[76,169527,151441],{"class":192},[76,169529,51406],{"class":86},[76,169531,899],{"class":136},[76,169533,4895],{"class":86},[76,169535,169536],{"class":78,"line":1178},[76,169537,33215],{"class":86},[76,169539,169540],{"class":78,"line":1184},[76,169541,2365],{"emptyLinePlaceholder":2364},[76,169543,169544,169546,169548,169550,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570],{"class":78,"line":1275},[76,169545,107802],{"class":82},[76,169547,146760],{"class":136},[76,169549,87],{"class":86},[76,169551,151800],{"class":192},[76,169553,12402],{"class":86},[76,169555,151945],{"class":192},[76,169557,12402],{"class":86},[76,169559,146775],{"class":5183},[76,169561,133],{"class":82},[76,169563,146780],{"class":192},[76,169565,13681],{"class":86},[76,169567,31352],{"class":82},[76,169569,148122],{"class":5183},[76,169571,3704],{"class":86},[76,169573,169574,169577,169579,169581,169583,169585,169587,169589,169591,169593,169595],{"class":78,"line":1281},[76,169575,169576],{"class":86},"    json.dump(students, ",[76,169578,45323],{"class":5183},[76,169580,12402],{"class":86},[76,169582,147106],{"class":5183},[76,169584,133],{"class":82},[76,169586,33956],{"class":136},[76,169588,12402],{"class":86},[76,169590,151981],{"class":5183},[76,169592,133],{"class":82},[76,169594,165],{"class":136},[76,169596,93],{"class":86},[21,169598,169599],{},"读取 JSON 文件：",[66,169601,169603],{"className":30347,"code":169602,"language":30349,"meta":71,"style":71},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[73,169604,169605,169611,169615,169645,169657,169661],{"__ignoreMap":71},[76,169606,169607,169609],{"class":78,"line":79},[76,169608,30361],{"class":82},[76,169610,147060],{"class":86},[76,169612,169613],{"class":78,"line":96},[76,169614,2365],{"emptyLinePlaceholder":2364},[76,169616,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643],{"class":78,"line":1143},[76,169618,107802],{"class":82},[76,169620,146760],{"class":136},[76,169622,87],{"class":86},[76,169624,151800],{"class":192},[76,169626,12402],{"class":86},[76,169628,146770],{"class":192},[76,169630,12402],{"class":86},[76,169632,146775],{"class":5183},[76,169634,133],{"class":82},[76,169636,146780],{"class":192},[76,169638,13681],{"class":86},[76,169640,31352],{"class":82},[76,169642,148122],{"class":5183},[76,169644,3704],{"class":86},[76,169646,169647,169649,169651,169653,169655],{"class":78,"line":1158},[76,169648,153006],{"class":86},[76,169650,133],{"class":82},[76,169652,148133],{"class":86},[76,169654,45323],{"class":5183},[76,169656,93],{"class":86},[76,169658,169659],{"class":78,"line":1164},[76,169660,2365],{"emptyLinePlaceholder":2364},[76,169662,169663,169665],{"class":78,"line":1178},[76,169664,30384],{"class":136},[76,169666,164964],{"class":86},[16,169668,169670],{"id":169669},"_811-csv文件","8.11 CSV文件",[21,169672,169673],{},"CSV 是逗号分隔值，常用于表格数据。",[21,169675,169676],{},"写入 CSV：",[66,169678,169680],{"className":30347,"code":169679,"language":30349,"meta":71,"style":71},"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",[73,169681,169682,169689,169693,169701,169719,169735,169751,169755,169759,169799,169813],{"__ignoreMap":71},[76,169683,169684,169686],{"class":78,"line":79},[76,169685,30361],{"class":82},[76,169687,169688],{"class":86}," csv\n",[76,169690,169691],{"class":78,"line":96},[76,169692,2365],{"emptyLinePlaceholder":2364},[76,169694,169695,169697,169699],{"class":78,"line":1143},[76,169696,159685],{"class":86},[76,169698,133],{"class":82},[76,169700,55416],{"class":86},[76,169702,169703,169706,169708,169710,169712,169714,169717],{"class":78,"line":1158},[76,169704,169705],{"class":86},"    [",[76,169707,73068],{"class":192},[76,169709,12402],{"class":86},[76,169711,73101],{"class":192},[76,169713,12402],{"class":86},[76,169715,169716],{"class":192},"\"成绩\"",[76,169718,87805],{"class":86},[76,169720,169721,169723,169725,169727,169729,169731,169733],{"class":78,"line":1164},[76,169722,169705],{"class":86},[76,169724,149857],{"class":192},[76,169726,12402],{"class":86},[76,169728,738],{"class":136},[76,169730,12402],{"class":86},[76,169732,1077],{"class":136},[76,169734,87805],{"class":86},[76,169736,169737,169739,169741,169743,169745,169747,169749],{"class":78,"line":1178},[76,169738,169705],{"class":86},[76,169740,150905],{"class":192},[76,169742,12402],{"class":86},[76,169744,713],{"class":136},[76,169746,12402],{"class":86},[76,169748,899],{"class":136},[76,169750,87805],{"class":86},[76,169752,169753],{"class":78,"line":1184},[76,169754,33215],{"class":86},[76,169756,169757],{"class":78,"line":1275},[76,169758,2365],{"emptyLinePlaceholder":2364},[76,169760,169761,169763,169765,169767,169770,169772,169774,169776,169778,169780,169782,169784,169787,169789,169791,169793,169795,169797],{"class":78,"line":1281},[76,169762,107802],{"class":82},[76,169764,146760],{"class":136},[76,169766,87],{"class":86},[76,169768,169769],{"class":192},"\"students.csv\"",[76,169771,12402],{"class":86},[76,169773,151945],{"class":192},[76,169775,12402],{"class":86},[76,169777,146775],{"class":5183},[76,169779,133],{"class":82},[76,169781,146780],{"class":192},[76,169783,12402],{"class":86},[76,169785,169786],{"class":5183},"newline",[76,169788,133],{"class":82},[76,169790,7619],{"class":192},[76,169792,13681],{"class":86},[76,169794,31352],{"class":82},[76,169796,148122],{"class":5183},[76,169798,3704],{"class":86},[76,169800,169801,169804,169806,169809,169811],{"class":78,"line":1293},[76,169802,169803],{"class":86},"    writer ",[76,169805,133],{"class":82},[76,169807,169808],{"class":86}," csv.writer(",[76,169810,45323],{"class":5183},[76,169812,93],{"class":86},[76,169814,169815],{"class":78,"line":1576},[76,169816,169817],{"class":86},"    writer.writerows(students)\n",[21,169819,169820],{},"读取 CSV：",[66,169822,169824],{"className":30347,"code":169823,"language":30349,"meta":71,"style":71},"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",[73,169825,169826,169832,169836,169866,169880,169892],{"__ignoreMap":71},[76,169827,169828,169830],{"class":78,"line":79},[76,169829,30361],{"class":82},[76,169831,169688],{"class":86},[76,169833,169834],{"class":78,"line":96},[76,169835,2365],{"emptyLinePlaceholder":2364},[76,169837,169838,169840,169842,169844,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864],{"class":78,"line":1143},[76,169839,107802],{"class":82},[76,169841,146760],{"class":136},[76,169843,87],{"class":86},[76,169845,169769],{"class":192},[76,169847,12402],{"class":86},[76,169849,146770],{"class":192},[76,169851,12402],{"class":86},[76,169853,146775],{"class":5183},[76,169855,133],{"class":82},[76,169857,146780],{"class":192},[76,169859,13681],{"class":86},[76,169861,31352],{"class":82},[76,169863,148122],{"class":5183},[76,169865,3704],{"class":86},[76,169867,169868,169871,169873,169876,169878],{"class":78,"line":1158},[76,169869,169870],{"class":86},"    reader ",[76,169872,133],{"class":82},[76,169874,169875],{"class":86}," csv.reader(",[76,169877,45323],{"class":5183},[76,169879,93],{"class":86},[76,169881,169882,169884,169887,169889],{"class":78,"line":1164},[76,169883,3166],{"class":82},[76,169885,169886],{"class":86}," row ",[76,169888,26012],{"class":82},[76,169890,169891],{"class":86}," reader:\n",[76,169893,169894,169896],{"class":78,"line":1178},[76,169895,32420],{"class":136},[76,169897,169898],{"class":86},"(row)\n",[21,169900,169901],{},"使用字典写入：",[66,169903,169905],{"className":30347,"code":169904,"language":30349,"meta":71,"style":71},"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",[73,169906,169907,169913,169917,169925,169953,169981,169985,169989,170027,170048,170069,170074],{"__ignoreMap":71},[76,169908,169909,169911],{"class":78,"line":79},[76,169910,30361],{"class":82},[76,169912,169688],{"class":86},[76,169914,169915],{"class":78,"line":96},[76,169916,2365],{"emptyLinePlaceholder":2364},[76,169918,169919,169921,169923],{"class":78,"line":1143},[76,169920,159685],{"class":86},[76,169922,133],{"class":82},[76,169924,55416],{"class":86},[76,169926,169927,169929,169931,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951],{"class":78,"line":1158},[76,169928,148354],{"class":86},[76,169930,62648],{"class":192},[76,169932,51406],{"class":86},[76,169934,149857],{"class":192},[76,169936,12402],{"class":86},[76,169938,69093],{"class":192},[76,169940,51406],{"class":86},[76,169942,738],{"class":136},[76,169944,12402],{"class":86},[76,169946,151441],{"class":192},[76,169948,51406],{"class":86},[76,169950,1077],{"class":136},[76,169952,4895],{"class":86},[76,169954,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979],{"class":78,"line":1164},[76,169956,148354],{"class":86},[76,169958,62648],{"class":192},[76,169960,51406],{"class":86},[76,169962,150905],{"class":192},[76,169964,12402],{"class":86},[76,169966,69093],{"class":192},[76,169968,51406],{"class":86},[76,169970,713],{"class":136},[76,169972,12402],{"class":86},[76,169974,151441],{"class":192},[76,169976,51406],{"class":86},[76,169978,899],{"class":136},[76,169980,4895],{"class":86},[76,169982,169983],{"class":78,"line":1178},[76,169984,33215],{"class":86},[76,169986,169987],{"class":78,"line":1184},[76,169988,2365],{"emptyLinePlaceholder":2364},[76,169990,169991,169993,169995,169997,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025],{"class":78,"line":1275},[76,169992,107802],{"class":82},[76,169994,146760],{"class":136},[76,169996,87],{"class":86},[76,169998,169769],{"class":192},[76,170000,12402],{"class":86},[76,170002,151945],{"class":192},[76,170004,12402],{"class":86},[76,170006,146775],{"class":5183},[76,170008,133],{"class":82},[76,170010,146780],{"class":192},[76,170012,12402],{"class":86},[76,170014,169786],{"class":5183},[76,170016,133],{"class":82},[76,170018,7619],{"class":192},[76,170020,13681],{"class":86},[76,170022,31352],{"class":82},[76,170024,148122],{"class":5183},[76,170026,3704],{"class":86},[76,170028,170029,170032,170034,170036,170038,170040,170042,170044,170046],{"class":78,"line":1281},[76,170030,170031],{"class":86},"    fieldnames ",[76,170033,133],{"class":82},[76,170035,52195],{"class":86},[76,170037,62648],{"class":192},[76,170039,12402],{"class":86},[76,170041,69093],{"class":192},[76,170043,12402],{"class":86},[76,170045,151441],{"class":192},[76,170047,33215],{"class":86},[76,170049,170050,170052,170054,170057,170059,170061,170064,170066],{"class":78,"line":1293},[76,170051,169803],{"class":86},[76,170053,133],{"class":82},[76,170055,170056],{"class":86}," csv.DictWriter(",[76,170058,45323],{"class":5183},[76,170060,12402],{"class":86},[76,170062,170063],{"class":5183},"fieldnames",[76,170065,133],{"class":82},[76,170067,170068],{"class":86},"fieldnames)\n",[76,170070,170071],{"class":78,"line":1576},[76,170072,170073],{"class":86},"    writer.writeheader()\n",[76,170075,170076],{"class":78,"line":1581},[76,170077,169817],{"class":86},[16,170079,170081],{"id":170080},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[21,170083,123261],{},[29,170085,170086,170089,170092],{},[32,170087,170088],{},"读取文本文件。",[32,170090,170091],{},"统计每个单词出现次数。",[32,170093,170094],{},"输出出现次数最多的前 10 个单词。",[21,170096,10002],{},[66,170098,170100],{"className":30347,"code":170099,"language":30349,"meta":71,"style":71},"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",[73,170101,170102,170112,170116,170129,170145,170149,170159,170168,170172,170184,170204,170213,170217,170235,170239,170269,170273,170289],{"__ignoreMap":71},[76,170103,170104,170106,170108,170110],{"class":78,"line":79},[76,170105,30706],{"class":82},[76,170107,108280],{"class":86},[76,170109,30361],{"class":82},[76,170111,108285],{"class":86},[76,170113,170114],{"class":78,"line":96},[76,170115,2365],{"emptyLinePlaceholder":2364},[76,170117,170118,170120,170122,170124,170127],{"class":78,"line":1143},[76,170119,168280],{"class":86},[76,170121,133],{"class":82},[76,170123,108514],{"class":86},[76,170125,170126],{"class":192},"\"article.txt\"",[76,170128,93],{"class":86},[76,170130,170131,170133,170135,170137,170139,170141,170143],{"class":78,"line":1158},[76,170132,168463],{"class":86},[76,170134,133],{"class":82},[76,170136,169340],{"class":86},[76,170138,146775],{"class":5183},[76,170140,133],{"class":82},[76,170142,146780],{"class":192},[76,170144,93],{"class":86},[76,170146,170147],{"class":78,"line":1164},[76,170148,2365],{"emptyLinePlaceholder":2364},[76,170150,170151,170154,170156],{"class":78,"line":1178},[76,170152,170153],{"class":86},"words ",[76,170155,133],{"class":82},[76,170157,170158],{"class":86}," content.lower().split()\n",[76,170160,170161,170164,170166],{"class":78,"line":1184},[76,170162,170163],{"class":86},"counter ",[76,170165,133],{"class":82},[76,170167,87837],{"class":86},[76,170169,170170],{"class":78,"line":1275},[76,170171,2365],{"emptyLinePlaceholder":2364},[76,170173,170174,170176,170179,170181],{"class":78,"line":1281},[76,170175,2990],{"class":82},[76,170177,170178],{"class":86}," word ",[76,170180,26012],{"class":82},[76,170182,170183],{"class":86}," words:\n",[76,170185,170186,170189,170191,170194,170197,170199,170202],{"class":78,"line":1293},[76,170187,170188],{"class":86},"    word ",[76,170190,133],{"class":82},[76,170192,170193],{"class":86}," word.strip(",[76,170195,170196],{"class":192},"\".,!?;:",[76,170198,156464],{"class":136},[76,170200,170201],{"class":192},"'()[]\"",[76,170203,93],{"class":86},[76,170205,170206,170208,170210],{"class":78,"line":1576},[76,170207,3066],{"class":82},[76,170209,38899],{"class":82},[76,170211,170212],{"class":86}," word:\n",[76,170214,170215],{"class":78,"line":1581},[76,170216,148481],{"class":82},[76,170218,170219,170222,170224,170227,170229,170231,170233],{"class":78,"line":1587},[76,170220,170221],{"class":86},"    counter[word] ",[76,170223,133],{"class":82},[76,170225,170226],{"class":86}," counter.get(word, ",[76,170228,279],{"class":136},[76,170230,13681],{"class":86},[76,170232,569],{"class":82},[76,170234,55668],{"class":136},[76,170236,170237],{"class":78,"line":1592},[76,170238,2365],{"emptyLinePlaceholder":2364},[76,170240,170241,170244,170246,170248,170251,170253,170255,170257,170259,170261,170263,170265,170267],{"class":78,"line":1606},[76,170242,170243],{"class":86},"items ",[76,170245,133],{"class":82},[76,170247,163573],{"class":136},[76,170249,170250],{"class":86},"(counter.items(), ",[76,170252,153915],{"class":5183},[76,170254,153918],{"class":82},[76,170256,153921],{"class":86},[76,170258,305],{"class":136},[76,170260,112171],{"class":86},[76,170262,163497],{"class":5183},[76,170264,133],{"class":82},[76,170266,31445],{"class":136},[76,170268,93],{"class":86},[76,170270,170271],{"class":78,"line":1611},[76,170272,2365],{"emptyLinePlaceholder":2364},[76,170274,170275,170277,170280,170282,170285,170287],{"class":78,"line":1617},[76,170276,2990],{"class":82},[76,170278,170279],{"class":86}," word, count ",[76,170281,26012],{"class":82},[76,170283,170284],{"class":86}," items[:",[76,170286,534],{"class":136},[76,170288,165724],{"class":86},[76,170290,170291,170293],{"class":78,"line":1638},[76,170292,31268],{"class":136},[76,170294,170295],{"class":86},"(word, count)\n",[16,170297,170299],{"id":170298},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[66,170301,170303],{"className":30347,"code":170302,"language":30349,"meta":71,"style":71},"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",[73,170304,170305,170311,170321,170325,170337,170341,170345,170353,170363,170369,170373,170403,170413,170417,170421,170429,170459,170483,170487,170491,170499,170528,170533],{"__ignoreMap":71},[76,170306,170307,170309],{"class":78,"line":79},[76,170308,30361],{"class":82},[76,170310,147060],{"class":86},[76,170312,170313,170315,170317,170319],{"class":78,"line":96},[76,170314,30706],{"class":82},[76,170316,108280],{"class":86},[76,170318,30361],{"class":82},[76,170320,108285],{"class":86},[76,170322,170323],{"class":78,"line":1143},[76,170324,2365],{"emptyLinePlaceholder":2364},[76,170326,170327,170329,170331,170333,170335],{"class":78,"line":1158},[76,170328,151793],{"class":136},[76,170330,13531],{"class":82},[76,170332,108514],{"class":86},[76,170334,151800],{"class":192},[76,170336,93],{"class":86},[76,170338,170339],{"class":78,"line":1164},[76,170340,2365],{"emptyLinePlaceholder":2364},[76,170342,170343],{"class":78,"line":1178},[76,170344,2365],{"emptyLinePlaceholder":2364},[76,170346,170347,170349,170351],{"class":78,"line":1184},[76,170348,31916],{"class":82},[76,170350,151817],{"class":1927},[76,170352,31922],{"class":86},[76,170354,170355,170357,170359,170361],{"class":78,"line":1275},[76,170356,3066],{"class":82},[76,170358,38899],{"class":82},[76,170360,151828],{"class":136},[76,170362,151831],{"class":86},[76,170364,170365,170367],{"class":78,"line":1281},[76,170366,14719],{"class":82},[76,170368,51807],{"class":86},[76,170370,170371],{"class":78,"line":1293},[76,170372,2365],{"emptyLinePlaceholder":2364},[76,170374,170375,170377,170379,170381,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401],{"class":78,"line":1576},[76,170376,34147],{"class":82},[76,170378,146760],{"class":136},[76,170380,87],{"class":86},[76,170382,151793],{"class":136},[76,170384,12402],{"class":86},[76,170386,146770],{"class":192},[76,170388,12402],{"class":86},[76,170390,146775],{"class":5183},[76,170392,133],{"class":82},[76,170394,146780],{"class":192},[76,170396,13681],{"class":86},[76,170398,31352],{"class":82},[76,170400,148122],{"class":5183},[76,170402,3704],{"class":86},[76,170404,170405,170407,170409,170411],{"class":78,"line":1581},[76,170406,14719],{"class":82},[76,170408,148133],{"class":86},[76,170410,45323],{"class":5183},[76,170412,93],{"class":86},[76,170414,170415],{"class":78,"line":1587},[76,170416,2365],{"emptyLinePlaceholder":2364},[76,170418,170419],{"class":78,"line":1592},[76,170420,2365],{"emptyLinePlaceholder":2364},[76,170422,170423,170425,170427],{"class":78,"line":1606},[76,170424,31916],{"class":82},[76,170426,151927],{"class":1927},[76,170428,151930],{"class":86},[76,170430,170431,170433,170435,170437,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457],{"class":78,"line":1611},[76,170432,34147],{"class":82},[76,170434,146760],{"class":136},[76,170436,87],{"class":86},[76,170438,151793],{"class":136},[76,170440,12402],{"class":86},[76,170442,151945],{"class":192},[76,170444,12402],{"class":86},[76,170446,146775],{"class":5183},[76,170448,133],{"class":82},[76,170450,146780],{"class":192},[76,170452,13681],{"class":86},[76,170454,31352],{"class":82},[76,170456,148122],{"class":5183},[76,170458,3704],{"class":86},[76,170460,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481],{"class":78,"line":1617},[76,170462,151966],{"class":86},[76,170464,45323],{"class":5183},[76,170466,12402],{"class":86},[76,170468,147106],{"class":5183},[76,170470,133],{"class":82},[76,170472,33956],{"class":136},[76,170474,12402],{"class":86},[76,170476,151981],{"class":5183},[76,170478,133],{"class":82},[76,170480,165],{"class":136},[76,170482,93],{"class":86},[76,170484,170485],{"class":78,"line":1638},[76,170486,2365],{"emptyLinePlaceholder":2364},[76,170488,170489],{"class":78,"line":1643},[76,170490,2365],{"emptyLinePlaceholder":2364},[76,170492,170493,170495,170497],{"class":78,"line":1657},[76,170494,159685],{"class":86},[76,170496,133],{"class":82},[76,170498,153011],{"class":86},[76,170500,170501,170504,170506,170508,170510,170512,170514,170516,170518,170520,170522,170524,170526],{"class":78,"line":1662},[76,170502,170503],{"class":86},"students.append({",[76,170505,62648],{"class":192},[76,170507,51406],{"class":86},[76,170509,149857],{"class":192},[76,170511,12402],{"class":86},[76,170513,69093],{"class":192},[76,170515,51406],{"class":86},[76,170517,738],{"class":136},[76,170519,12402],{"class":86},[76,170521,151441],{"class":192},[76,170523,51406],{"class":86},[76,170525,1077],{"class":136},[76,170527,165121],{"class":86},[76,170529,170530],{"class":78,"line":1691},[76,170531,170532],{"class":86},"save_students(students)\n",[76,170534,170535,170537,170539,170542],{"class":78,"line":1696},[76,170536,30384],{"class":136},[76,170538,87],{"class":86},[76,170540,170541],{"class":192},"\"保存成功\"",[76,170543,93],{"class":86},[16,170545,170547],{"id":170546},"_814-易错点","8.14 易错点",[29,170549,170550,170554,170560,170565,170572,170579],{},[32,170551,170552,168813],{},[73,170553,883],{},[32,170555,170556,170557,28354],{},"读写中文要指定 ",[73,170558,170559],{},"encoding=\"utf-8\"",[32,170561,170562,170563,28354],{},"打开文件后要关闭，推荐使用 ",[73,170564,107802],{},[32,170566,170567,170568,170571],{},"读取大文件不要直接 ",[73,170569,170570],{},"read()"," 全部内容。",[32,170573,170574,170575,170578],{},"Windows 写 CSV 时建议加 ",[73,170576,170577],{},"newline=\"\"","，避免空行。",[32,170580,170581],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[16,170583,170585],{"id":170584},"_815-本章练习","8.15 本章练习",[29,170587,170588,170595,170600,170603,170606],{},[32,170589,170590,170591,170594],{},"写入一个 ",[73,170592,170593],{},"students.txt","，每行保存一个学生姓名。",[32,170596,104324,170597,170599],{},[73,170598,170593],{}," 并输出所有学生。",[32,170601,170602],{},"把学生列表保存为 JSON 文件。",[32,170604,170605],{},"从 JSON 文件读取学生数据，计算平均分。",[32,170607,170608,170609,170612,170613,170616],{},"写一个日志函数 ",[73,170610,170611],{},"write_log(message)","，每次调用向 ",[73,170614,170615],{},"app.log"," 追加一行。",[5092,170618,170619],{},"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":71,"searchDepth":96,"depth":96,"links":170621},[170622,170623,170627,170628,170634,170635,170636,170637,170638,170639,170640,170641,170642,170643,170644],{"id":168133,"depth":96,"text":168134},{"id":168174,"depth":96,"text":168175,"children":170624},[170625,170626],{"id":168178,"depth":1143,"text":168179},{"id":168212,"depth":1143,"text":168213},{"id":168326,"depth":96,"text":168327},{"id":168419,"depth":96,"text":168420,"children":170629},[170630,170631,170632,170633],{"id":168423,"depth":1143,"text":168424},{"id":168510,"depth":1143,"text":168511},{"id":168580,"depth":1143,"text":168581},{"id":168674,"depth":1143,"text":168675},{"id":168744,"depth":96,"text":168745},{"id":168807,"depth":96,"text":168808},{"id":168968,"depth":96,"text":168969},{"id":169031,"depth":96,"text":169032},{"id":169147,"depth":96,"text":169148},{"id":169357,"depth":96,"text":169358},{"id":169669,"depth":96,"text":169670},{"id":170080,"depth":96,"text":170081},{"id":170298,"depth":96,"text":170299},{"id":170546,"depth":96,"text":170547},{"id":170584,"depth":96,"text":170585},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168125,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170651,"title":170652,"body":170653,"description":23344,"extension":5123,"meta":172839,"navigation":2364,"path":172840,"seo":172841,"stem":172842,"__hash__":172843},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":9,"value":170654,"toc":172806},[170655,170658,170662,170665,170668,170760,170762,170781,170786,170790,170793,170796,170825,170832,170835,170839,170842,170871,170873,170925,170931,170984,170988,171086,171089,171156,171160,171217,171219,171225,171229,171234,171240,171331,171336,171340,171343,171421,171424,171462,171466,171584,171587,171591,171594,171639,171642,171646,171651,171657,171707,171710,171741,171745,171749,171779,171783,171818,171822,171857,171897,171901,171917,171920,171924,171928,172007,172011,172052,172056,172111,172115,172149,172153,172183,172192,172199,172205,172262,172265,172273,172276,172280,172287,172290,172296,172299,172316,172321,172325,172331,172344,172347,172384,172387,172398,172401,172415,172418,172432,172436,172443,172476,172479,172481,172487,172490,172494,172496,172502,172507,172680,172684,172747,172751,172775,172779,172803],[12,170656,170652],{"id":170657},"_9-异常模块与包",[16,170659,170661],{"id":170660},"_91-什么是异常","9.1 什么是异常",[21,170663,170664],{},"异常是程序运行过程中出现的错误。",[21,170666,170667],{},"常见异常：",[225,170669,170670,170679],{},[228,170671,170672],{},[231,170673,170674,170677],{},[234,170675,170676],{},"异常",[234,170678,25838],{},[272,170680,170681,170691,170701,170710,170720,170730,170740,170750],{},[231,170682,170683,170688],{},[277,170684,170685],{},[73,170686,170687],{},"NameError",[277,170689,170690],{},"使用了未定义变量",[231,170692,170693,170698],{},[277,170694,170695],{},[73,170696,170697],{},"TypeError",[277,170699,170700],{},"类型不匹配",[231,170702,170703,170707],{},[277,170704,170705],{},[73,170706,154803],{},[277,170708,170709],{},"值不合法",[231,170711,170712,170717],{},[277,170713,170714],{},[73,170715,170716],{},"IndexError",[277,170718,170719],{},"列表索引越界",[231,170721,170722,170727],{},[277,170723,170724],{},[73,170725,170726],{},"KeyError",[277,170728,170729],{},"字典 key 不存在",[231,170731,170732,170737],{},[277,170733,170734],{},[73,170735,170736],{},"FileNotFoundError",[277,170738,170739],{},"文件不存在",[231,170741,170742,170747],{},[277,170743,170744],{},[73,170745,170746],{},"ZeroDivisionError",[277,170748,170749],{},"除数为 0",[231,170751,170752,170757],{},[277,170753,170754],{},[73,170755,170756],{},"ImportError",[277,170758,170759],{},"导入失败",[21,170761,15102],{},[66,170763,170765],{"className":30347,"code":170764,"language":30349,"meta":71,"style":71},"num = int(\"abc\")\n",[73,170766,170767],{"__ignoreMap":71},[76,170768,170769,170771,170773,170775,170777,170779],{"class":78,"line":79},[76,170770,155756],{"class":86},[76,170772,133],{"class":82},[76,170774,2346],{"class":136},[76,170776,87],{"class":86},[76,170778,155849],{"class":192},[76,170780,93],{"class":86},[21,170782,170783,170784,28354],{},"会触发 ",[73,170785,154803],{},[16,170787,170789],{"id":170788},"_92-为什么要处理异常","9.2 为什么要处理异常",[21,170791,170792],{},"如果不处理异常，程序会直接终止。",[21,170794,170795],{},"例如用户输入年龄：",[66,170797,170799],{"className":30347,"code":170798,"language":30349,"meta":71,"style":71},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[73,170800,170801,170819],{"__ignoreMap":71},[76,170802,170803,170805,170807,170809,170811,170813,170815,170817],{"class":78,"line":79},[76,170804,146515],{"class":86},[76,170806,133],{"class":82},[76,170808,2346],{"class":136},[76,170810,87],{"class":86},[76,170812,53790],{"class":136},[76,170814,87],{"class":86},[76,170816,152363],{"class":192},[76,170818,30466],{"class":86},[76,170820,170821,170823],{"class":78,"line":96},[76,170822,30384],{"class":136},[76,170824,155730],{"class":86},[21,170826,170827,170828,170831],{},"用户输入 ",[73,170829,170830],{},"abc","，程序就会报错退出。",[21,170833,170834],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[16,170836,170838],{"id":170837},"_93-try-except","9.3 try except",[21,170840,170841],{},"基础语法：",[66,170843,170845],{"className":30347,"code":170844,"language":30349,"meta":71,"style":71},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[73,170846,170847,170854,170859,170866],{"__ignoreMap":71},[76,170848,170849,170852],{"class":78,"line":79},[76,170850,170851],{"class":82},"try",[76,170853,3704],{"class":86},[76,170855,170856],{"class":78,"line":96},[76,170857,170858],{"class":86},"    可能出错的代码\n",[76,170860,170861,170864],{"class":78,"line":1143},[76,170862,170863],{"class":82},"except",[76,170865,3704],{"class":86},[76,170867,170868],{"class":78,"line":1158},[76,170869,170870],{"class":86},"    出错后的处理代码\n",[21,170872,15102],{},[66,170874,170876],{"className":30347,"code":170875,"language":30349,"meta":71,"style":71},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[73,170877,170878,170884,170902,170908,170914],{"__ignoreMap":71},[76,170879,170880,170882],{"class":78,"line":79},[76,170881,170851],{"class":82},[76,170883,3704],{"class":86},[76,170885,170886,170888,170890,170892,170894,170896,170898,170900],{"class":78,"line":96},[76,170887,152355],{"class":86},[76,170889,133],{"class":82},[76,170891,2346],{"class":136},[76,170893,87],{"class":86},[76,170895,53790],{"class":136},[76,170897,87],{"class":86},[76,170899,152363],{"class":192},[76,170901,30466],{"class":86},[76,170903,170904,170906],{"class":78,"line":1143},[76,170905,31268],{"class":136},[76,170907,155730],{"class":86},[76,170909,170910,170912],{"class":78,"line":1158},[76,170911,170863],{"class":82},[76,170913,3704],{"class":86},[76,170915,170916,170918,170920,170923],{"class":78,"line":1164},[76,170917,31268],{"class":136},[76,170919,87],{"class":86},[76,170921,170922],{"class":192},"\"年龄必须是数字\"",[76,170924,93],{"class":86},[21,170926,170927,170928,170930],{},"不建议裸写 ",[73,170929,170863],{},"，最好指定异常类型。",[66,170932,170934],{"className":30347,"code":170933,"language":30349,"meta":71,"style":71},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[73,170935,170936,170942,170960,170966,170974],{"__ignoreMap":71},[76,170937,170938,170940],{"class":78,"line":79},[76,170939,170851],{"class":82},[76,170941,3704],{"class":86},[76,170943,170944,170946,170948,170950,170952,170954,170956,170958],{"class":78,"line":96},[76,170945,152355],{"class":86},[76,170947,133],{"class":82},[76,170949,2346],{"class":136},[76,170951,87],{"class":86},[76,170953,53790],{"class":136},[76,170955,87],{"class":86},[76,170957,152363],{"class":192},[76,170959,30466],{"class":86},[76,170961,170962,170964],{"class":78,"line":1143},[76,170963,31268],{"class":136},[76,170965,155730],{"class":86},[76,170967,170968,170970,170972],{"class":78,"line":1158},[76,170969,170863],{"class":82},[76,170971,152195],{"class":136},[76,170973,3704],{"class":86},[76,170975,170976,170978,170980,170982],{"class":78,"line":1164},[76,170977,31268],{"class":136},[76,170979,87],{"class":86},[76,170981,170922],{"class":192},[76,170983,93],{"class":86},[16,170985,170987],{"id":170986},"_94-捕获多个异常","9.4 捕获多个异常",[66,170989,170991],{"className":30347,"code":170990,"language":30349,"meta":71,"style":71},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[73,170992,170993,170999,171020,171040,171047,171055,171066,171075],{"__ignoreMap":71},[76,170994,170995,170997],{"class":78,"line":79},[76,170996,170851],{"class":82},[76,170998,3704],{"class":86},[76,171000,171001,171004,171006,171008,171010,171012,171014,171016,171018],{"class":78,"line":96},[76,171002,171003],{"class":86},"    nums ",[76,171005,133],{"class":82},[76,171007,52195],{"class":86},[76,171009,305],{"class":136},[76,171011,12402],{"class":86},[76,171013,165],{"class":136},[76,171015,12402],{"class":86},[76,171017,159],{"class":136},[76,171019,33215],{"class":86},[76,171021,171022,171025,171027,171029,171031,171033,171035,171038],{"class":78,"line":1143},[76,171023,171024],{"class":86},"    index ",[76,171026,133],{"class":82},[76,171028,2346],{"class":136},[76,171030,87],{"class":86},[76,171032,53790],{"class":136},[76,171034,87],{"class":86},[76,171036,171037],{"class":192},"\"请输入索引:\"",[76,171039,30466],{"class":86},[76,171041,171042,171044],{"class":78,"line":1158},[76,171043,31268],{"class":136},[76,171045,171046],{"class":86},"(nums[index])\n",[76,171048,171049,171051,171053],{"class":78,"line":1164},[76,171050,170863],{"class":82},[76,171052,152195],{"class":136},[76,171054,3704],{"class":86},[76,171056,171057,171059,171061,171064],{"class":78,"line":1178},[76,171058,31268],{"class":136},[76,171060,87],{"class":86},[76,171062,171063],{"class":192},"\"索引必须是整数\"",[76,171065,93],{"class":86},[76,171067,171068,171070,171073],{"class":78,"line":1184},[76,171069,170863],{"class":82},[76,171071,171072],{"class":136}," IndexError",[76,171074,3704],{"class":86},[76,171076,171077,171079,171081,171084],{"class":78,"line":1275},[76,171078,31268],{"class":136},[76,171080,87],{"class":86},[76,171082,171083],{"class":192},"\"索引越界\"",[76,171085,93],{"class":86},[21,171087,171088],{},"多个异常使用相同处理逻辑：",[66,171090,171092],{"className":30347,"code":171091,"language":30349,"meta":71,"style":71},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[73,171093,171094,171100,171118,171131,171145],{"__ignoreMap":71},[76,171095,171096,171098],{"class":78,"line":79},[76,171097,170851],{"class":82},[76,171099,3704],{"class":86},[76,171101,171102,171104,171106,171108,171110,171112,171114,171116],{"class":78,"line":96},[76,171103,45562],{"class":86},[76,171105,133],{"class":82},[76,171107,2346],{"class":136},[76,171109,87],{"class":86},[76,171111,53790],{"class":136},[76,171113,87],{"class":86},[76,171115,155765],{"class":192},[76,171117,30466],{"class":86},[76,171119,171120,171122,171124,171126,171128],{"class":78,"line":1143},[76,171121,31268],{"class":136},[76,171123,87],{"class":86},[76,171125,534],{"class":136},[76,171127,156015],{"class":82},[76,171129,171130],{"class":86}," num)\n",[76,171132,171133,171135,171137,171139,171141,171143],{"class":78,"line":1158},[76,171134,170863],{"class":82},[76,171136,1622],{"class":86},[76,171138,154803],{"class":136},[76,171140,12402],{"class":86},[76,171142,170746],{"class":136},[76,171144,30755],{"class":86},[76,171146,171147,171149,171151,171154],{"class":78,"line":1164},[76,171148,31268],{"class":136},[76,171150,87],{"class":86},[76,171152,171153],{"class":192},"\"输入不合法\"",[76,171155,93],{"class":86},[16,171157,171159],{"id":171158},"_95-获取异常信息","9.5 获取异常信息",[66,171161,171163],{"className":30347,"code":171162,"language":30349,"meta":71,"style":71},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[73,171164,171165,171171,171185,171196],{"__ignoreMap":71},[76,171166,171167,171169],{"class":78,"line":79},[76,171168,170851],{"class":82},[76,171170,3704],{"class":86},[76,171172,171173,171175,171177,171179,171181,171183],{"class":78,"line":96},[76,171174,45562],{"class":86},[76,171176,133],{"class":82},[76,171178,2346],{"class":136},[76,171180,87],{"class":86},[76,171182,155849],{"class":192},[76,171184,93],{"class":86},[76,171186,171187,171189,171191,171193],{"class":78,"line":1143},[76,171188,170863],{"class":82},[76,171190,152195],{"class":136},[76,171192,64573],{"class":82},[76,171194,171195],{"class":86}," e:\n",[76,171197,171198,171200,171202,171204,171207,171209,171211,171213,171215],{"class":78,"line":1158},[76,171199,31268],{"class":136},[76,171201,87],{"class":86},[76,171203,140],{"class":82},[76,171205,171206],{"class":192},"\"出错了:",[76,171208,984],{"class":136},[76,171210,162],{"class":86},[76,171212,1034],{"class":136},[76,171214,339],{"class":192},[76,171216,93],{"class":86},[21,171218,146426],{},[66,171220,171223],{"className":171221,"code":171222,"language":5154,"meta":71},[5152],"出错了:invalid literal for int() with base 10: 'abc'\n",[73,171224,171222],{"__ignoreMap":71},[16,171226,171228],{"id":171227},"_96-else和finally","9.6 else和finally",[21,171230,171231,171233],{},[73,171232,1665],{},"：没有异常时执行。",[21,171235,171236,171239],{},[73,171237,171238],{},"finally","：无论是否异常都会执行。",[66,171241,171243],{"className":30347,"code":171242,"language":30349,"meta":71,"style":71},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[73,171244,171245,171251,171269,171277,171287,171293,171314,171320],{"__ignoreMap":71},[76,171246,171247,171249],{"class":78,"line":79},[76,171248,170851],{"class":82},[76,171250,3704],{"class":86},[76,171252,171253,171255,171257,171259,171261,171263,171265,171267],{"class":78,"line":96},[76,171254,45562],{"class":86},[76,171256,133],{"class":82},[76,171258,2346],{"class":136},[76,171260,87],{"class":86},[76,171262,53790],{"class":136},[76,171264,87],{"class":86},[76,171266,155765],{"class":192},[76,171268,30466],{"class":86},[76,171270,171271,171273,171275],{"class":78,"line":1143},[76,171272,170863],{"class":82},[76,171274,152195],{"class":136},[76,171276,3704],{"class":86},[76,171278,171279,171281,171283,171285],{"class":78,"line":1158},[76,171280,31268],{"class":136},[76,171282,87],{"class":86},[76,171284,153183],{"class":192},[76,171286,93],{"class":86},[76,171288,171289,171291],{"class":78,"line":1164},[76,171290,1665],{"class":82},[76,171292,3704],{"class":86},[76,171294,171295,171297,171299,171301,171304,171306,171308,171310,171312],{"class":78,"line":1178},[76,171296,31268],{"class":136},[76,171298,87],{"class":86},[76,171300,140],{"class":82},[76,171302,171303],{"class":192},"\"输入正确:",[76,171305,984],{"class":136},[76,171307,1629],{"class":86},[76,171309,1034],{"class":136},[76,171311,339],{"class":192},[76,171313,93],{"class":86},[76,171315,171316,171318],{"class":78,"line":1184},[76,171317,171238],{"class":82},[76,171319,3704],{"class":86},[76,171321,171322,171324,171326,171329],{"class":78,"line":1275},[76,171323,31268],{"class":136},[76,171325,87],{"class":86},[76,171327,171328],{"class":192},"\"程序结束\"",[76,171330,93],{"class":86},[21,171332,171333,171335],{},[73,171334,171238],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[16,171337,171339],{"id":171338},"_97-抛出异常","9.7 抛出异常",[21,171341,171342],{},"程序可以主动抛出异常。",[66,171344,171346],{"className":30347,"code":171345,"language":30349,"meta":71,"style":71},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[73,171347,171348,171357,171369,171382,171402,171406,171410],{"__ignoreMap":71},[76,171349,171350,171352,171355],{"class":78,"line":79},[76,171351,31916],{"class":82},[76,171353,171354],{"class":1927}," set_age",[76,171356,161384],{"class":86},[76,171358,171359,171361,171363,171365,171367],{"class":78,"line":96},[76,171360,3066],{"class":82},[76,171362,15674],{"class":86},[76,171364,998],{"class":82},[76,171366,4058],{"class":136},[76,171368,3704],{"class":86},[76,171370,171371,171373,171375,171377,171380],{"class":78,"line":1143},[76,171372,103401],{"class":82},[76,171374,152195],{"class":136},[76,171376,87],{"class":86},[76,171378,171379],{"class":192},"\"年龄不能为负数\"",[76,171381,93],{"class":86},[76,171383,171384,171386,171388,171390,171392,171394,171396,171398,171400],{"class":78,"line":1158},[76,171385,31268],{"class":136},[76,171387,87],{"class":86},[76,171389,140],{"class":82},[76,171391,161952],{"class":192},[76,171393,984],{"class":136},[76,171395,70190],{"class":86},[76,171397,1034],{"class":136},[76,171399,339],{"class":192},[76,171401,93],{"class":86},[76,171403,171404],{"class":78,"line":1164},[76,171405,2365],{"emptyLinePlaceholder":2364},[76,171407,171408],{"class":78,"line":1178},[76,171409,2365],{"emptyLinePlaceholder":2364},[76,171411,171412,171415,171417,171419],{"class":78,"line":1184},[76,171413,171414],{"class":86},"set_age(",[76,171416,620],{"class":82},[76,171418,305],{"class":136},[76,171420,93],{"class":86},[21,171422,171423],{},"调用者可以捕获：",[66,171425,171427],{"className":30347,"code":171426,"language":30349,"meta":71,"style":71},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[73,171428,171429,171435,171446,171456],{"__ignoreMap":71},[76,171430,171431,171433],{"class":78,"line":79},[76,171432,170851],{"class":82},[76,171434,3704],{"class":86},[76,171436,171437,171440,171442,171444],{"class":78,"line":96},[76,171438,171439],{"class":86},"    set_age(",[76,171441,620],{"class":82},[76,171443,305],{"class":136},[76,171445,93],{"class":86},[76,171447,171448,171450,171452,171454],{"class":78,"line":1143},[76,171449,170863],{"class":82},[76,171451,152195],{"class":136},[76,171453,64573],{"class":82},[76,171455,171195],{"class":86},[76,171457,171458,171460],{"class":78,"line":1158},[76,171459,31268],{"class":136},[76,171461,66968],{"class":86},[16,171463,171465],{"id":171464},"_98-自定义异常","9.8 自定义异常",[66,171467,171469],{"className":30347,"code":171468,"language":30349,"meta":71,"style":71},"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",[73,171470,171471,171485,171489,171493,171497,171505,171515,171526,171536,171540,171544,171550,171567,171578],{"__ignoreMap":71},[76,171472,171473,171475,171478,171480,171483],{"class":78,"line":79},[76,171474,14661],{"class":82},[76,171476,171477],{"class":1927}," BalanceNotEnoughError",[76,171479,87],{"class":86},[76,171481,171482],{"class":136},"Exception",[76,171484,30755],{"class":86},[76,171486,171487],{"class":78,"line":96},[76,171488,149506],{"class":82},[76,171490,171491],{"class":78,"line":1143},[76,171492,2365],{"emptyLinePlaceholder":2364},[76,171494,171495],{"class":78,"line":1158},[76,171496,2365],{"emptyLinePlaceholder":2364},[76,171498,171499,171501,171503],{"class":78,"line":1164},[76,171500,31916],{"class":82},[76,171502,150155],{"class":1927},[76,171504,162781],{"class":86},[76,171506,171507,171509,171511,171513],{"class":78,"line":1178},[76,171508,3066],{"class":82},[76,171510,150111],{"class":86},[76,171512,1048],{"class":82},[76,171514,162558],{"class":86},[76,171516,171517,171519,171522,171524],{"class":78,"line":1184},[76,171518,103401],{"class":82},[76,171520,171521],{"class":86}," BalanceNotEnoughError(",[76,171523,150206],{"class":192},[76,171525,93],{"class":86},[76,171527,171528,171530,171532,171534],{"class":78,"line":1275},[76,171529,4055],{"class":82},[76,171531,162788],{"class":86},[76,171533,620],{"class":82},[76,171535,150144],{"class":86},[76,171537,171538],{"class":78,"line":1281},[76,171539,2365],{"emptyLinePlaceholder":2364},[76,171541,171542],{"class":78,"line":1293},[76,171543,2365],{"emptyLinePlaceholder":2364},[76,171545,171546,171548],{"class":78,"line":1576},[76,171547,170851],{"class":82},[76,171549,3704],{"class":86},[76,171551,171552,171554,171556,171559,171561,171563,171565],{"class":78,"line":1581},[76,171553,162459],{"class":86},[76,171555,133],{"class":82},[76,171557,171558],{"class":86}," withdraw(",[76,171560,399],{"class":136},[76,171562,12402],{"class":86},[76,171564,1686],{"class":136},[76,171566,93],{"class":86},[76,171568,171569,171571,171574,171576],{"class":78,"line":1587},[76,171570,170863],{"class":82},[76,171572,171573],{"class":86}," BalanceNotEnoughError ",[76,171575,31352],{"class":82},[76,171577,171195],{"class":86},[76,171579,171580,171582],{"class":78,"line":1592},[76,171581,31268],{"class":136},[76,171583,66968],{"class":86},[21,171585,171586],{},"入门阶段大多数情况使用内置异常即可。",[16,171588,171590],{"id":171589},"_99-traceback","9.9 traceback",[21,171592,171593],{},"调试时可以输出完整异常堆栈。",[66,171595,171597],{"className":30347,"code":171596,"language":30349,"meta":71,"style":71},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[73,171598,171599,171606,171610,171616,171626,171634],{"__ignoreMap":71},[76,171600,171601,171603],{"class":78,"line":79},[76,171602,30361],{"class":82},[76,171604,171605],{"class":86}," traceback\n",[76,171607,171608],{"class":78,"line":96},[76,171609,2365],{"emptyLinePlaceholder":2364},[76,171611,171612,171614],{"class":78,"line":1143},[76,171613,170851],{"class":82},[76,171615,3704],{"class":86},[76,171617,171618,171620,171622,171624],{"class":78,"line":1158},[76,171619,1949],{"class":136},[76,171621,87],{"class":86},[76,171623,155849],{"class":192},[76,171625,93],{"class":86},[76,171627,171628,171630,171632],{"class":78,"line":1164},[76,171629,170863],{"class":82},[76,171631,152195],{"class":136},[76,171633,3704],{"class":86},[76,171635,171636],{"class":78,"line":1178},[76,171637,171638],{"class":86},"    traceback.print_exc()\n",[21,171640,171641],{},"日志系统中常把异常堆栈记录到文件。",[16,171643,171645],{"id":171644},"_910-什么是模块","9.10 什么是模块",[21,171647,171648,171649,125952],{},"模块就是一个 ",[73,171650,146321],{},[21,171652,171653,171654,24587],{},"例如创建 ",[73,171655,171656],{},"my_math.py",[66,171658,171660],{"className":30347,"code":171659,"language":30349,"meta":71,"style":71},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[73,171661,171662,171670,171680,171684,171688,171697],{"__ignoreMap":71},[76,171663,171664,171666,171668],{"class":78,"line":79},[76,171665,31916],{"class":82},[76,171667,5176],{"class":1927},[76,171669,151062],{"class":86},[76,171671,171672,171674,171676,171678],{"class":78,"line":96},[76,171673,4055],{"class":82},[76,171675,10836],{"class":86},[76,171677,569],{"class":82},[76,171679,151073],{"class":86},[76,171681,171682],{"class":78,"line":1143},[76,171683,2365],{"emptyLinePlaceholder":2364},[76,171685,171686],{"class":78,"line":1158},[76,171687,2365],{"emptyLinePlaceholder":2364},[76,171689,171690,171692,171695],{"class":78,"line":1164},[76,171691,31916],{"class":82},[76,171693,171694],{"class":1927}," sub",[76,171696,151062],{"class":86},[76,171698,171699,171701,171703,171705],{"class":78,"line":1178},[76,171700,4055],{"class":82},[76,171702,10836],{"class":86},[76,171704,620],{"class":82},[76,171706,151073],{"class":86},[21,171708,171709],{},"在另一个文件中导入：",[66,171711,171713],{"className":30347,"code":171712,"language":30349,"meta":71,"style":71},"import my_math\n\nprint(my_math.add(1, 2))\n",[73,171714,171715,171722,171726],{"__ignoreMap":71},[76,171716,171717,171719],{"class":78,"line":79},[76,171718,30361],{"class":82},[76,171720,171721],{"class":86}," my_math\n",[76,171723,171724],{"class":78,"line":96},[76,171725,2365],{"emptyLinePlaceholder":2364},[76,171727,171728,171730,171733,171735,171737,171739],{"class":78,"line":1143},[76,171729,30384],{"class":136},[76,171731,171732],{"class":86},"(my_math.add(",[76,171734,305],{"class":136},[76,171736,12402],{"class":86},[76,171738,165],{"class":136},[76,171740,30466],{"class":86},[16,171742,171744],{"id":171743},"_911-import导入","9.11 import导入",[46,171746,171748],{"id":171747},"_9111-导入模块","9.11.1 导入模块",[66,171750,171752],{"className":30347,"code":171751,"language":30349,"meta":71,"style":71},"import random\n\nprint(random.randint(1, 10))\n",[73,171753,171754,171760,171764],{"__ignoreMap":71},[76,171755,171756,171758],{"class":78,"line":79},[76,171757,30361],{"class":82},[76,171759,45297],{"class":86},[76,171761,171762],{"class":78,"line":96},[76,171763,2365],{"emptyLinePlaceholder":2364},[76,171765,171766,171768,171771,171773,171775,171777],{"class":78,"line":1143},[76,171767,30384],{"class":136},[76,171769,171770],{"class":86},"(random.randint(",[76,171772,305],{"class":136},[76,171774,12402],{"class":86},[76,171776,534],{"class":136},[76,171778,30466],{"class":86},[46,171780,171782],{"id":171781},"_9112-导入指定内容","9.11.2 导入指定内容",[66,171784,171786],{"className":30347,"code":171785,"language":30349,"meta":71,"style":71},"from random import randint\n\nprint(randint(1, 10))\n",[73,171787,171788,171799,171803],{"__ignoreMap":71},[76,171789,171790,171792,171794,171796],{"class":78,"line":79},[76,171791,30706],{"class":82},[76,171793,57765],{"class":86},[76,171795,30361],{"class":82},[76,171797,171798],{"class":86}," randint\n",[76,171800,171801],{"class":78,"line":96},[76,171802,2365],{"emptyLinePlaceholder":2364},[76,171804,171805,171807,171810,171812,171814,171816],{"class":78,"line":1143},[76,171806,30384],{"class":136},[76,171808,171809],{"class":86},"(randint(",[76,171811,305],{"class":136},[76,171813,12402],{"class":86},[76,171815,534],{"class":136},[76,171817,30466],{"class":86},[46,171819,171821],{"id":171820},"_9113-起别名","9.11.3 起别名",[66,171823,171825],{"className":30347,"code":171824,"language":30349,"meta":71,"style":71},"import random as rd\n\nprint(rd.randint(1, 10))\n",[73,171826,171827,171838,171842],{"__ignoreMap":71},[76,171828,171829,171831,171833,171835],{"class":78,"line":79},[76,171830,30361],{"class":82},[76,171832,57765],{"class":86},[76,171834,31352],{"class":82},[76,171836,171837],{"class":86}," rd\n",[76,171839,171840],{"class":78,"line":96},[76,171841,2365],{"emptyLinePlaceholder":2364},[76,171843,171844,171846,171849,171851,171853,171855],{"class":78,"line":1143},[76,171845,30384],{"class":136},[76,171847,171848],{"class":86},"(rd.randint(",[76,171850,305],{"class":136},[76,171852,12402],{"class":86},[76,171854,534],{"class":136},[76,171856,30466],{"class":86},[66,171858,171860],{"className":30347,"code":171859,"language":30349,"meta":71,"style":71},"from random import randint as rint\n\nprint(rint(1, 10))\n",[73,171861,171862,171878,171882],{"__ignoreMap":71},[76,171863,171864,171866,171868,171870,171873,171875],{"class":78,"line":79},[76,171865,30706],{"class":82},[76,171867,57765],{"class":86},[76,171869,30361],{"class":82},[76,171871,171872],{"class":86}," randint ",[76,171874,31352],{"class":82},[76,171876,171877],{"class":86}," rint\n",[76,171879,171880],{"class":78,"line":96},[76,171881,2365],{"emptyLinePlaceholder":2364},[76,171883,171884,171886,171889,171891,171893,171895],{"class":78,"line":1143},[76,171885,30384],{"class":136},[76,171887,171888],{"class":86},"(rint(",[76,171890,305],{"class":136},[76,171892,12402],{"class":86},[76,171894,534],{"class":136},[76,171896,30466],{"class":86},[46,171898,171900],{"id":171899},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[66,171902,171904],{"className":30347,"code":171903,"language":30349,"meta":71,"style":71},"from random import *\n",[73,171905,171906],{"__ignoreMap":71},[76,171907,171908,171910,171912,171914],{"class":78,"line":79},[76,171909,30706],{"class":82},[76,171911,57765],{"class":86},[76,171913,30361],{"class":82},[76,171915,171916],{"class":82}," *\n",[21,171918,171919],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[16,171921,171923],{"id":171922},"_912-常用内置模块","9.12 常用内置模块",[46,171925,171927],{"id":171926},"_9121-random","9.12.1 random",[66,171929,171931],{"className":30347,"code":171930,"language":30349,"meta":71,"style":71},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[73,171932,171933,171939,171943,171957,171976],{"__ignoreMap":71},[76,171934,171935,171937],{"class":78,"line":79},[76,171936,30361],{"class":82},[76,171938,45297],{"class":86},[76,171940,171941],{"class":78,"line":96},[76,171942,2365],{"emptyLinePlaceholder":2364},[76,171944,171945,171947,171949,171951,171953,171955],{"class":78,"line":1143},[76,171946,30384],{"class":136},[76,171948,171770],{"class":86},[76,171950,305],{"class":136},[76,171952,12402],{"class":86},[76,171954,534],{"class":136},[76,171956,30466],{"class":86},[76,171958,171959,171961,171964,171966,171968,171970,171972,171974],{"class":78,"line":1158},[76,171960,30384],{"class":136},[76,171962,171963],{"class":86},"(random.choice([",[76,171965,149857],{"class":192},[76,171967,12402],{"class":86},[76,171969,150905],{"class":192},[76,171971,12402],{"class":86},[76,171973,159700],{"class":192},[76,171975,33112],{"class":86},[76,171977,171978,171980,171983,171985,171987,171989,171991,171993,171995,171997,171999,172001,172003,172005],{"class":78,"line":1164},[76,171979,30384],{"class":136},[76,171981,171982],{"class":86},"(random.sample([",[76,171984,305],{"class":136},[76,171986,12402],{"class":86},[76,171988,165],{"class":136},[76,171990,12402],{"class":86},[76,171992,159],{"class":136},[76,171994,12402],{"class":86},[76,171996,381],{"class":136},[76,171998,12402],{"class":86},[76,172000,407],{"class":136},[76,172002,112171],{"class":86},[76,172004,165],{"class":136},[76,172006,30466],{"class":86},[46,172008,172010],{"id":172009},"_9122-time","9.12.2 time",[66,172012,172014],{"className":30347,"code":172013,"language":30349,"meta":71,"style":71},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[73,172015,172016,172022,172026,172033,172041],{"__ignoreMap":71},[76,172017,172018,172020],{"class":78,"line":79},[76,172019,30361],{"class":82},[76,172021,31798],{"class":86},[76,172023,172024],{"class":78,"line":96},[76,172025,2365],{"emptyLinePlaceholder":2364},[76,172027,172028,172030],{"class":78,"line":1143},[76,172029,30384],{"class":136},[76,172031,172032],{"class":86},"(time.time())\n",[76,172034,172035,172037,172039],{"class":78,"line":1158},[76,172036,95040],{"class":86},[76,172038,305],{"class":136},[76,172040,93],{"class":86},[76,172042,172043,172045,172047,172050],{"class":78,"line":1164},[76,172044,30384],{"class":136},[76,172046,87],{"class":86},[76,172048,172049],{"class":192},"\"1秒后执行\"",[76,172051,93],{"class":86},[46,172053,172055],{"id":172054},"_9123-datetime","9.12.3 datetime",[66,172057,172059],{"className":30347,"code":172058,"language":30349,"meta":71,"style":71},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[73,172060,172061,172073,172077,172087,172094],{"__ignoreMap":71},[76,172062,172063,172065,172068,172070],{"class":78,"line":79},[76,172064,30706],{"class":82},[76,172066,172067],{"class":86}," datetime ",[76,172069,30361],{"class":82},[76,172071,172072],{"class":86}," datetime\n",[76,172074,172075],{"class":78,"line":96},[76,172076,2365],{"emptyLinePlaceholder":2364},[76,172078,172079,172082,172084],{"class":78,"line":1143},[76,172080,172081],{"class":86},"now ",[76,172083,133],{"class":82},[76,172085,172086],{"class":86}," datetime.now()\n",[76,172088,172089,172091],{"class":78,"line":1158},[76,172090,30384],{"class":136},[76,172092,172093],{"class":86},"(now)\n",[76,172095,172096,172098,172101,172104,172106,172109],{"class":78,"line":1164},[76,172097,30384],{"class":136},[76,172099,172100],{"class":86},"(now.strftime(",[76,172102,172103],{"class":192},"\"%Y-%m-",[76,172105,156660],{"class":136},[76,172107,172108],{"class":192}," %H:%M:%S\"",[76,172110,30466],{"class":86},[46,172112,172114],{"id":172113},"_9124-os","9.12.4 os",[66,172116,172118],{"className":30347,"code":172117,"language":30349,"meta":71,"style":71},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[73,172119,172120,172126,172130,172137],{"__ignoreMap":71},[76,172121,172122,172124],{"class":78,"line":79},[76,172123,30361],{"class":82},[76,172125,45274],{"class":86},[76,172127,172128],{"class":78,"line":96},[76,172129,2365],{"emptyLinePlaceholder":2364},[76,172131,172132,172134],{"class":78,"line":1143},[76,172133,30384],{"class":136},[76,172135,172136],{"class":86},"(os.getcwd())\n",[76,172138,172139,172141,172144,172147],{"class":78,"line":1158},[76,172140,30384],{"class":136},[76,172142,172143],{"class":86},"(os.listdir(",[76,172145,172146],{"class":192},"\".\"",[76,172148,30466],{"class":86},[46,172150,172152],{"id":172151},"_9125-sys","9.12.5 sys",[66,172154,172156],{"className":30347,"code":172155,"language":30349,"meta":71,"style":71},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[73,172157,172158,172165,172169,172176],{"__ignoreMap":71},[76,172159,172160,172162],{"class":78,"line":79},[76,172161,30361],{"class":82},[76,172163,172164],{"class":86}," sys\n",[76,172166,172167],{"class":78,"line":96},[76,172168,2365],{"emptyLinePlaceholder":2364},[76,172170,172171,172173],{"class":78,"line":1143},[76,172172,30384],{"class":136},[76,172174,172175],{"class":86},"(sys.version)\n",[76,172177,172178,172180],{"class":78,"line":1158},[76,172179,30384],{"class":136},[76,172181,172182],{"class":86},"(sys.path)\n",[16,172184,172186,172187,172189,172190,339],{"id":172185},"_913-if-name-main","9.13 if ",[237,172188,79779],{}," == \"",[237,172191,102027],{},[21,172193,172194,172195,172198],{},"模块被直接运行和被导入时，",[73,172196,172197],{},"__name__"," 的值不同。",[21,172200,172201,172202,24587],{},"创建 ",[73,172203,172204],{},"my_module.py",[66,172206,172208],{"className":30347,"code":172207,"language":30349,"meta":71,"style":71},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[73,172209,172210,172218,172228,172232,172236,172248],{"__ignoreMap":71},[76,172211,172212,172214,172216],{"class":78,"line":79},[76,172213,31916],{"class":82},[76,172215,5176],{"class":1927},[76,172217,151062],{"class":86},[76,172219,172220,172222,172224,172226],{"class":78,"line":96},[76,172221,4055],{"class":82},[76,172223,10836],{"class":86},[76,172225,569],{"class":82},[76,172227,151073],{"class":86},[76,172229,172230],{"class":78,"line":1143},[76,172231,2365],{"emptyLinePlaceholder":2364},[76,172233,172234],{"class":78,"line":1158},[76,172235,2365],{"emptyLinePlaceholder":2364},[76,172237,172238,172240,172242,172244,172246],{"class":78,"line":1164},[76,172239,1495],{"class":82},[76,172241,31189],{"class":136},[76,172243,101528],{"class":82},[76,172245,101531],{"class":192},[76,172247,3704],{"class":86},[76,172249,172250,172252,172254,172256,172258,172260],{"class":78,"line":1178},[76,172251,31268],{"class":136},[76,172253,166569],{"class":86},[76,172255,305],{"class":136},[76,172257,12402],{"class":86},[76,172259,165],{"class":136},[76,172261,30466],{"class":86},[21,172263,172264],{},"作用：",[29,172266,172267,172270],{},[32,172268,172269],{},"直接运行该文件时，执行测试代码。",[32,172271,172272],{},"被其他文件导入时，不执行测试代码。",[21,172274,172275],{},"这是写模块时很常用的习惯。",[16,172277,172279],{"id":172278},"_914-包","9.14 包",[21,172281,172282,172283,172286],{},"包是包含 ",[73,172284,172285],{},"__init__.py"," 的目录，用于组织多个模块。",[21,172288,172289],{},"目录结构：",[66,172291,172294],{"className":172292,"code":172293,"language":5154,"meta":71},[5152],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[73,172295,172293],{"__ignoreMap":71},[21,172297,172298],{},"导入：",[66,172300,172302],{"className":30347,"code":172301,"language":30349,"meta":71,"style":71},"from utils.file_utils import read_file\n",[73,172303,172304],{"__ignoreMap":71},[76,172305,172306,172308,172311,172313],{"class":78,"line":79},[76,172307,30706],{"class":82},[76,172309,172310],{"class":86}," utils.file_utils ",[76,172312,30361],{"class":82},[76,172314,172315],{"class":86}," read_file\n",[21,172317,172318,172320],{},[73,172319,172285],{}," 可以为空，也可以写包初始化逻辑。",[16,172322,172324],{"id":172323},"_915-第三方包","9.15 第三方包",[21,172326,172327,172328,172330],{},"第三方包通过 ",[73,172329,23799],{}," 安装。",[66,172332,172334],{"className":23790,"code":172333,"language":23792,"meta":71,"style":71},"pip install requests\n",[73,172335,172336],{"__ignoreMap":71},[76,172337,172338,172340,172342],{"class":78,"line":79},[76,172339,23799],{"class":1927},[76,172341,23802],{"class":192},[76,172343,146067],{"class":192},[21,172345,172346],{},"使用：",[66,172348,172350],{"className":30347,"code":172349,"language":30349,"meta":71,"style":71},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[73,172351,172352,172358,172362,172377],{"__ignoreMap":71},[76,172353,172354,172356],{"class":78,"line":79},[76,172355,30361],{"class":82},[76,172357,146067],{"class":86},[76,172359,172360],{"class":78,"line":96},[76,172361,2365],{"emptyLinePlaceholder":2364},[76,172363,172364,172367,172369,172372,172375],{"class":78,"line":1143},[76,172365,172366],{"class":86},"response ",[76,172368,133],{"class":82},[76,172370,172371],{"class":86}," requests.get(",[76,172373,172374],{"class":192},"\"https:\u002F\u002Fwww.example.com\"",[76,172376,93],{"class":86},[76,172378,172379,172381],{"class":78,"line":1158},[76,172380,30384],{"class":136},[76,172382,172383],{"class":86},"(response.status_code)\n",[21,172385,172386],{},"查看已安装包：",[66,172388,172390],{"className":23790,"code":172389,"language":23792,"meta":71,"style":71},"pip list\n",[73,172391,172392],{"__ignoreMap":71},[76,172393,172394,172396],{"class":78,"line":79},[76,172395,23799],{"class":1927},[76,172397,118924],{"class":192},[21,172399,172400],{},"导出项目依赖：",[66,172402,172403],{"className":23790,"code":146262,"language":23792,"meta":71,"style":71},[73,172404,172405],{"__ignoreMap":71},[76,172406,172407,172409,172411,172413],{"class":78,"line":79},[76,172408,23799],{"class":1927},[76,172410,146271],{"class":192},[76,172412,26191],{"class":82},[76,172414,146276],{"class":192},[21,172416,172417],{},"安装项目依赖：",[66,172419,172420],{"className":23790,"code":146282,"language":23792,"meta":71,"style":71},[73,172421,172422],{"__ignoreMap":71},[76,172423,172424,172426,172428,172430],{"class":78,"line":79},[76,172425,23799],{"class":1927},[76,172427,23802],{"class":192},[76,172429,119608],{"class":136},[76,172431,146276],{"class":192},[16,172433,172435],{"id":172434},"_916-模块搜索路径","9.16 模块搜索路径",[21,172437,172438,172439,172442],{},"Python 导入模块时会在 ",[73,172440,172441],{},"sys.path"," 中查找。",[66,172444,172446],{"className":30347,"code":172445,"language":30349,"meta":71,"style":71},"import sys\n\nfor path in sys.path:\n    print(path)\n",[73,172447,172448,172454,172458,172470],{"__ignoreMap":71},[76,172449,172450,172452],{"class":78,"line":79},[76,172451,30361],{"class":82},[76,172453,172164],{"class":86},[76,172455,172456],{"class":78,"line":96},[76,172457,2365],{"emptyLinePlaceholder":2364},[76,172459,172460,172462,172465,172467],{"class":78,"line":1143},[76,172461,2990],{"class":82},[76,172463,172464],{"class":86}," path ",[76,172466,26012],{"class":82},[76,172468,172469],{"class":86}," sys.path:\n",[76,172471,172472,172474],{"class":78,"line":1158},[76,172473,31268],{"class":136},[76,172475,169198],{"class":86},[21,172477,172478],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[21,172480,157592],{},[66,172482,172485],{"className":172483,"code":172484,"language":5154,"meta":71},[5152],"random.py\njson.py\ntime.py\n",[73,172486,172484],{"__ignoreMap":71},[21,172488,172489],{},"这些文件名可能导致导入异常。",[16,172491,172493],{"id":172492},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[21,172495,172289],{},[66,172497,172500],{"className":172498,"code":172499,"language":5154,"meta":71},[5152],"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",[73,172501,172499],{"__ignoreMap":71},[21,172503,172504,24587],{},[73,172505,172506],{},"utils\u002Ffile_utils.py",[66,172508,172510],{"className":30347,"code":172509,"language":30349,"meta":71,"style":71},"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",[73,172511,172512,172518,172528,172532,172536,172546,172556,172564,172570,172574,172601,172611,172615,172619,172629,172655],{"__ignoreMap":71},[76,172513,172514,172516],{"class":78,"line":79},[76,172515,30361],{"class":82},[76,172517,147060],{"class":86},[76,172519,172520,172522,172524,172526],{"class":78,"line":96},[76,172521,30706],{"class":82},[76,172523,108280],{"class":86},[76,172525,30361],{"class":82},[76,172527,108285],{"class":86},[76,172529,172530],{"class":78,"line":1143},[76,172531,2365],{"emptyLinePlaceholder":2364},[76,172533,172534],{"class":78,"line":1158},[76,172535,2365],{"emptyLinePlaceholder":2364},[76,172537,172538,172540,172543],{"class":78,"line":1164},[76,172539,31916],{"class":82},[76,172541,172542],{"class":1927}," read_json",[76,172544,172545],{"class":86},"(path):\n",[76,172547,172548,172551,172553],{"class":78,"line":1178},[76,172549,172550],{"class":86},"    path ",[76,172552,133],{"class":82},[76,172554,172555],{"class":86}," Path(path)\n",[76,172557,172558,172560,172562],{"class":78,"line":1184},[76,172559,3066],{"class":82},[76,172561,38899],{"class":82},[76,172563,169279],{"class":86},[76,172565,172566,172568],{"class":78,"line":1275},[76,172567,14719],{"class":82},[76,172569,51807],{"class":86},[76,172571,172572],{"class":78,"line":1281},[76,172573,2365],{"emptyLinePlaceholder":2364},[76,172575,172576,172578,172580,172583,172585,172587,172589,172591,172593,172595,172597,172599],{"class":78,"line":1293},[76,172577,34147],{"class":82},[76,172579,146760],{"class":136},[76,172581,172582],{"class":86},"(path, ",[76,172584,146770],{"class":192},[76,172586,12402],{"class":86},[76,172588,146775],{"class":5183},[76,172590,133],{"class":82},[76,172592,146780],{"class":192},[76,172594,13681],{"class":86},[76,172596,31352],{"class":82},[76,172598,148122],{"class":5183},[76,172600,3704],{"class":86},[76,172602,172603,172605,172607,172609],{"class":78,"line":1576},[76,172604,14719],{"class":82},[76,172606,148133],{"class":86},[76,172608,45323],{"class":5183},[76,172610,93],{"class":86},[76,172612,172613],{"class":78,"line":1581},[76,172614,2365],{"emptyLinePlaceholder":2364},[76,172616,172617],{"class":78,"line":1587},[76,172618,2365],{"emptyLinePlaceholder":2364},[76,172620,172621,172623,172626],{"class":78,"line":1592},[76,172622,31916],{"class":82},[76,172624,172625],{"class":1927}," write_json",[76,172627,172628],{"class":86},"(path, data):\n",[76,172630,172631,172633,172635,172637,172639,172641,172643,172645,172647,172649,172651,172653],{"class":78,"line":1606},[76,172632,34147],{"class":82},[76,172634,146760],{"class":136},[76,172636,172582],{"class":86},[76,172638,151945],{"class":192},[76,172640,12402],{"class":86},[76,172642,146775],{"class":5183},[76,172644,133],{"class":82},[76,172646,146780],{"class":192},[76,172648,13681],{"class":86},[76,172650,31352],{"class":82},[76,172652,148122],{"class":5183},[76,172654,3704],{"class":86},[76,172656,172657,172660,172662,172664,172666,172668,172670,172672,172674,172676,172678],{"class":78,"line":1611},[76,172658,172659],{"class":86},"        json.dump(data, ",[76,172661,45323],{"class":5183},[76,172663,12402],{"class":86},[76,172665,147106],{"class":5183},[76,172667,133],{"class":82},[76,172669,33956],{"class":136},[76,172671,12402],{"class":86},[76,172673,151981],{"class":5183},[76,172675,133],{"class":82},[76,172677,165],{"class":136},[76,172679,93],{"class":86},[21,172681,172682,24587],{},[73,172683,154576],{},[66,172685,172687],{"className":30347,"code":172686,"language":30349,"meta":71,"style":71},"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",[73,172688,172689,172700,172704,172717,172737],{"__ignoreMap":71},[76,172690,172691,172693,172695,172697],{"class":78,"line":79},[76,172692,30706],{"class":82},[76,172694,172310],{"class":86},[76,172696,30361],{"class":82},[76,172698,172699],{"class":86}," read_json, write_json\n",[76,172701,172702],{"class":78,"line":96},[76,172703,2365],{"emptyLinePlaceholder":2364},[76,172705,172706,172708,172710,172713,172715],{"class":78,"line":1143},[76,172707,159685],{"class":86},[76,172709,133],{"class":82},[76,172711,172712],{"class":86}," read_json(",[76,172714,151800],{"class":192},[76,172716,93],{"class":86},[76,172718,172719,172721,172723,172725,172727,172729,172731,172733,172735],{"class":78,"line":1158},[76,172720,170503],{"class":86},[76,172722,62648],{"class":192},[76,172724,51406],{"class":86},[76,172726,149857],{"class":192},[76,172728,12402],{"class":86},[76,172730,151441],{"class":192},[76,172732,51406],{"class":86},[76,172734,1077],{"class":136},[76,172736,165121],{"class":86},[76,172738,172739,172742,172744],{"class":78,"line":1164},[76,172740,172741],{"class":86},"write_json(",[76,172743,151800],{"class":192},[76,172745,172746],{"class":86},", students)\n",[16,172748,172750],{"id":172749},"_918-易错点","9.18 易错点",[29,172752,172753,172756,172761,172766,172769,172772],{},[32,172754,172755],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[32,172757,172758,172759,28354],{},"能指定异常类型就不要裸写 ",[73,172760,170863],{},[32,172762,172763,172765],{},[73,172764,171238],{}," 无论是否出错都会执行。",[32,172767,172768],{},"模块文件名不要和标准库重名。",[32,172770,172771],{},"导入自己写的模块时，要注意运行目录。",[32,172773,172774],{},"第三方包要安装到当前解释器或虚拟环境中。",[16,172776,172778],{"id":172777},"_919-本章练习","9.19 本章练习",[29,172780,172781,172784,172787,172793,172800],{},[32,172782,172783],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[32,172785,172786],{},"写函数读取文件，如果文件不存在则返回空字符串。",[32,172788,172201,172789,172792],{},[73,172790,172791],{},"math_utils.py","，实现加减乘除函数并导入使用。",[32,172794,172795,172796,172799],{},"创建一个 ",[73,172797,172798],{},"utils"," 包，把 JSON 读写函数放进去。",[32,172801,172802],{},"写一个程序，捕获除零异常和输入格式异常。",[5092,172804,172805],{},"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":71,"searchDepth":96,"depth":96,"links":172807},[172808,172809,172810,172811,172812,172813,172814,172815,172816,172817,172818,172824,172831,172833,172834,172835,172836,172837,172838],{"id":170660,"depth":96,"text":170661},{"id":170788,"depth":96,"text":170789},{"id":170837,"depth":96,"text":170838},{"id":170986,"depth":96,"text":170987},{"id":171158,"depth":96,"text":171159},{"id":171227,"depth":96,"text":171228},{"id":171338,"depth":96,"text":171339},{"id":171464,"depth":96,"text":171465},{"id":171589,"depth":96,"text":171590},{"id":171644,"depth":96,"text":171645},{"id":171743,"depth":96,"text":171744,"children":172819},[172820,172821,172822,172823],{"id":171747,"depth":1143,"text":171748},{"id":171781,"depth":1143,"text":171782},{"id":171820,"depth":1143,"text":171821},{"id":171899,"depth":1143,"text":171900},{"id":171922,"depth":96,"text":171923,"children":172825},[172826,172827,172828,172829,172830],{"id":171926,"depth":1143,"text":171927},{"id":172009,"depth":1143,"text":172010},{"id":172054,"depth":1143,"text":172055},{"id":172113,"depth":1143,"text":172114},{"id":172151,"depth":1143,"text":172152},{"id":172185,"depth":96,"text":172832},"9.13 if name == \"main\"",{"id":172278,"depth":96,"text":172279},{"id":172323,"depth":96,"text":172324},{"id":172434,"depth":96,"text":172435},{"id":172492,"depth":96,"text":172493},{"id":172749,"depth":96,"text":172750},{"id":172777,"depth":96,"text":172778},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170652,"description":23344},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172845,"title":172846,"body":172847,"description":173010,"extension":5123,"meta":173011,"navigation":2364,"path":173012,"seo":173013,"stem":173014,"__hash__":173015},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":9,"value":172848,"toc":173005},[172849,172852,172855,172858,172869,172871,172945,172948,172951,172954,172957,172960,172963,172966,172969,172972,172975],[12,172850,172846],{"id":172851},"python教程",[21,172853,172854],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[21,172856,172857],{},"建议学习环境：",[29,172859,172860,172863,172866],{},[32,172861,172862],{},"Python 版本：Python 3.10 及以上。",[32,172864,172865],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[32,172867,172868],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[16,172870,117047],{"id":117047},[29,172872,172873,172879,172885,172891,172897,172903,172909,172915,172921,172927,172933,172939],{},[32,172874,172875],{},[326,172876,172878],{"href":172877},".\u002Fch1-Python","Python环境与第一个程序",[32,172880,172881],{},[326,172882,172884],{"href":172883},".\u002Fch2","基础语法、变量与字符串",[32,172886,172887],{},[326,172888,172890],{"href":172889},".\u002Fch3","判断语句",[32,172892,172893],{},[326,172894,172896],{"href":172895},".\u002Fch4","循环语句",[32,172898,172899],{},[326,172900,172902],{"href":172901},".\u002Fch5","函数基础",[32,172904,172905],{},[326,172906,172908],{"href":172907},".\u002Fch6","数据容器",[32,172910,172911],{},[326,172912,172914],{"href":172913},".\u002Fch7","函数进阶",[32,172916,172917],{},[326,172918,172920],{"href":172919},".\u002Fch8","文件操作",[32,172922,172923],{},[326,172924,172926],{"href":172925},".\u002Fch9","异常、模块与包",[32,172928,172929],{},[326,172930,172932],{"href":172931},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[32,172934,172935],{},[326,172936,172938],{"href":172937},".\u002Fch11","面向对象基础",[32,172940,172941],{},[326,172942,172944],{"href":172943},".\u002Fch12","综合案例与复习路线",[16,172946,172947],{"id":172947},"学习路线",[21,172949,172950],{},"第一阶段：能运行程序。",[21,172952,172953],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[21,172955,172956],{},"第二阶段：能组织数据。",[21,172958,172959],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[21,172961,172962],{},"第三阶段：能封装逻辑。",[21,172964,172965],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[21,172967,172968],{},"第四阶段：能做小项目。",[21,172970,172971],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[16,172973,172974],{"id":172974},"参考资料",[29,172976,172977,172984,172991,172998],{},[32,172978,172979,172980],{},"黑马程序员 Python 入门教程推荐：",[326,172981,172982],{"href":172982,"rel":172983},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23833],[32,172985,172986,172987],{},"Python 官方中文教程：",[326,172988,172989],{"href":172989,"rel":172990},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23833],[32,172992,172993,172994],{},"Python 标准库文档：",[326,172995,172996],{"href":172996,"rel":172997},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23833],[32,172999,173000,173001],{},"pyecharts 文档：",[326,173002,173003],{"href":173003,"rel":173004},"https:\u002F\u002Fpyecharts.org\u002F",[23833],{"title":71,"searchDepth":96,"depth":96,"links":173006},[173007,173008,173009],{"id":117047,"depth":96,"text":117047},{"id":172947,"depth":96,"text":172947},{"id":172974,"depth":96,"text":172974},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23346},"\u002Fwiki\u002F2024-10-10-python",{"title":172846,"description":173010},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",false,1781331373246]