[{"data":1,"prerenderedAt":173022},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi":3,"wiki-doc-nav":22},{"id":4,"title":5,"body":6,"description":13,"extension":14,"meta":15,"navigation":17,"path":18,"seo":19,"stem":20,"__hash__":21},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md","c++",{"type":7,"value":8,"toc":9},"minimark",[],{"title":10,"searchDepth":11,"depth":11,"links":12},"",2,[],null,"md",{"category":16},"机器人",true,"\u002Fwiki\u002F2026-05-24-c++",{"title":5,"description":13},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",[23,5141,6249,7669,10658,12009,13498,14587,23350,23357,23956,23982,24106,24347,24412,24430,24443,24490,24614,24783,24982,25162,25367,25503,25598,25635,25648,25958,26699,27407,27428,28448,30079,30230,30243,30255,30556,50368,50383,50400,50433,53305,76653,92798,92819,92932,93053,93823,94486,94847,94885,94991,95091,95134,95160,95221,96875,96976,97001,97492,97992,99072,99355,100097,100599,100611,102627,104291,105794,107492,109409,111328,113350,116820,117252,117715,118464,121408,121756,121778,122134,125441,125453,125856,125879,126026,126193,126398,126699,127256,127913,129844,131442,132091,133585,135016,136251,137945,139697,142107,142223,143158,143369,144254,145489,145717,145730,146885,149297,151665,154986,157463,159107,160884,162897,165949,168129,170656,172850],{"id":24,"title":25,"body":26,"description":10,"extension":14,"meta":5136,"navigation":17,"path":5137,"seo":5138,"stem":5139,"__hash__":5140},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":27,"toc":5108},[28,32,37,41,45,58,62,67,70,73,76,79,82,116,120,123,126,129,132,185,189,208,210,224,227,235,238,1101,1108,1125,1129,1220,1224,1230,1319,1323,1361,1365,1429,1433,1437,1444,1455,1459,1464,1468,1473,1477,1482,1486,1490,1495,1765,1770,1908,1913,2170,2173,2181,2185,2190,2293,2296,2602,2611,2712,2715,2718,2721,2724,2984,2989,3129,3132,3311,3314,3442,3445,3597,3601,3606,3609,3620,3628,3631,3738,3742,3746,3751,3801,3806,3811,3835,3840,3893,3896,3901,4078,4083,4368,4373,4770,4774,4779,4836,4841,4849,4852,4992,4995,5104],[29,30,25],"h1",{"id":31},"_1基础入门",[33,34,36],"h2",{"id":35},"_11注释","1.1注释",[38,39,40],"p",{},"\u002F\u002F或者\u002F* *\u002F",[33,42,44],{"id":43},"_12命名","1.2命名",[46,47,48,52,55],"ol",{},[49,50,51],"li",{},"字母数字下划线",[49,53,54],{},"开头必须是字母或_",[49,56,57],{},"不能使用关键词",[33,59,61],{"id":60},"_13数据类型","1.3数据类型",[63,64,66],"h3",{"id":65},"_131整形","1.3.1整形",[38,68,69],{},"short 短整形 2",[38,71,72],{},"int 整形 4",[38,74,75],{},"long 长整形 win4 linux32位4 linux64位8",[38,77,78],{},"long long 长长整形 8",[38,80,81],{},"利用sizeof可以求数据类型占用的内存空间大小",[83,84,87],"pre",{"className":85,"code":86,"language":5,"meta":10,"style":10},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n",[88,89,90,109],"code",{"__ignoreMap":10},[91,92,95,99,103,106],"span",{"class":93,"line":94},"line",1,[91,96,98],{"class":97},"szBVR","sizeof",[91,100,102],{"class":101},"sVt8B","(",[91,104,105],{"class":97},"int",[91,107,108],{"class":101},")\n",[91,110,111,113],{"class":93,"line":11},[91,112,98],{"class":97},[91,114,115],{"class":101},"(num)\n",[63,117,119],{"id":118},"_132浮点型","1.3.2浮点型",[38,121,122],{},"float 单精度 4节 7位有效数字",[38,124,125],{},"double 双精度 8节 15-16有效数字",[38,127,128],{},"默认情况下，输出一个小数，会显示6位有效数字",[38,130,131],{},"注意点：",[83,133,135],{"className":85,"code":134,"language":5,"meta":10,"style":10},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[88,136,137,162],{"__ignoreMap":10},[91,138,139,142,145,148,152,155,158],{"class":93,"line":94},[91,140,141],{"class":97},"float",[91,143,144],{"class":101}," f1",[91,146,147],{"class":97},"=",[91,149,151],{"class":150},"sj4cs","3.14",[91,153,154],{"class":97},"f",[91,156,157],{"class":101},";",[91,159,161],{"class":160},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[91,163,164,166,169,171,174,177,180,182],{"class":93,"line":11},[91,165,141],{"class":97},[91,167,168],{"class":101}," f2",[91,170,147],{"class":97},[91,172,173],{"class":150},"3",[91,175,176],{"class":97},"e",[91,178,179],{"class":150},"2",[91,181,157],{"class":101},[91,183,184],{"class":160}," \u002F\u002F科学记数法\n",[63,186,188],{"id":187},"_133字符型","1.3.3字符型",[83,190,192],{"className":85,"code":191,"language":5,"meta":10,"style":10},"char ch='a'\n",[88,193,194],{"__ignoreMap":10},[91,195,196,199,202,204],{"class":93,"line":94},[91,197,198],{"class":97},"char",[91,200,201],{"class":101}," ch",[91,203,147],{"class":97},[91,205,207],{"class":206},"sZZnC","'a'\n",[38,209,131],{},[46,211,212,215,218,221],{},[49,213,214],{},"在显示字符型变量时，只能单引号，双引号x",[49,216,217],{},"单引号内只能一个字符，不能字符串",[49,219,220],{},"c和c++字符型变量只占用一个字符",[49,222,223],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[38,225,226],{},"ASCII码大致由以下两部分组成：",[46,228,229,232],{},[49,230,231],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[49,233,234],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[38,236,237],{},"ASCII码表格：",[239,240,241,285],"table",{},[242,243,244],"thead",{},[245,246,247,255,260,264,269,273,277,281],"tr",{},[248,249,250,254],"th",{},[251,252,253],"strong",{},"ASCII","值",[248,256,257],{},[251,258,259],{},"控制字符",[248,261,262,254],{},[251,263,253],{},[248,265,266],{},[251,267,268],{},"字符",[248,270,271,254],{},[251,272,253],{},[248,274,275],{},[251,276,268],{},[248,278,279,254],{},[251,280,253],{},[248,282,283],{},[251,284,268],{},[286,287,288,315,341,366,391,417,442,467,493,518,544,570,596,621,647,673,699,723,748,773,798,823,848,873,898,923,948,974,999,1024,1049,1075],"tbody",{},[245,289,290,294,297,300,303,306,309,312],{},[291,292,293],"td",{},"0",[291,295,296],{},"NUT",[291,298,299],{},"32",[291,301,302],{},"(space)",[291,304,305],{},"64",[291,307,308],{},"@",[291,310,311],{},"96",[291,313,314],{},"、",[245,316,317,320,323,326,329,332,335,338],{},[291,318,319],{},"1",[291,321,322],{},"SOH",[291,324,325],{},"33",[291,327,328],{},"!",[291,330,331],{},"65",[291,333,334],{},"A",[291,336,337],{},"97",[291,339,340],{},"a",[245,342,343,345,348,351,354,357,360,363],{},[291,344,179],{},[291,346,347],{},"STX",[291,349,350],{},"34",[291,352,353],{},"\"",[291,355,356],{},"66",[291,358,359],{},"B",[291,361,362],{},"98",[291,364,365],{},"b",[245,367,368,370,373,376,379,382,385,388],{},[291,369,173],{},[291,371,372],{},"ETX",[291,374,375],{},"35",[291,377,378],{},"#",[291,380,381],{},"67",[291,383,384],{},"C",[291,386,387],{},"99",[291,389,390],{},"c",[245,392,393,396,399,402,405,408,411,414],{},[291,394,395],{},"4",[291,397,398],{},"EOT",[291,400,401],{},"36",[291,403,404],{},"$",[291,406,407],{},"68",[291,409,410],{},"D",[291,412,413],{},"100",[291,415,416],{},"d",[245,418,419,422,425,428,431,434,437,440],{},[291,420,421],{},"5",[291,423,424],{},"ENQ",[291,426,427],{},"37",[291,429,430],{},"%",[291,432,433],{},"69",[291,435,436],{},"E",[291,438,439],{},"101",[291,441,176],{},[245,443,444,447,450,453,456,459,462,465],{},[291,445,446],{},"6",[291,448,449],{},"ACK",[291,451,452],{},"38",[291,454,455],{},"&",[291,457,458],{},"70",[291,460,461],{},"F",[291,463,464],{},"102",[291,466,154],{},[245,468,469,472,475,478,481,484,487,490],{},[291,470,471],{},"7",[291,473,474],{},"BEL",[291,476,477],{},"39",[291,479,480],{},",",[291,482,483],{},"71",[291,485,486],{},"G",[291,488,489],{},"103",[291,491,492],{},"g",[245,494,495,498,501,504,506,509,512,515],{},[291,496,497],{},"8",[291,499,500],{},"BS",[291,502,503],{},"40",[291,505,102],{},[291,507,508],{},"72",[291,510,511],{},"H",[291,513,514],{},"104",[291,516,517],{},"h",[245,519,520,523,526,529,532,535,538,541],{},[291,521,522],{},"9",[291,524,525],{},"HT",[291,527,528],{},"41",[291,530,531],{},")",[291,533,534],{},"73",[291,536,537],{},"I",[291,539,540],{},"105",[291,542,543],{},"i",[245,545,546,549,552,555,558,561,564,567],{},[291,547,548],{},"10",[291,550,551],{},"LF",[291,553,554],{},"42",[291,556,557],{},"*",[291,559,560],{},"74",[291,562,563],{},"J",[291,565,566],{},"106",[291,568,569],{},"j",[245,571,572,575,578,581,584,587,590,593],{},[291,573,574],{},"11",[291,576,577],{},"VT",[291,579,580],{},"43",[291,582,583],{},"+",[291,585,586],{},"75",[291,588,589],{},"K",[291,591,592],{},"107",[291,594,595],{},"k",[245,597,598,601,604,607,609,612,615,618],{},[291,599,600],{},"12",[291,602,603],{},"FF",[291,605,606],{},"44",[291,608,480],{},[291,610,611],{},"76",[291,613,614],{},"L",[291,616,617],{},"108",[291,619,620],{},"l",[245,622,623,626,629,632,635,638,641,644],{},[291,624,625],{},"13",[291,627,628],{},"CR",[291,630,631],{},"45",[291,633,634],{},"-",[291,636,637],{},"77",[291,639,640],{},"M",[291,642,643],{},"109",[291,645,646],{},"m",[245,648,649,652,655,658,661,664,667,670],{},[291,650,651],{},"14",[291,653,654],{},"SO",[291,656,657],{},"46",[291,659,660],{},".",[291,662,663],{},"78",[291,665,666],{},"N",[291,668,669],{},"110",[291,671,672],{},"n",[245,674,675,678,681,684,687,690,693,696],{},[291,676,677],{},"15",[291,679,680],{},"SI",[291,682,683],{},"47",[291,685,686],{},"\u002F",[291,688,689],{},"79",[291,691,692],{},"O",[291,694,695],{},"111",[291,697,698],{},"o",[245,700,701,704,707,710,712,715,718,721],{},[291,702,703],{},"16",[291,705,706],{},"DLE",[291,708,709],{},"48",[291,711,293],{},[291,713,714],{},"80",[291,716,717],{},"P",[291,719,720],{},"112",[291,722,38],{},[245,724,725,728,731,734,736,739,742,745],{},[291,726,727],{},"17",[291,729,730],{},"DCI",[291,732,733],{},"49",[291,735,319],{},[291,737,738],{},"81",[291,740,741],{},"Q",[291,743,744],{},"113",[291,746,747],{},"q",[245,749,750,753,756,759,761,764,767,770],{},[291,751,752],{},"18",[291,754,755],{},"DC2",[291,757,758],{},"50",[291,760,179],{},[291,762,763],{},"82",[291,765,766],{},"R",[291,768,769],{},"114",[291,771,772],{},"r",[245,774,775,778,781,784,786,789,792,795],{},[291,776,777],{},"19",[291,779,780],{},"DC3",[291,782,783],{},"51",[291,785,173],{},[291,787,788],{},"83",[291,790,791],{},"S",[291,793,794],{},"115",[291,796,797],{},"s",[245,799,800,803,806,809,811,814,817,820],{},[291,801,802],{},"20",[291,804,805],{},"DC4",[291,807,808],{},"52",[291,810,395],{},[291,812,813],{},"84",[291,815,816],{},"T",[291,818,819],{},"116",[291,821,822],{},"t",[245,824,825,828,831,834,836,839,842,845],{},[291,826,827],{},"21",[291,829,830],{},"NAK",[291,832,833],{},"53",[291,835,421],{},[291,837,838],{},"85",[291,840,841],{},"U",[291,843,844],{},"117",[291,846,847],{},"u",[245,849,850,853,856,859,861,864,867,870],{},[291,851,852],{},"22",[291,854,855],{},"SYN",[291,857,858],{},"54",[291,860,446],{},[291,862,863],{},"86",[291,865,866],{},"V",[291,868,869],{},"118",[291,871,872],{},"v",[245,874,875,878,881,884,886,889,892,895],{},[291,876,877],{},"23",[291,879,880],{},"TB",[291,882,883],{},"55",[291,885,471],{},[291,887,888],{},"87",[291,890,891],{},"W",[291,893,894],{},"119",[291,896,897],{},"w",[245,899,900,903,906,909,911,914,917,920],{},[291,901,902],{},"24",[291,904,905],{},"CAN",[291,907,908],{},"56",[291,910,497],{},[291,912,913],{},"88",[291,915,916],{},"X",[291,918,919],{},"120",[291,921,922],{},"x",[245,924,925,928,931,934,936,939,942,945],{},[291,926,927],{},"25",[291,929,930],{},"EM",[291,932,933],{},"57",[291,935,522],{},[291,937,938],{},"89",[291,940,941],{},"Y",[291,943,944],{},"121",[291,946,947],{},"y",[245,949,950,953,956,959,962,965,968,971],{},[291,951,952],{},"26",[291,954,955],{},"SUB",[291,957,958],{},"58",[291,960,961],{},":",[291,963,964],{},"90",[291,966,967],{},"Z",[291,969,970],{},"122",[291,972,973],{},"z",[245,975,976,979,982,985,987,990,993,996],{},[291,977,978],{},"27",[291,980,981],{},"ESC",[291,983,984],{},"59",[291,986,157],{},[291,988,989],{},"91",[291,991,992],{},"[",[291,994,995],{},"123",[291,997,998],{},"{",[245,1000,1001,1004,1007,1010,1013,1016,1018,1021],{},[291,1002,1003],{},"28",[291,1005,1006],{},"FS",[291,1008,1009],{},"60",[291,1011,1012],{},"\u003C",[291,1014,1015],{},"92",[291,1017,686],{},[291,1019,1020],{},"124",[291,1022,1023],{},"|",[245,1025,1026,1029,1032,1035,1037,1040,1043,1046],{},[291,1027,1028],{},"29",[291,1030,1031],{},"GS",[291,1033,1034],{},"61",[291,1036,147],{},[291,1038,1039],{},"93",[291,1041,1042],{},"]",[291,1044,1045],{},"125",[291,1047,1048],{},"}",[245,1050,1051,1054,1057,1060,1063,1066,1069,1072],{},[291,1052,1053],{},"30",[291,1055,1056],{},"RS",[291,1058,1059],{},"62",[291,1061,1062],{},">",[291,1064,1065],{},"94",[291,1067,1068],{},"^",[291,1070,1071],{},"126",[291,1073,1074],{},"`",[245,1076,1077,1080,1083,1086,1089,1092,1095,1098],{},[291,1078,1079],{},"31",[291,1081,1082],{},"US",[291,1084,1085],{},"63",[291,1087,1088],{},"?",[291,1090,1091],{},"95",[291,1093,1094],{},"_",[291,1096,1097],{},"127",[291,1099,1100],{},"DEL",[38,1102,1103,1104,1107],{},"ASCII 码大致由以下",[251,1105,1106],{},"两部分组","成：",[1109,1110,1111,1118],"ul",{},[49,1112,1113,1114,1117],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[251,1115,1116],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[49,1119,1120,1121,1124],{},"ASCII 打印字符：数字 ",[251,1122,1123],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[63,1126,1128],{"id":1127},"_134转义字符","1.3.4转义字符",[83,1130,1132],{"className":85,"code":1131,"language":5,"meta":10,"style":10},"\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",[88,1133,1134,1139,1155,1170,1176,1190,1196],{"__ignoreMap":10},[91,1135,1136],{"class":93,"line":94},[91,1137,1138],{"class":160},"\u002F\u002F换行符\n",[91,1140,1141,1144,1147,1150,1152],{"class":93,"line":11},[91,1142,1143],{"class":101},"cout ",[91,1145,1146],{"class":97},"\u003C\u003C",[91,1148,1149],{"class":206},"\"hello world\u002Fn\"",[91,1151,157],{"class":101},[91,1153,1154],{"class":160}," \u002F\u002F就等同于如下：\n",[91,1156,1158,1160,1162,1165,1167],{"class":93,"line":1157},3,[91,1159,1143],{"class":101},[91,1161,1146],{"class":97},[91,1163,1164],{"class":206},"\"hello world\"",[91,1166,1146],{"class":97},[91,1168,1169],{"class":101},"endl;\n",[91,1171,1173],{"class":93,"line":1172},4,[91,1174,1175],{"class":160},"\u002F\u002F反斜杠\n",[91,1177,1179,1181,1183,1186,1188],{"class":93,"line":1178},5,[91,1180,1143],{"class":101},[91,1182,1146],{"class":97},[91,1184,1185],{"class":206},"\"\u002F\u002F\"",[91,1187,1146],{"class":97},[91,1189,1169],{"class":101},[91,1191,1193],{"class":93,"line":1192},6,[91,1194,1195],{"class":160},"\u002F\u002F水平制表符\n",[91,1197,1199,1201,1203,1206,1209,1212,1214,1217],{"class":93,"line":1198},7,[91,1200,1143],{"class":101},[91,1202,1146],{"class":97},[91,1204,1205],{"class":206},"\"aaaa",[91,1207,1208],{"class":150},"\\t",[91,1210,1211],{"class":206},"helloworld\"",[91,1213,1146],{"class":97},[91,1215,1216],{"class":101},"endl;",[91,1218,1219],{"class":160}," \u002F\u002F输出窗口时有对齐效果\n",[63,1221,1223],{"id":1222},"_135字符串型","1.3.5字符串型",[38,1225,1226,1227,1229],{},"char 变量名",[91,1228],{},"=\"字符串值\"",[83,1231,1233],{"className":85,"code":1232,"language":5,"meta":10,"style":10},"\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",[88,1234,1235,1240,1245,1250,1255,1269,1282,1287,1293,1305],{"__ignoreMap":10},[91,1236,1237],{"class":93,"line":94},[91,1238,1239],{"class":160},"\u002F\u002Fc风格字符串\n",[91,1241,1242],{"class":93,"line":11},[91,1243,1244],{"class":160},"\u002F\u002F注意事项：\n",[91,1246,1247],{"class":93,"line":1157},[91,1248,1249],{"class":160},"\u002F\u002F1.char字符串名[]\n",[91,1251,1252],{"class":93,"line":1172},[91,1253,1254],{"class":160},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[91,1256,1257,1259,1262,1264,1266],{"class":93,"line":1178},[91,1258,198],{"class":97},[91,1260,1261],{"class":101}," str[]",[91,1263,147],{"class":97},[91,1265,1164],{"class":206},[91,1267,1268],{"class":101},";\n",[91,1270,1271,1273,1275,1278,1280],{"class":93,"line":1192},[91,1272,1143],{"class":101},[91,1274,1146],{"class":97},[91,1276,1277],{"class":101},"str",[91,1279,1146],{"class":97},[91,1281,1169],{"class":101},[91,1283,1284],{"class":93,"line":1198},[91,1285,1286],{"class":160},"\u002F\u002Fc++风格字符串\n",[91,1288,1290],{"class":93,"line":1289},8,[91,1291,1292],{"class":160},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[91,1294,1296,1299,1301,1303],{"class":93,"line":1295},9,[91,1297,1298],{"class":101},"string str2",[91,1300,147],{"class":97},[91,1302,1164],{"class":206},[91,1304,1268],{"class":101},[91,1306,1308,1310,1312,1315,1317],{"class":93,"line":1307},10,[91,1309,1143],{"class":101},[91,1311,1146],{"class":97},[91,1313,1314],{"class":101},"str2",[91,1316,1146],{"class":97},[91,1318,1169],{"class":101},[63,1320,1322],{"id":1321},"_136布尔类型bool","1.3.6布尔类型bool",[83,1324,1326],{"className":85,"code":1325,"language":5,"meta":10,"style":10},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[88,1327,1328,1343],{"__ignoreMap":10},[91,1329,1330,1333,1336,1338,1341],{"class":93,"line":94},[91,1331,1332],{"class":97},"bool",[91,1334,1335],{"class":101}," flag",[91,1337,147],{"class":97},[91,1339,1340],{"class":150},"true",[91,1342,1268],{"class":101},[91,1344,1345,1348,1351,1354,1356,1358],{"class":93,"line":11},[91,1346,1347],{"class":101},"cout",[91,1349,1350],{"class":97},"\u003C\u003Csizeof",[91,1352,1353],{"class":101},"(flag)",[91,1355,1146],{"class":97},[91,1357,1216],{"class":101},[91,1359,1360],{"class":160}," \u002F\u002F查看布尔占内存空间\n",[33,1362,1364],{"id":1363},"_14键盘输入cin","1.4键盘输入cin",[83,1366,1368],{"className":85,"code":1367,"language":5,"meta":10,"style":10},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[88,1369,1370,1383,1400,1411],{"__ignoreMap":10},[91,1371,1372,1374,1377,1379,1381],{"class":93,"line":94},[91,1373,105],{"class":97},[91,1375,1376],{"class":101}," a",[91,1378,147],{"class":97},[91,1380,293],{"class":150},[91,1382,1268],{"class":101},[91,1384,1385,1387,1389,1392,1394,1396,1398],{"class":93,"line":11},[91,1386,1347],{"class":101},[91,1388,1146],{"class":97},[91,1390,1391],{"class":206},"\"请给整型变量a赋值\"",[91,1393,1146],{"class":97},[91,1395,340],{"class":101},[91,1397,1146],{"class":97},[91,1399,1169],{"class":101},[91,1401,1402,1405,1408],{"class":93,"line":1157},[91,1403,1404],{"class":101},"cin ",[91,1406,1407],{"class":97},">>",[91,1409,1410],{"class":101}," a;\n",[91,1412,1413,1415,1417,1420,1423,1425,1427],{"class":93,"line":1172},[91,1414,1143],{"class":101},[91,1416,1146],{"class":97},[91,1418,1419],{"class":206}," \"整型变量a=\"",[91,1421,1422],{"class":97}," \u003C\u003C",[91,1424,340],{"class":101},[91,1426,1146],{"class":97},[91,1428,1169],{"class":101},[33,1430,1432],{"id":1431},"_15运算符","1.5运算符",[63,1434,1436],{"id":1435},"_151算术运算符","1.5.1算术运算符",[38,1438,1439,1443],{},[1440,1441],"img",{"alt":10,"src":1442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[46,1445,1446,1449,1452],{},[49,1447,1448],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[49,1450,1451],{},"两个小数不可以做取模运算",[49,1453,1454],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[63,1456,1458],{"id":1457},"_152赋值运算符","1.5.2赋值运算符",[38,1460,1461],{},[1440,1462],{"alt":10,"src":1463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[63,1465,1467],{"id":1466},"_153比较运算符","1.5.3比较运算符",[38,1469,1470],{},[1440,1471],{"alt":10,"src":1472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[63,1474,1476],{"id":1475},"_154逻辑运算符","1.5.4逻辑运算符",[38,1478,1479],{},[1440,1480],{"alt":10,"src":1481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[33,1483,1485],{"id":1484},"_16程序流程结构","1.6程序流程结构",[63,1487,1489],{"id":1488},"_161选择结构","1.6.1选择结构",[46,1491,1492],{},[49,1493,1494],{},"if语句\n单行、多行、多条件if语句",[83,1496,1498],{"className":85,"code":1497,"language":5,"meta":10,"style":10},"\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",[88,1499,1500,1505,1520,1525,1539,1544,1549,1558,1571,1575,1588,1593,1599,1604,1618,1623,1629,1650,1655,1669,1674,1703,1708,1725,1730,1735,1740,1754,1759],{"__ignoreMap":10},[91,1501,1502],{"class":93,"line":94},[91,1503,1504],{"class":160},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[91,1506,1507,1510,1513,1515,1518],{"class":93,"line":11},[91,1508,1509],{"class":97},"if",[91,1511,1512],{"class":101},"(score",[91,1514,1062],{"class":97},[91,1516,1517],{"class":150},"600",[91,1519,108],{"class":101},[91,1521,1522],{"class":93,"line":1157},[91,1523,1524],{"class":101},"{\n",[91,1526,1527,1530,1532,1535,1537],{"class":93,"line":1172},[91,1528,1529],{"class":101},"    cout",[91,1531,1146],{"class":97},[91,1533,1534],{"class":206},"'这是单行if语句'",[91,1536,1146],{"class":97},[91,1538,1169],{"class":101},[91,1540,1541],{"class":93,"line":1178},[91,1542,1543],{"class":101},"}\n",[91,1545,1546],{"class":93,"line":1192},[91,1547,1548],{"class":160},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[91,1550,1551,1553,1555],{"class":93,"line":1198},[91,1552,1404],{"class":101},[91,1554,1407],{"class":97},[91,1556,1557],{"class":101}," score\n",[91,1559,1560,1562,1564,1567,1569],{"class":93,"line":1289},[91,1561,1509],{"class":97},[91,1563,1512],{"class":101},[91,1565,1566],{"class":97},"\u003C=",[91,1568,1517],{"class":150},[91,1570,108],{"class":101},[91,1572,1573],{"class":93,"line":1295},[91,1574,1524],{"class":101},[91,1576,1577,1579,1581,1584,1586],{"class":93,"line":1307},[91,1578,1529],{"class":101},[91,1580,1407],{"class":97},[91,1582,1583],{"class":206},"\"小于等于600\"",[91,1585,1146],{"class":97},[91,1587,1169],{"class":101},[91,1589,1591],{"class":93,"line":1590},11,[91,1592,1543],{"class":101},[91,1594,1596],{"class":93,"line":1595},12,[91,1597,1598],{"class":97},"else\n",[91,1600,1602],{"class":93,"line":1601},13,[91,1603,1524],{"class":101},[91,1605,1607,1609,1611,1614,1616],{"class":93,"line":1606},14,[91,1608,1529],{"class":101},[91,1610,1407],{"class":97},[91,1612,1613],{"class":206},"\"大于600\"",[91,1615,1407],{"class":97},[91,1617,1169],{"class":101},[91,1619,1621],{"class":93,"line":1620},15,[91,1622,1543],{"class":101},[91,1624,1626],{"class":93,"line":1625},16,[91,1627,1628],{"class":160},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[91,1630,1632,1634,1637,1639,1641,1644,1646,1648],{"class":93,"line":1631},17,[91,1633,1509],{"class":97},[91,1635,1636],{"class":101}," (",[91,1638,293],{"class":150},[91,1640,1012],{"class":97},[91,1642,1643],{"class":101},"num",[91,1645,1012],{"class":97},[91,1647,413],{"class":150},[91,1649,108],{"class":101},[91,1651,1653],{"class":93,"line":1652},18,[91,1654,1524],{"class":101},[91,1656,1658,1660,1662,1665,1667],{"class":93,"line":1657},19,[91,1659,1529],{"class":101},[91,1661,1146],{"class":97},[91,1663,1664],{"class":206},"\"小于100\"",[91,1666,1146],{"class":97},[91,1668,1169],{"class":101},[91,1670,1672],{"class":93,"line":1671},20,[91,1673,1543],{"class":101},[91,1675,1677,1680,1683,1686,1689,1691,1694,1696,1698,1701],{"class":93,"line":1676},21,[91,1678,1679],{"class":97},"else",[91,1681,1682],{"class":97}," if",[91,1684,1685],{"class":101}," (nmu",[91,1687,1688],{"class":97},">=",[91,1690,413],{"class":150},[91,1692,1693],{"class":97},"&&",[91,1695,1643],{"class":101},[91,1697,1012],{"class":97},[91,1699,1700],{"class":150},"200",[91,1702,108],{"class":101},[91,1704,1706],{"class":93,"line":1705},22,[91,1707,1524],{"class":101},[91,1709,1711,1713,1715,1718,1720,1722],{"class":93,"line":1710},23,[91,1712,1529],{"class":101},[91,1714,1146],{"class":97},[91,1716,1717],{"class":206},"\"不小于100且小于200\"",[91,1719,1146],{"class":97},[91,1721,1216],{"class":101},[91,1723,1724],{"class":160}," \u002F\u002F可以无限else if,python中是elif：\n",[91,1726,1728],{"class":93,"line":1727},24,[91,1729,1543],{"class":101},[91,1731,1733],{"class":93,"line":1732},25,[91,1734,1598],{"class":97},[91,1736,1738],{"class":93,"line":1737},26,[91,1739,1524],{"class":101},[91,1741,1743,1745,1747,1750,1752],{"class":93,"line":1742},27,[91,1744,1529],{"class":101},[91,1746,1146],{"class":97},[91,1748,1749],{"class":206},"\"不小于200\"",[91,1751,1146],{"class":97},[91,1753,1169],{"class":101},[91,1755,1757],{"class":93,"line":1756},28,[91,1758,1543],{"class":101},[91,1760,1762],{"class":93,"line":1761},29,[91,1763,1764],{"class":160},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[46,1766,1767],{"start":11},[49,1768,1769],{},"三目运算符",[83,1771,1773],{"className":85,"code":1772,"language":5,"meta":10,"style":10},"\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",[88,1774,1775,1780,1785,1811,1833,1850,1855,1878,1893],{"__ignoreMap":10},[91,1776,1777],{"class":93,"line":94},[91,1778,1779],{"class":160},"\u002F\u002F创建三个变量a,b,c\n",[91,1781,1782],{"class":93,"line":11},[91,1783,1784],{"class":160},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[91,1786,1787,1789,1791,1793,1795,1798,1800,1802,1805,1807,1809],{"class":93,"line":1157},[91,1788,105],{"class":97},[91,1790,1376],{"class":101},[91,1792,147],{"class":97},[91,1794,802],{"class":150},[91,1796,1797],{"class":101},",b",[91,1799,147],{"class":97},[91,1801,548],{"class":150},[91,1803,1804],{"class":101},",c",[91,1806,147],{"class":97},[91,1808,293],{"class":150},[91,1810,1268],{"class":101},[91,1812,1813,1815,1817,1820,1822,1824,1826,1828,1830],{"class":93,"line":1172},[91,1814,390],{"class":101},[91,1816,147],{"class":97},[91,1818,1819],{"class":101},"(a",[91,1821,1062],{"class":97},[91,1823,365],{"class":101},[91,1825,1088],{"class":97},[91,1827,340],{"class":101},[91,1829,961],{"class":97},[91,1831,1832],{"class":101},"b)\n",[91,1834,1835,1837,1839,1842,1844,1846,1848],{"class":93,"line":1178},[91,1836,1347],{"class":101},[91,1838,1146],{"class":97},[91,1840,1841],{"class":206},"\"c=\"",[91,1843,1146],{"class":97},[91,1845,390],{"class":101},[91,1847,1146],{"class":97},[91,1849,1169],{"class":101},[91,1851,1852],{"class":93,"line":1192},[91,1853,1854],{"class":160},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[91,1856,1857,1859,1861,1863,1865,1867,1869,1872,1874,1876],{"class":93,"line":1198},[91,1858,1819],{"class":101},[91,1860,1062],{"class":97},[91,1862,365],{"class":101},[91,1864,1088],{"class":97},[91,1866,340],{"class":101},[91,1868,961],{"class":97},[91,1870,1871],{"class":101},"b)",[91,1873,147],{"class":97},[91,1875,413],{"class":150},[91,1877,1268],{"class":101},[91,1879,1880,1882,1884,1886,1888,1890],{"class":93,"line":1289},[91,1881,1347],{"class":101},[91,1883,1146],{"class":97},[91,1885,340],{"class":101},[91,1887,1146],{"class":97},[91,1889,1216],{"class":101},[91,1891,1892],{"class":160}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[91,1894,1895,1897,1899,1901,1903,1905],{"class":93,"line":1295},[91,1896,1347],{"class":101},[91,1898,1146],{"class":97},[91,1900,365],{"class":101},[91,1902,1146],{"class":97},[91,1904,1216],{"class":101},[91,1906,1907],{"class":160}," \u002F\u002F10   a>b,b还是原值\n",[46,1909,1910],{"start":1157},[49,1911,1912],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[83,1914,1916],{"className":85,"code":1915,"language":5,"meta":10,"style":10},"\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",[88,1917,1918,1923,1931,1945,1955,1959,1973,1986,1996,2004,2009,2034,2055,2077,2098,2120,2141,2161,2166],{"__ignoreMap":10},[91,1919,1920],{"class":93,"line":94},[91,1921,1922],{"class":160},"\u002F\u002F案例-电影打分\n",[91,1924,1925,1928],{"class":93,"line":11},[91,1926,1927],{"class":97},"#include",[91,1929,1930],{"class":206},"\u003Ciostream>\n",[91,1932,1933,1936,1939,1943],{"class":93,"line":1157},[91,1934,1935],{"class":97},"using",[91,1937,1938],{"class":97}," namespace",[91,1940,1942],{"class":1941},"sScJk"," std",[91,1944,1268],{"class":101},[91,1946,1947,1949,1952],{"class":93,"line":1172},[91,1948,105],{"class":97},[91,1950,1951],{"class":1941}," main",[91,1953,1954],{"class":101},"()\n",[91,1956,1957],{"class":93,"line":1178},[91,1958,1524],{"class":101},[91,1960,1961,1964,1967,1969,1971],{"class":93,"line":1192},[91,1962,1963],{"class":97},"    int",[91,1965,1966],{"class":101}," score",[91,1968,147],{"class":97},[91,1970,293],{"class":150},[91,1972,1268],{"class":101},[91,1974,1975,1977,1979,1982,1984],{"class":93,"line":1198},[91,1976,1529],{"class":101},[91,1978,1146],{"class":97},[91,1980,1981],{"class":206},"\"电影打分：\"",[91,1983,1146],{"class":97},[91,1985,1169],{"class":101},[91,1987,1988,1991,1993],{"class":93,"line":1289},[91,1989,1990],{"class":101},"    cin",[91,1992,1407],{"class":97},[91,1994,1995],{"class":101},"score;\n",[91,1997,1998,2001],{"class":93,"line":1295},[91,1999,2000],{"class":97},"    switch",[91,2002,2003],{"class":101},"(score)\n",[91,2005,2006],{"class":93,"line":1307},[91,2007,2008],{"class":101},"    {\n",[91,2010,2011,2014,2017,2020,2022,2025,2027,2029,2032],{"class":93,"line":1590},[91,2012,2013],{"class":97},"        case",[91,2015,2016],{"class":150}," 10",[91,2018,2019],{"class":101},":cout",[91,2021,1146],{"class":97},[91,2023,2024],{"class":206},"\"经典\"",[91,2026,1146],{"class":97},[91,2028,1216],{"class":101},[91,2030,2031],{"class":97},"break",[91,2033,1268],{"class":101},[91,2035,2036,2038,2041,2043,2045,2047,2049,2051,2053],{"class":93,"line":1595},[91,2037,2013],{"class":97},[91,2039,2040],{"class":150}," 9",[91,2042,2019],{"class":101},[91,2044,1146],{"class":97},[91,2046,2024],{"class":206},[91,2048,1146],{"class":97},[91,2050,1216],{"class":101},[91,2052,2031],{"class":97},[91,2054,1268],{"class":101},[91,2056,2057,2059,2062,2064,2066,2069,2071,2073,2075],{"class":93,"line":1601},[91,2058,2013],{"class":97},[91,2060,2061],{"class":150}," 8",[91,2063,2019],{"class":101},[91,2065,1146],{"class":97},[91,2067,2068],{"class":206},"\"非常好\"",[91,2070,1146],{"class":97},[91,2072,1216],{"class":101},[91,2074,2031],{"class":97},[91,2076,1268],{"class":101},[91,2078,2079,2081,2084,2086,2088,2090,2092,2094,2096],{"class":93,"line":1606},[91,2080,2013],{"class":97},[91,2082,2083],{"class":150}," 7",[91,2085,2019],{"class":101},[91,2087,1146],{"class":97},[91,2089,2068],{"class":206},[91,2091,1146],{"class":97},[91,2093,1216],{"class":101},[91,2095,2031],{"class":97},[91,2097,1268],{"class":101},[91,2099,2100,2102,2105,2107,2109,2112,2114,2116,2118],{"class":93,"line":1620},[91,2101,2013],{"class":97},[91,2103,2104],{"class":150}," 6",[91,2106,2019],{"class":101},[91,2108,1146],{"class":97},[91,2110,2111],{"class":206},"\"一般\"",[91,2113,1146],{"class":97},[91,2115,1216],{"class":101},[91,2117,2031],{"class":97},[91,2119,1268],{"class":101},[91,2121,2122,2124,2127,2129,2131,2133,2135,2137,2139],{"class":93,"line":1625},[91,2123,2013],{"class":97},[91,2125,2126],{"class":150}," 5",[91,2128,2019],{"class":101},[91,2130,1146],{"class":97},[91,2132,2111],{"class":206},[91,2134,1146],{"class":97},[91,2136,1216],{"class":101},[91,2138,2031],{"class":97},[91,2140,1268],{"class":101},[91,2142,2143,2146,2148,2150,2153,2155,2157,2159],{"class":93,"line":1631},[91,2144,2145],{"class":97},"        default",[91,2147,2019],{"class":101},[91,2149,1146],{"class":97},[91,2151,2152],{"class":206},"\"烂片\"",[91,2154,1146],{"class":97},[91,2156,1216],{"class":101},[91,2158,2031],{"class":97},[91,2160,1268],{"class":101},[91,2162,2163],{"class":93,"line":1652},[91,2164,2165],{"class":101},"    }\n",[91,2167,2168],{"class":93,"line":1657},[91,2169,1543],{"class":101},[38,2171,2172],{},"if和switch区别：",[1109,2174,2175,2178],{},[49,2176,2177],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[49,2179,2180],{},"switch优点：结构清晰，执行效率高",[63,2182,2184],{"id":2183},"_162循环结构","1.6.2循环结构",[46,2186,2187],{},[49,2188,2189],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[83,2191,2193],{"className":85,"code":2192,"language":5,"meta":10,"style":10},"\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",[88,2194,2195,2200,2208,2212,2225,2239,2243,2263,2273,2277,2289],{"__ignoreMap":10},[91,2196,2197],{"class":93,"line":94},[91,2198,2199],{"class":160},"\u002F\u002F打印0-9数字\n",[91,2201,2202,2204,2206],{"class":93,"line":11},[91,2203,105],{"class":97},[91,2205,1951],{"class":1941},[91,2207,1954],{"class":101},[91,2209,2210],{"class":93,"line":1157},[91,2211,1524],{"class":101},[91,2213,2214,2216,2219,2221,2223],{"class":93,"line":1172},[91,2215,1963],{"class":97},[91,2217,2218],{"class":101}," num",[91,2220,147],{"class":97},[91,2222,293],{"class":150},[91,2224,1268],{"class":101},[91,2226,2227,2230,2233,2235,2237],{"class":93,"line":1178},[91,2228,2229],{"class":97},"    while",[91,2231,2232],{"class":101},"(num",[91,2234,1012],{"class":97},[91,2236,548],{"class":150},[91,2238,108],{"class":101},[91,2240,2241],{"class":93,"line":1192},[91,2242,2008],{"class":101},[91,2244,2245,2248,2251,2253,2255,2257,2260],{"class":93,"line":1198},[91,2246,2247],{"class":1941},"       std",[91,2249,2250],{"class":101},"::cout",[91,2252,1146],{"class":97},[91,2254,1643],{"class":101},[91,2256,1146],{"class":97},[91,2258,2259],{"class":1941},"std",[91,2261,2262],{"class":101},"::endl;\n",[91,2264,2265,2268,2271],{"class":93,"line":1289},[91,2266,2267],{"class":101},"        num",[91,2269,2270],{"class":97},"++",[91,2272,1268],{"class":101},[91,2274,2275],{"class":93,"line":1295},[91,2276,2165],{"class":101},[91,2278,2279,2282,2284,2287],{"class":93,"line":1307},[91,2280,2281],{"class":1941},"    system",[91,2283,102],{"class":101},[91,2285,2286],{"class":206},"\"pause\"",[91,2288,108],{"class":101},[91,2290,2291],{"class":93,"line":1590},[91,2292,1543],{"class":101},[38,2294,2295],{},"注意：写好循环条件，避免死循环情况",[83,2297,2299],{"className":85,"code":2298,"language":5,"meta":10,"style":10},"\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",[88,2300,2301,2306,2313,2320,2330,2338,2342,2347,2374,2379,2384,2392,2419,2424,2429,2442,2452,2456,2466,2471,2484,2489,2503,2508,2523,2527,2540,2544,2549,2553,2567,2575,2580,2586,2592,2597],{"__ignoreMap":10},[91,2302,2303],{"class":93,"line":94},[91,2304,2305],{"class":160},"\u002F\u002F循环结构-猜数字\n",[91,2307,2308,2310],{"class":93,"line":11},[91,2309,1927],{"class":97},[91,2311,2312],{"class":206}," \u003Ciostream>\n",[91,2314,2315,2317],{"class":93,"line":1157},[91,2316,1927],{"class":97},[91,2318,2319],{"class":206}," \u003Cctime>\n",[91,2321,2322,2324,2326,2328],{"class":93,"line":1172},[91,2323,1935],{"class":97},[91,2325,1938],{"class":97},[91,2327,1942],{"class":1941},[91,2329,1268],{"class":101},[91,2331,2332,2334,2336],{"class":93,"line":1178},[91,2333,105],{"class":97},[91,2335,1951],{"class":1941},[91,2337,1954],{"class":101},[91,2339,2340],{"class":93,"line":1192},[91,2341,1524],{"class":101},[91,2343,2344],{"class":93,"line":1198},[91,2345,2346],{"class":160},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[91,2348,2349,2352,2355,2358,2361,2363,2366,2368,2371],{"class":93,"line":1289},[91,2350,2351],{"class":1941},"    srand",[91,2353,2354],{"class":101},"((",[91,2356,2357],{"class":97},"unsigned",[91,2359,2360],{"class":97}," int",[91,2362,531],{"class":101},[91,2364,2365],{"class":1941},"time",[91,2367,102],{"class":101},[91,2369,2370],{"class":150},"NULL",[91,2372,2373],{"class":101},"));\n",[91,2375,2376],{"class":93,"line":1295},[91,2377,2378],{"emptyLinePlaceholder":17},"\n",[91,2380,2381],{"class":93,"line":1307},[91,2382,2383],{"class":160},"    \u002F\u002F1.系统生成随机数\n",[91,2385,2386,2389],{"class":93,"line":1590},[91,2387,2388],{"class":160},"    \u002F\u002Frand()%100",[91,2390,2391],{"class":160}," \u002F\u002F生成0-99的随机数\n",[91,2393,2394,2396,2398,2400,2403,2406,2408,2410,2412,2414,2416],{"class":93,"line":1595},[91,2395,1963],{"class":97},[91,2397,2218],{"class":101},[91,2399,147],{"class":97},[91,2401,2402],{"class":1941},"rand",[91,2404,2405],{"class":101},"()",[91,2407,430],{"class":97},[91,2409,413],{"class":150},[91,2411,583],{"class":97},[91,2413,319],{"class":150},[91,2415,157],{"class":101},[91,2417,2418],{"class":160}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[91,2420,2421],{"class":93,"line":1601},[91,2422,2423],{"class":160},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[91,2425,2426],{"class":93,"line":1606},[91,2427,2428],{"class":160},"    \u002F\u002F2.玩家猜测\n",[91,2430,2431,2433,2436,2438,2440],{"class":93,"line":1620},[91,2432,1963],{"class":97},[91,2434,2435],{"class":101}," val",[91,2437,147],{"class":97},[91,2439,293],{"class":150},[91,2441,1268],{"class":101},[91,2443,2444,2446,2448,2450],{"class":93,"line":1625},[91,2445,2229],{"class":97},[91,2447,1636],{"class":101},[91,2449,319],{"class":150},[91,2451,108],{"class":101},[91,2453,2454],{"class":93,"line":1631},[91,2455,2008],{"class":101},[91,2457,2458,2461,2463],{"class":93,"line":1652},[91,2459,2460],{"class":101},"        cin",[91,2462,1407],{"class":97},[91,2464,2465],{"class":101},"val;\n",[91,2467,2468],{"class":93,"line":1657},[91,2469,2470],{"class":160},"        \u002F\u002F3.判断玩家猜测\n",[91,2472,2473,2476,2479,2481],{"class":93,"line":1671},[91,2474,2475],{"class":97},"        if",[91,2477,2478],{"class":101},"(val",[91,2480,1012],{"class":97},[91,2482,2483],{"class":101},"num) \n",[91,2485,2486],{"class":93,"line":1676},[91,2487,2488],{"class":101},"        {\n",[91,2490,2491,2494,2496,2499,2501],{"class":93,"line":1705},[91,2492,2493],{"class":101},"            cout",[91,2495,1146],{"class":97},[91,2497,2498],{"class":206},"\"猜小了！\"",[91,2500,1146],{"class":97},[91,2502,1169],{"class":101},[91,2504,2505],{"class":93,"line":1710},[91,2506,2507],{"class":101},"        }\n",[91,2509,2510,2513,2515,2518,2520],{"class":93,"line":1727},[91,2511,2512],{"class":97},"        else",[91,2514,1682],{"class":97},[91,2516,2517],{"class":101}," (val",[91,2519,1062],{"class":97},[91,2521,2522],{"class":101},"num)\n",[91,2524,2525],{"class":93,"line":1732},[91,2526,2488],{"class":101},[91,2528,2529,2531,2533,2536,2538],{"class":93,"line":1737},[91,2530,2493],{"class":101},[91,2532,1146],{"class":97},[91,2534,2535],{"class":206},"\"猜大了！\"",[91,2537,1146],{"class":97},[91,2539,1169],{"class":101},[91,2541,2542],{"class":93,"line":1742},[91,2543,2507],{"class":101},[91,2545,2546],{"class":93,"line":1756},[91,2547,2548],{"class":97},"        else\n",[91,2550,2551],{"class":93,"line":1761},[91,2552,2488],{"class":101},[91,2554,2556,2558,2560,2563,2565],{"class":93,"line":2555},30,[91,2557,2493],{"class":101},[91,2559,1146],{"class":97},[91,2561,2562],{"class":206},"\"猜对了！\"",[91,2564,1146],{"class":97},[91,2566,1169],{"class":101},[91,2568,2570,2573],{"class":93,"line":2569},31,[91,2571,2572],{"class":97},"            break",[91,2574,1268],{"class":101},[91,2576,2578],{"class":93,"line":2577},32,[91,2579,2507],{"class":101},[91,2581,2583],{"class":93,"line":2582},33,[91,2584,2585],{"class":160},"        \u002F\u002F猜对 退出游戏\n",[91,2587,2589],{"class":93,"line":2588},34,[91,2590,2591],{"class":160},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[91,2593,2595],{"class":93,"line":2594},35,[91,2596,2165],{"class":101},[91,2598,2600],{"class":93,"line":2599},36,[91,2601,1543],{"class":101},[46,2603,2604],{"start":11},[49,2605,2606,2607,2610],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[251,2608,2609],{},"do...while会先执行一次循环语句","，在判断循环语句",[83,2612,2614],{"className":85,"code":2613,"language":5,"meta":10,"style":10},"\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",[88,2615,2616,2621,2629,2633,2645,2653,2657,2674,2681,2685,2698,2708],{"__ignoreMap":10},[91,2617,2618],{"class":93,"line":94},[91,2619,2620],{"class":160},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[91,2622,2623,2625,2627],{"class":93,"line":11},[91,2624,105],{"class":97},[91,2626,1951],{"class":1941},[91,2628,1954],{"class":101},[91,2630,2631],{"class":93,"line":1157},[91,2632,1524],{"class":101},[91,2634,2635,2637,2639,2641,2643],{"class":93,"line":1172},[91,2636,1963],{"class":97},[91,2638,2218],{"class":101},[91,2640,147],{"class":97},[91,2642,293],{"class":150},[91,2644,1268],{"class":101},[91,2646,2647,2650],{"class":93,"line":1178},[91,2648,2649],{"class":97},"    do",[91,2651,2652],{"class":101}," \n",[91,2654,2655],{"class":93,"line":1192},[91,2656,2008],{"class":101},[91,2658,2659,2662,2664,2666,2668,2670,2672],{"class":93,"line":1198},[91,2660,2661],{"class":1941},"        std",[91,2663,2250],{"class":101},[91,2665,1146],{"class":97},[91,2667,1643],{"class":101},[91,2669,1146],{"class":97},[91,2671,2259],{"class":1941},[91,2673,2262],{"class":101},[91,2675,2676,2678],{"class":93,"line":1289},[91,2677,2267],{"class":101},[91,2679,2680],{"class":97},"++\n",[91,2682,2683],{"class":93,"line":1295},[91,2684,2165],{"class":101},[91,2686,2687,2689,2691,2693,2695],{"class":93,"line":1307},[91,2688,2229],{"class":97},[91,2690,2232],{"class":101},[91,2692,1012],{"class":97},[91,2694,548],{"class":150},[91,2696,2697],{"class":101},");\n",[91,2699,2700,2702,2704,2706],{"class":93,"line":1590},[91,2701,2281],{"class":1941},[91,2703,102],{"class":101},[91,2705,2286],{"class":206},[91,2707,2697],{"class":101},[91,2709,2710],{"class":93,"line":1595},[91,2711,1543],{"class":101},[38,2713,2714],{},"案例-水仙花数",[38,2716,2717],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[38,2719,2720],{},"例如：1^3+5^3+3^3=153",[38,2722,2723],{},"请用do...while语句，求出所有3位数的水仙花数",[83,2725,2727],{"className":85,"code":2726,"language":5,"meta":10,"style":10},"#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",[88,2728,2729,2735,2745,2753,2757,2762,2774,2780,2784,2789,2805,2821,2837,2852,2871,2886,2934,2938,2950,2954,2962,2966,2980],{"__ignoreMap":10},[91,2730,2731,2733],{"class":93,"line":94},[91,2732,1927],{"class":97},[91,2734,2312],{"class":206},[91,2736,2737,2739,2741,2743],{"class":93,"line":11},[91,2738,1935],{"class":97},[91,2740,1938],{"class":97},[91,2742,1942],{"class":1941},[91,2744,1268],{"class":101},[91,2746,2747,2749,2751],{"class":93,"line":1157},[91,2748,105],{"class":97},[91,2750,1951],{"class":1941},[91,2752,1954],{"class":101},[91,2754,2755],{"class":93,"line":1172},[91,2756,1524],{"class":101},[91,2758,2759],{"class":93,"line":1178},[91,2760,2761],{"class":160},"    \u002F\u002F1.先打印所有三位数字\n",[91,2763,2764,2766,2768,2770,2772],{"class":93,"line":1192},[91,2765,1963],{"class":97},[91,2767,2218],{"class":101},[91,2769,147],{"class":97},[91,2771,413],{"class":150},[91,2773,1268],{"class":101},[91,2775,2776,2778],{"class":93,"line":1198},[91,2777,2649],{"class":97},[91,2779,2652],{"class":101},[91,2781,2782],{"class":93,"line":1289},[91,2783,2008],{"class":101},[91,2785,2786],{"class":93,"line":1295},[91,2787,2788],{"class":160},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[91,2790,2791,2794,2796,2798,2800,2802],{"class":93,"line":1307},[91,2792,2793],{"class":97},"        int",[91,2795,1376],{"class":101},[91,2797,147],{"class":97},[91,2799,293],{"class":150},[91,2801,157],{"class":101},[91,2803,2804],{"class":160}," \u002F\u002F个位\n",[91,2806,2807,2809,2812,2814,2816,2818],{"class":93,"line":1590},[91,2808,2793],{"class":97},[91,2810,2811],{"class":101}," b",[91,2813,147],{"class":97},[91,2815,293],{"class":150},[91,2817,157],{"class":101},[91,2819,2820],{"class":160}," \u002F\u002F十位\n",[91,2822,2823,2825,2828,2830,2832,2834],{"class":93,"line":1595},[91,2824,2793],{"class":97},[91,2826,2827],{"class":101}," c",[91,2829,147],{"class":97},[91,2831,293],{"class":150},[91,2833,157],{"class":101},[91,2835,2836],{"class":160}," \u002F\u002F百位\n",[91,2838,2839,2842,2844,2846,2848,2850],{"class":93,"line":1601},[91,2840,2841],{"class":101},"        a",[91,2843,147],{"class":97},[91,2845,1643],{"class":101},[91,2847,430],{"class":97},[91,2849,548],{"class":150},[91,2851,1268],{"class":101},[91,2853,2854,2857,2859,2861,2863,2865,2867,2869],{"class":93,"line":1606},[91,2855,2856],{"class":101},"        b",[91,2858,147],{"class":97},[91,2860,1643],{"class":101},[91,2862,686],{"class":97},[91,2864,548],{"class":150},[91,2866,430],{"class":97},[91,2868,548],{"class":150},[91,2870,1268],{"class":101},[91,2872,2873,2876,2878,2880,2882,2884],{"class":93,"line":1620},[91,2874,2875],{"class":101},"        c",[91,2877,147],{"class":97},[91,2879,1643],{"class":101},[91,2881,686],{"class":97},[91,2883,413],{"class":150},[91,2885,1268],{"class":101},[91,2887,2888,2890,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2925,2928,2931],{"class":93,"line":1625},[91,2889,2475],{"class":97},[91,2891,1819],{"class":101},[91,2893,557],{"class":97},[91,2895,340],{"class":101},[91,2897,557],{"class":97},[91,2899,340],{"class":101},[91,2901,583],{"class":97},[91,2903,365],{"class":101},[91,2905,557],{"class":97},[91,2907,365],{"class":101},[91,2909,557],{"class":97},[91,2911,365],{"class":101},[91,2913,583],{"class":97},[91,2915,390],{"class":101},[91,2917,557],{"class":97},[91,2919,390],{"class":101},[91,2921,557],{"class":97},[91,2923,2924],{"class":101},"c ",[91,2926,2927],{"class":97},"==",[91,2929,2930],{"class":101}," num)",[91,2932,2933],{"class":160}," \u002F\u002F如果是水仙花数，才打印\n",[91,2935,2936],{"class":93,"line":1631},[91,2937,2488],{"class":101},[91,2939,2940,2942,2944,2946,2948],{"class":93,"line":1652},[91,2941,2493],{"class":101},[91,2943,1146],{"class":97},[91,2945,1643],{"class":101},[91,2947,1146],{"class":97},[91,2949,1169],{"class":101},[91,2951,2952],{"class":93,"line":1657},[91,2953,2507],{"class":101},[91,2955,2956,2958,2960],{"class":93,"line":1671},[91,2957,2267],{"class":101},[91,2959,2270],{"class":97},[91,2961,1268],{"class":101},[91,2963,2964],{"class":93,"line":1676},[91,2965,2165],{"class":101},[91,2967,2968,2970,2973,2975,2978],{"class":93,"line":1705},[91,2969,2229],{"class":97},[91,2971,2972],{"class":101}," (num ",[91,2974,1012],{"class":97},[91,2976,2977],{"class":150}," 1000",[91,2979,2697],{"class":101},[91,2981,2982],{"class":93,"line":1710},[91,2983,1543],{"class":101},[46,2985,2986],{"start":1157},[49,2987,2988],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[83,2990,2992],{"className":85,"code":2991,"language":5,"meta":10,"style":10},"\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",[88,2993,2994,2999,3028,3032,3044,3048,3053,3064,3071,3075,3089,3093,3100,3104,3116,3125],{"__ignoreMap":10},[91,2995,2996],{"class":93,"line":94},[91,2997,2998],{"class":160},"\u002F\u002F从数字0-9打印\n",[91,3000,3001,3004,3006,3008,3011,3013,3015,3018,3020,3022,3024,3026],{"class":93,"line":11},[91,3002,3003],{"class":97},"for",[91,3005,102],{"class":101},[91,3007,105],{"class":97},[91,3009,3010],{"class":101}," i",[91,3012,147],{"class":97},[91,3014,293],{"class":150},[91,3016,3017],{"class":101},";i",[91,3019,1012],{"class":97},[91,3021,548],{"class":150},[91,3023,3017],{"class":101},[91,3025,2270],{"class":97},[91,3027,108],{"class":101},[91,3029,3030],{"class":93,"line":1157},[91,3031,1524],{"class":101},[91,3033,3034,3036,3038,3040,3042],{"class":93,"line":1172},[91,3035,1529],{"class":101},[91,3037,1146],{"class":97},[91,3039,543],{"class":101},[91,3041,1146],{"class":97},[91,3043,1169],{"class":101},[91,3045,3046],{"class":93,"line":1178},[91,3047,1543],{"class":101},[91,3049,3050],{"class":93,"line":1192},[91,3051,3052],{"class":160},"\u002F\u002F上式可以进行拆分\n",[91,3054,3055,3057,3059,3061],{"class":93,"line":1198},[91,3056,105],{"class":97},[91,3058,3010],{"class":101},[91,3060,147],{"class":97},[91,3062,3063],{"class":150},"0\n",[91,3065,3066,3068],{"class":93,"line":1289},[91,3067,3003],{"class":97},[91,3069,3070],{"class":101},"(;;;)\n",[91,3072,3073],{"class":93,"line":1295},[91,3074,1524],{"class":101},[91,3076,3077,3080,3083,3085,3087],{"class":93,"line":1307},[91,3078,3079],{"class":97},"    if",[91,3081,3082],{"class":101},"(i",[91,3084,1688],{"class":97},[91,3086,548],{"class":150},[91,3088,108],{"class":101},[91,3090,3091],{"class":93,"line":1590},[91,3092,2008],{"class":101},[91,3094,3095,3098],{"class":93,"line":1595},[91,3096,3097],{"class":97},"        break",[91,3099,1268],{"class":101},[91,3101,3102],{"class":93,"line":1601},[91,3103,2165],{"class":101},[91,3105,3106,3108,3110,3112,3114],{"class":93,"line":1606},[91,3107,1529],{"class":101},[91,3109,1146],{"class":97},[91,3111,543],{"class":101},[91,3113,1146],{"class":97},[91,3115,1169],{"class":101},[91,3117,3118,3121,3123],{"class":93,"line":1620},[91,3119,3120],{"class":101},"    i",[91,3122,2270],{"class":97},[91,3124,1268],{"class":101},[91,3126,3127],{"class":93,"line":1625},[91,3128,1543],{"class":101},[38,3130,3131],{},"小练习",[83,3133,3135],{"className":85,"code":3134,"language":5,"meta":10,"style":10},"#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",[88,3136,3137,3143,3153,3161,3165,3170,3175,3203,3207,3212,3217,3258,3262,3275,3279,3283,3287,3299,3303,3307],{"__ignoreMap":10},[91,3138,3139,3141],{"class":93,"line":94},[91,3140,1927],{"class":97},[91,3142,1930],{"class":206},[91,3144,3145,3147,3149,3151],{"class":93,"line":11},[91,3146,1935],{"class":97},[91,3148,1938],{"class":97},[91,3150,1942],{"class":1941},[91,3152,1268],{"class":101},[91,3154,3155,3157,3159],{"class":93,"line":1157},[91,3156,105],{"class":97},[91,3158,1951],{"class":1941},[91,3160,1954],{"class":101},[91,3162,3163],{"class":93,"line":1172},[91,3164,1524],{"class":101},[91,3166,3167],{"class":93,"line":1178},[91,3168,3169],{"class":160},"    \u002F\u002F敲桌子案例\n",[91,3171,3172],{"class":93,"line":1192},[91,3173,3174],{"class":160},"    \u002F\u002F1.先输出1-100的数字\n",[91,3176,3177,3180,3182,3184,3186,3188,3190,3193,3195,3197,3199,3201],{"class":93,"line":1198},[91,3178,3179],{"class":97},"    for",[91,3181,102],{"class":101},[91,3183,105],{"class":97},[91,3185,3010],{"class":101},[91,3187,147],{"class":97},[91,3189,319],{"class":150},[91,3191,3192],{"class":101},"; i",[91,3194,1566],{"class":97},[91,3196,413],{"class":150},[91,3198,3192],{"class":101},[91,3200,2270],{"class":97},[91,3202,108],{"class":101},[91,3204,3205],{"class":93,"line":1289},[91,3206,2008],{"class":101},[91,3208,3209],{"class":93,"line":1295},[91,3210,3211],{"class":160},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[91,3213,3214],{"class":93,"line":1307},[91,3215,3216],{"class":160},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[91,3218,3219,3221,3223,3225,3227,3229,3231,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256],{"class":93,"line":1590},[91,3220,2475],{"class":97},[91,3222,3082],{"class":101},[91,3224,430],{"class":97},[91,3226,471],{"class":150},[91,3228,2927],{"class":97},[91,3230,293],{"class":150},[91,3232,3233],{"class":97}," ||",[91,3235,3010],{"class":101},[91,3237,430],{"class":97},[91,3239,548],{"class":150},[91,3241,2927],{"class":97},[91,3243,471],{"class":150},[91,3245,3233],{"class":97},[91,3247,3010],{"class":101},[91,3249,686],{"class":97},[91,3251,548],{"class":150},[91,3253,2927],{"class":97},[91,3255,471],{"class":150},[91,3257,108],{"class":101},[91,3259,3260],{"class":93,"line":1595},[91,3261,2488],{"class":101},[91,3263,3264,3266,3268,3271,3273],{"class":93,"line":1601},[91,3265,2493],{"class":101},[91,3267,1146],{"class":97},[91,3269,3270],{"class":206},"\"敲桌子\"",[91,3272,1146],{"class":97},[91,3274,1169],{"class":101},[91,3276,3277],{"class":93,"line":1606},[91,3278,2507],{"class":101},[91,3280,3281],{"class":93,"line":1620},[91,3282,2548],{"class":97},[91,3284,3285],{"class":93,"line":1625},[91,3286,2488],{"class":101},[91,3288,3289,3291,3293,3295,3297],{"class":93,"line":1631},[91,3290,2493],{"class":101},[91,3292,1146],{"class":97},[91,3294,543],{"class":101},[91,3296,1146],{"class":97},[91,3298,1169],{"class":101},[91,3300,3301],{"class":93,"line":1652},[91,3302,2507],{"class":101},[91,3304,3305],{"class":93,"line":1657},[91,3306,2165],{"class":101},[91,3308,3309],{"class":93,"line":1671},[91,3310,1543],{"class":101},[38,3312,3313],{},"嵌套实现星图",[83,3315,3317],{"className":85,"code":3316,"language":5,"meta":10,"style":10},"#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",[88,3318,3319,3325,3335,3343,3347,3373,3377,3406,3410,3421,3425,3434,3438],{"__ignoreMap":10},[91,3320,3321,3323],{"class":93,"line":94},[91,3322,1927],{"class":97},[91,3324,1930],{"class":206},[91,3326,3327,3329,3331,3333],{"class":93,"line":11},[91,3328,1935],{"class":97},[91,3330,1938],{"class":97},[91,3332,1942],{"class":1941},[91,3334,1268],{"class":101},[91,3336,3337,3339,3341],{"class":93,"line":1157},[91,3338,105],{"class":97},[91,3340,1951],{"class":1941},[91,3342,1954],{"class":101},[91,3344,3345],{"class":93,"line":1172},[91,3346,1524],{"class":101},[91,3348,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371],{"class":93,"line":1178},[91,3350,3179],{"class":97},[91,3352,1636],{"class":101},[91,3354,105],{"class":97},[91,3356,3010],{"class":101},[91,3358,147],{"class":97},[91,3360,293],{"class":150},[91,3362,3017],{"class":101},[91,3364,1012],{"class":97},[91,3366,548],{"class":150},[91,3368,3017],{"class":101},[91,3370,2270],{"class":97},[91,3372,108],{"class":101},[91,3374,3375],{"class":93,"line":1192},[91,3376,2008],{"class":101},[91,3378,3379,3382,3384,3386,3389,3391,3393,3396,3398,3400,3402,3404],{"class":93,"line":1198},[91,3380,3381],{"class":97},"        for",[91,3383,1636],{"class":101},[91,3385,105],{"class":97},[91,3387,3388],{"class":101}," j",[91,3390,147],{"class":97},[91,3392,293],{"class":150},[91,3394,3395],{"class":101},";j",[91,3397,1012],{"class":97},[91,3399,548],{"class":150},[91,3401,3395],{"class":101},[91,3403,2270],{"class":97},[91,3405,108],{"class":101},[91,3407,3408],{"class":93,"line":1289},[91,3409,2488],{"class":101},[91,3411,3412,3414,3416,3419],{"class":93,"line":1295},[91,3413,2493],{"class":101},[91,3415,1146],{"class":97},[91,3417,3418],{"class":206},"\"*\"",[91,3420,1268],{"class":101},[91,3422,3423],{"class":93,"line":1307},[91,3424,2507],{"class":101},[91,3426,3427,3430,3432],{"class":93,"line":1590},[91,3428,3429],{"class":101},"        cout",[91,3431,1146],{"class":97},[91,3433,1169],{"class":101},[91,3435,3436],{"class":93,"line":1595},[91,3437,2165],{"class":101},[91,3439,3440],{"class":93,"line":1601},[91,3441,1543],{"class":101},[38,3443,3444],{},"乘法口诀表",[83,3446,3448],{"className":85,"code":3447,"language":5,"meta":10,"style":10},"#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",[88,3449,3450,3456,3466,3474,3478,3504,3508,3533,3537,3577,3581,3589,3593],{"__ignoreMap":10},[91,3451,3452,3454],{"class":93,"line":94},[91,3453,1927],{"class":97},[91,3455,2312],{"class":206},[91,3457,3458,3460,3462,3464],{"class":93,"line":11},[91,3459,1935],{"class":97},[91,3461,1938],{"class":97},[91,3463,1942],{"class":1941},[91,3465,1268],{"class":101},[91,3467,3468,3470,3472],{"class":93,"line":1157},[91,3469,105],{"class":97},[91,3471,1951],{"class":1941},[91,3473,1954],{"class":101},[91,3475,3476],{"class":93,"line":1172},[91,3477,1524],{"class":101},[91,3479,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502],{"class":93,"line":1178},[91,3481,3179],{"class":97},[91,3483,102],{"class":101},[91,3485,105],{"class":97},[91,3487,3010],{"class":101},[91,3489,147],{"class":97},[91,3491,319],{"class":150},[91,3493,3017],{"class":101},[91,3495,1012],{"class":97},[91,3497,548],{"class":150},[91,3499,3017],{"class":101},[91,3501,2270],{"class":97},[91,3503,108],{"class":101},[91,3505,3506],{"class":93,"line":1192},[91,3507,2008],{"class":101},[91,3509,3510,3512,3514,3516,3518,3520,3522,3524,3526,3529,3531],{"class":93,"line":1198},[91,3511,3381],{"class":97},[91,3513,102],{"class":101},[91,3515,105],{"class":97},[91,3517,3388],{"class":101},[91,3519,147],{"class":97},[91,3521,319],{"class":150},[91,3523,3395],{"class":101},[91,3525,1566],{"class":97},[91,3527,3528],{"class":101},"i;j",[91,3530,2270],{"class":97},[91,3532,108],{"class":101},[91,3534,3535],{"class":93,"line":1289},[91,3536,2488],{"class":101},[91,3538,3539,3541,3543,3545,3547,3549,3551,3553,3555,3558,3560,3562,3564,3566,3568,3571,3573,3575],{"class":93,"line":1295},[91,3540,2493],{"class":101},[91,3542,1146],{"class":97},[91,3544,569],{"class":101},[91,3546,1146],{"class":97},[91,3548,3418],{"class":206},[91,3550,1146],{"class":97},[91,3552,543],{"class":101},[91,3554,1146],{"class":97},[91,3556,3557],{"class":206},"\"=\"",[91,3559,1146],{"class":97},[91,3561,543],{"class":101},[91,3563,557],{"class":97},[91,3565,569],{"class":101},[91,3567,1146],{"class":97},[91,3569,3570],{"class":206},"'",[91,3572,1208],{"class":150},[91,3574,3570],{"class":206},[91,3576,1268],{"class":101},[91,3578,3579],{"class":93,"line":1307},[91,3580,2507],{"class":101},[91,3582,3583,3585,3587],{"class":93,"line":1590},[91,3584,3429],{"class":101},[91,3586,1146],{"class":97},[91,3588,1169],{"class":101},[91,3590,3591],{"class":93,"line":1595},[91,3592,2165],{"class":101},[91,3594,3595],{"class":93,"line":1601},[91,3596,1543],{"class":101},[63,3598,3600],{"id":3599},"_163跳出语句","1.6.3跳出语句",[46,3602,3603],{},[49,3604,3605],{},"break语句\n作用：用于跳出选择结构或者循环结构",[38,3607,3608],{},"break使用时机：",[1109,3610,3611,3614,3617],{},[49,3612,3613],{},"出现在switch条件语句中，作用是终止case并跳出switch",[49,3615,3616],{},"出现在循环结构中，作用是跳出当前的循环结构",[49,3618,3619],{},"出现在嵌套循环中，跳出最近的内层循环语句",[46,3621,3622,3625],{"start":11},[49,3623,3624],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[49,3626,3627],{},"goto语句\n语法：goto 标记;",[38,3629,3630],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[83,3632,3634],{"className":85,"code":3633,"language":5,"meta":10,"style":10},"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",[88,3635,3636,3644,3648,3661,3671,3684,3697,3710,3718,3734],{"__ignoreMap":10},[91,3637,3638,3640,3642],{"class":93,"line":94},[91,3639,105],{"class":97},[91,3641,1951],{"class":1941},[91,3643,1954],{"class":101},[91,3645,3646],{"class":93,"line":11},[91,3647,1524],{"class":101},[91,3649,3650,3652,3654,3657,3659],{"class":93,"line":1157},[91,3651,1529],{"class":101},[91,3653,1146],{"class":97},[91,3655,3656],{"class":206},"\"1\"",[91,3658,1146],{"class":97},[91,3660,1169],{"class":101},[91,3662,3663,3666,3669],{"class":93,"line":1172},[91,3664,3665],{"class":97},"    goto",[91,3667,3668],{"class":1941}," FLAG",[91,3670,1268],{"class":101},[91,3672,3673,3675,3677,3680,3682],{"class":93,"line":1178},[91,3674,1529],{"class":101},[91,3676,1146],{"class":97},[91,3678,3679],{"class":206},"\"2\"",[91,3681,1146],{"class":97},[91,3683,1169],{"class":101},[91,3685,3686,3688,3690,3693,3695],{"class":93,"line":1192},[91,3687,1529],{"class":101},[91,3689,1146],{"class":97},[91,3691,3692],{"class":206},"\"3\"",[91,3694,1146],{"class":97},[91,3696,1169],{"class":101},[91,3698,3699,3701,3703,3706,3708],{"class":93,"line":1198},[91,3700,1529],{"class":101},[91,3702,1146],{"class":97},[91,3704,3705],{"class":206},"\"4\"",[91,3707,1146],{"class":97},[91,3709,1169],{"class":101},[91,3711,3712,3715],{"class":93,"line":1289},[91,3713,3714],{"class":1941},"    FLAG",[91,3716,3717],{"class":101},":\n",[91,3719,3720,3722,3724,3727,3729,3731],{"class":93,"line":1295},[91,3721,1529],{"class":101},[91,3723,1146],{"class":97},[91,3725,3726],{"class":206},"\"5\"",[91,3728,1146],{"class":97},[91,3730,1216],{"class":101},[91,3732,3733],{"class":160},"\u002F\u002F跳过了2,3,4,直接到5\n",[91,3735,3736],{"class":93,"line":1307},[91,3737,1543],{"class":101},[33,3739,3741],{"id":3740},"_17数组","1.7数组",[63,3743,3745],{"id":3744},"_171一维数组","1.7.1一维数组",[46,3747,3748],{},[49,3749,3750],{},"一维数组定义方式",[239,3752,3753,3763],{},[242,3754,3755],{},[245,3756,3757,3760],{},[248,3758,3759],{},"方式",[248,3761,3762],{},"注意事项",[286,3764,3765,3779,3789],{},[245,3766,3767,3773],{},[291,3768,3769,3770,157],{},"数据类型 数组名",[91,3771,3772],{},"数组长度",[291,3774,3775,3776,3778],{},"这种方式是先定义再arr",[91,3777,543],{},"赋值",[245,3780,3781,3786],{},[291,3782,3769,3783,3785],{},[91,3784,3772],{},"={值1,值2....};",[291,3787,3788],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[245,3790,3791,3795],{},[291,3792,3769,3793,3785],{},[91,3794],{},[291,3796,3797,3798,3800],{},"int arr",[91,3799],{},";这是不正确的，按照这样的方式定义必须有初始长度",[46,3802,3803],{"start":11},[49,3804,3805],{},"一维数组数组名\n用途：",[1109,3807,3808],{},[49,3809,3810],{},"1.可以统计整个数组在内存中的长度：",[83,3812,3814],{"className":85,"code":3813,"language":5,"meta":10,"style":10},"sizeof(arr);\nsizeof(arr[0]);\n",[88,3815,3816,3823],{"__ignoreMap":10},[91,3817,3818,3820],{"class":93,"line":94},[91,3819,98],{"class":97},[91,3821,3822],{"class":101},"(arr);\n",[91,3824,3825,3827,3830,3832],{"class":93,"line":11},[91,3826,98],{"class":97},[91,3828,3829],{"class":101},"(arr[",[91,3831,293],{"class":150},[91,3833,3834],{"class":101},"]);\n",[1109,3836,3837],{},[49,3838,3839],{},"2.可以获取数组在内存中的首地址:",[83,3841,3843],{"className":85,"code":3842,"language":5,"meta":10,"style":10},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[88,3844,3845,3850,3863,3868],{"__ignoreMap":10},[91,3846,3847],{"class":93,"line":94},[91,3848,3849],{"class":160},"\u002F\u002F查看16进制的首地址\n",[91,3851,3852,3854,3856,3859,3861],{"class":93,"line":11},[91,3853,1347],{"class":101},[91,3855,1146],{"class":97},[91,3857,3858],{"class":101},"arr",[91,3860,1146],{"class":97},[91,3862,1169],{"class":101},[91,3864,3865],{"class":93,"line":1157},[91,3866,3867],{"class":160},"\u002F\u002F看10进制数\n",[91,3869,3870,3872,3874,3876,3878,3880,3882,3885,3887,3889,3891],{"class":93,"line":1172},[91,3871,1347],{"class":101},[91,3873,1146],{"class":97},[91,3875,102],{"class":101},[91,3877,105],{"class":97},[91,3879,531],{"class":101},[91,3881,455],{"class":97},[91,3883,3884],{"class":101},"arr[",[91,3886,293],{"class":150},[91,3888,1042],{"class":101},[91,3890,1146],{"class":97},[91,3892,1169],{"class":101},[38,3894,3895],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1109,3897,3898],{},[49,3899,3900],{},"1️⃣五只小猪称体重",[83,3902,3904],{"className":85,"code":3903,"language":5,"meta":10,"style":10},"#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",[88,3905,3906,3912,3922,3930,3934,3974,3987,4013,4017,4029,4033,4043,4047,4051,4064,4074],{"__ignoreMap":10},[91,3907,3908,3910],{"class":93,"line":94},[91,3909,1927],{"class":97},[91,3911,1930],{"class":206},[91,3913,3914,3916,3918,3920],{"class":93,"line":11},[91,3915,1935],{"class":97},[91,3917,1938],{"class":97},[91,3919,1942],{"class":1941},[91,3921,1268],{"class":101},[91,3923,3924,3926,3928],{"class":93,"line":1157},[91,3925,105],{"class":97},[91,3927,1951],{"class":1941},[91,3929,1954],{"class":101},[91,3931,3932],{"class":93,"line":1172},[91,3933,1524],{"class":101},[91,3935,3936,3938,3941,3943,3945,3947,3949,3952,3954,3957,3959,3961,3963,3966,3968,3971],{"class":93,"line":1178},[91,3937,1963],{"class":97},[91,3939,3940],{"class":101}," arr[",[91,3942,421],{"class":150},[91,3944,1042],{"class":101},[91,3946,147],{"class":97},[91,3948,998],{"class":101},[91,3950,3951],{"class":150},"300",[91,3953,480],{"class":101},[91,3955,3956],{"class":150},"350",[91,3958,480],{"class":101},[91,3960,1700],{"class":150},[91,3962,480],{"class":101},[91,3964,3965],{"class":150},"400",[91,3967,480],{"class":101},[91,3969,3970],{"class":150},"250",[91,3972,3973],{"class":101},"};\n",[91,3975,3976,3978,3981,3983,3985],{"class":93,"line":1192},[91,3977,1963],{"class":97},[91,3979,3980],{"class":101}," tmp",[91,3982,147],{"class":97},[91,3984,293],{"class":150},[91,3986,1268],{"class":101},[91,3988,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011],{"class":93,"line":1198},[91,3990,3179],{"class":97},[91,3992,1636],{"class":101},[91,3994,105],{"class":97},[91,3996,3010],{"class":101},[91,3998,147],{"class":97},[91,4000,293],{"class":150},[91,4002,3017],{"class":101},[91,4004,1012],{"class":97},[91,4006,421],{"class":150},[91,4008,3017],{"class":101},[91,4010,2270],{"class":97},[91,4012,108],{"class":101},[91,4014,4015],{"class":93,"line":1289},[91,4016,2008],{"class":101},[91,4018,4019,4021,4024,4026],{"class":93,"line":1295},[91,4020,2475],{"class":97},[91,4022,4023],{"class":101},"(tmp",[91,4025,1012],{"class":97},[91,4027,4028],{"class":101},"arr[i])\n",[91,4030,4031],{"class":93,"line":1307},[91,4032,2488],{"class":101},[91,4034,4035,4038,4040],{"class":93,"line":1590},[91,4036,4037],{"class":101},"            tmp",[91,4039,147],{"class":97},[91,4041,4042],{"class":101},"arr[i];\n",[91,4044,4045],{"class":93,"line":1595},[91,4046,2507],{"class":101},[91,4048,4049],{"class":93,"line":1601},[91,4050,2165],{"class":101},[91,4052,4053,4055,4057,4060,4062],{"class":93,"line":1606},[91,4054,1529],{"class":101},[91,4056,1146],{"class":97},[91,4058,4059],{"class":101},"tmp",[91,4061,1146],{"class":97},[91,4063,1169],{"class":101},[91,4065,4066,4069,4072],{"class":93,"line":1620},[91,4067,4068],{"class":97},"    return",[91,4070,4071],{"class":150}," 0",[91,4073,1268],{"class":101},[91,4075,4076],{"class":93,"line":1625},[91,4077,1543],{"class":101},[1109,4079,4080],{},[49,4081,4082],{},"2️⃣数组元素逆置",[83,4084,4086],{"className":85,"code":4085,"language":5,"meta":10,"style":10},"\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",[88,4087,4088,4093,4099,4109,4117,4121,4156,4172,4204,4217,4222,4227,4239,4249,4259,4264,4273,4283,4288,4293,4320,4324,4340,4344,4355,4364],{"__ignoreMap":10},[91,4089,4090],{"class":93,"line":94},[91,4091,4092],{"class":160},"\u002F\u002F元素逆置\n",[91,4094,4095,4097],{"class":93,"line":11},[91,4096,1927],{"class":97},[91,4098,1930],{"class":206},[91,4100,4101,4103,4105,4107],{"class":93,"line":1157},[91,4102,1935],{"class":97},[91,4104,1938],{"class":97},[91,4106,1942],{"class":1941},[91,4108,1268],{"class":101},[91,4110,4111,4113,4115],{"class":93,"line":1172},[91,4112,105],{"class":97},[91,4114,1951],{"class":1941},[91,4116,1954],{"class":101},[91,4118,4119],{"class":93,"line":1178},[91,4120,1524],{"class":101},[91,4122,4123,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154],{"class":93,"line":1192},[91,4124,4125],{"class":97},"   int",[91,4127,3940],{"class":101},[91,4129,421],{"class":150},[91,4131,1042],{"class":101},[91,4133,147],{"class":97},[91,4135,998],{"class":101},[91,4137,319],{"class":150},[91,4139,480],{"class":101},[91,4141,179],{"class":150},[91,4143,480],{"class":101},[91,4145,173],{"class":150},[91,4147,480],{"class":101},[91,4149,395],{"class":150},[91,4151,480],{"class":101},[91,4153,421],{"class":150},[91,4155,3973],{"class":101},[91,4157,4158,4160,4163,4165,4167,4169],{"class":93,"line":1198},[91,4159,4125],{"class":97},[91,4161,4162],{"class":101}," start",[91,4164,147],{"class":97},[91,4166,293],{"class":150},[91,4168,157],{"class":101},[91,4170,4171],{"class":160},"\u002F\u002F起始下标\n",[91,4173,4174,4176,4179,4182,4185,4188,4190,4192,4195,4197,4199,4201],{"class":93,"line":1289},[91,4175,4125],{"class":97},[91,4177,4178],{"class":101}," end",[91,4180,4181],{"class":97},"=sizeof",[91,4183,4184],{"class":101},"(arr)",[91,4186,4187],{"class":97},"\u002Fsizeof",[91,4189,3829],{"class":101},[91,4191,293],{"class":150},[91,4193,4194],{"class":101},"])",[91,4196,634],{"class":97},[91,4198,319],{"class":150},[91,4200,157],{"class":101},[91,4202,4203],{"class":160},"\u002F\u002F结束下标\n",[91,4205,4206,4209,4212,4214],{"class":93,"line":1295},[91,4207,4208],{"class":97},"   while",[91,4210,4211],{"class":101}," (start",[91,4213,1012],{"class":97},[91,4215,4216],{"class":101},"end)\n",[91,4218,4219],{"class":93,"line":1307},[91,4220,4221],{"class":101},"   {\n",[91,4223,4224],{"class":93,"line":1590},[91,4225,4226],{"class":160},"    \u002F\u002F实现元素互换代码\n",[91,4228,4229,4231,4234,4236],{"class":93,"line":1595},[91,4230,1963],{"class":97},[91,4232,4233],{"class":101}," temp",[91,4235,147],{"class":97},[91,4237,4238],{"class":101},"arr[start];\n",[91,4240,4241,4244,4246],{"class":93,"line":1601},[91,4242,4243],{"class":101},"    arr[start]",[91,4245,147],{"class":97},[91,4247,4248],{"class":101},"arr[end];\n",[91,4250,4251,4254,4256],{"class":93,"line":1606},[91,4252,4253],{"class":101},"    arr[end]",[91,4255,147],{"class":97},[91,4257,4258],{"class":101},"temp;\n",[91,4260,4261],{"class":93,"line":1620},[91,4262,4263],{"class":160},"    \u002F\u002F下标更新\n",[91,4265,4266,4269,4271],{"class":93,"line":1625},[91,4267,4268],{"class":101},"    start",[91,4270,2270],{"class":97},[91,4272,1268],{"class":101},[91,4274,4275,4278,4281],{"class":93,"line":1631},[91,4276,4277],{"class":101},"    end",[91,4279,4280],{"class":97},"--",[91,4282,1268],{"class":101},[91,4284,4285],{"class":93,"line":1652},[91,4286,4287],{"class":101},"   }\n",[91,4289,4290],{"class":93,"line":1657},[91,4291,4292],{"class":160},"   \u002F\u002F输出逆置后的数组\n",[91,4294,4295,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318],{"class":93,"line":1671},[91,4296,4297],{"class":97},"   for",[91,4299,1636],{"class":101},[91,4301,105],{"class":97},[91,4303,3010],{"class":101},[91,4305,147],{"class":97},[91,4307,293],{"class":150},[91,4309,3017],{"class":101},[91,4311,1012],{"class":97},[91,4313,421],{"class":150},[91,4315,3017],{"class":101},[91,4317,2270],{"class":97},[91,4319,108],{"class":101},[91,4321,4322],{"class":93,"line":1676},[91,4323,4221],{"class":101},[91,4325,4326,4328,4330,4333,4335,4338],{"class":93,"line":1705},[91,4327,1529],{"class":101},[91,4329,1146],{"class":97},[91,4331,4332],{"class":101},"arr[i]",[91,4334,1146],{"class":97},[91,4336,4337],{"class":206},"\" \"",[91,4339,1268],{"class":101},[91,4341,4342],{"class":93,"line":1710},[91,4343,4287],{"class":101},[91,4345,4346,4349,4351,4353],{"class":93,"line":1727},[91,4347,4348],{"class":1941},"   system",[91,4350,102],{"class":101},[91,4352,2286],{"class":206},[91,4354,2697],{"class":101},[91,4356,4357,4360,4362],{"class":93,"line":1732},[91,4358,4359],{"class":97},"   return",[91,4361,4071],{"class":150},[91,4363,1268],{"class":101},[91,4365,4366],{"class":93,"line":1737},[91,4367,1543],{"class":101},[1109,4369,4370],{},[49,4371,4372],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[83,4374,4376],{"className":85,"code":4375,"language":5,"meta":10,"style":10},"\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",[88,4377,4378,4383,4389,4399,4407,4411,4463,4476,4502,4506,4520,4524,4529,4534,4564,4568,4573,4607,4611,4616,4636,4641,4653,4669,4684,4689,4693,4697,4710,4736,4740,4754,4758,4766],{"__ignoreMap":10},[91,4379,4380],{"class":93,"line":94},[91,4381,4382],{"class":160},"\u002F\u002F冒泡排序,升序\n",[91,4384,4385,4387],{"class":93,"line":11},[91,4386,1927],{"class":97},[91,4388,1930],{"class":206},[91,4390,4391,4393,4395,4397],{"class":93,"line":1157},[91,4392,1935],{"class":97},[91,4394,1938],{"class":97},[91,4396,1942],{"class":1941},[91,4398,1268],{"class":101},[91,4400,4401,4403,4405],{"class":93,"line":1172},[91,4402,105],{"class":97},[91,4404,1951],{"class":1941},[91,4406,1954],{"class":101},[91,4408,4409],{"class":93,"line":1178},[91,4410,1524],{"class":101},[91,4412,4413,4415,4417,4419,4422,4424,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461],{"class":93,"line":1192},[91,4414,1963],{"class":97},[91,4416,3940],{"class":101},[91,4418,522],{"class":150},[91,4420,4421],{"class":101},"] ",[91,4423,147],{"class":97},[91,4425,4426],{"class":101}," {",[91,4428,395],{"class":150},[91,4430,480],{"class":101},[91,4432,179],{"class":150},[91,4434,480],{"class":101},[91,4436,497],{"class":150},[91,4438,480],{"class":101},[91,4440,293],{"class":150},[91,4442,480],{"class":101},[91,4444,421],{"class":150},[91,4446,480],{"class":101},[91,4448,471],{"class":150},[91,4450,480],{"class":101},[91,4452,319],{"class":150},[91,4454,480],{"class":101},[91,4456,173],{"class":150},[91,4458,480],{"class":101},[91,4460,522],{"class":150},[91,4462,3973],{"class":101},[91,4464,4465,4467,4469,4472,4474],{"class":93,"line":1198},[91,4466,1529],{"class":101},[91,4468,1146],{"class":97},[91,4470,4471],{"class":206},"\"排序前：\"",[91,4473,1146],{"class":97},[91,4475,1169],{"class":101},[91,4477,4478,4480,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500],{"class":93,"line":1289},[91,4479,3179],{"class":97},[91,4481,1636],{"class":101},[91,4483,105],{"class":97},[91,4485,3010],{"class":101},[91,4487,147],{"class":97},[91,4489,293],{"class":150},[91,4491,3017],{"class":101},[91,4493,1012],{"class":97},[91,4495,522],{"class":150},[91,4497,3017],{"class":101},[91,4499,2270],{"class":97},[91,4501,108],{"class":101},[91,4503,4504],{"class":93,"line":1295},[91,4505,2008],{"class":101},[91,4507,4508,4510,4512,4514,4516,4518],{"class":93,"line":1307},[91,4509,3429],{"class":101},[91,4511,1146],{"class":97},[91,4513,4332],{"class":101},[91,4515,1146],{"class":97},[91,4517,4337],{"class":206},[91,4519,1268],{"class":101},[91,4521,4522],{"class":93,"line":1590},[91,4523,2165],{"class":101},[91,4525,4526],{"class":93,"line":1595},[91,4527,4528],{"class":160},"    \u002F\u002F开始冒泡排序\n",[91,4530,4531],{"class":93,"line":1601},[91,4532,4533],{"class":160},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[91,4535,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562],{"class":93,"line":1606},[91,4537,3179],{"class":97},[91,4539,1636],{"class":101},[91,4541,105],{"class":97},[91,4543,3010],{"class":101},[91,4545,147],{"class":97},[91,4547,293],{"class":150},[91,4549,3017],{"class":101},[91,4551,1012],{"class":97},[91,4553,522],{"class":150},[91,4555,634],{"class":97},[91,4557,319],{"class":150},[91,4559,3017],{"class":101},[91,4561,2270],{"class":97},[91,4563,108],{"class":101},[91,4565,4566],{"class":93,"line":1620},[91,4567,2008],{"class":101},[91,4569,4570],{"class":93,"line":1625},[91,4571,4572],{"class":160},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[91,4574,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605],{"class":93,"line":1631},[91,4576,3381],{"class":97},[91,4578,1636],{"class":101},[91,4580,105],{"class":97},[91,4582,3388],{"class":101},[91,4584,147],{"class":97},[91,4586,293],{"class":150},[91,4588,3395],{"class":101},[91,4590,1012],{"class":97},[91,4592,522],{"class":150},[91,4594,634],{"class":97},[91,4596,543],{"class":101},[91,4598,634],{"class":97},[91,4600,319],{"class":150},[91,4602,3395],{"class":101},[91,4604,2270],{"class":97},[91,4606,108],{"class":101},[91,4608,4609],{"class":93,"line":1652},[91,4610,2488],{"class":101},[91,4612,4613],{"class":93,"line":1657},[91,4614,4615],{"class":160},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[91,4617,4618,4621,4624,4626,4629,4631,4633],{"class":93,"line":1671},[91,4619,4620],{"class":97},"            if",[91,4622,4623],{"class":101},"(arr[j]",[91,4625,1062],{"class":97},[91,4627,4628],{"class":101},"arr[j",[91,4630,583],{"class":97},[91,4632,319],{"class":150},[91,4634,4635],{"class":101},"])\n",[91,4637,4638],{"class":93,"line":1676},[91,4639,4640],{"class":101},"            {\n",[91,4642,4643,4646,4648,4650],{"class":93,"line":1705},[91,4644,4645],{"class":97},"                int",[91,4647,4233],{"class":101},[91,4649,147],{"class":97},[91,4651,4652],{"class":101},"arr[j];\n",[91,4654,4655,4658,4660,4662,4664,4666],{"class":93,"line":1710},[91,4656,4657],{"class":101},"                arr[j]",[91,4659,147],{"class":97},[91,4661,4628],{"class":101},[91,4663,583],{"class":97},[91,4665,319],{"class":150},[91,4667,4668],{"class":101},"];\n",[91,4670,4671,4674,4676,4678,4680,4682],{"class":93,"line":1727},[91,4672,4673],{"class":101},"                arr[j",[91,4675,583],{"class":97},[91,4677,319],{"class":150},[91,4679,1042],{"class":101},[91,4681,147],{"class":97},[91,4683,4258],{"class":101},[91,4685,4686],{"class":93,"line":1732},[91,4687,4688],{"class":101},"            }\n",[91,4690,4691],{"class":93,"line":1737},[91,4692,2507],{"class":101},[91,4694,4695],{"class":93,"line":1742},[91,4696,2165],{"class":101},[91,4698,4699,4701,4703,4706,4708],{"class":93,"line":1756},[91,4700,1529],{"class":101},[91,4702,1146],{"class":97},[91,4704,4705],{"class":206},"\"排序后：\"",[91,4707,1146],{"class":97},[91,4709,1169],{"class":101},[91,4711,4712,4714,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734],{"class":93,"line":1761},[91,4713,3179],{"class":97},[91,4715,1636],{"class":101},[91,4717,105],{"class":97},[91,4719,3010],{"class":101},[91,4721,147],{"class":97},[91,4723,293],{"class":150},[91,4725,3017],{"class":101},[91,4727,1012],{"class":97},[91,4729,522],{"class":150},[91,4731,3017],{"class":101},[91,4733,2270],{"class":97},[91,4735,108],{"class":101},[91,4737,4738],{"class":93,"line":2555},[91,4739,2008],{"class":101},[91,4741,4742,4744,4746,4748,4750,4752],{"class":93,"line":2569},[91,4743,3429],{"class":101},[91,4745,1146],{"class":97},[91,4747,4332],{"class":101},[91,4749,1146],{"class":97},[91,4751,4337],{"class":206},[91,4753,1268],{"class":101},[91,4755,4756],{"class":93,"line":2577},[91,4757,2165],{"class":101},[91,4759,4760,4762,4764],{"class":93,"line":2582},[91,4761,4068],{"class":97},[91,4763,4071],{"class":150},[91,4765,1268],{"class":101},[91,4767,4768],{"class":93,"line":2588},[91,4769,1543],{"class":101},[63,4771,4773],{"id":4772},"_172二维数组","1.7.2二维数组",[46,4775,4776],{},[49,4777,4778],{},"二维数组的四种定义方式",[239,4780,4781,4790],{},[242,4782,4783],{},[245,4784,4785,4788],{},[248,4786,4787],{},"序号",[248,4789,3759],{},[286,4791,4792,4802,4811,4820,4829],{},[245,4793,4794,4796],{},[291,4795,319],{},[291,4797,4798,4799,157],{},"数据类型 数组名[行数]",[91,4800,4801],{},"列数",[245,4803,4804,4806],{},[291,4805,179],{},[291,4807,4798,4808,4810],{},[91,4809,4801],{},"={ {数据1,数据2}，{数据3，数据4}... }",[245,4812,4813,4815],{},[291,4814,173],{},[291,4816,4798,4817,4819],{},[91,4818,4801],{},"={数据1,数据2,数据3...}",[245,4821,4822,4824],{},[291,4823,395],{},[291,4825,4826,4827,4819],{},"数据类型 数组名[]",[91,4828,4801],{},[245,4830,4831,4834],{},[291,4832,4833],{},"注意：不能只省略列数",[291,4835],{},[46,4837,4838],{"start":11},[49,4839,4840],{},"二维数组数组名",[1109,4842,4843,4846],{},[49,4844,4845],{},"1.查看二维数组所占内存空间",[49,4847,4848],{},"2.获取二维数组首地址",[38,4850,4851],{},"已知二维数组，求二维数组的行数与列数",[83,4853,4855],{"className":85,"code":4854,"language":5,"meta":10,"style":10},"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",[88,4856,4857,4865,4869,4887,4891,4909,4925,4930,4955,4988],{"__ignoreMap":10},[91,4858,4859,4861,4863],{"class":93,"line":94},[91,4860,105],{"class":97},[91,4862,1951],{"class":1941},[91,4864,1954],{"class":101},[91,4866,4867],{"class":93,"line":11},[91,4868,1524],{"class":101},[91,4870,4871,4873,4875,4877,4880,4882,4884],{"class":93,"line":1157},[91,4872,1963],{"class":97},[91,4874,3940],{"class":101},[91,4876,179],{"class":150},[91,4878,4879],{"class":101},"][",[91,4881,173],{"class":150},[91,4883,1042],{"class":101},[91,4885,4886],{"class":97},"=\n",[91,4888,4889],{"class":93,"line":1172},[91,4890,2008],{"class":101},[91,4892,4893,4896,4898,4900,4902,4904,4906],{"class":93,"line":1178},[91,4894,4895],{"class":101},"        {",[91,4897,319],{"class":150},[91,4899,480],{"class":101},[91,4901,179],{"class":150},[91,4903,480],{"class":101},[91,4905,173],{"class":150},[91,4907,4908],{"class":101},"},\n",[91,4910,4911,4913,4915,4917,4919,4921,4923],{"class":93,"line":1192},[91,4912,4895],{"class":101},[91,4914,395],{"class":150},[91,4916,480],{"class":101},[91,4918,421],{"class":150},[91,4920,480],{"class":101},[91,4922,446],{"class":150},[91,4924,1543],{"class":101},[91,4926,4927],{"class":93,"line":1198},[91,4928,4929],{"class":101},"    };\n",[91,4931,4932,4934,4936,4939,4941,4943,4945,4947,4949,4951,4953],{"class":93,"line":1289},[91,4933,1529],{"class":101},[91,4935,1146],{"class":97},[91,4937,4938],{"class":206},"\"二维数组的行数\"",[91,4940,1350],{"class":97},[91,4942,4184],{"class":101},[91,4944,4187],{"class":97},[91,4946,3829],{"class":101},[91,4948,293],{"class":150},[91,4950,4194],{"class":101},[91,4952,1146],{"class":97},[91,4954,1169],{"class":101},[91,4956,4957,4959,4961,4964,4966,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986],{"class":93,"line":1295},[91,4958,1529],{"class":101},[91,4960,1146],{"class":97},[91,4962,4963],{"class":206},"\"二维数组的列数\"",[91,4965,1350],{"class":97},[91,4967,3829],{"class":101},[91,4969,293],{"class":150},[91,4971,4194],{"class":101},[91,4973,4187],{"class":97},[91,4975,3829],{"class":101},[91,4977,293],{"class":150},[91,4979,4879],{"class":101},[91,4981,293],{"class":150},[91,4983,4194],{"class":101},[91,4985,1146],{"class":97},[91,4987,1169],{"class":101},[91,4989,4990],{"class":93,"line":1307},[91,4991,1543],{"class":101},[38,4993,4994],{},"查看二维数组首地址",[83,4996,4998],{"className":85,"code":4997,"language":5,"meta":10,"style":10},"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",[88,4999,5000,5017,5043,5068],{"__ignoreMap":10},[91,5001,5002,5004,5006,5009,5011,5013,5015],{"class":93,"line":94},[91,5003,1347],{"class":101},[91,5005,1146],{"class":97},[91,5007,5008],{"class":206},"\"二维数组首地址：\"",[91,5010,1146],{"class":97},[91,5012,3858],{"class":101},[91,5014,1146],{"class":97},[91,5016,1169],{"class":101},[91,5018,5019,5021,5023,5026,5028,5030,5032,5035,5037,5039,5041],{"class":93,"line":11},[91,5020,1347],{"class":101},[91,5022,1146],{"class":97},[91,5024,5025],{"class":206},"\"二维数组第一行的首地址：\"",[91,5027,1146],{"class":97},[91,5029,102],{"class":101},[91,5031,105],{"class":97},[91,5033,5034],{"class":101},")arr[",[91,5036,293],{"class":150},[91,5038,1042],{"class":101},[91,5040,1146],{"class":97},[91,5042,1169],{"class":101},[91,5044,5045,5047,5049,5052,5054,5056,5058,5060,5062,5064,5066],{"class":93,"line":1157},[91,5046,1347],{"class":101},[91,5048,1146],{"class":97},[91,5050,5051],{"class":206},"\"二维数组第二行的首地址：\"",[91,5053,1146],{"class":97},[91,5055,102],{"class":101},[91,5057,105],{"class":97},[91,5059,5034],{"class":101},[91,5061,319],{"class":150},[91,5063,1042],{"class":101},[91,5065,1146],{"class":97},[91,5067,1169],{"class":101},[91,5069,5070,5072,5074,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101],{"class":93,"line":1172},[91,5071,1347],{"class":101},[91,5073,1146],{"class":97},[91,5075,5076],{"class":206},"\"二维数组第一个元素的首地址:\"",[91,5078,1146],{"class":97},[91,5080,102],{"class":101},[91,5082,105],{"class":97},[91,5084,531],{"class":101},[91,5086,455],{"class":97},[91,5088,3884],{"class":101},[91,5090,293],{"class":150},[91,5092,4879],{"class":101},[91,5094,293],{"class":150},[91,5096,1042],{"class":101},[91,5098,1146],{"class":97},[91,5100,1216],{"class":101},[91,5102,5103],{"class":160},"\u002F\u002F对于数，要加取址符\n",[5105,5106,5107],"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":10,"searchDepth":11,"depth":11,"links":5109},[5110,5111,5112,5120,5121,5127,5132],{"id":35,"depth":11,"text":36},{"id":43,"depth":11,"text":44},{"id":60,"depth":11,"text":61,"children":5113},[5114,5115,5116,5117,5118,5119],{"id":65,"depth":1157,"text":66},{"id":118,"depth":1157,"text":119},{"id":187,"depth":1157,"text":188},{"id":1127,"depth":1157,"text":1128},{"id":1222,"depth":1157,"text":1223},{"id":1321,"depth":1157,"text":1322},{"id":1363,"depth":11,"text":1364},{"id":1431,"depth":11,"text":1432,"children":5122},[5123,5124,5125,5126],{"id":1435,"depth":1157,"text":1436},{"id":1457,"depth":1157,"text":1458},{"id":1466,"depth":1157,"text":1467},{"id":1475,"depth":1157,"text":1476},{"id":1484,"depth":11,"text":1485,"children":5128},[5129,5130,5131],{"id":1488,"depth":1157,"text":1489},{"id":2183,"depth":1157,"text":2184},{"id":3599,"depth":1157,"text":3600},{"id":3740,"depth":11,"text":3741,"children":5133},[5134,5135],{"id":3744,"depth":1157,"text":3745},{"id":4772,"depth":1157,"text":4773},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":25,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5142,"title":5143,"body":5144,"description":10,"extension":14,"meta":6244,"navigation":17,"path":6245,"seo":6246,"stem":6247,"__hash__":6248},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5145,"toc":6236},[5146,5149,5153,5161,5169,5172,5238,5242,5245,5321,5325,5328,5331,5334,5547,5551,5556,5620,5625,5692,5697,5788,5791,5896,5900,5903,5909,6053,6057,6060,6074,6077,6122,6125,6233],[29,5147,5143],{"id":5148},"_2函数",[33,5150,5152],{"id":5151},"_21函数概述","2.1函数概述",[46,5154,5155,5158],{},[49,5156,5157],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[49,5159,5160],{},"语法：",[83,5162,5167],{"className":5163,"code":5165,"language":5166,"meta":10},[5164],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[88,5168,5165],{"__ignoreMap":10},[38,5170,5171],{},"小案例",[83,5173,5175],{"className":85,"code":5174,"language":5,"meta":10,"style":10},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[88,5176,5177,5182,5206,5210,5227,5234],{"__ignoreMap":10},[91,5178,5179],{"class":93,"line":94},[91,5180,5181],{"class":160},"\u002F\u002Fnum1,num2形参\n",[91,5183,5184,5186,5189,5191,5193,5197,5199,5201,5204],{"class":93,"line":11},[91,5185,105],{"class":97},[91,5187,5188],{"class":1941}," add",[91,5190,102],{"class":101},[91,5192,105],{"class":97},[91,5194,5196],{"class":5195},"s4XuR"," num1",[91,5198,480],{"class":101},[91,5200,105],{"class":97},[91,5202,5203],{"class":5195}," num2",[91,5205,108],{"class":101},[91,5207,5208],{"class":93,"line":1157},[91,5209,1524],{"class":101},[91,5211,5212,5214,5217,5219,5222,5224],{"class":93,"line":1172},[91,5213,1963],{"class":97},[91,5215,5216],{"class":101}," sum",[91,5218,147],{"class":97},[91,5220,5221],{"class":101},"num1",[91,5223,583],{"class":97},[91,5225,5226],{"class":101},"num2;\n",[91,5228,5229,5231],{"class":93,"line":1178},[91,5230,4068],{"class":97},[91,5232,5233],{"class":101}," sum;\n",[91,5235,5236],{"class":93,"line":1192},[91,5237,1543],{"class":101},[33,5239,5241],{"id":5240},"_22函数调用","2.2函数调用",[38,5243,5244],{},"调用刚刚写的求和函数",[83,5246,5248],{"className":85,"code":5247,"language":5,"meta":10,"style":10},"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",[88,5249,5250,5258,5262,5267,5279,5291,5300,5305,5317],{"__ignoreMap":10},[91,5251,5252,5254,5256],{"class":93,"line":94},[91,5253,105],{"class":97},[91,5255,1951],{"class":1941},[91,5257,1954],{"class":101},[91,5259,5260],{"class":93,"line":11},[91,5261,1524],{"class":101},[91,5263,5264],{"class":93,"line":1157},[91,5265,5266],{"class":160},"    \u002F\u002Fa,b实参\n",[91,5268,5269,5271,5273,5275,5277],{"class":93,"line":1172},[91,5270,1963],{"class":97},[91,5272,1376],{"class":101},[91,5274,147],{"class":97},[91,5276,293],{"class":150},[91,5278,1268],{"class":101},[91,5280,5281,5283,5285,5287,5289],{"class":93,"line":1178},[91,5282,1963],{"class":97},[91,5284,2811],{"class":101},[91,5286,147],{"class":97},[91,5288,293],{"class":150},[91,5290,1268],{"class":101},[91,5292,5293,5295,5297],{"class":93,"line":1192},[91,5294,1990],{"class":101},[91,5296,1407],{"class":97},[91,5298,5299],{"class":101},"a,b;\n",[91,5301,5302],{"class":93,"line":1198},[91,5303,5304],{"class":160},"    \u002F\u002F调用函数时，实参值传给了形参\n",[91,5306,5307,5309,5311,5314],{"class":93,"line":1289},[91,5308,1529],{"class":101},[91,5310,1146],{"class":97},[91,5312,5313],{"class":1941},"add",[91,5315,5316],{"class":101},"(a,b);\n",[91,5318,5319],{"class":93,"line":1295},[91,5320,1543],{"class":101},[33,5322,5324],{"id":5323},"_23值传递","2.3值传递",[38,5326,5327],{},"值传递就是函数调用时实参将数值传给形参",[38,5329,5330],{},"值传递时，如果形参发生任何改变，不会影响实参",[38,5332,5333],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[83,5335,5337],{"className":85,"code":5336,"language":5,"meta":10,"style":10},"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",[88,5338,5339,5361,5365,5378,5395,5413,5424,5433,5442,5455,5471,5487,5496,5500,5508,5512,5524,5536,5543],{"__ignoreMap":10},[91,5340,5341,5344,5347,5349,5351,5353,5355,5357,5359],{"class":93,"line":94},[91,5342,5343],{"class":97},"void",[91,5345,5346],{"class":1941}," swap",[91,5348,102],{"class":101},[91,5350,105],{"class":97},[91,5352,5196],{"class":5195},[91,5354,480],{"class":101},[91,5356,105],{"class":97},[91,5358,5203],{"class":5195},[91,5360,108],{"class":101},[91,5362,5363],{"class":93,"line":11},[91,5364,1524],{"class":101},[91,5366,5367,5369,5371,5374,5376],{"class":93,"line":1157},[91,5368,1529],{"class":101},[91,5370,1146],{"class":97},[91,5372,5373],{"class":206},"\"交换前：\"",[91,5375,1146],{"class":97},[91,5377,1169],{"class":101},[91,5379,5380,5382,5384,5387,5389,5391,5393],{"class":93,"line":1172},[91,5381,1529],{"class":101},[91,5383,1146],{"class":97},[91,5385,5386],{"class":206},"\"num1=\"",[91,5388,1146],{"class":97},[91,5390,5221],{"class":101},[91,5392,1146],{"class":97},[91,5394,1169],{"class":101},[91,5396,5397,5399,5401,5404,5406,5409,5411],{"class":93,"line":1178},[91,5398,1529],{"class":101},[91,5400,1146],{"class":97},[91,5402,5403],{"class":206},"\"num2=\"",[91,5405,1146],{"class":97},[91,5407,5408],{"class":101},"num2",[91,5410,1146],{"class":97},[91,5412,1169],{"class":101},[91,5414,5415,5417,5419,5421],{"class":93,"line":1192},[91,5416,1963],{"class":97},[91,5418,4233],{"class":101},[91,5420,147],{"class":97},[91,5422,5423],{"class":101},"num1;\n",[91,5425,5426,5429,5431],{"class":93,"line":1198},[91,5427,5428],{"class":101},"    num1",[91,5430,147],{"class":97},[91,5432,5226],{"class":101},[91,5434,5435,5438,5440],{"class":93,"line":1289},[91,5436,5437],{"class":101},"    num2",[91,5439,147],{"class":97},[91,5441,4258],{"class":101},[91,5443,5444,5446,5448,5451,5453],{"class":93,"line":1295},[91,5445,1529],{"class":101},[91,5447,1146],{"class":97},[91,5449,5450],{"class":206},"\"交换后：\"",[91,5452,1146],{"class":97},[91,5454,1169],{"class":101},[91,5456,5457,5459,5461,5463,5465,5467,5469],{"class":93,"line":1307},[91,5458,1529],{"class":101},[91,5460,1146],{"class":97},[91,5462,5386],{"class":206},[91,5464,1146],{"class":97},[91,5466,5221],{"class":101},[91,5468,1146],{"class":97},[91,5470,1169],{"class":101},[91,5472,5473,5475,5477,5479,5481,5483,5485],{"class":93,"line":1590},[91,5474,1529],{"class":101},[91,5476,1146],{"class":97},[91,5478,5403],{"class":206},[91,5480,1146],{"class":97},[91,5482,5408],{"class":101},[91,5484,1146],{"class":97},[91,5486,1169],{"class":101},[91,5488,5489,5491,5493],{"class":93,"line":1595},[91,5490,4068],{"class":97},[91,5492,157],{"class":101},[91,5494,5495],{"class":160},"\u002F\u002F或者不写\n",[91,5497,5498],{"class":93,"line":1601},[91,5499,1543],{"class":101},[91,5501,5502,5504,5506],{"class":93,"line":1606},[91,5503,105],{"class":97},[91,5505,1951],{"class":1941},[91,5507,1954],{"class":101},[91,5509,5510],{"class":93,"line":1620},[91,5511,1524],{"class":101},[91,5513,5514,5516,5518,5520,5522],{"class":93,"line":1625},[91,5515,1963],{"class":97},[91,5517,1376],{"class":101},[91,5519,147],{"class":97},[91,5521,548],{"class":150},[91,5523,1268],{"class":101},[91,5525,5526,5528,5530,5532,5534],{"class":93,"line":1631},[91,5527,1963],{"class":97},[91,5529,2811],{"class":101},[91,5531,147],{"class":97},[91,5533,802],{"class":150},[91,5535,1268],{"class":101},[91,5537,5538,5541],{"class":93,"line":1652},[91,5539,5540],{"class":1941},"    swap",[91,5542,5316],{"class":101},[91,5544,5545],{"class":93,"line":1657},[91,5546,1543],{"class":101},[33,5548,5550],{"id":5549},"_24函数的常见形式","2.4函数的常见形式",[46,5552,5553],{},[49,5554,5555],{},"无参无返",[83,5557,5559],{"className":85,"code":5558,"language":5,"meta":10,"style":10},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[88,5560,5561,5570,5574,5587,5591,5599,5603,5608,5616],{"__ignoreMap":10},[91,5562,5563,5565,5568],{"class":93,"line":94},[91,5564,5343],{"class":97},[91,5566,5567],{"class":1941}," test01",[91,5569,1954],{"class":101},[91,5571,5572],{"class":93,"line":11},[91,5573,1524],{"class":101},[91,5575,5576,5578,5580,5583,5585],{"class":93,"line":1157},[91,5577,1529],{"class":101},[91,5579,1146],{"class":97},[91,5581,5582],{"class":206},"\"你好\"",[91,5584,1146],{"class":97},[91,5586,1169],{"class":101},[91,5588,5589],{"class":93,"line":1172},[91,5590,1543],{"class":101},[91,5592,5593,5595,5597],{"class":93,"line":1178},[91,5594,105],{"class":97},[91,5596,1951],{"class":1941},[91,5598,1954],{"class":101},[91,5600,5601],{"class":93,"line":1192},[91,5602,1524],{"class":101},[91,5604,5605],{"class":93,"line":1198},[91,5606,5607],{"class":160},"    \u002F\u002F函数调用\n",[91,5609,5610,5613],{"class":93,"line":1289},[91,5611,5612],{"class":1941},"    test01",[91,5614,5615],{"class":101},"();\n",[91,5617,5618],{"class":93,"line":1295},[91,5619,1543],{"class":101},[46,5621,5622],{"start":11},[49,5623,5624],{},"有参无返",[83,5626,5628],{"className":85,"code":5627,"language":5,"meta":10,"style":10},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[88,5629,5630,5645,5649,5661,5665,5673,5677,5688],{"__ignoreMap":10},[91,5631,5632,5634,5637,5639,5641,5643],{"class":93,"line":94},[91,5633,5343],{"class":97},[91,5635,5636],{"class":1941}," test02",[91,5638,102],{"class":101},[91,5640,105],{"class":97},[91,5642,1376],{"class":5195},[91,5644,108],{"class":101},[91,5646,5647],{"class":93,"line":11},[91,5648,1524],{"class":101},[91,5650,5651,5653,5655,5657,5659],{"class":93,"line":1157},[91,5652,1529],{"class":101},[91,5654,1146],{"class":97},[91,5656,5582],{"class":206},[91,5658,1146],{"class":97},[91,5660,1169],{"class":101},[91,5662,5663],{"class":93,"line":1172},[91,5664,1543],{"class":101},[91,5666,5667,5669,5671],{"class":93,"line":1178},[91,5668,105],{"class":97},[91,5670,1951],{"class":1941},[91,5672,1954],{"class":101},[91,5674,5675],{"class":93,"line":1192},[91,5676,1524],{"class":101},[91,5678,5679,5682,5684,5686],{"class":93,"line":1198},[91,5680,5681],{"class":1941},"    test02",[91,5683,102],{"class":101},[91,5685,413],{"class":150},[91,5687,2697],{"class":101},[91,5689,5690],{"class":93,"line":1289},[91,5691,1543],{"class":101},[46,5693,5694],{"start":1157},[49,5695,5696],{},"无参有返",[83,5698,5700],{"className":85,"code":5699,"language":5,"meta":10,"style":10},"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",[88,5701,5702,5711,5715,5727,5736,5740,5748,5752,5765,5784],{"__ignoreMap":10},[91,5703,5704,5706,5709],{"class":93,"line":94},[91,5705,105],{"class":97},[91,5707,5708],{"class":1941}," test03",[91,5710,1954],{"class":101},[91,5712,5713],{"class":93,"line":11},[91,5714,1524],{"class":101},[91,5716,5717,5719,5721,5723,5725],{"class":93,"line":1157},[91,5718,1529],{"class":101},[91,5720,1146],{"class":97},[91,5722,5582],{"class":206},[91,5724,1146],{"class":97},[91,5726,1169],{"class":101},[91,5728,5729,5731,5734],{"class":93,"line":1172},[91,5730,4068],{"class":97},[91,5732,5733],{"class":150}," 100",[91,5735,1268],{"class":101},[91,5737,5738],{"class":93,"line":1178},[91,5739,1543],{"class":101},[91,5741,5742,5744,5746],{"class":93,"line":1192},[91,5743,105],{"class":97},[91,5745,1951],{"class":1941},[91,5747,1954],{"class":101},[91,5749,5750],{"class":93,"line":1198},[91,5751,1524],{"class":101},[91,5753,5754,5756,5758,5760,5763],{"class":93,"line":1289},[91,5755,1963],{"class":97},[91,5757,5196],{"class":101},[91,5759,147],{"class":97},[91,5761,5762],{"class":1941},"test03",[91,5764,5615],{"class":101},[91,5766,5767,5769,5771,5773,5775,5777,5779,5781],{"class":93,"line":1295},[91,5768,1529],{"class":101},[91,5770,1146],{"class":97},[91,5772,5386],{"class":206},[91,5774,1146],{"class":97},[91,5776,5221],{"class":101},[91,5778,1146],{"class":97},[91,5780,1216],{"class":101},[91,5782,5783],{"class":160}," \u002F\u002F100\n",[91,5785,5786],{"class":93,"line":1307},[91,5787,1543],{"class":101},[38,5789,5790],{},"4.有参有返",[83,5792,5794],{"className":85,"code":5793,"language":5,"meta":10,"style":10},"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",[88,5795,5796,5811,5815,5828,5834,5838,5847,5851,5863,5877,5892],{"__ignoreMap":10},[91,5797,5798,5800,5803,5805,5807,5809],{"class":93,"line":94},[91,5799,105],{"class":97},[91,5801,5802],{"class":1941}," test04",[91,5804,102],{"class":101},[91,5806,105],{"class":97},[91,5808,1376],{"class":5195},[91,5810,108],{"class":101},[91,5812,5813],{"class":93,"line":11},[91,5814,1524],{"class":101},[91,5816,5817,5819,5821,5824,5826],{"class":93,"line":1157},[91,5818,1529],{"class":101},[91,5820,1146],{"class":97},[91,5822,5823],{"class":206},"\"hello\"",[91,5825,1146],{"class":97},[91,5827,1169],{"class":101},[91,5829,5830,5832],{"class":93,"line":1172},[91,5831,4068],{"class":97},[91,5833,1410],{"class":101},[91,5835,5836],{"class":93,"line":1178},[91,5837,1543],{"class":101},[91,5839,5840,5842,5845],{"class":93,"line":1192},[91,5841,105],{"class":97},[91,5843,5844],{"class":1941}," mian",[91,5846,1954],{"class":101},[91,5848,5849],{"class":93,"line":1198},[91,5850,1524],{"class":101},[91,5852,5853,5855,5857,5859,5861],{"class":93,"line":1289},[91,5854,1963],{"class":97},[91,5856,2811],{"class":101},[91,5858,147],{"class":97},[91,5860,319],{"class":150},[91,5862,1268],{"class":101},[91,5864,5865,5867,5869,5871,5874],{"class":93,"line":1295},[91,5866,1963],{"class":97},[91,5868,2827],{"class":101},[91,5870,147],{"class":97},[91,5872,5873],{"class":1941},"test04",[91,5875,5876],{"class":101},"(b);\n",[91,5878,5879,5881,5883,5885,5887,5889],{"class":93,"line":1307},[91,5880,1529],{"class":101},[91,5882,1146],{"class":97},[91,5884,390],{"class":101},[91,5886,1146],{"class":97},[91,5888,1216],{"class":101},[91,5890,5891],{"class":160}," \u002F\u002F1\n",[91,5893,5894],{"class":93,"line":1590},[91,5895,1543],{"class":101},[33,5897,5899],{"id":5898},"_25函数的声明","2.5函数的声明",[38,5901,5902],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[38,5904,5905,5906],{},"函数的",[251,5907,5908],{},"声明可以多次，但是函数的定义只能有一次",[83,5910,5912],{"className":85,"code":5911,"language":5,"meta":10,"style":10},"\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",[88,5913,5914,5919,5924,5949,5958,5962,5974,5986,6002,6006,6026,6030,6049],{"__ignoreMap":10},[91,5915,5916],{"class":93,"line":94},[91,5917,5918],{"class":160},"\u002F\u002F函数声明\n",[91,5920,5921],{"class":93,"line":11},[91,5922,5923],{"class":160},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[91,5925,5926,5928,5931,5933,5935,5937,5939,5941,5943,5946],{"class":93,"line":1157},[91,5927,105],{"class":97},[91,5929,5930],{"class":1941}," max",[91,5932,102],{"class":101},[91,5934,105],{"class":97},[91,5936,1376],{"class":5195},[91,5938,480],{"class":101},[91,5940,105],{"class":97},[91,5942,2811],{"class":5195},[91,5944,5945],{"class":101},");",[91,5947,5948],{"class":160},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[91,5950,5951,5953,5955],{"class":93,"line":1172},[91,5952,105],{"class":97},[91,5954,1951],{"class":1941},[91,5956,5957],{"class":101},"() \n",[91,5959,5960],{"class":93,"line":1178},[91,5961,1524],{"class":101},[91,5963,5964,5966,5968,5970,5972],{"class":93,"line":1192},[91,5965,1963],{"class":97},[91,5967,1376],{"class":101},[91,5969,147],{"class":97},[91,5971,548],{"class":150},[91,5973,1268],{"class":101},[91,5975,5976,5978,5980,5982,5984],{"class":93,"line":1198},[91,5977,1963],{"class":97},[91,5979,2811],{"class":101},[91,5981,147],{"class":97},[91,5983,802],{"class":150},[91,5985,1268],{"class":101},[91,5987,5988,5990,5992,5995,5998,6000],{"class":93,"line":1289},[91,5989,1529],{"class":101},[91,5991,1146],{"class":97},[91,5993,5994],{"class":1941},"max",[91,5996,5997],{"class":101},"(a,b)",[91,5999,1146],{"class":97},[91,6001,1169],{"class":101},[91,6003,6004],{"class":93,"line":1295},[91,6005,1543],{"class":101},[91,6007,6008,6010,6012,6014,6016,6018,6020,6022,6024],{"class":93,"line":1307},[91,6009,105],{"class":97},[91,6011,5930],{"class":1941},[91,6013,102],{"class":101},[91,6015,105],{"class":97},[91,6017,1376],{"class":5195},[91,6019,480],{"class":101},[91,6021,105],{"class":97},[91,6023,2811],{"class":5195},[91,6025,108],{"class":101},[91,6027,6028],{"class":93,"line":1590},[91,6029,1524],{"class":101},[91,6031,6032,6034,6036,6038,6040,6042,6044,6046],{"class":93,"line":1595},[91,6033,4068],{"class":97},[91,6035,1376],{"class":101},[91,6037,1062],{"class":97},[91,6039,365],{"class":101},[91,6041,1088],{"class":97},[91,6043,340],{"class":101},[91,6045,961],{"class":97},[91,6047,6048],{"class":101},"b;\n",[91,6050,6051],{"class":93,"line":1601},[91,6052,1543],{"class":101},[33,6054,6056],{"id":6055},"_26函数的分文件编写","2.6函数的分文件编写",[38,6058,6059],{},"4个步骤：",[1109,6061,6062,6065,6068,6071],{},[49,6063,6064],{},"1.创建后缀名为.h的头文件",[49,6066,6067],{},"2.创建后缀名为.cpp的源文件",[49,6069,6070],{},"3.在头文件中写函数的定义",[49,6072,6073],{},"4.在源文件中写函数的定义\n示例：",[38,6075,6076],{},"头文件：swap.h",[83,6078,6080],{"className":85,"code":6079,"language":5,"meta":10,"style":10},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[88,6081,6082,6088,6098,6102],{"__ignoreMap":10},[91,6083,6084,6086],{"class":93,"line":94},[91,6085,1927],{"class":97},[91,6087,1930],{"class":206},[91,6089,6090,6092,6094,6096],{"class":93,"line":11},[91,6091,1935],{"class":97},[91,6093,1938],{"class":97},[91,6095,1942],{"class":1941},[91,6097,1268],{"class":101},[91,6099,6100],{"class":93,"line":1157},[91,6101,5918],{"class":160},[91,6103,6104,6106,6108,6110,6112,6114,6116,6118,6120],{"class":93,"line":1172},[91,6105,5343],{"class":97},[91,6107,5346],{"class":1941},[91,6109,102],{"class":101},[91,6111,105],{"class":97},[91,6113,1376],{"class":5195},[91,6115,480],{"class":101},[91,6117,105],{"class":97},[91,6119,2811],{"class":5195},[91,6121,2697],{"class":101},[38,6123,6124],{},"源文件：swap.cpp",[83,6126,6128],{"className":85,"code":6127,"language":5,"meta":10,"style":10},"#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",[88,6129,6130,6137,6142,6162,6166,6177,6186,6195,6212,6229],{"__ignoreMap":10},[91,6131,6132,6134],{"class":93,"line":94},[91,6133,1927],{"class":97},[91,6135,6136],{"class":206}," \"swap.h\"\n",[91,6138,6139],{"class":93,"line":11},[91,6140,6141],{"class":160},"\u002F\u002F函数的定义\n",[91,6143,6144,6146,6148,6150,6152,6154,6156,6158,6160],{"class":93,"line":1157},[91,6145,5343],{"class":97},[91,6147,5346],{"class":1941},[91,6149,102],{"class":101},[91,6151,105],{"class":97},[91,6153,1376],{"class":5195},[91,6155,480],{"class":101},[91,6157,105],{"class":97},[91,6159,2811],{"class":5195},[91,6161,108],{"class":101},[91,6163,6164],{"class":93,"line":1172},[91,6165,1524],{"class":101},[91,6167,6168,6170,6172,6174],{"class":93,"line":1178},[91,6169,1963],{"class":97},[91,6171,4233],{"class":101},[91,6173,147],{"class":97},[91,6175,6176],{"class":101},"a;\n",[91,6178,6179,6182,6184],{"class":93,"line":1192},[91,6180,6181],{"class":101},"    a",[91,6183,147],{"class":97},[91,6185,6048],{"class":101},[91,6187,6188,6191,6193],{"class":93,"line":1198},[91,6189,6190],{"class":101},"    b",[91,6192,147],{"class":97},[91,6194,4258],{"class":101},[91,6196,6197,6199,6201,6204,6206,6208,6210],{"class":93,"line":1289},[91,6198,1529],{"class":101},[91,6200,1146],{"class":97},[91,6202,6203],{"class":206},"\"a=\"",[91,6205,1146],{"class":97},[91,6207,340],{"class":101},[91,6209,1146],{"class":97},[91,6211,1169],{"class":101},[91,6213,6214,6216,6218,6221,6223,6225,6227],{"class":93,"line":1295},[91,6215,1529],{"class":101},[91,6217,1146],{"class":97},[91,6219,6220],{"class":206},"\"b=\"",[91,6222,1146],{"class":97},[91,6224,365],{"class":101},[91,6226,1146],{"class":97},[91,6228,1169],{"class":101},[91,6230,6231],{"class":93,"line":1307},[91,6232,1543],{"class":101},[5105,6234,6235],{},"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":10,"searchDepth":11,"depth":11,"links":6237},[6238,6239,6240,6241,6242,6243],{"id":5151,"depth":11,"text":5152},{"id":5240,"depth":11,"text":5241},{"id":5323,"depth":11,"text":5324},{"id":5549,"depth":11,"text":5550},{"id":5898,"depth":11,"text":5899},{"id":6055,"depth":11,"text":6056},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5143,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6250,"title":6251,"body":6252,"description":6259,"extension":14,"meta":7664,"navigation":17,"path":7665,"seo":7666,"stem":7667,"__hash__":7668},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6253,"toc":7654},[6254,6257,6260,6264,6426,6430,6433,6436,6439,6442,6582,6586,6589,6592,6595,6660,6664,6669,6736,6739,6743,6746,6757,6762,6782,6785,6790,6809,6812,6816,6835,6838,6842,7077,7081,7084,7087,7090,7252,7255,7259,7262,7268,7651],[29,6255,6251],{"id":6256},"_3指针",[38,6258,6259],{},"通过指针保存一个地址，指针就是个地址",[33,6261,6263],{"id":6262},"_31定义指针","3.1定义指针",[83,6265,6267],{"className":85,"code":6266,"language":5,"meta":10,"style":10},"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",[88,6268,6269,6277,6281,6286,6298,6303,6311,6321,6339,6359,6363,6368,6373,6378,6392,6408,6422],{"__ignoreMap":10},[91,6270,6271,6273,6275],{"class":93,"line":94},[91,6272,105],{"class":97},[91,6274,1951],{"class":1941},[91,6276,1954],{"class":101},[91,6278,6279],{"class":93,"line":11},[91,6280,1524],{"class":101},[91,6282,6283],{"class":93,"line":1157},[91,6284,6285],{"class":160},"    \u002F\u002F1.定义指针\n",[91,6287,6288,6290,6292,6294,6296],{"class":93,"line":1172},[91,6289,1963],{"class":97},[91,6291,1376],{"class":101},[91,6293,147],{"class":97},[91,6295,548],{"class":150},[91,6297,1268],{"class":101},[91,6299,6300],{"class":93,"line":1178},[91,6301,6302],{"class":160},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[91,6304,6305,6308],{"class":93,"line":1192},[91,6306,6307],{"class":97},"    int*",[91,6309,6310],{"class":101},"p;\n",[91,6312,6313,6316,6319],{"class":93,"line":1198},[91,6314,6315],{"class":101},"    p",[91,6317,6318],{"class":97},"=&",[91,6320,6176],{"class":101},[91,6322,6323,6325,6327,6330,6333,6335,6337],{"class":93,"line":1289},[91,6324,1529],{"class":101},[91,6326,1146],{"class":97},[91,6328,6329],{"class":206},"\"a的地址为：\"",[91,6331,6332],{"class":97},"\u003C\u003C&",[91,6334,340],{"class":101},[91,6336,1146],{"class":97},[91,6338,1169],{"class":101},[91,6340,6341,6343,6345,6348,6350,6352,6354,6356],{"class":93,"line":1295},[91,6342,1529],{"class":101},[91,6344,1146],{"class":97},[91,6346,6347],{"class":206},"\"指针p为：\"",[91,6349,1146],{"class":97},[91,6351,38],{"class":101},[91,6353,1146],{"class":97},[91,6355,1216],{"class":101},[91,6357,6358],{"class":160},"\u002F\u002F指针p表示的就是a的地址\n",[91,6360,6361],{"class":93,"line":1307},[91,6362,2378],{"emptyLinePlaceholder":17},[91,6364,6365],{"class":93,"line":1590},[91,6366,6367],{"class":160},"    \u002F\u002F2.使用指针\n",[91,6369,6370],{"class":93,"line":1595},[91,6371,6372],{"class":160},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[91,6374,6375],{"class":93,"line":1601},[91,6376,6377],{"class":160},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[91,6379,6380,6383,6385,6387,6390],{"class":93,"line":1606},[91,6381,6382],{"class":97},"    *",[91,6384,38],{"class":101},[91,6386,147],{"class":97},[91,6388,6389],{"class":150},"1000",[91,6391,1268],{"class":101},[91,6393,6394,6396,6399,6401,6403,6405],{"class":93,"line":1620},[91,6395,1529],{"class":101},[91,6397,6398],{"class":97},"\u003C\u003C*",[91,6400,38],{"class":101},[91,6402,1146],{"class":97},[91,6404,1216],{"class":101},[91,6406,6407],{"class":160},"\u002F\u002F1000\n",[91,6409,6410,6412,6414,6416,6418,6420],{"class":93,"line":1625},[91,6411,1529],{"class":101},[91,6413,1146],{"class":97},[91,6415,340],{"class":101},[91,6417,1146],{"class":97},[91,6419,1216],{"class":101},[91,6421,6407],{"class":160},[91,6423,6424],{"class":93,"line":1631},[91,6425,1543],{"class":101},[33,6427,6429],{"id":6428},"_32指针所占的内存空间","3.2指针所占的内存空间",[38,6431,6432],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[38,6434,6435],{},"在32位操作系统下：占用4个字节空间",[38,6437,6438],{},"在64位操作系统下：占用8个字节空间",[38,6440,6441],{},"上方是不管啥数据类型的",[83,6443,6445],{"className":85,"code":6444,"language":5,"meta":10,"style":10},"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",[88,6446,6447,6455,6459,6464,6476,6481,6486,6491,6504,6526,6552,6578],{"__ignoreMap":10},[91,6448,6449,6451,6453],{"class":93,"line":94},[91,6450,105],{"class":97},[91,6452,1951],{"class":1941},[91,6454,1954],{"class":101},[91,6456,6457],{"class":93,"line":11},[91,6458,1524],{"class":101},[91,6460,6461],{"class":93,"line":1157},[91,6462,6463],{"class":160},"    \u002F\u002F指针所占内存空间\n",[91,6465,6466,6468,6470,6472,6474],{"class":93,"line":1172},[91,6467,1963],{"class":97},[91,6469,1376],{"class":101},[91,6471,147],{"class":97},[91,6473,548],{"class":150},[91,6475,1268],{"class":101},[91,6477,6478],{"class":93,"line":1178},[91,6479,6480],{"class":160},"    \u002F\u002Fint *p;\n",[91,6482,6483],{"class":93,"line":1192},[91,6484,6485],{"class":160},"    \u002F\u002Fp=&a;\n",[91,6487,6488],{"class":93,"line":1198},[91,6489,6490],{"class":160},"    \u002F\u002F上述可以写为以下：\n",[91,6492,6493,6495,6498,6500,6502],{"class":93,"line":1289},[91,6494,1963],{"class":97},[91,6496,6497],{"class":97}," *",[91,6499,38],{"class":101},[91,6501,6318],{"class":97},[91,6503,6176],{"class":101},[91,6505,6506,6509,6511,6514,6516,6519,6521,6523],{"class":93,"line":1295},[91,6507,6508],{"class":101},"    cout ",[91,6510,1146],{"class":97},[91,6512,6513],{"class":206},"\"sizeof(int *)\"",[91,6515,1350],{"class":97},[91,6517,6518],{"class":101},"(p)",[91,6520,1146],{"class":97},[91,6522,1216],{"class":101},[91,6524,6525],{"class":160},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[91,6527,6528,6530,6532,6534,6536,6538,6540,6542,6544,6546,6549],{"class":93,"line":1307},[91,6529,6508],{"class":101},[91,6531,1146],{"class":97},[91,6533,6513],{"class":206},[91,6535,1350],{"class":97},[91,6537,102],{"class":101},[91,6539,105],{"class":97},[91,6541,6497],{"class":97},[91,6543,531],{"class":101},[91,6545,1146],{"class":97},[91,6547,6548],{"class":101},"endl",[91,6550,6551],{"class":160},"  \u002F\u002F4字节(32位的话)\n",[91,6553,6554,6556,6558,6561,6563,6565,6567,6569,6571,6573,6575],{"class":93,"line":1590},[91,6555,6508],{"class":101},[91,6557,1146],{"class":97},[91,6559,6560],{"class":206},"\"sizeof(char *)\"",[91,6562,1350],{"class":97},[91,6564,102],{"class":101},[91,6566,198],{"class":97},[91,6568,6497],{"class":97},[91,6570,531],{"class":101},[91,6572,1146],{"class":97},[91,6574,1216],{"class":101},[91,6576,6577],{"class":160}," \u002F\u002F4字节(32位的话)\n",[91,6579,6580],{"class":93,"line":1595},[91,6581,1543],{"class":101},[33,6583,6585],{"id":6584},"_33空指针","3.3空指针",[38,6587,6588],{},"空指针：指针变量指向内存中编号为0的空间",[38,6590,6591],{},"用途：初始化指针变量",[38,6593,6594],{},"注意：空指针指向的内存是不可以访问的",[83,6596,6598],{"className":85,"code":6597,"language":5,"meta":10,"style":10},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[88,6599,6600,6608,6612,6617,6631,6636,6651,6656],{"__ignoreMap":10},[91,6601,6602,6604,6606],{"class":93,"line":94},[91,6603,105],{"class":97},[91,6605,1951],{"class":1941},[91,6607,1954],{"class":101},[91,6609,6610],{"class":93,"line":11},[91,6611,1524],{"class":101},[91,6613,6614],{"class":93,"line":1157},[91,6615,6616],{"class":160},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[91,6618,6619,6621,6623,6625,6627,6629],{"class":93,"line":1172},[91,6620,1963],{"class":97},[91,6622,6497],{"class":97},[91,6624,38],{"class":101},[91,6626,147],{"class":97},[91,6628,2370],{"class":150},[91,6630,1268],{"class":101},[91,6632,6633],{"class":93,"line":1178},[91,6634,6635],{"class":160},"    \u002F\u002F2.空指针不能进行访问\n",[91,6637,6638,6640,6642,6644,6646,6648],{"class":93,"line":1192},[91,6639,6382],{"class":97},[91,6641,38],{"class":101},[91,6643,147],{"class":97},[91,6645,413],{"class":150},[91,6647,157],{"class":101},[91,6649,6650],{"class":160},"\u002F\u002F直接报错，压根不能访问\n",[91,6652,6653],{"class":93,"line":1198},[91,6654,6655],{"class":160},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[91,6657,6658],{"class":93,"line":1289},[91,6659,1543],{"class":101},[33,6661,6663],{"id":6662},"_34野指针","3.4野指针",[38,6665,6666],{},[251,6667,6668],{},"指针变量指向非法的内存空间",[83,6670,6672],{"className":85,"code":6671,"language":5,"meta":10,"style":10},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[88,6673,6674,6682,6686,6715,6720,6732],{"__ignoreMap":10},[91,6675,6676,6678,6680],{"class":93,"line":94},[91,6677,105],{"class":97},[91,6679,1951],{"class":1941},[91,6681,1954],{"class":101},[91,6683,6684],{"class":93,"line":11},[91,6685,1524],{"class":101},[91,6687,6688,6690,6692,6694,6696,6698,6700,6702,6704,6707,6710,6712],{"class":93,"line":1157},[91,6689,1963],{"class":97},[91,6691,6497],{"class":97},[91,6693,38],{"class":101},[91,6695,147],{"class":97},[91,6697,102],{"class":101},[91,6699,105],{"class":97},[91,6701,6497],{"class":97},[91,6703,531],{"class":101},[91,6705,6706],{"class":97},"0x",[91,6708,6709],{"class":150},"1100",[91,6711,157],{"class":101},[91,6713,6714],{"class":160}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[91,6716,6717],{"class":93,"line":1172},[91,6718,6719],{"class":160},"    \u002F\u002F访问野指针报错\n",[91,6721,6722,6724,6726,6728,6730],{"class":93,"line":1178},[91,6723,1529],{"class":101},[91,6725,6398],{"class":97},[91,6727,38],{"class":101},[91,6729,1146],{"class":97},[91,6731,1169],{"class":101},[91,6733,6734],{"class":93,"line":1192},[91,6735,1543],{"class":101},[38,6737,6738],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[33,6740,6742],{"id":6741},"_35const修饰指针","3.5const修饰指针",[38,6744,6745],{},"三种情况：",[1109,6747,6748,6751,6754],{},[49,6749,6750],{},"const修饰指针 常量指针",[49,6752,6753],{},"const修饰常量 指针常量",[49,6755,6756],{},"const即修饰指针，又修饰常量",[46,6758,6759],{},[49,6760,6761],{},"常量指针",[83,6763,6765],{"className":85,"code":6764,"language":5,"meta":10,"style":10},"const int *p=&a;\n",[88,6766,6767],{"__ignoreMap":10},[91,6768,6769,6772,6774,6776,6778,6780],{"class":93,"line":94},[91,6770,6771],{"class":97},"const",[91,6773,2360],{"class":97},[91,6775,6497],{"class":97},[91,6777,38],{"class":101},[91,6779,6318],{"class":97},[91,6781,6176],{"class":101},[38,6783,6784],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[46,6786,6787],{"start":11},[49,6788,6789],{},"指针常量",[83,6791,6793],{"className":85,"code":6792,"language":5,"meta":10,"style":10},"int *const p=&a;\n",[88,6794,6795],{"__ignoreMap":10},[91,6796,6797,6799,6802,6805,6807],{"class":93,"line":94},[91,6798,105],{"class":97},[91,6800,6801],{"class":97}," *const",[91,6803,6804],{"class":101}," p",[91,6806,6318],{"class":97},[91,6808,6176],{"class":101},[38,6810,6811],{},"指针的指向不可以改，指针指向的值可以改",[46,6813,6814],{"start":1157},[49,6815,6756],{},[83,6817,6819],{"className":85,"code":6818,"language":5,"meta":10,"style":10},"const int *const p=&a;\n",[88,6820,6821],{"__ignoreMap":10},[91,6822,6823,6825,6827,6829,6831,6833],{"class":93,"line":94},[91,6824,6771],{"class":97},[91,6826,2360],{"class":97},[91,6828,6801],{"class":97},[91,6830,6804],{"class":101},[91,6832,6318],{"class":97},[91,6834,6176],{"class":101},[38,6836,6837],{},"指针的指向和指针指向的值都不可以改变",[33,6839,6841],{"id":6840},"_36指针和数组","3.6指针和数组",[83,6843,6845],{"className":85,"code":6844,"language":5,"meta":10,"style":10},"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",[88,6846,6847,6855,6859,6864,6918,6939,6955,6971,6982,6999,7004,7018,7044,7048,7060,7069,7073],{"__ignoreMap":10},[91,6848,6849,6851,6853],{"class":93,"line":94},[91,6850,105],{"class":97},[91,6852,1951],{"class":1941},[91,6854,1954],{"class":101},[91,6856,6857],{"class":93,"line":11},[91,6858,1524],{"class":101},[91,6860,6861],{"class":93,"line":1157},[91,6862,6863],{"class":160},"    \u002F\u002F利用指针访问数组中的元素\n",[91,6865,6866,6868,6870,6872,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916],{"class":93,"line":1172},[91,6867,1963],{"class":97},[91,6869,3940],{"class":101},[91,6871,548],{"class":150},[91,6873,1042],{"class":101},[91,6875,147],{"class":97},[91,6877,998],{"class":101},[91,6879,319],{"class":150},[91,6881,480],{"class":101},[91,6883,179],{"class":150},[91,6885,480],{"class":101},[91,6887,173],{"class":150},[91,6889,480],{"class":101},[91,6891,395],{"class":150},[91,6893,480],{"class":101},[91,6895,421],{"class":150},[91,6897,480],{"class":101},[91,6899,446],{"class":150},[91,6901,480],{"class":101},[91,6903,471],{"class":150},[91,6905,480],{"class":101},[91,6907,497],{"class":150},[91,6909,480],{"class":101},[91,6911,522],{"class":150},[91,6913,480],{"class":101},[91,6915,548],{"class":150},[91,6917,3973],{"class":101},[91,6919,6920,6922,6924,6927,6929,6931,6933,6935,6937],{"class":93,"line":1178},[91,6921,1529],{"class":101},[91,6923,1146],{"class":97},[91,6925,6926],{"class":206},"\"数组的第一个元素为：\"",[91,6928,1146],{"class":97},[91,6930,3884],{"class":101},[91,6932,293],{"class":150},[91,6934,1042],{"class":101},[91,6936,1146],{"class":97},[91,6938,1169],{"class":101},[91,6940,6941,6943,6945,6947,6949,6952],{"class":93,"line":1192},[91,6942,1963],{"class":97},[91,6944,6497],{"class":97},[91,6946,38],{"class":101},[91,6948,147],{"class":97},[91,6950,6951],{"class":101},"arr;",[91,6953,6954],{"class":160},"\u002F\u002F注意数才要加取地址符号&\n",[91,6956,6957,6959,6961,6963,6965,6967,6969],{"class":93,"line":1198},[91,6958,1529],{"class":101},[91,6960,1146],{"class":97},[91,6962,6926],{"class":206},[91,6964,6398],{"class":97},[91,6966,38],{"class":101},[91,6968,1146],{"class":97},[91,6970,1169],{"class":101},[91,6972,6973,6975,6977,6979],{"class":93,"line":1289},[91,6974,6315],{"class":101},[91,6976,2270],{"class":97},[91,6978,157],{"class":101},[91,6980,6981],{"class":160}," \u002F\u002F让指针向后偏移4个字节\n",[91,6983,6984,6986,6988,6991,6993,6995,6997],{"class":93,"line":1295},[91,6985,1529],{"class":101},[91,6987,1146],{"class":97},[91,6989,6990],{"class":206},"\"数组的第二个元素为：\"",[91,6992,6398],{"class":97},[91,6994,38],{"class":101},[91,6996,1146],{"class":97},[91,6998,1169],{"class":101},[91,7000,7001],{"class":93,"line":1307},[91,7002,7003],{"class":160},"    \u002F\u002F利用指针遍历数组\n",[91,7005,7006,7008,7010,7013,7015],{"class":93,"line":1590},[91,7007,1963],{"class":97},[91,7009,6497],{"class":97},[91,7011,7012],{"class":101},"p2",[91,7014,147],{"class":97},[91,7016,7017],{"class":101},"arr;\n",[91,7019,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040,7042],{"class":93,"line":1595},[91,7021,3179],{"class":97},[91,7023,1636],{"class":101},[91,7025,105],{"class":97},[91,7027,3010],{"class":101},[91,7029,147],{"class":97},[91,7031,293],{"class":150},[91,7033,3017],{"class":101},[91,7035,1012],{"class":97},[91,7037,548],{"class":150},[91,7039,3017],{"class":101},[91,7041,2270],{"class":97},[91,7043,108],{"class":101},[91,7045,7046],{"class":93,"line":1601},[91,7047,2008],{"class":101},[91,7049,7050,7052,7054,7056,7058],{"class":93,"line":1606},[91,7051,3429],{"class":101},[91,7053,6398],{"class":97},[91,7055,7012],{"class":101},[91,7057,1146],{"class":97},[91,7059,1169],{"class":101},[91,7061,7062,7065,7067],{"class":93,"line":1620},[91,7063,7064],{"class":101},"        p2",[91,7066,2270],{"class":97},[91,7068,1268],{"class":101},[91,7070,7071],{"class":93,"line":1625},[91,7072,2165],{"class":101},[91,7074,7075],{"class":93,"line":1631},[91,7076,1543],{"class":101},[33,7078,7080],{"id":7079},"_37指针和函数","3.7指针和函数",[38,7082,7083],{},"利用指针做函数参数，可以修改实参的值",[38,7085,7086],{},"值传递：只改变形参，不改变实参",[38,7088,7089],{},"地址传递：",[83,7091,7093],{"className":85,"code":7092,"language":5,"meta":10,"style":10},"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",[88,7094,7095,7120,7124,7136,7147,7157,7161,7169,7173,7185,7197,7202,7218,7233,7248],{"__ignoreMap":10},[91,7096,7097,7099,7101,7103,7105,7107,7110,7112,7114,7116,7118],{"class":93,"line":94},[91,7098,5343],{"class":97},[91,7100,5346],{"class":1941},[91,7102,102],{"class":101},[91,7104,105],{"class":97},[91,7106,6497],{"class":97},[91,7108,7109],{"class":5195},"p1",[91,7111,480],{"class":101},[91,7113,105],{"class":97},[91,7115,6497],{"class":97},[91,7117,7012],{"class":5195},[91,7119,108],{"class":101},[91,7121,7122],{"class":93,"line":11},[91,7123,1524],{"class":101},[91,7125,7126,7128,7130,7133],{"class":93,"line":1157},[91,7127,1963],{"class":97},[91,7129,4233],{"class":101},[91,7131,7132],{"class":97},"=*",[91,7134,7135],{"class":101},"p1;\n",[91,7137,7138,7140,7142,7144],{"class":93,"line":1172},[91,7139,6382],{"class":97},[91,7141,7109],{"class":101},[91,7143,7132],{"class":97},[91,7145,7146],{"class":101},"p2;\n",[91,7148,7149,7151,7153,7155],{"class":93,"line":1178},[91,7150,6382],{"class":97},[91,7152,7012],{"class":101},[91,7154,147],{"class":97},[91,7156,4258],{"class":101},[91,7158,7159],{"class":93,"line":1192},[91,7160,1543],{"class":101},[91,7162,7163,7165,7167],{"class":93,"line":1198},[91,7164,105],{"class":97},[91,7166,1951],{"class":1941},[91,7168,1954],{"class":101},[91,7170,7171],{"class":93,"line":1289},[91,7172,1524],{"class":101},[91,7174,7175,7177,7179,7181,7183],{"class":93,"line":1295},[91,7176,1963],{"class":97},[91,7178,1376],{"class":101},[91,7180,147],{"class":97},[91,7182,548],{"class":150},[91,7184,1268],{"class":101},[91,7186,7187,7189,7191,7193,7195],{"class":93,"line":1307},[91,7188,1963],{"class":97},[91,7190,2811],{"class":101},[91,7192,147],{"class":97},[91,7194,802],{"class":150},[91,7196,1268],{"class":101},[91,7198,7199],{"class":93,"line":1590},[91,7200,7201],{"class":160},"    \u002F\u002F地址传递\n",[91,7203,7204,7206,7208,7210,7213,7215],{"class":93,"line":1595},[91,7205,5540],{"class":1941},[91,7207,102],{"class":101},[91,7209,455],{"class":97},[91,7211,7212],{"class":101},"a,",[91,7214,455],{"class":97},[91,7216,7217],{"class":101},"b);\n",[91,7219,7220,7222,7224,7226,7228,7230],{"class":93,"line":1601},[91,7221,1529],{"class":101},[91,7223,1146],{"class":97},[91,7225,340],{"class":101},[91,7227,1146],{"class":97},[91,7229,1216],{"class":101},[91,7231,7232],{"class":160},"\u002F\u002F20\n",[91,7234,7235,7237,7239,7241,7243,7245],{"class":93,"line":1606},[91,7236,1529],{"class":101},[91,7238,1146],{"class":97},[91,7240,365],{"class":101},[91,7242,1146],{"class":97},[91,7244,1216],{"class":101},[91,7246,7247],{"class":160},"\u002F\u002F10\n",[91,7249,7250],{"class":93,"line":1620},[91,7251,1543],{"class":101},[38,7253,7254],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[33,7256,7258],{"id":7257},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[38,7260,7261],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[38,7263,7264,7265,7267],{},"例如数组：int arr",[91,7266,548],{},"={4,3,6,9,1,2,10,8,7,5}",[83,7269,7271],{"className":85,"code":7270,"language":5,"meta":10,"style":10},"#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",[88,7272,7273,7279,7289,7313,7317,7348,7352,7386,7390,7408,7412,7423,7438,7453,7457,7461,7465,7469,7473,7481,7485,7490,7544,7556,7568,7573,7581,7585,7590,7615,7619,7634,7643,7647],{"__ignoreMap":10},[91,7274,7275,7277],{"class":93,"line":94},[91,7276,1927],{"class":97},[91,7278,1930],{"class":206},[91,7280,7281,7283,7285,7287],{"class":93,"line":11},[91,7282,1935],{"class":97},[91,7284,1938],{"class":97},[91,7286,1942],{"class":1941},[91,7288,1268],{"class":101},[91,7290,7291,7293,7296,7298,7300,7302,7304,7306,7308,7311],{"class":93,"line":1157},[91,7292,5343],{"class":97},[91,7294,7295],{"class":1941}," bubbleSort",[91,7297,102],{"class":101},[91,7299,105],{"class":97},[91,7301,6497],{"class":97},[91,7303,38],{"class":5195},[91,7305,480],{"class":101},[91,7307,105],{"class":97},[91,7309,7310],{"class":5195}," len",[91,7312,108],{"class":101},[91,7314,7315],{"class":93,"line":1172},[91,7316,1524],{"class":101},[91,7318,7319,7321,7323,7325,7327,7329,7331,7333,7335,7338,7340,7342,7344,7346],{"class":93,"line":1178},[91,7320,3179],{"class":97},[91,7322,102],{"class":101},[91,7324,105],{"class":97},[91,7326,3010],{"class":101},[91,7328,147],{"class":97},[91,7330,293],{"class":150},[91,7332,3017],{"class":101},[91,7334,1012],{"class":97},[91,7336,7337],{"class":101},"len",[91,7339,634],{"class":97},[91,7341,319],{"class":150},[91,7343,3017],{"class":101},[91,7345,2270],{"class":97},[91,7347,108],{"class":101},[91,7349,7350],{"class":93,"line":1192},[91,7351,2008],{"class":101},[91,7353,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372,7374,7376,7378,7380,7382,7384],{"class":93,"line":1198},[91,7355,3381],{"class":97},[91,7357,102],{"class":101},[91,7359,105],{"class":97},[91,7361,3388],{"class":101},[91,7363,147],{"class":97},[91,7365,293],{"class":150},[91,7367,3395],{"class":101},[91,7369,1012],{"class":97},[91,7371,7337],{"class":101},[91,7373,634],{"class":97},[91,7375,543],{"class":101},[91,7377,634],{"class":97},[91,7379,319],{"class":150},[91,7381,3395],{"class":101},[91,7383,2270],{"class":97},[91,7385,108],{"class":101},[91,7387,7388],{"class":93,"line":1289},[91,7389,2488],{"class":101},[91,7391,7392,7394,7397,7399,7402,7404,7406],{"class":93,"line":1295},[91,7393,4620],{"class":97},[91,7395,7396],{"class":101},"(p[j]",[91,7398,1062],{"class":97},[91,7400,7401],{"class":101},"p[j",[91,7403,583],{"class":97},[91,7405,319],{"class":150},[91,7407,4635],{"class":101},[91,7409,7410],{"class":93,"line":1307},[91,7411,4640],{"class":101},[91,7413,7414,7416,7418,7420],{"class":93,"line":1590},[91,7415,4645],{"class":97},[91,7417,4233],{"class":101},[91,7419,147],{"class":97},[91,7421,7422],{"class":101},"p[j];\n",[91,7424,7425,7428,7430,7432,7434,7436],{"class":93,"line":1595},[91,7426,7427],{"class":101},"                p[j]",[91,7429,147],{"class":97},[91,7431,7401],{"class":101},[91,7433,583],{"class":97},[91,7435,319],{"class":150},[91,7437,4668],{"class":101},[91,7439,7440,7443,7445,7447,7449,7451],{"class":93,"line":1601},[91,7441,7442],{"class":101},"                p[j",[91,7444,583],{"class":97},[91,7446,319],{"class":150},[91,7448,1042],{"class":101},[91,7450,147],{"class":97},[91,7452,4258],{"class":101},[91,7454,7455],{"class":93,"line":1606},[91,7456,4688],{"class":101},[91,7458,7459],{"class":93,"line":1620},[91,7460,2507],{"class":101},[91,7462,7463],{"class":93,"line":1625},[91,7464,2165],{"class":101},[91,7466,7467],{"class":93,"line":1631},[91,7468,1543],{"class":101},[91,7470,7471],{"class":93,"line":1652},[91,7472,2378],{"emptyLinePlaceholder":17},[91,7474,7475,7477,7479],{"class":93,"line":1657},[91,7476,105],{"class":97},[91,7478,1951],{"class":1941},[91,7480,1954],{"class":101},[91,7482,7483],{"class":93,"line":1671},[91,7484,1524],{"class":101},[91,7486,7487],{"class":93,"line":1676},[91,7488,7489],{"class":160},"    \u002F\u002F 1.创建数组\n",[91,7491,7492,7494,7496,7498,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542],{"class":93,"line":1705},[91,7493,1963],{"class":97},[91,7495,3940],{"class":101},[91,7497,548],{"class":150},[91,7499,1042],{"class":101},[91,7501,147],{"class":97},[91,7503,998],{"class":101},[91,7505,395],{"class":150},[91,7507,480],{"class":101},[91,7509,173],{"class":150},[91,7511,480],{"class":101},[91,7513,446],{"class":150},[91,7515,480],{"class":101},[91,7517,522],{"class":150},[91,7519,480],{"class":101},[91,7521,319],{"class":150},[91,7523,480],{"class":101},[91,7525,179],{"class":150},[91,7527,480],{"class":101},[91,7529,548],{"class":150},[91,7531,480],{"class":101},[91,7533,497],{"class":150},[91,7535,480],{"class":101},[91,7537,471],{"class":150},[91,7539,480],{"class":101},[91,7541,421],{"class":150},[91,7543,3973],{"class":101},[91,7545,7546,7548,7550,7552,7554],{"class":93,"line":1710},[91,7547,1963],{"class":97},[91,7549,7310],{"class":101},[91,7551,147],{"class":97},[91,7553,548],{"class":150},[91,7555,1268],{"class":101},[91,7557,7558,7560,7562,7564,7566],{"class":93,"line":1727},[91,7559,1963],{"class":97},[91,7561,6497],{"class":97},[91,7563,38],{"class":101},[91,7565,147],{"class":97},[91,7567,7017],{"class":101},[91,7569,7570],{"class":93,"line":1732},[91,7571,7572],{"class":160},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[91,7574,7575,7578],{"class":93,"line":1737},[91,7576,7577],{"class":1941},"    bubbleSort",[91,7579,7580],{"class":101},"(p,len);\n",[91,7582,7583],{"class":93,"line":1742},[91,7584,2378],{"emptyLinePlaceholder":17},[91,7586,7587],{"class":93,"line":1756},[91,7588,7589],{"class":160},"    \u002F\u002F 3.打印排序后的数组\n",[91,7591,7592,7594,7596,7598,7600,7602,7604,7606,7608,7611,7613],{"class":93,"line":1761},[91,7593,3179],{"class":97},[91,7595,1636],{"class":101},[91,7597,105],{"class":97},[91,7599,3010],{"class":101},[91,7601,147],{"class":97},[91,7603,293],{"class":150},[91,7605,3192],{"class":101},[91,7607,1012],{"class":97},[91,7609,7610],{"class":101},"len; i",[91,7612,2270],{"class":97},[91,7614,108],{"class":101},[91,7616,7617],{"class":93,"line":2555},[91,7618,2008],{"class":101},[91,7620,7621,7623,7625,7627,7629,7632],{"class":93,"line":2569},[91,7622,3429],{"class":101},[91,7624,6398],{"class":97},[91,7626,38],{"class":101},[91,7628,1146],{"class":97},[91,7630,7631],{"class":206},"\"\"",[91,7633,1268],{"class":101},[91,7635,7636,7639,7641],{"class":93,"line":2577},[91,7637,7638],{"class":101},"        p",[91,7640,2270],{"class":97},[91,7642,1268],{"class":101},[91,7644,7645],{"class":93,"line":2582},[91,7646,2165],{"class":101},[91,7648,7649],{"class":93,"line":2588},[91,7650,1543],{"class":101},[5105,7652,7653],{},"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":10,"searchDepth":11,"depth":11,"links":7655},[7656,7657,7658,7659,7660,7661,7662,7663],{"id":6262,"depth":11,"text":6263},{"id":6428,"depth":11,"text":6429},{"id":6584,"depth":11,"text":6585},{"id":6662,"depth":11,"text":6663},{"id":6741,"depth":11,"text":6742},{"id":6840,"depth":11,"text":6841},{"id":7079,"depth":11,"text":7080},{"id":7257,"depth":11,"text":7258},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6251,"description":6259},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7670,"title":7671,"body":7672,"description":7679,"extension":14,"meta":10653,"navigation":17,"path":10654,"seo":10655,"stem":10656,"__hash__":10657},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7673,"toc":10644},[7674,7677,7680,7684,7687,7690,7701,8039,8042,8046,8049,8056,8311,8315,8318,8321,8476,8480,8483,8486,8692,8696,8699,9002,9005,9013,9017,9020,9171,9173,9184,9241,9245,9250,9907,9915,9918,10012,10015,10635,10641],[29,7675,7671],{"id":7676},"_4结构体",[38,7678,7679],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[33,7681,7683],{"id":7682},"_41结构体定义与使用","4.1结构体定义与使用",[38,7685,7686],{},"语法：struct 结构体名 {结构体成员列表}；",[38,7688,7689],{},"通过结构体创建变量的方式：",[1109,7691,7692,7695,7698],{},[49,7693,7694],{},"struct 结构体名 变量名",[49,7696,7697],{},"struct 结构体名 变量名={成员1值，成员2值...}",[49,7699,7700],{},"定义结构体时顺便创建变量",[83,7702,7704],{"className":85,"code":7703,"language":5,"meta":10,"style":10},"#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",[88,7705,7706,7712,7722,7729,7734,7742,7746,7751,7755,7760,7765,7770,7777,7782,7789,7793,7800,7804,7808,7812,7816,7820,7824,7830,7834,7840,7848,7856,7860,7865,7870,7881,7886,7898,7909,7920,7925,7949,7954,7960,7987,7992,7998,8010,8022,8034],{"__ignoreMap":10},[91,7707,7708,7710],{"class":93,"line":94},[91,7709,1927],{"class":97},[91,7711,1930],{"class":206},[91,7713,7714,7716,7718,7720],{"class":93,"line":11},[91,7715,1935],{"class":97},[91,7717,1938],{"class":97},[91,7719,1942],{"class":1941},[91,7721,1268],{"class":101},[91,7723,7724,7726],{"class":93,"line":1157},[91,7725,1927],{"class":97},[91,7727,7728],{"class":206},"\u003Cstring>\n",[91,7730,7731],{"class":93,"line":1172},[91,7732,7733],{"class":160},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[91,7735,7736,7739],{"class":93,"line":1178},[91,7737,7738],{"class":97},"struct",[91,7740,7741],{"class":1941}," Student\n",[91,7743,7744],{"class":93,"line":1192},[91,7745,1524],{"class":101},[91,7747,7748],{"class":93,"line":1198},[91,7749,7750],{"class":160},"    \u002F\u002F成员列表\n",[91,7752,7753],{"class":93,"line":1289},[91,7754,2378],{"emptyLinePlaceholder":17},[91,7756,7757],{"class":93,"line":1295},[91,7758,7759],{"class":160},"    \u002F\u002F姓名\n",[91,7761,7762],{"class":93,"line":1307},[91,7763,7764],{"class":101},"    string name;\n",[91,7766,7767],{"class":93,"line":1590},[91,7768,7769],{"class":160},"    \u002F\u002F年龄\n",[91,7771,7772,7774],{"class":93,"line":1595},[91,7773,1963],{"class":97},[91,7775,7776],{"class":101}," age;\n",[91,7778,7779],{"class":93,"line":1601},[91,7780,7781],{"class":160},"    \u002F\u002F分数\n",[91,7783,7784,7786],{"class":93,"line":1606},[91,7785,1963],{"class":97},[91,7787,7788],{"class":101}," score;\n",[91,7790,7791],{"class":93,"line":1620},[91,7792,3973],{"class":101},[91,7794,7795,7797],{"class":93,"line":1625},[91,7796,7738],{"class":97},[91,7798,7799],{"class":1941}," School\n",[91,7801,7802],{"class":93,"line":1631},[91,7803,1524],{"class":101},[91,7805,7806],{"class":93,"line":1652},[91,7807,7750],{"class":160},[91,7809,7810],{"class":93,"line":1657},[91,7811,2378],{"emptyLinePlaceholder":17},[91,7813,7814],{"class":93,"line":1671},[91,7815,7759],{"class":160},[91,7817,7818],{"class":93,"line":1676},[91,7819,7764],{"class":101},[91,7821,7822],{"class":93,"line":1705},[91,7823,7769],{"class":160},[91,7825,7826,7828],{"class":93,"line":1710},[91,7827,1963],{"class":97},[91,7829,7776],{"class":101},[91,7831,7832],{"class":93,"line":1727},[91,7833,7781],{"class":160},[91,7835,7836,7838],{"class":93,"line":1732},[91,7837,1963],{"class":97},[91,7839,7788],{"class":101},[91,7841,7842,7845],{"class":93,"line":1737},[91,7843,7844],{"class":101},"} s3;",[91,7846,7847],{"class":160}," \u002F\u002F创建结构体时就创建了变量\n",[91,7849,7850,7852,7854],{"class":93,"line":1742},[91,7851,105],{"class":97},[91,7853,1951],{"class":1941},[91,7855,1954],{"class":101},[91,7857,7858],{"class":93,"line":1756},[91,7859,1524],{"class":101},[91,7861,7862],{"class":93,"line":1761},[91,7863,7864],{"class":160},"    \u002F\u002F2.通过学生类型创建具体学生\n",[91,7866,7867],{"class":93,"line":2555},[91,7868,7869],{"class":160},"    \u002F\u002F2.1 struct Student s1;\n",[91,7871,7872,7875,7878],{"class":93,"line":2569},[91,7873,7874],{"class":97},"    struct",[91,7876,7877],{"class":1941}," Student",[91,7879,7880],{"class":101}," s1;\n",[91,7882,7883],{"class":93,"line":2577},[91,7884,7885],{"class":160},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[91,7887,7888,7891,7893,7896],{"class":93,"line":2582},[91,7889,7890],{"class":101},"    s1.name",[91,7892,147],{"class":97},[91,7894,7895],{"class":206},"\"张三\"",[91,7897,1268],{"class":101},[91,7899,7900,7903,7905,7907],{"class":93,"line":2588},[91,7901,7902],{"class":101},"    s1.age",[91,7904,147],{"class":97},[91,7906,752],{"class":150},[91,7908,1268],{"class":101},[91,7910,7911,7914,7916,7918],{"class":93,"line":2594},[91,7912,7913],{"class":101},"    s1.score",[91,7915,147],{"class":97},[91,7917,356],{"class":150},[91,7919,1268],{"class":101},[91,7921,7922],{"class":93,"line":2599},[91,7923,7924],{"class":160},"    \u002F\u002F输出结果\n",[91,7926,7928,7930,7932,7935,7937,7940,7942,7945,7947],{"class":93,"line":7927},37,[91,7929,1529],{"class":101},[91,7931,1146],{"class":97},[91,7933,7934],{"class":101},"s1.name",[91,7936,1146],{"class":97},[91,7938,7939],{"class":101},"s1.age",[91,7941,1146],{"class":97},[91,7943,7944],{"class":101},"s1.score",[91,7946,1146],{"class":97},[91,7948,1169],{"class":101},[91,7950,7952],{"class":93,"line":7951},38,[91,7953,2378],{"emptyLinePlaceholder":17},[91,7955,7957],{"class":93,"line":7956},39,[91,7958,7959],{"class":160},"    \u002F\u002F2.2 struct Student s2={...}\n",[91,7961,7963,7965,7967,7970,7972,7974,7977,7979,7981,7983,7985],{"class":93,"line":7962},40,[91,7964,7874],{"class":97},[91,7966,7877],{"class":1941},[91,7968,7969],{"class":101}," s2",[91,7971,147],{"class":97},[91,7973,998],{"class":101},[91,7975,7976],{"class":206},"\"王五\"",[91,7978,480],{"class":101},[91,7980,752],{"class":150},[91,7982,480],{"class":101},[91,7984,356],{"class":150},[91,7986,3973],{"class":101},[91,7988,7990],{"class":93,"line":7989},41,[91,7991,2378],{"emptyLinePlaceholder":17},[91,7993,7995],{"class":93,"line":7994},42,[91,7996,7997],{"class":160},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[91,7999,8001,8004,8006,8008],{"class":93,"line":8000},43,[91,8002,8003],{"class":101},"    s3.name",[91,8005,147],{"class":97},[91,8007,3656],{"class":206},[91,8009,1268],{"class":101},[91,8011,8013,8016,8018,8020],{"class":93,"line":8012},44,[91,8014,8015],{"class":101},"    s3.age",[91,8017,147],{"class":97},[91,8019,752],{"class":150},[91,8021,1268],{"class":101},[91,8023,8025,8028,8030,8032],{"class":93,"line":8024},45,[91,8026,8027],{"class":101},"    s3.score",[91,8029,147],{"class":97},[91,8031,802],{"class":150},[91,8033,1268],{"class":101},[91,8035,8037],{"class":93,"line":8036},46,[91,8038,1543],{"class":101},[38,8040,8041],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[33,8043,8045],{"id":8044},"_42结构体数组","4.2结构体数组",[38,8047,8048],{},"将自定义的结构体放入到数组中方便维护",[38,8050,8051,8052,8055],{},"语法：struct 结构体名 数组名",[91,8053,8054],{},"元素个数","={ {}，{},...{} };",[83,8057,8059],{"className":85,"code":8058,"language":5,"meta":10,"style":10},"#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",[88,8060,8061,8067,8077,8083,8088,8094,8098,8102,8108,8114,8118,8122,8130,8134,8139,8154,8158,8174,8190,8194,8199,8215,8230,8245,8250,8276,8280,8303,8307],{"__ignoreMap":10},[91,8062,8063,8065],{"class":93,"line":94},[91,8064,1927],{"class":97},[91,8066,1930],{"class":206},[91,8068,8069,8071,8073,8075],{"class":93,"line":11},[91,8070,1935],{"class":97},[91,8072,1938],{"class":97},[91,8074,1942],{"class":1941},[91,8076,1268],{"class":101},[91,8078,8079,8081],{"class":93,"line":1157},[91,8080,1927],{"class":97},[91,8082,7728],{"class":206},[91,8084,8085],{"class":93,"line":1172},[91,8086,8087],{"class":160},"\u002F\u002F1.定义结构体\n",[91,8089,8090,8092],{"class":93,"line":1178},[91,8091,7738],{"class":97},[91,8093,7741],{"class":1941},[91,8095,8096],{"class":93,"line":1192},[91,8097,1524],{"class":101},[91,8099,8100],{"class":93,"line":1198},[91,8101,7764],{"class":101},[91,8103,8104,8106],{"class":93,"line":1289},[91,8105,1963],{"class":97},[91,8107,7776],{"class":101},[91,8109,8110,8112],{"class":93,"line":1295},[91,8111,1963],{"class":97},[91,8113,7788],{"class":101},[91,8115,8116],{"class":93,"line":1307},[91,8117,2378],{"emptyLinePlaceholder":17},[91,8119,8120],{"class":93,"line":1590},[91,8121,3973],{"class":101},[91,8123,8124,8126,8128],{"class":93,"line":1595},[91,8125,105],{"class":97},[91,8127,1951],{"class":1941},[91,8129,1954],{"class":101},[91,8131,8132],{"class":93,"line":1601},[91,8133,1524],{"class":101},[91,8135,8136],{"class":93,"line":1606},[91,8137,8138],{"class":160},"    \u002F\u002F2.创建结构体数组\n",[91,8140,8141,8143,8145,8148,8150,8152],{"class":93,"line":1620},[91,8142,7874],{"class":97},[91,8144,7877],{"class":1941},[91,8146,8147],{"class":101}," stuArray[",[91,8149,179],{"class":150},[91,8151,1042],{"class":101},[91,8153,4886],{"class":97},[91,8155,8156],{"class":93,"line":1625},[91,8157,2008],{"class":101},[91,8159,8160,8162,8164,8166,8168,8170,8172],{"class":93,"line":1631},[91,8161,4895],{"class":101},[91,8163,7895],{"class":206},[91,8165,480],{"class":101},[91,8167,752],{"class":150},[91,8169,480],{"class":101},[91,8171,413],{"class":150},[91,8173,4908],{"class":101},[91,8175,8176,8178,8180,8182,8184,8186,8188],{"class":93,"line":1652},[91,8177,4895],{"class":101},[91,8179,3656],{"class":206},[91,8181,480],{"class":101},[91,8183,677],{"class":150},[91,8185,480],{"class":101},[91,8187,677],{"class":150},[91,8189,1543],{"class":101},[91,8191,8192],{"class":93,"line":1657},[91,8193,2165],{"class":101},[91,8195,8196],{"class":93,"line":1671},[91,8197,8198],{"class":160},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[91,8200,8201,8204,8206,8209,8211,8213],{"class":93,"line":1676},[91,8202,8203],{"class":101},"    stuArray[",[91,8205,319],{"class":150},[91,8207,8208],{"class":101},"].name",[91,8210,147],{"class":97},[91,8212,3679],{"class":206},[91,8214,1268],{"class":101},[91,8216,8217,8219,8221,8224,8226,8228],{"class":93,"line":1705},[91,8218,8203],{"class":101},[91,8220,319],{"class":150},[91,8222,8223],{"class":101},"].age",[91,8225,147],{"class":97},[91,8227,179],{"class":150},[91,8229,1268],{"class":101},[91,8231,8232,8234,8236,8239,8241,8243],{"class":93,"line":1710},[91,8233,8203],{"class":101},[91,8235,319],{"class":150},[91,8237,8238],{"class":101},"].score",[91,8240,147],{"class":97},[91,8242,179],{"class":150},[91,8244,1268],{"class":101},[91,8246,8247],{"class":93,"line":1727},[91,8248,8249],{"class":160},"    \u002F\u002F4.遍历结构体数组\n",[91,8251,8252,8254,8256,8258,8260,8262,8264,8266,8268,8270,8272,8274],{"class":93,"line":1732},[91,8253,3179],{"class":97},[91,8255,1636],{"class":101},[91,8257,105],{"class":97},[91,8259,3010],{"class":101},[91,8261,147],{"class":97},[91,8263,293],{"class":150},[91,8265,3017],{"class":101},[91,8267,1012],{"class":97},[91,8269,179],{"class":150},[91,8271,3017],{"class":101},[91,8273,2270],{"class":97},[91,8275,108],{"class":101},[91,8277,8278],{"class":93,"line":1737},[91,8279,2008],{"class":101},[91,8281,8282,8284,8286,8289,8291,8294,8296,8299,8301],{"class":93,"line":1742},[91,8283,3429],{"class":101},[91,8285,1146],{"class":97},[91,8287,8288],{"class":101},"stuArray[i].name",[91,8290,1146],{"class":97},[91,8292,8293],{"class":101},"stuArray[i].age",[91,8295,1146],{"class":97},[91,8297,8298],{"class":101},"stuArray[i].score",[91,8300,1146],{"class":97},[91,8302,1169],{"class":101},[91,8304,8305],{"class":93,"line":1756},[91,8306,2165],{"class":101},[91,8308,8309],{"class":93,"line":1761},[91,8310,1543],{"class":101},[33,8312,8314],{"id":8313},"_43结构体指针","4.3结构体指针",[38,8316,8317],{},"作用：通过指针访问结构体中的成员",[38,8319,8320],{},"利用操作符->可以通过结构体指针访问结构体属性",[83,8322,8324],{"className":85,"code":8323,"language":5,"meta":10,"style":10},"#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",[88,8325,8326,8332,8342,8348,8352,8358,8362,8366,8372,8378,8382,8390,8394,8399,8424,8429,8444,8449,8472],{"__ignoreMap":10},[91,8327,8328,8330],{"class":93,"line":94},[91,8329,1927],{"class":97},[91,8331,1930],{"class":206},[91,8333,8334,8336,8338,8340],{"class":93,"line":11},[91,8335,1935],{"class":97},[91,8337,1938],{"class":97},[91,8339,1942],{"class":1941},[91,8341,1268],{"class":101},[91,8343,8344,8346],{"class":93,"line":1157},[91,8345,1927],{"class":97},[91,8347,7728],{"class":206},[91,8349,8350],{"class":93,"line":1172},[91,8351,8087],{"class":160},[91,8353,8354,8356],{"class":93,"line":1178},[91,8355,7738],{"class":97},[91,8357,7741],{"class":1941},[91,8359,8360],{"class":93,"line":1192},[91,8361,1524],{"class":101},[91,8363,8364],{"class":93,"line":1198},[91,8365,7764],{"class":101},[91,8367,8368,8370],{"class":93,"line":1289},[91,8369,1963],{"class":97},[91,8371,7776],{"class":101},[91,8373,8374,8376],{"class":93,"line":1295},[91,8375,1963],{"class":97},[91,8377,7788],{"class":101},[91,8379,8380],{"class":93,"line":1307},[91,8381,3973],{"class":101},[91,8383,8384,8386,8388],{"class":93,"line":1590},[91,8385,105],{"class":97},[91,8387,1951],{"class":1941},[91,8389,1954],{"class":101},[91,8391,8392],{"class":93,"line":1595},[91,8393,1524],{"class":101},[91,8395,8396],{"class":93,"line":1601},[91,8397,8398],{"class":160},"    \u002F\u002F创建学生结构体变量\n",[91,8400,8401,8403,8405,8408,8410,8412,8414,8416,8418,8420,8422],{"class":93,"line":1606},[91,8402,7874],{"class":97},[91,8404,7877],{"class":1941},[91,8406,8407],{"class":101}," s",[91,8409,147],{"class":97},[91,8411,998],{"class":101},[91,8413,7895],{"class":206},[91,8415,480],{"class":101},[91,8417,752],{"class":150},[91,8419,480],{"class":101},[91,8421,1700],{"class":150},[91,8423,3973],{"class":101},[91,8425,8426],{"class":93,"line":1620},[91,8427,8428],{"class":160},"    \u002F\u002F通过指针指向结构体变量\n",[91,8430,8431,8433,8435,8437,8439,8441],{"class":93,"line":1625},[91,8432,7874],{"class":97},[91,8434,7877],{"class":1941},[91,8436,6497],{"class":97},[91,8438,38],{"class":101},[91,8440,6318],{"class":97},[91,8442,8443],{"class":101},"s\n",[91,8445,8446],{"class":93,"line":1631},[91,8447,8448],{"class":160},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[91,8450,8451,8453,8455,8458,8460,8463,8465,8468,8470],{"class":93,"line":1652},[91,8452,1529],{"class":101},[91,8454,1146],{"class":97},[91,8456,8457],{"class":101},"p->name",[91,8459,1146],{"class":97},[91,8461,8462],{"class":101},"p->age",[91,8464,1146],{"class":97},[91,8466,8467],{"class":101},"p->score",[91,8469,1146],{"class":97},[91,8471,1169],{"class":101},[91,8473,8474],{"class":93,"line":1657},[91,8475,1543],{"class":101},[33,8477,8479],{"id":8478},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[38,8481,8482],{},"作用：结构体中的成员可以是另一个结构体",[38,8484,8485],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[83,8487,8489],{"className":85,"code":8488,"language":5,"meta":10,"style":10},"#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",[88,8490,8491,8497,8507,8513,8518,8526,8530,8534,8540,8546,8550,8555,8562,8566,8573,8577,8583,8588,8592,8600,8604,8609,8614,8619,8630,8642,8653,8666,8677,8688],{"__ignoreMap":10},[91,8492,8493,8495],{"class":93,"line":94},[91,8494,1927],{"class":97},[91,8496,1930],{"class":206},[91,8498,8499,8501,8503,8505],{"class":93,"line":11},[91,8500,1935],{"class":97},[91,8502,1938],{"class":97},[91,8504,1942],{"class":1941},[91,8506,1268],{"class":101},[91,8508,8509,8511],{"class":93,"line":1157},[91,8510,1927],{"class":97},[91,8512,7728],{"class":206},[91,8514,8515],{"class":93,"line":1172},[91,8516,8517],{"class":160},"\u002F\u002F定义学生结构体\n",[91,8519,8520,8522,8524],{"class":93,"line":1178},[91,8521,7738],{"class":97},[91,8523,7877],{"class":1941},[91,8525,2652],{"class":101},[91,8527,8528],{"class":93,"line":1192},[91,8529,1524],{"class":101},[91,8531,8532],{"class":93,"line":1198},[91,8533,7764],{"class":101},[91,8535,8536,8538],{"class":93,"line":1289},[91,8537,1963],{"class":97},[91,8539,7776],{"class":101},[91,8541,8542,8544],{"class":93,"line":1295},[91,8543,1963],{"class":97},[91,8545,7788],{"class":101},[91,8547,8548],{"class":93,"line":1307},[91,8549,1543],{"class":101},[91,8551,8552],{"class":93,"line":1590},[91,8553,8554],{"class":160},"\u002F\u002F定义老师结构体\n",[91,8556,8557,8559],{"class":93,"line":1595},[91,8558,7738],{"class":97},[91,8560,8561],{"class":1941}," Teacher\n",[91,8563,8564],{"class":93,"line":1601},[91,8565,1524],{"class":101},[91,8567,8568,8570],{"class":93,"line":1606},[91,8569,1963],{"class":97},[91,8571,8572],{"class":101}," id;\n",[91,8574,8575],{"class":93,"line":1620},[91,8576,7764],{"class":101},[91,8578,8579,8581],{"class":93,"line":1625},[91,8580,1963],{"class":97},[91,8582,7776],{"class":101},[91,8584,8585],{"class":93,"line":1631},[91,8586,8587],{"class":101},"    Student stu;\n",[91,8589,8590],{"class":93,"line":1652},[91,8591,1543],{"class":101},[91,8593,8594,8596,8598],{"class":93,"line":1657},[91,8595,105],{"class":97},[91,8597,1951],{"class":1941},[91,8599,5957],{"class":101},[91,8601,8602],{"class":93,"line":1671},[91,8603,1524],{"class":101},[91,8605,8606],{"class":93,"line":1676},[91,8607,8608],{"class":160},"    \u002F\u002F结构体嵌套结构体\n",[91,8610,8611],{"class":93,"line":1705},[91,8612,8613],{"class":160},"    \u002F\u002F创建老师\n",[91,8615,8616],{"class":93,"line":1710},[91,8617,8618],{"class":101},"    Teacher t;\n",[91,8620,8621,8624,8626,8628],{"class":93,"line":1727},[91,8622,8623],{"class":101},"    t.id",[91,8625,147],{"class":97},[91,8627,413],{"class":150},[91,8629,1268],{"class":101},[91,8631,8632,8635,8637,8640],{"class":93,"line":1732},[91,8633,8634],{"class":101},"    t.name",[91,8636,147],{"class":97},[91,8638,8639],{"class":206},"\"老王\"",[91,8641,1268],{"class":101},[91,8643,8644,8647,8649,8651],{"class":93,"line":1737},[91,8645,8646],{"class":101},"    t.age",[91,8648,147],{"class":97},[91,8650,752],{"class":150},[91,8652,1268],{"class":101},[91,8654,8655,8658,8660,8663],{"class":93,"line":1742},[91,8656,8657],{"class":101},"    t.stu.name",[91,8659,147],{"class":97},[91,8661,8662],{"class":206},"\"小王\"",[91,8664,8665],{"class":101},"；\n",[91,8667,8668,8671,8673,8675],{"class":93,"line":1756},[91,8669,8670],{"class":101},"    t.stu.age",[91,8672,147],{"class":97},[91,8674,802],{"class":150},[91,8676,1268],{"class":101},[91,8678,8679,8682,8684,8686],{"class":93,"line":1761},[91,8680,8681],{"class":101},"    t.stu.score",[91,8683,147],{"class":97},[91,8685,446],{"class":150},[91,8687,1268],{"class":101},[91,8689,8690],{"class":93,"line":2555},[91,8691,1543],{"class":101},[33,8693,8695],{"id":8694},"_45结构体做函数参数","4.5结构体做函数参数",[38,8697,8698],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[83,8700,8702],{"className":85,"code":8701,"language":5,"meta":10,"style":10},"#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",[88,8703,8704,8710,8720,8726,8732,8736,8740,8746,8752,8756,8761,8766,8783,8787,8820,8824,8829,8848,8852,8883,8887,8895,8899,8908,8920,8932,8944,8957,8965,8978,8990,8998],{"__ignoreMap":10},[91,8705,8706,8708],{"class":93,"line":94},[91,8707,1927],{"class":97},[91,8709,1930],{"class":206},[91,8711,8712,8714,8716,8718],{"class":93,"line":11},[91,8713,1935],{"class":97},[91,8715,1938],{"class":97},[91,8717,1942],{"class":1941},[91,8719,1268],{"class":101},[91,8721,8722,8724],{"class":93,"line":1157},[91,8723,1927],{"class":97},[91,8725,7728],{"class":206},[91,8727,8728,8730],{"class":93,"line":1172},[91,8729,7738],{"class":97},[91,8731,7741],{"class":1941},[91,8733,8734],{"class":93,"line":1178},[91,8735,1524],{"class":101},[91,8737,8738],{"class":93,"line":1192},[91,8739,7764],{"class":101},[91,8741,8742,8744],{"class":93,"line":1198},[91,8743,1963],{"class":97},[91,8745,7776],{"class":101},[91,8747,8748,8750],{"class":93,"line":1289},[91,8749,1963],{"class":97},[91,8751,7788],{"class":101},[91,8753,8754],{"class":93,"line":1295},[91,8755,3973],{"class":101},[91,8757,8758],{"class":93,"line":1307},[91,8759,8760],{"class":160},"\u002F\u002F打印学生信息的函数\n",[91,8762,8763],{"class":93,"line":1590},[91,8764,8765],{"class":160},"\u002F\u002F值传递\n",[91,8767,8768,8770,8773,8775,8777,8779,8781],{"class":93,"line":1595},[91,8769,5343],{"class":97},[91,8771,8772],{"class":1941}," printStudent1",[91,8774,102],{"class":101},[91,8776,7738],{"class":97},[91,8778,7877],{"class":1941},[91,8780,8407],{"class":5195},[91,8782,108],{"class":101},[91,8784,8785],{"class":93,"line":1601},[91,8786,1524],{"class":101},[91,8788,8789,8791,8793,8796,8798,8801,8803,8806,8808,8810,8812,8815,8817],{"class":93,"line":1606},[91,8790,6508],{"class":101},[91,8792,1146],{"class":97},[91,8794,8795],{"class":101}," s.name ",[91,8797,1146],{"class":97},[91,8799,8800],{"class":206}," \" \"",[91,8802,1422],{"class":97},[91,8804,8805],{"class":101}," s.age ",[91,8807,1146],{"class":97},[91,8809,8800],{"class":206},[91,8811,1422],{"class":97},[91,8813,8814],{"class":101}," s.score ",[91,8816,1146],{"class":97},[91,8818,8819],{"class":101}," endl;\n",[91,8821,8822],{"class":93,"line":1620},[91,8823,1543],{"class":101},[91,8825,8826],{"class":93,"line":1625},[91,8827,8828],{"class":160},"\u002F\u002F地址传递\n",[91,8830,8831,8833,8836,8838,8840,8842,8844,8846],{"class":93,"line":1631},[91,8832,5343],{"class":97},[91,8834,8835],{"class":1941}," printStudent2",[91,8837,102],{"class":101},[91,8839,7738],{"class":97},[91,8841,7877],{"class":1941},[91,8843,6497],{"class":97},[91,8845,797],{"class":5195},[91,8847,108],{"class":101},[91,8849,8850],{"class":93,"line":1652},[91,8851,1524],{"class":101},[91,8853,8854,8856,8858,8861,8863,8865,8867,8870,8872,8874,8876,8879,8881],{"class":93,"line":1657},[91,8855,6508],{"class":101},[91,8857,1146],{"class":97},[91,8859,8860],{"class":101}," s->name ",[91,8862,1146],{"class":97},[91,8864,8800],{"class":206},[91,8866,1422],{"class":97},[91,8868,8869],{"class":101}," s->age ",[91,8871,1146],{"class":97},[91,8873,8800],{"class":206},[91,8875,1422],{"class":97},[91,8877,8878],{"class":101}," s->score ",[91,8880,1146],{"class":97},[91,8882,8819],{"class":101},[91,8884,8885],{"class":93,"line":1671},[91,8886,1543],{"class":101},[91,8888,8889,8891,8893],{"class":93,"line":1676},[91,8890,105],{"class":97},[91,8892,1951],{"class":1941},[91,8894,1954],{"class":101},[91,8896,8897],{"class":93,"line":1705},[91,8898,1524],{"class":101},[91,8900,8901,8903,8905],{"class":93,"line":1710},[91,8902,7874],{"class":97},[91,8904,7877],{"class":1941},[91,8906,8907],{"class":101}," s;\n",[91,8909,8910,8913,8915,8918],{"class":93,"line":1727},[91,8911,8912],{"class":101},"    s.name ",[91,8914,147],{"class":97},[91,8916,8917],{"class":206}," \"张三\"",[91,8919,1268],{"class":101},[91,8921,8922,8925,8927,8930],{"class":93,"line":1732},[91,8923,8924],{"class":101},"    s.age ",[91,8926,147],{"class":97},[91,8928,8929],{"class":150}," 20",[91,8931,1268],{"class":101},[91,8933,8934,8937,8939,8942],{"class":93,"line":1737},[91,8935,8936],{"class":101},"    s.score ",[91,8938,147],{"class":97},[91,8940,8941],{"class":150}," 85",[91,8943,1268],{"class":101},[91,8945,8946,8948,8950,8953,8955],{"class":93,"line":1742},[91,8947,1529],{"class":101},[91,8949,1146],{"class":97},[91,8951,8952],{"class":206},"\"值传递:\"",[91,8954,1146],{"class":97},[91,8956,1169],{"class":101},[91,8958,8959,8962],{"class":93,"line":1756},[91,8960,8961],{"class":1941},"    printStudent1",[91,8963,8964],{"class":101},"(s);\n",[91,8966,8967,8969,8971,8974,8976],{"class":93,"line":1761},[91,8968,1529],{"class":101},[91,8970,1146],{"class":97},[91,8972,8973],{"class":206},"\"地址传递:\"",[91,8975,1146],{"class":97},[91,8977,1169],{"class":101},[91,8979,8980,8983,8985,8987],{"class":93,"line":2555},[91,8981,8982],{"class":1941},"    printStudent2",[91,8984,102],{"class":101},[91,8986,455],{"class":97},[91,8988,8989],{"class":101},"s); \n",[91,8991,8992,8994,8996],{"class":93,"line":2569},[91,8993,4068],{"class":97},[91,8995,4071],{"class":150},[91,8997,1268],{"class":101},[91,8999,9000],{"class":93,"line":2577},[91,9001,1543],{"class":101},[38,9003,9004],{},"注意：",[1109,9006,9007,9010],{},[49,9008,9009],{},"1.先定义结构体，不要在函数中写结构体的定义",[49,9011,9012],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[33,9014,9016],{"id":9015},"_46结构体中const使用场景","4.6结构体中const使用场景",[38,9018,9019],{},"用const防止误操作",[83,9021,9023],{"className":85,"code":9022,"language":5,"meta":10,"style":10},"#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",[88,9024,9025,9031,9041,9047,9052,9056,9060,9066,9072,9076,9092,9096,9119,9123,9131,9135,9156,9163,9167],{"__ignoreMap":10},[91,9026,9027,9029],{"class":93,"line":94},[91,9028,1927],{"class":97},[91,9030,1930],{"class":206},[91,9032,9033,9035,9037,9039],{"class":93,"line":11},[91,9034,1935],{"class":97},[91,9036,1938],{"class":97},[91,9038,1942],{"class":1941},[91,9040,1268],{"class":101},[91,9042,9043,9045],{"class":93,"line":1157},[91,9044,1927],{"class":97},[91,9046,7728],{"class":206},[91,9048,9049],{"class":93,"line":1172},[91,9050,9051],{"class":101},"sctuct Student\n",[91,9053,9054],{"class":93,"line":1178},[91,9055,1524],{"class":101},[91,9057,9058],{"class":93,"line":1192},[91,9059,7764],{"class":101},[91,9061,9062,9064],{"class":93,"line":1198},[91,9063,1963],{"class":97},[91,9065,7776],{"class":101},[91,9067,9068,9070],{"class":93,"line":1289},[91,9069,1963],{"class":97},[91,9071,7788],{"class":101},[91,9073,9074],{"class":93,"line":1295},[91,9075,3973],{"class":101},[91,9077,9078,9080,9083,9085,9088,9090],{"class":93,"line":1307},[91,9079,5343],{"class":97},[91,9081,9082],{"class":1941}," printStudents",[91,9084,102],{"class":101},[91,9086,9087],{"class":1941},"student",[91,9089,8407],{"class":5195},[91,9091,108],{"class":101},[91,9093,9094],{"class":93,"line":1590},[91,9095,1524],{"class":101},[91,9097,9098,9100,9102,9105,9107,9110,9112,9115,9117],{"class":93,"line":1595},[91,9099,1529],{"class":101},[91,9101,1146],{"class":97},[91,9103,9104],{"class":101},"s.name",[91,9106,1146],{"class":97},[91,9108,9109],{"class":101},"s.age",[91,9111,1146],{"class":97},[91,9113,9114],{"class":101},"s.score",[91,9116,1146],{"class":97},[91,9118,1169],{"class":101},[91,9120,9121],{"class":93,"line":1601},[91,9122,1543],{"class":101},[91,9124,9125,9127,9129],{"class":93,"line":1606},[91,9126,105],{"class":97},[91,9128,1951],{"class":1941},[91,9130,5957],{"class":101},[91,9132,9133],{"class":93,"line":1620},[91,9134,1524],{"class":101},[91,9136,9137,9140,9142,9144,9146,9148,9150,9152,9154],{"class":93,"line":1625},[91,9138,9139],{"class":101},"    Student s",[91,9141,147],{"class":97},[91,9143,998],{"class":101},[91,9145,7895],{"class":206},[91,9147,480],{"class":101},[91,9149,752],{"class":150},[91,9151,480],{"class":101},[91,9153,752],{"class":150},[91,9155,3973],{"class":101},[91,9157,9158,9161],{"class":93,"line":1631},[91,9159,9160],{"class":1941},"    printStudent",[91,9162,8964],{"class":101},[91,9164,9165],{"class":93,"line":1652},[91,9166,2378],{"emptyLinePlaceholder":17},[91,9168,9169],{"class":93,"line":1657},[91,9170,1543],{"class":101},[38,9172,9004],{},[1109,9174,9175,9178,9181],{},[49,9176,9177],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[49,9179,9180],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[49,9182,9183],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[83,9185,9187],{"className":85,"code":9186,"language":5,"meta":10,"style":10},"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",[88,9188,9189,9208,9212,9217,9237],{"__ignoreMap":10},[91,9190,9191,9193,9195,9197,9199,9202,9204,9206],{"class":93,"line":94},[91,9192,5343],{"class":97},[91,9194,9082],{"class":1941},[91,9196,102],{"class":101},[91,9198,6771],{"class":97},[91,9200,9201],{"class":1941}," student",[91,9203,6497],{"class":97},[91,9205,797],{"class":5195},[91,9207,108],{"class":101},[91,9209,9210],{"class":93,"line":11},[91,9211,1524],{"class":101},[91,9213,9214],{"class":93,"line":1157},[91,9215,9216],{"class":160},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[91,9218,9219,9221,9223,9225,9227,9229,9231,9233,9235],{"class":93,"line":1172},[91,9220,1529],{"class":101},[91,9222,1146],{"class":97},[91,9224,9104],{"class":101},[91,9226,1146],{"class":97},[91,9228,9109],{"class":101},[91,9230,1146],{"class":97},[91,9232,9114],{"class":101},[91,9234,1146],{"class":97},[91,9236,1169],{"class":101},[91,9238,9239],{"class":93,"line":1178},[91,9240,1543],{"class":101},[33,9242,9244],{"id":9243},"_47案例","4.7案例",[46,9246,9247],{},[49,9248,9249],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[83,9251,9253],{"className":85,"code":9252,"language":5,"meta":10,"style":10},"#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",[88,9254,9255,9261,9271,9277,9284,9288,9294,9298,9303,9309,9315,9319,9323,9329,9333,9338,9343,9356,9360,9365,9391,9395,9407,9434,9438,9450,9460,9464,9469,9498,9502,9514,9523,9550,9561,9571,9575,9579,9583,9588,9612,9616,9640,9644,9663,9689,9693,9718,9741,9765,9770,9775,9780,9789,9794,9800,9821,9827,9841,9847,9874,9883,9889,9897,9902],{"__ignoreMap":10},[91,9256,9257,9259],{"class":93,"line":94},[91,9258,1927],{"class":97},[91,9260,1930],{"class":206},[91,9262,9263,9265,9267,9269],{"class":93,"line":11},[91,9264,1935],{"class":97},[91,9266,1938],{"class":97},[91,9268,1942],{"class":1941},[91,9270,1268],{"class":101},[91,9272,9273,9275],{"class":93,"line":1157},[91,9274,1927],{"class":97},[91,9276,7728],{"class":206},[91,9278,9279,9281],{"class":93,"line":1172},[91,9280,1927],{"class":97},[91,9282,9283],{"class":206},"\u003Cctime>\n",[91,9285,9286],{"class":93,"line":1178},[91,9287,8517],{"class":160},[91,9289,9290,9292],{"class":93,"line":1192},[91,9291,7738],{"class":97},[91,9293,7741],{"class":1941},[91,9295,9296],{"class":93,"line":1198},[91,9297,1524],{"class":101},[91,9299,9300],{"class":93,"line":1289},[91,9301,9302],{"class":101},"    string sName;\n",[91,9304,9305,9307],{"class":93,"line":1295},[91,9306,1963],{"class":97},[91,9308,7776],{"class":101},[91,9310,9311,9313],{"class":93,"line":1307},[91,9312,1963],{"class":97},[91,9314,7788],{"class":101},[91,9316,9317],{"class":93,"line":1590},[91,9318,3973],{"class":101},[91,9320,9321],{"class":93,"line":1595},[91,9322,8554],{"class":160},[91,9324,9325,9327],{"class":93,"line":1601},[91,9326,7738],{"class":97},[91,9328,8561],{"class":1941},[91,9330,9331],{"class":93,"line":1606},[91,9332,1524],{"class":101},[91,9334,9335],{"class":93,"line":1620},[91,9336,9337],{"class":101},"    string tName;\n",[91,9339,9340],{"class":93,"line":1625},[91,9341,9342],{"class":160},"    \u002F\u002F学生数组\n",[91,9344,9345,9347,9349,9352,9354],{"class":93,"line":1631},[91,9346,7874],{"class":97},[91,9348,7877],{"class":1941},[91,9350,9351],{"class":101}," sArray[",[91,9353,421],{"class":150},[91,9355,4668],{"class":101},[91,9357,9358],{"class":93,"line":1652},[91,9359,3973],{"class":101},[91,9361,9362],{"class":93,"line":1657},[91,9363,9364],{"class":160},"\u002F\u002F给老师和学生赋值的函数\n",[91,9366,9367,9369,9372,9374,9376,9379,9382,9385,9387,9389],{"class":93,"line":1671},[91,9368,5343],{"class":97},[91,9370,9371],{"class":1941}," allocateSpace",[91,9373,102],{"class":101},[91,9375,7738],{"class":97},[91,9377,9378],{"class":1941}," Teacher",[91,9380,9381],{"class":5195}," tArray",[91,9383,9384],{"class":101},"[],",[91,9386,105],{"class":97},[91,9388,7310],{"class":5195},[91,9390,108],{"class":101},[91,9392,9393],{"class":93,"line":1676},[91,9394,1524],{"class":101},[91,9396,9397,9400,9402,9405],{"class":93,"line":1705},[91,9398,9399],{"class":101},"    string nameSeed",[91,9401,147],{"class":97},[91,9403,9404],{"class":206},"\"ABCDE\"",[91,9406,1268],{"class":101},[91,9408,9409,9411,9413,9415,9418,9420,9422,9425,9427,9430,9432],{"class":93,"line":1710},[91,9410,3179],{"class":97},[91,9412,1636],{"class":101},[91,9414,105],{"class":97},[91,9416,9417],{"class":101}," i ",[91,9419,147],{"class":97},[91,9421,4071],{"class":150},[91,9423,9424],{"class":101},"; i ",[91,9426,1012],{"class":97},[91,9428,9429],{"class":101}," len; i",[91,9431,2270],{"class":97},[91,9433,108],{"class":101},[91,9435,9436],{"class":93,"line":1727},[91,9437,2008],{"class":101},[91,9439,9440,9443,9445,9448],{"class":93,"line":1732},[91,9441,9442],{"class":101},"        tArray[i].tName ",[91,9444,147],{"class":97},[91,9446,9447],{"class":206}," \"Teacher_\"",[91,9449,1268],{"class":101},[91,9451,9452,9454,9457],{"class":93,"line":1737},[91,9453,9442],{"class":101},[91,9455,9456],{"class":97},"+=",[91,9458,9459],{"class":101},"nameSeed[i];\n",[91,9461,9462],{"class":93,"line":1742},[91,9463,2378],{"emptyLinePlaceholder":17},[91,9465,9466],{"class":93,"line":1756},[91,9467,9468],{"class":160},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[91,9470,9471,9473,9475,9477,9480,9482,9484,9487,9489,9491,9494,9496],{"class":93,"line":1761},[91,9472,3381],{"class":97},[91,9474,1636],{"class":101},[91,9476,105],{"class":97},[91,9478,9479],{"class":101}," j ",[91,9481,147],{"class":97},[91,9483,4071],{"class":150},[91,9485,9486],{"class":101},"; j ",[91,9488,1012],{"class":97},[91,9490,2126],{"class":150},[91,9492,9493],{"class":101},"; j",[91,9495,2270],{"class":97},[91,9497,108],{"class":101},[91,9499,9500],{"class":93,"line":2555},[91,9501,2488],{"class":101},[91,9503,9504,9507,9509,9512],{"class":93,"line":2569},[91,9505,9506],{"class":101},"            tArray[i].sArray[j].sName ",[91,9508,147],{"class":97},[91,9510,9511],{"class":206}," \"Student_\"",[91,9513,1268],{"class":101},[91,9515,9516,9518,9520],{"class":93,"line":2577},[91,9517,9506],{"class":101},[91,9519,9456],{"class":97},[91,9521,9522],{"class":101}," nameSeed[j];\n",[91,9524,9525,9528,9531,9533,9535,9537,9539,9541,9543,9545,9547],{"class":93,"line":2582},[91,9526,9527],{"class":97},"            int",[91,9529,9530],{"class":101}," random",[91,9532,147],{"class":97},[91,9534,2402],{"class":1941},[91,9536,2405],{"class":101},[91,9538,430],{"class":97},[91,9540,1009],{"class":150},[91,9542,583],{"class":97},[91,9544,503],{"class":150},[91,9546,157],{"class":101},[91,9548,9549],{"class":160},"\u002F\u002F40~99\n",[91,9551,9552,9555,9557,9559],{"class":93,"line":2588},[91,9553,9554],{"class":101},"            tArray[i].sArray[j].age ",[91,9556,147],{"class":97},[91,9558,8929],{"class":150},[91,9560,1268],{"class":101},[91,9562,9563,9566,9568],{"class":93,"line":2594},[91,9564,9565],{"class":101},"            tArray[i].sArray[j].score ",[91,9567,147],{"class":97},[91,9569,9570],{"class":101}," random;\n",[91,9572,9573],{"class":93,"line":2599},[91,9574,2507],{"class":101},[91,9576,9577],{"class":93,"line":7927},[91,9578,2165],{"class":101},[91,9580,9581],{"class":93,"line":7951},[91,9582,1543],{"class":101},[91,9584,9585],{"class":93,"line":7956},[91,9586,9587],{"class":160},"\u002F\u002F打印所有信息的函数\n",[91,9589,9590,9592,9595,9597,9599,9601,9603,9606,9608,9610],{"class":93,"line":7962},[91,9591,5343],{"class":97},[91,9593,9594],{"class":1941}," printInfo",[91,9596,102],{"class":101},[91,9598,7738],{"class":97},[91,9600,9378],{"class":1941},[91,9602,9381],{"class":5195},[91,9604,9605],{"class":101},"[], ",[91,9607,105],{"class":97},[91,9609,7310],{"class":5195},[91,9611,108],{"class":101},[91,9613,9614],{"class":93,"line":7989},[91,9615,1524],{"class":101},[91,9617,9618,9620,9622,9624,9626,9628,9630,9632,9634,9636,9638],{"class":93,"line":7994},[91,9619,3179],{"class":97},[91,9621,1636],{"class":101},[91,9623,105],{"class":97},[91,9625,9417],{"class":101},[91,9627,147],{"class":97},[91,9629,4071],{"class":150},[91,9631,9424],{"class":101},[91,9633,1012],{"class":97},[91,9635,9429],{"class":101},[91,9637,2270],{"class":97},[91,9639,108],{"class":101},[91,9641,9642],{"class":93,"line":8000},[91,9643,2008],{"class":101},[91,9645,9646,9649,9651,9654,9656,9659,9661],{"class":93,"line":8012},[91,9647,9648],{"class":101},"        cout ",[91,9650,1146],{"class":97},[91,9652,9653],{"class":206}," \"Teacher: \"",[91,9655,1422],{"class":97},[91,9657,9658],{"class":101}," tArray[i].tName ",[91,9660,1146],{"class":97},[91,9662,8819],{"class":101},[91,9664,9665,9667,9669,9671,9673,9675,9677,9679,9681,9683,9685,9687],{"class":93,"line":8024},[91,9666,3381],{"class":97},[91,9668,1636],{"class":101},[91,9670,105],{"class":97},[91,9672,9479],{"class":101},[91,9674,147],{"class":97},[91,9676,4071],{"class":150},[91,9678,9486],{"class":101},[91,9680,1012],{"class":97},[91,9682,2126],{"class":150},[91,9684,9493],{"class":101},[91,9686,2270],{"class":97},[91,9688,108],{"class":101},[91,9690,9691],{"class":93,"line":8036},[91,9692,2488],{"class":101},[91,9694,9696,9699,9701,9704,9706,9709,9711,9714,9716],{"class":93,"line":9695},47,[91,9697,9698],{"class":101},"            cout ",[91,9700,1146],{"class":97},[91,9702,9703],{"class":206}," \"",[91,9705,1208],{"class":150},[91,9707,9708],{"class":206},"Student: \"",[91,9710,1422],{"class":97},[91,9712,9713],{"class":101}," tArray[i].sArray[j].sName",[91,9715,1146],{"class":97},[91,9717,1169],{"class":101},[91,9719,9721,9723,9725,9727,9729,9732,9734,9737,9739],{"class":93,"line":9720},48,[91,9722,9698],{"class":101},[91,9724,1146],{"class":97},[91,9726,9703],{"class":206},[91,9728,1208],{"class":150},[91,9730,9731],{"class":206},"Age: \"",[91,9733,1422],{"class":97},[91,9735,9736],{"class":101}," tArray[i].sArray[j].age ",[91,9738,1146],{"class":97},[91,9740,8819],{"class":101},[91,9742,9744,9746,9748,9750,9752,9755,9757,9760,9762],{"class":93,"line":9743},49,[91,9745,9698],{"class":101},[91,9747,1146],{"class":97},[91,9749,9703],{"class":206},[91,9751,1208],{"class":150},[91,9753,9754],{"class":206},"Score: \"",[91,9756,1422],{"class":97},[91,9758,9759],{"class":101}," tArray[i].sArray[j].score ",[91,9761,1146],{"class":97},[91,9763,9764],{"class":101}," endl;   \n",[91,9766,9768],{"class":93,"line":9767},50,[91,9769,2507],{"class":101},[91,9771,9773],{"class":93,"line":9772},51,[91,9774,2165],{"class":101},[91,9776,9778],{"class":93,"line":9777},52,[91,9779,1543],{"class":101},[91,9781,9783,9785,9787],{"class":93,"line":9782},53,[91,9784,105],{"class":97},[91,9786,1951],{"class":1941},[91,9788,1954],{"class":101},[91,9790,9792],{"class":93,"line":9791},54,[91,9793,1524],{"class":101},[91,9795,9797],{"class":93,"line":9796},55,[91,9798,9799],{"class":160},"    \u002F\u002F随机数种子\n",[91,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819],{"class":93,"line":9802},56,[91,9804,2351],{"class":1941},[91,9806,2354],{"class":101},[91,9808,2357],{"class":97},[91,9810,2360],{"class":97},[91,9812,531],{"class":101},[91,9814,2365],{"class":1941},[91,9816,102],{"class":101},[91,9818,2370],{"class":150},[91,9820,2373],{"class":101},[91,9822,9824],{"class":93,"line":9823},57,[91,9825,9826],{"class":160},"    \u002F\u002F1.创建3名老师的数组\n",[91,9828,9830,9832,9834,9837,9839],{"class":93,"line":9829},58,[91,9831,7874],{"class":97},[91,9833,9378],{"class":1941},[91,9835,9836],{"class":101}," tArray[",[91,9838,173],{"class":150},[91,9840,4668],{"class":101},[91,9842,9844],{"class":93,"line":9843},59,[91,9845,9846],{"class":160},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[91,9848,9850,9852,9855,9857,9860,9863,9865,9867,9870,9872],{"class":93,"line":9849},60,[91,9851,1963],{"class":97},[91,9853,9854],{"class":101}," len ",[91,9856,147],{"class":97},[91,9858,9859],{"class":97}," sizeof",[91,9861,9862],{"class":101},"(tArray) ",[91,9864,686],{"class":97},[91,9866,9859],{"class":97},[91,9868,9869],{"class":101},"(tArray[",[91,9871,293],{"class":150},[91,9873,3834],{"class":101},[91,9875,9877,9880],{"class":93,"line":9876},61,[91,9878,9879],{"class":1941},"    allocateSpace",[91,9881,9882],{"class":101},"(tArray, len);\n",[91,9884,9886],{"class":93,"line":9885},62,[91,9887,9888],{"class":160},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[91,9890,9892,9895],{"class":93,"line":9891},63,[91,9893,9894],{"class":1941},"    printInfo",[91,9896,9882],{"class":101},[91,9898,9900],{"class":93,"line":9899},64,[91,9901,2378],{"emptyLinePlaceholder":17},[91,9903,9905],{"class":93,"line":9904},65,[91,9906,1543],{"class":101},[46,9908,9909],{"start":11},[49,9910,9911,9914],{},[251,9912,9913],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[38,9916,9917],{},"五名英雄信息如下：",[83,9919,9923],{"className":9920,"code":9921,"language":9922,"meta":10,"style":10},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[88,9924,9925,9943,9960,9977,9994],{"__ignoreMap":10},[91,9926,9927,9929,9932,9934,9936,9938,9941],{"class":93,"line":94},[91,9928,4895],{"class":101},[91,9930,9931],{"class":206},"\"刘备\"",[91,9933,480],{"class":101},[91,9935,877],{"class":150},[91,9937,480],{"class":101},[91,9939,9940],{"class":206},"\"男\"",[91,9942,4908],{"class":101},[91,9944,9945,9947,9950,9952,9954,9956,9958],{"class":93,"line":11},[91,9946,4895],{"class":101},[91,9948,9949],{"class":206},"\"关羽\"",[91,9951,480],{"class":101},[91,9953,852],{"class":150},[91,9955,480],{"class":101},[91,9957,9940],{"class":206},[91,9959,4908],{"class":101},[91,9961,9962,9964,9967,9969,9971,9973,9975],{"class":93,"line":1157},[91,9963,4895],{"class":101},[91,9965,9966],{"class":206},"\"张飞\"",[91,9968,480],{"class":101},[91,9970,802],{"class":150},[91,9972,480],{"class":101},[91,9974,9940],{"class":206},[91,9976,4908],{"class":101},[91,9978,9979,9981,9984,9986,9988,9990,9992],{"class":93,"line":1172},[91,9980,4895],{"class":101},[91,9982,9983],{"class":206},"\"赵云\"",[91,9985,480],{"class":101},[91,9987,827],{"class":150},[91,9989,480],{"class":101},[91,9991,9940],{"class":206},[91,9993,4908],{"class":101},[91,9995,9996,9998,10001,10003,10005,10007,10010],{"class":93,"line":1178},[91,9997,4895],{"class":101},[91,9999,10000],{"class":206},"\"貂蝉\"",[91,10002,480],{"class":101},[91,10004,777],{"class":150},[91,10006,480],{"class":101},[91,10008,10009],{"class":206},"\"女\"",[91,10011,4908],{"class":101},[38,10013,10014],{},"代码：",[83,10016,10018],{"className":85,"code":10017,"language":5,"meta":10,"style":10},"#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",[88,10019,10020,10026,10036,10042,10049,10053,10057,10063,10068,10072,10077,10100,10104,10129,10133,10166,10171,10200,10205,10220,10246,10266,10271,10276,10280,10284,10289,10311,10315,10339,10343,10405,10409,10413,10421,10425,10430,10441,10445,10461,10477,10493,10509,10525,10529,10549,10571,10576,10589,10596,10601,10607,10612,10625,10631],{"__ignoreMap":10},[91,10021,10022,10024],{"class":93,"line":94},[91,10023,1927],{"class":97},[91,10025,1930],{"class":206},[91,10027,10028,10030,10032,10034],{"class":93,"line":11},[91,10029,1935],{"class":97},[91,10031,1938],{"class":97},[91,10033,1942],{"class":1941},[91,10035,1268],{"class":101},[91,10037,10038,10040],{"class":93,"line":1157},[91,10039,1927],{"class":97},[91,10041,7728],{"class":206},[91,10043,10044,10046],{"class":93,"line":1172},[91,10045,7738],{"class":97},[91,10047,10048],{"class":1941}," Sanguo\n",[91,10050,10051],{"class":93,"line":1178},[91,10052,1524],{"class":101},[91,10054,10055],{"class":93,"line":1192},[91,10056,7764],{"class":101},[91,10058,10059,10061],{"class":93,"line":1198},[91,10060,1963],{"class":97},[91,10062,7776],{"class":101},[91,10064,10065],{"class":93,"line":1289},[91,10066,10067],{"class":101},"    string gender;\n",[91,10069,10070],{"class":93,"line":1295},[91,10071,3973],{"class":101},[91,10073,10074],{"class":93,"line":1307},[91,10075,10076],{"class":160},"\u002F\u002F定义排序函数\n",[91,10078,10079,10081,10083,10085,10088,10090,10092,10094,10096,10098],{"class":93,"line":1590},[91,10080,5343],{"class":97},[91,10082,7295],{"class":1941},[91,10084,102],{"class":101},[91,10086,10087],{"class":1941},"Sanguo",[91,10089,6497],{"class":97},[91,10091,797],{"class":5195},[91,10093,480],{"class":101},[91,10095,105],{"class":97},[91,10097,7310],{"class":5195},[91,10099,108],{"class":101},[91,10101,10102],{"class":93,"line":1595},[91,10103,1524],{"class":101},[91,10105,10106,10108,10110,10112,10114,10116,10118,10120,10122,10125,10127],{"class":93,"line":1601},[91,10107,3179],{"class":97},[91,10109,102],{"class":101},[91,10111,105],{"class":97},[91,10113,3010],{"class":101},[91,10115,147],{"class":97},[91,10117,293],{"class":150},[91,10119,3017],{"class":101},[91,10121,1012],{"class":97},[91,10123,10124],{"class":101},"len;i",[91,10126,2270],{"class":97},[91,10128,108],{"class":101},[91,10130,10131],{"class":93,"line":1606},[91,10132,2008],{"class":101},[91,10134,10135,10138,10140,10142,10144,10146,10148,10150,10152,10154,10156,10158,10160,10162,10164],{"class":93,"line":1620},[91,10136,10137],{"class":97},"     for",[91,10139,1636],{"class":101},[91,10141,105],{"class":97},[91,10143,3388],{"class":101},[91,10145,147],{"class":97},[91,10147,293],{"class":150},[91,10149,3395],{"class":101},[91,10151,1012],{"class":97},[91,10153,7337],{"class":101},[91,10155,634],{"class":97},[91,10157,319],{"class":150},[91,10159,634],{"class":97},[91,10161,3528],{"class":101},[91,10163,2270],{"class":97},[91,10165,108],{"class":101},[91,10167,10168],{"class":93,"line":1625},[91,10169,10170],{"class":101},"     {\n",[91,10172,10173,10176,10179,10181,10184,10186,10189,10191,10193,10195,10197],{"class":93,"line":1631},[91,10174,10175],{"class":97},"         if",[91,10177,10178],{"class":101}," ((s",[91,10180,583],{"class":97},[91,10182,10183],{"class":101},"j)->age ",[91,10185,1062],{"class":97},[91,10187,10188],{"class":101}," (s",[91,10190,583],{"class":97},[91,10192,569],{"class":101},[91,10194,583],{"class":97},[91,10196,319],{"class":150},[91,10198,10199],{"class":101},")->age)\n",[91,10201,10202],{"class":93,"line":1652},[91,10203,10204],{"class":101},"         {\n",[91,10206,10207,10210,10212,10215,10217],{"class":93,"line":1657},[91,10208,10209],{"class":101},"             Sanguo temp",[91,10211,7132],{"class":97},[91,10213,10214],{"class":101},"(s",[91,10216,583],{"class":97},[91,10218,10219],{"class":101},"j);\n",[91,10221,10222,10225,10227,10229,10232,10234,10236,10238,10240,10242,10244],{"class":93,"line":1671},[91,10223,10224],{"class":97},"             *",[91,10226,10214],{"class":101},[91,10228,583],{"class":97},[91,10230,10231],{"class":101},"j)",[91,10233,7132],{"class":97},[91,10235,10214],{"class":101},[91,10237,583],{"class":97},[91,10239,569],{"class":101},[91,10241,583],{"class":97},[91,10243,319],{"class":150},[91,10245,2697],{"class":101},[91,10247,10248,10250,10252,10254,10256,10258,10260,10262,10264],{"class":93,"line":1676},[91,10249,10224],{"class":97},[91,10251,10214],{"class":101},[91,10253,583],{"class":97},[91,10255,569],{"class":101},[91,10257,583],{"class":97},[91,10259,319],{"class":150},[91,10261,531],{"class":101},[91,10263,147],{"class":97},[91,10265,4258],{"class":101},[91,10267,10268],{"class":93,"line":1705},[91,10269,10270],{"class":101},"         }\n",[91,10272,10273],{"class":93,"line":1710},[91,10274,10275],{"class":101},"     }\n",[91,10277,10278],{"class":93,"line":1727},[91,10279,2165],{"class":101},[91,10281,10282],{"class":93,"line":1732},[91,10283,1543],{"class":101},[91,10285,10286],{"class":93,"line":1737},[91,10287,10288],{"class":160},"\u002F\u002F定义打印函数\n",[91,10290,10291,10293,10295,10297,10299,10301,10303,10305,10307,10309],{"class":93,"line":1742},[91,10292,5343],{"class":97},[91,10294,9594],{"class":1941},[91,10296,102],{"class":101},[91,10298,10087],{"class":1941},[91,10300,6497],{"class":97},[91,10302,797],{"class":5195},[91,10304,480],{"class":101},[91,10306,105],{"class":97},[91,10308,7310],{"class":5195},[91,10310,108],{"class":101},[91,10312,10313],{"class":93,"line":1756},[91,10314,1524],{"class":101},[91,10316,10317,10319,10321,10323,10325,10327,10329,10331,10333,10335,10337],{"class":93,"line":1761},[91,10318,3179],{"class":97},[91,10320,1636],{"class":101},[91,10322,105],{"class":97},[91,10324,3010],{"class":101},[91,10326,147],{"class":97},[91,10328,293],{"class":150},[91,10330,3017],{"class":101},[91,10332,1012],{"class":97},[91,10334,10124],{"class":101},[91,10336,2270],{"class":97},[91,10338,108],{"class":101},[91,10340,10341],{"class":93,"line":2555},[91,10342,2008],{"class":101},[91,10344,10345,10347,10349,10351,10353,10356,10358,10360,10362,10365,10367,10369,10371,10374,10376,10378,10380,10383,10385,10387,10389,10392,10394,10396,10398,10401,10403],{"class":93,"line":2569},[91,10346,3429],{"class":101},[91,10348,1146],{"class":97},[91,10350,353],{"class":206},[91,10352,1208],{"class":150},[91,10354,10355],{"class":206},"姓名：\"",[91,10357,1146],{"class":97},[91,10359,10214],{"class":101},[91,10361,583],{"class":97},[91,10363,10364],{"class":101},"i)->name",[91,10366,1146],{"class":97},[91,10368,353],{"class":206},[91,10370,1208],{"class":150},[91,10372,10373],{"class":206},"年龄：\"",[91,10375,1146],{"class":97},[91,10377,10214],{"class":101},[91,10379,583],{"class":97},[91,10381,10382],{"class":101},"i)->age",[91,10384,1146],{"class":97},[91,10386,353],{"class":206},[91,10388,1208],{"class":150},[91,10390,10391],{"class":206},"性别：\"",[91,10393,1146],{"class":97},[91,10395,10214],{"class":101},[91,10397,583],{"class":97},[91,10399,10400],{"class":101},"i)->gender",[91,10402,1146],{"class":97},[91,10404,1169],{"class":101},[91,10406,10407],{"class":93,"line":2577},[91,10408,2165],{"class":101},[91,10410,10411],{"class":93,"line":2582},[91,10412,1543],{"class":101},[91,10414,10415,10417,10419],{"class":93,"line":2588},[91,10416,105],{"class":97},[91,10418,1951],{"class":1941},[91,10420,1954],{"class":101},[91,10422,10423],{"class":93,"line":2594},[91,10424,1524],{"class":101},[91,10426,10427],{"class":93,"line":2599},[91,10428,10429],{"class":160},"    \u002F\u002F定义结构体变量\n",[91,10431,10432,10435,10437,10439],{"class":93,"line":7927},[91,10433,10434],{"class":101},"    Sanguo s1[",[91,10436,421],{"class":150},[91,10438,1042],{"class":101},[91,10440,4886],{"class":97},[91,10442,10443],{"class":93,"line":7951},[91,10444,2008],{"class":101},[91,10446,10447,10449,10451,10453,10455,10457,10459],{"class":93,"line":7956},[91,10448,4895],{"class":101},[91,10450,9931],{"class":206},[91,10452,480],{"class":101},[91,10454,877],{"class":150},[91,10456,480],{"class":101},[91,10458,9940],{"class":206},[91,10460,4908],{"class":101},[91,10462,10463,10465,10467,10469,10471,10473,10475],{"class":93,"line":7962},[91,10464,4895],{"class":101},[91,10466,9949],{"class":206},[91,10468,480],{"class":101},[91,10470,852],{"class":150},[91,10472,480],{"class":101},[91,10474,9940],{"class":206},[91,10476,4908],{"class":101},[91,10478,10479,10481,10483,10485,10487,10489,10491],{"class":93,"line":7989},[91,10480,4895],{"class":101},[91,10482,9966],{"class":206},[91,10484,480],{"class":101},[91,10486,802],{"class":150},[91,10488,480],{"class":101},[91,10490,9940],{"class":206},[91,10492,4908],{"class":101},[91,10494,10495,10497,10499,10501,10503,10505,10507],{"class":93,"line":7994},[91,10496,4895],{"class":101},[91,10498,9983],{"class":206},[91,10500,480],{"class":101},[91,10502,827],{"class":150},[91,10504,480],{"class":101},[91,10506,9940],{"class":206},[91,10508,4908],{"class":101},[91,10510,10511,10513,10515,10517,10519,10521,10523],{"class":93,"line":8000},[91,10512,4895],{"class":101},[91,10514,10000],{"class":206},[91,10516,480],{"class":101},[91,10518,777],{"class":150},[91,10520,480],{"class":101},[91,10522,10009],{"class":206},[91,10524,4908],{"class":101},[91,10526,10527],{"class":93,"line":8012},[91,10528,4929],{"class":101},[91,10530,10531,10533,10535,10537,10540,10542,10545,10547],{"class":93,"line":8024},[91,10532,1963],{"class":97},[91,10534,7310],{"class":101},[91,10536,4181],{"class":97},[91,10538,10539],{"class":101},"(s1)",[91,10541,4187],{"class":97},[91,10543,10544],{"class":101},"(s1[",[91,10546,293],{"class":150},[91,10548,3834],{"class":101},[91,10550,10551,10554,10556,10559,10561,10564,10567,10569],{"class":93,"line":8036},[91,10552,10553],{"class":101},"    Sanguo ",[91,10555,557],{"class":97},[91,10557,10558],{"class":101},"s ",[91,10560,147],{"class":97},[91,10562,10563],{"class":97}," &",[91,10565,10566],{"class":101},"s1[",[91,10568,293],{"class":150},[91,10570,4668],{"class":101},[91,10572,10573],{"class":93,"line":9695},[91,10574,10575],{"class":160},"    \u002F\u002F排序前：\n",[91,10577,10578,10580,10582,10585,10587],{"class":93,"line":9720},[91,10579,6508],{"class":101},[91,10581,1146],{"class":97},[91,10583,10584],{"class":206}," \"排序前：\"",[91,10586,1422],{"class":97},[91,10588,8819],{"class":101},[91,10590,10591,10593],{"class":93,"line":9743},[91,10592,9894],{"class":1941},[91,10594,10595],{"class":101},"(s,len);\n",[91,10597,10598],{"class":93,"line":9767},[91,10599,10600],{"class":160},"    \u002F\u002F调用排序函数\n",[91,10602,10603,10605],{"class":93,"line":9772},[91,10604,7577],{"class":1941},[91,10606,10595],{"class":101},[91,10608,10609],{"class":93,"line":9777},[91,10610,10611],{"class":160},"    \u002F\u002F排序后\n",[91,10613,10614,10616,10618,10621,10623],{"class":93,"line":9782},[91,10615,6508],{"class":101},[91,10617,1146],{"class":97},[91,10619,10620],{"class":206}," \"排序后：\"",[91,10622,1422],{"class":97},[91,10624,8819],{"class":101},[91,10626,10627,10629],{"class":93,"line":9791},[91,10628,9894],{"class":1941},[91,10630,10595],{"class":101},[91,10632,10633],{"class":93,"line":9796},[91,10634,1543],{"class":101},[38,10636,10637,10638,10640],{},"注意：使用指针时直接用传首地址**&s",[91,10639,293],{},"**",[5105,10642,10643],{},"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":10,"searchDepth":11,"depth":11,"links":10645},[10646,10647,10648,10649,10650,10651,10652],{"id":7682,"depth":11,"text":7683},{"id":8044,"depth":11,"text":8045},{"id":8313,"depth":11,"text":8314},{"id":8478,"depth":11,"text":8479},{"id":8694,"depth":11,"text":8695},{"id":9015,"depth":11,"text":9016},{"id":9243,"depth":11,"text":9244},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7671,"description":7679},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10659,"title":10660,"body":10661,"description":10,"extension":14,"meta":12004,"navigation":17,"path":12005,"seo":12006,"stem":12007,"__hash__":12008},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10662,"toc":11998},[10663,10666,10670,10676,10690,10695,10698,10702,10709,10715,10718,10725,10731,10736,10739,10742,10745,11309,11312,11326,11330,11335,11351,11491,11494,11500,11503,11508,11516,11624,11627,11632,11635,11640,11643,11649,11652,11995],[29,10664,10660],{"id":10665},"_5程序内存模型",[33,10667,10669],{"id":10668},"_51内存分区模型","5.1内存分区模型",[38,10671,10672,10673],{},"C++程序在执行时，将内存大方向划分为",[251,10674,10675],{},"4个区域",[1109,10677,10678,10681,10684,10687],{},[49,10679,10680],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[49,10682,10683],{},"全局区：存放全局变量和静态变量以及常量",[49,10685,10686],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[49,10688,10689],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[38,10691,10692],{},[251,10693,10694],{},"内存四区意义：",[38,10696,10697],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[63,10699,10701],{"id":10700},"_511程序运行前","5.1.1程序运行前",[38,10703,10704,10705,10708],{},"​\t在程序编译后，生成了exe可执行程序，",[251,10706,10707],{},"未执行该程序前","分为两个区域",[38,10710,10711,10712],{},"​\t",[251,10713,10714],{},"代码区：",[38,10716,10717],{},"​\t\t存放 CPU 执行的机器指令",[38,10719,10720,10721,10724],{},"​\t\t代码区是",[251,10722,10723],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[38,10726,10720,10727,10730],{},[251,10728,10729],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[38,10732,10711,10733],{},[251,10734,10735],{},"全局区：",[38,10737,10738],{},"​\t\t全局变量和静态变量存放在此.",[38,10740,10741],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[38,10743,10744],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[83,10746,10748],{"className":85,"code":10747,"language":5,"meta":10,"style":10},"\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",[88,10749,10750,10755,10768,10781,10785,10790,10805,10820,10824,10833,10837,10842,10855,10868,10872,10877,10903,10929,10933,10960,10986,10990,10995,11011,11026,11030,11056,11082,11086,11111,11136,11140,11166,11192,11196,11212,11227,11253,11279,11283,11293,11297,11305],{"__ignoreMap":10},[91,10751,10752],{"class":93,"line":94},[91,10753,10754],{"class":160},"\u002F\u002F全局变量\n",[91,10756,10757,10759,10762,10764,10766],{"class":93,"line":11},[91,10758,105],{"class":97},[91,10760,10761],{"class":101}," g_a ",[91,10763,147],{"class":97},[91,10765,2016],{"class":150},[91,10767,1268],{"class":101},[91,10769,10770,10772,10775,10777,10779],{"class":93,"line":1157},[91,10771,105],{"class":97},[91,10773,10774],{"class":101}," g_b ",[91,10776,147],{"class":97},[91,10778,2016],{"class":150},[91,10780,1268],{"class":101},[91,10782,10783],{"class":93,"line":1172},[91,10784,2378],{"emptyLinePlaceholder":17},[91,10786,10787],{"class":93,"line":1178},[91,10788,10789],{"class":160},"\u002F\u002F全局常量\n",[91,10791,10792,10794,10796,10799,10801,10803],{"class":93,"line":1192},[91,10793,6771],{"class":97},[91,10795,2360],{"class":97},[91,10797,10798],{"class":101}," c_g_a ",[91,10800,147],{"class":97},[91,10802,2016],{"class":150},[91,10804,1268],{"class":101},[91,10806,10807,10809,10811,10814,10816,10818],{"class":93,"line":1198},[91,10808,6771],{"class":97},[91,10810,2360],{"class":97},[91,10812,10813],{"class":101}," c_g_b ",[91,10815,147],{"class":97},[91,10817,2016],{"class":150},[91,10819,1268],{"class":101},[91,10821,10822],{"class":93,"line":1289},[91,10823,2378],{"emptyLinePlaceholder":17},[91,10825,10826,10828,10830],{"class":93,"line":1295},[91,10827,105],{"class":97},[91,10829,1951],{"class":1941},[91,10831,10832],{"class":101},"() {\n",[91,10834,10835],{"class":93,"line":1307},[91,10836,2378],{"emptyLinePlaceholder":17},[91,10838,10839],{"class":93,"line":1590},[91,10840,10841],{"class":160},"    \u002F\u002F局部变量\n",[91,10843,10844,10846,10849,10851,10853],{"class":93,"line":1595},[91,10845,1963],{"class":97},[91,10847,10848],{"class":101}," a ",[91,10850,147],{"class":97},[91,10852,2016],{"class":150},[91,10854,1268],{"class":101},[91,10856,10857,10859,10862,10864,10866],{"class":93,"line":1601},[91,10858,1963],{"class":97},[91,10860,10861],{"class":101}," b ",[91,10863,147],{"class":97},[91,10865,2016],{"class":150},[91,10867,1268],{"class":101},[91,10869,10870],{"class":93,"line":1606},[91,10871,2378],{"emptyLinePlaceholder":17},[91,10873,10874],{"class":93,"line":1620},[91,10875,10876],{"class":160},"    \u002F\u002F打印地址\n",[91,10878,10879,10881,10883,10886,10888,10890,10892,10894,10896,10899,10901],{"class":93,"line":1625},[91,10880,6508],{"class":101},[91,10882,1146],{"class":97},[91,10884,10885],{"class":206}," \"局部变量a地址为： \"",[91,10887,1422],{"class":97},[91,10889,1636],{"class":101},[91,10891,105],{"class":97},[91,10893,531],{"class":101},[91,10895,455],{"class":97},[91,10897,10898],{"class":101},"a ",[91,10900,1146],{"class":97},[91,10902,8819],{"class":101},[91,10904,10905,10907,10909,10912,10914,10916,10918,10920,10922,10925,10927],{"class":93,"line":1631},[91,10906,6508],{"class":101},[91,10908,1146],{"class":97},[91,10910,10911],{"class":206}," \"局部变量b地址为： \"",[91,10913,1422],{"class":97},[91,10915,1636],{"class":101},[91,10917,105],{"class":97},[91,10919,531],{"class":101},[91,10921,455],{"class":97},[91,10923,10924],{"class":101},"b ",[91,10926,1146],{"class":97},[91,10928,8819],{"class":101},[91,10930,10931],{"class":93,"line":1652},[91,10932,2378],{"emptyLinePlaceholder":17},[91,10934,10935,10937,10939,10942,10944,10947,10949,10951,10953,10956,10958],{"class":93,"line":1657},[91,10936,6508],{"class":101},[91,10938,1146],{"class":97},[91,10940,10941],{"class":206}," \"全局变量g_a地址为： \"",[91,10943,1422],{"class":97},[91,10945,10946],{"class":101},"  (",[91,10948,105],{"class":97},[91,10950,531],{"class":101},[91,10952,455],{"class":97},[91,10954,10955],{"class":101},"g_a ",[91,10957,1146],{"class":97},[91,10959,8819],{"class":101},[91,10961,10962,10964,10966,10969,10971,10973,10975,10977,10979,10982,10984],{"class":93,"line":1671},[91,10963,6508],{"class":101},[91,10965,1146],{"class":97},[91,10967,10968],{"class":206}," \"全局变量g_b地址为： \"",[91,10970,1422],{"class":97},[91,10972,10946],{"class":101},[91,10974,105],{"class":97},[91,10976,531],{"class":101},[91,10978,455],{"class":97},[91,10980,10981],{"class":101},"g_b ",[91,10983,1146],{"class":97},[91,10985,8819],{"class":101},[91,10987,10988],{"class":93,"line":1676},[91,10989,2378],{"emptyLinePlaceholder":17},[91,10991,10992],{"class":93,"line":1705},[91,10993,10994],{"class":160},"    \u002F\u002F静态变量\n",[91,10996,10997,11000,11002,11005,11007,11009],{"class":93,"line":1710},[91,10998,10999],{"class":97},"    static",[91,11001,2360],{"class":97},[91,11003,11004],{"class":101}," s_a ",[91,11006,147],{"class":97},[91,11008,2016],{"class":150},[91,11010,1268],{"class":101},[91,11012,11013,11015,11017,11020,11022,11024],{"class":93,"line":1727},[91,11014,10999],{"class":97},[91,11016,2360],{"class":97},[91,11018,11019],{"class":101}," s_b ",[91,11021,147],{"class":97},[91,11023,2016],{"class":150},[91,11025,1268],{"class":101},[91,11027,11028],{"class":93,"line":1732},[91,11029,2378],{"emptyLinePlaceholder":17},[91,11031,11032,11034,11036,11039,11041,11043,11045,11047,11049,11052,11054],{"class":93,"line":1737},[91,11033,6508],{"class":101},[91,11035,1146],{"class":97},[91,11037,11038],{"class":206}," \"静态变量s_a地址为： \"",[91,11040,1422],{"class":97},[91,11042,1636],{"class":101},[91,11044,105],{"class":97},[91,11046,531],{"class":101},[91,11048,455],{"class":97},[91,11050,11051],{"class":101},"s_a ",[91,11053,1146],{"class":97},[91,11055,8819],{"class":101},[91,11057,11058,11060,11062,11065,11067,11069,11071,11073,11075,11078,11080],{"class":93,"line":1742},[91,11059,6508],{"class":101},[91,11061,1146],{"class":97},[91,11063,11064],{"class":206}," \"静态变量s_b地址为： \"",[91,11066,1422],{"class":97},[91,11068,1636],{"class":101},[91,11070,105],{"class":97},[91,11072,531],{"class":101},[91,11074,455],{"class":97},[91,11076,11077],{"class":101},"s_b ",[91,11079,1146],{"class":97},[91,11081,8819],{"class":101},[91,11083,11084],{"class":93,"line":1756},[91,11085,2378],{"emptyLinePlaceholder":17},[91,11087,11088,11090,11092,11095,11097,11099,11101,11103,11105,11107,11109],{"class":93,"line":1761},[91,11089,6508],{"class":101},[91,11091,1146],{"class":97},[91,11093,11094],{"class":206}," \"字符串常量地址为： \"",[91,11096,1422],{"class":97},[91,11098,1636],{"class":101},[91,11100,105],{"class":97},[91,11102,531],{"class":101},[91,11104,455],{"class":97},[91,11106,1164],{"class":206},[91,11108,1422],{"class":97},[91,11110,8819],{"class":101},[91,11112,11113,11115,11117,11119,11121,11123,11125,11127,11129,11132,11134],{"class":93,"line":2555},[91,11114,6508],{"class":101},[91,11116,1146],{"class":97},[91,11118,11094],{"class":206},[91,11120,1422],{"class":97},[91,11122,1636],{"class":101},[91,11124,105],{"class":97},[91,11126,531],{"class":101},[91,11128,455],{"class":97},[91,11130,11131],{"class":206},"\"hello world1\"",[91,11133,1422],{"class":97},[91,11135,8819],{"class":101},[91,11137,11138],{"class":93,"line":2569},[91,11139,2378],{"emptyLinePlaceholder":17},[91,11141,11142,11144,11146,11149,11151,11153,11155,11157,11159,11162,11164],{"class":93,"line":2577},[91,11143,6508],{"class":101},[91,11145,1146],{"class":97},[91,11147,11148],{"class":206}," \"全局常量c_g_a地址为： \"",[91,11150,1422],{"class":97},[91,11152,1636],{"class":101},[91,11154,105],{"class":97},[91,11156,531],{"class":101},[91,11158,455],{"class":97},[91,11160,11161],{"class":101},"c_g_a ",[91,11163,1146],{"class":97},[91,11165,8819],{"class":101},[91,11167,11168,11170,11172,11175,11177,11179,11181,11183,11185,11188,11190],{"class":93,"line":2582},[91,11169,6508],{"class":101},[91,11171,1146],{"class":97},[91,11173,11174],{"class":206}," \"全局常量c_g_b地址为： \"",[91,11176,1422],{"class":97},[91,11178,1636],{"class":101},[91,11180,105],{"class":97},[91,11182,531],{"class":101},[91,11184,455],{"class":97},[91,11186,11187],{"class":101},"c_g_b ",[91,11189,1146],{"class":97},[91,11191,8819],{"class":101},[91,11193,11194],{"class":93,"line":2588},[91,11195,2378],{"emptyLinePlaceholder":17},[91,11197,11198,11201,11203,11206,11208,11210],{"class":93,"line":2594},[91,11199,11200],{"class":97},"    const",[91,11202,2360],{"class":97},[91,11204,11205],{"class":101}," c_l_a ",[91,11207,147],{"class":97},[91,11209,2016],{"class":150},[91,11211,1268],{"class":101},[91,11213,11214,11216,11218,11221,11223,11225],{"class":93,"line":2599},[91,11215,11200],{"class":97},[91,11217,2360],{"class":97},[91,11219,11220],{"class":101}," c_l_b ",[91,11222,147],{"class":97},[91,11224,2016],{"class":150},[91,11226,1268],{"class":101},[91,11228,11229,11231,11233,11236,11238,11240,11242,11244,11246,11249,11251],{"class":93,"line":7927},[91,11230,6508],{"class":101},[91,11232,1146],{"class":97},[91,11234,11235],{"class":206}," \"局部常量c_l_a地址为： \"",[91,11237,1422],{"class":97},[91,11239,1636],{"class":101},[91,11241,105],{"class":97},[91,11243,531],{"class":101},[91,11245,455],{"class":97},[91,11247,11248],{"class":101},"c_l_a ",[91,11250,1146],{"class":97},[91,11252,8819],{"class":101},[91,11254,11255,11257,11259,11262,11264,11266,11268,11270,11272,11275,11277],{"class":93,"line":7951},[91,11256,6508],{"class":101},[91,11258,1146],{"class":97},[91,11260,11261],{"class":206}," \"局部常量c_l_b地址为： \"",[91,11263,1422],{"class":97},[91,11265,1636],{"class":101},[91,11267,105],{"class":97},[91,11269,531],{"class":101},[91,11271,455],{"class":97},[91,11273,11274],{"class":101},"c_l_b ",[91,11276,1146],{"class":97},[91,11278,8819],{"class":101},[91,11280,11281],{"class":93,"line":7956},[91,11282,2378],{"emptyLinePlaceholder":17},[91,11284,11285,11287,11289,11291],{"class":93,"line":7962},[91,11286,2281],{"class":1941},[91,11288,102],{"class":101},[91,11290,2286],{"class":206},[91,11292,2697],{"class":101},[91,11294,11295],{"class":93,"line":7989},[91,11296,2378],{"emptyLinePlaceholder":17},[91,11298,11299,11301,11303],{"class":93,"line":7994},[91,11300,4068],{"class":97},[91,11302,4071],{"class":150},[91,11304,1268],{"class":101},[91,11306,11307],{"class":93,"line":8000},[91,11308,1543],{"class":101},[38,11310,11311],{},"总结：",[1109,11313,11314,11317,11320,11323],{},[49,11315,11316],{},"c++中程序运行前分为全局区和代码区",[49,11318,11319],{},"代码区特点是共享和只读",[49,11321,11322],{},"全局区中存放全局变量、静态变量、常量",[49,11324,11325],{},"常量区中存放const修饰的全局常量和字符串常量",[63,11327,11329],{"id":11328},"_512程序运行后","5.1.2程序运行后",[46,11331,11332],{},[49,11333,11334],{},"栈区：",[1109,11336,11337,11344],{},[49,11338,11339,11340,11343],{},"由编译器自动分配释放, 存放",[251,11341,11342],{},"函数的参数值,局部变量","等",[49,11345,11346,11347,11350],{},"注意事项：",[251,11348,11349],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[83,11352,11354],{"className":85,"code":11353,"language":5,"meta":10,"style":10},"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",[88,11355,11356,11367,11371,11386,11398,11402,11406,11414,11419,11434,11452,11469,11479,11487],{"__ignoreMap":10},[91,11357,11358,11360,11362,11365],{"class":93,"line":94},[91,11359,105],{"class":97},[91,11361,6497],{"class":97},[91,11363,11364],{"class":1941}," func",[91,11366,1954],{"class":101},[91,11368,11369],{"class":93,"line":11},[91,11370,1524],{"class":101},[91,11372,11373,11375,11377,11379,11381,11383],{"class":93,"line":1157},[91,11374,1963],{"class":97},[91,11376,10848],{"class":101},[91,11378,147],{"class":97},[91,11380,2016],{"class":150},[91,11382,157],{"class":101},[91,11384,11385],{"class":160}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[91,11387,11388,11390,11392,11395],{"class":93,"line":1172},[91,11389,4068],{"class":97},[91,11391,10563],{"class":97},[91,11393,11394],{"class":101},"a;",[91,11396,11397],{"class":160}," \u002F\u002F放回局部变量的地址\n",[91,11399,11400],{"class":93,"line":1178},[91,11401,1543],{"class":101},[91,11403,11404],{"class":93,"line":1192},[91,11405,2378],{"emptyLinePlaceholder":17},[91,11407,11408,11410,11412],{"class":93,"line":1198},[91,11409,105],{"class":97},[91,11411,1951],{"class":1941},[91,11413,10832],{"class":101},[91,11415,11416],{"class":93,"line":1289},[91,11417,11418],{"class":160},"    \u002F\u002F接受func的返回值\n",[91,11420,11421,11423,11425,11428,11430,11432],{"class":93,"line":1295},[91,11422,1963],{"class":97},[91,11424,6497],{"class":97},[91,11426,11427],{"class":101},"p ",[91,11429,147],{"class":97},[91,11431,11364],{"class":1941},[91,11433,5615],{"class":101},[91,11435,11436,11438,11440,11442,11444,11446,11449],{"class":93,"line":1307},[91,11437,6508],{"class":101},[91,11439,1146],{"class":97},[91,11441,6497],{"class":97},[91,11443,11427],{"class":101},[91,11445,1146],{"class":97},[91,11447,11448],{"class":101}," endl;",[91,11450,11451],{"class":160}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[91,11453,11454,11456,11458,11460,11462,11464,11466],{"class":93,"line":1590},[91,11455,6508],{"class":101},[91,11457,1146],{"class":97},[91,11459,6497],{"class":97},[91,11461,11427],{"class":101},[91,11463,1146],{"class":97},[91,11465,11448],{"class":101},[91,11467,11468],{"class":160}," \u002F\u002F第二次这个数据不再保留\n",[91,11470,11471,11473,11475,11477],{"class":93,"line":1595},[91,11472,2281],{"class":1941},[91,11474,102],{"class":101},[91,11476,2286],{"class":206},[91,11478,2697],{"class":101},[91,11480,11481,11483,11485],{"class":93,"line":1601},[91,11482,4068],{"class":97},[91,11484,4071],{"class":150},[91,11486,1268],{"class":101},[91,11488,11489],{"class":93,"line":1606},[91,11490,1543],{"class":101},[38,11492,11493],{},"输出结果：",[38,11495,11496],{},[1440,11497],{"alt":11498,"src":11499},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[38,11501,11502],{},"总结：不要返回局部变量的地址",[46,11504,11505],{"start":11},[49,11506,11507],{},"堆区",[1109,11509,11510,11513],{},[49,11511,11512],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[49,11514,11515],{},"在c++中主要利用new在堆区开辟内存",[83,11517,11519],{"className":85,"code":11518,"language":5,"meta":10,"style":10},"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",[88,11520,11521,11536,11540,11545,11566,11573,11577,11585,11589,11594,11608,11620],{"__ignoreMap":10},[91,11522,11523,11525,11528,11531,11533],{"class":93,"line":94},[91,11524,105],{"class":97},[91,11526,11527],{"class":97},"  *",[91,11529,11530],{"class":1941},"func",[91,11532,2405],{"class":101},[91,11534,11535],{"class":160},"  \u002F\u002F函数返回指针\n",[91,11537,11538],{"class":93,"line":11},[91,11539,1524],{"class":101},[91,11541,11542],{"class":93,"line":1157},[91,11543,11544],{"class":160},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[91,11546,11547,11549,11551,11553,11555,11558,11560,11562,11564],{"class":93,"line":1172},[91,11548,4125],{"class":97},[91,11550,6497],{"class":97},[91,11552,38],{"class":101},[91,11554,147],{"class":97},[91,11556,11557],{"class":97}," new",[91,11559,2360],{"class":97},[91,11561,102],{"class":101},[91,11563,548],{"class":150},[91,11565,2697],{"class":101},[91,11567,11568,11570],{"class":93,"line":1178},[91,11569,4359],{"class":97},[91,11571,11572],{"class":101}," p;\n",[91,11574,11575],{"class":93,"line":1192},[91,11576,1543],{"class":101},[91,11578,11579,11581,11583],{"class":93,"line":1198},[91,11580,105],{"class":97},[91,11582,1951],{"class":1941},[91,11584,1954],{"class":101},[91,11586,11587],{"class":93,"line":1289},[91,11588,1524],{"class":101},[91,11590,11591],{"class":93,"line":1295},[91,11592,11593],{"class":160},"    \u002F\u002F在堆区开辟数据\n",[91,11595,11596,11598,11600,11602,11604,11606],{"class":93,"line":1307},[91,11597,1963],{"class":97},[91,11599,6497],{"class":97},[91,11601,38],{"class":101},[91,11603,147],{"class":97},[91,11605,11530],{"class":1941},[91,11607,5615],{"class":101},[91,11609,11610,11612,11614,11616,11618],{"class":93,"line":1590},[91,11611,1529],{"class":101},[91,11613,6398],{"class":97},[91,11615,38],{"class":101},[91,11617,1146],{"class":97},[91,11619,1169],{"class":101},[91,11621,11622],{"class":93,"line":1595},[91,11623,1543],{"class":101},[38,11625,11626],{},"图片展示：",[38,11628,11629],{},[1440,11630],{"alt":11498,"src":11631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[38,11633,11634],{},"堆区内存由程序员管生死！！！",[46,11636,11637],{"start":1157},[49,11638,11639],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[38,11641,11642],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[38,11644,11645,11646],{},"​语法：",[88,11647,11648],{}," new 数据类型",[38,11650,11651],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[83,11653,11655],{"className":85,"code":11654,"language":5,"meta":10,"style":10},"\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",[88,11656,11657,11662,11672,11676,11681,11686,11708,11712,11720,11724,11738,11750,11762,11774,11779,11784,11795,11799,11804,11812,11816,11821,11843,11869,11873,11891,11895,11921,11925,11937,11941,11946,11951,11959,11963,11967,11975,11979,11985,11991],{"__ignoreMap":10},[91,11658,11659],{"class":93,"line":94},[91,11660,11661],{"class":160},"\u002F\u002F1.new的基本语法\n",[91,11663,11664,11666,11668,11670],{"class":93,"line":11},[91,11665,105],{"class":97},[91,11667,6497],{"class":97},[91,11669,11530],{"class":1941},[91,11671,1954],{"class":101},[91,11673,11674],{"class":93,"line":1157},[91,11675,1524],{"class":101},[91,11677,11678],{"class":93,"line":1172},[91,11679,11680],{"class":160},"    \u002F\u002F在堆区创建整型数据\n",[91,11682,11683],{"class":93,"line":1178},[91,11684,11685],{"class":160},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[91,11687,11688,11690,11692,11694,11697,11699,11701,11703,11705],{"class":93,"line":1192},[91,11689,1963],{"class":97},[91,11691,6497],{"class":97},[91,11693,38],{"class":101},[91,11695,11696],{"class":97},"=new",[91,11698,2360],{"class":97},[91,11700,102],{"class":101},[91,11702,548],{"class":150},[91,11704,5945],{"class":101},[91,11706,11707],{"class":160},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[91,11709,11710],{"class":93,"line":1198},[91,11711,1543],{"class":101},[91,11713,11714,11716,11718],{"class":93,"line":1289},[91,11715,5343],{"class":97},[91,11717,5567],{"class":1941},[91,11719,1954],{"class":101},[91,11721,11722],{"class":93,"line":1295},[91,11723,1524],{"class":101},[91,11725,11726,11728,11730,11732,11734,11736],{"class":93,"line":1307},[91,11727,1963],{"class":97},[91,11729,6497],{"class":97},[91,11731,38],{"class":101},[91,11733,147],{"class":97},[91,11735,11530],{"class":1941},[91,11737,5615],{"class":101},[91,11739,11740,11742,11744,11746,11748],{"class":93,"line":1590},[91,11741,1529],{"class":101},[91,11743,6398],{"class":97},[91,11745,38],{"class":101},[91,11747,1146],{"class":97},[91,11749,1169],{"class":101},[91,11751,11752,11754,11756,11758,11760],{"class":93,"line":1595},[91,11753,1529],{"class":101},[91,11755,6398],{"class":97},[91,11757,38],{"class":101},[91,11759,1146],{"class":97},[91,11761,1169],{"class":101},[91,11763,11764,11766,11768,11770,11772],{"class":93,"line":1601},[91,11765,1529],{"class":101},[91,11767,6398],{"class":97},[91,11769,38],{"class":101},[91,11771,1146],{"class":97},[91,11773,1169],{"class":101},[91,11775,11776],{"class":93,"line":1606},[91,11777,11778],{"class":160},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[91,11780,11781],{"class":93,"line":1620},[91,11782,11783],{"class":160},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[91,11785,11786,11789,11792],{"class":93,"line":1625},[91,11787,11788],{"class":97},"    delete",[91,11790,11791],{"class":101}," p;",[91,11793,11794],{"class":160},"\u002F\u002F删除这块地址\n",[91,11796,11797],{"class":93,"line":1631},[91,11798,1543],{"class":101},[91,11800,11801],{"class":93,"line":1652},[91,11802,11803],{"class":160},"\u002F\u002F2.在堆区利用new开辟数组\n",[91,11805,11806,11808,11810],{"class":93,"line":1657},[91,11807,5343],{"class":97},[91,11809,5636],{"class":1941},[91,11811,1954],{"class":101},[91,11813,11814],{"class":93,"line":1671},[91,11815,1524],{"class":101},[91,11817,11818],{"class":93,"line":1676},[91,11819,11820],{"class":160},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[91,11822,11823,11825,11827,11829,11831,11833,11835,11837,11840],{"class":93,"line":1705},[91,11824,1963],{"class":97},[91,11826,6497],{"class":97},[91,11828,3858],{"class":101},[91,11830,11696],{"class":97},[91,11832,2360],{"class":97},[91,11834,992],{"class":101},[91,11836,548],{"class":150},[91,11838,11839],{"class":101},"];",[91,11841,11842],{"class":160},"\u002F\u002F10代表数组有10个元素\n",[91,11844,11845,11847,11849,11851,11853,11855,11857,11859,11861,11863,11865,11867],{"class":93,"line":1710},[91,11846,3179],{"class":97},[91,11848,1636],{"class":101},[91,11850,105],{"class":97},[91,11852,3010],{"class":101},[91,11854,147],{"class":97},[91,11856,293],{"class":150},[91,11858,3017],{"class":101},[91,11860,1012],{"class":97},[91,11862,548],{"class":150},[91,11864,3017],{"class":101},[91,11866,2270],{"class":97},[91,11868,108],{"class":101},[91,11870,11871],{"class":93,"line":1727},[91,11872,2008],{"class":101},[91,11874,11875,11878,11880,11882,11884,11886,11888],{"class":93,"line":1732},[91,11876,11877],{"class":101},"        arr[i]",[91,11879,147],{"class":97},[91,11881,543],{"class":101},[91,11883,583],{"class":97},[91,11885,413],{"class":150},[91,11887,157],{"class":101},[91,11889,11890],{"class":160},"\u002F\u002F给10个元素赋值100～109\n",[91,11892,11893],{"class":93,"line":1737},[91,11894,2165],{"class":101},[91,11896,11897,11899,11901,11903,11905,11907,11909,11911,11913,11915,11917,11919],{"class":93,"line":1742},[91,11898,3179],{"class":97},[91,11900,1636],{"class":101},[91,11902,105],{"class":97},[91,11904,3010],{"class":101},[91,11906,147],{"class":97},[91,11908,293],{"class":150},[91,11910,3017],{"class":101},[91,11912,1012],{"class":97},[91,11914,548],{"class":150},[91,11916,3017],{"class":101},[91,11918,2270],{"class":97},[91,11920,108],{"class":101},[91,11922,11923],{"class":93,"line":1756},[91,11924,2008],{"class":101},[91,11926,11927,11929,11931,11933,11935],{"class":93,"line":1761},[91,11928,3429],{"class":101},[91,11930,1146],{"class":97},[91,11932,4332],{"class":101},[91,11934,1146],{"class":97},[91,11936,1169],{"class":101},[91,11938,11939],{"class":93,"line":2555},[91,11940,2165],{"class":101},[91,11942,11943],{"class":93,"line":2569},[91,11944,11945],{"class":160},"    \u002F\u002F释放堆区数组\n",[91,11947,11948],{"class":93,"line":2577},[91,11949,11950],{"class":160},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[91,11952,11953,11956],{"class":93,"line":2582},[91,11954,11955],{"class":97},"    delete[]",[91,11957,11958],{"class":101}," arr;\n",[91,11960,11961],{"class":93,"line":2588},[91,11962,1543],{"class":101},[91,11964,11965],{"class":93,"line":2594},[91,11966,2378],{"emptyLinePlaceholder":17},[91,11968,11969,11971,11973],{"class":93,"line":2599},[91,11970,105],{"class":97},[91,11972,1951],{"class":1941},[91,11974,1954],{"class":101},[91,11976,11977],{"class":93,"line":7927},[91,11978,1524],{"class":101},[91,11980,11981,11983],{"class":93,"line":7951},[91,11982,5612],{"class":1941},[91,11984,5615],{"class":101},[91,11986,11987,11989],{"class":93,"line":7956},[91,11988,5681],{"class":1941},[91,11990,5615],{"class":101},[91,11992,11993],{"class":93,"line":7962},[91,11994,1543],{"class":101},[5105,11996,11997],{},"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":10,"searchDepth":11,"depth":11,"links":11999},[12000],{"id":10668,"depth":11,"text":10669,"children":12001},[12002,12003],{"id":10700,"depth":1157,"text":10701},{"id":11328,"depth":1157,"text":11329},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10660,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12010,"title":12011,"body":12012,"description":10,"extension":14,"meta":13493,"navigation":17,"path":13494,"seo":13495,"stem":13496,"__hash__":13497},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12013,"toc":13485},[12014,12017,12021,12024,12027,12196,12200,12205,12222,12227,12379,12383,12386,12389,12783,12787,12790,12795,12798,13110,13114,13120,13280,13282,13290,13294,13297,13304,13482],[29,12015,12011],{"id":12016},"_6引用",[33,12018,12020],{"id":12019},"_61引用基本用法","6.1引用基本用法",[38,12022,12023],{},"引用的本质：给变量起别名",[38,12025,12026],{},"语法：数据类型 &别名=原名",[83,12028,12030],{"className":85,"code":12029,"language":5,"meta":10,"style":10},"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",[88,12031,12032,12040,12044,12056,12068,12072,12091,12110,12114,12125,12129,12148,12166,12170,12180,12184,12192],{"__ignoreMap":10},[91,12033,12034,12036,12038],{"class":93,"line":94},[91,12035,105],{"class":97},[91,12037,1951],{"class":1941},[91,12039,10832],{"class":101},[91,12041,12042],{"class":93,"line":11},[91,12043,2378],{"emptyLinePlaceholder":17},[91,12045,12046,12048,12050,12052,12054],{"class":93,"line":1157},[91,12047,1963],{"class":97},[91,12049,10848],{"class":101},[91,12051,147],{"class":97},[91,12053,2016],{"class":150},[91,12055,1268],{"class":101},[91,12057,12058,12060,12062,12064,12066],{"class":93,"line":1172},[91,12059,1963],{"class":97},[91,12061,10563],{"class":97},[91,12063,10924],{"class":101},[91,12065,147],{"class":97},[91,12067,1410],{"class":101},[91,12069,12070],{"class":93,"line":1178},[91,12071,2378],{"emptyLinePlaceholder":17},[91,12073,12074,12076,12078,12081,12083,12085,12087,12089],{"class":93,"line":1192},[91,12075,6508],{"class":101},[91,12077,1146],{"class":97},[91,12079,12080],{"class":206}," \"a = \"",[91,12082,1422],{"class":97},[91,12084,10848],{"class":101},[91,12086,1146],{"class":97},[91,12088,11448],{"class":101},[91,12090,7247],{"class":160},[91,12092,12093,12095,12097,12100,12102,12104,12106,12108],{"class":93,"line":1198},[91,12094,6508],{"class":101},[91,12096,1146],{"class":97},[91,12098,12099],{"class":206}," \"b = \"",[91,12101,1422],{"class":97},[91,12103,10861],{"class":101},[91,12105,1146],{"class":97},[91,12107,11448],{"class":101},[91,12109,7247],{"class":160},[91,12111,12112],{"class":93,"line":1289},[91,12113,2378],{"emptyLinePlaceholder":17},[91,12115,12116,12119,12121,12123],{"class":93,"line":1295},[91,12117,12118],{"class":101},"    b ",[91,12120,147],{"class":97},[91,12122,5733],{"class":150},[91,12124,1268],{"class":101},[91,12126,12127],{"class":93,"line":1307},[91,12128,2378],{"emptyLinePlaceholder":17},[91,12130,12131,12133,12135,12137,12139,12141,12143,12145],{"class":93,"line":1590},[91,12132,6508],{"class":101},[91,12134,1146],{"class":97},[91,12136,12080],{"class":206},[91,12138,1422],{"class":97},[91,12140,10848],{"class":101},[91,12142,1146],{"class":97},[91,12144,11448],{"class":101},[91,12146,12147],{"class":160},"\u002F\u002F100\n",[91,12149,12150,12152,12154,12156,12158,12160,12162,12164],{"class":93,"line":1595},[91,12151,6508],{"class":101},[91,12153,1146],{"class":97},[91,12155,12099],{"class":206},[91,12157,1422],{"class":97},[91,12159,10861],{"class":101},[91,12161,1146],{"class":97},[91,12163,11448],{"class":101},[91,12165,12147],{"class":160},[91,12167,12168],{"class":93,"line":1601},[91,12169,2378],{"emptyLinePlaceholder":17},[91,12171,12172,12174,12176,12178],{"class":93,"line":1606},[91,12173,2281],{"class":1941},[91,12175,102],{"class":101},[91,12177,2286],{"class":206},[91,12179,2697],{"class":101},[91,12181,12182],{"class":93,"line":1620},[91,12183,2378],{"emptyLinePlaceholder":17},[91,12185,12186,12188,12190],{"class":93,"line":1625},[91,12187,4068],{"class":97},[91,12189,4071],{"class":150},[91,12191,1268],{"class":101},[91,12193,12194],{"class":93,"line":1631},[91,12195,1543],{"class":101},[33,12197,12199],{"id":12198},"_62引用的注意事项","6.2引用的注意事项",[46,12201,12202],{},[49,12203,12204],{},"引用必须要初始化",[83,12206,12208],{"className":85,"code":12207,"language":5,"meta":10,"style":10},"int &b;\u002F\u002F非常错误！\n",[88,12209,12210],{"__ignoreMap":10},[91,12211,12212,12214,12216,12219],{"class":93,"line":94},[91,12213,105],{"class":97},[91,12215,10563],{"class":97},[91,12217,12218],{"class":101},"b;",[91,12220,12221],{"class":160},"\u002F\u002F非常错误！\n",[46,12223,12224],{"start":11},[49,12225,12226],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[83,12228,12230],{"className":85,"code":12229,"language":5,"meta":10,"style":10},"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",[88,12231,12232,12240,12252,12264,12272,12288,12301,12319,12337,12357,12367,12375],{"__ignoreMap":10},[91,12233,12234,12236,12238],{"class":93,"line":94},[91,12235,105],{"class":97},[91,12237,1951],{"class":1941},[91,12239,10832],{"class":101},[91,12241,12242,12244,12246,12248,12250],{"class":93,"line":11},[91,12243,1963],{"class":97},[91,12245,10848],{"class":101},[91,12247,147],{"class":97},[91,12249,2016],{"class":150},[91,12251,1268],{"class":101},[91,12253,12254,12256,12258,12260,12262],{"class":93,"line":1157},[91,12255,1963],{"class":97},[91,12257,10861],{"class":101},[91,12259,147],{"class":97},[91,12261,8929],{"class":150},[91,12263,1268],{"class":101},[91,12265,12266,12269],{"class":93,"line":1172},[91,12267,12268],{"class":160},"    \u002F\u002Fint &c;",[91,12270,12271],{"class":160}," \u002F\u002F错误，引用必须初始化\n",[91,12273,12274,12276,12278,12280,12282,12285],{"class":93,"line":1178},[91,12275,1963],{"class":97},[91,12277,10563],{"class":97},[91,12279,2924],{"class":101},[91,12281,147],{"class":97},[91,12283,12284],{"class":101}," a;",[91,12286,12287],{"class":160}," \u002F\u002F一旦初始化后，就不可以更改\n",[91,12289,12290,12293,12295,12298],{"class":93,"line":1192},[91,12291,12292],{"class":101},"    c ",[91,12294,147],{"class":97},[91,12296,12297],{"class":101}," b;",[91,12299,12300],{"class":160}," \u002F\u002F这是赋值操作，不是更改引用\n",[91,12302,12303,12305,12307,12309,12311,12313,12315,12317],{"class":93,"line":1198},[91,12304,6508],{"class":101},[91,12306,1146],{"class":97},[91,12308,12080],{"class":206},[91,12310,1422],{"class":97},[91,12312,10848],{"class":101},[91,12314,1146],{"class":97},[91,12316,11448],{"class":101},[91,12318,7232],{"class":160},[91,12320,12321,12323,12325,12327,12329,12331,12333,12335],{"class":93,"line":1289},[91,12322,6508],{"class":101},[91,12324,1146],{"class":97},[91,12326,12099],{"class":206},[91,12328,1422],{"class":97},[91,12330,10861],{"class":101},[91,12332,1146],{"class":97},[91,12334,11448],{"class":101},[91,12336,7232],{"class":160},[91,12338,12339,12341,12343,12346,12348,12351,12353,12355],{"class":93,"line":1295},[91,12340,6508],{"class":101},[91,12342,1146],{"class":97},[91,12344,12345],{"class":206}," \"c = \"",[91,12347,1422],{"class":97},[91,12349,12350],{"class":101}," c ",[91,12352,1146],{"class":97},[91,12354,11448],{"class":101},[91,12356,7232],{"class":160},[91,12358,12359,12361,12363,12365],{"class":93,"line":1307},[91,12360,2281],{"class":1941},[91,12362,102],{"class":101},[91,12364,2286],{"class":206},[91,12366,2697],{"class":101},[91,12368,12369,12371,12373],{"class":93,"line":1590},[91,12370,4068],{"class":97},[91,12372,4071],{"class":150},[91,12374,1268],{"class":101},[91,12376,12377],{"class":93,"line":1595},[91,12378,1543],{"class":101},[33,12380,12382],{"id":12381},"_63引用做函数参数","6.3引用做函数参数",[38,12384,12385],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[38,12387,12388],{},"优点：可以简化指针修改实参",[83,12390,12392],{"className":85,"code":12391,"language":5,"meta":10,"style":10},"\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",[88,12393,12394,12399,12422,12433,12443,12452,12456,12460,12465,12487,12499,12511,12521,12525,12529,12534,12556,12566,12574,12582,12586,12590,12598,12602,12614,12626,12630,12641,12667,12671,12691,12715,12719,12729,12753,12757,12767,12771,12779],{"__ignoreMap":10},[91,12395,12396],{"class":93,"line":94},[91,12397,12398],{"class":160},"\u002F\u002F1. 值传递\n",[91,12400,12401,12403,12406,12408,12410,12412,12415,12417,12419],{"class":93,"line":11},[91,12402,5343],{"class":97},[91,12404,12405],{"class":1941}," mySwap01",[91,12407,102],{"class":101},[91,12409,105],{"class":97},[91,12411,1376],{"class":5195},[91,12413,12414],{"class":101},", ",[91,12416,105],{"class":97},[91,12418,2811],{"class":5195},[91,12420,12421],{"class":101},") {\n",[91,12423,12424,12426,12429,12431],{"class":93,"line":1157},[91,12425,1963],{"class":97},[91,12427,12428],{"class":101}," temp ",[91,12430,147],{"class":97},[91,12432,1410],{"class":101},[91,12434,12435,12438,12440],{"class":93,"line":1172},[91,12436,12437],{"class":101},"    a ",[91,12439,147],{"class":97},[91,12441,12442],{"class":101}," b;\n",[91,12444,12445,12447,12449],{"class":93,"line":1178},[91,12446,12118],{"class":101},[91,12448,147],{"class":97},[91,12450,12451],{"class":101}," temp;\n",[91,12453,12454],{"class":93,"line":1192},[91,12455,1543],{"class":101},[91,12457,12458],{"class":93,"line":1198},[91,12459,2378],{"emptyLinePlaceholder":17},[91,12461,12462],{"class":93,"line":1289},[91,12463,12464],{"class":160},"\u002F\u002F2. 地址传递\n",[91,12466,12467,12469,12472,12474,12477,12479,12481,12483,12485],{"class":93,"line":1295},[91,12468,5343],{"class":97},[91,12470,12471],{"class":1941}," mySwap02",[91,12473,102],{"class":101},[91,12475,12476],{"class":97},"int*",[91,12478,1376],{"class":5195},[91,12480,12414],{"class":101},[91,12482,12476],{"class":97},[91,12484,2811],{"class":5195},[91,12486,12421],{"class":101},[91,12488,12489,12491,12493,12495,12497],{"class":93,"line":1307},[91,12490,1963],{"class":97},[91,12492,12428],{"class":101},[91,12494,147],{"class":97},[91,12496,6497],{"class":97},[91,12498,6176],{"class":101},[91,12500,12501,12503,12505,12507,12509],{"class":93,"line":1590},[91,12502,6382],{"class":97},[91,12504,10898],{"class":101},[91,12506,147],{"class":97},[91,12508,6497],{"class":97},[91,12510,6048],{"class":101},[91,12512,12513,12515,12517,12519],{"class":93,"line":1595},[91,12514,6382],{"class":97},[91,12516,10924],{"class":101},[91,12518,147],{"class":97},[91,12520,12451],{"class":101},[91,12522,12523],{"class":93,"line":1601},[91,12524,1543],{"class":101},[91,12526,12527],{"class":93,"line":1606},[91,12528,2378],{"emptyLinePlaceholder":17},[91,12530,12531],{"class":93,"line":1620},[91,12532,12533],{"class":160},"\u002F\u002F3. 引用传递\n",[91,12535,12536,12538,12541,12543,12546,12548,12550,12552,12554],{"class":93,"line":1625},[91,12537,5343],{"class":97},[91,12539,12540],{"class":1941}," mySwap03",[91,12542,102],{"class":101},[91,12544,12545],{"class":97},"int&",[91,12547,1376],{"class":5195},[91,12549,12414],{"class":101},[91,12551,12545],{"class":97},[91,12553,2811],{"class":5195},[91,12555,12421],{"class":101},[91,12557,12558,12560,12562,12564],{"class":93,"line":1631},[91,12559,1963],{"class":97},[91,12561,12428],{"class":101},[91,12563,147],{"class":97},[91,12565,1410],{"class":101},[91,12567,12568,12570,12572],{"class":93,"line":1652},[91,12569,12437],{"class":101},[91,12571,147],{"class":97},[91,12573,12442],{"class":101},[91,12575,12576,12578,12580],{"class":93,"line":1657},[91,12577,12118],{"class":101},[91,12579,147],{"class":97},[91,12581,12451],{"class":101},[91,12583,12584],{"class":93,"line":1671},[91,12585,1543],{"class":101},[91,12587,12588],{"class":93,"line":1676},[91,12589,2378],{"emptyLinePlaceholder":17},[91,12591,12592,12594,12596],{"class":93,"line":1705},[91,12593,105],{"class":97},[91,12595,1951],{"class":1941},[91,12597,10832],{"class":101},[91,12599,12600],{"class":93,"line":1710},[91,12601,2378],{"emptyLinePlaceholder":17},[91,12603,12604,12606,12608,12610,12612],{"class":93,"line":1727},[91,12605,1963],{"class":97},[91,12607,10848],{"class":101},[91,12609,147],{"class":97},[91,12611,2016],{"class":150},[91,12613,1268],{"class":101},[91,12615,12616,12618,12620,12622,12624],{"class":93,"line":1732},[91,12617,1963],{"class":97},[91,12619,10861],{"class":101},[91,12621,147],{"class":97},[91,12623,8929],{"class":150},[91,12625,1268],{"class":101},[91,12627,12628],{"class":93,"line":1737},[91,12629,2378],{"emptyLinePlaceholder":17},[91,12631,12632,12635,12638],{"class":93,"line":1742},[91,12633,12634],{"class":1941},"    mySwap01",[91,12636,12637],{"class":101},"(a, b);",[91,12639,12640],{"class":160},"\u002F\u002F值传递，形参不会修饰实参\n",[91,12642,12643,12645,12647,12650,12652,12654,12656,12659,12661,12663,12665],{"class":93,"line":1756},[91,12644,6508],{"class":101},[91,12646,1146],{"class":97},[91,12648,12649],{"class":206}," \"a:\"",[91,12651,1422],{"class":97},[91,12653,10848],{"class":101},[91,12655,1146],{"class":97},[91,12657,12658],{"class":206}," \" b:\"",[91,12660,1422],{"class":97},[91,12662,10861],{"class":101},[91,12664,1146],{"class":97},[91,12666,8819],{"class":101},[91,12668,12669],{"class":93,"line":1761},[91,12670,2378],{"emptyLinePlaceholder":17},[91,12672,12673,12676,12678,12680,12683,12685,12688],{"class":93,"line":2555},[91,12674,12675],{"class":1941},"    mySwap02",[91,12677,102],{"class":101},[91,12679,455],{"class":97},[91,12681,12682],{"class":101},"a, ",[91,12684,455],{"class":97},[91,12686,12687],{"class":101},"b);",[91,12689,12690],{"class":160},"\u002F\u002F地址传递，形参会修饰实参\n",[91,12692,12693,12695,12697,12699,12701,12703,12705,12707,12709,12711,12713],{"class":93,"line":2569},[91,12694,6508],{"class":101},[91,12696,1146],{"class":97},[91,12698,12649],{"class":206},[91,12700,1422],{"class":97},[91,12702,10848],{"class":101},[91,12704,1146],{"class":97},[91,12706,12658],{"class":206},[91,12708,1422],{"class":97},[91,12710,10861],{"class":101},[91,12712,1146],{"class":97},[91,12714,8819],{"class":101},[91,12716,12717],{"class":93,"line":2577},[91,12718,2378],{"emptyLinePlaceholder":17},[91,12720,12721,12724,12726],{"class":93,"line":2582},[91,12722,12723],{"class":1941},"    mySwap03",[91,12725,12637],{"class":101},[91,12727,12728],{"class":160},"\u002F\u002F引用传递，形参会修饰实参\n",[91,12730,12731,12733,12735,12737,12739,12741,12743,12745,12747,12749,12751],{"class":93,"line":2588},[91,12732,6508],{"class":101},[91,12734,1146],{"class":97},[91,12736,12649],{"class":206},[91,12738,1422],{"class":97},[91,12740,10848],{"class":101},[91,12742,1146],{"class":97},[91,12744,12658],{"class":206},[91,12746,1422],{"class":97},[91,12748,10861],{"class":101},[91,12750,1146],{"class":97},[91,12752,8819],{"class":101},[91,12754,12755],{"class":93,"line":2594},[91,12756,2378],{"emptyLinePlaceholder":17},[91,12758,12759,12761,12763,12765],{"class":93,"line":2599},[91,12760,2281],{"class":1941},[91,12762,102],{"class":101},[91,12764,2286],{"class":206},[91,12766,2697],{"class":101},[91,12768,12769],{"class":93,"line":7927},[91,12770,2378],{"emptyLinePlaceholder":17},[91,12772,12773,12775,12777],{"class":93,"line":7951},[91,12774,4068],{"class":97},[91,12776,4071],{"class":150},[91,12778,1268],{"class":101},[91,12780,12781],{"class":93,"line":7956},[91,12782,1543],{"class":101},[33,12784,12786],{"id":12785},"_64引用做函数的返回值","6.4引用做函数的返回值",[38,12788,12789],{},"作用：引用是可以作为函数的返回值存在的",[38,12791,9004,12792],{},[251,12793,12794],{},"不要返回局部变量引用",[38,12796,12797],{},"用法：函数调用作为左值",[83,12799,12801],{"className":9920,"code":12800,"language":9922,"meta":10,"style":10},"\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",[88,12802,12803,12808,12816,12831,12837,12841,12845,12850,12858,12875,12881,12885,12889,12897,12901,12906,12920,12940,12959,12963,12968,12981,13001,13019,13023,13039,13043,13062,13080,13084,13094,13098,13106],{"__ignoreMap":10},[91,12804,12805],{"class":93,"line":94},[91,12806,12807],{"class":160},"\u002F\u002F返回局部变量引用\n",[91,12809,12810,12812,12814],{"class":93,"line":11},[91,12811,12545],{"class":97},[91,12813,5567],{"class":1941},[91,12815,10832],{"class":101},[91,12817,12818,12820,12822,12824,12826,12828],{"class":93,"line":1157},[91,12819,1963],{"class":97},[91,12821,10848],{"class":101},[91,12823,147],{"class":97},[91,12825,2016],{"class":150},[91,12827,157],{"class":101},[91,12829,12830],{"class":160}," \u002F\u002F局部变量\n",[91,12832,12833,12835],{"class":93,"line":1172},[91,12834,4068],{"class":97},[91,12836,1410],{"class":101},[91,12838,12839],{"class":93,"line":1178},[91,12840,1543],{"class":101},[91,12842,12843],{"class":93,"line":1192},[91,12844,2378],{"emptyLinePlaceholder":17},[91,12846,12847],{"class":93,"line":1198},[91,12848,12849],{"class":160},"\u002F\u002F返回静态变量引用\n",[91,12851,12852,12854,12856],{"class":93,"line":1289},[91,12853,12545],{"class":97},[91,12855,5636],{"class":1941},[91,12857,10832],{"class":101},[91,12859,12860,12862,12864,12866,12868,12870,12872],{"class":93,"line":1295},[91,12861,10999],{"class":97},[91,12863,2360],{"class":97},[91,12865,10848],{"class":101},[91,12867,147],{"class":97},[91,12869,8929],{"class":150},[91,12871,157],{"class":101},[91,12873,12874],{"class":160},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[91,12876,12877,12879],{"class":93,"line":1307},[91,12878,4068],{"class":97},[91,12880,1410],{"class":101},[91,12882,12883],{"class":93,"line":1590},[91,12884,1543],{"class":101},[91,12886,12887],{"class":93,"line":1595},[91,12888,2378],{"emptyLinePlaceholder":17},[91,12890,12891,12893,12895],{"class":93,"line":1601},[91,12892,105],{"class":97},[91,12894,1951],{"class":1941},[91,12896,10832],{"class":101},[91,12898,12899],{"class":93,"line":1606},[91,12900,2378],{"emptyLinePlaceholder":17},[91,12902,12903],{"class":93,"line":1620},[91,12904,12905],{"class":160},"    \u002F\u002F不能返回局部变量的引用\n",[91,12907,12908,12911,12914,12916,12918],{"class":93,"line":1625},[91,12909,12910],{"class":97},"    int&",[91,12912,12913],{"class":101}," ref ",[91,12915,147],{"class":97},[91,12917,5567],{"class":1941},[91,12919,5615],{"class":101},[91,12921,12922,12924,12926,12929,12931,12933,12935,12937],{"class":93,"line":1631},[91,12923,6508],{"class":101},[91,12925,1146],{"class":97},[91,12927,12928],{"class":206}," \"ref = \"",[91,12930,1422],{"class":97},[91,12932,12913],{"class":101},[91,12934,1146],{"class":97},[91,12936,11448],{"class":101},[91,12938,12939],{"class":160},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[91,12941,12942,12944,12946,12948,12950,12952,12954,12956],{"class":93,"line":1652},[91,12943,6508],{"class":101},[91,12945,1146],{"class":97},[91,12947,12928],{"class":206},[91,12949,1422],{"class":97},[91,12951,12913],{"class":101},[91,12953,1146],{"class":97},[91,12955,11448],{"class":101},[91,12957,12958],{"class":160},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[91,12960,12961],{"class":93,"line":1657},[91,12962,2378],{"emptyLinePlaceholder":17},[91,12964,12965],{"class":93,"line":1671},[91,12966,12967],{"class":160},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[91,12969,12970,12972,12975,12977,12979],{"class":93,"line":1676},[91,12971,12910],{"class":97},[91,12973,12974],{"class":101}," ref2 ",[91,12976,147],{"class":97},[91,12978,5636],{"class":1941},[91,12980,5615],{"class":101},[91,12982,12983,12985,12987,12990,12992,12994,12996,12998],{"class":93,"line":1705},[91,12984,6508],{"class":101},[91,12986,1146],{"class":97},[91,12988,12989],{"class":206}," \"ref2 = \"",[91,12991,1422],{"class":97},[91,12993,12974],{"class":101},[91,12995,1146],{"class":97},[91,12997,11448],{"class":101},[91,12999,13000],{"class":160}," \u002F\u002F20\n",[91,13002,13003,13005,13007,13009,13011,13013,13015,13017],{"class":93,"line":1710},[91,13004,6508],{"class":101},[91,13006,1146],{"class":97},[91,13008,12989],{"class":206},[91,13010,1422],{"class":97},[91,13012,12974],{"class":101},[91,13014,1146],{"class":97},[91,13016,11448],{"class":101},[91,13018,13000],{"class":160},[91,13020,13021],{"class":93,"line":1727},[91,13022,2378],{"emptyLinePlaceholder":17},[91,13024,13025,13027,13030,13032,13034,13036],{"class":93,"line":1732},[91,13026,5681],{"class":1941},[91,13028,13029],{"class":101},"() ",[91,13031,147],{"class":97},[91,13033,2977],{"class":150},[91,13035,157],{"class":101},[91,13037,13038],{"class":160},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[91,13040,13041],{"class":93,"line":1737},[91,13042,2378],{"emptyLinePlaceholder":17},[91,13044,13045,13047,13049,13051,13053,13055,13057,13059],{"class":93,"line":1742},[91,13046,6508],{"class":101},[91,13048,1146],{"class":97},[91,13050,12989],{"class":206},[91,13052,1422],{"class":97},[91,13054,12974],{"class":101},[91,13056,1146],{"class":97},[91,13058,11448],{"class":101},[91,13060,13061],{"class":160}," \u002F\u002F1000\n",[91,13063,13064,13066,13068,13070,13072,13074,13076,13078],{"class":93,"line":1756},[91,13065,6508],{"class":101},[91,13067,1146],{"class":97},[91,13069,12989],{"class":206},[91,13071,1422],{"class":97},[91,13073,12974],{"class":101},[91,13075,1146],{"class":97},[91,13077,11448],{"class":101},[91,13079,13061],{"class":160},[91,13081,13082],{"class":93,"line":1761},[91,13083,2378],{"emptyLinePlaceholder":17},[91,13085,13086,13088,13090,13092],{"class":93,"line":2555},[91,13087,2281],{"class":1941},[91,13089,102],{"class":101},[91,13091,2286],{"class":206},[91,13093,2697],{"class":101},[91,13095,13096],{"class":93,"line":2569},[91,13097,2378],{"emptyLinePlaceholder":17},[91,13099,13100,13102,13104],{"class":93,"line":2577},[91,13101,4068],{"class":97},[91,13103,4071],{"class":150},[91,13105,1268],{"class":101},[91,13107,13108],{"class":93,"line":2582},[91,13109,1543],{"class":101},[33,13111,13113],{"id":13112},"_65引用的本质","6.5引用的本质",[38,13115,13116,13117],{},"本质：",[251,13118,13119],{},"引用的本质在c++内部实现是一个指针常量.",[83,13121,13123],{"className":85,"code":13122,"language":5,"meta":10,"style":10},"\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",[88,13124,13125,13130,13146,13160,13164,13173,13185,13190,13195,13206,13219,13223,13239,13256,13260,13268,13276],{"__ignoreMap":10},[91,13126,13127],{"class":93,"line":94},[91,13128,13129],{"class":160},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[91,13131,13132,13134,13136,13138,13140,13143],{"class":93,"line":11},[91,13133,5343],{"class":97},[91,13135,11364],{"class":1941},[91,13137,102],{"class":101},[91,13139,12545],{"class":97},[91,13141,13142],{"class":5195}," ref",[91,13144,13145],{"class":101},"){\n",[91,13147,13148,13151,13153,13155,13157],{"class":93,"line":1157},[91,13149,13150],{"class":101},"    ref ",[91,13152,147],{"class":97},[91,13154,5733],{"class":150},[91,13156,157],{"class":101},[91,13158,13159],{"class":160}," \u002F\u002F ref是引用，转换为*ref = 100\n",[91,13161,13162],{"class":93,"line":1172},[91,13163,1543],{"class":101},[91,13165,13166,13168,13170],{"class":93,"line":1178},[91,13167,105],{"class":97},[91,13169,1951],{"class":1941},[91,13171,13172],{"class":101},"(){\n",[91,13174,13175,13177,13179,13181,13183],{"class":93,"line":1192},[91,13176,1963],{"class":97},[91,13178,10848],{"class":101},[91,13180,147],{"class":97},[91,13182,2016],{"class":150},[91,13184,1268],{"class":101},[91,13186,13187],{"class":93,"line":1198},[91,13188,13189],{"class":101},"    \n",[91,13191,13192],{"class":93,"line":1289},[91,13193,13194],{"class":160},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[91,13196,13197,13199,13201,13203],{"class":93,"line":1295},[91,13198,12910],{"class":97},[91,13200,12913],{"class":101},[91,13202,147],{"class":97},[91,13204,13205],{"class":101}," a; \n",[91,13207,13208,13210,13212,13214,13216],{"class":93,"line":1307},[91,13209,13150],{"class":101},[91,13211,147],{"class":97},[91,13213,8929],{"class":150},[91,13215,157],{"class":101},[91,13217,13218],{"class":160}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[91,13220,13221],{"class":93,"line":1590},[91,13222,13189],{"class":101},[91,13224,13225,13227,13229,13231,13233,13235,13237],{"class":93,"line":1595},[91,13226,6508],{"class":101},[91,13228,1146],{"class":97},[91,13230,12649],{"class":206},[91,13232,1422],{"class":97},[91,13234,10848],{"class":101},[91,13236,1146],{"class":97},[91,13238,8819],{"class":101},[91,13240,13241,13243,13245,13248,13250,13252,13254],{"class":93,"line":1601},[91,13242,6508],{"class":101},[91,13244,1146],{"class":97},[91,13246,13247],{"class":206}," \"ref:\"",[91,13249,1422],{"class":97},[91,13251,12913],{"class":101},[91,13253,1146],{"class":97},[91,13255,8819],{"class":101},[91,13257,13258],{"class":93,"line":1606},[91,13259,13189],{"class":101},[91,13261,13262,13265],{"class":93,"line":1620},[91,13263,13264],{"class":1941},"    func",[91,13266,13267],{"class":101},"(a);\n",[91,13269,13270,13272,13274],{"class":93,"line":1625},[91,13271,4068],{"class":97},[91,13273,4071],{"class":150},[91,13275,1268],{"class":101},[91,13277,13278],{"class":93,"line":1631},[91,13279,1543],{"class":101},[38,13281,11311],{},[46,13283,13284,13287],{},[49,13285,13286],{},"引用的本质，就是一个指针常量",[49,13288,13289],{},"引用一旦初始化，就不可以发生改变",[33,13291,13293],{"id":13292},"_66常量引用","6.6常量引用",[38,13295,13296],{},"作用：常量引用主要用来修饰形参",[38,13298,13299,13300,13303],{},"在函数形参列表中，可以加",[251,13301,13302],{},"const修饰形参","，防止形参改变实参",[83,13305,13307],{"className":85,"code":13306,"language":5,"meta":10,"style":10},"\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",[88,13308,13309,13314,13319,13338,13343,13356,13360,13364,13372,13376,13381,13386,13400,13404,13412,13424,13428,13433,13445,13452,13456,13466,13470,13478],{"__ignoreMap":10},[91,13310,13311],{"class":93,"line":94},[91,13312,13313],{"class":160},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[91,13315,13316],{"class":93,"line":11},[91,13317,13318],{"class":160},"\u002F\u002F加上const就不能修改实参的\n",[91,13320,13321,13323,13326,13328,13330,13333,13336],{"class":93,"line":1157},[91,13322,5343],{"class":97},[91,13324,13325],{"class":1941}," showValue",[91,13327,102],{"class":101},[91,13329,6771],{"class":97},[91,13331,13332],{"class":97}," int&",[91,13334,13335],{"class":5195}," v",[91,13337,12421],{"class":101},[91,13339,13340],{"class":93,"line":1172},[91,13341,13342],{"class":160},"    \u002F\u002Fv += 100;\n",[91,13344,13345,13347,13349,13352,13354],{"class":93,"line":1178},[91,13346,6508],{"class":101},[91,13348,1146],{"class":97},[91,13350,13351],{"class":101}," v ",[91,13353,1146],{"class":97},[91,13355,8819],{"class":101},[91,13357,13358],{"class":93,"line":1192},[91,13359,1543],{"class":101},[91,13361,13362],{"class":93,"line":1198},[91,13363,2378],{"emptyLinePlaceholder":17},[91,13365,13366,13368,13370],{"class":93,"line":1289},[91,13367,105],{"class":97},[91,13369,1951],{"class":1941},[91,13371,10832],{"class":101},[91,13373,13374],{"class":93,"line":1295},[91,13375,2378],{"emptyLinePlaceholder":17},[91,13377,13378],{"class":93,"line":1307},[91,13379,13380],{"class":160},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[91,13382,13383],{"class":93,"line":1590},[91,13384,13385],{"class":160},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[91,13387,13388,13390,13392,13394,13396,13398],{"class":93,"line":1595},[91,13389,11200],{"class":97},[91,13391,13332],{"class":97},[91,13393,12913],{"class":101},[91,13395,147],{"class":97},[91,13397,2016],{"class":150},[91,13399,1268],{"class":101},[91,13401,13402],{"class":93,"line":1601},[91,13403,2378],{"emptyLinePlaceholder":17},[91,13405,13406,13409],{"class":93,"line":1606},[91,13407,13408],{"class":160},"    \u002F\u002Fref = 100;",[91,13410,13411],{"class":160},"  \u002F\u002F加入const后不可以修改变量\n",[91,13413,13414,13416,13418,13420,13422],{"class":93,"line":1620},[91,13415,6508],{"class":101},[91,13417,1146],{"class":97},[91,13419,12913],{"class":101},[91,13421,1146],{"class":97},[91,13423,8819],{"class":101},[91,13425,13426],{"class":93,"line":1625},[91,13427,2378],{"emptyLinePlaceholder":17},[91,13429,13430],{"class":93,"line":1631},[91,13431,13432],{"class":160},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[91,13434,13435,13437,13439,13441,13443],{"class":93,"line":1652},[91,13436,1963],{"class":97},[91,13438,10848],{"class":101},[91,13440,147],{"class":97},[91,13442,2016],{"class":150},[91,13444,1268],{"class":101},[91,13446,13447,13450],{"class":93,"line":1657},[91,13448,13449],{"class":1941},"    showValue",[91,13451,13267],{"class":101},[91,13453,13454],{"class":93,"line":1671},[91,13455,2378],{"emptyLinePlaceholder":17},[91,13457,13458,13460,13462,13464],{"class":93,"line":1676},[91,13459,2281],{"class":1941},[91,13461,102],{"class":101},[91,13463,2286],{"class":206},[91,13465,2697],{"class":101},[91,13467,13468],{"class":93,"line":1705},[91,13469,2378],{"emptyLinePlaceholder":17},[91,13471,13472,13474,13476],{"class":93,"line":1710},[91,13473,4068],{"class":97},[91,13475,4071],{"class":150},[91,13477,1268],{"class":101},[91,13479,13480],{"class":93,"line":1727},[91,13481,1543],{"class":101},[5105,13483,13484],{},"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":10,"searchDepth":11,"depth":11,"links":13486},[13487,13488,13489,13490,13491,13492],{"id":12019,"depth":11,"text":12020},{"id":12198,"depth":11,"text":12199},{"id":12381,"depth":11,"text":12382},{"id":12785,"depth":11,"text":12786},{"id":13112,"depth":11,"text":13113},{"id":13292,"depth":11,"text":13293},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12011,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13499,"title":13500,"body":13501,"description":10,"extension":14,"meta":14582,"navigation":17,"path":14583,"seo":14584,"stem":14585,"__hash__":14586},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13502,"toc":14574},[13503,13506,13510,13513,13518,13750,13752,13763,13767,13770,13778,13882,13885,13889,13892,13896,13899,13904,13926,13932,14259,14262,14266,14274,14571],[29,13504,13500],{"id":13505},"_7函数高级部分",[33,13507,13509],{"id":13508},"_71函数默认参数","7.1函数默认参数",[38,13511,13512],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[38,13514,5160,13515],{},[88,13516,13517],{}," 返回值类型  函数名 （参数= 默认值）{}",[83,13519,13521],{"className":85,"code":13520,"language":5,"meta":10,"style":10},"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",[88,13522,13523,13558,13573,13577,13581,13586,13591,13620,13640,13650,13654,13658,13666,13670,13698,13720,13724,13734,13738,13746],{"__ignoreMap":10},[91,13524,13525,13527,13529,13531,13533,13535,13537,13539,13541,13544,13546,13548,13550,13552,13554,13556],{"class":93,"line":94},[91,13526,105],{"class":97},[91,13528,11364],{"class":1941},[91,13530,102],{"class":101},[91,13532,105],{"class":97},[91,13534,1376],{"class":5195},[91,13536,12414],{"class":101},[91,13538,105],{"class":97},[91,13540,2811],{"class":5195},[91,13542,13543],{"class":97}," =",[91,13545,2016],{"class":150},[91,13547,12414],{"class":101},[91,13549,105],{"class":97},[91,13551,2827],{"class":5195},[91,13553,13543],{"class":97},[91,13555,2016],{"class":150},[91,13557,12421],{"class":101},[91,13559,13560,13562,13564,13566,13568,13570],{"class":93,"line":11},[91,13561,4068],{"class":97},[91,13563,10848],{"class":101},[91,13565,583],{"class":97},[91,13567,10861],{"class":101},[91,13569,583],{"class":97},[91,13571,13572],{"class":101}," c;\n",[91,13574,13575],{"class":93,"line":1157},[91,13576,1543],{"class":101},[91,13578,13579],{"class":93,"line":1172},[91,13580,2378],{"emptyLinePlaceholder":17},[91,13582,13583],{"class":93,"line":1178},[91,13584,13585],{"class":160},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[91,13587,13588],{"class":93,"line":1192},[91,13589,13590],{"class":160},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[91,13592,13593,13595,13598,13600,13602,13604,13606,13608,13610,13612,13614,13616,13618],{"class":93,"line":1198},[91,13594,105],{"class":97},[91,13596,13597],{"class":1941}," func2",[91,13599,102],{"class":101},[91,13601,105],{"class":97},[91,13603,1376],{"class":5195},[91,13605,13543],{"class":97},[91,13607,2016],{"class":150},[91,13609,12414],{"class":101},[91,13611,105],{"class":97},[91,13613,2811],{"class":5195},[91,13615,13543],{"class":97},[91,13617,2016],{"class":150},[91,13619,2697],{"class":101},[91,13621,13622,13624,13626,13628,13630,13632,13634,13636,13638],{"class":93,"line":1289},[91,13623,105],{"class":97},[91,13625,13597],{"class":1941},[91,13627,102],{"class":101},[91,13629,105],{"class":97},[91,13631,1376],{"class":5195},[91,13633,12414],{"class":101},[91,13635,105],{"class":97},[91,13637,2811],{"class":5195},[91,13639,12421],{"class":101},[91,13641,13642,13644,13646,13648],{"class":93,"line":1295},[91,13643,4068],{"class":97},[91,13645,10848],{"class":101},[91,13647,583],{"class":97},[91,13649,12442],{"class":101},[91,13651,13652],{"class":93,"line":1307},[91,13653,1543],{"class":101},[91,13655,13656],{"class":93,"line":1590},[91,13657,2378],{"emptyLinePlaceholder":17},[91,13659,13660,13662,13664],{"class":93,"line":1595},[91,13661,105],{"class":97},[91,13663,1951],{"class":1941},[91,13665,10832],{"class":101},[91,13667,13668],{"class":93,"line":1601},[91,13669,2378],{"emptyLinePlaceholder":17},[91,13671,13672,13674,13676,13679,13681,13683,13685,13687,13689,13691,13694,13696],{"class":93,"line":1606},[91,13673,6508],{"class":101},[91,13675,1146],{"class":97},[91,13677,13678],{"class":206}," \"ret = \"",[91,13680,1422],{"class":97},[91,13682,11364],{"class":1941},[91,13684,102],{"class":101},[91,13686,802],{"class":150},[91,13688,12414],{"class":101},[91,13690,802],{"class":150},[91,13692,13693],{"class":101},") ",[91,13695,1146],{"class":97},[91,13697,8819],{"class":101},[91,13699,13700,13702,13704,13706,13708,13710,13712,13714,13716,13718],{"class":93,"line":1620},[91,13701,6508],{"class":101},[91,13703,1146],{"class":97},[91,13705,13678],{"class":206},[91,13707,1422],{"class":97},[91,13709,11364],{"class":1941},[91,13711,102],{"class":101},[91,13713,413],{"class":150},[91,13715,13693],{"class":101},[91,13717,1146],{"class":97},[91,13719,8819],{"class":101},[91,13721,13722],{"class":93,"line":1625},[91,13723,2378],{"emptyLinePlaceholder":17},[91,13725,13726,13728,13730,13732],{"class":93,"line":1631},[91,13727,2281],{"class":1941},[91,13729,102],{"class":101},[91,13731,2286],{"class":206},[91,13733,2697],{"class":101},[91,13735,13736],{"class":93,"line":1652},[91,13737,2378],{"emptyLinePlaceholder":17},[91,13739,13740,13742,13744],{"class":93,"line":1657},[91,13741,4068],{"class":97},[91,13743,4071],{"class":150},[91,13745,1268],{"class":101},[91,13747,13748],{"class":93,"line":1671},[91,13749,1543],{"class":101},[38,13751,11311],{},[46,13753,13754,13757,13760],{},[49,13755,13756],{},"我传就用我；没传就用你",[49,13758,13759],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[49,13761,13762],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[33,13764,13766],{"id":13765},"_72函数的占位参数","7.2函数的占位参数",[38,13768,13769],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[38,13771,13772,13774,13775],{},[251,13773,5160],{}," ",[88,13776,13777],{},"返回值类型 函数名 (数据类型){}",[83,13779,13781],{"className":85,"code":13780,"language":5,"meta":10,"style":10},"\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",[88,13782,13783,13788,13806,13819,13823,13831,13835,13852,13856,13866,13870,13878],{"__ignoreMap":10},[91,13784,13785],{"class":93,"line":94},[91,13786,13787],{"class":160},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[91,13789,13790,13792,13794,13796,13798,13800,13802,13804],{"class":93,"line":11},[91,13791,5343],{"class":97},[91,13793,11364],{"class":1941},[91,13795,102],{"class":101},[91,13797,105],{"class":97},[91,13799,1376],{"class":5195},[91,13801,12414],{"class":101},[91,13803,105],{"class":97},[91,13805,12421],{"class":101},[91,13807,13808,13810,13812,13815,13817],{"class":93,"line":1157},[91,13809,6508],{"class":101},[91,13811,1146],{"class":97},[91,13813,13814],{"class":206}," \"this is func\"",[91,13816,1422],{"class":97},[91,13818,8819],{"class":101},[91,13820,13821],{"class":93,"line":1172},[91,13822,1543],{"class":101},[91,13824,13825,13827,13829],{"class":93,"line":1178},[91,13826,105],{"class":97},[91,13828,1951],{"class":1941},[91,13830,10832],{"class":101},[91,13832,13833],{"class":93,"line":1192},[91,13834,2378],{"emptyLinePlaceholder":17},[91,13836,13837,13839,13841,13843,13845,13847,13849],{"class":93,"line":1198},[91,13838,13264],{"class":1941},[91,13840,102],{"class":101},[91,13842,548],{"class":150},[91,13844,480],{"class":101},[91,13846,548],{"class":150},[91,13848,5945],{"class":101},[91,13850,13851],{"class":160}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[91,13853,13854],{"class":93,"line":1289},[91,13855,2378],{"emptyLinePlaceholder":17},[91,13857,13858,13860,13862,13864],{"class":93,"line":1295},[91,13859,2281],{"class":1941},[91,13861,102],{"class":101},[91,13863,2286],{"class":206},[91,13865,2697],{"class":101},[91,13867,13868],{"class":93,"line":1307},[91,13869,2378],{"emptyLinePlaceholder":17},[91,13871,13872,13874,13876],{"class":93,"line":1590},[91,13873,4068],{"class":97},[91,13875,4071],{"class":150},[91,13877,1268],{"class":101},[91,13879,13880],{"class":93,"line":1595},[91,13881,1543],{"class":101},[38,13883,13884],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[33,13886,13888],{"id":13887},"_73函数重载","7.3函数重载",[38,13890,13891],{},"意思是函数名是可以相同的",[63,13893,13895],{"id":13894},"_731基本语法","7.3.1基本语法",[38,13897,13898],{},"作用：函数名可以相同，提高复用性",[38,13900,13901],{},[251,13902,13903],{},"函数重载满足条件：",[1109,13905,13906,13909,13912],{},[49,13907,13908],{},"同一个作用域下",[49,13910,13911],{},"函数名称相同",[49,13913,13914,13915,13918,13919,13922,13923],{},"函数参数",[251,13916,13917],{},"类型不同","  或者 ",[251,13920,13921],{},"个数不同"," 或者 ",[251,13924,13925],{},"顺序不同",[38,13927,13928,13931],{},[251,13929,13930],{},"注意:","  函数的返回值不可以作为函数重载的条件",[83,13933,13935],{"className":9920,"code":13934,"language":9922,"meta":10,"style":10},"\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",[88,13936,13937,13942,13950,13954,13967,13971,13985,13989,14002,14006,14021,14025,14038,14042,14063,14067,14080,14084,14104,14108,14121,14125,14129,14134,14139,14144,14149,14154,14158,14162,14170,14174,14180,14190,14200,14214,14229,14233,14243,14247,14255],{"__ignoreMap":10},[91,13938,13939],{"class":93,"line":94},[91,13940,13941],{"class":160},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[91,13943,13944,13946,13948],{"class":93,"line":11},[91,13945,5343],{"class":97},[91,13947,11364],{"class":1941},[91,13949,1954],{"class":101},[91,13951,13952],{"class":93,"line":1157},[91,13953,1524],{"class":101},[91,13955,13956,13958,13960,13963,13965],{"class":93,"line":1172},[91,13957,6508],{"class":101},[91,13959,1146],{"class":97},[91,13961,13962],{"class":206}," \"func 的调用！\"",[91,13964,1422],{"class":97},[91,13966,8819],{"class":101},[91,13968,13969],{"class":93,"line":1178},[91,13970,1543],{"class":101},[91,13972,13973,13975,13977,13979,13981,13983],{"class":93,"line":1192},[91,13974,5343],{"class":97},[91,13976,11364],{"class":1941},[91,13978,102],{"class":101},[91,13980,105],{"class":97},[91,13982,1376],{"class":5195},[91,13984,108],{"class":101},[91,13986,13987],{"class":93,"line":1198},[91,13988,1524],{"class":101},[91,13990,13991,13993,13995,13998,14000],{"class":93,"line":1289},[91,13992,6508],{"class":101},[91,13994,1146],{"class":97},[91,13996,13997],{"class":206}," \"func (int a) 的调用！\"",[91,13999,1422],{"class":97},[91,14001,8819],{"class":101},[91,14003,14004],{"class":93,"line":1295},[91,14005,1543],{"class":101},[91,14007,14008,14010,14012,14014,14017,14019],{"class":93,"line":1307},[91,14009,5343],{"class":97},[91,14011,11364],{"class":1941},[91,14013,102],{"class":101},[91,14015,14016],{"class":97},"double",[91,14018,1376],{"class":5195},[91,14020,108],{"class":101},[91,14022,14023],{"class":93,"line":1590},[91,14024,1524],{"class":101},[91,14026,14027,14029,14031,14034,14036],{"class":93,"line":1595},[91,14028,6508],{"class":101},[91,14030,1146],{"class":97},[91,14032,14033],{"class":206}," \"func (double a)的调用！\"",[91,14035,1422],{"class":97},[91,14037,8819],{"class":101},[91,14039,14040],{"class":93,"line":1601},[91,14041,1543],{"class":101},[91,14043,14044,14046,14048,14050,14052,14054,14057,14059,14061],{"class":93,"line":1606},[91,14045,5343],{"class":97},[91,14047,11364],{"class":1941},[91,14049,102],{"class":101},[91,14051,105],{"class":97},[91,14053,1376],{"class":5195},[91,14055,14056],{"class":101}," ,",[91,14058,14016],{"class":97},[91,14060,2811],{"class":5195},[91,14062,108],{"class":101},[91,14064,14065],{"class":93,"line":1620},[91,14066,1524],{"class":101},[91,14068,14069,14071,14073,14076,14078],{"class":93,"line":1625},[91,14070,6508],{"class":101},[91,14072,1146],{"class":97},[91,14074,14075],{"class":206}," \"func (int a ,double b) 的调用！\"",[91,14077,1422],{"class":97},[91,14079,8819],{"class":101},[91,14081,14082],{"class":93,"line":1631},[91,14083,1543],{"class":101},[91,14085,14086,14088,14090,14092,14094,14096,14098,14100,14102],{"class":93,"line":1652},[91,14087,5343],{"class":97},[91,14089,11364],{"class":1941},[91,14091,102],{"class":101},[91,14093,14016],{"class":97},[91,14095,1376],{"class":5195},[91,14097,14056],{"class":101},[91,14099,105],{"class":97},[91,14101,2811],{"class":5195},[91,14103,108],{"class":101},[91,14105,14106],{"class":93,"line":1657},[91,14107,1524],{"class":101},[91,14109,14110,14112,14114,14117,14119],{"class":93,"line":1671},[91,14111,6508],{"class":101},[91,14113,1146],{"class":97},[91,14115,14116],{"class":206}," \"func (double a ,int b)的调用！\"",[91,14118,1422],{"class":97},[91,14120,8819],{"class":101},[91,14122,14123],{"class":93,"line":1676},[91,14124,1543],{"class":101},[91,14126,14127],{"class":93,"line":1705},[91,14128,2378],{"emptyLinePlaceholder":17},[91,14130,14131],{"class":93,"line":1710},[91,14132,14133],{"class":160},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[91,14135,14136],{"class":93,"line":1727},[91,14137,14138],{"class":160},"\u002F\u002Fint func(double a, int b)\n",[91,14140,14141],{"class":93,"line":1732},[91,14142,14143],{"class":160},"\u002F\u002F{\n",[91,14145,14146],{"class":93,"line":1737},[91,14147,14148],{"class":160},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[91,14150,14151],{"class":93,"line":1742},[91,14152,14153],{"class":160},"\u002F\u002F}\n",[91,14155,14156],{"class":93,"line":1756},[91,14157,2378],{"emptyLinePlaceholder":17},[91,14159,14160],{"class":93,"line":1761},[91,14161,2378],{"emptyLinePlaceholder":17},[91,14163,14164,14166,14168],{"class":93,"line":2555},[91,14165,105],{"class":97},[91,14167,1951],{"class":1941},[91,14169,10832],{"class":101},[91,14171,14172],{"class":93,"line":2569},[91,14173,2378],{"emptyLinePlaceholder":17},[91,14175,14176,14178],{"class":93,"line":2577},[91,14177,13264],{"class":1941},[91,14179,5615],{"class":101},[91,14181,14182,14184,14186,14188],{"class":93,"line":2582},[91,14183,13264],{"class":1941},[91,14185,102],{"class":101},[91,14187,548],{"class":150},[91,14189,2697],{"class":101},[91,14191,14192,14194,14196,14198],{"class":93,"line":2588},[91,14193,13264],{"class":1941},[91,14195,102],{"class":101},[91,14197,151],{"class":150},[91,14199,2697],{"class":101},[91,14201,14202,14204,14206,14208,14210,14212],{"class":93,"line":2594},[91,14203,13264],{"class":1941},[91,14205,102],{"class":101},[91,14207,548],{"class":150},[91,14209,480],{"class":101},[91,14211,151],{"class":150},[91,14213,2697],{"class":101},[91,14215,14216,14218,14220,14222,14225,14227],{"class":93,"line":2599},[91,14217,13264],{"class":1941},[91,14219,102],{"class":101},[91,14221,151],{"class":150},[91,14223,14224],{"class":101}," , ",[91,14226,548],{"class":150},[91,14228,2697],{"class":101},[91,14230,14231],{"class":93,"line":7927},[91,14232,13189],{"class":101},[91,14234,14235,14237,14239,14241],{"class":93,"line":7951},[91,14236,2281],{"class":1941},[91,14238,102],{"class":101},[91,14240,2286],{"class":206},[91,14242,2697],{"class":101},[91,14244,14245],{"class":93,"line":7956},[91,14246,2378],{"emptyLinePlaceholder":17},[91,14248,14249,14251,14253],{"class":93,"line":7962},[91,14250,4068],{"class":97},[91,14252,4071],{"class":150},[91,14254,1268],{"class":101},[91,14256,14257],{"class":93,"line":7989},[91,14258,1543],{"class":101},[38,14260,14261],{},"重点：函数返回值不可以作为函数重载条件！",[63,14263,14265],{"id":14264},"_732注意事项","7.3.2注意事项",[1109,14267,14268,14271],{},[49,14269,14270],{},"引用作为重载条件!!!",[49,14272,14273],{},"函数重载碰到函数默认参数",[83,14275,14277],{"className":85,"code":14276,"language":5,"meta":10,"style":10},"\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",[88,14278,14279,14284,14289,14293,14309,14313,14326,14330,14334,14352,14356,14369,14373,14377,14381,14386,14390,14414,14418,14431,14435,14439,14453,14457,14470,14474,14478,14486,14490,14502,14512,14525,14529,14533,14541,14545,14555,14559,14567],{"__ignoreMap":10},[91,14280,14281],{"class":93,"line":94},[91,14282,14283],{"class":160},"\u002F\u002F函数重载注意事项\n",[91,14285,14286],{"class":93,"line":11},[91,14287,14288],{"class":160},"\u002F\u002F1、引用作为重载条件\n",[91,14290,14291],{"class":93,"line":1157},[91,14292,2378],{"emptyLinePlaceholder":17},[91,14294,14295,14297,14299,14301,14303,14305,14307],{"class":93,"line":1172},[91,14296,5343],{"class":97},[91,14298,11364],{"class":1941},[91,14300,102],{"class":101},[91,14302,105],{"class":97},[91,14304,10563],{"class":97},[91,14306,340],{"class":5195},[91,14308,108],{"class":101},[91,14310,14311],{"class":93,"line":1178},[91,14312,1524],{"class":101},[91,14314,14315,14317,14319,14322,14324],{"class":93,"line":1192},[91,14316,6508],{"class":101},[91,14318,1146],{"class":97},[91,14320,14321],{"class":206}," \"func (int &a) 调用 \"",[91,14323,1422],{"class":97},[91,14325,8819],{"class":101},[91,14327,14328],{"class":93,"line":1198},[91,14329,1543],{"class":101},[91,14331,14332],{"class":93,"line":1289},[91,14333,2378],{"emptyLinePlaceholder":17},[91,14335,14336,14338,14340,14342,14344,14346,14348,14350],{"class":93,"line":1295},[91,14337,5343],{"class":97},[91,14339,11364],{"class":1941},[91,14341,102],{"class":101},[91,14343,6771],{"class":97},[91,14345,2360],{"class":97},[91,14347,10563],{"class":97},[91,14349,340],{"class":5195},[91,14351,108],{"class":101},[91,14353,14354],{"class":93,"line":1307},[91,14355,1524],{"class":101},[91,14357,14358,14360,14362,14365,14367],{"class":93,"line":1590},[91,14359,6508],{"class":101},[91,14361,1146],{"class":97},[91,14363,14364],{"class":206}," \"func (const int &a) 调用 \"",[91,14366,1422],{"class":97},[91,14368,8819],{"class":101},[91,14370,14371],{"class":93,"line":1595},[91,14372,1543],{"class":101},[91,14374,14375],{"class":93,"line":1601},[91,14376,2378],{"emptyLinePlaceholder":17},[91,14378,14379],{"class":93,"line":1606},[91,14380,2378],{"emptyLinePlaceholder":17},[91,14382,14383],{"class":93,"line":1620},[91,14384,14385],{"class":160},"\u002F\u002F2、函数重载碰到函数默认参数\n",[91,14387,14388],{"class":93,"line":1625},[91,14389,2378],{"emptyLinePlaceholder":17},[91,14391,14392,14394,14396,14398,14400,14402,14404,14406,14408,14410,14412],{"class":93,"line":1631},[91,14393,5343],{"class":97},[91,14395,13597],{"class":1941},[91,14397,102],{"class":101},[91,14399,105],{"class":97},[91,14401,1376],{"class":5195},[91,14403,12414],{"class":101},[91,14405,105],{"class":97},[91,14407,2811],{"class":5195},[91,14409,13543],{"class":97},[91,14411,2016],{"class":150},[91,14413,108],{"class":101},[91,14415,14416],{"class":93,"line":1652},[91,14417,1524],{"class":101},[91,14419,14420,14422,14424,14427,14429],{"class":93,"line":1657},[91,14421,6508],{"class":101},[91,14423,1146],{"class":97},[91,14425,14426],{"class":206}," \"func2(int a, int b = 10) 调用\"",[91,14428,1422],{"class":97},[91,14430,8819],{"class":101},[91,14432,14433],{"class":93,"line":1671},[91,14434,1543],{"class":101},[91,14436,14437],{"class":93,"line":1676},[91,14438,2378],{"emptyLinePlaceholder":17},[91,14440,14441,14443,14445,14447,14449,14451],{"class":93,"line":1705},[91,14442,5343],{"class":97},[91,14444,13597],{"class":1941},[91,14446,102],{"class":101},[91,14448,105],{"class":97},[91,14450,1376],{"class":5195},[91,14452,108],{"class":101},[91,14454,14455],{"class":93,"line":1710},[91,14456,1524],{"class":101},[91,14458,14459,14461,14463,14466,14468],{"class":93,"line":1727},[91,14460,6508],{"class":101},[91,14462,1146],{"class":97},[91,14464,14465],{"class":206}," \"func2(int a) 调用\"",[91,14467,1422],{"class":97},[91,14469,8819],{"class":101},[91,14471,14472],{"class":93,"line":1732},[91,14473,1543],{"class":101},[91,14475,14476],{"class":93,"line":1737},[91,14477,2378],{"emptyLinePlaceholder":17},[91,14479,14480,14482,14484],{"class":93,"line":1742},[91,14481,105],{"class":97},[91,14483,1951],{"class":1941},[91,14485,10832],{"class":101},[91,14487,14488],{"class":93,"line":1756},[91,14489,13189],{"class":101},[91,14491,14492,14494,14496,14498,14500],{"class":93,"line":1761},[91,14493,1963],{"class":97},[91,14495,10848],{"class":101},[91,14497,147],{"class":97},[91,14499,2016],{"class":150},[91,14501,1268],{"class":101},[91,14503,14504,14506,14509],{"class":93,"line":2555},[91,14505,13264],{"class":1941},[91,14507,14508],{"class":101},"(a);",[91,14510,14511],{"class":160}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[91,14513,14514,14516,14518,14520,14522],{"class":93,"line":2569},[91,14515,13264],{"class":1941},[91,14517,102],{"class":101},[91,14519,548],{"class":150},[91,14521,5945],{"class":101},[91,14523,14524],{"class":160},"\u002F\u002F调用有const   10是个常量\n",[91,14526,14527],{"class":93,"line":2577},[91,14528,2378],{"emptyLinePlaceholder":17},[91,14530,14531],{"class":93,"line":2582},[91,14532,2378],{"emptyLinePlaceholder":17},[91,14534,14535,14538],{"class":93,"line":2588},[91,14536,14537],{"class":160},"    \u002F\u002Ffunc2(10);",[91,14539,14540],{"class":160}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[91,14542,14543],{"class":93,"line":2594},[91,14544,2378],{"emptyLinePlaceholder":17},[91,14546,14547,14549,14551,14553],{"class":93,"line":2599},[91,14548,2281],{"class":1941},[91,14550,102],{"class":101},[91,14552,2286],{"class":206},[91,14554,2697],{"class":101},[91,14556,14557],{"class":93,"line":7927},[91,14558,2378],{"emptyLinePlaceholder":17},[91,14560,14561,14563,14565],{"class":93,"line":7951},[91,14562,4068],{"class":97},[91,14564,4071],{"class":150},[91,14566,1268],{"class":101},[91,14568,14569],{"class":93,"line":7956},[91,14570,1543],{"class":101},[5105,14572,14573],{},"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":10,"searchDepth":11,"depth":11,"links":14575},[14576,14577,14578],{"id":13508,"depth":11,"text":13509},{"id":13765,"depth":11,"text":13766},{"id":13887,"depth":11,"text":13888,"children":14579},[14580,14581],{"id":13894,"depth":1157,"text":13895},{"id":14264,"depth":1157,"text":14265},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13500,"description":10},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14588,"title":14589,"body":14590,"description":23344,"extension":14,"meta":23345,"navigation":17,"path":23346,"seo":23347,"stem":23348,"__hash__":23349},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14591,"toc":23325},[14592,14595,14601,14608,14613,14616,14619,14622,14626,14630,14633,14636,14644,14649,14652,14659,14664,14823,14826,15079,15082,15085,15088,15093,15096,15099,15110,15115,15351,15355,15365,15368,15376,15523,15527,15530,15533,15537,15982,15986,15994,16002,16914,16921,16926,17554,17557,17560,17563,17682,17685,17772,17775,17901,17904,17998,18001,18354,18358,18366,18370,18377,18380,18383,18394,18400,18405,18417,18425,18445,18453,18470,18656,18659,18663,18666,18669,18672,18675,18678,18681,18684,19144,19150,19154,19157,19168,19755,19758,20247,20251,20254,20257,20260,20263,20266,20274,20670,20674,20677,20680,21127,21130,21133,21138,21141,21146,21149,21153,21156,21158,21164,21167,21473,21483,21524,21528,21531,21533,21566,21569,21876,21878,21893,21896,21919,21928,21934,21937,21941,21944,21947,21952,21963,21968,21976,21981,22111,22114,22117,22292,22297,22509,22513,22516,22630,22635,22874,22878,22882,22885,22888,22893,22998,23001,23004,23007,23011,23122,23125,23128,23133,23185,23188,23191,23196,23242,23245,23250,23318,23320,23323],[29,14593,14589],{"id":14594},"_8类和对象",[38,14596,14597,14598],{},"C++面向对象的三大特性为",[251,14599,14600],{},"封装、继承、多态",[38,14602,14603,14604,14607],{},"C++认为",[251,14605,14606],{},"万事万物都皆为对象","，对象上有其属性和行为",[38,14609,14610],{},[251,14611,14612],{},"例如：",[38,14614,14615],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[38,14617,14618],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[38,14620,14621],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[33,14623,14625],{"id":14624},"_81封装","8.1封装",[63,14627,14629],{"id":14628},"_811封装的意义","8.1.1封装的意义",[38,14631,14632],{},"封装是C++面向对象三大特性之一",[38,14634,14635],{},"封装的意义：",[1109,14637,14638,14641],{},[49,14639,14640],{},"将属性和行为作为一个整体，表现生活中的事物",[49,14642,14643],{},"将属性和行为加以权限控制",[38,14645,14646],{},[251,14647,14648],{},"封装意义一：",[38,14650,14651],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[38,14653,14654,13774,14656],{},[251,14655,5160],{},[88,14657,14658],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[46,14660,14661],{},[49,14662,14663],{},"**示例1：**设计一个圆类，求圆的周长",[83,14665,14667],{"className":85,"code":14666,"language":5,"meta":10,"style":10},"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",[88,14668,14669,14677,14681,14686,14691,14696,14701,14708,14713,14723,14727,14745,14749,14753,14761,14765,14770,14775,14780,14785,14796,14819],{"__ignoreMap":10},[91,14670,14671,14674],{"class":93,"line":94},[91,14672,14673],{"class":97},"class",[91,14675,14676],{"class":1941}," Circle\n",[91,14678,14679],{"class":93,"line":11},[91,14680,1524],{"class":101},[91,14682,14683],{"class":93,"line":1157},[91,14684,14685],{"class":160},"    \u002F\u002F访问权限\n",[91,14687,14688],{"class":93,"line":1172},[91,14689,14690],{"class":160},"    \u002F\u002F公共权限\n",[91,14692,14693],{"class":93,"line":1178},[91,14694,14695],{"class":97},"public:\n",[91,14697,14698],{"class":93,"line":1192},[91,14699,14700],{"class":160},"    \u002F\u002F属性\n",[91,14702,14703,14705],{"class":93,"line":1198},[91,14704,1963],{"class":97},[91,14706,14707],{"class":101}," m_r;\n",[91,14709,14710],{"class":93,"line":1289},[91,14711,14712],{"class":160},"    \u002F\u002F行为\n",[91,14714,14715,14718,14721],{"class":93,"line":1295},[91,14716,14717],{"class":97},"    double",[91,14719,14720],{"class":1941}," calculateZC",[91,14722,1954],{"class":101},[91,14724,14725],{"class":93,"line":1307},[91,14726,2008],{"class":101},[91,14728,14729,14732,14735,14737,14740,14742],{"class":93,"line":1590},[91,14730,14731],{"class":97},"        return",[91,14733,14734],{"class":150}," 2",[91,14736,557],{"class":97},[91,14738,14739],{"class":101},"PI",[91,14741,557],{"class":97},[91,14743,14744],{"class":101},"m_r;\n",[91,14746,14747],{"class":93,"line":1595},[91,14748,2165],{"class":101},[91,14750,14751],{"class":93,"line":1601},[91,14752,3973],{"class":101},[91,14754,14755,14757,14759],{"class":93,"line":1606},[91,14756,105],{"class":97},[91,14758,1951],{"class":1941},[91,14760,1954],{"class":101},[91,14762,14763],{"class":93,"line":1620},[91,14764,1524],{"class":101},[91,14766,14767],{"class":93,"line":1625},[91,14768,14769],{"class":160},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[91,14771,14772],{"class":93,"line":1631},[91,14773,14774],{"class":160},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[91,14776,14777],{"class":93,"line":1652},[91,14778,14779],{"class":101},"    Circle c1;\n",[91,14781,14782],{"class":93,"line":1657},[91,14783,14784],{"class":160},"    \u002F\u002F给圆对象 的属性进行赋值\n",[91,14786,14787,14790,14792,14794],{"class":93,"line":1671},[91,14788,14789],{"class":101},"    c1.m_r",[91,14791,147],{"class":97},[91,14793,548],{"class":150},[91,14795,1268],{"class":101},[91,14797,14798,14800,14802,14805,14807,14810,14813,14815,14817],{"class":93,"line":1676},[91,14799,1529],{"class":101},[91,14801,1146],{"class":97},[91,14803,14804],{"class":206},"\"圆的周长\"",[91,14806,1146],{"class":97},[91,14808,14809],{"class":101},"c1.",[91,14811,14812],{"class":1941},"calculateZC",[91,14814,2405],{"class":101},[91,14816,1146],{"class":97},[91,14818,1169],{"class":101},[91,14820,14821],{"class":93,"line":1705},[91,14822,1543],{"class":101},[38,14824,14825],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[83,14827,14829],{"className":85,"code":14828,"language":5,"meta":10,"style":10},"#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",[88,14830,14831,14837,14847,14853,14859,14863,14867,14872,14879,14884,14902,14906,14916,14920,14925,14941,14945,14955,14959,14964,14972,14976,15008,15012,15016,15024,15028,15033,15038,15052,15066,15075],{"__ignoreMap":10},[91,14832,14833,14835],{"class":93,"line":94},[91,14834,1927],{"class":97},[91,14836,1930],{"class":206},[91,14838,14839,14841,14843,14845],{"class":93,"line":11},[91,14840,1935],{"class":97},[91,14842,1938],{"class":97},[91,14844,1942],{"class":1941},[91,14846,1268],{"class":101},[91,14848,14849,14851],{"class":93,"line":1157},[91,14850,1927],{"class":97},[91,14852,7728],{"class":206},[91,14854,14855,14857],{"class":93,"line":1172},[91,14856,14673],{"class":97},[91,14858,7741],{"class":1941},[91,14860,14861],{"class":93,"line":1178},[91,14862,1524],{"class":101},[91,14864,14865],{"class":93,"line":1192},[91,14866,14695],{"class":97},[91,14868,14869],{"class":93,"line":1198},[91,14870,14871],{"class":101},"    string m_name;\n",[91,14873,14874,14876],{"class":93,"line":1289},[91,14875,1963],{"class":97},[91,14877,14878],{"class":101}," m_id;\n",[91,14880,14881],{"class":93,"line":1295},[91,14882,14883],{"class":160},"    \u002F\u002F赋值姓名\n",[91,14885,14886,14889,14892,14894,14897,14900],{"class":93,"line":1307},[91,14887,14888],{"class":97},"    void",[91,14890,14891],{"class":1941}," setName",[91,14893,102],{"class":101},[91,14895,14896],{"class":1941},"string",[91,14898,14899],{"class":5195}," name",[91,14901,108],{"class":101},[91,14903,14904],{"class":93,"line":1590},[91,14905,2008],{"class":101},[91,14907,14908,14911,14913],{"class":93,"line":1595},[91,14909,14910],{"class":101},"        m_name",[91,14912,147],{"class":97},[91,14914,14915],{"class":101},"name;\n",[91,14917,14918],{"class":93,"line":1601},[91,14919,2165],{"class":101},[91,14921,14922],{"class":93,"line":1606},[91,14923,14924],{"class":160},"    \u002F\u002F赋值学号\n",[91,14926,14927,14929,14932,14934,14936,14939],{"class":93,"line":1620},[91,14928,14888],{"class":97},[91,14930,14931],{"class":1941}," setId",[91,14933,102],{"class":101},[91,14935,105],{"class":97},[91,14937,14938],{"class":5195}," id",[91,14940,108],{"class":101},[91,14942,14943],{"class":93,"line":1625},[91,14944,2008],{"class":101},[91,14946,14947,14950,14952],{"class":93,"line":1631},[91,14948,14949],{"class":101},"        m_id",[91,14951,147],{"class":97},[91,14953,14954],{"class":101},"id;\n",[91,14956,14957],{"class":93,"line":1652},[91,14958,2165],{"class":101},[91,14960,14961],{"class":93,"line":1657},[91,14962,14963],{"class":160},"    \u002F\u002F打印学生信息\n",[91,14965,14966,14968,14970],{"class":93,"line":1671},[91,14967,14888],{"class":97},[91,14969,9594],{"class":1941},[91,14971,1954],{"class":101},[91,14973,14974],{"class":93,"line":1676},[91,14975,2008],{"class":101},[91,14977,14978,14980,14982,14985,14987,14990,14992,14994,14996,14999,15001,15004,15006],{"class":93,"line":1705},[91,14979,3429],{"class":101},[91,14981,1146],{"class":97},[91,14983,14984],{"class":206},"\"姓名：\"",[91,14986,1146],{"class":97},[91,14988,14989],{"class":101},"m_name",[91,14991,1146],{"class":97},[91,14993,4337],{"class":206},[91,14995,1146],{"class":97},[91,14997,14998],{"class":206},"\"学号：\"",[91,15000,1146],{"class":97},[91,15002,15003],{"class":101},"m_id",[91,15005,1146],{"class":97},[91,15007,1169],{"class":101},[91,15009,15010],{"class":93,"line":1710},[91,15011,2165],{"class":101},[91,15013,15014],{"class":93,"line":1727},[91,15015,3973],{"class":101},[91,15017,15018,15020,15022],{"class":93,"line":1732},[91,15019,105],{"class":97},[91,15021,1951],{"class":1941},[91,15023,1954],{"class":101},[91,15025,15026],{"class":93,"line":1737},[91,15027,1524],{"class":101},[91,15029,15030],{"class":93,"line":1742},[91,15031,15032],{"class":160},"    \u002F\u002F实例化\n",[91,15034,15035],{"class":93,"line":1756},[91,15036,15037],{"class":101},"    Student s1;\n",[91,15039,15040,15043,15046,15048,15050],{"class":93,"line":1761},[91,15041,15042],{"class":101},"    s1.",[91,15044,15045],{"class":1941},"setName",[91,15047,102],{"class":101},[91,15049,7895],{"class":206},[91,15051,2697],{"class":101},[91,15053,15054,15056,15059,15061,15064],{"class":93,"line":2555},[91,15055,15042],{"class":101},[91,15057,15058],{"class":1941},"setId",[91,15060,102],{"class":101},[91,15062,15063],{"class":150},"123456",[91,15065,2697],{"class":101},[91,15067,15068,15070,15073],{"class":93,"line":2569},[91,15069,15042],{"class":101},[91,15071,15072],{"class":1941},"printInfo",[91,15074,5615],{"class":101},[91,15076,15077],{"class":93,"line":2577},[91,15078,1543],{"class":101},[38,15080,15081],{},"类中的属性和行为统称为成员",[38,15083,15084],{},"属性：成员属性(成员变量)",[38,15086,15087],{},"方法：成员函数(成员方法)",[38,15089,15090],{},[251,15091,15092],{},"封装意义二：",[38,15094,15095],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[38,15097,15098],{},"访问权限有三种：",[46,15100,15101,15104,15107],{},[49,15102,15103],{},"public        公共权限",[49,15105,15106],{},"protected 保护权限",[49,15108,15109],{},"private      私有权限",[38,15111,15112],{},[251,15113,15114],{},"示例：",[83,15116,15118],{"className":9920,"code":15117,"language":9922,"meta":10,"style":10},"\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",[88,15119,15120,15125,15130,15135,15140,15144,15151,15155,15160,15164,15169,15173,15178,15183,15188,15192,15197,15202,15209,15213,15217,15225,15229,15240,15252,15264,15268,15272,15276,15284,15288,15293,15305,15313,15321,15325,15335,15339,15347],{"__ignoreMap":10},[91,15121,15122],{"class":93,"line":94},[91,15123,15124],{"class":160},"\u002F\u002F三种权限\n",[91,15126,15127],{"class":93,"line":11},[91,15128,15129],{"class":160},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[91,15131,15132],{"class":93,"line":1157},[91,15133,15134],{"class":160},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[91,15136,15137],{"class":93,"line":1172},[91,15138,15139],{"class":160},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[91,15141,15142],{"class":93,"line":1178},[91,15143,2378],{"emptyLinePlaceholder":17},[91,15145,15146,15148],{"class":93,"line":1192},[91,15147,14673],{"class":97},[91,15149,15150],{"class":1941}," Person\n",[91,15152,15153],{"class":93,"line":1198},[91,15154,1524],{"class":101},[91,15156,15157],{"class":93,"line":1289},[91,15158,15159],{"class":160},"    \u002F\u002F姓名  公共权限\n",[91,15161,15162],{"class":93,"line":1295},[91,15163,14695],{"class":97},[91,15165,15166],{"class":93,"line":1307},[91,15167,15168],{"class":101},"    string m_Name;\n",[91,15170,15171],{"class":93,"line":1590},[91,15172,2378],{"emptyLinePlaceholder":17},[91,15174,15175],{"class":93,"line":1595},[91,15176,15177],{"class":160},"    \u002F\u002F汽车  保护权限\n",[91,15179,15180],{"class":93,"line":1601},[91,15181,15182],{"class":97},"protected:\n",[91,15184,15185],{"class":93,"line":1606},[91,15186,15187],{"class":101},"    string m_Car;\n",[91,15189,15190],{"class":93,"line":1620},[91,15191,2378],{"emptyLinePlaceholder":17},[91,15193,15194],{"class":93,"line":1625},[91,15195,15196],{"class":160},"    \u002F\u002F银行卡密码  私有权限\n",[91,15198,15199],{"class":93,"line":1631},[91,15200,15201],{"class":97},"private:\n",[91,15203,15204,15206],{"class":93,"line":1652},[91,15205,1963],{"class":97},[91,15207,15208],{"class":101}," m_Password;\n",[91,15210,15211],{"class":93,"line":1657},[91,15212,2378],{"emptyLinePlaceholder":17},[91,15214,15215],{"class":93,"line":1671},[91,15216,14695],{"class":97},[91,15218,15219,15221,15223],{"class":93,"line":1676},[91,15220,14888],{"class":97},[91,15222,11364],{"class":1941},[91,15224,1954],{"class":101},[91,15226,15227],{"class":93,"line":1705},[91,15228,2008],{"class":101},[91,15230,15231,15234,15236,15238],{"class":93,"line":1710},[91,15232,15233],{"class":101},"        m_Name ",[91,15235,147],{"class":97},[91,15237,8917],{"class":206},[91,15239,1268],{"class":101},[91,15241,15242,15245,15247,15250],{"class":93,"line":1727},[91,15243,15244],{"class":101},"        m_Car ",[91,15246,147],{"class":97},[91,15248,15249],{"class":206}," \"拖拉机\"",[91,15251,1268],{"class":101},[91,15253,15254,15257,15259,15262],{"class":93,"line":1732},[91,15255,15256],{"class":101},"        m_Password ",[91,15258,147],{"class":97},[91,15260,15261],{"class":150}," 123456",[91,15263,1268],{"class":101},[91,15265,15266],{"class":93,"line":1737},[91,15267,2165],{"class":101},[91,15269,15270],{"class":93,"line":1742},[91,15271,3973],{"class":101},[91,15273,15274],{"class":93,"line":1756},[91,15275,2378],{"emptyLinePlaceholder":17},[91,15277,15278,15280,15282],{"class":93,"line":1761},[91,15279,105],{"class":97},[91,15281,1951],{"class":1941},[91,15283,10832],{"class":101},[91,15285,15286],{"class":93,"line":2555},[91,15287,2378],{"emptyLinePlaceholder":17},[91,15289,15290],{"class":93,"line":2569},[91,15291,15292],{"class":101},"    Person p;\n",[91,15294,15295,15298,15300,15303],{"class":93,"line":2577},[91,15296,15297],{"class":101},"    p.m_Name ",[91,15299,147],{"class":97},[91,15301,15302],{"class":206}," \"李四\"",[91,15304,1268],{"class":101},[91,15306,15307,15310],{"class":93,"line":2582},[91,15308,15309],{"class":160},"    \u002F\u002Fp.m_Car = \"奔驰\";",[91,15311,15312],{"class":160},"  \u002F\u002F保护权限类外访问不到\n",[91,15314,15315,15318],{"class":93,"line":2588},[91,15316,15317],{"class":160},"    \u002F\u002Fp.m_Password = 123;",[91,15319,15320],{"class":160}," \u002F\u002F私有权限类外访问不到\n",[91,15322,15323],{"class":93,"line":2594},[91,15324,2378],{"emptyLinePlaceholder":17},[91,15326,15327,15329,15331,15333],{"class":93,"line":2599},[91,15328,2281],{"class":1941},[91,15330,102],{"class":101},[91,15332,2286],{"class":206},[91,15334,2697],{"class":101},[91,15336,15337],{"class":93,"line":7927},[91,15338,2378],{"emptyLinePlaceholder":17},[91,15340,15341,15343,15345],{"class":93,"line":7951},[91,15342,4068],{"class":97},[91,15344,4071],{"class":150},[91,15346,1268],{"class":101},[91,15348,15349],{"class":93,"line":7956},[91,15350,1543],{"class":101},[63,15352,15354],{"id":15353},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[38,15356,15357,15358,15361,15362],{},"在C++中 struct和class唯一的",[251,15359,15360],{},"区别","就在于 ",[251,15363,15364],{},"默认的访问权限不同",[38,15366,15367],{},"区别：",[1109,15369,15370,15373],{},[49,15371,15372],{},"struct 默认权限为公共",[49,15374,15375],{},"class   默认权限为私有",[83,15377,15379],{"className":9920,"code":15378,"language":9922,"meta":10,"style":10},"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",[88,15380,15381,15388,15392,15402,15406,15410,15417,15421,15431,15435,15439,15447,15451,15456,15470,15474,15479,15493,15497,15507,15511,15519],{"__ignoreMap":10},[91,15382,15383,15385],{"class":93,"line":94},[91,15384,14673],{"class":97},[91,15386,15387],{"class":1941}," C1\n",[91,15389,15390],{"class":93,"line":11},[91,15391,1524],{"class":101},[91,15393,15394,15396,15399],{"class":93,"line":1157},[91,15395,1963],{"class":97},[91,15397,15398],{"class":101},"  m_A;",[91,15400,15401],{"class":160}," \u002F\u002F默认是私有权限\n",[91,15403,15404],{"class":93,"line":1172},[91,15405,3973],{"class":101},[91,15407,15408],{"class":93,"line":1178},[91,15409,2378],{"emptyLinePlaceholder":17},[91,15411,15412,15414],{"class":93,"line":1192},[91,15413,7738],{"class":97},[91,15415,15416],{"class":1941}," C2\n",[91,15418,15419],{"class":93,"line":1198},[91,15420,1524],{"class":101},[91,15422,15423,15425,15428],{"class":93,"line":1289},[91,15424,1963],{"class":97},[91,15426,15427],{"class":101}," m_A;",[91,15429,15430],{"class":160},"  \u002F\u002F默认是公共权限\n",[91,15432,15433],{"class":93,"line":1295},[91,15434,3973],{"class":101},[91,15436,15437],{"class":93,"line":1307},[91,15438,2378],{"emptyLinePlaceholder":17},[91,15440,15441,15443,15445],{"class":93,"line":1590},[91,15442,105],{"class":97},[91,15444,1951],{"class":1941},[91,15446,10832],{"class":101},[91,15448,15449],{"class":93,"line":1595},[91,15450,2378],{"emptyLinePlaceholder":17},[91,15452,15453],{"class":93,"line":1601},[91,15454,15455],{"class":101},"    C1 c1;\n",[91,15457,15458,15461,15463,15465,15467],{"class":93,"line":1606},[91,15459,15460],{"class":101},"    c1.m_A ",[91,15462,147],{"class":97},[91,15464,2016],{"class":150},[91,15466,157],{"class":101},[91,15468,15469],{"class":160}," \u002F\u002F错误，访问权限是私有\n",[91,15471,15472],{"class":93,"line":1620},[91,15473,2378],{"emptyLinePlaceholder":17},[91,15475,15476],{"class":93,"line":1625},[91,15477,15478],{"class":101},"    C2 c2;\n",[91,15480,15481,15484,15486,15488,15490],{"class":93,"line":1631},[91,15482,15483],{"class":101},"    c2.m_A ",[91,15485,147],{"class":97},[91,15487,2016],{"class":150},[91,15489,157],{"class":101},[91,15491,15492],{"class":160}," \u002F\u002F正确，访问权限是公共\n",[91,15494,15495],{"class":93,"line":1652},[91,15496,2378],{"emptyLinePlaceholder":17},[91,15498,15499,15501,15503,15505],{"class":93,"line":1657},[91,15500,2281],{"class":1941},[91,15502,102],{"class":101},[91,15504,2286],{"class":206},[91,15506,2697],{"class":101},[91,15508,15509],{"class":93,"line":1671},[91,15510,2378],{"emptyLinePlaceholder":17},[91,15512,15513,15515,15517],{"class":93,"line":1676},[91,15514,4068],{"class":97},[91,15516,4071],{"class":150},[91,15518,1268],{"class":101},[91,15520,15521],{"class":93,"line":1705},[91,15522,1543],{"class":101},[63,15524,15526],{"id":15525},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[38,15528,15529],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[38,15531,15532],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[38,15534,15535],{},[251,15536,15114],{},[83,15538,15540],{"className":9920,"code":15539,"language":9922,"meta":10,"style":10},"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",[88,15541,15542,15552,15556,15560,15565,15579,15588,15592,15602,15606,15613,15617,15621,15625,15630,15639,15646,15650,15655,15671,15694,15707,15714,15718,15727,15731,15735,15740,15756,15766,15770,15774,15778,15786,15790,15800,15804,15812,15816,15820,15828,15832,15836,15841,15854,15877,15881,15886,15899,15921,15925,15930,15944,15952,15956,15966,15970,15978],{"__ignoreMap":10},[91,15543,15544,15546,15549],{"class":93,"line":94},[91,15545,14673],{"class":97},[91,15547,15548],{"class":1941}," Person",[91,15550,15551],{"class":101}," {\n",[91,15553,15554],{"class":93,"line":11},[91,15555,14695],{"class":97},[91,15557,15558],{"class":93,"line":1157},[91,15559,2378],{"emptyLinePlaceholder":17},[91,15561,15562],{"class":93,"line":1172},[91,15563,15564],{"class":160},"    \u002F\u002F姓名设置可读可写\n",[91,15566,15567,15569,15571,15573,15575,15577],{"class":93,"line":1178},[91,15568,14888],{"class":97},[91,15570,14891],{"class":1941},[91,15572,102],{"class":101},[91,15574,14896],{"class":1941},[91,15576,14899],{"class":5195},[91,15578,12421],{"class":101},[91,15580,15581,15583,15585],{"class":93,"line":1192},[91,15582,15233],{"class":101},[91,15584,147],{"class":97},[91,15586,15587],{"class":101}," name;\n",[91,15589,15590],{"class":93,"line":1198},[91,15591,2165],{"class":101},[91,15593,15594,15597,15600],{"class":93,"line":1289},[91,15595,15596],{"class":1941},"    string",[91,15598,15599],{"class":1941}," getName",[91,15601,1954],{"class":101},[91,15603,15604],{"class":93,"line":1295},[91,15605,2008],{"class":101},[91,15607,15608,15610],{"class":93,"line":1307},[91,15609,14731],{"class":97},[91,15611,15612],{"class":101}," m_Name;\n",[91,15614,15615],{"class":93,"line":1590},[91,15616,2165],{"class":101},[91,15618,15619],{"class":93,"line":1595},[91,15620,2378],{"emptyLinePlaceholder":17},[91,15622,15623],{"class":93,"line":1601},[91,15624,2378],{"emptyLinePlaceholder":17},[91,15626,15627],{"class":93,"line":1606},[91,15628,15629],{"class":160},"    \u002F\u002F获取年龄 \n",[91,15631,15632,15634,15637],{"class":93,"line":1620},[91,15633,1963],{"class":97},[91,15635,15636],{"class":1941}," getAge",[91,15638,10832],{"class":101},[91,15640,15641,15643],{"class":93,"line":1625},[91,15642,14731],{"class":97},[91,15644,15645],{"class":101}," m_Age;\n",[91,15647,15648],{"class":93,"line":1631},[91,15649,2165],{"class":101},[91,15651,15652],{"class":93,"line":1652},[91,15653,15654],{"class":160},"    \u002F\u002F设置年龄\n",[91,15656,15657,15659,15662,15664,15666,15669],{"class":93,"line":1657},[91,15658,14888],{"class":97},[91,15660,15661],{"class":1941}," setAge",[91,15663,102],{"class":101},[91,15665,105],{"class":97},[91,15667,15668],{"class":5195}," age",[91,15670,12421],{"class":101},[91,15672,15673,15675,15678,15680,15682,15684,15687,15689,15692],{"class":93,"line":1671},[91,15674,2475],{"class":97},[91,15676,15677],{"class":101}," (age ",[91,15679,1012],{"class":97},[91,15681,4071],{"class":150},[91,15683,3233],{"class":97},[91,15685,15686],{"class":101}," age ",[91,15688,1062],{"class":97},[91,15690,15691],{"class":150}," 150",[91,15693,12421],{"class":101},[91,15695,15696,15698,15700,15703,15705],{"class":93,"line":1676},[91,15697,9698],{"class":101},[91,15699,1146],{"class":97},[91,15701,15702],{"class":206}," \"你个老妖精!\"",[91,15704,1422],{"class":97},[91,15706,8819],{"class":101},[91,15708,15709,15712],{"class":93,"line":1705},[91,15710,15711],{"class":97},"            return",[91,15713,1268],{"class":101},[91,15715,15716],{"class":93,"line":1710},[91,15717,2507],{"class":101},[91,15719,15720,15723,15725],{"class":93,"line":1727},[91,15721,15722],{"class":101},"        m_Age ",[91,15724,147],{"class":97},[91,15726,7776],{"class":101},[91,15728,15729],{"class":93,"line":1732},[91,15730,2165],{"class":101},[91,15732,15733],{"class":93,"line":1737},[91,15734,2378],{"emptyLinePlaceholder":17},[91,15736,15737],{"class":93,"line":1742},[91,15738,15739],{"class":160},"    \u002F\u002F情人设置为只写\n",[91,15741,15742,15744,15747,15749,15751,15754],{"class":93,"line":1756},[91,15743,14888],{"class":97},[91,15745,15746],{"class":1941}," setLover",[91,15748,102],{"class":101},[91,15750,14896],{"class":1941},[91,15752,15753],{"class":5195}," lover",[91,15755,12421],{"class":101},[91,15757,15758,15761,15763],{"class":93,"line":1761},[91,15759,15760],{"class":101},"        m_Lover ",[91,15762,147],{"class":97},[91,15764,15765],{"class":101}," lover;\n",[91,15767,15768],{"class":93,"line":2555},[91,15769,2165],{"class":101},[91,15771,15772],{"class":93,"line":2569},[91,15773,2378],{"emptyLinePlaceholder":17},[91,15775,15776],{"class":93,"line":2577},[91,15777,15201],{"class":97},[91,15779,15780,15783],{"class":93,"line":2582},[91,15781,15782],{"class":101},"    string m_Name;",[91,15784,15785],{"class":160}," \u002F\u002F可读可写  姓名\n",[91,15787,15788],{"class":93,"line":2588},[91,15789,13189],{"class":101},[91,15791,15792,15794,15797],{"class":93,"line":2594},[91,15793,1963],{"class":97},[91,15795,15796],{"class":101}," m_Age;",[91,15798,15799],{"class":160}," \u002F\u002F只读  年龄\n",[91,15801,15802],{"class":93,"line":2599},[91,15803,2378],{"emptyLinePlaceholder":17},[91,15805,15806,15809],{"class":93,"line":7927},[91,15807,15808],{"class":101},"    string m_Lover;",[91,15810,15811],{"class":160}," \u002F\u002F只写  情人\n",[91,15813,15814],{"class":93,"line":7951},[91,15815,3973],{"class":101},[91,15817,15818],{"class":93,"line":7956},[91,15819,2378],{"emptyLinePlaceholder":17},[91,15821,15822,15824,15826],{"class":93,"line":7962},[91,15823,105],{"class":97},[91,15825,1951],{"class":1941},[91,15827,10832],{"class":101},[91,15829,15830],{"class":93,"line":7989},[91,15831,2378],{"emptyLinePlaceholder":17},[91,15833,15834],{"class":93,"line":7994},[91,15835,15292],{"class":101},[91,15837,15838],{"class":93,"line":8000},[91,15839,15840],{"class":160},"    \u002F\u002F姓名设置\n",[91,15842,15843,15846,15848,15850,15852],{"class":93,"line":8012},[91,15844,15845],{"class":101},"    p.",[91,15847,15045],{"class":1941},[91,15849,102],{"class":101},[91,15851,7895],{"class":206},[91,15853,2697],{"class":101},[91,15855,15856,15858,15860,15863,15865,15868,15871,15873,15875],{"class":93,"line":8024},[91,15857,6508],{"class":101},[91,15859,1146],{"class":97},[91,15861,15862],{"class":206}," \"姓名： \"",[91,15864,1422],{"class":97},[91,15866,15867],{"class":101}," p.",[91,15869,15870],{"class":1941},"getName",[91,15872,13029],{"class":101},[91,15874,1146],{"class":97},[91,15876,8819],{"class":101},[91,15878,15879],{"class":93,"line":8036},[91,15880,2378],{"emptyLinePlaceholder":17},[91,15882,15883],{"class":93,"line":9695},[91,15884,15885],{"class":160},"    \u002F\u002F年龄设置\n",[91,15887,15888,15890,15893,15895,15897],{"class":93,"line":9720},[91,15889,15845],{"class":101},[91,15891,15892],{"class":1941},"setAge",[91,15894,102],{"class":101},[91,15896,758],{"class":150},[91,15898,2697],{"class":101},[91,15900,15901,15903,15905,15908,15910,15912,15915,15917,15919],{"class":93,"line":9743},[91,15902,6508],{"class":101},[91,15904,1146],{"class":97},[91,15906,15907],{"class":206}," \"年龄： \"",[91,15909,1422],{"class":97},[91,15911,15867],{"class":101},[91,15913,15914],{"class":1941},"getAge",[91,15916,13029],{"class":101},[91,15918,1146],{"class":97},[91,15920,8819],{"class":101},[91,15922,15923],{"class":93,"line":9767},[91,15924,2378],{"emptyLinePlaceholder":17},[91,15926,15927],{"class":93,"line":9772},[91,15928,15929],{"class":160},"    \u002F\u002F情人设置\n",[91,15931,15932,15934,15937,15939,15942],{"class":93,"line":9777},[91,15933,15845],{"class":101},[91,15935,15936],{"class":1941},"setLover",[91,15938,102],{"class":101},[91,15940,15941],{"class":206},"\"苍井\"",[91,15943,2697],{"class":101},[91,15945,15946,15949],{"class":93,"line":9782},[91,15947,15948],{"class":160},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[91,15950,15951],{"class":160},"  \u002F\u002F只写属性，不可以读取\n",[91,15953,15954],{"class":93,"line":9791},[91,15955,2378],{"emptyLinePlaceholder":17},[91,15957,15958,15960,15962,15964],{"class":93,"line":9796},[91,15959,2281],{"class":1941},[91,15961,102],{"class":101},[91,15963,2286],{"class":206},[91,15965,2697],{"class":101},[91,15967,15968],{"class":93,"line":9802},[91,15969,2378],{"emptyLinePlaceholder":17},[91,15971,15972,15974,15976],{"class":93,"line":9823},[91,15973,4068],{"class":97},[91,15975,4071],{"class":150},[91,15977,1268],{"class":101},[91,15979,15980],{"class":93,"line":9829},[91,15981,1543],{"class":101},[63,15983,15985],{"id":15984},"_814封装案例","8.1.4封装案例",[46,15987,15988],{},[49,15989,15990,15993],{},[251,15991,15992],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1109,15995,15996,15999],{},[49,15997,15998],{},"求出立方体的面积和体积",[49,16000,16001],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[83,16003,16005],{"className":85,"code":16004,"language":5,"meta":10,"style":10},"#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",[88,16006,16007,16013,16023,16030,16034,16038,16043,16073,16077,16087,16097,16107,16111,16120,16124,16160,16164,16173,16177,16193,16197,16202,16211,16215,16222,16226,16235,16239,16246,16250,16259,16263,16270,16274,16279,16296,16300,16346,16350,16359,16363,16367,16371,16380,16384,16388,16393,16397,16403,16409,16415,16419,16423,16428,16450,16454,16508,16512,16520,16524,16529,16534,16547,16554,16570,16581,16587,16610,16616,16639,16653,16673,16679,16690,16713,16735,16740,16746,16760,16773,16778,16792,16797,16803,16808,16822,16827,16832,16846,16858,16863,16876,16881,16886,16891,16904,16909],{"__ignoreMap":10},[91,16008,16009,16011],{"class":93,"line":94},[91,16010,1927],{"class":97},[91,16012,1930],{"class":206},[91,16014,16015,16017,16019,16021],{"class":93,"line":11},[91,16016,1935],{"class":97},[91,16018,1938],{"class":97},[91,16020,1942],{"class":1941},[91,16022,1268],{"class":101},[91,16024,16025,16027],{"class":93,"line":1157},[91,16026,14673],{"class":97},[91,16028,16029],{"class":1941}," Cube\n",[91,16031,16032],{"class":93,"line":1172},[91,16033,1524],{"class":101},[91,16035,16036],{"class":93,"line":1178},[91,16037,14695],{"class":97},[91,16039,16040],{"class":93,"line":1192},[91,16041,16042],{"class":160},"    \u002F\u002F输入长宽高\n",[91,16044,16045,16047,16050,16052,16054,16057,16059,16061,16064,16066,16068,16071],{"class":93,"line":1198},[91,16046,14888],{"class":97},[91,16048,16049],{"class":1941}," setLwh",[91,16051,102],{"class":101},[91,16053,105],{"class":97},[91,16055,16056],{"class":5195}," l",[91,16058,480],{"class":101},[91,16060,105],{"class":97},[91,16062,16063],{"class":5195}," w",[91,16065,480],{"class":101},[91,16067,105],{"class":97},[91,16069,16070],{"class":5195}," h",[91,16072,108],{"class":101},[91,16074,16075],{"class":93,"line":1289},[91,16076,2008],{"class":101},[91,16078,16079,16082,16084],{"class":93,"line":1295},[91,16080,16081],{"class":101},"        m_L",[91,16083,147],{"class":97},[91,16085,16086],{"class":101},"l;\n",[91,16088,16089,16092,16094],{"class":93,"line":1307},[91,16090,16091],{"class":101},"        m_W",[91,16093,147],{"class":97},[91,16095,16096],{"class":101},"w;\n",[91,16098,16099,16102,16104],{"class":93,"line":1590},[91,16100,16101],{"class":101},"        m_H",[91,16103,147],{"class":97},[91,16105,16106],{"class":101},"h;\n",[91,16108,16109],{"class":93,"line":1595},[91,16110,2165],{"class":101},[91,16112,16113,16115,16118],{"class":93,"line":1601},[91,16114,1963],{"class":97},[91,16116,16117],{"class":1941}," mianji",[91,16119,1954],{"class":101},[91,16121,16122],{"class":93,"line":1606},[91,16123,2008],{"class":101},[91,16125,16126,16128,16130,16132,16135,16137,16140,16142,16145,16147,16150,16152,16155,16157],{"class":93,"line":1620},[91,16127,14731],{"class":97},[91,16129,14734],{"class":150},[91,16131,557],{"class":97},[91,16133,16134],{"class":101},"(m_L",[91,16136,557],{"class":97},[91,16138,16139],{"class":101},"m_W ",[91,16141,583],{"class":97},[91,16143,16144],{"class":101}," m_L",[91,16146,557],{"class":97},[91,16148,16149],{"class":101},"m_H ",[91,16151,583],{"class":97},[91,16153,16154],{"class":101}," m_W",[91,16156,557],{"class":97},[91,16158,16159],{"class":101},"m_H);\n",[91,16161,16162],{"class":93,"line":1625},[91,16163,2165],{"class":101},[91,16165,16166,16168,16171],{"class":93,"line":1631},[91,16167,1963],{"class":97},[91,16169,16170],{"class":1941}," tiji",[91,16172,1954],{"class":101},[91,16174,16175],{"class":93,"line":1652},[91,16176,2008],{"class":101},[91,16178,16179,16181,16183,16185,16188,16190],{"class":93,"line":1657},[91,16180,14731],{"class":97},[91,16182,16144],{"class":101},[91,16184,557],{"class":97},[91,16186,16187],{"class":101},"m_W",[91,16189,557],{"class":97},[91,16191,16192],{"class":101},"m_H;\n",[91,16194,16195],{"class":93,"line":1671},[91,16196,2165],{"class":101},[91,16198,16199],{"class":93,"line":1676},[91,16200,16201],{"class":160},"    \u002F\u002F获取长宽高\n",[91,16203,16204,16206,16209],{"class":93,"line":1705},[91,16205,1963],{"class":97},[91,16207,16208],{"class":1941}," getLength",[91,16210,1954],{"class":101},[91,16212,16213],{"class":93,"line":1710},[91,16214,2008],{"class":101},[91,16216,16217,16219],{"class":93,"line":1727},[91,16218,14731],{"class":97},[91,16220,16221],{"class":101}," m_L;\n",[91,16223,16224],{"class":93,"line":1732},[91,16225,2165],{"class":101},[91,16227,16228,16230,16233],{"class":93,"line":1737},[91,16229,1963],{"class":97},[91,16231,16232],{"class":1941}," getWidth",[91,16234,1954],{"class":101},[91,16236,16237],{"class":93,"line":1742},[91,16238,2008],{"class":101},[91,16240,16241,16243],{"class":93,"line":1756},[91,16242,14731],{"class":97},[91,16244,16245],{"class":101}," m_W;\n",[91,16247,16248],{"class":93,"line":1761},[91,16249,2165],{"class":101},[91,16251,16252,16254,16257],{"class":93,"line":2555},[91,16253,1963],{"class":97},[91,16255,16256],{"class":1941}," getHeight",[91,16258,1954],{"class":101},[91,16260,16261],{"class":93,"line":2569},[91,16262,2008],{"class":101},[91,16264,16265,16267],{"class":93,"line":2577},[91,16266,14731],{"class":97},[91,16268,16269],{"class":101}," m_H;\n",[91,16271,16272],{"class":93,"line":2582},[91,16273,2165],{"class":101},[91,16275,16276],{"class":93,"line":2588},[91,16277,16278],{"class":160},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[91,16280,16281,16284,16287,16289,16292,16294],{"class":93,"line":2594},[91,16282,16283],{"class":97},"    bool",[91,16285,16286],{"class":1941}," isEqual",[91,16288,102],{"class":101},[91,16290,16291],{"class":1941},"Cube",[91,16293,2827],{"class":5195},[91,16295,108],{"class":101},[91,16297,16298],{"class":93,"line":2599},[91,16299,2008],{"class":101},[91,16301,16302,16304,16307,16310,16312,16314,16317,16319,16322,16325,16327,16329,16332,16334,16336,16339,16341,16343],{"class":93,"line":7927},[91,16303,2475],{"class":97},[91,16305,16306],{"class":101}," (c.",[91,16308,16309],{"class":1941},"getLength",[91,16311,13029],{"class":101},[91,16313,2927],{"class":97},[91,16315,16316],{"class":101}," m_L ",[91,16318,1693],{"class":97},[91,16320,16321],{"class":101}," c.",[91,16323,16324],{"class":1941},"getWidth",[91,16326,13029],{"class":101},[91,16328,2927],{"class":97},[91,16330,16331],{"class":101}," m_W ",[91,16333,1693],{"class":97},[91,16335,16321],{"class":101},[91,16337,16338],{"class":1941},"getHeight",[91,16340,13029],{"class":101},[91,16342,2927],{"class":97},[91,16344,16345],{"class":101}," m_H)\n",[91,16347,16348],{"class":93,"line":7951},[91,16349,2488],{"class":101},[91,16351,16352,16354,16357],{"class":93,"line":7956},[91,16353,15711],{"class":97},[91,16355,16356],{"class":150}," true",[91,16358,1268],{"class":101},[91,16360,16361],{"class":93,"line":7962},[91,16362,2507],{"class":101},[91,16364,16365],{"class":93,"line":7989},[91,16366,2548],{"class":97},[91,16368,16369],{"class":93,"line":7994},[91,16370,2488],{"class":101},[91,16372,16373,16375,16378],{"class":93,"line":8000},[91,16374,15711],{"class":97},[91,16376,16377],{"class":150}," false",[91,16379,1268],{"class":101},[91,16381,16382],{"class":93,"line":8012},[91,16383,2507],{"class":101},[91,16385,16386],{"class":93,"line":8024},[91,16387,2165],{"class":101},[91,16389,16390],{"class":93,"line":8036},[91,16391,16392],{"class":160},"    \u002F\u002F私有属性\n",[91,16394,16395],{"class":93,"line":9695},[91,16396,15201],{"class":97},[91,16398,16399,16401],{"class":93,"line":9720},[91,16400,1963],{"class":97},[91,16402,16221],{"class":101},[91,16404,16405,16407],{"class":93,"line":9743},[91,16406,1963],{"class":97},[91,16408,16245],{"class":101},[91,16410,16411,16413],{"class":93,"line":9767},[91,16412,1963],{"class":97},[91,16414,16269],{"class":101},[91,16416,16417],{"class":93,"line":9772},[91,16418,2378],{"emptyLinePlaceholder":17},[91,16420,16421],{"class":93,"line":9777},[91,16422,3973],{"class":101},[91,16424,16425],{"class":93,"line":9782},[91,16426,16427],{"class":160},"\u002F\u002F全局函数判断两个立方体是否相等\n",[91,16429,16430,16432,16434,16436,16438,16441,16443,16445,16448],{"class":93,"line":9791},[91,16431,1332],{"class":97},[91,16433,16286],{"class":1941},[91,16435,102],{"class":101},[91,16437,16291],{"class":1941},[91,16439,16440],{"class":5195}," c1",[91,16442,480],{"class":101},[91,16444,16291],{"class":1941},[91,16446,16447],{"class":5195}," c2",[91,16449,108],{"class":101},[91,16451,16452],{"class":93,"line":9796},[91,16453,1524],{"class":101},[91,16455,16456,16458,16461,16463,16465,16467,16470,16472,16475,16477,16479,16481,16483,16485,16487,16489,16491,16493,16495,16497,16499,16501,16503,16505],{"class":93,"line":9802},[91,16457,4068],{"class":97},[91,16459,16460],{"class":101}," (c1.",[91,16462,16309],{"class":1941},[91,16464,13029],{"class":101},[91,16466,2927],{"class":97},[91,16468,16469],{"class":101}," c2.",[91,16471,16309],{"class":1941},[91,16473,16474],{"class":101},"()) ",[91,16476,1693],{"class":97},[91,16478,16460],{"class":101},[91,16480,16324],{"class":1941},[91,16482,13029],{"class":101},[91,16484,2927],{"class":97},[91,16486,16469],{"class":101},[91,16488,16324],{"class":1941},[91,16490,16474],{"class":101},[91,16492,1693],{"class":97},[91,16494,16460],{"class":101},[91,16496,16338],{"class":1941},[91,16498,13029],{"class":101},[91,16500,2927],{"class":97},[91,16502,16469],{"class":101},[91,16504,16338],{"class":1941},[91,16506,16507],{"class":101},"());\n",[91,16509,16510],{"class":93,"line":9823},[91,16511,1543],{"class":101},[91,16513,16514,16516,16518],{"class":93,"line":9829},[91,16515,105],{"class":97},[91,16517,1951],{"class":1941},[91,16519,1954],{"class":101},[91,16521,16522],{"class":93,"line":9843},[91,16523,1524],{"class":101},[91,16525,16526],{"class":93,"line":9849},[91,16527,16528],{"class":101},"    Cube c1;\n",[91,16530,16531],{"class":93,"line":9876},[91,16532,16533],{"class":160},"    \u002F\u002F输入立方体的长宽高\n",[91,16535,16536,16538,16540,16543,16545],{"class":93,"line":9885},[91,16537,1529],{"class":101},[91,16539,1146],{"class":97},[91,16541,16542],{"class":206},"\"请输入第一个立方体的长、宽、高：\"",[91,16544,1146],{"class":97},[91,16546,1169],{"class":101},[91,16548,16549,16551],{"class":93,"line":9891},[91,16550,1963],{"class":97},[91,16552,16553],{"class":101}," l,w,h,l1,w1,h1;\n",[91,16555,16556,16558,16560,16562,16564,16566,16568],{"class":93,"line":9899},[91,16557,1990],{"class":101},[91,16559,1407],{"class":97},[91,16561,620],{"class":101},[91,16563,1407],{"class":97},[91,16565,897],{"class":101},[91,16567,1407],{"class":97},[91,16569,16106],{"class":101},[91,16571,16572,16575,16578],{"class":93,"line":9904},[91,16573,16574],{"class":101},"    c1.",[91,16576,16577],{"class":1941},"setLwh",[91,16579,16580],{"class":101},"(l,w,h);\n",[91,16582,16584],{"class":93,"line":16583},66,[91,16585,16586],{"class":160},"    \u002F\u002F面积\n",[91,16588,16590,16592,16594,16597,16599,16601,16604,16606,16608],{"class":93,"line":16589},67,[91,16591,1529],{"class":101},[91,16593,1146],{"class":97},[91,16595,16596],{"class":206},"\"立方体的表面积为：\"",[91,16598,1146],{"class":97},[91,16600,14809],{"class":101},[91,16602,16603],{"class":1941},"mianji",[91,16605,2405],{"class":101},[91,16607,1146],{"class":97},[91,16609,1169],{"class":101},[91,16611,16613],{"class":93,"line":16612},68,[91,16614,16615],{"class":160},"    \u002F\u002F体积\n",[91,16617,16619,16621,16623,16626,16628,16630,16633,16635,16637],{"class":93,"line":16618},69,[91,16620,1529],{"class":101},[91,16622,1146],{"class":97},[91,16624,16625],{"class":206},"\"立方体的体积为：\"",[91,16627,1146],{"class":97},[91,16629,14809],{"class":101},[91,16631,16632],{"class":1941},"tiji",[91,16634,2405],{"class":101},[91,16636,1146],{"class":97},[91,16638,1169],{"class":101},[91,16640,16642,16644,16646,16649,16651],{"class":93,"line":16641},70,[91,16643,1529],{"class":101},[91,16645,1146],{"class":97},[91,16647,16648],{"class":206},"\"请输入第二个立方体的长、宽、高：\"",[91,16650,1146],{"class":97},[91,16652,1169],{"class":101},[91,16654,16656,16658,16660,16663,16665,16668,16670],{"class":93,"line":16655},71,[91,16657,1990],{"class":101},[91,16659,1407],{"class":97},[91,16661,16662],{"class":101},"l1",[91,16664,1407],{"class":97},[91,16666,16667],{"class":101},"w1",[91,16669,1407],{"class":97},[91,16671,16672],{"class":101},"h1;\n",[91,16674,16676],{"class":93,"line":16675},72,[91,16677,16678],{"class":101},"    Cube c2;\n",[91,16680,16682,16685,16687],{"class":93,"line":16681},73,[91,16683,16684],{"class":101},"    c2.",[91,16686,16577],{"class":1941},[91,16688,16689],{"class":101},"(l1,w1,h1);\n",[91,16691,16693,16695,16697,16700,16702,16705,16707,16709,16711],{"class":93,"line":16692},74,[91,16694,1529],{"class":101},[91,16696,1146],{"class":97},[91,16698,16699],{"class":206},"\"第二个立方体的表面积为：\"",[91,16701,1146],{"class":97},[91,16703,16704],{"class":101},"c2.",[91,16706,16603],{"class":1941},[91,16708,2405],{"class":101},[91,16710,1146],{"class":97},[91,16712,1169],{"class":101},[91,16714,16716,16718,16720,16723,16725,16727,16729,16731,16733],{"class":93,"line":16715},75,[91,16717,1529],{"class":101},[91,16719,1146],{"class":97},[91,16721,16722],{"class":206},"\"第二个立方体的体积为：\"",[91,16724,1146],{"class":97},[91,16726,16704],{"class":101},[91,16728,16632],{"class":1941},[91,16730,2405],{"class":101},[91,16732,1146],{"class":97},[91,16734,1169],{"class":101},[91,16736,16738],{"class":93,"line":16737},76,[91,16739,2378],{"emptyLinePlaceholder":17},[91,16741,16743],{"class":93,"line":16742},77,[91,16744,16745],{"class":160},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[91,16747,16749,16751,16753,16756,16758],{"class":93,"line":16748},78,[91,16750,1529],{"class":101},[91,16752,1146],{"class":97},[91,16754,16755],{"class":206},"\"内部函数判断结果：\"",[91,16757,1146],{"class":97},[91,16759,1169],{"class":101},[91,16761,16763,16765,16767,16770],{"class":93,"line":16762},79,[91,16764,3079],{"class":97},[91,16766,16460],{"class":101},[91,16768,16769],{"class":1941},"isEqual",[91,16771,16772],{"class":101},"(c2))\n",[91,16774,16776],{"class":93,"line":16775},80,[91,16777,2008],{"class":101},[91,16779,16781,16783,16785,16788,16790],{"class":93,"line":16780},81,[91,16782,3429],{"class":101},[91,16784,1146],{"class":97},[91,16786,16787],{"class":206},"\"两个立方体相等\"",[91,16789,1146],{"class":97},[91,16791,1169],{"class":101},[91,16793,16795],{"class":93,"line":16794},82,[91,16796,2165],{"class":101},[91,16798,16800],{"class":93,"line":16799},83,[91,16801,16802],{"class":97},"    else\n",[91,16804,16806],{"class":93,"line":16805},84,[91,16807,2008],{"class":101},[91,16809,16811,16813,16815,16818,16820],{"class":93,"line":16810},85,[91,16812,3429],{"class":101},[91,16814,1146],{"class":97},[91,16816,16817],{"class":206},"\"两个立方体不相等\"",[91,16819,1146],{"class":97},[91,16821,1169],{"class":101},[91,16823,16825],{"class":93,"line":16824},86,[91,16826,2165],{"class":101},[91,16828,16830],{"class":93,"line":16829},87,[91,16831,2378],{"emptyLinePlaceholder":17},[91,16833,16835,16837,16839,16842,16844],{"class":93,"line":16834},88,[91,16836,1529],{"class":101},[91,16838,1146],{"class":97},[91,16840,16841],{"class":206},"\"全局函数判断结果：\"",[91,16843,1146],{"class":97},[91,16845,1169],{"class":101},[91,16847,16849,16851,16853,16855],{"class":93,"line":16848},89,[91,16850,3079],{"class":97},[91,16852,1636],{"class":101},[91,16854,16769],{"class":1941},[91,16856,16857],{"class":101},"(c1, c2))\n",[91,16859,16861],{"class":93,"line":16860},90,[91,16862,2008],{"class":101},[91,16864,16866,16868,16870,16872,16874],{"class":93,"line":16865},91,[91,16867,3429],{"class":101},[91,16869,1146],{"class":97},[91,16871,16787],{"class":206},[91,16873,1146],{"class":97},[91,16875,1169],{"class":101},[91,16877,16879],{"class":93,"line":16878},92,[91,16880,2165],{"class":101},[91,16882,16884],{"class":93,"line":16883},93,[91,16885,16802],{"class":97},[91,16887,16889],{"class":93,"line":16888},94,[91,16890,2008],{"class":101},[91,16892,16894,16896,16898,16900,16902],{"class":93,"line":16893},95,[91,16895,3429],{"class":101},[91,16897,1146],{"class":97},[91,16899,16817],{"class":206},[91,16901,1146],{"class":97},[91,16903,1169],{"class":101},[91,16905,16907],{"class":93,"line":16906},96,[91,16908,2165],{"class":101},[91,16910,16912],{"class":93,"line":16911},97,[91,16913,1543],{"class":101},[46,16915,16916],{"start":11},[49,16917,16918],{},[251,16919,16920],{},"练习案例2：点和圆的关系",[1109,16922,16923],{},[49,16924,16925],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[83,16927,16929],{"className":85,"code":16928,"language":5,"meta":10,"style":10},"#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",[88,16930,16931,16937,16947,16954,16961,16965,16969,16974,17008,17013,17029,17043,17047,17051,17058,17065,17069,17075,17079,17083,17087,17109,17132,17137,17151,17166,17170,17174,17180,17185,17190,17194,17220,17224,17254,17282,17310,17327,17331,17344,17348,17352,17356,17369,17373,17377,17385,17389,17393,17397,17402,17406,17417,17424,17433,17443,17454,17461,17474,17485,17495,17506,17513,17527,17532,17542,17550],{"__ignoreMap":10},[91,16932,16933,16935],{"class":93,"line":94},[91,16934,1927],{"class":97},[91,16936,1930],{"class":206},[91,16938,16939,16941,16943,16945],{"class":93,"line":11},[91,16940,1935],{"class":97},[91,16942,1938],{"class":97},[91,16944,1942],{"class":1941},[91,16946,1268],{"class":101},[91,16948,16949,16951],{"class":93,"line":1157},[91,16950,1927],{"class":97},[91,16952,16953],{"class":206},"\u003Ccmath>\n",[91,16955,16956,16958],{"class":93,"line":1172},[91,16957,14673],{"class":97},[91,16959,16960],{"class":1941}," Point\n",[91,16962,16963],{"class":93,"line":1178},[91,16964,1524],{"class":101},[91,16966,16967],{"class":93,"line":1192},[91,16968,14695],{"class":97},[91,16970,16971],{"class":93,"line":1198},[91,16972,16973],{"class":160},"    \u002F\u002F赋值\n",[91,16975,16976,16978,16981,16983,16985,16988,16990,16992,16995,16998,17000,17003,17005],{"class":93,"line":1289},[91,16977,14888],{"class":97},[91,16979,16980],{"class":1941}," setPoint",[91,16982,102],{"class":101},[91,16984,14016],{"class":97},[91,16986,16987],{"class":5195}," x",[91,16989,12414],{"class":101},[91,16991,14016],{"class":97},[91,16993,16994],{"class":5195}," y",[91,16996,16997],{"class":101},") { m_x ",[91,16999,147],{"class":97},[91,17001,17002],{"class":101}," x; m_y ",[91,17004,147],{"class":97},[91,17006,17007],{"class":101}," y; }\n",[91,17009,17010],{"class":93,"line":1295},[91,17011,17012],{"class":160},"    \u002F\u002F获取坐标\n",[91,17014,17015,17017,17020,17023,17026],{"class":93,"line":1307},[91,17016,14717],{"class":97},[91,17018,17019],{"class":1941}," getX",[91,17021,17022],{"class":101},"() { ",[91,17024,17025],{"class":97},"return",[91,17027,17028],{"class":101}," m_x; }\n",[91,17030,17031,17033,17036,17038,17040],{"class":93,"line":1590},[91,17032,14717],{"class":97},[91,17034,17035],{"class":1941}," getY",[91,17037,17022],{"class":101},[91,17039,17025],{"class":97},[91,17041,17042],{"class":101}," m_y; }\n",[91,17044,17045],{"class":93,"line":1595},[91,17046,2378],{"emptyLinePlaceholder":17},[91,17048,17049],{"class":93,"line":1601},[91,17050,15201],{"class":97},[91,17052,17053,17055],{"class":93,"line":1606},[91,17054,14717],{"class":97},[91,17056,17057],{"class":101}," m_x;\n",[91,17059,17060,17062],{"class":93,"line":1620},[91,17061,14717],{"class":97},[91,17063,17064],{"class":101}," m_y;\n",[91,17066,17067],{"class":93,"line":1625},[91,17068,3973],{"class":101},[91,17070,17071,17073],{"class":93,"line":1631},[91,17072,14673],{"class":97},[91,17074,14676],{"class":1941},[91,17076,17077],{"class":93,"line":1652},[91,17078,1524],{"class":101},[91,17080,17081],{"class":93,"line":1657},[91,17082,14695],{"class":97},[91,17084,17085],{"class":93,"line":1671},[91,17086,16973],{"class":160},[91,17088,17089,17091,17094,17096,17098,17101,17104,17106],{"class":93,"line":1676},[91,17090,14888],{"class":97},[91,17092,17093],{"class":1941}," setRadius",[91,17095,102],{"class":101},[91,17097,14016],{"class":97},[91,17099,17100],{"class":5195}," r",[91,17102,17103],{"class":101},") { m_r ",[91,17105,147],{"class":97},[91,17107,17108],{"class":101}," r; }\n",[91,17110,17111,17113,17116,17118,17121,17124,17127,17129],{"class":93,"line":1705},[91,17112,14888],{"class":97},[91,17114,17115],{"class":1941}," setCenter",[91,17117,102],{"class":101},[91,17119,17120],{"class":1941},"Point",[91,17122,17123],{"class":5195}," center",[91,17125,17126],{"class":101},") { m_center ",[91,17128,147],{"class":97},[91,17130,17131],{"class":101}," center; }\n",[91,17133,17134],{"class":93,"line":1710},[91,17135,17136],{"class":160},"    \u002F\u002F获取属性\n",[91,17138,17139,17141,17144,17146,17148],{"class":93,"line":1727},[91,17140,14717],{"class":97},[91,17142,17143],{"class":1941}," getRadius",[91,17145,17022],{"class":101},[91,17147,17025],{"class":97},[91,17149,17150],{"class":101}," m_r; }\n",[91,17152,17153,17156,17159,17161,17163],{"class":93,"line":1732},[91,17154,17155],{"class":1941},"    Point",[91,17157,17158],{"class":1941}," getCenter",[91,17160,17022],{"class":101},[91,17162,17025],{"class":97},[91,17164,17165],{"class":101}," m_center; }\n",[91,17167,17168],{"class":93,"line":1737},[91,17169,2378],{"emptyLinePlaceholder":17},[91,17171,17172],{"class":93,"line":1742},[91,17173,15201],{"class":97},[91,17175,17176,17178],{"class":93,"line":1756},[91,17177,14717],{"class":97},[91,17179,14707],{"class":101},[91,17181,17182],{"class":93,"line":1761},[91,17183,17184],{"class":160},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[91,17186,17187],{"class":93,"line":2555},[91,17188,17189],{"class":101},"    Point m_center;\n",[91,17191,17192],{"class":93,"line":2569},[91,17193,3973],{"class":101},[91,17195,17196,17198,17201,17203,17206,17208,17210,17212,17214,17216,17218],{"class":93,"line":2577},[91,17197,5343],{"class":97},[91,17199,17200],{"class":1941}," isInCircle",[91,17202,102],{"class":101},[91,17204,17205],{"class":1941},"Circle",[91,17207,10563],{"class":97},[91,17209,390],{"class":5195},[91,17211,480],{"class":101},[91,17213,17120],{"class":1941},[91,17215,10563],{"class":97},[91,17217,38],{"class":5195},[91,17219,108],{"class":101},[91,17221,17222],{"class":93,"line":2582},[91,17223,1524],{"class":101},[91,17225,17226,17228,17231,17233,17235,17238,17241,17244,17246,17248,17250,17252],{"class":93,"line":2588},[91,17227,14717],{"class":97},[91,17229,17230],{"class":101}," dx ",[91,17232,147],{"class":97},[91,17234,16321],{"class":101},[91,17236,17237],{"class":1941},"getCenter",[91,17239,17240],{"class":101},"().",[91,17242,17243],{"class":1941},"getX",[91,17245,13029],{"class":101},[91,17247,634],{"class":97},[91,17249,15867],{"class":101},[91,17251,17243],{"class":1941},[91,17253,5615],{"class":101},[91,17255,17256,17258,17261,17263,17265,17267,17269,17272,17274,17276,17278,17280],{"class":93,"line":2594},[91,17257,14717],{"class":97},[91,17259,17260],{"class":101}," dy ",[91,17262,147],{"class":97},[91,17264,16321],{"class":101},[91,17266,17237],{"class":1941},[91,17268,17240],{"class":101},[91,17270,17271],{"class":1941},"getY",[91,17273,13029],{"class":101},[91,17275,634],{"class":97},[91,17277,15867],{"class":101},[91,17279,17271],{"class":1941},[91,17281,5615],{"class":101},[91,17283,17284,17286,17289,17291,17294,17297,17299,17301,17303,17305,17307],{"class":93,"line":2599},[91,17285,14717],{"class":97},[91,17287,17288],{"class":101}," distance ",[91,17290,147],{"class":97},[91,17292,17293],{"class":1941}," sqrt",[91,17295,17296],{"class":101},"(dx ",[91,17298,557],{"class":97},[91,17300,17230],{"class":101},[91,17302,583],{"class":97},[91,17304,17260],{"class":101},[91,17306,557],{"class":97},[91,17308,17309],{"class":101}," dy);\n",[91,17311,17312,17314,17317,17319,17321,17324],{"class":93,"line":7927},[91,17313,3079],{"class":97},[91,17315,17316],{"class":101}," (distance ",[91,17318,1012],{"class":97},[91,17320,16321],{"class":101},[91,17322,17323],{"class":1941},"getRadius",[91,17325,17326],{"class":101},"())\n",[91,17328,17329],{"class":93,"line":7951},[91,17330,2008],{"class":101},[91,17332,17333,17335,17337,17340,17342],{"class":93,"line":7956},[91,17334,9648],{"class":101},[91,17336,1146],{"class":97},[91,17338,17339],{"class":206}," \"点在圆内\"",[91,17341,1422],{"class":97},[91,17343,8819],{"class":101},[91,17345,17346],{"class":93,"line":7962},[91,17347,2165],{"class":101},[91,17349,17350],{"class":93,"line":7989},[91,17351,16802],{"class":97},[91,17353,17354],{"class":93,"line":7994},[91,17355,2008],{"class":101},[91,17357,17358,17360,17362,17365,17367],{"class":93,"line":8000},[91,17359,9648],{"class":101},[91,17361,1146],{"class":97},[91,17363,17364],{"class":206}," \"点在圆外\"",[91,17366,1422],{"class":97},[91,17368,8819],{"class":101},[91,17370,17371],{"class":93,"line":8012},[91,17372,2165],{"class":101},[91,17374,17375],{"class":93,"line":8024},[91,17376,1543],{"class":101},[91,17378,17379,17381,17383],{"class":93,"line":8036},[91,17380,105],{"class":97},[91,17382,1951],{"class":1941},[91,17384,1954],{"class":101},[91,17386,17387],{"class":93,"line":9695},[91,17388,1524],{"class":101},[91,17390,17391],{"class":93,"line":9720},[91,17392,15032],{"class":160},[91,17394,17395],{"class":93,"line":9743},[91,17396,14779],{"class":101},[91,17398,17399],{"class":93,"line":9767},[91,17400,17401],{"class":101},"    Point p1;\n",[91,17403,17404],{"class":93,"line":9772},[91,17405,16973],{"class":160},[91,17407,17408,17410,17412,17415],{"class":93,"line":9777},[91,17409,1529],{"class":101},[91,17411,1146],{"class":97},[91,17413,17414],{"class":206},"\"请输入圆的半径：\"",[91,17416,1268],{"class":101},[91,17418,17419,17421],{"class":93,"line":9782},[91,17420,14717],{"class":97},[91,17422,17423],{"class":101}," r;\n",[91,17425,17426,17428,17430],{"class":93,"line":9791},[91,17427,1990],{"class":101},[91,17429,1407],{"class":97},[91,17431,17432],{"class":101},"r;\n",[91,17434,17435,17437,17440],{"class":93,"line":9796},[91,17436,16574],{"class":101},[91,17438,17439],{"class":1941},"setRadius",[91,17441,17442],{"class":101},"(r);\n",[91,17444,17445,17447,17449,17452],{"class":93,"line":9802},[91,17446,1529],{"class":101},[91,17448,1146],{"class":97},[91,17450,17451],{"class":206},"\"请输入圆心坐标：\"",[91,17453,1268],{"class":101},[91,17455,17456,17458],{"class":93,"line":9823},[91,17457,14717],{"class":97},[91,17459,17460],{"class":101}," x, y;\n",[91,17462,17463,17465,17467,17469,17471],{"class":93,"line":9829},[91,17464,1990],{"class":101},[91,17466,1407],{"class":97},[91,17468,922],{"class":101},[91,17470,1407],{"class":97},[91,17472,17473],{"class":101},"y;\n",[91,17475,17476,17479,17482],{"class":93,"line":9843},[91,17477,17478],{"class":101},"    p1.",[91,17480,17481],{"class":1941},"setPoint",[91,17483,17484],{"class":101},"(x, y);\n",[91,17486,17487,17489,17492],{"class":93,"line":9849},[91,17488,16574],{"class":101},[91,17490,17491],{"class":1941},"setCenter",[91,17493,17494],{"class":101},"(p1);\n",[91,17496,17497,17499,17501,17504],{"class":93,"line":9876},[91,17498,1529],{"class":101},[91,17500,1146],{"class":97},[91,17502,17503],{"class":206},"\"请输入测试点坐标：\"",[91,17505,1268],{"class":101},[91,17507,17508,17510],{"class":93,"line":9885},[91,17509,14717],{"class":97},[91,17511,17512],{"class":101}," x1, y1;\n",[91,17514,17515,17517,17519,17522,17524],{"class":93,"line":9891},[91,17516,1990],{"class":101},[91,17518,1407],{"class":97},[91,17520,17521],{"class":101},"x1",[91,17523,1407],{"class":97},[91,17525,17526],{"class":101},"y1;\n",[91,17528,17529],{"class":93,"line":9899},[91,17530,17531],{"class":101},"    Point p2;\n",[91,17533,17534,17537,17539],{"class":93,"line":9904},[91,17535,17536],{"class":101},"    p2.",[91,17538,17481],{"class":1941},[91,17540,17541],{"class":101},"(x1, y1);\n",[91,17543,17544,17547],{"class":93,"line":16583},[91,17545,17546],{"class":1941},"    isInCircle",[91,17548,17549],{"class":101},"(c1, p2);\n",[91,17551,17552],{"class":93,"line":16589},[91,17553,1543],{"class":101},[38,17555,17556],{},"在类中可以让另一个类作为本来的成员",[38,17558,17559],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[38,17561,17562],{},"创建point.h",[83,17564,17566],{"className":85,"code":17565,"language":5,"meta":10,"style":10},"#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",[88,17567,17568,17579,17585,17595,17601,17605,17610,17614,17618,17638,17642,17650,17658,17662,17666,17672,17678],{"__ignoreMap":10},[91,17569,17570,17573,17576],{"class":93,"line":94},[91,17571,17572],{"class":97},"#pragma",[91,17574,17575],{"class":1941}," once",[91,17577,17578],{"class":160}," \u002F\u002F防止头文件重复包含\n",[91,17580,17581,17583],{"class":93,"line":11},[91,17582,1927],{"class":97},[91,17584,1930],{"class":206},[91,17586,17587,17589,17591,17593],{"class":93,"line":1157},[91,17588,1935],{"class":97},[91,17590,1938],{"class":97},[91,17592,1942],{"class":1941},[91,17594,1268],{"class":101},[91,17596,17597,17599],{"class":93,"line":1172},[91,17598,14673],{"class":97},[91,17600,16960],{"class":1941},[91,17602,17603],{"class":93,"line":1178},[91,17604,1524],{"class":101},[91,17606,17607],{"class":93,"line":1192},[91,17608,17609],{"class":160},"\u002F\u002F做好声明与变量定义就可以\n",[91,17611,17612],{"class":93,"line":1198},[91,17613,14695],{"class":97},[91,17615,17616],{"class":93,"line":1289},[91,17617,16973],{"class":160},[91,17619,17620,17622,17624,17626,17628,17630,17632,17634,17636],{"class":93,"line":1295},[91,17621,14888],{"class":97},[91,17623,16980],{"class":1941},[91,17625,102],{"class":101},[91,17627,14016],{"class":97},[91,17629,16987],{"class":5195},[91,17631,12414],{"class":101},[91,17633,14016],{"class":97},[91,17635,16994],{"class":5195},[91,17637,2697],{"class":101},[91,17639,17640],{"class":93,"line":1307},[91,17641,17012],{"class":160},[91,17643,17644,17646,17648],{"class":93,"line":1590},[91,17645,14717],{"class":97},[91,17647,17019],{"class":1941},[91,17649,5615],{"class":101},[91,17651,17652,17654,17656],{"class":93,"line":1595},[91,17653,14717],{"class":97},[91,17655,17035],{"class":1941},[91,17657,5615],{"class":101},[91,17659,17660],{"class":93,"line":1601},[91,17661,2378],{"emptyLinePlaceholder":17},[91,17663,17664],{"class":93,"line":1606},[91,17665,15201],{"class":97},[91,17667,17668,17670],{"class":93,"line":1620},[91,17669,14717],{"class":97},[91,17671,17057],{"class":101},[91,17673,17674,17676],{"class":93,"line":1625},[91,17675,14717],{"class":97},[91,17677,17064],{"class":101},[91,17679,17680],{"class":93,"line":1631},[91,17681,3973],{"class":101},[38,17683,17684],{},"创建point.cpp",[83,17686,17688],{"className":85,"code":17687,"language":5,"meta":10,"style":10},"#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",[88,17689,17690,17697,17702,17736,17740,17756],{"__ignoreMap":10},[91,17691,17692,17694],{"class":93,"line":94},[91,17693,1927],{"class":97},[91,17695,17696],{"class":206},"\u003Cpoint.h>\n",[91,17698,17699],{"class":93,"line":11},[91,17700,17701],{"class":160},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[91,17703,17704,17706,17709,17712,17714,17716,17718,17720,17722,17724,17726,17728,17730,17732,17734],{"class":93,"line":1157},[91,17705,14888],{"class":97},[91,17707,17708],{"class":1941}," Point",[91,17710,17711],{"class":101},"::",[91,17713,17481],{"class":1941},[91,17715,102],{"class":101},[91,17717,14016],{"class":97},[91,17719,16987],{"class":5195},[91,17721,12414],{"class":101},[91,17723,14016],{"class":97},[91,17725,16994],{"class":5195},[91,17727,16997],{"class":101},[91,17729,147],{"class":97},[91,17731,17002],{"class":101},[91,17733,147],{"class":97},[91,17735,17007],{"class":101},[91,17737,17738],{"class":93,"line":1172},[91,17739,17012],{"class":160},[91,17741,17742,17744,17746,17748,17750,17752,17754],{"class":93,"line":1178},[91,17743,14717],{"class":97},[91,17745,17708],{"class":1941},[91,17747,17711],{"class":101},[91,17749,17243],{"class":1941},[91,17751,17022],{"class":101},[91,17753,17025],{"class":97},[91,17755,17028],{"class":101},[91,17757,17758,17760,17762,17764,17766,17768,17770],{"class":93,"line":1192},[91,17759,14717],{"class":97},[91,17761,17708],{"class":1941},[91,17763,17711],{"class":101},[91,17765,17271],{"class":1941},[91,17767,17022],{"class":101},[91,17769,17025],{"class":97},[91,17771,17042],{"class":101},[38,17773,17774],{},"创建circle.h",[83,17776,17778],{"className":85,"code":17777,"language":5,"meta":10,"style":10},"#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",[88,17779,17780,17787,17793,17803,17809,17815,17819,17823,17827,17841,17855,17859,17867,17875,17879,17883,17889,17893,17897],{"__ignoreMap":10},[91,17781,17782,17784],{"class":93,"line":94},[91,17783,17572],{"class":97},[91,17785,17786],{"class":1941}," once\n",[91,17788,17789,17791],{"class":93,"line":11},[91,17790,1927],{"class":97},[91,17792,1930],{"class":206},[91,17794,17795,17797,17799,17801],{"class":93,"line":1157},[91,17796,1935],{"class":97},[91,17798,1938],{"class":97},[91,17800,1942],{"class":1941},[91,17802,1268],{"class":101},[91,17804,17805,17807],{"class":93,"line":1172},[91,17806,1927],{"class":97},[91,17808,17696],{"class":206},[91,17810,17811,17813],{"class":93,"line":1178},[91,17812,14673],{"class":97},[91,17814,14676],{"class":1941},[91,17816,17817],{"class":93,"line":1192},[91,17818,1524],{"class":101},[91,17820,17821],{"class":93,"line":1198},[91,17822,14695],{"class":97},[91,17824,17825],{"class":93,"line":1289},[91,17826,16973],{"class":160},[91,17828,17829,17831,17833,17835,17837,17839],{"class":93,"line":1295},[91,17830,14888],{"class":97},[91,17832,17093],{"class":1941},[91,17834,102],{"class":101},[91,17836,14016],{"class":97},[91,17838,17100],{"class":5195},[91,17840,2697],{"class":101},[91,17842,17843,17845,17847,17849,17851,17853],{"class":93,"line":1307},[91,17844,14888],{"class":97},[91,17846,17115],{"class":1941},[91,17848,102],{"class":101},[91,17850,17120],{"class":1941},[91,17852,17123],{"class":5195},[91,17854,2697],{"class":101},[91,17856,17857],{"class":93,"line":1590},[91,17858,17136],{"class":160},[91,17860,17861,17863,17865],{"class":93,"line":1595},[91,17862,14717],{"class":97},[91,17864,17143],{"class":1941},[91,17866,5615],{"class":101},[91,17868,17869,17871,17873],{"class":93,"line":1601},[91,17870,17155],{"class":1941},[91,17872,17158],{"class":1941},[91,17874,5615],{"class":101},[91,17876,17877],{"class":93,"line":1606},[91,17878,2378],{"emptyLinePlaceholder":17},[91,17880,17881],{"class":93,"line":1620},[91,17882,15201],{"class":97},[91,17884,17885,17887],{"class":93,"line":1625},[91,17886,14717],{"class":97},[91,17888,14707],{"class":101},[91,17890,17891],{"class":93,"line":1631},[91,17892,17184],{"class":160},[91,17894,17895],{"class":93,"line":1652},[91,17896,17189],{"class":101},[91,17898,17899],{"class":93,"line":1657},[91,17900,3973],{"class":101},[38,17902,17903],{},"创建circle.cpp",[83,17905,17907],{"className":85,"code":17906,"language":5,"meta":10,"style":10},"#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",[88,17908,17909,17916,17939,17961,17966,17982],{"__ignoreMap":10},[91,17910,17911,17913],{"class":93,"line":94},[91,17912,1927],{"class":97},[91,17914,17915],{"class":206},"\u003Ccircle.h>\n",[91,17917,17918,17920,17923,17925,17927,17929,17931,17933,17935,17937],{"class":93,"line":11},[91,17919,5343],{"class":97},[91,17921,17922],{"class":1941}," Circle",[91,17924,17711],{"class":101},[91,17926,17439],{"class":1941},[91,17928,102],{"class":101},[91,17930,14016],{"class":97},[91,17932,17100],{"class":5195},[91,17934,17103],{"class":101},[91,17936,147],{"class":97},[91,17938,17108],{"class":101},[91,17940,17941,17943,17945,17947,17949,17951,17953,17955,17957,17959],{"class":93,"line":1157},[91,17942,5343],{"class":97},[91,17944,17922],{"class":1941},[91,17946,17711],{"class":101},[91,17948,17491],{"class":1941},[91,17950,102],{"class":101},[91,17952,17120],{"class":1941},[91,17954,17123],{"class":5195},[91,17956,17126],{"class":101},[91,17958,147],{"class":97},[91,17960,17131],{"class":101},[91,17962,17963],{"class":93,"line":1172},[91,17964,17965],{"class":160},"\u002F\u002F获取属性\n",[91,17967,17968,17970,17972,17974,17976,17978,17980],{"class":93,"line":1178},[91,17969,14016],{"class":97},[91,17971,17922],{"class":1941},[91,17973,17711],{"class":101},[91,17975,17323],{"class":1941},[91,17977,17022],{"class":101},[91,17979,17025],{"class":97},[91,17981,17150],{"class":101},[91,17983,17984,17986,17988,17990,17992,17994,17996],{"class":93,"line":1192},[91,17985,17120],{"class":1941},[91,17987,17922],{"class":1941},[91,17989,17711],{"class":101},[91,17991,17237],{"class":1941},[91,17993,17022],{"class":101},[91,17995,17025],{"class":97},[91,17997,17165],{"class":101},[38,17999,18000],{},"使用封装的类",[83,18002,18004],{"className":85,"code":18003,"language":5,"meta":10,"style":10},"#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",[88,18005,18006,18012,18022,18028,18034,18058,18062,18088,18114,18138,18152,18156,18168,18172,18176,18180,18192,18196,18200,18208,18212,18216,18220,18224,18228,18238,18244,18252,18260,18270,18276,18288,18296,18304,18314,18320,18332,18336,18344,18350],{"__ignoreMap":10},[91,18007,18008,18010],{"class":93,"line":94},[91,18009,1927],{"class":97},[91,18011,1930],{"class":206},[91,18013,18014,18016,18018,18020],{"class":93,"line":11},[91,18015,1935],{"class":97},[91,18017,1938],{"class":97},[91,18019,1942],{"class":1941},[91,18021,1268],{"class":101},[91,18023,18024,18026],{"class":93,"line":1157},[91,18025,1927],{"class":97},[91,18027,17915],{"class":206},[91,18029,18030,18032],{"class":93,"line":1172},[91,18031,1927],{"class":97},[91,18033,17696],{"class":206},[91,18035,18036,18038,18040,18042,18044,18046,18048,18050,18052,18054,18056],{"class":93,"line":1178},[91,18037,5343],{"class":97},[91,18039,17200],{"class":1941},[91,18041,102],{"class":101},[91,18043,17205],{"class":1941},[91,18045,10563],{"class":97},[91,18047,390],{"class":5195},[91,18049,480],{"class":101},[91,18051,17120],{"class":1941},[91,18053,10563],{"class":97},[91,18055,38],{"class":5195},[91,18057,108],{"class":101},[91,18059,18060],{"class":93,"line":1192},[91,18061,1524],{"class":101},[91,18063,18064,18066,18068,18070,18072,18074,18076,18078,18080,18082,18084,18086],{"class":93,"line":1198},[91,18065,14717],{"class":97},[91,18067,17230],{"class":101},[91,18069,147],{"class":97},[91,18071,16321],{"class":101},[91,18073,17237],{"class":1941},[91,18075,17240],{"class":101},[91,18077,17243],{"class":1941},[91,18079,13029],{"class":101},[91,18081,634],{"class":97},[91,18083,15867],{"class":101},[91,18085,17243],{"class":1941},[91,18087,5615],{"class":101},[91,18089,18090,18092,18094,18096,18098,18100,18102,18104,18106,18108,18110,18112],{"class":93,"line":1289},[91,18091,14717],{"class":97},[91,18093,17260],{"class":101},[91,18095,147],{"class":97},[91,18097,16321],{"class":101},[91,18099,17237],{"class":1941},[91,18101,17240],{"class":101},[91,18103,17271],{"class":1941},[91,18105,13029],{"class":101},[91,18107,634],{"class":97},[91,18109,15867],{"class":101},[91,18111,17271],{"class":1941},[91,18113,5615],{"class":101},[91,18115,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134,18136],{"class":93,"line":1295},[91,18117,14717],{"class":97},[91,18119,17288],{"class":101},[91,18121,147],{"class":97},[91,18123,17293],{"class":1941},[91,18125,17296],{"class":101},[91,18127,557],{"class":97},[91,18129,17230],{"class":101},[91,18131,583],{"class":97},[91,18133,17260],{"class":101},[91,18135,557],{"class":97},[91,18137,17309],{"class":101},[91,18139,18140,18142,18144,18146,18148,18150],{"class":93,"line":1307},[91,18141,3079],{"class":97},[91,18143,17316],{"class":101},[91,18145,1012],{"class":97},[91,18147,16321],{"class":101},[91,18149,17323],{"class":1941},[91,18151,17326],{"class":101},[91,18153,18154],{"class":93,"line":1590},[91,18155,2008],{"class":101},[91,18157,18158,18160,18162,18164,18166],{"class":93,"line":1595},[91,18159,9648],{"class":101},[91,18161,1146],{"class":97},[91,18163,17339],{"class":206},[91,18165,1422],{"class":97},[91,18167,8819],{"class":101},[91,18169,18170],{"class":93,"line":1601},[91,18171,2165],{"class":101},[91,18173,18174],{"class":93,"line":1606},[91,18175,16802],{"class":97},[91,18177,18178],{"class":93,"line":1620},[91,18179,2008],{"class":101},[91,18181,18182,18184,18186,18188,18190],{"class":93,"line":1625},[91,18183,9648],{"class":101},[91,18185,1146],{"class":97},[91,18187,17364],{"class":206},[91,18189,1422],{"class":97},[91,18191,8819],{"class":101},[91,18193,18194],{"class":93,"line":1631},[91,18195,2165],{"class":101},[91,18197,18198],{"class":93,"line":1652},[91,18199,1543],{"class":101},[91,18201,18202,18204,18206],{"class":93,"line":1657},[91,18203,105],{"class":97},[91,18205,1951],{"class":1941},[91,18207,1954],{"class":101},[91,18209,18210],{"class":93,"line":1671},[91,18211,1524],{"class":101},[91,18213,18214],{"class":93,"line":1676},[91,18215,15032],{"class":160},[91,18217,18218],{"class":93,"line":1705},[91,18219,14779],{"class":101},[91,18221,18222],{"class":93,"line":1710},[91,18223,17401],{"class":101},[91,18225,18226],{"class":93,"line":1727},[91,18227,16973],{"class":160},[91,18229,18230,18232,18234,18236],{"class":93,"line":1732},[91,18231,1529],{"class":101},[91,18233,1146],{"class":97},[91,18235,17414],{"class":206},[91,18237,1268],{"class":101},[91,18239,18240,18242],{"class":93,"line":1737},[91,18241,14717],{"class":97},[91,18243,17423],{"class":101},[91,18245,18246,18248,18250],{"class":93,"line":1742},[91,18247,1990],{"class":101},[91,18249,1407],{"class":97},[91,18251,17432],{"class":101},[91,18253,18254,18256,18258],{"class":93,"line":1756},[91,18255,16574],{"class":101},[91,18257,17439],{"class":1941},[91,18259,17442],{"class":101},[91,18261,18262,18264,18266,18268],{"class":93,"line":1761},[91,18263,1529],{"class":101},[91,18265,1146],{"class":97},[91,18267,17451],{"class":206},[91,18269,1268],{"class":101},[91,18271,18272,18274],{"class":93,"line":2555},[91,18273,14717],{"class":97},[91,18275,17460],{"class":101},[91,18277,18278,18280,18282,18284,18286],{"class":93,"line":2569},[91,18279,1990],{"class":101},[91,18281,1407],{"class":97},[91,18283,922],{"class":101},[91,18285,1407],{"class":97},[91,18287,17473],{"class":101},[91,18289,18290,18292,18294],{"class":93,"line":2577},[91,18291,17478],{"class":101},[91,18293,17481],{"class":1941},[91,18295,17484],{"class":101},[91,18297,18298,18300,18302],{"class":93,"line":2582},[91,18299,16574],{"class":101},[91,18301,17491],{"class":1941},[91,18303,17494],{"class":101},[91,18305,18306,18308,18310,18312],{"class":93,"line":2588},[91,18307,1529],{"class":101},[91,18309,1146],{"class":97},[91,18311,17503],{"class":206},[91,18313,1268],{"class":101},[91,18315,18316,18318],{"class":93,"line":2594},[91,18317,14717],{"class":97},[91,18319,17512],{"class":101},[91,18321,18322,18324,18326,18328,18330],{"class":93,"line":2599},[91,18323,1990],{"class":101},[91,18325,1407],{"class":97},[91,18327,17521],{"class":101},[91,18329,1407],{"class":97},[91,18331,17526],{"class":101},[91,18333,18334],{"class":93,"line":7927},[91,18335,17531],{"class":101},[91,18337,18338,18340,18342],{"class":93,"line":7951},[91,18339,17536],{"class":101},[91,18341,17481],{"class":1941},[91,18343,17541],{"class":101},[91,18345,18346,18348],{"class":93,"line":7956},[91,18347,17546],{"class":1941},[91,18349,17549],{"class":101},[91,18351,18352],{"class":93,"line":7962},[91,18353,1543],{"class":101},[33,18355,18357],{"id":18356},"_82对象的初始化清理","8.2对象的初始化清理",[1109,18359,18360,18363],{},[49,18361,18362],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[49,18364,18365],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[63,18367,18369],{"id":18368},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[38,18371,18372,18373,18376],{},"对象的",[251,18374,18375],{},"初始化和清理","也是两个非常重要的安全问题",[38,18378,18379],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[38,18381,18382],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[38,18384,18385,18386,18389,18390,18393],{},"c++利用了",[251,18387,18388],{},"构造函数","和",[251,18391,18392],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[38,18395,18396,18397],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[251,18398,18399],{},"我们不提供构造和析构，编译器会提供",[38,18401,18402],{},[251,18403,18404],{},"编译器提供的构造函数和析构函数是空实现。",[1109,18406,18407,18410],{},[49,18408,18409],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[49,18411,18412,18413,18416],{},"析构函数：主要作用在于对象",[251,18414,18415],{},"销毁前","系统自动调用，执行一些清理工作。",[38,18418,18419,18422],{},[251,18420,18421],{},"构造函数语法：",[88,18423,18424],{},"类名(){}",[46,18426,18427,18430,18433,18436,18439],{},[49,18428,18429],{},"构造函数，没有返回值也不写void",[49,18431,18432],{},"函数名称与类名相同",[49,18434,18435],{},"构造函数可以有参数，因此可以发生重载",[49,18437,18438],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[49,18440,18441,18442,531],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[88,18443,18444],{},"Person(){}",[38,18446,18447,13774,18450],{},[251,18448,18449],{},"析构函数语法：",[88,18451,18452],{},"~类名(){}",[46,18454,18455,18458,18461,18467],{},[49,18456,18457],{},"析构函数，没有返回值也不写void",[49,18459,18460],{},"函数名称与类名相同,在名称前加上符号  ~",[49,18462,18463,18464],{},"析构函数不可以有参数，因此",[251,18465,18466],{},"不可以发生重载",[49,18468,18469],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[83,18471,18473],{"className":85,"code":18472,"language":5,"meta":10,"style":10},"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",[88,18474,18475,18481,18485,18489,18494,18501,18505,18518,18522,18527,18534,18538,18551,18555,18559,18563,18567,18575,18579,18587,18591,18595,18603,18607,18612,18616,18623,18627,18640,18644,18652],{"__ignoreMap":10},[91,18476,18477,18479],{"class":93,"line":94},[91,18478,14673],{"class":97},[91,18480,15150],{"class":1941},[91,18482,18483],{"class":93,"line":11},[91,18484,1524],{"class":101},[91,18486,18487],{"class":93,"line":1157},[91,18488,14695],{"class":97},[91,18490,18491],{"class":93,"line":1172},[91,18492,18493],{"class":160},"    \u002F\u002F构造函数\n",[91,18495,18496,18499],{"class":93,"line":1178},[91,18497,18498],{"class":1941},"    Person",[91,18500,1954],{"class":101},[91,18502,18503],{"class":93,"line":1192},[91,18504,2008],{"class":101},[91,18506,18507,18509,18511,18514,18516],{"class":93,"line":1198},[91,18508,9648],{"class":101},[91,18510,1146],{"class":97},[91,18512,18513],{"class":206}," \"Person的构造函数调用\"",[91,18515,1422],{"class":97},[91,18517,8819],{"class":101},[91,18519,18520],{"class":93,"line":1289},[91,18521,2165],{"class":101},[91,18523,18524],{"class":93,"line":1295},[91,18525,18526],{"class":160},"    \u002F\u002F析构函数\n",[91,18528,18529,18532],{"class":93,"line":1307},[91,18530,18531],{"class":1941},"    ~Person",[91,18533,1954],{"class":101},[91,18535,18536],{"class":93,"line":1590},[91,18537,2008],{"class":101},[91,18539,18540,18542,18544,18547,18549],{"class":93,"line":1595},[91,18541,9648],{"class":101},[91,18543,1146],{"class":97},[91,18545,18546],{"class":206}," \"Person的析构函数调用\"",[91,18548,1422],{"class":97},[91,18550,8819],{"class":101},[91,18552,18553],{"class":93,"line":1601},[91,18554,2165],{"class":101},[91,18556,18557],{"class":93,"line":1606},[91,18558,2378],{"emptyLinePlaceholder":17},[91,18560,18561],{"class":93,"line":1620},[91,18562,3973],{"class":101},[91,18564,18565],{"class":93,"line":1625},[91,18566,2378],{"emptyLinePlaceholder":17},[91,18568,18569,18571,18573],{"class":93,"line":1631},[91,18570,5343],{"class":97},[91,18572,5567],{"class":1941},[91,18574,1954],{"class":101},[91,18576,18577],{"class":93,"line":1652},[91,18578,1524],{"class":101},[91,18580,18581,18584],{"class":93,"line":1657},[91,18582,18583],{"class":101},"    Person p;",[91,18585,18586],{"class":160},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[91,18588,18589],{"class":93,"line":1671},[91,18590,1543],{"class":101},[91,18592,18593],{"class":93,"line":1676},[91,18594,2378],{"emptyLinePlaceholder":17},[91,18596,18597,18599,18601],{"class":93,"line":1705},[91,18598,105],{"class":97},[91,18600,1951],{"class":1941},[91,18602,10832],{"class":101},[91,18604,18605],{"class":93,"line":1710},[91,18606,13189],{"class":101},[91,18608,18609],{"class":93,"line":1727},[91,18610,18611],{"class":160},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[91,18613,18614],{"class":93,"line":1732},[91,18615,2378],{"emptyLinePlaceholder":17},[91,18617,18618,18620],{"class":93,"line":1737},[91,18619,18583],{"class":101},[91,18621,18622],{"class":160},"\u002F\u002F只有构造函数\n",[91,18624,18625],{"class":93,"line":1742},[91,18626,2378],{"emptyLinePlaceholder":17},[91,18628,18629,18631,18633,18635,18637],{"class":93,"line":1756},[91,18630,2281],{"class":1941},[91,18632,102],{"class":101},[91,18634,2286],{"class":206},[91,18636,5945],{"class":101},[91,18638,18639],{"class":160},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[91,18641,18642],{"class":93,"line":1761},[91,18643,2378],{"emptyLinePlaceholder":17},[91,18645,18646,18648,18650],{"class":93,"line":2555},[91,18647,4068],{"class":97},[91,18649,4071],{"class":150},[91,18651,1268],{"class":101},[91,18653,18654],{"class":93,"line":2569},[91,18655,1543],{"class":101},[38,18657,18658],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[63,18660,18662],{"id":18661},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[38,18664,18665],{},"两种分类方式：",[38,18667,18668],{},"​\t按参数分为： 有参构造和无参构造",[38,18670,18671],{},"​\t按类型分为： 普通构造和拷贝构造",[38,18673,18674],{},"三种调用方式：",[38,18676,18677],{},"​\t括号法",[38,18679,18680],{},"​\t显示法",[38,18682,18683],{},"​\t隐式转换法",[83,18685,18687],{"className":85,"code":18686,"language":5,"meta":10,"style":10},"#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",[88,18688,18689,18695,18705,18710,18715,18720,18725,18729,18737,18741,18745,18749,18755,18759,18772,18776,18788,18792,18801,18814,18818,18822,18828,18832,18845,18849,18854,18870,18874,18879,18888,18901,18905,18911,18915,18920,18928,18932,18937,18941,18949,18953,18958,18963,18968,18973,18978,18982,18987,18992,18997,19002,19006,19011,19016,19032,19044,19049,19053,19058,19063,19068,19072,19077,19091,19104,19108,19116,19120,19126,19132,19140],{"__ignoreMap":10},[91,18690,18691,18693],{"class":93,"line":94},[91,18692,1927],{"class":97},[91,18694,1930],{"class":206},[91,18696,18697,18699,18701,18703],{"class":93,"line":11},[91,18698,1935],{"class":97},[91,18700,1938],{"class":97},[91,18702,1942],{"class":1941},[91,18704,1268],{"class":101},[91,18706,18707],{"class":93,"line":1157},[91,18708,18709],{"class":160},"\u002F\u002F1.构造函数的分类及调用\n",[91,18711,18712],{"class":93,"line":1172},[91,18713,18714],{"class":160},"\u002F\u002F分类\n",[91,18716,18717],{"class":93,"line":1178},[91,18718,18719],{"class":160},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[91,18721,18722],{"class":93,"line":1192},[91,18723,18724],{"class":160},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[91,18726,18727],{"class":93,"line":1198},[91,18728,2378],{"emptyLinePlaceholder":17},[91,18730,18731,18733,18735],{"class":93,"line":1289},[91,18732,14673],{"class":97},[91,18734,15548],{"class":1941},[91,18736,2652],{"class":101},[91,18738,18739],{"class":93,"line":1295},[91,18740,1524],{"class":101},[91,18742,18743],{"class":93,"line":1307},[91,18744,14695],{"class":97},[91,18746,18747],{"class":93,"line":1590},[91,18748,18493],{"class":160},[91,18750,18751,18753],{"class":93,"line":1595},[91,18752,18498],{"class":1941},[91,18754,1954],{"class":101},[91,18756,18757],{"class":93,"line":1601},[91,18758,2008],{"class":101},[91,18760,18761,18763,18765,18768,18770],{"class":93,"line":1606},[91,18762,3429],{"class":101},[91,18764,1146],{"class":97},[91,18766,18767],{"class":206},"\"Person构造函数无参构造\"",[91,18769,1146],{"class":97},[91,18771,1169],{"class":101},[91,18773,18774],{"class":93,"line":1620},[91,18775,2165],{"class":101},[91,18777,18778,18780,18782,18784,18786],{"class":93,"line":1625},[91,18779,18498],{"class":1941},[91,18781,102],{"class":101},[91,18783,105],{"class":97},[91,18785,1376],{"class":5195},[91,18787,108],{"class":101},[91,18789,18790],{"class":93,"line":1631},[91,18791,2008],{"class":101},[91,18793,18794,18797,18799],{"class":93,"line":1652},[91,18795,18796],{"class":101},"        age",[91,18798,147],{"class":97},[91,18800,6176],{"class":101},[91,18802,18803,18805,18807,18810,18812],{"class":93,"line":1657},[91,18804,3429],{"class":101},[91,18806,1146],{"class":97},[91,18808,18809],{"class":206},"\"Person构造函数有参构造\"",[91,18811,1146],{"class":97},[91,18813,1169],{"class":101},[91,18815,18816],{"class":93,"line":1671},[91,18817,2165],{"class":101},[91,18819,18820],{"class":93,"line":1676},[91,18821,18526],{"class":160},[91,18823,18824,18826],{"class":93,"line":1705},[91,18825,18531],{"class":1941},[91,18827,1954],{"class":101},[91,18829,18830],{"class":93,"line":1710},[91,18831,2008],{"class":101},[91,18833,18834,18836,18838,18841,18843],{"class":93,"line":1727},[91,18835,3429],{"class":101},[91,18837,1146],{"class":97},[91,18839,18840],{"class":206},"\"Person析构函数被调用\"",[91,18842,1146],{"class":97},[91,18844,1169],{"class":101},[91,18846,18847],{"class":93,"line":1732},[91,18848,2165],{"class":101},[91,18850,18851],{"class":93,"line":1737},[91,18852,18853],{"class":160},"    \u002F\u002F拷贝构造函数\n",[91,18855,18856,18858,18860,18862,18864,18866,18868],{"class":93,"line":1742},[91,18857,18498],{"class":1941},[91,18859,102],{"class":101},[91,18861,6771],{"class":97},[91,18863,15548],{"class":1941},[91,18865,10563],{"class":97},[91,18867,38],{"class":5195},[91,18869,108],{"class":101},[91,18871,18872],{"class":93,"line":1756},[91,18873,2008],{"class":101},[91,18875,18876],{"class":93,"line":1761},[91,18877,18878],{"class":160},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[91,18880,18881,18883,18885],{"class":93,"line":2555},[91,18882,18796],{"class":101},[91,18884,147],{"class":97},[91,18886,18887],{"class":101},"p.age;\n",[91,18889,18890,18892,18894,18897,18899],{"class":93,"line":2569},[91,18891,3429],{"class":101},[91,18893,1146],{"class":97},[91,18895,18896],{"class":206},"\"Person拷贝构造函数被调用\"",[91,18898,1146],{"class":97},[91,18900,1169],{"class":101},[91,18902,18903],{"class":93,"line":2577},[91,18904,2165],{"class":101},[91,18906,18907,18909],{"class":93,"line":2582},[91,18908,1963],{"class":97},[91,18910,7776],{"class":101},[91,18912,18913],{"class":93,"line":2588},[91,18914,3973],{"class":101},[91,18916,18917],{"class":93,"line":2594},[91,18918,18919],{"class":160},"\u002F\u002F调用\n",[91,18921,18922,18924,18926],{"class":93,"line":2599},[91,18923,5343],{"class":97},[91,18925,5567],{"class":1941},[91,18927,1954],{"class":101},[91,18929,18930],{"class":93,"line":7927},[91,18931,1524],{"class":101},[91,18933,18934],{"class":93,"line":7951},[91,18935,18936],{"class":160},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[91,18938,18939],{"class":93,"line":7956},[91,18940,1543],{"class":101},[91,18942,18943,18945,18947],{"class":93,"line":7962},[91,18944,5343],{"class":97},[91,18946,5636],{"class":1941},[91,18948,1954],{"class":101},[91,18950,18951],{"class":93,"line":7989},[91,18952,1524],{"class":101},[91,18954,18955],{"class":93,"line":7994},[91,18956,18957],{"class":160},"    \u002F\u002F1.括号法\n",[91,18959,18960],{"class":93,"line":8000},[91,18961,18962],{"class":160},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[91,18964,18965],{"class":93,"line":8012},[91,18966,18967],{"class":160},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[91,18969,18970],{"class":93,"line":8024},[91,18971,18972],{"class":160},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[91,18974,18975],{"class":93,"line":8036},[91,18976,18977],{"class":160},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[91,18979,18980],{"class":93,"line":9695},[91,18981,2378],{"emptyLinePlaceholder":17},[91,18983,18984],{"class":93,"line":9720},[91,18985,18986],{"class":160},"    \u002F\u002F注意事项\n",[91,18988,18989],{"class":93,"line":9743},[91,18990,18991],{"class":160},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[91,18993,18994],{"class":93,"line":9767},[91,18995,18996],{"class":160},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[91,18998,18999],{"class":93,"line":9772},[91,19000,19001],{"class":160},"    \u002F\u002F Person p4();\n",[91,19003,19004],{"class":93,"line":9777},[91,19005,2378],{"emptyLinePlaceholder":17},[91,19007,19008],{"class":93,"line":9782},[91,19009,19010],{"class":160},"    \u002F\u002F2.显示法\n",[91,19012,19013],{"class":93,"line":9791},[91,19014,19015],{"class":101},"    Person p1;\n",[91,19017,19018,19021,19023,19026,19028,19030],{"class":93,"line":9796},[91,19019,19020],{"class":101},"    Person p2",[91,19022,147],{"class":97},[91,19024,19025],{"class":1941},"Person",[91,19027,102],{"class":101},[91,19029,548],{"class":150},[91,19031,2697],{"class":101},[91,19033,19034,19037,19039,19041],{"class":93,"line":9802},[91,19035,19036],{"class":101},"    Person p3",[91,19038,147],{"class":97},[91,19040,19025],{"class":1941},[91,19042,19043],{"class":101},"(p2);\n",[91,19045,19046],{"class":93,"line":9823},[91,19047,19048],{"class":160},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[91,19050,19051],{"class":93,"line":9829},[91,19052,2378],{"emptyLinePlaceholder":17},[91,19054,19055],{"class":93,"line":9843},[91,19056,19057],{"class":160},"    \u002F\u002F 注意事项2\n",[91,19059,19060],{"class":93,"line":9849},[91,19061,19062],{"class":160},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[91,19064,19065],{"class":93,"line":9876},[91,19066,19067],{"class":160},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[91,19069,19070],{"class":93,"line":9885},[91,19071,2378],{"emptyLinePlaceholder":17},[91,19073,19074],{"class":93,"line":9891},[91,19075,19076],{"class":160},"    \u002F\u002F3.隐士转换法\n",[91,19078,19079,19082,19084,19086,19088],{"class":93,"line":9899},[91,19080,19081],{"class":101},"    Person p4",[91,19083,147],{"class":97},[91,19085,548],{"class":150},[91,19087,157],{"class":101},[91,19089,19090],{"class":160},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[91,19092,19093,19096,19098,19101],{"class":93,"line":9904},[91,19094,19095],{"class":101},"    Person p5",[91,19097,147],{"class":97},[91,19099,19100],{"class":101},"p4;",[91,19102,19103],{"class":160}," \u002F\u002F 这里会调用拷贝构造函数\n",[91,19105,19106],{"class":93,"line":16583},[91,19107,1543],{"class":101},[91,19109,19110,19112,19114],{"class":93,"line":16589},[91,19111,105],{"class":97},[91,19113,1951],{"class":1941},[91,19115,1954],{"class":101},[91,19117,19118],{"class":93,"line":16612},[91,19119,1524],{"class":101},[91,19121,19122,19124],{"class":93,"line":16618},[91,19123,5612],{"class":1941},[91,19125,5615],{"class":101},[91,19127,19128,19130],{"class":93,"line":16641},[91,19129,5681],{"class":1941},[91,19131,5615],{"class":101},[91,19133,19134,19136,19138],{"class":93,"line":16655},[91,19135,4068],{"class":97},[91,19137,4071],{"class":150},[91,19139,1268],{"class":101},[91,19141,19142],{"class":93,"line":16675},[91,19143,1543],{"class":101},[38,19145,19146,19149],{},[251,19147,19148],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[63,19151,19153],{"id":19152},"_823拷贝构造函数","8.2.3拷贝构造函数",[38,19155,19156],{},"C++中拷贝构造函数调用时机通常有三种情况",[1109,19158,19159,19162,19165],{},[49,19160,19161],{},"使用一个已经创建完毕的对象来初始化一个新对象",[49,19163,19164],{},"值传递的方式给函数参数传值",[49,19166,19167],{},"以值方式返回局部对象",[83,19169,19171],{"className":85,"code":19170,"language":5,"meta":10,"style":10},"#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",[88,19172,19173,19179,19189,19193,19198,19202,19207,19212,19217,19223,19227,19231,19237,19241,19254,19258,19263,19275,19279,19287,19300,19304,19308,19324,19328,19337,19350,19354,19360,19364,19376,19380,19386,19390,19394,19402,19406,19419,19427,19445,19449,19454,19459,19474,19478,19491,19495,19503,19507,19511,19519,19523,19528,19537,19541,19545,19570,19580,19584,19592,19596,19607,19632,19636,19640,19644,19652,19656,19661,19666,19673,19678,19683,19688,19693,19697,19702,19706,19711,19715,19720,19725,19729,19733,19738,19743,19751],{"__ignoreMap":10},[91,19174,19175,19177],{"class":93,"line":94},[91,19176,1927],{"class":97},[91,19178,1930],{"class":206},[91,19180,19181,19183,19185,19187],{"class":93,"line":11},[91,19182,1935],{"class":97},[91,19184,1938],{"class":97},[91,19186,1942],{"class":1941},[91,19188,1268],{"class":101},[91,19190,19191],{"class":93,"line":1157},[91,19192,2378],{"emptyLinePlaceholder":17},[91,19194,19195],{"class":93,"line":1172},[91,19196,19197],{"class":160},"\u002F\u002F拷贝构造函数调用时机\n",[91,19199,19200],{"class":93,"line":1178},[91,19201,2378],{"emptyLinePlaceholder":17},[91,19203,19204],{"class":93,"line":1192},[91,19205,19206],{"class":160},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[91,19208,19209],{"class":93,"line":1198},[91,19210,19211],{"class":160},"\u002F\u002F2.值传递的方式给函数参数传值\n",[91,19213,19214],{"class":93,"line":1289},[91,19215,19216],{"class":160},"\u002F\u002F3.以值方式返回局部对象\n",[91,19218,19219,19221],{"class":93,"line":1295},[91,19220,14673],{"class":97},[91,19222,15150],{"class":1941},[91,19224,19225],{"class":93,"line":1307},[91,19226,1524],{"class":101},[91,19228,19229],{"class":93,"line":1590},[91,19230,14695],{"class":97},[91,19232,19233,19235],{"class":93,"line":1595},[91,19234,18498],{"class":1941},[91,19236,1954],{"class":101},[91,19238,19239],{"class":93,"line":1601},[91,19240,2008],{"class":101},[91,19242,19243,19245,19247,19250,19252],{"class":93,"line":1606},[91,19244,9648],{"class":101},[91,19246,1146],{"class":97},[91,19248,19249],{"class":206}," \"Person的默认构造函数调用\"",[91,19251,1422],{"class":97},[91,19253,8819],{"class":101},[91,19255,19256],{"class":93,"line":1620},[91,19257,2165],{"class":101},[91,19259,19260],{"class":93,"line":1625},[91,19261,19262],{"class":160},"    \u002F\u002F有参构造\n",[91,19264,19265,19267,19269,19271,19273],{"class":93,"line":1631},[91,19266,18498],{"class":1941},[91,19268,102],{"class":101},[91,19270,105],{"class":97},[91,19272,15668],{"class":5195},[91,19274,108],{"class":101},[91,19276,19277],{"class":93,"line":1652},[91,19278,2008],{"class":101},[91,19280,19281,19283,19285],{"class":93,"line":1657},[91,19282,15722],{"class":101},[91,19284,147],{"class":97},[91,19286,7776],{"class":101},[91,19288,19289,19291,19293,19296,19298],{"class":93,"line":1671},[91,19290,9648],{"class":101},[91,19292,1146],{"class":97},[91,19294,19295],{"class":206}," \"Person的有参构造函数调用\"",[91,19297,1422],{"class":97},[91,19299,8819],{"class":101},[91,19301,19302],{"class":93,"line":1676},[91,19303,2165],{"class":101},[91,19305,19306],{"class":93,"line":1705},[91,19307,18853],{"class":160},[91,19309,19310,19312,19314,19316,19318,19320,19322],{"class":93,"line":1710},[91,19311,18498],{"class":1941},[91,19313,102],{"class":101},[91,19315,6771],{"class":97},[91,19317,15548],{"class":1941},[91,19319,10563],{"class":97},[91,19321,38],{"class":5195},[91,19323,108],{"class":101},[91,19325,19326],{"class":93,"line":1727},[91,19327,2008],{"class":101},[91,19329,19330,19332,19334],{"class":93,"line":1732},[91,19331,15722],{"class":101},[91,19333,147],{"class":97},[91,19335,19336],{"class":101}," p.m_Age;\n",[91,19338,19339,19341,19343,19346,19348],{"class":93,"line":1737},[91,19340,9648],{"class":101},[91,19342,1146],{"class":97},[91,19344,19345],{"class":206}," \"Person的拷贝构造函数调用\"",[91,19347,1422],{"class":97},[91,19349,8819],{"class":101},[91,19351,19352],{"class":93,"line":1742},[91,19353,2165],{"class":101},[91,19355,19356,19358],{"class":93,"line":1756},[91,19357,18531],{"class":1941},[91,19359,1954],{"class":101},[91,19361,19362],{"class":93,"line":1761},[91,19363,2008],{"class":101},[91,19365,19366,19368,19370,19372,19374],{"class":93,"line":2555},[91,19367,9648],{"class":101},[91,19369,1146],{"class":97},[91,19371,18546],{"class":206},[91,19373,1422],{"class":97},[91,19375,8819],{"class":101},[91,19377,19378],{"class":93,"line":2569},[91,19379,2165],{"class":101},[91,19381,19382,19384],{"class":93,"line":2577},[91,19383,1963],{"class":97},[91,19385,15645],{"class":101},[91,19387,19388],{"class":93,"line":2582},[91,19389,3973],{"class":101},[91,19391,19392],{"class":93,"line":2588},[91,19393,19206],{"class":160},[91,19395,19396,19398,19400],{"class":93,"line":2594},[91,19397,5343],{"class":97},[91,19399,5567],{"class":1941},[91,19401,1954],{"class":101},[91,19403,19404],{"class":93,"line":2599},[91,19405,1524],{"class":101},[91,19407,19408,19411,19413,19415,19417],{"class":93,"line":7927},[91,19409,19410],{"class":101},"    Person ",[91,19412,7109],{"class":1941},[91,19414,102],{"class":101},[91,19416,802],{"class":150},[91,19418,2697],{"class":101},[91,19420,19421,19423,19425],{"class":93,"line":7951},[91,19422,19410],{"class":101},[91,19424,7012],{"class":1941},[91,19426,17494],{"class":101},[91,19428,19429,19431,19433,19436,19438,19441,19443],{"class":93,"line":7956},[91,19430,1529],{"class":101},[91,19432,1146],{"class":97},[91,19434,19435],{"class":206},"\"P2的年龄为：\"",[91,19437,1146],{"class":97},[91,19439,19440],{"class":101},"p2.m_Age",[91,19442,1146],{"class":97},[91,19444,1169],{"class":101},[91,19446,19447],{"class":93,"line":7962},[91,19448,1543],{"class":101},[91,19450,19451],{"class":93,"line":7989},[91,19452,19453],{"class":160},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[91,19455,19456],{"class":93,"line":7994},[91,19457,19458],{"class":160},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[91,19460,19461,19463,19466,19468,19470,19472],{"class":93,"line":8000},[91,19462,5343],{"class":97},[91,19464,19465],{"class":1941}," doWork",[91,19467,102],{"class":101},[91,19469,19025],{"class":1941},[91,19471,6804],{"class":5195},[91,19473,108],{"class":101},[91,19475,19476],{"class":93,"line":8012},[91,19477,1524],{"class":101},[91,19479,19480,19482,19484,19487,19489],{"class":93,"line":8024},[91,19481,6508],{"class":101},[91,19483,1146],{"class":97},[91,19485,19486],{"class":206}," \"doWork函数调用\"",[91,19488,1422],{"class":97},[91,19490,8819],{"class":101},[91,19492,19493],{"class":93,"line":8036},[91,19494,1543],{"class":101},[91,19496,19497,19499,19501],{"class":93,"line":9695},[91,19498,5343],{"class":97},[91,19500,5636],{"class":1941},[91,19502,1954],{"class":101},[91,19504,19505],{"class":93,"line":9720},[91,19506,1524],{"class":101},[91,19508,19509],{"class":93,"line":9743},[91,19510,15292],{"class":101},[91,19512,19513,19516],{"class":93,"line":9767},[91,19514,19515],{"class":1941},"    doWork",[91,19517,19518],{"class":101},"(p);\n",[91,19520,19521],{"class":93,"line":9772},[91,19522,1543],{"class":101},[91,19524,19525],{"class":93,"line":9777},[91,19526,19527],{"class":160},"\u002F\u002F 3.以值方式返回局部对象\n",[91,19529,19530,19532,19535],{"class":93,"line":9782},[91,19531,19025],{"class":1941},[91,19533,19534],{"class":1941}," doWork2",[91,19536,1954],{"class":101},[91,19538,19539],{"class":93,"line":9791},[91,19540,1524],{"class":101},[91,19542,19543],{"class":93,"line":9796},[91,19544,19015],{"class":101},[91,19546,19547,19549,19551,19553,19555,19557,19559,19561,19563,19565,19567],{"class":93,"line":9802},[91,19548,1529],{"class":101},[91,19550,1146],{"class":97},[91,19552,102],{"class":101},[91,19554,105],{"class":97},[91,19556,6497],{"class":97},[91,19558,531],{"class":101},[91,19560,455],{"class":97},[91,19562,7109],{"class":101},[91,19564,1146],{"class":97},[91,19566,1216],{"class":101},[91,19568,19569],{"class":160},"\u002F\u002F打印p1的地址\n",[91,19571,19572,19574,19577],{"class":93,"line":9823},[91,19573,4068],{"class":97},[91,19575,19576],{"class":101}," p1;",[91,19578,19579],{"class":160},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[91,19581,19582],{"class":93,"line":9829},[91,19583,1543],{"class":101},[91,19585,19586,19588,19590],{"class":93,"line":9843},[91,19587,5343],{"class":97},[91,19589,5708],{"class":1941},[91,19591,1954],{"class":101},[91,19593,19594],{"class":93,"line":9849},[91,19595,1524],{"class":101},[91,19597,19598,19601,19603,19605],{"class":93,"line":9876},[91,19599,19600],{"class":101},"    Person p ",[91,19602,147],{"class":97},[91,19604,19534],{"class":1941},[91,19606,5615],{"class":101},[91,19608,19609,19611,19613,19615,19617,19619,19621,19623,19625,19627,19629],{"class":93,"line":9885},[91,19610,1529],{"class":101},[91,19612,1146],{"class":97},[91,19614,102],{"class":101},[91,19616,105],{"class":97},[91,19618,6497],{"class":97},[91,19620,531],{"class":101},[91,19622,455],{"class":97},[91,19624,38],{"class":101},[91,19626,1146],{"class":97},[91,19628,1216],{"class":101},[91,19630,19631],{"class":160},"\u002F\u002F打印p的地址\n",[91,19633,19634],{"class":93,"line":9891},[91,19635,1543],{"class":101},[91,19637,19638],{"class":93,"line":9899},[91,19639,2378],{"emptyLinePlaceholder":17},[91,19641,19642],{"class":93,"line":9904},[91,19643,2378],{"emptyLinePlaceholder":17},[91,19645,19646,19648,19650],{"class":93,"line":16583},[91,19647,105],{"class":97},[91,19649,1951],{"class":1941},[91,19651,1954],{"class":101},[91,19653,19654],{"class":93,"line":16589},[91,19655,1524],{"class":101},[91,19657,19658],{"class":93,"line":16612},[91,19659,19660],{"class":160},"    \u002F\u002F test01();\n",[91,19662,19663],{"class":93,"line":16618},[91,19664,19665],{"class":160},"    \u002F\u002F test02();\n",[91,19667,19668,19671],{"class":93,"line":16641},[91,19669,19670],{"class":1941},"    test03",[91,19672,5615],{"class":101},[91,19674,19675],{"class":93,"line":16655},[91,19676,19677],{"class":160},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[91,19679,19680],{"class":93,"line":16675},[91,19681,19682],{"class":160},"\u002F\u002F 输出结果如下：\n",[91,19684,19685],{"class":93,"line":16681},[91,19686,19687],{"class":160},"\u002F\u002F Person的默认构造函数调用\n",[91,19689,19690],{"class":93,"line":16692},[91,19691,19692],{"class":160},"\u002F\u002F 0x7fffffffceec\n",[91,19694,19695],{"class":93,"line":16715},[91,19696,19692],{"class":160},[91,19698,19699],{"class":93,"line":16737},[91,19700,19701],{"class":160},"\u002F\u002F Person的析构函数调用\n",[91,19703,19704],{"class":93,"line":16742},[91,19705,2378],{"emptyLinePlaceholder":17},[91,19707,19708],{"class":93,"line":16748},[91,19709,19710],{"class":160},"\u002F\u002F 之前的输出结果如下：\n",[91,19712,19713],{"class":93,"line":16762},[91,19714,19687],{"class":160},[91,19716,19717],{"class":93,"line":16775},[91,19718,19719],{"class":160},"\u002F\u002F 地址\n",[91,19721,19722],{"class":93,"line":16780},[91,19723,19724],{"class":160},"\u002F\u002F Person的拷贝构造函数调用\n",[91,19726,19727],{"class":93,"line":16794},[91,19728,19701],{"class":160},[91,19730,19731],{"class":93,"line":16799},[91,19732,19719],{"class":160},[91,19734,19735],{"class":93,"line":16805},[91,19736,19737],{"class":160},"\u002F\u002F (这两次输出的地址也是不同的) \n",[91,19739,19740],{"class":93,"line":16810},[91,19741,19742],{"class":160},"\u002F\u002F Person的析构函数调用     \n",[91,19744,19745,19747,19749],{"class":93,"line":16824},[91,19746,4068],{"class":97},[91,19748,4071],{"class":150},[91,19750,1268],{"class":101},[91,19752,19753],{"class":93,"line":16829},[91,19754,1543],{"class":101},[38,19756,19757],{},"简化版理解",[83,19759,19761],{"className":85,"code":19760,"language":5,"meta":10,"style":10},"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",[88,19762,19763,19771,19775,19781,19794,19805,19809,19821,19834,19842,19846,19862,19875,19884,19888,19893,19899,19912,19916,19920,19927,19931,19935,19940,19948,19952,19968,19981,19994,19998,20003,20011,20015,20019,20024,20029,20045,20053,20060,20066,20070,20074,20079,20087,20091,20095,20118,20125,20129,20133,20141,20145,20155,20177,20181,20185,20189,20197,20201,20206,20211,20217,20221,20231,20235,20243],{"__ignoreMap":10},[91,19764,19765,19767,19769],{"class":93,"line":94},[91,19766,14673],{"class":97},[91,19768,15548],{"class":1941},[91,19770,15551],{"class":101},[91,19772,19773],{"class":93,"line":11},[91,19774,14695],{"class":97},[91,19776,19777,19779],{"class":93,"line":1157},[91,19778,18498],{"class":1941},[91,19780,10832],{"class":101},[91,19782,19783,19785,19787,19790,19792],{"class":93,"line":1172},[91,19784,9648],{"class":101},[91,19786,1146],{"class":97},[91,19788,19789],{"class":206}," \"无参构造函数!\"",[91,19791,1422],{"class":97},[91,19793,8819],{"class":101},[91,19795,19796,19799,19801,19803],{"class":93,"line":1178},[91,19797,19798],{"class":101},"        mAge ",[91,19800,147],{"class":97},[91,19802,4071],{"class":150},[91,19804,1268],{"class":101},[91,19806,19807],{"class":93,"line":1192},[91,19808,2165],{"class":101},[91,19810,19811,19813,19815,19817,19819],{"class":93,"line":1198},[91,19812,18498],{"class":1941},[91,19814,102],{"class":101},[91,19816,105],{"class":97},[91,19818,15668],{"class":5195},[91,19820,12421],{"class":101},[91,19822,19823,19825,19827,19830,19832],{"class":93,"line":1289},[91,19824,9648],{"class":101},[91,19826,1146],{"class":97},[91,19828,19829],{"class":206}," \"有参构造函数!\"",[91,19831,1422],{"class":97},[91,19833,8819],{"class":101},[91,19835,19836,19838,19840],{"class":93,"line":1295},[91,19837,19798],{"class":101},[91,19839,147],{"class":97},[91,19841,7776],{"class":101},[91,19843,19844],{"class":93,"line":1307},[91,19845,2165],{"class":101},[91,19847,19848,19850,19852,19854,19856,19858,19860],{"class":93,"line":1590},[91,19849,18498],{"class":1941},[91,19851,102],{"class":101},[91,19853,6771],{"class":97},[91,19855,15548],{"class":1941},[91,19857,455],{"class":97},[91,19859,6804],{"class":5195},[91,19861,12421],{"class":101},[91,19863,19864,19866,19868,19871,19873],{"class":93,"line":1595},[91,19865,9648],{"class":101},[91,19867,1146],{"class":97},[91,19869,19870],{"class":206}," \"拷贝构造函数!\"",[91,19872,1422],{"class":97},[91,19874,8819],{"class":101},[91,19876,19877,19879,19881],{"class":93,"line":1601},[91,19878,19798],{"class":101},[91,19880,147],{"class":97},[91,19882,19883],{"class":101}," p.mAge;\n",[91,19885,19886],{"class":93,"line":1606},[91,19887,2165],{"class":101},[91,19889,19890],{"class":93,"line":1620},[91,19891,19892],{"class":160},"    \u002F\u002F析构函数在释放内存之前调用\n",[91,19894,19895,19897],{"class":93,"line":1625},[91,19896,18531],{"class":1941},[91,19898,10832],{"class":101},[91,19900,19901,19903,19905,19908,19910],{"class":93,"line":1631},[91,19902,9648],{"class":101},[91,19904,1146],{"class":97},[91,19906,19907],{"class":206}," \"析构函数!\"",[91,19909,1422],{"class":97},[91,19911,8819],{"class":101},[91,19913,19914],{"class":93,"line":1652},[91,19915,2165],{"class":101},[91,19917,19918],{"class":93,"line":1657},[91,19919,14695],{"class":97},[91,19921,19922,19924],{"class":93,"line":1671},[91,19923,1963],{"class":97},[91,19925,19926],{"class":101}," mAge;\n",[91,19928,19929],{"class":93,"line":1676},[91,19930,3973],{"class":101},[91,19932,19933],{"class":93,"line":1705},[91,19934,2378],{"emptyLinePlaceholder":17},[91,19936,19937],{"class":93,"line":1710},[91,19938,19939],{"class":160},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[91,19941,19942,19944,19946],{"class":93,"line":1727},[91,19943,5343],{"class":97},[91,19945,5567],{"class":1941},[91,19947,10832],{"class":101},[91,19949,19950],{"class":93,"line":1732},[91,19951,2378],{"emptyLinePlaceholder":17},[91,19953,19954,19956,19959,19961,19963,19965],{"class":93,"line":1737},[91,19955,19410],{"class":101},[91,19957,19958],{"class":1941},"man",[91,19960,102],{"class":101},[91,19962,413],{"class":150},[91,19964,5945],{"class":101},[91,19966,19967],{"class":160}," \u002F\u002Fp对象已经创建完毕\n",[91,19969,19970,19972,19975,19978],{"class":93,"line":1742},[91,19971,19410],{"class":101},[91,19973,19974],{"class":1941},"newman",[91,19976,19977],{"class":101},"(man);",[91,19979,19980],{"class":160}," \u002F\u002F调用拷贝构造函数\n",[91,19982,19983,19986,19988,19991],{"class":93,"line":1756},[91,19984,19985],{"class":101},"    Person newman2 ",[91,19987,147],{"class":97},[91,19989,19990],{"class":101}," man;",[91,19992,19993],{"class":160}," \u002F\u002F拷贝构造\n",[91,19995,19996],{"class":93,"line":1761},[91,19997,2378],{"emptyLinePlaceholder":17},[91,19999,20000],{"class":93,"line":2555},[91,20001,20002],{"class":160},"    \u002F\u002FPerson newman3;\n",[91,20004,20005,20008],{"class":93,"line":2569},[91,20006,20007],{"class":160},"    \u002F\u002Fnewman3 = man;",[91,20009,20010],{"class":160}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[91,20012,20013],{"class":93,"line":2577},[91,20014,1543],{"class":101},[91,20016,20017],{"class":93,"line":2582},[91,20018,2378],{"emptyLinePlaceholder":17},[91,20020,20021],{"class":93,"line":2588},[91,20022,20023],{"class":160},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[91,20025,20026],{"class":93,"line":2594},[91,20027,20028],{"class":160},"\u002F\u002F相当于Person p1 = p;\n",[91,20030,20031,20033,20035,20037,20039,20042],{"class":93,"line":2599},[91,20032,5343],{"class":97},[91,20034,19465],{"class":1941},[91,20036,102],{"class":101},[91,20038,19025],{"class":1941},[91,20040,20041],{"class":5195}," p1",[91,20043,20044],{"class":101},") {}\n",[91,20046,20047,20049,20051],{"class":93,"line":7927},[91,20048,5343],{"class":97},[91,20050,5636],{"class":1941},[91,20052,10832],{"class":101},[91,20054,20055,20057],{"class":93,"line":7951},[91,20056,18583],{"class":101},[91,20058,20059],{"class":160}," \u002F\u002F无参构造函数\n",[91,20061,20062,20064],{"class":93,"line":7956},[91,20063,19515],{"class":1941},[91,20065,19518],{"class":101},[91,20067,20068],{"class":93,"line":7962},[91,20069,1543],{"class":101},[91,20071,20072],{"class":93,"line":7989},[91,20073,2378],{"emptyLinePlaceholder":17},[91,20075,20076],{"class":93,"line":7994},[91,20077,20078],{"class":160},"\u002F\u002F3. 以值方式返回局部对象\n",[91,20080,20081,20083,20085],{"class":93,"line":8000},[91,20082,19025],{"class":1941},[91,20084,19534],{"class":1941},[91,20086,1954],{"class":101},[91,20088,20089],{"class":93,"line":8012},[91,20090,1524],{"class":101},[91,20092,20093],{"class":93,"line":8024},[91,20094,19015],{"class":101},[91,20096,20097,20099,20101,20103,20105,20107,20109,20111,20114,20116],{"class":93,"line":8036},[91,20098,6508],{"class":101},[91,20100,1146],{"class":97},[91,20102,1636],{"class":101},[91,20104,105],{"class":97},[91,20106,6497],{"class":97},[91,20108,531],{"class":101},[91,20110,455],{"class":97},[91,20112,20113],{"class":101},"p1 ",[91,20115,1146],{"class":97},[91,20117,8819],{"class":101},[91,20119,20120,20122],{"class":93,"line":9695},[91,20121,4068],{"class":97},[91,20123,20124],{"class":101}," p1;\n",[91,20126,20127],{"class":93,"line":9720},[91,20128,1543],{"class":101},[91,20130,20131],{"class":93,"line":9743},[91,20132,2378],{"emptyLinePlaceholder":17},[91,20134,20135,20137,20139],{"class":93,"line":9767},[91,20136,5343],{"class":97},[91,20138,5708],{"class":1941},[91,20140,1954],{"class":101},[91,20142,20143],{"class":93,"line":9772},[91,20144,1524],{"class":101},[91,20146,20147,20149,20151,20153],{"class":93,"line":9777},[91,20148,19600],{"class":101},[91,20150,147],{"class":97},[91,20152,19534],{"class":1941},[91,20154,5615],{"class":101},[91,20156,20157,20159,20161,20163,20165,20167,20169,20171,20173,20175],{"class":93,"line":9782},[91,20158,6508],{"class":101},[91,20160,1146],{"class":97},[91,20162,1636],{"class":101},[91,20164,105],{"class":97},[91,20166,6497],{"class":97},[91,20168,531],{"class":101},[91,20170,455],{"class":97},[91,20172,11427],{"class":101},[91,20174,1146],{"class":97},[91,20176,8819],{"class":101},[91,20178,20179],{"class":93,"line":9791},[91,20180,1543],{"class":101},[91,20182,20183],{"class":93,"line":9796},[91,20184,2378],{"emptyLinePlaceholder":17},[91,20186,20187],{"class":93,"line":9802},[91,20188,2378],{"emptyLinePlaceholder":17},[91,20190,20191,20193,20195],{"class":93,"line":9823},[91,20192,105],{"class":97},[91,20194,1951],{"class":1941},[91,20196,10832],{"class":101},[91,20198,20199],{"class":93,"line":9829},[91,20200,2378],{"emptyLinePlaceholder":17},[91,20202,20203],{"class":93,"line":9843},[91,20204,20205],{"class":160},"    \u002F\u002Ftest01();\n",[91,20207,20208],{"class":93,"line":9849},[91,20209,20210],{"class":160},"    \u002F\u002Ftest02();\n",[91,20212,20213,20215],{"class":93,"line":9876},[91,20214,19670],{"class":1941},[91,20216,5615],{"class":101},[91,20218,20219],{"class":93,"line":9885},[91,20220,2378],{"emptyLinePlaceholder":17},[91,20222,20223,20225,20227,20229],{"class":93,"line":9891},[91,20224,2281],{"class":1941},[91,20226,102],{"class":101},[91,20228,2286],{"class":206},[91,20230,2697],{"class":101},[91,20232,20233],{"class":93,"line":9899},[91,20234,2378],{"emptyLinePlaceholder":17},[91,20236,20237,20239,20241],{"class":93,"line":9904},[91,20238,4068],{"class":97},[91,20240,4071],{"class":150},[91,20242,1268],{"class":101},[91,20244,20245],{"class":93,"line":16583},[91,20246,1543],{"class":101},[63,20248,20250],{"id":20249},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[38,20252,20253],{},"默认情况下，c++编译器至少给一个类添加3个函数",[38,20255,20256],{},"1．默认构造函数(无参，函数体为空)",[38,20258,20259],{},"2．默认析构函数(无参，函数体为空)",[38,20261,20262],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[38,20264,20265],{},"构造函数调用规则如下：",[1109,20267,20268,20271],{},[49,20269,20270],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[49,20272,20273],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[83,20275,20277],{"className":85,"code":20276,"language":5,"meta":10,"style":10},"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",[88,20278,20279,20287,20291,20296,20302,20314,20318,20323,20335,20344,20356,20360,20364,20380,20389,20401,20405,20409,20415,20427,20431,20435,20441,20445,20449,20457,20461,20473,20478,20486,20490,20508,20512,20516,20524,20528,20533,20541,20556,20569,20573,20578,20585,20601,20614,20618,20622,20630,20634,20640,20644,20654,20658,20666],{"__ignoreMap":10},[91,20280,20281,20283,20285],{"class":93,"line":94},[91,20282,14673],{"class":97},[91,20284,15548],{"class":1941},[91,20286,15551],{"class":101},[91,20288,20289],{"class":93,"line":11},[91,20290,14695],{"class":97},[91,20292,20293],{"class":93,"line":1157},[91,20294,20295],{"class":160},"    \u002F\u002F无参（默认）构造函数\n",[91,20297,20298,20300],{"class":93,"line":1172},[91,20299,18498],{"class":1941},[91,20301,10832],{"class":101},[91,20303,20304,20306,20308,20310,20312],{"class":93,"line":1178},[91,20305,9648],{"class":101},[91,20307,1146],{"class":97},[91,20309,19789],{"class":206},[91,20311,1422],{"class":97},[91,20313,8819],{"class":101},[91,20315,20316],{"class":93,"line":1192},[91,20317,2165],{"class":101},[91,20319,20320],{"class":93,"line":1198},[91,20321,20322],{"class":160},"    \u002F\u002F有参构造函数\n",[91,20324,20325,20327,20329,20331,20333],{"class":93,"line":1289},[91,20326,18498],{"class":1941},[91,20328,102],{"class":101},[91,20330,105],{"class":97},[91,20332,1376],{"class":5195},[91,20334,12421],{"class":101},[91,20336,20337,20340,20342],{"class":93,"line":1295},[91,20338,20339],{"class":101},"        age ",[91,20341,147],{"class":97},[91,20343,1410],{"class":101},[91,20345,20346,20348,20350,20352,20354],{"class":93,"line":1307},[91,20347,9648],{"class":101},[91,20349,1146],{"class":97},[91,20351,19829],{"class":206},[91,20353,1422],{"class":97},[91,20355,8819],{"class":101},[91,20357,20358],{"class":93,"line":1590},[91,20359,2165],{"class":101},[91,20361,20362],{"class":93,"line":1595},[91,20363,18853],{"class":160},[91,20365,20366,20368,20370,20372,20374,20376,20378],{"class":93,"line":1601},[91,20367,18498],{"class":1941},[91,20369,102],{"class":101},[91,20371,6771],{"class":97},[91,20373,15548],{"class":1941},[91,20375,455],{"class":97},[91,20377,6804],{"class":5195},[91,20379,12421],{"class":101},[91,20381,20382,20384,20386],{"class":93,"line":1606},[91,20383,20339],{"class":101},[91,20385,147],{"class":97},[91,20387,20388],{"class":101}," p.age;\n",[91,20390,20391,20393,20395,20397,20399],{"class":93,"line":1620},[91,20392,9648],{"class":101},[91,20394,1146],{"class":97},[91,20396,19870],{"class":206},[91,20398,1422],{"class":97},[91,20400,8819],{"class":101},[91,20402,20403],{"class":93,"line":1625},[91,20404,2165],{"class":101},[91,20406,20407],{"class":93,"line":1631},[91,20408,18526],{"class":160},[91,20410,20411,20413],{"class":93,"line":1652},[91,20412,18531],{"class":1941},[91,20414,10832],{"class":101},[91,20416,20417,20419,20421,20423,20425],{"class":93,"line":1657},[91,20418,9648],{"class":101},[91,20420,1146],{"class":97},[91,20422,19907],{"class":206},[91,20424,1422],{"class":97},[91,20426,8819],{"class":101},[91,20428,20429],{"class":93,"line":1671},[91,20430,2165],{"class":101},[91,20432,20433],{"class":93,"line":1676},[91,20434,14695],{"class":97},[91,20436,20437,20439],{"class":93,"line":1705},[91,20438,1963],{"class":97},[91,20440,7776],{"class":101},[91,20442,20443],{"class":93,"line":1710},[91,20444,3973],{"class":101},[91,20446,20447],{"class":93,"line":1727},[91,20448,2378],{"emptyLinePlaceholder":17},[91,20450,20451,20453,20455],{"class":93,"line":1732},[91,20452,5343],{"class":97},[91,20454,5567],{"class":1941},[91,20456,1954],{"class":101},[91,20458,20459],{"class":93,"line":1737},[91,20460,1524],{"class":101},[91,20462,20463,20465,20467,20469,20471],{"class":93,"line":1742},[91,20464,19410],{"class":101},[91,20466,7109],{"class":1941},[91,20468,102],{"class":101},[91,20470,752],{"class":150},[91,20472,2697],{"class":101},[91,20474,20475],{"class":93,"line":1756},[91,20476,20477],{"class":160},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[91,20479,20480,20482,20484],{"class":93,"line":1761},[91,20481,19410],{"class":101},[91,20483,7012],{"class":1941},[91,20485,17494],{"class":101},[91,20487,20488],{"class":93,"line":2555},[91,20489,2378],{"emptyLinePlaceholder":17},[91,20491,20492,20494,20496,20499,20501,20504,20506],{"class":93,"line":2569},[91,20493,6508],{"class":101},[91,20495,1146],{"class":97},[91,20497,20498],{"class":206}," \"p2的年龄为： \"",[91,20500,1422],{"class":97},[91,20502,20503],{"class":101}," p2.age ",[91,20505,1146],{"class":97},[91,20507,8819],{"class":101},[91,20509,20510],{"class":93,"line":2577},[91,20511,1543],{"class":101},[91,20513,20514],{"class":93,"line":2582},[91,20515,2378],{"emptyLinePlaceholder":17},[91,20517,20518,20520,20522],{"class":93,"line":2588},[91,20519,5343],{"class":97},[91,20521,5636],{"class":1941},[91,20523,1954],{"class":101},[91,20525,20526],{"class":93,"line":2594},[91,20527,1524],{"class":101},[91,20529,20530],{"class":93,"line":2599},[91,20531,20532],{"class":160},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[91,20534,20535,20538],{"class":93,"line":7927},[91,20536,20537],{"class":101},"    Person p1;",[91,20539,20540],{"class":160}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[91,20542,20543,20545,20547,20549,20551,20553],{"class":93,"line":7951},[91,20544,19410],{"class":101},[91,20546,7012],{"class":1941},[91,20548,102],{"class":101},[91,20550,548],{"class":150},[91,20552,5945],{"class":101},[91,20554,20555],{"class":160}," \u002F\u002F用户提供的有参\n",[91,20557,20558,20560,20563,20566],{"class":93,"line":7956},[91,20559,19410],{"class":101},[91,20561,20562],{"class":1941},"p3",[91,20564,20565],{"class":101},"(p2);",[91,20567,20568],{"class":160}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[91,20570,20571],{"class":93,"line":7962},[91,20572,2378],{"emptyLinePlaceholder":17},[91,20574,20575],{"class":93,"line":7989},[91,20576,20577],{"class":160},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[91,20579,20580,20583],{"class":93,"line":7994},[91,20581,20582],{"class":101},"    Person p4;",[91,20584,20540],{"class":160},[91,20586,20587,20589,20592,20594,20596,20598],{"class":93,"line":8000},[91,20588,19410],{"class":101},[91,20590,20591],{"class":1941},"p5",[91,20593,102],{"class":101},[91,20595,548],{"class":150},[91,20597,5945],{"class":101},[91,20599,20600],{"class":160}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[91,20602,20603,20605,20608,20611],{"class":93,"line":8012},[91,20604,19410],{"class":101},[91,20606,20607],{"class":1941},"p6",[91,20609,20610],{"class":101},"(p5);",[91,20612,20613],{"class":160}," \u002F\u002F用户自己提供拷贝构造\n",[91,20615,20616],{"class":93,"line":8024},[91,20617,1543],{"class":101},[91,20619,20620],{"class":93,"line":8036},[91,20621,2378],{"emptyLinePlaceholder":17},[91,20623,20624,20626,20628],{"class":93,"line":9695},[91,20625,105],{"class":97},[91,20627,1951],{"class":1941},[91,20629,10832],{"class":101},[91,20631,20632],{"class":93,"line":9720},[91,20633,2378],{"emptyLinePlaceholder":17},[91,20635,20636,20638],{"class":93,"line":9743},[91,20637,5612],{"class":1941},[91,20639,5615],{"class":101},[91,20641,20642],{"class":93,"line":9767},[91,20643,2378],{"emptyLinePlaceholder":17},[91,20645,20646,20648,20650,20652],{"class":93,"line":9772},[91,20647,2281],{"class":1941},[91,20649,102],{"class":101},[91,20651,2286],{"class":206},[91,20653,2697],{"class":101},[91,20655,20656],{"class":93,"line":9777},[91,20657,2378],{"emptyLinePlaceholder":17},[91,20659,20660,20662,20664],{"class":93,"line":9782},[91,20661,4068],{"class":97},[91,20663,4071],{"class":150},[91,20665,1268],{"class":101},[91,20667,20668],{"class":93,"line":9791},[91,20669,1543],{"class":101},[63,20671,20673],{"id":20672},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[38,20675,20676],{},"浅拷贝：简单的赋值拷贝操作",[38,20678,20679],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[83,20681,20683],{"className":85,"code":20682,"language":5,"meta":10,"style":10},"#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",[88,20684,20685,20691,20701,20707,20711,20715,20720,20726,20730,20743,20747,20751,20758,20762,20772,20787,20800,20804,20809,20814,20830,20834,20847,20852,20857,20862,20871,20876,20891,20895,20899,20903,20909,20913,20918,20933,20937,20948,20962,20966,20975,20979,20985,20997,21001,21009,21013,21030,21061,21069,21097,21101,21105,21113,21117,21123],{"__ignoreMap":10},[91,20686,20687,20689],{"class":93,"line":94},[91,20688,1927],{"class":97},[91,20690,1930],{"class":206},[91,20692,20693,20695,20697,20699],{"class":93,"line":11},[91,20694,1935],{"class":97},[91,20696,1938],{"class":97},[91,20698,1942],{"class":1941},[91,20700,1268],{"class":101},[91,20702,20703,20705],{"class":93,"line":1157},[91,20704,14673],{"class":97},[91,20706,15150],{"class":1941},[91,20708,20709],{"class":93,"line":1172},[91,20710,1524],{"class":101},[91,20712,20713],{"class":93,"line":1178},[91,20714,14695],{"class":97},[91,20716,20717],{"class":93,"line":1192},[91,20718,20719],{"class":160},"    \u002F\u002F默认构造函数\n",[91,20721,20722,20724],{"class":93,"line":1198},[91,20723,18498],{"class":1941},[91,20725,1954],{"class":101},[91,20727,20728],{"class":93,"line":1289},[91,20729,2008],{"class":101},[91,20731,20732,20734,20736,20739,20741],{"class":93,"line":1295},[91,20733,3429],{"class":101},[91,20735,1146],{"class":97},[91,20737,20738],{"class":206},"\"默认构造函数\"",[91,20740,1146],{"class":97},[91,20742,1169],{"class":101},[91,20744,20745],{"class":93,"line":1307},[91,20746,2165],{"class":101},[91,20748,20749],{"class":93,"line":1590},[91,20750,20322],{"class":160},[91,20752,20753,20755],{"class":93,"line":1595},[91,20754,18531],{"class":1941},[91,20756,20757],{"class":101},"(int age,int height)\n",[91,20759,20760],{"class":93,"line":1601},[91,20761,2008],{"class":101},[91,20763,20764,20767,20769],{"class":93,"line":1606},[91,20765,20766],{"class":101},"        m_Age",[91,20768,147],{"class":97},[91,20770,20771],{"class":101},"age;\n",[91,20773,20774,20777,20779,20781,20784],{"class":93,"line":1620},[91,20775,20776],{"class":101},"        m_Height",[91,20778,11696],{"class":97},[91,20780,2360],{"class":97},[91,20782,20783],{"class":101},"(height);",[91,20785,20786],{"class":160},"\u002F\u002F放到堆区\n",[91,20788,20789,20791,20793,20796,20798],{"class":93,"line":1625},[91,20790,3429],{"class":101},[91,20792,1146],{"class":97},[91,20794,20795],{"class":206},"\"有参构造函数\"",[91,20797,1146],{"class":97},[91,20799,1169],{"class":101},[91,20801,20802],{"class":93,"line":1631},[91,20803,2165],{"class":101},[91,20805,20806],{"class":93,"line":1652},[91,20807,20808],{"class":160},"    \u002F\u002F深拷贝解决上述问题\n",[91,20810,20811],{"class":93,"line":1657},[91,20812,20813],{"class":160},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[91,20815,20816,20818,20820,20822,20824,20826,20828],{"class":93,"line":1671},[91,20817,18498],{"class":1941},[91,20819,102],{"class":101},[91,20821,6771],{"class":97},[91,20823,15548],{"class":1941},[91,20825,10563],{"class":97},[91,20827,38],{"class":5195},[91,20829,108],{"class":101},[91,20831,20832],{"class":93,"line":1676},[91,20833,2008],{"class":101},[91,20835,20836,20838,20840,20843,20845],{"class":93,"line":1705},[91,20837,3429],{"class":101},[91,20839,1146],{"class":97},[91,20841,20842],{"class":206},"\"拷贝构造函数\"",[91,20844,1146],{"class":97},[91,20846,1169],{"class":101},[91,20848,20849],{"class":93,"line":1710},[91,20850,20851],{"class":160},"        \u002F\u002F编译器默认的写如下注释部分\n",[91,20853,20854],{"class":93,"line":1727},[91,20855,20856],{"class":160},"        \u002F\u002Fm_Age=p.m_Age;\n",[91,20858,20859],{"class":93,"line":1732},[91,20860,20861],{"class":160},"        \u002F\u002Fm_Height=p.m_Height;\n",[91,20863,20864,20866,20868],{"class":93,"line":1737},[91,20865,20766],{"class":101},[91,20867,147],{"class":97},[91,20869,20870],{"class":101},"p.m_Age;\n",[91,20872,20873],{"class":93,"line":1742},[91,20874,20875],{"class":160},"        \u002F\u002F深拷贝操作\n",[91,20877,20878,20880,20882,20884,20886,20888],{"class":93,"line":1756},[91,20879,20776],{"class":101},[91,20881,11696],{"class":97},[91,20883,2360],{"class":97},[91,20885,102],{"class":101},[91,20887,557],{"class":97},[91,20889,20890],{"class":101},"p.m_Height);\n",[91,20892,20893],{"class":93,"line":1761},[91,20894,2165],{"class":101},[91,20896,20897],{"class":93,"line":2555},[91,20898,2378],{"emptyLinePlaceholder":17},[91,20900,20901],{"class":93,"line":2569},[91,20902,18526],{"class":160},[91,20904,20905,20907],{"class":93,"line":2577},[91,20906,18531],{"class":1941},[91,20908,1954],{"class":101},[91,20910,20911],{"class":93,"line":2582},[91,20912,2008],{"class":101},[91,20914,20915],{"class":93,"line":2588},[91,20916,20917],{"class":160},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[91,20919,20920,20922,20925,20928,20931],{"class":93,"line":2594},[91,20921,2475],{"class":97},[91,20923,20924],{"class":101},"(m_Height ",[91,20926,20927],{"class":97},"!=",[91,20929,20930],{"class":150}," NULL",[91,20932,108],{"class":101},[91,20934,20935],{"class":93,"line":2599},[91,20936,2488],{"class":101},[91,20938,20939,20942,20945],{"class":93,"line":7927},[91,20940,20941],{"class":97},"            delete",[91,20943,20944],{"class":101}," m_Height;",[91,20946,20947],{"class":160}," \u002F\u002F释放堆区内存\n",[91,20949,20950,20953,20955,20957,20959],{"class":93,"line":7951},[91,20951,20952],{"class":101},"            m_Height",[91,20954,147],{"class":97},[91,20956,2370],{"class":150},[91,20958,157],{"class":101},[91,20960,20961],{"class":160}," \u002F\u002F防止野指针\n",[91,20963,20964],{"class":93,"line":7956},[91,20965,2507],{"class":101},[91,20967,20968,20970,20972],{"class":93,"line":7962},[91,20969,3429],{"class":101},[91,20971,1146],{"class":97},[91,20973,20974],{"class":206},"\"Person的析构函数调用\"\n",[91,20976,20977],{"class":93,"line":7989},[91,20978,2165],{"class":101},[91,20980,20981,20983],{"class":93,"line":7994},[91,20982,1963],{"class":97},[91,20984,15645],{"class":101},[91,20986,20987,20989,20991,20994],{"class":93,"line":8000},[91,20988,1963],{"class":97},[91,20990,6497],{"class":97},[91,20992,20993],{"class":101},"m_Height;",[91,20995,20996],{"class":160}," \u002F\u002F定义一个指针，指向身高\n",[91,20998,20999],{"class":93,"line":8012},[91,21000,3973],{"class":101},[91,21002,21003,21005,21007],{"class":93,"line":8024},[91,21004,5343],{"class":97},[91,21006,5567],{"class":1941},[91,21008,1954],{"class":101},[91,21010,21011],{"class":93,"line":8036},[91,21012,1524],{"class":101},[91,21014,21015,21017,21019,21021,21023,21025,21028],{"class":93,"line":9695},[91,21016,19410],{"class":101},[91,21018,7109],{"class":1941},[91,21020,102],{"class":101},[91,21022,752],{"class":150},[91,21024,480],{"class":101},[91,21026,21027],{"class":150},"160",[91,21029,2697],{"class":101},[91,21031,21032,21034,21036,21039,21041,21044,21046,21049,21051,21054,21056,21058],{"class":93,"line":9720},[91,21033,1529],{"class":101},[91,21035,1146],{"class":97},[91,21037,21038],{"class":206},"\"p1的年龄为:\"",[91,21040,1146],{"class":97},[91,21042,21043],{"class":101},"p1.m_Age",[91,21045,1146],{"class":97},[91,21047,21048],{"class":206},"\"身高为：\"",[91,21050,6398],{"class":97},[91,21052,21053],{"class":101},"p1.m_Height",[91,21055,1146],{"class":97},[91,21057,1216],{"class":101},[91,21059,21060],{"class":160},"  \u002F\u002F18\n",[91,21062,21063,21065,21067],{"class":93,"line":9743},[91,21064,19410],{"class":101},[91,21066,7012],{"class":1941},[91,21068,17494],{"class":101},[91,21070,21071,21073,21075,21078,21080,21082,21084,21086,21088,21091,21093,21095],{"class":93,"line":9767},[91,21072,1529],{"class":101},[91,21074,1146],{"class":97},[91,21076,21077],{"class":206},"\"p2的年龄为：\"",[91,21079,1146],{"class":97},[91,21081,19440],{"class":101},[91,21083,1146],{"class":97},[91,21085,21048],{"class":206},[91,21087,6398],{"class":97},[91,21089,21090],{"class":101},"p2.m_Height",[91,21092,1146],{"class":97},[91,21094,1216],{"class":101},[91,21096,21060],{"class":160},[91,21098,21099],{"class":93,"line":9772},[91,21100,13189],{"class":101},[91,21102,21103],{"class":93,"line":9777},[91,21104,1543],{"class":101},[91,21106,21107,21109,21111],{"class":93,"line":9782},[91,21108,105],{"class":97},[91,21110,1951],{"class":1941},[91,21112,1954],{"class":101},[91,21114,21115],{"class":93,"line":9791},[91,21116,1524],{"class":101},[91,21118,21119,21121],{"class":93,"line":9796},[91,21120,5612],{"class":1941},[91,21122,5615],{"class":101},[91,21124,21125],{"class":93,"line":9802},[91,21126,1543],{"class":101},[38,21128,21129],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[38,21131,21132],{},"浅拷贝带来的问题是堆区的内存重复释放",[38,21134,21135],{},[1440,21136],{"alt":10,"src":21137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[38,21139,21140],{},"浅拷贝问题要使用深拷贝来解决",[38,21142,21143],{},[1440,21144],{"alt":10,"src":21145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[38,21147,21148],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[63,21150,21152],{"id":21151},"_826初始化列表","8.2.6初始化列表",[38,21154,21155],{},"作用：初始化属性",[38,21157,5160],{},[83,21159,21162],{"className":21160,"code":21161,"language":5166},[5164],"构造函数():属性1(值1),属性2(值2).....{}\n",[88,21163,21161],{"__ignoreMap":10},[38,21165,21166],{},"例子",[83,21168,21170],{"className":85,"code":21169,"language":5,"meta":10,"style":10},"#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",[88,21171,21172,21178,21188,21194,21198,21203,21207,21212,21217,21222,21227,21232,21237,21241,21246,21251,21294,21303,21321,21339,21357,21361,21365,21372,21379,21386,21390,21394,21402,21406,21410,21430,21439,21443,21447,21457,21461,21469],{"__ignoreMap":10},[91,21173,21174,21176],{"class":93,"line":94},[91,21175,1927],{"class":97},[91,21177,1930],{"class":206},[91,21179,21180,21182,21184,21186],{"class":93,"line":11},[91,21181,1935],{"class":97},[91,21183,1938],{"class":97},[91,21185,1942],{"class":1941},[91,21187,1268],{"class":101},[91,21189,21190,21192],{"class":93,"line":1157},[91,21191,14673],{"class":97},[91,21193,15150],{"class":1941},[91,21195,21196],{"class":93,"line":1172},[91,21197,1524],{"class":101},[91,21199,21200],{"class":93,"line":1178},[91,21201,21202],{"class":97},"    public:\n",[91,21204,21205],{"class":93,"line":1192},[91,21206,2378],{"emptyLinePlaceholder":17},[91,21208,21209],{"class":93,"line":1198},[91,21210,21211],{"class":160},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[91,21213,21214],{"class":93,"line":1289},[91,21215,21216],{"class":160},"    \u002F\u002FPerson(int a, int b, int c) {\n",[91,21218,21219],{"class":93,"line":1295},[91,21220,21221],{"class":160},"    \u002F\u002F  m_A = a;\n",[91,21223,21224],{"class":93,"line":1307},[91,21225,21226],{"class":160},"    \u002F\u002F  m_B = b;\n",[91,21228,21229],{"class":93,"line":1590},[91,21230,21231],{"class":160},"    \u002F\u002F  m_C = c;\n",[91,21233,21234],{"class":93,"line":1595},[91,21235,21236],{"class":160},"    \u002F\u002F}\n",[91,21238,21239],{"class":93,"line":1601},[91,21240,2378],{"emptyLinePlaceholder":17},[91,21242,21243],{"class":93,"line":1606},[91,21244,21245],{"class":160},"    \u002F\u002F初始化列表方式初始化\n",[91,21247,21248],{"class":93,"line":1620},[91,21249,21250],{"class":160},"    \u002F\u002F使用有参构造函数\n",[91,21252,21253,21255,21257,21259,21261,21263,21265,21267,21269,21271,21273,21276,21279,21282,21285,21288,21291],{"class":93,"line":1625},[91,21254,18498],{"class":1941},[91,21256,102],{"class":101},[91,21258,105],{"class":97},[91,21260,1376],{"class":5195},[91,21262,12414],{"class":101},[91,21264,105],{"class":97},[91,21266,2811],{"class":5195},[91,21268,12414],{"class":101},[91,21270,105],{"class":97},[91,21272,2827],{"class":5195},[91,21274,21275],{"class":101},") :",[91,21277,21278],{"class":1941},"m_A",[91,21280,21281],{"class":101},"(a), ",[91,21283,21284],{"class":1941},"m_B",[91,21286,21287],{"class":101},"(b), ",[91,21289,21290],{"class":1941},"m_C",[91,21292,21293],{"class":101},"(c) {}\n",[91,21295,21296,21298,21301],{"class":93,"line":1631},[91,21297,14888],{"class":97},[91,21299,21300],{"class":1941}," PrintPerson",[91,21302,10832],{"class":101},[91,21304,21305,21307,21309,21312,21314,21317,21319],{"class":93,"line":1652},[91,21306,9648],{"class":101},[91,21308,1146],{"class":97},[91,21310,21311],{"class":206}," \"mA:\"",[91,21313,1422],{"class":97},[91,21315,21316],{"class":101}," m_A ",[91,21318,1146],{"class":97},[91,21320,8819],{"class":101},[91,21322,21323,21325,21327,21330,21332,21335,21337],{"class":93,"line":1657},[91,21324,9648],{"class":101},[91,21326,1146],{"class":97},[91,21328,21329],{"class":206}," \"mB:\"",[91,21331,1422],{"class":97},[91,21333,21334],{"class":101}," m_B ",[91,21336,1146],{"class":97},[91,21338,8819],{"class":101},[91,21340,21341,21343,21345,21348,21350,21353,21355],{"class":93,"line":1671},[91,21342,9648],{"class":101},[91,21344,1146],{"class":97},[91,21346,21347],{"class":206}," \"mC:\"",[91,21349,1422],{"class":97},[91,21351,21352],{"class":101}," m_C ",[91,21354,1146],{"class":97},[91,21356,8819],{"class":101},[91,21358,21359],{"class":93,"line":1676},[91,21360,2165],{"class":101},[91,21362,21363],{"class":93,"line":1705},[91,21364,15201],{"class":97},[91,21366,21367,21369],{"class":93,"line":1710},[91,21368,1963],{"class":97},[91,21370,21371],{"class":101}," m_A;\n",[91,21373,21374,21376],{"class":93,"line":1727},[91,21375,1963],{"class":97},[91,21377,21378],{"class":101}," m_B;\n",[91,21380,21381,21383],{"class":93,"line":1732},[91,21382,1963],{"class":97},[91,21384,21385],{"class":101}," m_C;\n",[91,21387,21388],{"class":93,"line":1737},[91,21389,3973],{"class":101},[91,21391,21392],{"class":93,"line":1742},[91,21393,2378],{"emptyLinePlaceholder":17},[91,21395,21396,21398,21400],{"class":93,"line":1756},[91,21397,105],{"class":97},[91,21399,1951],{"class":1941},[91,21401,5957],{"class":101},[91,21403,21404],{"class":93,"line":1761},[91,21405,1524],{"class":101},[91,21407,21408],{"class":93,"line":2555},[91,21409,2378],{"emptyLinePlaceholder":17},[91,21411,21412,21414,21416,21418,21420,21422,21424,21426,21428],{"class":93,"line":2569},[91,21413,19410],{"class":101},[91,21415,38],{"class":1941},[91,21417,102],{"class":101},[91,21419,319],{"class":150},[91,21421,12414],{"class":101},[91,21423,179],{"class":150},[91,21425,12414],{"class":101},[91,21427,173],{"class":150},[91,21429,2697],{"class":101},[91,21431,21432,21434,21437],{"class":93,"line":2577},[91,21433,15845],{"class":101},[91,21435,21436],{"class":1941},"PrintPerson",[91,21438,5615],{"class":101},[91,21440,21441],{"class":93,"line":2582},[91,21442,2378],{"emptyLinePlaceholder":17},[91,21444,21445],{"class":93,"line":2588},[91,21446,2378],{"emptyLinePlaceholder":17},[91,21448,21449,21451,21453,21455],{"class":93,"line":2594},[91,21450,2281],{"class":1941},[91,21452,102],{"class":101},[91,21454,2286],{"class":206},[91,21456,2697],{"class":101},[91,21458,21459],{"class":93,"line":2599},[91,21460,2378],{"emptyLinePlaceholder":17},[91,21462,21463,21465,21467],{"class":93,"line":7927},[91,21464,4068],{"class":97},[91,21466,4071],{"class":150},[91,21468,1268],{"class":101},[91,21470,21471],{"class":93,"line":7951},[91,21472,1543],{"class":101},[38,21474,21475,21476,21479,21480],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[251,21477,21478],{},"参数名就是定义的对象属性","，",[251,21481,21482],{},"属性后面的值为有参构造函数的形参",[83,21484,21486],{"className":85,"code":21485,"language":5,"meta":10,"style":10},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[88,21487,21488],{"__ignoreMap":10},[91,21489,21490,21492,21494,21496,21499,21501,21504,21506,21509,21511,21514,21516,21519,21521],{"class":93,"line":94},[91,21491,19025],{"class":1941},[91,21493,102],{"class":101},[91,21495,105],{"class":97},[91,21497,21498],{"class":101}," a.",[91,21500,105],{"class":97},[91,21502,21503],{"class":101}," b,",[91,21505,105],{"class":97},[91,21507,21508],{"class":101}," b):",[91,21510,21278],{"class":1941},[91,21512,21513],{"class":101},"(a),",[91,21515,21284],{"class":1941},[91,21517,21518],{"class":101},"(c),",[91,21520,21290],{"class":1941},[91,21522,21523],{"class":101},"(b) {}\n",[63,21525,21527],{"id":21526},"_827类对象作为类成员","8.2.7类对象作为类成员",[38,21529,21530],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[38,21532,14612],{},[83,21534,21536],{"className":85,"code":21535,"language":5,"meta":10,"style":10},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[88,21537,21538,21543,21548,21552,21557,21561],{"__ignoreMap":10},[91,21539,21540],{"class":93,"line":94},[91,21541,21542],{"class":101},"A{};\n",[91,21544,21545],{"class":93,"line":11},[91,21546,21547],{"class":101},"B\n",[91,21549,21550],{"class":93,"line":1157},[91,21551,1524],{"class":101},[91,21553,21554],{"class":93,"line":1172},[91,21555,21556],{"class":101},"    A a;\n",[91,21558,21559],{"class":93,"line":1178},[91,21560,1543],{"class":101},[91,21562,21563],{"class":93,"line":1192},[91,21564,21565],{"class":160},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[38,21567,21568],{},"案例",[83,21570,21572],{"className":85,"code":21571,"language":5,"meta":10,"style":10},"\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",[88,21573,21574,21579,21586,21590,21595,21600,21614,21618,21628,21639,21643,21650,21654,21667,21671,21676,21681,21685,21691,21695,21699,21703,21734,21738,21749,21753,21759,21763,21776,21780,21784,21788,21793,21798,21802,21810,21814,21831,21850,21854,21862,21866,21872],{"__ignoreMap":10},[91,21575,21576],{"class":93,"line":94},[91,21577,21578],{"class":160},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[91,21580,21581,21583],{"class":93,"line":11},[91,21582,14673],{"class":97},[91,21584,21585],{"class":1941}," Phone\n",[91,21587,21588],{"class":93,"line":1157},[91,21589,1524],{"class":101},[91,21591,21592],{"class":93,"line":1172},[91,21593,21594],{"class":101},"public：\n",[91,21596,21597],{"class":93,"line":1178},[91,21598,21599],{"class":160},"    \u002F\u002F 赋值(构造函数)\n",[91,21601,21602,21605,21607,21609,21612],{"class":93,"line":1192},[91,21603,21604],{"class":1941},"    Phone",[91,21606,102],{"class":101},[91,21608,14896],{"class":1941},[91,21610,21611],{"class":5195}," pName",[91,21613,108],{"class":101},[91,21615,21616],{"class":93,"line":1198},[91,21617,2008],{"class":101},[91,21619,21620,21623,21625],{"class":93,"line":1289},[91,21621,21622],{"class":101},"        m_pName",[91,21624,147],{"class":97},[91,21626,21627],{"class":101},"pName;\n",[91,21629,21630,21632,21634,21637],{"class":93,"line":1295},[91,21631,3429],{"class":101},[91,21633,1146],{"class":97},[91,21635,21636],{"class":206},"\"Phone的构造函数调用\"",[91,21638,1268],{"class":101},[91,21640,21641],{"class":93,"line":1307},[91,21642,2165],{"class":101},[91,21644,21645,21648],{"class":93,"line":1590},[91,21646,21647],{"class":1941},"    ~Phone",[91,21649,1954],{"class":101},[91,21651,21652],{"class":93,"line":1595},[91,21653,2008],{"class":101},[91,21655,21656,21658,21660,21663,21665],{"class":93,"line":1601},[91,21657,3429],{"class":101},[91,21659,1146],{"class":97},[91,21661,21662],{"class":206},"\"Phone析构函数调用\"",[91,21664,1146],{"class":97},[91,21666,1169],{"class":101},[91,21668,21669],{"class":93,"line":1606},[91,21670,2165],{"class":101},[91,21672,21673],{"class":93,"line":1620},[91,21674,21675],{"class":160},"    \u002F\u002F\n",[91,21677,21678],{"class":93,"line":1625},[91,21679,21680],{"class":101},"    string m_PName;\n",[91,21682,21683],{"class":93,"line":1631},[91,21684,3973],{"class":101},[91,21686,21687,21689],{"class":93,"line":1652},[91,21688,14673],{"class":97},[91,21690,15150],{"class":1941},[91,21692,21693],{"class":93,"line":1657},[91,21694,1524],{"class":101},[91,21696,21697],{"class":93,"line":1671},[91,21698,14695],{"class":97},[91,21700,21701],{"class":93,"line":1676},[91,21702,16973],{"class":160},[91,21704,21705,21707,21709,21711,21713,21715,21717,21720,21723,21725,21728,21731],{"class":93,"line":1705},[91,21706,18498],{"class":1941},[91,21708,102],{"class":101},[91,21710,14896],{"class":1941},[91,21712,14899],{"class":5195},[91,21714,480],{"class":101},[91,21716,14896],{"class":1941},[91,21718,21719],{"class":5195}," pname",[91,21721,21722],{"class":101},"):",[91,21724,14989],{"class":1941},[91,21726,21727],{"class":101},"(name),m_phone.",[91,21729,21730],{"class":1941},"m_PName",[91,21732,21733],{"class":101},"(pname) \n",[91,21735,21736],{"class":93,"line":1710},[91,21737,2008],{"class":101},[91,21739,21740,21742,21744,21747],{"class":93,"line":1727},[91,21741,3429],{"class":101},[91,21743,1146],{"class":97},[91,21745,21746],{"class":206},"\"Person的构造函数调用\"",[91,21748,1268],{"class":101},[91,21750,21751],{"class":93,"line":1732},[91,21752,2165],{"class":101},[91,21754,21755,21757],{"class":93,"line":1737},[91,21756,18531],{"class":1941},[91,21758,1954],{"class":101},[91,21760,21761],{"class":93,"line":1742},[91,21762,2008],{"class":101},[91,21764,21765,21767,21769,21772,21774],{"class":93,"line":1756},[91,21766,3429],{"class":101},[91,21768,1146],{"class":97},[91,21770,21771],{"class":206},"\"Person析构函数调用\"",[91,21773,1146],{"class":97},[91,21775,1169],{"class":101},[91,21777,21778],{"class":93,"line":1761},[91,21779,2165],{"class":101},[91,21781,21782],{"class":93,"line":2555},[91,21783,7759],{"class":160},[91,21785,21786],{"class":93,"line":2569},[91,21787,14871],{"class":101},[91,21789,21790],{"class":93,"line":2577},[91,21791,21792],{"class":160},"    \u002F\u002F手机\n",[91,21794,21795],{"class":93,"line":2582},[91,21796,21797],{"class":101},"    Phone m_Phone;\n",[91,21799,21800],{"class":93,"line":2588},[91,21801,3973],{"class":101},[91,21803,21804,21806,21808],{"class":93,"line":2594},[91,21805,5343],{"class":97},[91,21807,5567],{"class":1941},[91,21809,1954],{"class":101},[91,21811,21812],{"class":93,"line":2599},[91,21813,1524],{"class":101},[91,21815,21816,21818,21820,21822,21824,21826,21829],{"class":93,"line":7927},[91,21817,19410],{"class":101},[91,21819,38],{"class":1941},[91,21821,102],{"class":101},[91,21823,7895],{"class":206},[91,21825,480],{"class":101},[91,21827,21828],{"class":206},"\"安卓\"",[91,21830,2697],{"class":101},[91,21832,21833,21835,21837,21840,21842,21845,21847],{"class":93,"line":7951},[91,21834,1529],{"class":101},[91,21836,1146],{"class":97},[91,21838,21839],{"class":101},"p.Name",[91,21841,1146],{"class":97},[91,21843,21844],{"class":206},"\"拿着：\"",[91,21846,1146],{"class":97},[91,21848,21849],{"class":101},"p.m_phone.m_PName;\n",[91,21851,21852],{"class":93,"line":7956},[91,21853,1543],{"class":101},[91,21855,21856,21858,21860],{"class":93,"line":7962},[91,21857,105],{"class":97},[91,21859,1951],{"class":1941},[91,21861,1954],{"class":101},[91,21863,21864],{"class":93,"line":7989},[91,21865,1524],{"class":101},[91,21867,21868,21870],{"class":93,"line":7994},[91,21869,5612],{"class":1941},[91,21871,5615],{"class":101},[91,21873,21874],{"class":93,"line":8000},[91,21875,1543],{"class":101},[38,21877,9004],{},[83,21879,21881],{"className":85,"code":21880,"language":5,"meta":10,"style":10},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[88,21882,21883,21888],{"__ignoreMap":10},[91,21884,21885],{"class":93,"line":94},[91,21886,21887],{"class":160},"    \u002F\u002F不需要写这个：\n",[91,21889,21890],{"class":93,"line":11},[91,21891,21892],{"class":160},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[38,21894,21895],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[83,21897,21899],{"className":85,"code":21898,"language":5,"meta":10,"style":10},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[88,21900,21901],{"__ignoreMap":10},[91,21902,21903,21905,21908,21910,21913,21916],{"class":93,"line":94},[91,21904,19025],{"class":1941},[91,21906,21907],{"class":101},"(string name.string pname):",[91,21909,14989],{"class":1941},[91,21911,21912],{"class":101},"(name),",[91,21914,21915],{"class":1941},"m_phone",[91,21917,21918],{"class":101},"(pname) {}\n",[38,21920,21921,21922,147,21925],{},"采用的是隐式转换法，实际为如下：\n",[88,21923,21924],{},"m_phone(pname)",[88,21926,21927],{},"Phone m_phone=pname",[38,21929,21930,21933],{},[251,21931,21932],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[38,21935,21936],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[63,21938,21940],{"id":21939},"_828静态对象","8.2.8静态对象",[38,21942,21943],{},"静态对象在成员对象前static，称为静态对象",[38,21945,21946],{},"静态对象分为两类：",[46,21948,21949],{},[49,21950,21951],{},"静态成员变量",[1109,21953,21954,21957,21960],{},[49,21955,21956],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[49,21958,21959],{},"②在编译阶段分配内存",[49,21961,21962],{},"③类内声明，类外初始化",[46,21964,21965],{"start":11},[49,21966,21967],{},"静态成员函数",[1109,21969,21970,21973],{},[49,21971,21972],{},"①所有对象共享同一个函数",[49,21974,21975],{},"②静态成员函数只能访问静态成员变量",[21977,21978,21980],"h4",{"id":21979},"_8281静态成员变量","8.2.8.1静态成员变量",[83,21982,21984],{"className":85,"code":21983,"language":5,"meta":10,"style":10},"#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",[88,21985,21986,21992,22002,22008,22012,22016,22021,22026,22031,22039,22043,22047,22051,22059,22063,22067,22072,22085,22089,22097,22101,22107],{"__ignoreMap":10},[91,21987,21988,21990],{"class":93,"line":94},[91,21989,1927],{"class":97},[91,21991,1930],{"class":206},[91,21993,21994,21996,21998,22000],{"class":93,"line":11},[91,21995,1935],{"class":97},[91,21997,1938],{"class":97},[91,21999,1942],{"class":1941},[91,22001,1268],{"class":101},[91,22003,22004,22006],{"class":93,"line":1157},[91,22005,14673],{"class":97},[91,22007,15150],{"class":1941},[91,22009,22010],{"class":93,"line":1172},[91,22011,1524],{"class":101},[91,22013,22014],{"class":93,"line":1178},[91,22015,14695],{"class":97},[91,22017,22018],{"class":93,"line":1192},[91,22019,22020],{"class":160},"    \u002F\u002F非静态成员变量\n",[91,22022,22023],{"class":93,"line":1198},[91,22024,22025],{"class":160},"    \u002F\u002F int m_A;\n",[91,22027,22028],{"class":93,"line":1289},[91,22029,22030],{"class":160},"    \u002F\u002F定义静态成员变量\n",[91,22032,22033,22035,22037],{"class":93,"line":1295},[91,22034,10999],{"class":97},[91,22036,2360],{"class":97},[91,22038,21371],{"class":101},[91,22040,22041],{"class":93,"line":1307},[91,22042,2378],{"emptyLinePlaceholder":17},[91,22044,22045],{"class":93,"line":1590},[91,22046,2378],{"emptyLinePlaceholder":17},[91,22048,22049],{"class":93,"line":1595},[91,22050,3973],{"class":101},[91,22052,22053,22055,22057],{"class":93,"line":1601},[91,22054,5343],{"class":97},[91,22056,5567],{"class":1941},[91,22058,1954],{"class":101},[91,22060,22061],{"class":93,"line":1606},[91,22062,1524],{"class":101},[91,22064,22065],{"class":93,"line":1620},[91,22066,15292],{"class":101},[91,22068,22069],{"class":93,"line":1625},[91,22070,22071],{"class":160},"    \u002F\u002F输出类成员变量这块内存\n",[91,22073,22074,22076,22078,22081,22083],{"class":93,"line":1631},[91,22075,1529],{"class":101},[91,22077,1146],{"class":97},[91,22079,22080],{"class":101},"p.m_A",[91,22082,1146],{"class":97},[91,22084,1169],{"class":101},[91,22086,22087],{"class":93,"line":1652},[91,22088,1543],{"class":101},[91,22090,22091,22093,22095],{"class":93,"line":1657},[91,22092,105],{"class":97},[91,22094,1951],{"class":1941},[91,22096,1954],{"class":101},[91,22098,22099],{"class":93,"line":1671},[91,22100,1524],{"class":101},[91,22102,22103,22105],{"class":93,"line":1676},[91,22104,5612],{"class":1941},[91,22106,1954],{"class":101},[91,22108,22109],{"class":93,"line":1705},[91,22110,1543],{"class":101},[38,22112,22113],{},"此时输出是报错的：无法解析外部命令",[38,22115,22116],{},"解决这一问题：必须用到类内声明，类外初始化操作",[83,22118,22120],{"className":85,"code":22119,"language":5,"meta":10,"style":10},"#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",[88,22121,22122,22128,22138,22144,22148,22152,22157,22165,22169,22174,22189,22197,22201,22205,22210,22215,22227,22232,22243,22248,22253,22266,22270,22278,22282,22288],{"__ignoreMap":10},[91,22123,22124,22126],{"class":93,"line":94},[91,22125,1927],{"class":97},[91,22127,1930],{"class":206},[91,22129,22130,22132,22134,22136],{"class":93,"line":11},[91,22131,1935],{"class":97},[91,22133,1938],{"class":97},[91,22135,1942],{"class":1941},[91,22137,1268],{"class":101},[91,22139,22140,22142],{"class":93,"line":1157},[91,22141,14673],{"class":97},[91,22143,15150],{"class":1941},[91,22145,22146],{"class":93,"line":1172},[91,22147,1524],{"class":101},[91,22149,22150],{"class":93,"line":1178},[91,22151,14695],{"class":97},[91,22153,22154],{"class":93,"line":1192},[91,22155,22156],{"class":160},"    \u002F\u002F类内声明\n",[91,22158,22159,22161,22163],{"class":93,"line":1198},[91,22160,10999],{"class":97},[91,22162,2360],{"class":97},[91,22164,21371],{"class":101},[91,22166,22167],{"class":93,"line":1289},[91,22168,3973],{"class":101},[91,22170,22171],{"class":93,"line":1295},[91,22172,22173],{"class":160},"\u002F\u002F类外初始化\n",[91,22175,22176,22178,22180,22183,22185,22187],{"class":93,"line":1307},[91,22177,105],{"class":97},[91,22179,15548],{"class":1941},[91,22181,22182],{"class":101},"::m_A",[91,22184,147],{"class":97},[91,22186,548],{"class":150},[91,22188,1268],{"class":101},[91,22190,22191,22193,22195],{"class":93,"line":1590},[91,22192,5343],{"class":97},[91,22194,5567],{"class":1941},[91,22196,1954],{"class":101},[91,22198,22199],{"class":93,"line":1595},[91,22200,1524],{"class":101},[91,22202,22203],{"class":93,"line":1601},[91,22204,15292],{"class":101},[91,22206,22207],{"class":93,"line":1606},[91,22208,22209],{"class":160},"    \u002F\u002F访问变量的原内存空间\n",[91,22211,22212],{"class":93,"line":1620},[91,22213,22214],{"class":160},"    \u002F\u002F100\n",[91,22216,22217,22219,22221,22223,22225],{"class":93,"line":1625},[91,22218,1529],{"class":101},[91,22220,1146],{"class":97},[91,22222,22080],{"class":101},[91,22224,1146],{"class":97},[91,22226,1169],{"class":101},[91,22228,22229],{"class":93,"line":1631},[91,22230,22231],{"class":101},"    Person p2;\n",[91,22233,22234,22237,22239,22241],{"class":93,"line":1652},[91,22235,22236],{"class":101},"    p2.m_A",[91,22238,147],{"class":97},[91,22240,1700],{"class":150},[91,22242,1268],{"class":101},[91,22244,22245],{"class":93,"line":1657},[91,22246,22247],{"class":160},"    \u002F\u002F继续访问这片空间\n",[91,22249,22250],{"class":93,"line":1671},[91,22251,22252],{"class":160},"    \u002F\u002F200\n",[91,22254,22255,22257,22259,22262,22264],{"class":93,"line":1676},[91,22256,1529],{"class":101},[91,22258,1146],{"class":97},[91,22260,22261],{"class":101},"p2.m_A",[91,22263,1146],{"class":97},[91,22265,1169],{"class":101},[91,22267,22268],{"class":93,"line":1705},[91,22269,1543],{"class":101},[91,22271,22272,22274,22276],{"class":93,"line":1710},[91,22273,105],{"class":97},[91,22275,1951],{"class":1941},[91,22277,1954],{"class":101},[91,22279,22280],{"class":93,"line":1727},[91,22281,1524],{"class":101},[91,22283,22284,22286],{"class":93,"line":1732},[91,22285,5612],{"class":1941},[91,22287,5615],{"class":101},[91,22289,22290],{"class":93,"line":1737},[91,22291,1543],{"class":101},[38,22293,22294],{},[251,22295,22296],{},"静态变量的访问",[83,22298,22300],{"className":85,"code":22299,"language":5,"meta":10,"style":10},"#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",[88,22301,22302,22308,22318,22324,22328,22332,22336,22344,22348,22353,22361,22365,22369,22383,22398,22406,22410,22415,22420,22425,22430,22442,22447,22452,22466,22483,22487,22495,22499,22505],{"__ignoreMap":10},[91,22303,22304,22306],{"class":93,"line":94},[91,22305,1927],{"class":97},[91,22307,1930],{"class":206},[91,22309,22310,22312,22314,22316],{"class":93,"line":11},[91,22311,1935],{"class":97},[91,22313,1938],{"class":97},[91,22315,1942],{"class":1941},[91,22317,1268],{"class":101},[91,22319,22320,22322],{"class":93,"line":1157},[91,22321,14673],{"class":97},[91,22323,15150],{"class":1941},[91,22325,22326],{"class":93,"line":1172},[91,22327,1524],{"class":101},[91,22329,22330],{"class":93,"line":1178},[91,22331,14695],{"class":97},[91,22333,22334],{"class":93,"line":1192},[91,22335,22156],{"class":160},[91,22337,22338,22340,22342],{"class":93,"line":1198},[91,22339,10999],{"class":97},[91,22341,2360],{"class":97},[91,22343,21371],{"class":101},[91,22345,22346],{"class":93,"line":1289},[91,22347,15201],{"class":97},[91,22349,22350],{"class":93,"line":1295},[91,22351,22352],{"class":160},"    \u002F\u002F静态成员变量也是有访问权限的\n",[91,22354,22355,22357,22359],{"class":93,"line":1307},[91,22356,10999],{"class":97},[91,22358,2360],{"class":97},[91,22360,21378],{"class":101},[91,22362,22363],{"class":93,"line":1590},[91,22364,3973],{"class":101},[91,22366,22367],{"class":93,"line":1595},[91,22368,22173],{"class":160},[91,22370,22371,22373,22375,22377,22379,22381],{"class":93,"line":1601},[91,22372,105],{"class":97},[91,22374,15548],{"class":1941},[91,22376,22182],{"class":101},[91,22378,147],{"class":97},[91,22380,548],{"class":150},[91,22382,1268],{"class":101},[91,22384,22385,22387,22389,22392,22394,22396],{"class":93,"line":1606},[91,22386,105],{"class":97},[91,22388,15548],{"class":1941},[91,22390,22391],{"class":101},"::m_B",[91,22393,147],{"class":97},[91,22395,802],{"class":150},[91,22397,1268],{"class":101},[91,22399,22400,22402,22404],{"class":93,"line":1620},[91,22401,5343],{"class":97},[91,22403,5636],{"class":1941},[91,22405,1954],{"class":101},[91,22407,22408],{"class":93,"line":1625},[91,22409,1524],{"class":101},[91,22411,22412],{"class":93,"line":1631},[91,22413,22414],{"class":160},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[91,22416,22417],{"class":93,"line":1652},[91,22418,22419],{"class":160},"    \u002F\u002F静态成员变量有两种访问方式：\n",[91,22421,22422],{"class":93,"line":1657},[91,22423,22424],{"class":160},"    \u002F\u002F1.通过对象进行访问\n",[91,22426,22427],{"class":93,"line":1671},[91,22428,22429],{"class":101},"    Person p;  \n",[91,22431,22432,22434,22436,22438,22440],{"class":93,"line":1676},[91,22433,1529],{"class":101},[91,22435,1146],{"class":97},[91,22437,22080],{"class":101},[91,22439,1146],{"class":97},[91,22441,1169],{"class":101},[91,22443,22444],{"class":93,"line":1705},[91,22445,22446],{"class":160},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[91,22448,22449],{"class":93,"line":1710},[91,22450,22451],{"class":160},"    \u002F\u002F2.通过类名进行访问\n",[91,22453,22454,22456,22458,22460,22462,22464],{"class":93,"line":1727},[91,22455,1529],{"class":101},[91,22457,1146],{"class":97},[91,22459,19025],{"class":1941},[91,22461,22182],{"class":101},[91,22463,1146],{"class":97},[91,22465,1169],{"class":101},[91,22467,22468,22470,22472,22474,22476,22478,22480],{"class":93,"line":1732},[91,22469,1529],{"class":101},[91,22471,1146],{"class":97},[91,22473,19025],{"class":1941},[91,22475,22391],{"class":101},[91,22477,1146],{"class":97},[91,22479,1216],{"class":101},[91,22481,22482],{"class":160}," \u002F\u002F没有访问权限，报错\n",[91,22484,22485],{"class":93,"line":1737},[91,22486,1543],{"class":101},[91,22488,22489,22491,22493],{"class":93,"line":1742},[91,22490,105],{"class":97},[91,22492,1951],{"class":1941},[91,22494,1954],{"class":101},[91,22496,22497],{"class":93,"line":1756},[91,22498,1524],{"class":101},[91,22500,22501,22503],{"class":93,"line":1761},[91,22502,5681],{"class":1941},[91,22504,5615],{"class":101},[91,22506,22507],{"class":93,"line":2555},[91,22508,1543],{"class":101},[21977,22510,22512],{"id":22511},"_8282静态成员函数","8.2.8.2静态成员函数",[38,22514,22515],{},"1.静态成员函数定义与访问",[83,22517,22519],{"className":85,"code":22518,"language":5,"meta":10,"style":10},"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",[88,22520,22521,22527,22531,22535,22540,22551,22555,22569,22573,22577,22585,22589,22594,22599,22603,22611,22616,22626],{"__ignoreMap":10},[91,22522,22523,22525],{"class":93,"line":94},[91,22524,14673],{"class":97},[91,22526,15150],{"class":1941},[91,22528,22529],{"class":93,"line":11},[91,22530,1524],{"class":101},[91,22532,22533],{"class":93,"line":1157},[91,22534,14695],{"class":97},[91,22536,22537],{"class":93,"line":1172},[91,22538,22539],{"class":160},"    \u002F\u002F在公共权限下定义静态成员函数\n",[91,22541,22542,22544,22547,22549],{"class":93,"line":1178},[91,22543,10999],{"class":97},[91,22545,22546],{"class":97}," void",[91,22548,11364],{"class":1941},[91,22550,1954],{"class":101},[91,22552,22553],{"class":93,"line":1192},[91,22554,2008],{"class":101},[91,22556,22557,22560,22562,22565,22567],{"class":93,"line":1198},[91,22558,22559],{"class":101},"        coout",[91,22561,1146],{"class":97},[91,22563,22564],{"class":206},"\"静态成员函数的调用\"",[91,22566,1146],{"class":97},[91,22568,1169],{"class":101},[91,22570,22571],{"class":93,"line":1289},[91,22572,2165],{"class":101},[91,22574,22575],{"class":93,"line":1295},[91,22576,3973],{"class":101},[91,22578,22579,22581,22583],{"class":93,"line":1307},[91,22580,5343],{"class":97},[91,22582,5567],{"class":1941},[91,22584,1954],{"class":101},[91,22586,22587],{"class":93,"line":1590},[91,22588,1524],{"class":101},[91,22590,22591],{"class":93,"line":1595},[91,22592,22593],{"class":160},"    \u002F\u002F静态成员函数的调用方式:\n",[91,22595,22596],{"class":93,"line":1601},[91,22597,22598],{"class":160},"    \u002F\u002F1.通过对象访问\n",[91,22600,22601],{"class":93,"line":1606},[91,22602,15292],{"class":101},[91,22604,22605,22607,22609],{"class":93,"line":1620},[91,22606,15845],{"class":101},[91,22608,11530],{"class":1941},[91,22610,5615],{"class":101},[91,22612,22613],{"class":93,"line":1625},[91,22614,22615],{"class":160},"    \u002F\u002F2.通过类名访问\n",[91,22617,22618,22620,22622,22624],{"class":93,"line":1631},[91,22619,18498],{"class":1941},[91,22621,17711],{"class":101},[91,22623,11530],{"class":1941},[91,22625,5615],{"class":101},[91,22627,22628],{"class":93,"line":1652},[91,22629,1543],{"class":101},[46,22631,22632],{"start":11},[49,22633,22634],{},"静态成员函数只能访问静态成员变量",[83,22636,22638],{"className":85,"code":22637,"language":5,"meta":10,"style":10},"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",[88,22639,22640,22646,22650,22654,22658,22668,22672,22686,22691,22703,22707,22718,22728,22732,22736,22740,22750,22754,22767,22771,22775,22779,22783,22797,22805,22809,22813,22817,22821,22829,22833,22843,22848,22852,22860,22864,22870],{"__ignoreMap":10},[91,22641,22642,22644],{"class":93,"line":94},[91,22643,14673],{"class":97},[91,22645,15150],{"class":1941},[91,22647,22648],{"class":93,"line":11},[91,22649,1524],{"class":101},[91,22651,22652],{"class":93,"line":1157},[91,22653,14695],{"class":97},[91,22655,22656],{"class":93,"line":1172},[91,22657,22539],{"class":160},[91,22659,22660,22662,22664,22666],{"class":93,"line":1178},[91,22661,10999],{"class":97},[91,22663,22546],{"class":97},[91,22665,11364],{"class":1941},[91,22667,1954],{"class":101},[91,22669,22670],{"class":93,"line":1192},[91,22671,2008],{"class":101},[91,22673,22674,22677,22679,22681,22683],{"class":93,"line":1198},[91,22675,22676],{"class":101},"        m_A",[91,22678,147],{"class":97},[91,22680,413],{"class":150},[91,22682,157],{"class":101},[91,22684,22685],{"class":160}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[91,22687,22688],{"class":93,"line":1289},[91,22689,22690],{"class":160},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[91,22692,22693,22695,22697,22699,22701],{"class":93,"line":1295},[91,22694,22559],{"class":101},[91,22696,1146],{"class":97},[91,22698,22564],{"class":206},[91,22700,1146],{"class":97},[91,22702,1169],{"class":101},[91,22704,22705],{"class":93,"line":1307},[91,22706,2165],{"class":101},[91,22708,22709,22711,22713,22715],{"class":93,"line":1590},[91,22710,10999],{"class":97},[91,22712,2360],{"class":97},[91,22714,15427],{"class":101},[91,22716,22717],{"class":160}," \u002F\u002F静态成员变量\n",[91,22719,22720,22722,22725],{"class":93,"line":1595},[91,22721,1963],{"class":97},[91,22723,22724],{"class":101}," m_B;",[91,22726,22727],{"class":160}," \u002F\u002F非静态成员变量\n",[91,22729,22730],{"class":93,"line":1601},[91,22731,2378],{"emptyLinePlaceholder":17},[91,22733,22734],{"class":93,"line":1606},[91,22735,15201],{"class":97},[91,22737,22738],{"class":93,"line":1620},[91,22739,22352],{"class":160},[91,22741,22742,22744,22746,22748],{"class":93,"line":1625},[91,22743,10999],{"class":97},[91,22745,22546],{"class":97},[91,22747,13597],{"class":1941},[91,22749,1954],{"class":101},[91,22751,22752],{"class":93,"line":1631},[91,22753,2008],{"class":101},[91,22755,22756,22758,22760,22763,22765],{"class":93,"line":1652},[91,22757,3429],{"class":101},[91,22759,1146],{"class":97},[91,22761,22762],{"class":206},"\"这是私有权限下的静态函数调用\"",[91,22764,1146],{"class":97},[91,22766,1169],{"class":101},[91,22768,22769],{"class":93,"line":1657},[91,22770,2165],{"class":101},[91,22772,22773],{"class":93,"line":1671},[91,22774,2378],{"emptyLinePlaceholder":17},[91,22776,22777],{"class":93,"line":1676},[91,22778,2378],{"emptyLinePlaceholder":17},[91,22780,22781],{"class":93,"line":1705},[91,22782,3973],{"class":101},[91,22784,22785,22787,22789,22791,22793,22795],{"class":93,"line":1710},[91,22786,105],{"class":97},[91,22788,15548],{"class":1941},[91,22790,22182],{"class":101},[91,22792,147],{"class":97},[91,22794,293],{"class":150},[91,22796,1268],{"class":101},[91,22798,22799,22801,22803],{"class":93,"line":1727},[91,22800,5343],{"class":97},[91,22802,5567],{"class":1941},[91,22804,1954],{"class":101},[91,22806,22807],{"class":93,"line":1732},[91,22808,1524],{"class":101},[91,22810,22811],{"class":93,"line":1737},[91,22812,22593],{"class":160},[91,22814,22815],{"class":93,"line":1742},[91,22816,22598],{"class":160},[91,22818,22819],{"class":93,"line":1756},[91,22820,15292],{"class":101},[91,22822,22823,22825,22827],{"class":93,"line":1761},[91,22824,15845],{"class":101},[91,22826,11530],{"class":1941},[91,22828,5615],{"class":101},[91,22830,22831],{"class":93,"line":2555},[91,22832,22615],{"class":160},[91,22834,22835,22837,22839,22841],{"class":93,"line":2569},[91,22836,18498],{"class":1941},[91,22838,17711],{"class":101},[91,22840,11530],{"class":1941},[91,22842,5615],{"class":101},[91,22844,22845],{"class":93,"line":2577},[91,22846,22847],{"class":160},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[91,22849,22850],{"class":93,"line":2582},[91,22851,1543],{"class":101},[91,22853,22854,22856,22858],{"class":93,"line":2588},[91,22855,105],{"class":97},[91,22857,1951],{"class":1941},[91,22859,1954],{"class":101},[91,22861,22862],{"class":93,"line":2594},[91,22863,1524],{"class":101},[91,22865,22866,22868],{"class":93,"line":2599},[91,22867,5612],{"class":1941},[91,22869,5615],{"class":101},[91,22871,22872],{"class":93,"line":7927},[91,22873,1543],{"class":101},[63,22875,22877],{"id":22876},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21977,22879,22881],{"id":22880},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[38,22883,22884],{},"在c++中，类内的成员变量和成员函数分开存储",[38,22886,22887],{},"只有非静态成员变量才属于类的对象上",[22889,22890,22892],"h5",{"id":22891},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[83,22894,22896],{"className":85,"code":22895,"language":5,"meta":10,"style":10},"#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",[88,22897,22898,22905,22915,22921,22925,22929,22933,22941,22945,22949,22972,22976,22984,22988,22994],{"__ignoreMap":10},[91,22899,22900,22902],{"class":93,"line":94},[91,22901,1927],{"class":97},[91,22903,22904],{"class":206},"\u003Ciostraem>\n",[91,22906,22907,22909,22911,22913],{"class":93,"line":11},[91,22908,1935],{"class":97},[91,22910,1938],{"class":97},[91,22912,1942],{"class":1941},[91,22914,1268],{"class":101},[91,22916,22917,22919],{"class":93,"line":1157},[91,22918,14673],{"class":97},[91,22920,15150],{"class":1941},[91,22922,22923],{"class":93,"line":1172},[91,22924,1524],{"class":101},[91,22926,22927],{"class":93,"line":1178},[91,22928,2378],{"emptyLinePlaceholder":17},[91,22930,22931],{"class":93,"line":1192},[91,22932,3973],{"class":101},[91,22934,22935,22937,22939],{"class":93,"line":1198},[91,22936,5343],{"class":97},[91,22938,5567],{"class":1941},[91,22940,1954],{"class":101},[91,22942,22943],{"class":93,"line":1289},[91,22944,1524],{"class":101},[91,22946,22947],{"class":93,"line":1295},[91,22948,15292],{"class":101},[91,22950,22951,22953,22955,22958,22960,22963,22965,22967,22969],{"class":93,"line":1307},[91,22952,1529],{"class":101},[91,22954,1146],{"class":97},[91,22956,22957],{"class":206},"\"size of p=\"",[91,22959,1146],{"class":97},[91,22961,22962],{"class":1941},"sizeoif",[91,22964,6518],{"class":101},[91,22966,1146],{"class":97},[91,22968,1216],{"class":101},[91,22970,22971],{"class":160}," \u002F\u002F查看这个空类的占用的内存空间\n",[91,22973,22974],{"class":93,"line":1590},[91,22975,1543],{"class":101},[91,22977,22978,22980,22982],{"class":93,"line":1595},[91,22979,105],{"class":97},[91,22981,1951],{"class":1941},[91,22983,1954],{"class":101},[91,22985,22986],{"class":93,"line":1601},[91,22987,1524],{"class":101},[91,22989,22990,22992],{"class":93,"line":1606},[91,22991,5612],{"class":1941},[91,22993,5615],{"class":101},[91,22995,22996],{"class":93,"line":1620},[91,22997,1543],{"class":101},[38,22999,23000],{},"输出结果为：size of p=1",[38,23002,23003],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[38,23005,23006],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22889,23008,23010],{"id":23009},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[83,23012,23014],{"className":85,"code":23013,"language":5,"meta":10,"style":10},"#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",[88,23015,23016,23022,23032,23040,23044,23053,23057,23065,23069,23073,23092,23096,23100,23108,23112,23118],{"__ignoreMap":10},[91,23017,23018,23020],{"class":93,"line":94},[91,23019,1927],{"class":97},[91,23021,1930],{"class":206},[91,23023,23024,23026,23028,23030],{"class":93,"line":11},[91,23025,1935],{"class":97},[91,23027,1938],{"class":97},[91,23029,1942],{"class":1941},[91,23031,1268],{"class":101},[91,23033,23034,23036,23038],{"class":93,"line":1157},[91,23035,14673],{"class":97},[91,23037,15548],{"class":1941},[91,23039,2652],{"class":101},[91,23041,23042],{"class":93,"line":1172},[91,23043,1524],{"class":101},[91,23045,23046,23048,23050],{"class":93,"line":1178},[91,23047,1963],{"class":97},[91,23049,15427],{"class":101},[91,23051,23052],{"class":160},"\u002F\u002F非静态成员变量\n",[91,23054,23055],{"class":93,"line":1192},[91,23056,3973],{"class":101},[91,23058,23059,23061,23063],{"class":93,"line":1198},[91,23060,5343],{"class":97},[91,23062,5567],{"class":1941},[91,23064,1954],{"class":101},[91,23066,23067],{"class":93,"line":1289},[91,23068,1524],{"class":101},[91,23070,23071],{"class":93,"line":1295},[91,23072,15292],{"class":101},[91,23074,23075,23077,23079,23081,23083,23085,23087,23089],{"class":93,"line":1307},[91,23076,1529],{"class":101},[91,23078,1146],{"class":97},[91,23080,22957],{"class":206},[91,23082,1350],{"class":97},[91,23084,6518],{"class":101},[91,23086,1146],{"class":97},[91,23088,1216],{"class":101},[91,23090,23091],{"class":160}," \u002F\u002F查看不是空对象时占用多少内存\n",[91,23093,23094],{"class":93,"line":1590},[91,23095,2378],{"emptyLinePlaceholder":17},[91,23097,23098],{"class":93,"line":1595},[91,23099,1543],{"class":101},[91,23101,23102,23104,23106],{"class":93,"line":1601},[91,23103,105],{"class":97},[91,23105,1951],{"class":1941},[91,23107,1954],{"class":101},[91,23109,23110],{"class":93,"line":1606},[91,23111,1524],{"class":101},[91,23113,23114,23116],{"class":93,"line":1620},[91,23115,5612],{"class":1941},[91,23117,5615],{"class":101},[91,23119,23120],{"class":93,"line":1625},[91,23121,1543],{"class":101},[38,23123,23124],{},"输出结果：size of p=4",[38,23126,23127],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[46,23129,23130],{},[49,23131,23132],{},"如果加上非静态成员变量，Person类修改如下",[83,23134,23136],{"className":85,"code":23135,"language":5,"meta":10,"style":10},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[88,23137,23138,23144,23148,23154,23162,23166,23171],{"__ignoreMap":10},[91,23139,23140,23142],{"class":93,"line":94},[91,23141,14673],{"class":97},[91,23143,15150],{"class":1941},[91,23145,23146],{"class":93,"line":11},[91,23147,1524],{"class":101},[91,23149,23150,23152],{"class":93,"line":1157},[91,23151,1963],{"class":97},[91,23153,21371],{"class":101},[91,23155,23156,23158,23160],{"class":93,"line":1172},[91,23157,10999],{"class":97},[91,23159,2360],{"class":97},[91,23161,21378],{"class":101},[91,23163,23164],{"class":93,"line":1178},[91,23165,3973],{"class":101},[91,23167,23168],{"class":93,"line":1192},[91,23169,23170],{"class":160},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[91,23172,23173,23175,23177,23179,23181,23183],{"class":93,"line":1198},[91,23174,105],{"class":97},[91,23176,15548],{"class":1941},[91,23178,22391],{"class":101},[91,23180,147],{"class":97},[91,23182,293],{"class":150},[91,23184,1268],{"class":101},[38,23186,23187],{},"输出结果：4",[38,23189,23190],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[46,23192,23193],{"start":11},[49,23194,23195],{},"加上非静态成员函数",[83,23197,23199],{"className":85,"code":23198,"language":5,"meta":10,"style":10},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[88,23200,23201,23208,23212,23218,23226,23230,23234,23238],{"__ignoreMap":10},[91,23202,23203,23205],{"class":93,"line":94},[91,23204,14673],{"class":97},[91,23206,23207],{"class":1941},"  Person\n",[91,23209,23210],{"class":93,"line":11},[91,23211,1524],{"class":101},[91,23213,23214,23216],{"class":93,"line":1157},[91,23215,1963],{"class":97},[91,23217,21371],{"class":101},[91,23219,23220,23222,23224],{"class":93,"line":1172},[91,23221,14888],{"class":97},[91,23223,11364],{"class":1941},[91,23225,1954],{"class":101},[91,23227,23228],{"class":93,"line":1178},[91,23229,2008],{"class":101},[91,23231,23232],{"class":93,"line":1192},[91,23233,2378],{"emptyLinePlaceholder":17},[91,23235,23236],{"class":93,"line":1198},[91,23237,2165],{"class":101},[91,23239,23240],{"class":93,"line":1289},[91,23241,3973],{"class":101},[38,23243,23244],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[46,23246,23247],{"start":1157},[49,23248,23249],{},"加上静态成员函数",[83,23251,23253],{"className":85,"code":23252,"language":5,"meta":10,"style":10},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[88,23254,23255,23261,23265,23271,23279,23283,23287,23291,23302,23306,23310,23314],{"__ignoreMap":10},[91,23256,23257,23259],{"class":93,"line":94},[91,23258,14673],{"class":97},[91,23260,23207],{"class":1941},[91,23262,23263],{"class":93,"line":11},[91,23264,1524],{"class":101},[91,23266,23267,23269],{"class":93,"line":1157},[91,23268,1963],{"class":97},[91,23270,21371],{"class":101},[91,23272,23273,23275,23277],{"class":93,"line":1172},[91,23274,14888],{"class":97},[91,23276,11364],{"class":1941},[91,23278,1954],{"class":101},[91,23280,23281],{"class":93,"line":1178},[91,23282,2008],{"class":101},[91,23284,23285],{"class":93,"line":1192},[91,23286,2378],{"emptyLinePlaceholder":17},[91,23288,23289],{"class":93,"line":1198},[91,23290,2165],{"class":101},[91,23292,23293,23295,23297,23300],{"class":93,"line":1289},[91,23294,10999],{"class":97},[91,23296,22546],{"class":97},[91,23298,23299],{"class":1941}," func1",[91,23301,1954],{"class":101},[91,23303,23304],{"class":93,"line":1295},[91,23305,2008],{"class":101},[91,23307,23308],{"class":93,"line":1307},[91,23309,2378],{"emptyLinePlaceholder":17},[91,23311,23312],{"class":93,"line":1590},[91,23313,2165],{"class":101},[91,23315,23316],{"class":93,"line":1595},[91,23317,3973],{"class":101},[38,23319,23187],{},[38,23321,23322],{},"解释：静态成员函数也不属于类上",[5105,23324,7653],{},{"title":10,"searchDepth":11,"depth":11,"links":23326},[23327,23333],{"id":14624,"depth":11,"text":14625,"children":23328},[23329,23330,23331,23332],{"id":14628,"depth":1157,"text":14629},{"id":15353,"depth":1157,"text":15354},{"id":15525,"depth":1157,"text":15526},{"id":15984,"depth":1157,"text":15985},{"id":18356,"depth":11,"text":18357,"children":23334},[23335,23336,23337,23338,23339,23340,23341,23342,23343],{"id":18368,"depth":1157,"text":18369},{"id":18661,"depth":1157,"text":18662},{"id":19152,"depth":1157,"text":19153},{"id":20249,"depth":1157,"text":20250},{"id":20672,"depth":1157,"text":20673},{"id":21151,"depth":1157,"text":21152},{"id":21526,"depth":1157,"text":21527},{"id":21939,"depth":1157,"text":21940},{"id":22876,"depth":1157,"text":22877},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14589,"description":23344},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":4,"title":5,"body":23351,"description":13,"extension":14,"meta":23355,"navigation":17,"path":18,"seo":23356,"stem":20,"__hash__":21},{"type":7,"value":23352,"toc":23353},[],{"title":10,"searchDepth":11,"depth":11,"links":23354},[],{"category":16},{"title":5,"description":13},{"id":23358,"title":23359,"body":23360,"description":10,"extension":14,"meta":23951,"navigation":17,"path":23952,"seo":23953,"stem":23954,"__hash__":23955},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23361,"toc":23933},[23362,23365,23369,23372,23375,23378,23396,23401,23404,23407,23410,23413,23418,23421,23426,23429,23432,23436,23439,23442,23448,23451,23469,23473,23477,23480,23485,23488,23492,23495,23508,23511,23515,23518,23521,23524,23549,23552,23561,23572,23587,23619,23623,23630,23638,23642,23645,23648,23653,23657,23660,23663,23668,23671,23675,23678,23681,23686,23689,23693,23698,23702,23769,23773,23776,23779,23782,23785,23788,23794,23815,23818,23832,23841,23845,23848,23851,23856,23859,23864,23869,23872,23875,23880,23885,23888,23893,23898,23901,23906,23911,23914,23917,23922,23925,23930],[29,23363,23359],{"id":23364},"_1强化学习基本认识",[33,23366,23368],{"id":23367},"_11什么是强化学习","1.1.什么是强化学习",[38,23370,23371],{},"强化学习有两部分组成：智能体和环境；",[38,23373,23374],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[38,23376,23377],{},"强化学习与监督学习的区别:",[46,23379,23380,23383,23386,23389],{},[49,23381,23382],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[49,23384,23385],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[49,23387,23388],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[49,23390,23391,23392,23395],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[251,23393,23394],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[38,23397,23398],{},[1440,23399],{"alt":10,"src":23400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[38,23402,23403],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[38,23405,23406],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[38,23408,23409],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[38,23411,23412],{},"获取奖励",[38,23414,23415],{},[1440,23416],{"alt":10,"src":23417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[38,23419,23420],{},"强化学习可以分成标准强化学习和深度强化学习",[38,23422,23423],{},[1440,23424],{"alt":10,"src":23425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[38,23427,23428],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[38,23430,23431],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[33,23433,23435],{"id":23434},"_12强化学习应用场景","1.2.强化学习应用场景",[38,23437,23438],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[38,23440,23441],{},"具身智能中的应用",[38,23443,23444,23447],{},[251,23445,23446],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[38,23449,23450],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[38,23452,23453,23454,23457,23458,23461,23462,23465,23466],{},"机器人是",[251,23455,23456],{},"躯体","，深度学习是",[251,23459,23460],{},"神经元****网络","，VLA是",[251,23463,23464],{},"通用的行为逻辑","，而强化学习是",[251,23467,23468],{},"教练",[33,23470,23472],{"id":23471},"_13序列决策","1.3.序列决策",[63,23474,23476],{"id":23475},"_131智能体与环境","1.3.1.智能体与环境",[38,23478,23479],{},"强化学习研究的问题是智能体agent与环境交互的问题",[38,23481,23482],{},[1440,23483],{"alt":10,"src":23484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[38,23486,23487],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[63,23489,23491],{"id":23490},"_132奖励","1.3.2.奖励",[38,23493,23494],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[38,23496,23497,23498,23507],{},"取某个策略的表现如何。强化学习的目的就是",[251,23499,23500,23501,23506],{},"最大化",[251,23502,23503],{},[251,23504,23505],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[38,23509,23510],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[63,23512,23514],{"id":23513},"_133序列决策","1.3.3.序列决策",[38,23516,23517],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[38,23519,23520],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[38,23522,23523],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[38,23525,23526,23530,23531,23533,23534,23536,23537,23539,23540,13774,23543,13774,23546],{},[23527,23528,23529],"em",{},"Ht"," = ",[23527,23532,698],{},"1*, a",[23527,23535,319],{},", r",[23527,23538,319],{},", . . . ,* ",[23527,23541,23542],{},"ot",[23527,23544,23545],{},", at ,",[23527,23547,23548],{},"rt",[38,23550,23551],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[38,23553,23554,23530,23557,1636,23559,531],{},[23527,23555,23556],{},"st",[23527,23558,154],{},[23527,23560,23529],{},[38,23562,23563,23564,23567,23568,23571],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[251,23565,23566],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[251,23569,23570],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[38,23573,23574,23575,23578,23579,23582,23583,23586],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[251,23576,23577],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[251,23580,23581],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23527,23584,23585],{},"S, A, T, R, Ω, O, γ",")。",[38,23588,23589,23590,23592,23593,23595,23596,102,23598,23601,23602,23604,23605,102,23608,23611,23612,23614,23615,23618],{},"其中 ",[23527,23591,791],{}," 表示状态空间，为隐变量，",[23527,23594,334],{}," 为动作空间，",[23527,23597,816],{},[23527,23599,23600],{},"s ′ |s, a",") 为状态转移概率，",[23527,23603,766],{}," 为奖励函数，",[23527,23606,23607],{},"Ω",[23527,23609,23610],{},"o|s, a",") 为观测概率，",[23527,23613,692],{}," 为观测空间，",[23527,23616,23617],{},"γ"," 为折扣因子。",[33,23620,23622],{"id":23621},"_14动作空间","1.4.动作空间",[38,23624,23625,23626,23629],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[251,23627,23628],{},"动作空间"," ，动作空间分为:",[46,23631,23632,23635],{},[49,23633,23634],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[49,23636,23637],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[33,23639,23641],{"id":23640},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[38,23643,23644],{},"由策略、价值函数、模型三部分组成",[38,23646,23647],{},"这三者组成马尔可夫决策过程",[38,23649,23650],{},[1440,23651],{"alt":10,"src":23652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[63,23654,23656],{"id":23655},"_151策略","1.5.1.策略",[38,23658,23659],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[38,23661,23662],{},"策略可分为两种：",[38,23664,23665],{},[1440,23666],{"alt":10,"src":23667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[38,23669,23670],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[63,23672,23674],{"id":23673},"_152价值函数","1.5.2.价值函数",[38,23676,23677],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[38,23679,23680],{},"价值函数中有一个折扣因子，类似于存款利息",[38,23682,23683],{},[1440,23684],{"alt":10,"src":23685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[38,23687,23688],{},"进入某个状态采取的最优动作可以通过Q函数得到",[63,23690,23692],{"id":23691},"_153模型","1.5.3.模型",[38,23694,23695],{},[1440,23696],{"alt":10,"src":23697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[33,23699,23701],{"id":23700},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[239,23703,23704,23715],{},[242,23705,23706],{},[245,23707,23708,23712],{},[248,23709,23711],{"align":23710},"left","类型",[248,23713,23714],{"align":23710},"特点",[286,23716,23717,23727,23737,23747,23759],{},[245,23718,23719,23724],{},[291,23720,23721],{"align":23710},[251,23722,23723],{},"基于价值的智能体",[291,23725,23726],{"align":23710},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[245,23728,23729,23734],{},[291,23730,23731],{"align":23710},[251,23732,23733],{},"基于策略的智能体",[291,23735,23736],{"align":23710},"直接学习策略，没有学习价值函数",[245,23738,23739,23744],{},[291,23740,23741],{"align":23710},[251,23742,23743],{},"演员-评论员智能体",[291,23745,23746],{"align":23710},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[245,23748,23749,23754],{},[291,23750,23751],{"align":23710},[251,23752,23753],{},"有模型强化学习智能体",[291,23755,23756],{"align":23710},[1440,23757],{"alt":10,"src":23758},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[245,23760,23761,23766],{},[291,23762,23763],{"align":23710},[251,23764,23765],{},"免模型强化学习智能体",[291,23767,23768],{"align":23710},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[33,23770,23772],{"id":23771},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[38,23774,23775],{},"学习和规划是序列决策的两个基本问题",[38,23777,23778],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[38,23780,23781],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[38,23783,23784],{},"强化学习用到的库：Gym",[38,23786,23787],{},"Gym可以检验强化学习算法的优劣",[38,23789,23790,23793],{},[251,23791,23792],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[83,23795,23799],{"className":23796,"code":23797,"language":23798,"meta":10,"style":10},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[88,23800,23801],{"__ignoreMap":10},[91,23802,23803,23806,23809,23812],{"class":93,"line":94},[91,23804,23805],{"class":1941},"pip",[91,23807,23808],{"class":206}," install",[91,23810,23811],{"class":206}," gym==",[91,23813,23814],{"class":150},"0.25.2\n",[38,23816,23817],{},"显示图形界面需要",[83,23819,23821],{"className":23796,"code":23820,"language":23798,"meta":10,"style":10},"pip install pygame\n",[88,23822,23823],{"__ignoreMap":10},[91,23824,23825,23827,23829],{"class":93,"line":94},[91,23826,23805],{"class":1941},[91,23828,23808],{"class":206},[91,23830,23831],{"class":206}," pygame\n",[38,23833,23834,23835],{},"有关Gym库的相关文档介绍：",[340,23836,23840],{"href":23837,"rel":23838},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23839],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[33,23842,23844],{"id":23843},"_18一些补充基础概念","1.8.一些补充基础概念",[38,23846,23847],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[38,23849,23850],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[38,23852,23853],{},[1440,23854],{"alt":10,"src":23855},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[38,23857,23858],{},"折扣率需要自己来设定",[38,23860,23861],{},[1440,23862],{"alt":10,"src":23863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[46,23865,23866],{},[49,23867,23868],{},"状态转移函数：",[38,23870,23871],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[38,23873,23874],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[38,23876,23877],{},[1440,23878],{"alt":10,"src":23879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[46,23881,23882],{"start":11},[49,23883,23884],{},"动作价值函数：",[38,23886,23887],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[38,23889,23890],{},[1440,23891],{"alt":10,"src":23892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[46,23894,23895],{"start":1157},[49,23896,23897],{},"最优动作价值函数：",[38,23899,23900],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[38,23902,23903],{},[1440,23904],{"alt":10,"src":23905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[46,23907,23908],{"start":1172},[49,23909,23910],{},"状态价值函数:",[38,23912,23913],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[38,23915,23916],{},"它衡量的是“一个具体动作”的长期价值",[38,23918,23919],{},[1440,23920],{"alt":10,"src":23921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[38,23923,23924],{},"几个价值函数之间的比较：",[38,23926,23927],{},[1440,23928],{"alt":10,"src":23929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5105,23931,23932],{},"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":10,"searchDepth":11,"depth":11,"links":23934},[23935,23936,23937,23942,23943,23948,23949,23950],{"id":23367,"depth":11,"text":23368},{"id":23434,"depth":11,"text":23435},{"id":23471,"depth":11,"text":23472,"children":23938},[23939,23940,23941],{"id":23475,"depth":1157,"text":23476},{"id":23490,"depth":1157,"text":23491},{"id":23513,"depth":1157,"text":23514},{"id":23621,"depth":11,"text":23622},{"id":23640,"depth":11,"text":23641,"children":23944},[23945,23946,23947],{"id":23655,"depth":1157,"text":23656},{"id":23673,"depth":1157,"text":23674},{"id":23691,"depth":1157,"text":23692},{"id":23700,"depth":11,"text":23701},{"id":23771,"depth":11,"text":23772},{"id":23843,"depth":11,"text":23844},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23359,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23957,"title":23958,"body":23959,"description":23966,"extension":14,"meta":23977,"navigation":17,"path":23978,"seo":23979,"stem":23980,"__hash__":23981},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23960,"toc":23975},[23961,23964,23967,23972],[29,23962,23958],{"id":23963},"_2马尔可夫决策过程",[38,23965,23966],{},"这是强化学习的基本框架",[38,23968,23969],{},[1440,23970],{"alt":10,"src":23971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[38,23973,23974],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":10,"searchDepth":11,"depth":11,"links":23976},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23958,"description":23966},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23983,"title":23984,"body":23985,"description":10,"extension":14,"meta":24101,"navigation":17,"path":24102,"seo":24103,"stem":24104,"__hash__":24105},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23986,"toc":24096},[23987,23990,23994,23997,24002,24007,24010,24015,24018,24023,24026,24030,24035,24038,24043,24048,24053,24056,24060,24065,24068,24073,24078,24083,24088,24091],[29,23988,23984],{"id":23989},"_3动作价值函数",[33,23991,23993],{"id":23992},"_31dqn","3.1.DQN",[38,23995,23996],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[38,23998,23999],{},[1440,24000],{"alt":10,"src":24001},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[38,24003,24004],{},[1440,24005],{"alt":10,"src":24006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[38,24008,24009],{},"DQN算法的描述：",[38,24011,24012],{},[1440,24013],{"alt":10,"src":24014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[38,24016,24017],{},"这里的Dense指的是全连接层",[38,24019,24020],{},[1440,24021],{"alt":10,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[38,24024,24025],{},"当前观测的状态为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算法",[33,24027,24029],{"id":24028},"_32dqn的举例","3.2.DQN的举例",[38,24031,24032],{},[1440,24033],{"alt":10,"src":24034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[38,24036,24037],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[38,24039,24040],{},[1440,24041],{"alt":10,"src":24042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[38,24044,24045],{},[1440,24046],{"alt":10,"src":24047},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[38,24049,24050],{},[1440,24051],{"alt":10,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[38,24054,24055],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[33,24057,24059],{"id":24058},"_33td算法","3.3.TD算法",[38,24061,24062],{},[1440,24063],{"alt":10,"src":24064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[38,24066,24067],{},"强化学习TD算法公式的粗略解释：",[38,24069,24070],{},[1440,24071],{"alt":10,"src":24072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[38,24074,24075],{},[1440,24076],{"alt":10,"src":24077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[38,24079,24080],{},[1440,24081],{"alt":10,"src":24082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[38,24084,24085],{},[1440,24086],{"alt":10,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[38,24089,24090],{},"TD算法总结：",[38,24092,24093],{},[1440,24094],{"alt":10,"src":24095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":10,"searchDepth":11,"depth":11,"links":24097},[24098,24099,24100],{"id":23992,"depth":11,"text":23993},{"id":24028,"depth":11,"text":24029},{"id":24058,"depth":11,"text":24059},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23984,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24107,"title":24108,"body":24109,"description":10,"extension":14,"meta":24342,"navigation":17,"path":24343,"seo":24344,"stem":24345,"__hash__":24346},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24110,"toc":24338},[24111,24114,24118,24121,24124,24129,24134,24137,24142,24147,24150,24155,24158,24163,24166,24171,24174,24179,24182,24187,24192,24195,24200,24203,24206,24211,24214,24219,24224,24228,24231,24234,24239,24244,24247,24252,24257,24260,24265,24268,24271,24276,24279,24284,24287,24292,24297,24300,24305,24310,24313,24318,24321,24326,24329],[29,24112,24108],{"id":24113},"_4策略学习",[33,24115,24117],{"id":24116},"_41概念描述","4.1.概念描述",[38,24119,24120],{},"用神经网络（策略网络）近似策略函数",[38,24122,24123],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[38,24125,24126],{},[1440,24127],{"alt":10,"src":24128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[38,24130,24131],{},[1440,24132],{"alt":10,"src":24133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[38,24135,24136],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[38,24138,24139],{},[1440,24140],{"alt":10,"src":24141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[38,24143,24144],{},[1440,24145],{"alt":10,"src":24146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[38,24148,24149],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[38,24151,24152],{},[1440,24153],{"alt":10,"src":24154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[38,24156,24157],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[38,24159,24160],{},[1440,24161],{"alt":10,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[38,24164,24165],{},"改进theta要用到策略梯度算法",[38,24167,24168],{},[1440,24169],{"alt":10,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[38,24172,24173],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[38,24175,24176],{},[1440,24177],{"alt":10,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[38,24180,24181],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[38,24183,24184],{},[1440,24185],{"alt":10,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[38,24188,24189],{},[1440,24190],{"alt":10,"src":24191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[38,24193,24194],{},"梯度公式总结：",[38,24196,24197],{},[1440,24198],{"alt":10,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[38,24201,24202],{},"两个公式的分别应用场景：",[38,24204,24205],{},"对于离散的动作：",[38,24207,24208],{},[1440,24209],{"alt":10,"src":24210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[38,24212,24213],{},"对于连续的动作：",[38,24215,24216],{},[1440,24217],{"alt":10,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[38,24220,24221],{},[1440,24222],{"alt":10,"src":24223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[33,24225,24227],{"id":24226},"_42概率梯度算法总结","4.2.概率梯度算法总结",[38,24229,24230],{},"使用蒙特卡洛来近似计算策略梯度",[38,24232,24233],{},"蒙特卡洛法的解释如下：",[38,24235,24236],{},[1440,24237],{"alt":10,"src":24238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[38,24240,24241],{},[1440,24242],{"alt":10,"src":24243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[38,24245,24246],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[46,24248,24249],{},[49,24250,24251],{},"方法一：reinforce算法",[38,24253,24254],{},[1440,24255],{"alt":10,"src":24256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[38,24258,24259],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[46,24261,24262],{"start":11},[49,24263,24264],{},"方法二：actor-critic算法",[38,24266,24267],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[38,24269,24270],{},"两个网络的构建：",[38,24272,24273],{},[1440,24274],{"alt":10,"src":24275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[38,24277,24278],{},"actor网路：",[38,24280,24281],{},[1440,24282],{"alt":10,"src":24283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[38,24285,24286],{},"critic网络",[38,24288,24289],{},[1440,24290],{"alt":10,"src":24291},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[46,24293,24294],{"start":1157},[49,24295,24296],{},"网络的训练",[38,24298,24299],{},"网络描述",[38,24301,24302],{},[1440,24303],{"alt":10,"src":24304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[38,24306,24307],{},[1440,24308],{"alt":10,"src":24309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[38,24311,24312],{},"TD算法更新梯度：",[38,24314,24315],{},[1440,24316],{"alt":10,"src":24317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[38,24319,24320],{},"策略网络更新梯度：",[38,24322,24323],{},[1440,24324],{"alt":10,"src":24325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[38,24327,24328],{},"训练整个流程的具体描述：",[38,24330,24331,24334,24335],{},[1440,24332],{"alt":10,"src":24333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1440,24336],{"alt":10,"src":24337},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":10,"searchDepth":11,"depth":11,"links":24339},[24340,24341],{"id":24116,"depth":11,"text":24117},{"id":24226,"depth":11,"text":24227},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24108,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24348,"title":24349,"body":24350,"description":24357,"extension":14,"meta":24407,"navigation":17,"path":24408,"seo":24409,"stem":24410,"__hash__":24411},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24351,"toc":24403},[24352,24355,24358,24362,24365,24370,24374,24377,24382,24385,24390,24395,24398],[29,24353,24349],{"id":24354},"_5alphago算法",[38,24356,24357],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[33,24359,24361],{"id":24360},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[38,24363,24364],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[38,24366,24367],{},[1440,24368],{"alt":10,"src":24369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[33,24371,24373],{"id":24372},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[38,24375,24376],{},"采用强化学习的方式训练策略网络",[38,24378,24379],{},[1440,24380],{"alt":10,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[38,24383,24384],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[38,24386,24387],{},[1440,24388],{"alt":10,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[38,24391,24392],{},[1440,24393],{"alt":10,"src":24394},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[38,24396,24397],{},"强化学习训练策略网络的总结：",[38,24399,24400],{},[1440,24401],{"alt":10,"src":24402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":10,"searchDepth":11,"depth":11,"links":24404},[24405,24406],{"id":24360,"depth":11,"text":24361},{"id":24372,"depth":11,"text":24373},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24349,"description":24357},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24413,"title":24414,"body":24415,"description":24422,"extension":14,"meta":24425,"navigation":17,"path":24426,"seo":24427,"stem":24428,"__hash__":24429},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24416,"toc":24423},[24417,24420],[29,24418,24414],{"id":24419},"_6价值网络",[38,24421,24422],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":10,"searchDepth":11,"depth":11,"links":24424},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24414,"description":24422},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24431,"title":24432,"body":24433,"description":24437,"extension":14,"meta":24438,"navigation":17,"path":24439,"seo":24440,"stem":24441,"__hash__":24442},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24434,"toc":24435},[],{"title":10,"searchDepth":11,"depth":11,"links":24436},[],"记录自己的强化学习笔记。",{"category":16},"\u002Fwiki\u002F2025-12-04",{"title":24432,"description":24437},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24444,"title":24445,"body":24446,"description":13,"extension":14,"meta":24485,"navigation":17,"path":24486,"seo":24487,"stem":24488,"__hash__":24489},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24447,"toc":24483},[24448,24451,24454,24460,24463,24469,24472,24477,24480],[29,24449,24445],{"id":24450},"_1-项目概览与官方资源",[38,24452,24453],{},"官方文档：",[38,24455,24456],{},[340,24457,24458],{"href":24458,"rel":24459},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23839],[38,24461,24462],{},"官方代码仓库：",[38,24464,24465],{},[340,24466,24467],{"href":24467,"rel":24468},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23839],[38,24470,24471],{},"复现大体流程：",[38,24473,24474],{},[1440,24475],{"alt":10,"src":24476},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[38,24478,24479],{},"本教程的目标是打通这条链路：",[38,24481,24482],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":10,"searchDepth":11,"depth":11,"links":24484},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24445,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24491,"title":24492,"body":24493,"description":13,"extension":14,"meta":24609,"navigation":17,"path":24610,"seo":24611,"stem":24612,"__hash__":24613},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24494,"toc":24604},[24495,24498,24502,24505,24512,24516,24519,24528,24538,24542,24572,24575,24601],[29,24496,24492],{"id":24497},"_2-环境准备与设备连接",[33,24499,24501],{"id":24500},"_21-系统与环境","2.1 系统与环境",[38,24503,24504],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[38,24506,24507,24508,24511],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[88,24509,24510],{},"lerobot"," 依赖。",[33,24513,24515],{"id":24514},"_22-机械臂串口识别","2.2 机械臂串口识别",[38,24517,24518],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[83,24520,24522],{"className":23796,"code":24521,"language":23798,"meta":10,"style":10},"lerobot-find-out\n",[88,24523,24524],{"__ignoreMap":10},[91,24525,24526],{"class":93,"line":94},[91,24527,24521],{"class":1941},[38,24529,24530,24531,314,24534,24537],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[88,24532,24533],{},"\u002Fdev\u002FttyACM0",[88,24535,24536],{},"\u002Fdev\u002FttyACM1","）。",[33,24539,24541],{"id":24540},"_23-串口授权","2.3 串口授权",[83,24543,24545],{"className":23796,"code":24544,"language":23798,"meta":10,"style":10},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[88,24546,24547,24561],{"__ignoreMap":10},[91,24548,24549,24552,24555,24558],{"class":93,"line":94},[91,24550,24551],{"class":1941},"sudo",[91,24553,24554],{"class":206}," chmod",[91,24556,24557],{"class":150}," 666",[91,24559,24560],{"class":206}," \u002Fdev\u002FttyACM0\n",[91,24562,24563,24565,24567,24569],{"class":93,"line":11},[91,24564,24551],{"class":1941},[91,24566,24554],{"class":206},[91,24568,24557],{"class":150},[91,24570,24571],{"class":206}," \u002Fdev\u002FttyACM1\n",[38,24573,24574],{},"说明：",[1109,24576,24577,24582,24588,24598],{},[49,24578,24579,24581],{},[88,24580,24551],{},"：以 root 权限执行命令。",[49,24583,24584,24587],{},[88,24585,24586],{},"chmod","：修改设备节点权限。",[49,24589,24590,24593,24594,24597],{},[88,24591,24592],{},"666","：",[88,24595,24596],{},"rw-rw-rw-","，所有用户可读写。",[49,24599,24600],{},"串口号必须替换为你机器上的真实端口。",[5105,24602,24603],{},"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":10,"searchDepth":11,"depth":11,"links":24605},[24606,24607,24608],{"id":24500,"depth":11,"text":24501},{"id":24514,"depth":11,"text":24515},{"id":24540,"depth":11,"text":24541},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24492,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24615,"title":24616,"body":24617,"description":13,"extension":14,"meta":24778,"navigation":17,"path":24779,"seo":24780,"stem":24781,"__hash__":24782},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24618,"toc":24774},[24619,24623,24627,24633,24636,24693,24696,24700,24703,24771],[29,24620,24622],{"id":24621},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[33,24624,24626],{"id":24625},"_31-配置电机-id","3.1 配置电机 ID",[38,24628,24629,24630,24632],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[88,24631,319],{},"，需要改成机械臂链路里不冲突的编号。",[38,24634,24635],{},"方式一：用 LeRobot 命令逐步写入。",[83,24637,24639],{"className":23796,"code":24638,"language":23798,"meta":10,"style":10},"# 主臂舵机配置 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",[88,24640,24641,24646,24654,24661,24666,24670,24675,24681,24688],{"__ignoreMap":10},[91,24642,24643],{"class":93,"line":94},[91,24644,24645],{"class":160},"# 主臂舵机配置 ID\n",[91,24647,24648,24651],{"class":93,"line":11},[91,24649,24650],{"class":1941},"lerobot-setup-motors",[91,24652,24653],{"class":150}," \\\n",[91,24655,24656,24659],{"class":93,"line":1157},[91,24657,24658],{"class":150},"  --teleop.type=so101_leader",[91,24660,24653],{"class":150},[91,24662,24663],{"class":93,"line":1172},[91,24664,24665],{"class":150},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[91,24667,24668],{"class":93,"line":1178},[91,24669,2378],{"emptyLinePlaceholder":17},[91,24671,24672],{"class":93,"line":1192},[91,24673,24674],{"class":160},"# 从臂舵机配置 ID\n",[91,24676,24677,24679],{"class":93,"line":1198},[91,24678,24650],{"class":1941},[91,24680,24653],{"class":150},[91,24682,24683,24686],{"class":93,"line":1289},[91,24684,24685],{"class":150},"  --robot.type=so101_follower",[91,24687,24653],{"class":150},[91,24689,24690],{"class":93,"line":1295},[91,24691,24692],{"class":150},"  --robot.port=\u002Fdev\u002FttyACM1\n",[38,24694,24695],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[33,24697,24699],{"id":24698},"_32-机械臂校准","3.2 机械臂校准",[38,24701,24702],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[83,24704,24706],{"className":23796,"code":24705,"language":23798,"meta":10,"style":10},"# 主臂校准\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",[88,24707,24708,24713,24720,24726,24733,24738,24742,24747,24753,24759,24766],{"__ignoreMap":10},[91,24709,24710],{"class":93,"line":94},[91,24711,24712],{"class":160},"# 主臂校准\n",[91,24714,24715,24718],{"class":93,"line":11},[91,24716,24717],{"class":1941},"lerobot-calibrate",[91,24719,24653],{"class":150},[91,24721,24722,24724],{"class":93,"line":1157},[91,24723,24658],{"class":150},[91,24725,24653],{"class":150},[91,24727,24728,24731],{"class":93,"line":1172},[91,24729,24730],{"class":150},"  --teleop.port=\u002Fdev\u002FttyACM0",[91,24732,24653],{"class":150},[91,24734,24735],{"class":93,"line":1178},[91,24736,24737],{"class":150},"  --teleop.id=my_awesome_leader_arm\n",[91,24739,24740],{"class":93,"line":1192},[91,24741,2378],{"emptyLinePlaceholder":17},[91,24743,24744],{"class":93,"line":1198},[91,24745,24746],{"class":160},"# 从臂校准\n",[91,24748,24749,24751],{"class":93,"line":1289},[91,24750,24717],{"class":1941},[91,24752,24653],{"class":150},[91,24754,24755,24757],{"class":93,"line":1295},[91,24756,24685],{"class":150},[91,24758,24653],{"class":150},[91,24760,24761,24764],{"class":93,"line":1307},[91,24762,24763],{"class":150},"  --robot.port=\u002Fdev\u002FttyACM1",[91,24765,24653],{"class":150},[91,24767,24768],{"class":93,"line":1590},[91,24769,24770],{"class":150},"  --robot.id=my_awesome_follower_arm\n",[5105,24772,24773],{},"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":10,"searchDepth":11,"depth":11,"links":24775},[24776,24777],{"id":24625,"depth":11,"text":24626},{"id":24698,"depth":11,"text":24699},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24616,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24784,"title":24785,"body":24786,"description":13,"extension":14,"meta":24977,"navigation":17,"path":24978,"seo":24979,"stem":24980,"__hash__":24981},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24787,"toc":24973},[24788,24791,24795,24842,24846,24859,24922,24925,24970],[29,24789,24785],{"id":24790},"_4-遥操与相机接入",[33,24792,24794],{"id":24793},"_41-不带相机遥操","4.1 不带相机遥操",[83,24796,24798],{"className":23796,"code":24797,"language":23798,"meta":10,"style":10},"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",[88,24799,24800,24807,24813,24819,24826,24832,24838],{"__ignoreMap":10},[91,24801,24802,24805],{"class":93,"line":94},[91,24803,24804],{"class":1941},"lerobot-teleoperate",[91,24806,24653],{"class":150},[91,24808,24809,24811],{"class":93,"line":11},[91,24810,24685],{"class":150},[91,24812,24653],{"class":150},[91,24814,24815,24817],{"class":93,"line":1157},[91,24816,24763],{"class":150},[91,24818,24653],{"class":150},[91,24820,24821,24824],{"class":93,"line":1172},[91,24822,24823],{"class":150},"  --robot.id=my_awesome_follower_arm",[91,24825,24653],{"class":150},[91,24827,24828,24830],{"class":93,"line":1178},[91,24829,24658],{"class":150},[91,24831,24653],{"class":150},[91,24833,24834,24836],{"class":93,"line":1192},[91,24835,24730],{"class":150},[91,24837,24653],{"class":150},[91,24839,24840],{"class":93,"line":1198},[91,24841,24737],{"class":150},[33,24843,24845],{"id":24844},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[83,24847,24849],{"className":23796,"code":24848,"language":23798,"meta":10,"style":10},"lerobot-find-cameras opencv\n",[88,24850,24851],{"__ignoreMap":10},[91,24852,24853,24856],{"class":93,"line":94},[91,24854,24855],{"class":1941},"lerobot-find-cameras",[91,24857,24858],{"class":206}," opencv\n",[83,24860,24862],{"className":23796,"code":24861,"language":23798,"meta":10,"style":10},"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",[88,24863,24864,24870,24876,24882,24888,24898,24904,24910,24917],{"__ignoreMap":10},[91,24865,24866,24868],{"class":93,"line":94},[91,24867,24804],{"class":1941},[91,24869,24653],{"class":150},[91,24871,24872,24874],{"class":93,"line":11},[91,24873,24685],{"class":150},[91,24875,24653],{"class":150},[91,24877,24878,24880],{"class":93,"line":1157},[91,24879,24763],{"class":150},[91,24881,24653],{"class":150},[91,24883,24884,24886],{"class":93,"line":1172},[91,24885,24823],{"class":150},[91,24887,24653],{"class":150},[91,24889,24890,24893,24896],{"class":93,"line":1178},[91,24891,24892],{"class":150},"  --robot.cameras=",[91,24894,24895],{"class":206},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[91,24897,24653],{"class":150},[91,24899,24900,24902],{"class":93,"line":1192},[91,24901,24658],{"class":150},[91,24903,24653],{"class":150},[91,24905,24906,24908],{"class":93,"line":1198},[91,24907,24730],{"class":150},[91,24909,24653],{"class":150},[91,24911,24912,24915],{"class":93,"line":1289},[91,24913,24914],{"class":150},"  --teleop.id=my_awesome_leader_arm",[91,24916,24653],{"class":150},[91,24918,24919],{"class":93,"line":1295},[91,24920,24921],{"class":150},"  --display_data=true\n",[38,24923,24924],{},"相机参数说明：",[1109,24926,24927,24933,24939,24948,24958,24964],{},[49,24928,24929,24932],{},[88,24930,24931],{},"front","：相机名称。",[49,24934,24935,24938],{},[88,24936,24937],{},"type: opencv","：相机驱动类型。",[49,24940,24941,24944,24945,24537],{},[88,24942,24943],{},"index_or_path","：设备编号或设备路径（如 ",[88,24946,24947],{},"\u002Fdev\u002Fvideo4",[49,24949,24950,24953,24954,24957],{},[88,24951,24952],{},"width"," \u002F ",[88,24955,24956],{},"height","：图像分辨率。",[49,24959,24960,24963],{},[88,24961,24962],{},"fps","：采样帧率。",[49,24965,24966,24969],{},[88,24967,24968],{},"--display_data=true","：启用实时可视化。",[5105,24971,24972],{},"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":10,"searchDepth":11,"depth":11,"links":24974},[24975,24976],{"id":24793,"depth":11,"text":24794},{"id":24844,"depth":11,"text":24845},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24785,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24983,"title":24984,"body":24985,"description":13,"extension":14,"meta":25157,"navigation":17,"path":25158,"seo":25159,"stem":25160,"__hash__":25161},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24986,"toc":25152},[24987,24991,24995,25000,25005,25008,25050,25056,25060,25109,25114,25118,25121,25129,25134,25139,25144,25149],[29,24988,24990],{"id":24989},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[33,24992,24994],{"id":24993},"_51-生成访问令牌","5.1 生成访问令牌",[38,24996,24997],{},[1440,24998],{"alt":10,"src":24999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[38,25001,25002],{},[1440,25003],{"alt":10,"src":25004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[38,25006,25007],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[83,25009,25011],{"className":23796,"code":25010,"language":23798,"meta":10,"style":10},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[88,25012,25013,25026],{"__ignoreMap":10},[91,25014,25015,25018,25021,25023],{"class":93,"line":94},[91,25016,25017],{"class":97},"export",[91,25019,25020],{"class":101}," HF_TOKEN",[91,25022,147],{"class":97},[91,25024,25025],{"class":206},"\"your_huggingface_token\"\n",[91,25027,25028,25031,25034,25037,25040,25042,25045,25047],{"class":93,"line":11},[91,25029,25030],{"class":1941},"hf",[91,25032,25033],{"class":206}," auth",[91,25035,25036],{"class":206}," login",[91,25038,25039],{"class":150}," --token",[91,25041,9703],{"class":206},[91,25043,25044],{"class":101},"$HF_TOKEN",[91,25046,353],{"class":206},[91,25048,25049],{"class":150}," --add-to-git-credential\n",[38,25051,25052,25055],{},[88,25053,25054],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[33,25057,25059],{"id":25058},"_52-验证登录","5.2 验证登录",[83,25061,25063],{"className":23796,"code":25062,"language":23798,"meta":10,"style":10},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[88,25064,25065,25096],{"__ignoreMap":10},[91,25066,25067,25070,25072,25075,25077,25079,25082,25085,25088,25091,25094],{"class":93,"line":94},[91,25068,25069],{"class":101},"HF_USER",[91,25071,147],{"class":97},[91,25073,25074],{"class":101},"$(",[91,25076,25030],{"class":1941},[91,25078,25033],{"class":206},[91,25080,25081],{"class":206}," whoami",[91,25083,25084],{"class":97}," |",[91,25086,25087],{"class":1941}," head",[91,25089,25090],{"class":150}," -n",[91,25092,25093],{"class":150}," 1",[91,25095,108],{"class":101},[91,25097,25098,25101,25103,25106],{"class":93,"line":11},[91,25099,25100],{"class":150},"echo",[91,25102,9703],{"class":206},[91,25104,25105],{"class":101},"$HF_USER",[91,25107,25108],{"class":206},"\"\n",[38,25110,25111],{},[1440,25112],{"alt":10,"src":25113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[33,25115,25117],{"id":25116},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[38,25119,25120],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1109,25122,25123,25126],{},[49,25124,25125],{},"Dataset Repo（用于上传演示数据）",[49,25127,25128],{},"Model Repo（用于上传训练后的 ACT 权重）",[38,25130,25131],{},[1440,25132],{"alt":10,"src":25133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[38,25135,25136],{},[1440,25137],{"alt":10,"src":25138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[38,25140,25141],{},[1440,25142],{"alt":10,"src":25143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[38,25145,25146],{},[1440,25147],{"alt":10,"src":25148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5105,25150,25151],{},"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":10,"searchDepth":11,"depth":11,"links":25153},[25154,25155,25156],{"id":24993,"depth":11,"text":24994},{"id":25058,"depth":11,"text":25059},{"id":25116,"depth":11,"text":25117},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24984,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25163,"title":25164,"body":25165,"description":13,"extension":14,"meta":25362,"navigation":17,"path":25363,"seo":25364,"stem":25365,"__hash__":25366},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25166,"toc":25357},[25167,25171,25175,25271,25279,25284,25288,25304,25307,25311,25354],[29,25168,25170],{"id":25169},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[33,25172,25174],{"id":25173},"_61-录制示教数据","6.1 录制示教数据",[83,25176,25178],{"className":23796,"code":25177,"language":23798,"meta":10,"style":10},"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",[88,25179,25180,25187,25193,25199,25205,25214,25220,25226,25232,25239,25249,25256,25266],{"__ignoreMap":10},[91,25181,25182,25185],{"class":93,"line":94},[91,25183,25184],{"class":1941},"lerobot-record",[91,25186,24653],{"class":150},[91,25188,25189,25191],{"class":93,"line":11},[91,25190,24685],{"class":150},[91,25192,24653],{"class":150},[91,25194,25195,25197],{"class":93,"line":1157},[91,25196,24763],{"class":150},[91,25198,24653],{"class":150},[91,25200,25201,25203],{"class":93,"line":1172},[91,25202,24823],{"class":150},[91,25204,24653],{"class":150},[91,25206,25207,25209,25212],{"class":93,"line":1178},[91,25208,24892],{"class":150},[91,25210,25211],{"class":206},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[91,25213,24653],{"class":150},[91,25215,25216,25218],{"class":93,"line":1192},[91,25217,24658],{"class":150},[91,25219,24653],{"class":150},[91,25221,25222,25224],{"class":93,"line":1198},[91,25223,24730],{"class":150},[91,25225,24653],{"class":150},[91,25227,25228,25230],{"class":93,"line":1289},[91,25229,24914],{"class":150},[91,25231,24653],{"class":150},[91,25233,25234,25237],{"class":93,"line":1295},[91,25235,25236],{"class":150},"  --display_data=true",[91,25238,24653],{"class":150},[91,25240,25241,25244,25247],{"class":93,"line":1307},[91,25242,25243],{"class":150},"  --dataset.repo_id=",[91,25245,25246],{"class":206},"\"Embodied-AI-6\u002Fso101_test\"",[91,25248,24653],{"class":150},[91,25250,25251,25254],{"class":93,"line":1590},[91,25252,25253],{"class":150},"  --dataset.num_episodes=10",[91,25255,24653],{"class":150},[91,25257,25258,25261,25264],{"class":93,"line":1595},[91,25259,25260],{"class":150},"  --dataset.single_task=",[91,25262,25263],{"class":206},"\"Grab the green cube\"",[91,25265,24653],{"class":150},[91,25267,25268],{"class":93,"line":1601},[91,25269,25270],{"class":150},"  --resume=true\n",[1109,25272,25273],{},[49,25274,25275,25278],{},[88,25276,25277],{},"--resume=true","：已有同一数据集时继续追加 episode。",[38,25280,25281],{},[1440,25282],{"alt":10,"src":25283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[33,25285,25287],{"id":25286},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[83,25289,25291],{"className":23796,"code":25290,"language":23798,"meta":10,"style":10},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[88,25292,25293],{"__ignoreMap":10},[91,25294,25295,25298,25301],{"class":93,"line":94},[91,25296,25297],{"class":1941},"rm",[91,25299,25300],{"class":150}," -rf",[91,25302,25303],{"class":206}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[38,25305,25306],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[33,25308,25310],{"id":25309},"_63-回放指定-episode","6.3 回放指定 episode",[83,25312,25314],{"className":23796,"code":25313,"language":23798,"meta":10,"style":10},"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",[88,25315,25316,25323,25329,25335,25341,25349],{"__ignoreMap":10},[91,25317,25318,25321],{"class":93,"line":94},[91,25319,25320],{"class":1941},"lerobot-replay",[91,25322,24653],{"class":150},[91,25324,25325,25327],{"class":93,"line":11},[91,25326,24685],{"class":150},[91,25328,24653],{"class":150},[91,25330,25331,25333],{"class":93,"line":1157},[91,25332,24763],{"class":150},[91,25334,24653],{"class":150},[91,25336,25337,25339],{"class":93,"line":1172},[91,25338,24823],{"class":150},[91,25340,24653],{"class":150},[91,25342,25343,25345,25347],{"class":93,"line":1178},[91,25344,25243],{"class":150},[91,25346,25246],{"class":206},[91,25348,24653],{"class":150},[91,25350,25351],{"class":93,"line":1192},[91,25352,25353],{"class":150},"  --dataset.episode=0\n",[5105,25355,25356],{},"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":10,"searchDepth":11,"depth":11,"links":25358},[25359,25360,25361],{"id":25173,"depth":11,"text":25174},{"id":25286,"depth":11,"text":25287},{"id":25309,"depth":11,"text":25310},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25164,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25368,"title":25369,"body":25370,"description":13,"extension":14,"meta":25498,"navigation":17,"path":25499,"seo":25500,"stem":25501,"__hash__":25502},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25371,"toc":25496},[25372,25376,25439,25442,25489,25494],[29,25373,25375],{"id":25374},"_7-act-模型训练","7. ACT 模型训练",[83,25377,25379],{"className":23796,"code":25378,"language":23798,"meta":10,"style":10},"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",[88,25380,25381,25388,25396,25403,25410,25417,25424,25431],{"__ignoreMap":10},[91,25382,25383,25386],{"class":93,"line":94},[91,25384,25385],{"class":1941},"lerobot-train",[91,25387,24653],{"class":150},[91,25389,25390,25392,25394],{"class":93,"line":11},[91,25391,25243],{"class":150},[91,25393,25246],{"class":206},[91,25395,24653],{"class":150},[91,25397,25398,25401],{"class":93,"line":1157},[91,25399,25400],{"class":150},"  --policy.type=act",[91,25402,24653],{"class":150},[91,25404,25405,25408],{"class":93,"line":1172},[91,25406,25407],{"class":150},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[91,25409,24653],{"class":150},[91,25411,25412,25415],{"class":93,"line":1178},[91,25413,25414],{"class":150},"  --job_name=act_so101_test",[91,25416,24653],{"class":150},[91,25418,25419,25422],{"class":93,"line":1192},[91,25420,25421],{"class":150},"  --policy.device=cuda",[91,25423,24653],{"class":150},[91,25425,25426,25429],{"class":93,"line":1198},[91,25427,25428],{"class":150},"  --wandb.enable=false",[91,25430,24653],{"class":150},[91,25432,25433,25436],{"class":93,"line":1289},[91,25434,25435],{"class":150},"  --policy.repo_id=",[91,25437,25438],{"class":206},"\"Embodied-AI-6\u002Flerobot_new\"\n",[38,25440,25441],{},"参数说明：",[1109,25443,25444,25450,25456,25462,25468,25477,25483],{},[49,25445,25446,25449],{},[88,25447,25448],{},"--dataset.repo_id","：训练数据集仓库。",[49,25451,25452,25455],{},[88,25453,25454],{},"--policy.type=act","：策略模型类型为 ACT。",[49,25457,25458,25461],{},[88,25459,25460],{},"--output_dir","：本地训练输出目录。",[49,25463,25464,25467],{},[88,25465,25466],{},"--job_name","：训练任务名称。",[49,25469,25470,25473,25474,24537],{},[88,25471,25472],{},"--policy.device","：训练设备（如 ",[88,25475,25476],{},"cuda",[49,25478,25479,25482],{},[88,25480,25481],{},"--wandb.enable","：是否启用 WandB 可视化。",[49,25484,25485,25488],{},[88,25486,25487],{},"--policy.repo_id","：训练后模型推送目标仓库。",[38,25490,25491],{},[1440,25492],{"alt":10,"src":25493},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5105,25495,25356],{},{"title":10,"searchDepth":11,"depth":11,"links":25497},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25369,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25504,"title":25505,"body":25506,"description":13,"extension":14,"meta":25593,"navigation":17,"path":25594,"seo":25595,"stem":25596,"__hash__":25597},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25507,"toc":25591},[25508,25511,25514,25581,25589],[29,25509,25505],{"id":25510},"_8-策略部署与自动采集",[38,25512,25513],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[83,25515,25517],{"className":23796,"code":25516,"language":23798,"meta":10,"style":10},"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",[88,25518,25519,25525,25531,25537,25545,25551,25558,25566,25574],{"__ignoreMap":10},[91,25520,25521,25523],{"class":93,"line":94},[91,25522,25184],{"class":1941},[91,25524,24653],{"class":150},[91,25526,25527,25529],{"class":93,"line":11},[91,25528,24685],{"class":150},[91,25530,24653],{"class":150},[91,25532,25533,25535],{"class":93,"line":1157},[91,25534,24763],{"class":150},[91,25536,24653],{"class":150},[91,25538,25539,25541,25543],{"class":93,"line":1172},[91,25540,24892],{"class":150},[91,25542,25211],{"class":206},[91,25544,24653],{"class":150},[91,25546,25547,25549],{"class":93,"line":1178},[91,25548,24823],{"class":150},[91,25550,24653],{"class":150},[91,25552,25553,25556],{"class":93,"line":1192},[91,25554,25555],{"class":150},"  --display_data=false",[91,25557,24653],{"class":150},[91,25559,25560,25562,25564],{"class":93,"line":1198},[91,25561,25243],{"class":150},[91,25563,25246],{"class":206},[91,25565,24653],{"class":150},[91,25567,25568,25570,25572],{"class":93,"line":1289},[91,25569,25260],{"class":150},[91,25571,25263],{"class":206},[91,25573,24653],{"class":150},[91,25575,25576,25579],{"class":93,"line":1295},[91,25577,25578],{"class":150},"  --policy.path=",[91,25580,25438],{"class":206},[1109,25582,25583],{},[49,25584,25585,25588],{},[88,25586,25587],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5105,25590,25356],{},{"title":10,"searchDepth":11,"depth":11,"links":25592},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25505,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25599,"title":25600,"body":25601,"description":13,"extension":14,"meta":25630,"navigation":17,"path":25631,"seo":25632,"stem":25633,"__hash__":25634},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25602,"toc":25628},[25603,25607,25610,25616,25619,25625],[29,25604,25606],{"id":25605},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[38,25608,25609],{},"项目地址：",[38,25611,25612],{},[340,25613,25614],{"href":25614,"rel":25615},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23839],[38,25617,25618],{},"参考教程：",[38,25620,25621],{},[340,25622,25623],{"href":25623,"rel":25624},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23839],[38,25626,25627],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":10,"searchDepth":11,"depth":11,"links":25629},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25600,"description":13},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25636,"title":25637,"body":25638,"description":25642,"extension":14,"meta":25643,"navigation":17,"path":25644,"seo":25645,"stem":25646,"__hash__":25647},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25639,"toc":25640},[],{"title":10,"searchDepth":11,"depth":11,"links":25641},[],"act复现",{"category":16},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25637,"description":25642},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25649,"title":25650,"body":25651,"description":10,"extension":14,"meta":25953,"navigation":17,"path":25954,"seo":25955,"stem":25956,"__hash__":25957},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25652,"toc":25945},[25653,25656,25660,25670,25677,25684,25687,25694,25697,25700,25704,25716,25720,25766,25769,25772,25775,25778,25781,25785,25823,25829,25833,25887,25892,25895,25898,25903,25906,25911,25914,25917,25921,25924,25927,25931],[29,25654,25650],{"id":25655},"_1简介",[63,25657,25659],{"id":25658},"_11什么是-docker","1.1什么是 Docker？",[38,25661,25662,25663,25666,25667],{},"Docker 是一个开源的 ",[251,25664,25665],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[251,25668,25669],{},"一次构建，到处运行。",[38,25671,25672,25673,25676],{},"“ ",[251,25674,25675],{},"一次构建，到处运行"," ”也就是说：",[46,25678,25679],{},[49,25680,25681],{},[251,25682,25683],{},"之前：",[38,25685,25686],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[46,25688,25689],{},[49,25690,25691],{},[251,25692,25693],{},"使用docker后：",[38,25695,25696],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[38,25698,25699],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[63,25701,25703],{"id":25702},"_12它是怎么工作的","1.2.它是怎么工作的？",[1109,25705,25706,25709],{},[49,25707,25708],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[49,25710,25711,25712,25715],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[251,25713,25714],{},"无论在哪运行都一样稳定"," 。",[63,25717,25719],{"id":25718},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[239,25721,25722,25732],{},[242,25723,25724],{},[245,25725,25726,25729],{},[248,25727,25728],{"align":23710},"概念",[248,25730,25731],{"align":23710},"解释",[286,25733,25734,25742,25750,25758],{},[245,25735,25736,25739],{},[291,25737,25738],{"align":23710},"镜像",[291,25740,25741],{"align":23710},"Image，运行容器的模板，像是一个应用快照",[245,25743,25744,25747],{},[291,25745,25746],{"align":23710},"容器",[291,25748,25749],{"align":23710},"Container，运行中的镜像实例，有自己的文件系统、网络等",[245,25751,25752,25755],{},[291,25753,25754],{"align":23710},"Dockerfile",[291,25756,25757],{"align":23710},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[245,25759,25760,25763],{},[291,25761,25762],{"align":23710},"仓库",[291,25764,25765],{"align":23710},"Registry，存放镜像的地方，比如 Docker Hub",[38,25767,25768],{},"抽象化理解:",[38,25770,25771],{},"Docker镜像≈C++类",[38,25773,25774],{},"Docker容器≈C++类实例(即对象)",[38,25776,25777],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[38,25779,25780],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[63,25782,25784],{"id":25783},"_14类比理解","1.4.类比理解",[239,25786,25787,25797],{},[242,25788,25789],{},[245,25790,25791,25794],{},[248,25792,25793],{"align":23710},"传统部署",[248,25795,25796],{"align":23710},"Docker部署",[286,25798,25799,25807,25815],{},[245,25800,25801,25804],{},[291,25802,25803],{"align":23710},"手动安装依赖、调试版本不一致问题",[291,25805,25806],{"align":23710},"一次打包环境和代码",[245,25808,25809,25812],{},[291,25810,25811],{"align":23710},"程序“裸奔”跑在系统上",[291,25813,25814],{"align":23710},"程序“穿着容器”隔离运行",[245,25816,25817,25820],{},[291,25818,25819],{"align":23710},"容易“在我电脑上能跑”",[291,25821,25822],{"align":23710},"保证“无论在哪都能跑”",[38,25824,25825,25826],{},"就像快递包裹： ",[251,25827,25828],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[63,25830,25832],{"id":25831},"_15docker-的核心优势","1.5.Docker 的核心优势",[239,25834,25835,25845],{},[242,25836,25837],{},[245,25838,25839,25842],{},[248,25840,25841],{"align":23710},"优势",[248,25843,25844],{"align":23710},"说明",[286,25846,25847,25855,25863,25871,25879],{},[245,25848,25849,25852],{},[291,25850,25851],{"align":23710},"轻量级",[291,25853,25854],{"align":23710},"基于系统内核共享，启动速度快，占资源少",[245,25856,25857,25860],{},[291,25858,25859],{"align":23710},"跨平台",[291,25861,25862],{"align":23710},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[245,25864,25865,25868],{},[291,25866,25867],{"align":23710},"易于迁移部署",[291,25869,25870],{"align":23710},"应用和环境一起封装，不怕依赖不一致",[245,25872,25873,25876],{},[291,25874,25875],{"align":23710},"易于版本控制",[291,25877,25878],{"align":23710},"镜像版本可控，支持回滚",[245,25880,25881,25884],{},[291,25882,25883],{"align":23710},"生态丰富",[291,25885,25886],{"align":23710},"Docker Hub 上有成千上万的现成镜像可用",[46,25888,25889],{},[49,25890,25891],{},"在Linux上可以几乎实现无性能损失。",[38,25893,25894],{},"docker里的发行版和本机共用Linux内核。",[38,25896,25897],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[46,25899,25900],{},[49,25901,25902],{},"可以快速部署在绝大多数Linux发行版",[38,25904,25905],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[46,25907,25908],{},[49,25909,25910],{},"配置环境简单",[38,25912,25913],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[38,25915,25916],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[46,25918,25919],{},[49,25920,25883],{},[38,25922,25923],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[38,25925,25926],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[63,25928,25930],{"id":25929},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1109,25932,25933,25936,25939,25942],{},[49,25934,25935],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[49,25937,25938],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[49,25940,25941],{},"微服务架构：每个服务一个容器，灵活组合",[49,25943,25944],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":10,"searchDepth":11,"depth":11,"links":25946},[25947,25948,25949,25950,25951,25952],{"id":25658,"depth":1157,"text":25659},{"id":25702,"depth":1157,"text":25703},{"id":25718,"depth":1157,"text":25719},{"id":25783,"depth":1157,"text":25784},{"id":25831,"depth":1157,"text":25832},{"id":25929,"depth":1157,"text":25930},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25650,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25959,"title":25960,"body":25961,"description":10,"extension":14,"meta":26694,"navigation":17,"path":26695,"seo":26696,"stem":26697,"__hash__":26698},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25962,"toc":26689},[25963,25966,25970,25973,25976,25982,25988,25992,26001,26004,26061,26064,26115,26118,26201,26204,26241,26245,26256,26269,26276,26279,26359,26362,26412,26415,26438,26442,26449,26452,26468,26474,26477,26493,26499,26502,26518,26532,26538,26558,26564,26567,26579,26585,26588,26602,26608,26611,26631,26636,26639,26642,26646,26649,26652,26655,26662,26665,26668,26671,26676,26681,26686],[29,25964,25960],{"id":25965},"_2安装docker",[63,25967,25969],{"id":25968},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[38,25971,25972],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[38,25974,25975],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[38,25977,25978],{},[340,25979,25980],{"href":25980,"rel":25981},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23839],[38,25983,25984],{},[340,25985,25986],{"href":25986,"rel":25987},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23839],[21977,25989,25991],{"id":25990},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[38,25993,25994,25995,26000],{},"以下内容根据 ",[340,25996,25999],{"href":25997,"rel":25998},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23839],"官方文档"," 修改而来。",[38,26002,26003],{},"如果你过去安装过 docker，先删掉：",[83,26005,26007],{"className":23796,"code":26006,"language":23798,"meta":10,"style":10},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[88,26008,26009],{"__ignoreMap":10},[91,26010,26011,26013,26016,26019,26022,26025,26028,26031,26034,26037,26040,26043,26046,26049,26052,26055,26058],{"class":93,"line":94},[91,26012,3003],{"class":97},[91,26014,26015],{"class":101}," pkg ",[91,26017,26018],{"class":97},"in",[91,26020,26021],{"class":206}," docker.io",[91,26023,26024],{"class":206}," docker-doc",[91,26026,26027],{"class":206}," docker-compose",[91,26029,26030],{"class":206}," docker-compose-v2",[91,26032,26033],{"class":206}," podman-docker",[91,26035,26036],{"class":206}," containerd",[91,26038,26039],{"class":206}," runc",[91,26041,26042],{"class":101},"; ",[91,26044,26045],{"class":97},"do",[91,26047,26048],{"class":1941}," sudo",[91,26050,26051],{"class":206}," apt-get",[91,26053,26054],{"class":206}," remove",[91,26056,26057],{"class":101}," $pkg; ",[91,26059,26060],{"class":97},"done\n",[38,26062,26063],{},"首先安装依赖和GPG：",[83,26065,26069],{"className":26066,"code":26067,"language":26068,"meta":10,"style":10},"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",[88,26070,26071,26076,26081,26086,26091,26096,26101,26105,26110],{"__ignoreMap":10},[91,26072,26073],{"class":93,"line":94},[91,26074,26075],{},"# Add Docker's official GPG key:\n",[91,26077,26078],{"class":93,"line":11},[91,26079,26080],{},"sudo apt-get update\n",[91,26082,26083],{"class":93,"line":1157},[91,26084,26085],{},"sudo apt-get install ca-certificates curl\n",[91,26087,26088],{"class":93,"line":1172},[91,26089,26090],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[91,26092,26093],{"class":93,"line":1178},[91,26094,26095],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[91,26097,26098],{"class":93,"line":1192},[91,26099,26100],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[91,26102,26103],{"class":93,"line":1198},[91,26104,2378],{"emptyLinePlaceholder":17},[91,26106,26107],{"class":93,"line":1289},[91,26108,26109],{},"# 如果上面这行报错就弄下面这行\n",[91,26111,26112],{"class":93,"line":1295},[91,26113,26114],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[38,26116,26117],{},"信任 Docker 的 GPG 公钥并添加仓库：",[83,26119,26121],{"className":23796,"code":26120,"language":23798,"meta":10,"style":10},"# 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",[88,26122,26123,26128,26134,26151,26184],{"__ignoreMap":10},[91,26124,26125],{"class":93,"line":94},[91,26126,26127],{"class":160},"# Add the repository to Apt sources:\n",[91,26129,26130,26132],{"class":93,"line":11},[91,26131,25100],{"class":150},[91,26133,24653],{"class":150},[91,26135,26136,26139,26142,26145,26148],{"class":93,"line":1157},[91,26137,26138],{"class":206},"  \"deb [arch=$(",[91,26140,26141],{"class":1941},"dpkg",[91,26143,26144],{"class":150}," --print-architecture",[91,26146,26147],{"class":206},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[91,26149,26150],{"class":150},"\\\n",[91,26152,26153,26156,26158,26160,26163,26166,26168,26170,26173,26175,26177,26180,26182],{"class":93,"line":1172},[91,26154,26155],{"class":206},"  \"",[91,26157,25074],{"class":101},[91,26159,660],{"class":150},[91,26161,26162],{"class":206}," \u002Fetc\u002Fos-release",[91,26164,26165],{"class":101}," && ",[91,26167,25100],{"class":150},[91,26169,9703],{"class":206},[91,26171,26172],{"class":101},"$VERSION_CODENAME",[91,26174,353],{"class":206},[91,26176,531],{"class":101},[91,26178,26179],{"class":206},"\" stable\"",[91,26181,25084],{"class":97},[91,26183,24653],{"class":150},[91,26185,26186,26189,26192,26195,26198],{"class":93,"line":1178},[91,26187,26188],{"class":1941},"  sudo",[91,26190,26191],{"class":206}," tee",[91,26193,26194],{"class":206}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[91,26196,26197],{"class":97}," >",[91,26199,26200],{"class":206}," \u002Fdev\u002Fnull\n",[38,26202,26203],{},"最后安装",[83,26205,26207],{"className":23796,"code":26206,"language":23798,"meta":10,"style":10},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[88,26208,26209,26218],{"__ignoreMap":10},[91,26210,26211,26213,26215],{"class":93,"line":94},[91,26212,24551],{"class":1941},[91,26214,26051],{"class":206},[91,26216,26217],{"class":206}," update\n",[91,26219,26220,26222,26224,26226,26229,26232,26235,26238],{"class":93,"line":11},[91,26221,24551],{"class":1941},[91,26223,26051],{"class":206},[91,26225,23808],{"class":206},[91,26227,26228],{"class":206}," docker-ce",[91,26230,26231],{"class":206}," docker-ce-cli",[91,26233,26234],{"class":206}," containerd.io",[91,26236,26237],{"class":206}," docker-buildx-plugin",[91,26239,26240],{"class":206}," docker-compose-plugin\n",[21977,26242,26244],{"id":26243},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[38,26246,26247,26248,26251,26252,26255],{},"查看自己自己包管理工具版本（dnf是 ",[251,26249,26250],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[251,26253,26254],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[83,26257,26259],{"className":23796,"code":26258,"language":23798,"meta":10,"style":10},"dnf --version\n",[88,26260,26261],{"__ignoreMap":10},[91,26262,26263,26266],{"class":93,"line":94},[91,26264,26265],{"class":1941},"dnf",[91,26267,26268],{"class":150}," --version\n",[38,26270,25994,26271,26275],{},[340,26272,25999],{"href":26273,"rel":26274},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23839]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[38,26277,26278],{},"如果你之前安装过 docker，请先删掉",[83,26280,26282],{"className":23796,"code":26281,"language":23798,"meta":10,"style":10},"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",[88,26283,26284,26298,26305,26312,26319,26326,26333,26340,26347,26354],{"__ignoreMap":10},[91,26285,26286,26288,26291,26293,26296],{"class":93,"line":94},[91,26287,24551],{"class":1941},[91,26289,26290],{"class":206}," dnf",[91,26292,26054],{"class":206},[91,26294,26295],{"class":206}," docker",[91,26297,24653],{"class":150},[91,26299,26300,26303],{"class":93,"line":11},[91,26301,26302],{"class":206},"                  docker-client",[91,26304,24653],{"class":150},[91,26306,26307,26310],{"class":93,"line":1157},[91,26308,26309],{"class":206},"                  docker-client-latest",[91,26311,24653],{"class":150},[91,26313,26314,26317],{"class":93,"line":1172},[91,26315,26316],{"class":206},"                  docker-common",[91,26318,24653],{"class":150},[91,26320,26321,26324],{"class":93,"line":1178},[91,26322,26323],{"class":206},"                  docker-latest",[91,26325,24653],{"class":150},[91,26327,26328,26331],{"class":93,"line":1192},[91,26329,26330],{"class":206},"                  docker-latest-logrotate",[91,26332,24653],{"class":150},[91,26334,26335,26338],{"class":93,"line":1198},[91,26336,26337],{"class":206},"                  docker-logrotate",[91,26339,24653],{"class":150},[91,26341,26342,26345],{"class":93,"line":1289},[91,26343,26344],{"class":206},"                  docker-selinux",[91,26346,24653],{"class":150},[91,26348,26349,26352],{"class":93,"line":1295},[91,26350,26351],{"class":206},"                  docker-engine-selinux",[91,26353,24653],{"class":150},[91,26355,26356],{"class":93,"line":1307},[91,26357,26358],{"class":206},"                  docker-engine\n",[38,26360,26361],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[83,26363,26365],{"className":23796,"code":26364,"language":23798,"meta":10,"style":10},"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",[88,26366,26367,26381,26396],{"__ignoreMap":10},[91,26368,26369,26371,26373,26376,26378],{"class":93,"line":94},[91,26370,24551],{"class":1941},[91,26372,26290],{"class":206},[91,26374,26375],{"class":150}," -y",[91,26377,23808],{"class":206},[91,26379,26380],{"class":206}," dnf-plugins-core\n",[91,26382,26383,26385,26387,26390,26393],{"class":93,"line":11},[91,26384,24551],{"class":1941},[91,26386,26290],{"class":206},[91,26388,26389],{"class":206}," config-manager",[91,26391,26392],{"class":206}," addrepo",[91,26394,26395],{"class":150}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[91,26397,26398,26400,26403,26406,26409],{"class":93,"line":1157},[91,26399,24551],{"class":1941},[91,26401,26402],{"class":206}," sed",[91,26404,26405],{"class":150}," -i",[91,26407,26408],{"class":206}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[91,26410,26411],{"class":206}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[38,26413,26414],{},"最后安装：",[83,26416,26418],{"className":23796,"code":26417,"language":23798,"meta":10,"style":10},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[88,26419,26420],{"__ignoreMap":10},[91,26421,26422,26424,26426,26428,26430,26432,26434,26436],{"class":93,"line":94},[91,26423,24551],{"class":1941},[91,26425,26290],{"class":206},[91,26427,23808],{"class":206},[91,26429,26228],{"class":206},[91,26431,26231],{"class":206},[91,26433,26234],{"class":206},[91,26435,26237],{"class":206},[91,26437,26240],{"class":206},[63,26439,26441],{"id":26440},"_22配置环境","2.2.配置环境",[21977,26443,26445,26448],{"id":26444},"_221检查-docker-服务状态",[251,26446,26447],{},"2.2.1.检查 Docker 服务状态"," ：",[38,26450,26451],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[83,26453,26455],{"className":23796,"code":26454,"language":23798,"meta":10,"style":10},"systemctl status docker\n",[88,26456,26457],{"__ignoreMap":10},[91,26458,26459,26462,26465],{"class":93,"line":94},[91,26460,26461],{"class":1941},"systemctl",[91,26463,26464],{"class":206}," status",[91,26466,26467],{"class":206}," docker\n",[21977,26469,26471,26448],{"id":26470},"_222启动-docker-服务",[251,26472,26473],{},"2.2.2.启动 Docker 服务",[38,26475,26476],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[83,26478,26480],{"className":23796,"code":26479,"language":23798,"meta":10,"style":10},"sudo systemctl start docker\n",[88,26481,26482],{"__ignoreMap":10},[91,26483,26484,26486,26489,26491],{"class":93,"line":94},[91,26485,24551],{"class":1941},[91,26487,26488],{"class":206}," systemctl",[91,26490,4162],{"class":206},[91,26492,26467],{"class":206},[21977,26494,26496,26448],{"id":26495},"_223设置-docker-开机自启",[251,26497,26498],{},"2.2.3.设置 Docker 开机自启",[38,26500,26501],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[83,26503,26505],{"className":23796,"code":26504,"language":23798,"meta":10,"style":10},"sudo systemctl enable docker\n",[88,26506,26507],{"__ignoreMap":10},[91,26508,26509,26511,26513,26516],{"class":93,"line":94},[91,26510,24551],{"class":1941},[91,26512,26488],{"class":206},[91,26514,26515],{"class":206}," enable",[91,26517,26467],{"class":206},[21977,26519,26521,13774,26524,13774,26529,26448],{"id":26520},"_224将用户添加到-docker-组",[251,26522,26523],{},"2.2.4.将用户添加到",[251,26525,26526],{},[88,26527,26528],{},"docker",[251,26530,26531],{},"组",[38,26533,26534,26535,26537],{},"使用以下命令将当前用户添加到 ",[88,26536,26528],{}," 组：",[83,26539,26541],{"className":23796,"code":26540,"language":23798,"meta":10,"style":10},"sudo usermod -aG docker $USER\n",[88,26542,26543],{"__ignoreMap":10},[91,26544,26545,26547,26550,26553,26555],{"class":93,"line":94},[91,26546,24551],{"class":1941},[91,26548,26549],{"class":206}," usermod",[91,26551,26552],{"class":150}," -aG",[91,26554,26295],{"class":206},[91,26556,26557],{"class":101}," $USER\n",[21977,26559,26561,26448],{"id":26560},"_225退出并重新登录",[251,26562,26563],{},"2.2.5.退出并重新登录",[38,26565,26566],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[83,26568,26570],{"className":23796,"code":26569,"language":23798,"meta":10,"style":10},"newgrp docker\n",[88,26571,26572],{"__ignoreMap":10},[91,26573,26574,26577],{"class":93,"line":94},[91,26575,26576],{"class":1941},"newgrp",[91,26578,26467],{"class":206},[21977,26580,26582,26448],{"id":26581},"_226重新启动-docker-服务如果需要",[251,26583,26584],{},"2.2.6.重新启动 Docker 服务（如果需要）",[38,26586,26587],{},"确保 Docker 服务正在运行，可以使用以下命令：",[83,26589,26590],{"className":23796,"code":26479,"language":23798,"meta":10,"style":10},[88,26591,26592],{"__ignoreMap":10},[91,26593,26594,26596,26598,26600],{"class":93,"line":94},[91,26595,24551],{"class":1941},[91,26597,26488],{"class":206},[91,26599,4162],{"class":206},[91,26601,26467],{"class":206},[21977,26603,26605,26448],{"id":26604},"_227重启电脑后检查-docker-服务状态",[251,26606,26607],{},"2.2.7.重启电脑后检查 Docker 服务状态",[38,26609,26610],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[83,26612,26614],{"className":23796,"code":26613,"language":23798,"meta":10,"style":10},"sudo reboot\nsystemctl status docker\n",[88,26615,26616,26623],{"__ignoreMap":10},[91,26617,26618,26620],{"class":93,"line":94},[91,26619,24551],{"class":1941},[91,26621,26622],{"class":206}," reboot\n",[91,26624,26625,26627,26629],{"class":93,"line":11},[91,26626,26461],{"class":1941},[91,26628,26464],{"class":206},[91,26630,26467],{"class":206},[38,26632,26633],{},[1440,26634],{"alt":10,"src":26635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[38,26637,26638],{},"第三行显示enabled说明开机自启动成功",[38,26640,26641],{},"按q退出",[63,26643,26645],{"id":26644},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[38,26647,26648],{},"优先使用linux来使用docker是比较好的",[38,26650,26651],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[38,26653,26654],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[38,26656,26657,26658],{},"官方下载安装:",[340,26659,26660],{"href":26660,"rel":26661},"https:\u002F\u002Fwww.docker.com\u002F",[23839],[38,26663,26664],{},"Windows的Docker显卡直通与USB直通:",[38,26666,26667],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[38,26669,26670],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[38,26672,26673],{},[1440,26674],{"alt":10,"src":26675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[38,26677,26678],{},[1440,26679],{"alt":10,"src":26680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[38,26682,26683],{},[1440,26684],{"alt":10,"src":26685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5105,26687,26688],{},"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":10,"searchDepth":11,"depth":11,"links":26690},[26691,26692,26693],{"id":25968,"depth":1157,"text":25969},{"id":26440,"depth":1157,"text":26441},{"id":26644,"depth":1157,"text":26645},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25960,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26700,"title":26701,"body":26702,"description":26709,"extension":14,"meta":27402,"navigation":17,"path":27403,"seo":27404,"stem":27405,"__hash__":27406},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26703,"toc":27396},[26704,26707,26710,26714,26719,26724,26727,26755,26760,26769,26772,26777,26781,26788,26793,26799,26803,26806,26810,26815,26907,26912,26930,26935,26956,26961,26977,26981,26986,27015,27020,27066,27071,27115,27123,27140,27145,27161,27166,27180,27183,27186,27189,27192,27221,27224,27229,27233,27236,27239,27245,27248,27251,27254,27316,27323,27328,27331,27349,27353,27356,27373,27376,27379,27393],[29,26705,26701],{"id":26706},"_3docker直通",[38,26708,26709],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[63,26711,26713],{"id":26712},"_31usb直通","3.1.USB直通",[38,26715,26716],{},[1440,26717],{"alt":10,"src":26718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[46,26720,26721],{},[49,26722,26723],{},"方法一(不是很推荐新手)：",[38,26725,26726],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[83,26728,26730],{"className":23796,"code":26729,"language":23798,"meta":10,"style":10},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[88,26731,26732,26740,26745],{"__ignoreMap":10},[91,26733,26734,26737],{"class":93,"line":94},[91,26735,26736],{"class":1941},"ls",[91,26738,26739],{"class":206}," \u002Fdev\n",[91,26741,26742],{"class":93,"line":11},[91,26743,26744],{"class":160},"#例如\n",[91,26746,26747,26750,26752],{"class":93,"line":1157},[91,26748,26749],{"class":101},"--device",[91,26751,147],{"class":97},[91,26753,26754],{"class":206},"\u002Fdev\u002Ftty_USB0\n",[46,26756,26757],{"start":11},[49,26758,26759],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[83,26761,26763],{"className":23796,"code":26762,"language":23798,"meta":10,"style":10},"--privileged\n",[88,26764,26765],{"__ignoreMap":10},[91,26766,26767],{"class":93,"line":94},[91,26768,26762],{"class":1941},[38,26770,26771],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[38,26773,26774],{},[1440,26775],{"alt":10,"src":26776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[63,26778,26780],{"id":26779},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[38,26782,26783,26784,26787],{},"NVIDIA Container Toolkit使用户 ",[251,26785,26786],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[38,26789,26790],{},[1440,26791],{"alt":10,"src":26792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[38,26794,26795],{},[340,26796,26797],{"href":26797,"rel":26798},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23839],[21977,26800,26802],{"id":26801},"_321安装","3.2.1.安装",[38,26804,26805],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22889,26807,26809],{"id":26808},"_3211ubuntu","3.2.1.1.Ubuntu",[46,26811,26812],{},[49,26813,26814],{},"配置存储库 并更新",[83,26816,26818],{"className":23796,"code":26817,"language":23798,"meta":10,"style":10},"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",[88,26819,26820,26849,26869,26881,26893,26899],{"__ignoreMap":10},[91,26821,26822,26825,26828,26831,26833,26835,26838,26841,26844,26847],{"class":93,"line":94},[91,26823,26824],{"class":1941},"curl",[91,26826,26827],{"class":150}," -fsSL",[91,26829,26830],{"class":206}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[91,26832,25084],{"class":97},[91,26834,26048],{"class":1941},[91,26836,26837],{"class":206}," gpg",[91,26839,26840],{"class":150}," --dearmor",[91,26842,26843],{"class":150}," -o",[91,26845,26846],{"class":206}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[91,26848,24653],{"class":150},[91,26850,26851,26854,26856,26859,26862,26865,26867],{"class":93,"line":11},[91,26852,26853],{"class":101},"  && ",[91,26855,26824],{"class":1941},[91,26857,26858],{"class":150}," -s",[91,26860,26861],{"class":150}," -L",[91,26863,26864],{"class":206}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[91,26866,25084],{"class":97},[91,26868,24653],{"class":150},[91,26870,26871,26874,26877,26879],{"class":93,"line":1157},[91,26872,26873],{"class":1941},"    sed",[91,26875,26876],{"class":206}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[91,26878,25084],{"class":97},[91,26880,24653],{"class":150},[91,26882,26883,26886,26888,26891],{"class":93,"line":1172},[91,26884,26885],{"class":1941},"    sudo",[91,26887,26191],{"class":206},[91,26889,26890],{"class":206}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[91,26892,24653],{"class":150},[91,26894,26895,26897],{"class":93,"line":1178},[91,26896,26853],{"class":101},[91,26898,26150],{"class":150},[91,26900,26901,26903,26905],{"class":93,"line":1192},[91,26902,26885],{"class":1941},[91,26904,26051],{"class":206},[91,26906,26217],{"class":206},[46,26908,26909],{"start":11},[49,26910,26911],{},"安装nvidia-docker2",[83,26913,26915],{"className":23796,"code":26914,"language":23798,"meta":10,"style":10},"sudo apt-get install -y nvidia-docker2\n",[88,26916,26917],{"__ignoreMap":10},[91,26918,26919,26921,26923,26925,26927],{"class":93,"line":94},[91,26920,24551],{"class":1941},[91,26922,26051],{"class":206},[91,26924,23808],{"class":206},[91,26926,26375],{"class":150},[91,26928,26929],{"class":206}," nvidia-docker2\n",[46,26931,26932],{"start":1157},[49,26933,26934],{},"使用nvidia-ctk命令配置container runtime",[83,26936,26938],{"className":23796,"code":26937,"language":23798,"meta":10,"style":10},"sudo nvidia-ctk runtime configure --runtime=docker\n",[88,26939,26940],{"__ignoreMap":10},[91,26941,26942,26944,26947,26950,26953],{"class":93,"line":94},[91,26943,24551],{"class":1941},[91,26945,26946],{"class":206}," nvidia-ctk",[91,26948,26949],{"class":206}," runtime",[91,26951,26952],{"class":206}," configure",[91,26954,26955],{"class":150}," --runtime=docker\n",[46,26957,26958],{"start":1172},[49,26959,26960],{},"重启docker服务:",[83,26962,26964],{"className":23796,"code":26963,"language":23798,"meta":10,"style":10},"sudo systemctl restart docker\n",[88,26965,26966],{"__ignoreMap":10},[91,26967,26968,26970,26972,26975],{"class":93,"line":94},[91,26969,24551],{"class":1941},[91,26971,26488],{"class":206},[91,26973,26974],{"class":206}," restart",[91,26976,26467],{"class":206},[22889,26978,26980],{"id":26979},"_3212fedora","3.2.1.2.Fedora",[46,26982,26983],{},[49,26984,26985],{},"配置存储库",[83,26987,26989],{"className":23796,"code":26988,"language":23798,"meta":10,"style":10},"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",[88,26990,26991,27006],{"__ignoreMap":10},[91,26992,26993,26995,26997,26999,27002,27004],{"class":93,"line":94},[91,26994,26824],{"class":1941},[91,26996,26858],{"class":150},[91,26998,26861],{"class":150},[91,27000,27001],{"class":206}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[91,27003,25084],{"class":97},[91,27005,24653],{"class":150},[91,27007,27008,27010,27012],{"class":93,"line":11},[91,27009,24551],{"class":1941},[91,27011,26191],{"class":206},[91,27013,27014],{"class":206}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[46,27016,27017],{"start":11},[49,27018,27019],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[83,27021,27023],{"className":23796,"code":27022,"language":23798,"meta":10,"style":10},"# 如果是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",[88,27024,27025,27030,27044,27048,27053],{"__ignoreMap":10},[91,27026,27027],{"class":93,"line":94},[91,27028,27029],{"class":160},"# 如果是RHEL或者Rocky（DNF4）\n",[91,27031,27032,27034,27036,27038,27041],{"class":93,"line":11},[91,27033,24551],{"class":1941},[91,27035,26290],{"class":206},[91,27037,26389],{"class":206},[91,27039,27040],{"class":150}," --add-repo",[91,27042,27043],{"class":206}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[91,27045,27046],{"class":93,"line":1157},[91,27047,2378],{"emptyLinePlaceholder":17},[91,27049,27050],{"class":93,"line":1172},[91,27051,27052],{"class":160},"# 如果是Feodra41+（DNF5）\n",[91,27054,27055,27057,27059,27061,27063],{"class":93,"line":1178},[91,27056,24551],{"class":1941},[91,27058,26290],{"class":206},[91,27060,26389],{"class":206},[91,27062,26392],{"class":206},[91,27064,27065],{"class":150}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[46,27067,27068],{"start":1157},[49,27069,27070],{},"安装NVIDIA Container Toolki包",[83,27072,27074],{"className":23796,"code":27073,"language":23798,"meta":10,"style":10},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[88,27075,27076,27081,27094,27098,27103],{"__ignoreMap":10},[91,27077,27078],{"class":93,"line":94},[91,27079,27080],{"class":160},"# 如果是RHEL或者Rocky\n",[91,27082,27083,27085,27087,27089,27091],{"class":93,"line":11},[91,27084,24551],{"class":1941},[91,27086,26290],{"class":206},[91,27088,23808],{"class":206},[91,27090,26375],{"class":150},[91,27092,27093],{"class":206}," nvidia-container-toolkit\n",[91,27095,27096],{"class":93,"line":1157},[91,27097,2378],{"emptyLinePlaceholder":17},[91,27099,27100],{"class":93,"line":1172},[91,27101,27102],{"class":160},"# 如果是Fedora\n",[91,27104,27105,27107,27109,27111,27113],{"class":93,"line":1178},[91,27106,24551],{"class":1941},[91,27108,26290],{"class":206},[91,27110,23808],{"class":206},[91,27112,26375],{"class":150},[91,27114,27093],{"class":206},[46,27116,27117],{"start":1172},[49,27118,27119,27120,27122],{},"安装nvidia-docker2 ： 在Fedora上使用",[88,27121,26265],{},"进行安装",[83,27124,27126],{"className":23796,"code":27125,"language":23798,"meta":10,"style":10},"sudo dnf install -y nvidia-docker2\n",[88,27127,27128],{"__ignoreMap":10},[91,27129,27130,27132,27134,27136,27138],{"class":93,"line":94},[91,27131,24551],{"class":1941},[91,27133,26290],{"class":206},[91,27135,23808],{"class":206},[91,27137,26375],{"class":150},[91,27139,26929],{"class":206},[46,27141,27142],{"start":1178},[49,27143,27144],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[83,27146,27147],{"className":23796,"code":26937,"language":23798,"meta":10,"style":10},[88,27148,27149],{"__ignoreMap":10},[91,27150,27151,27153,27155,27157,27159],{"class":93,"line":94},[91,27152,24551],{"class":1941},[91,27154,26946],{"class":206},[91,27156,26949],{"class":206},[91,27158,26952],{"class":206},[91,27160,26955],{"class":150},[46,27162,27163],{"start":1192},[49,27164,27165],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[83,27167,27168],{"className":23796,"code":26963,"language":23798,"meta":10,"style":10},[88,27169,27170],{"__ignoreMap":10},[91,27171,27172,27174,27176,27178],{"class":93,"line":94},[91,27173,24551],{"class":1941},[91,27175,26488],{"class":206},[91,27177,26974],{"class":206},[91,27179,26467],{"class":206},[38,27181,27182],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[38,27184,27185],{},"方法：",[38,27187,27188],{},"1️⃣nvidia-smi",[38,27190,27191],{},"2️⃣运行nvidia cuda 容器进行测试",[83,27193,27195],{"className":23796,"code":27194,"language":23798,"meta":10,"style":10},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[88,27196,27197],{"__ignoreMap":10},[91,27198,27199,27201,27203,27206,27209,27212,27215,27218],{"class":93,"line":94},[91,27200,24551],{"class":1941},[91,27202,26295],{"class":206},[91,27204,27205],{"class":206}," run",[91,27207,27208],{"class":150}," --rm",[91,27210,27211],{"class":150}," --gpus",[91,27213,27214],{"class":206}," all",[91,27216,27217],{"class":206}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[91,27219,27220],{"class":206}," nvidia-smi\n",[38,27222,27223],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[38,27225,27226],{},[1440,27227],{"alt":10,"src":27228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[63,27230,27232],{"id":27231},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[38,27234,27235],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[38,27237,27238],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[38,27240,27241],{},[340,27242,27243],{"href":27243,"rel":27244},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23839],[38,27246,27247],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[38,27249,27250],{},"我们只需要找到对应的Docker镜像当底包即可。",[38,27252,27253],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[239,27255,27256,27272],{},[242,27257,27258],{},[245,27259,27260,27263,27266,27269],{},[248,27261,27262],{"align":23710},"镜像类型",[248,27264,27265],{"align":23710},"适用场景",[248,27267,27268],{"align":23710},"示例标签",[248,27270,27271],{"align":23710},"大小",[286,27273,27274,27288,27302],{},[245,27275,27276,27279,27282,27285],{},[291,27277,27278],{"align":23710},"base",[291,27280,27281],{"align":23710},"仅需 CUDA 运行时库",[291,27283,27284],{"align":23710},"12.4.0-base-ubuntu22.04",[291,27286,27287],{"align":23710},"~240MB",[245,27289,27290,27293,27296,27299],{},[291,27291,27292],{"align":23710},"runtime",[291,27294,27295],{"align":23710},"部署编译后的应用（含数学库）",[291,27297,27298],{"align":23710},"12.4.0-runtime-ubuntu22.04",[291,27300,27301],{"align":23710},"~2GB",[245,27303,27304,27307,27310,27313],{},[291,27305,27306],{"align":23710},"devel",[291,27308,27309],{"align":23710},"开发环境（含编译工具）",[291,27311,27312],{"align":23710},"12.4.0-devel-ubuntu22.04",[291,27314,27315],{"align":23710},"~3GB",[38,27317,27318,27319,27322],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[88,27320,27321],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[38,27324,27325],{},[1440,27326],{"alt":10,"src":27327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[38,27329,27330],{},"在dockerfile里就可以开头这么写：",[83,27332,27334],{"className":23796,"code":27333,"language":23798,"meta":10,"style":10},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[88,27335,27336,27341],{"__ignoreMap":10},[91,27337,27338],{"class":93,"line":94},[91,27339,27340],{"class":160},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[91,27342,27343,27346],{"class":93,"line":11},[91,27344,27345],{"class":1941},"FROM",[91,27347,27348],{"class":206}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[63,27350,27352],{"id":27351},"_34配置以太网","3.4.配置以太网",[38,27354,27355],{},"指定网络模式",[83,27357,27359],{"className":23796,"code":27358,"language":23798,"meta":10,"style":10},"--net=host \\\n",[88,27360,27361],{"__ignoreMap":10},[91,27362,27363,27366,27368,27371],{"class":93,"line":94},[91,27364,27365],{"class":101},"--net",[91,27367,147],{"class":97},[91,27369,27370],{"class":206},"host",[91,27372,24653],{"class":1941},[38,27374,27375],{},"启动参数里加上这行即可。具体在下方",[38,27377,27378],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1109,27380,27381,27384,27387,27390],{},[49,27382,27383],{},"--net=bridge:默认选项，表示连接到默认的网桥",[49,27385,27386],{},"--net=host:容器使用宿主机的网络",[49,27388,27389],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[49,27391,27392],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5105,27394,27395],{},"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":10,"searchDepth":11,"depth":11,"links":27397},[27398,27399,27400,27401],{"id":26712,"depth":1157,"text":26713},{"id":26779,"depth":1157,"text":26780},{"id":27231,"depth":1157,"text":27232},{"id":27351,"depth":1157,"text":27352},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26701,"description":26709},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27408,"title":27409,"body":27410,"description":27417,"extension":14,"meta":27423,"navigation":17,"path":27424,"seo":27425,"stem":27426,"__hash__":27427},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27411,"toc":27421},[27412,27415,27418],[29,27413,27409],{"id":27414},"_4dockerhub换源",[38,27416,27417],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[38,27419,27420],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":10,"searchDepth":11,"depth":11,"links":27422},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27409,"description":27417},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27429,"title":27430,"body":27431,"description":10,"extension":14,"meta":28443,"navigation":17,"path":28444,"seo":28445,"stem":28446,"__hash__":28447},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27432,"toc":28438},[27433,27436,27440,27446,27450,27453,27793,27796,27799,27802,27807,27812,27815,27818,27821,27824,27843,27846,27857,27863,28045,28055,28071,28334,28336,28361,28376,28385,28435],[29,27434,27430],{"id":27435},"_5docker命令学习",[63,27437,27439],{"id":27438},"_51参考文档","5.1.参考文档",[38,27441,27442],{},[340,27443,27444],{"href":27444,"rel":27445},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23839],[63,27447,27449],{"id":27448},"_52常用命令","5.2.常用命令",[38,27451,27452],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[239,27454,27455,27468],{},[242,27456,27457],{},[245,27458,27459,27462,27465],{},[248,27460,27461],{"align":23710},"命令",[248,27463,27464],{"align":23710},"描述",[248,27466,27467],{"align":23710},"示例",[286,27469,27470,27481,27492,27503,27514,27525,27536,27547,27557,27568,27579,27590,27600,27611,27622,27633,27643,27653,27663,27673,27684,27695,27706,27717,27728,27739,27749,27760,27771,27782],{},[245,27471,27472,27475,27478],{},[291,27473,27474],{"align":23710},"docker run",[291,27476,27477],{"align":23710},"创建并启动一个新的容器。",[291,27479,27480],{"align":23710},"docker run -it ubuntu bash",[245,27482,27483,27486,27489],{},[291,27484,27485],{"align":23710},"docker build",[291,27487,27488],{"align":23710},"通过指定的 Dockerfile 创建一个新的镜像。",[291,27490,27491],{"align":23710},"docker build -t myimage .",[245,27493,27494,27497,27500],{},[291,27495,27496],{"align":23710},"docker pull",[291,27498,27499],{"align":23710},"从 Docker 仓库拉取镜像。",[291,27501,27502],{"align":23710},"docker pull ubuntu",[245,27504,27505,27508,27511],{},[291,27506,27507],{"align":23710},"docker push",[291,27509,27510],{"align":23710},"将本地镜像推送到 Docker 仓库。",[291,27512,27513],{"align":23710},"docker push myimage",[245,27515,27516,27519,27522],{},[291,27517,27518],{"align":23710},"docker stop",[291,27520,27521],{"align":23710},"停止一个正在运行的容器。",[291,27523,27524],{"align":23710},"docker stop container_id",[245,27526,27527,27530,27533],{},[291,27528,27529],{"align":23710},"docker start",[291,27531,27532],{"align":23710},"启动一个已经存在的容器。",[291,27534,27535],{"align":23710},"docker start container_id",[245,27537,27538,27541,27544],{},[291,27539,27540],{"align":23710},"docker restart",[291,27542,27543],{"align":23710},"重新启动容器。",[291,27545,27546],{"align":23710},"docker restart container_id",[245,27548,27549,27552,27555],{},[291,27550,27551],{"align":23710},"docker ps",[291,27553,27554],{"align":23710},"列出当前正在运行的容器。",[291,27556,27551],{"align":23710},[245,27558,27559,27562,27565],{},[291,27560,27561],{"align":23710},"docker rm",[291,27563,27564],{"align":23710},"删除一个或多个停止的容器。",[291,27566,27567],{"align":23710},"docker rm container_id",[245,27569,27570,27573,27576],{},[291,27571,27572],{"align":23710},"docker exec",[291,27574,27575],{"align":23710},"在一个正在运行的容器中执行命令。",[291,27577,27578],{"align":23710},"docker exec -it container_id bash",[245,27580,27581,27584,27587],{},[291,27582,27583],{"align":23710},"docker logs",[291,27585,27586],{"align":23710},"查看容器的日志输出。",[291,27588,27589],{"align":23710},"docker logs container_id",[245,27591,27592,27595,27598],{},[291,27593,27594],{"align":23710},"docker images",[291,27596,27597],{"align":23710},"列出本地所有镜像。",[291,27599,27594],{"align":23710},[245,27601,27602,27605,27608],{},[291,27603,27604],{"align":23710},"docker rmi",[291,27606,27607],{"align":23710},"删除一个或多个镜像。",[291,27609,27610],{"align":23710},"docker rmi myimage",[245,27612,27613,27616,27619],{},[291,27614,27615],{"align":23710},"docker network",[291,27617,27618],{"align":23710},"管理 Docker 网络。",[291,27620,27621],{"align":23710},"docker network ls",[245,27623,27624,27627,27630],{},[291,27625,27626],{"align":23710},"docker volume",[291,27628,27629],{"align":23710},"管理 Docker 数据卷。",[291,27631,27632],{"align":23710},"docker volume ls",[245,27634,27635,27638,27641],{},[291,27636,27637],{"align":23710},"docker-compose up",[291,27639,27640],{"align":23710},"启动 docker-compose.yml 中定义的所有服务。",[291,27642,27637],{"align":23710},[245,27644,27645,27648,27651],{},[291,27646,27647],{"align":23710},"docker-compose down",[291,27649,27650],{"align":23710},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[291,27652,27647],{"align":23710},[245,27654,27655,27658,27661],{},[291,27656,27657],{"align":23710},"docker info",[291,27659,27660],{"align":23710},"显示 Docker 系统的详细信息。",[291,27662,27657],{"align":23710},[245,27664,27665,27668,27671],{},[291,27666,27667],{"align":23710},"docker stats",[291,27669,27670],{"align":23710},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[291,27672,27667],{"align":23710},[245,27674,27675,27678,27681],{},[291,27676,27677],{"align":23710},"docker inspect",[291,27679,27680],{"align":23710},"查看容器或镜像的详细信息（JSON 格式）。",[291,27682,27683],{"align":23710},"docker inspect container_id",[245,27685,27686,27689,27692],{},[291,27687,27688],{"align":23710},"docker save",[291,27690,27691],{"align":23710},"将一个镜像保存为 tar 文件。",[291,27693,27694],{"align":23710},"docker save -o myimage.tar myimage",[245,27696,27697,27700,27703],{},[291,27698,27699],{"align":23710},"docker load",[291,27701,27702],{"align":23710},"从 tar 文件中加载镜像。",[291,27704,27705],{"align":23710},"docker load -i myimage.tar",[245,27707,27708,27711,27714],{},[291,27709,27710],{"align":23710},"docker tag",[291,27712,27713],{"align":23710},"为镜像添加标签（tag）。",[291,27715,27716],{"align":23710},"docker tag myimage myimage:v1",[245,27718,27719,27722,27725],{},[291,27720,27721],{"align":23710},"docker buildx build",[291,27723,27724],{"align":23710},"使用 Buildx 构建多架构镜像。",[291,27726,27727],{"align":23710},"docker buildx build -t myimage .",[245,27729,27730,27733,27736],{},[291,27731,27732],{"align":23710},"docker buildx create",[291,27734,27735],{"align":23710},"创建一个新的 Buildx 构建实例。",[291,27737,27738],{"align":23710},"docker buildx create –use",[245,27740,27741,27744,27747],{},[291,27742,27743],{"align":23710},"docker buildx ls",[291,27745,27746],{"align":23710},"列出所有可用的 Buildx 构建实例。",[291,27748,27743],{"align":23710},[245,27750,27751,27754,27757],{},[291,27752,27753],{"align":23710},"docker buildx use",[291,27755,27756],{"align":23710},"设置当前的 Buildx 构建实例。",[291,27758,27759],{"align":23710},"docker buildx use mybuilder",[245,27761,27762,27765,27768],{},[291,27763,27764],{"align":23710},"docker buildx bake",[291,27766,27767],{"align":23710},"使用 Bake 文件批量构建镜像。",[291,27769,27770],{"align":23710},"docker buildx bake -f bake.hcl",[245,27772,27773,27776,27779],{},[291,27774,27775],{"align":23710},"docker buildx build –push",[291,27777,27778],{"align":23710},"构建镜像并推送到镜像仓库。",[291,27780,27781],{"align":23710},"docker buildx build –push -t myimage .",[245,27783,27784,27787,27790],{},[291,27785,27786],{"align":23710},"docker buildx build –platform",[291,27788,27789],{"align":23710},"构建镜像并为多个平台生成支持。",[291,27791,27792],{"align":23710},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[38,27794,27795],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[38,27797,27798],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[38,27800,27801],{},"docker images 可以查看已经下载的镜像",[38,27803,27804],{},[1440,27805],{"alt":10,"src":27806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[38,27808,27809],{},[251,27810,27811],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[38,27813,27814],{},"docker rmi $(docker images -q) 删除所有的镜像",[38,27816,27817],{},"docker container logs 查看容器日志",[38,27819,27820],{},"docker top 查看容器里的进程",[38,27822,27823],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[83,27825,27827],{"className":23796,"code":27826,"language":23798,"meta":10,"style":10},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[88,27828,27829],{"__ignoreMap":10},[91,27830,27831,27834,27837,27840],{"class":93,"line":94},[91,27832,27833],{"class":1941},"如：docker",[91,27835,27836],{"class":206}," cp",[91,27838,27839],{"class":206}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[91,27841,27842],{"class":206}," \u002Fmydata\u002Fnginx\n",[38,27844,27845],{},"docker run时在启动容器的时候会有几个常用的选项：",[1109,27847,27848,27851,27854],{},[49,27849,27850],{},"-d选项：表示后台运行",[49,27852,27853],{},"-P选项：随机端口映射",[49,27855,27856],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[63,27858,27860],{"id":27859},"_53run命令的参数非常重要",[251,27861,27862],{},"5.3.run命令的参数（非常重要）",[239,27864,27865,27878],{},[242,27866,27867],{},[245,27868,27869,27872,27875],{},[248,27870,27871],{"align":23710},"参数\u002F配置",[248,27873,27874],{"align":23710},"功能说明",[248,27876,27877],{"align":23710},"重要性与参考依据",[286,27879,27880,27891,27902,27913,27924,27935,27946,27957,27968,27979,27990,28001,28012,28023,28034],{},[245,27881,27882,27885,27888],{},[291,27883,27884],{"align":23710},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[291,27886,27887],{"align":23710},"指定容器名称，便于后续管理",[291,27889,27890],{"align":23710},"替代随机生成的容器名。",[245,27892,27893,27896,27899],{},[291,27894,27895],{"align":23710},"–gpus all",[291,27897,27898],{"align":23710},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[291,27900,27901],{"align":23710},"用于CUDA加速等GPU依赖任务。",[245,27903,27904,27907,27910],{},[291,27905,27906],{"align":23710},"-e NVIDIA_DRIVER_CAPABILITIES=all",[291,27908,27909],{"align":23710},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[291,27911,27912],{"align":23710},"确保容器内GPU功能完整67。",[245,27914,27915,27918,27921],{},[291,27916,27917],{"align":23710},"-dit",[291,27919,27920],{"align":23710},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[291,27922,27923],{"align":23710},"允许容器在后台运行并支持交互操作。",[245,27925,27926,27929,27932],{},[291,27927,27928],{"align":23710},"–privileged",[291,27930,27931],{"align":23710},"赋予容器完全主机权限（可访问设备、内核模块等）",[291,27933,27934],{"align":23710},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[245,27936,27937,27940,27943],{},[291,27938,27939],{"align":23710},"–net=host",[291,27941,27942],{"align":23710},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[291,27944,27945],{"align":23710},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[245,27947,27948,27951,27954],{},[291,27949,27950],{"align":23710},"–group-add audio–group-add video–group-add dialout",[291,27952,27953],{"align":23710},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[291,27955,27956],{"align":23710},"避免权限问题（如避免无法调用摄像头、麦克风）。",[245,27958,27959,27962,27965],{},[291,27960,27961],{"align":23710},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[291,27963,27964],{"align":23710},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[291,27966,27967],{"align":23710},"支持容器内运行图形界面应用（如OpenCV可视化）。",[245,27969,27970,27973,27976],{},[291,27971,27972],{"align":23710},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[291,27974,27975],{"align":23710},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[291,27977,27978],{"align":23710},"实现容器内图形显示。",[245,27980,27981,27984,27987],{},[291,27982,27983],{"align":23710},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[291,27985,27986],{"align":23710},"挂载X11认证文件（只读）",[291,27988,27989],{"align":23710},"确保容器有权连接宿主机显示服务。",[245,27991,27992,27995,27998],{},[291,27993,27994],{"align":23710},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[291,27996,27997],{"align":23710},"挂载Wayland显示协议相关目录",[291,27999,28000],{"align":23710},"支持Wayland协议的图形显示。",[245,28002,28003,28006,28009],{},[291,28004,28005],{"align":23710},"–ulimit nofile=1024:524288",[291,28007,28008],{"align":23710},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[291,28010,28011],{"align":23710},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[245,28013,28014,28017,28020],{},[291,28015,28016],{"align":23710},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[291,28018,28019],{"align":23710},"挂载宿主机用户目录到容器内同名路径",[291,28021,28022],{"align":23710},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[245,28024,28025,28028,28031],{},[291,28026,28027],{"align":23710},"-w \u002Fhome\u002Ftungchiahui",[291,28029,28030],{"align":23710},"设置容器启动后的默认工作目录",[291,28032,28033],{"align":23710},"直接进入项目路径，方便执行命令2324。",[245,28035,28036,28039,28042],{},[291,28037,28038],{"align":23710},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[291,28040,28041],{"align":23710},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[291,28043,28044],{"align":23710},"提供预配置的深度学习与机器人开发环境。",[38,28046,28047,28048,28050,28051,28054],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[88,28049,24551],{},"加不加",[88,28052,28053],{},"sudo -E","都无所谓。",[38,28056,28057,28058,28060,28061,28063,28064,28067,28068,28070],{},"用户已经被加到docker组了，不用",[88,28059,24551],{},"也行跑，其次，",[88,28062,24551],{},"运行的话，你的",[88,28065,28066],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[88,28069,28066],{},"更不可能变了。",[83,28072,28074],{"className":23796,"code":28073,"language":23798,"meta":10,"style":10},"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",[88,28075,28076,28089,28099,28109,28121,28128,28135,28142,28152,28161,28170,28184,28196,28208,28217,28227,28236,28251,28284,28311,28322,28329],{"__ignoreMap":10},[91,28077,28078,28080,28082,28084,28087],{"class":93,"line":94},[91,28079,24551],{"class":1941},[91,28081,26295],{"class":206},[91,28083,27205],{"class":206},[91,28085,28086],{"class":150}," --name=ros_opencv_cuda",[91,28088,24653],{"class":150},[91,28090,28091,28094,28097],{"class":93,"line":11},[91,28092,28093],{"class":101},"--gpus ",[91,28095,28096],{"class":206},"all",[91,28098,24653],{"class":150},[91,28100,28101,28104,28107],{"class":93,"line":1157},[91,28102,28103],{"class":101},"-e ",[91,28105,28106],{"class":206},"NVIDIA_DRIVER_CAPABILITIES=all",[91,28108,24653],{"class":150},[91,28110,28111,28113,28116,28119],{"class":93,"line":1172},[91,28112,28103],{"class":101},[91,28114,28115],{"class":206},"DISPLAY=",[91,28117,28118],{"class":101},"$DISPLAY ",[91,28120,26150],{"class":150},[91,28122,28123,28126],{"class":93,"line":1178},[91,28124,28125],{"class":101},"-dit ",[91,28127,26150],{"class":150},[91,28129,28130,28133],{"class":93,"line":1192},[91,28131,28132],{"class":101},"--privileged ",[91,28134,26150],{"class":150},[91,28136,28137,28140],{"class":93,"line":1198},[91,28138,28139],{"class":101},"--net=host ",[91,28141,26150],{"class":150},[91,28143,28144,28147,28150],{"class":93,"line":1289},[91,28145,28146],{"class":101},"--group-add ",[91,28148,28149],{"class":206},"audio",[91,28151,24653],{"class":150},[91,28153,28154,28156,28159],{"class":93,"line":1295},[91,28155,28146],{"class":101},[91,28157,28158],{"class":206},"video",[91,28160,24653],{"class":150},[91,28162,28163,28165,28168],{"class":93,"line":1307},[91,28164,28146],{"class":101},[91,28166,28167],{"class":206},"dialout",[91,28169,24653],{"class":150},[91,28171,28172,28174,28177,28179,28182],{"class":93,"line":1590},[91,28173,28103],{"class":101},[91,28175,28176],{"class":206},"XAUTHORITY=",[91,28178,28066],{"class":101},[91,28180,28181],{"class":206},"\u002F.Xauthority",[91,28183,24653],{"class":150},[91,28185,28186,28188,28191,28194],{"class":93,"line":1595},[91,28187,28103],{"class":101},[91,28189,28190],{"class":206},"WAYLAND_DISPLAY=",[91,28192,28193],{"class":101},"$WAYLAND_DISPLAY ",[91,28195,26150],{"class":150},[91,28197,28198,28200,28203,28206],{"class":93,"line":1601},[91,28199,28103],{"class":101},[91,28201,28202],{"class":206},"XDG_RUNTIME_DIR=",[91,28204,28205],{"class":101},"$XDG_RUNTIME_DIR ",[91,28207,26150],{"class":150},[91,28209,28210,28212,28215],{"class":93,"line":1606},[91,28211,28103],{"class":101},[91,28213,28214],{"class":206},"QT_QPA_PLATFORM=xcb",[91,28216,24653],{"class":150},[91,28218,28219,28222,28225],{"class":93,"line":1620},[91,28220,28221],{"class":101},"-v ",[91,28223,28224],{"class":206},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[91,28226,24653],{"class":150},[91,28228,28229,28231,28234],{"class":93,"line":1625},[91,28230,28221],{"class":101},[91,28232,28233],{"class":206},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[91,28235,24653],{"class":150},[91,28237,28238,28241,28244,28246,28249],{"class":93,"line":1631},[91,28239,28240],{"class":101},"-v $HOME",[91,28242,28243],{"class":206},"\u002F.Xauthority:",[91,28245,28066],{"class":101},[91,28247,28248],{"class":206},"\u002F.Xauthority:ro",[91,28250,24653],{"class":150},[91,28252,28253,28255,28258,28260,28263,28266,28268,28271,28273,28275,28277,28279,28282],{"class":93,"line":1652},[91,28254,28221],{"class":101},[91,28256,28257],{"class":206},"\u002Frun\u002Fuser\u002F",[91,28259,25074],{"class":101},[91,28261,28262],{"class":1941},"id",[91,28264,28265],{"class":150}," -u",[91,28267,531],{"class":101},[91,28269,28270],{"class":206},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[91,28272,25074],{"class":101},[91,28274,28262],{"class":1941},[91,28276,28265],{"class":150},[91,28278,531],{"class":101},[91,28280,28281],{"class":206},"\u002Fwayland-0",[91,28283,24653],{"class":150},[91,28285,28286,28288,28290,28292,28294,28296,28298,28301,28303,28305,28307,28309],{"class":93,"line":1657},[91,28287,28221],{"class":101},[91,28289,28257],{"class":206},[91,28291,25074],{"class":101},[91,28293,28262],{"class":1941},[91,28295,28265],{"class":150},[91,28297,531],{"class":101},[91,28299,28300],{"class":206},":\u002Frun\u002Fuser\u002F",[91,28302,25074],{"class":101},[91,28304,28262],{"class":1941},[91,28306,28265],{"class":150},[91,28308,13693],{"class":101},[91,28310,26150],{"class":150},[91,28312,28313,28315,28317,28320],{"class":93,"line":1671},[91,28314,28240],{"class":101},[91,28316,961],{"class":206},[91,28318,28319],{"class":101},"$HOME ",[91,28321,26150],{"class":150},[91,28323,28324,28327],{"class":93,"line":1676},[91,28325,28326],{"class":101},"-w $HOME ",[91,28328,26150],{"class":150},[91,28330,28331],{"class":93,"line":1705},[91,28332,28333],{"class":101},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[38,28335,9004],{},[46,28337,28338,28346,28349,28352],{},[49,28339,28340,13774,28342,28345],{},[88,28341,28106],{},[88,28343,28344],{},"--gpus all","没有英伟达显卡请注释。",[49,28347,28348],{},"--name后面请自己为容器起名。",[49,28350,28351],{},"最后一行仓库名称请你自己找对应的镜像填上。",[49,28353,28354,28355,28360],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23527,28356,28357],{},[251,28358,28359],{},"请不要加","。",[83,28362,28364],{"className":23796,"code":28363,"language":23798,"meta":10,"style":10},"--ulimit nofile=1024:524288 \\\n",[88,28365,28366],{"__ignoreMap":10},[91,28367,28368,28371,28374],{"class":93,"line":94},[91,28369,28370],{"class":1941},"--ulimit",[91,28372,28373],{"class":206}," nofile=1024:524288",[91,28375,24653],{"class":150},[38,28377,28378,28379,28384],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23527,28380,28381],{},[251,28382,28383],{},"不建议","**.**",[83,28386,28388],{"className":23796,"code":28387,"language":23798,"meta":10,"style":10},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[88,28389,28390,28417,28426],{"__ignoreMap":10},[91,28391,28392,28395,28398,28400,28402,28404,28406,28408,28410,28413,28415],{"class":93,"line":94},[91,28393,28394],{"class":1941},"--user",[91,28396,28397],{"class":101}," $(",[91,28399,28262],{"class":1941},[91,28401,28265],{"class":150},[91,28403,531],{"class":101},[91,28405,961],{"class":206},[91,28407,25074],{"class":101},[91,28409,28262],{"class":1941},[91,28411,28412],{"class":150}," -g",[91,28414,13693],{"class":101},[91,28416,26150],{"class":150},[91,28418,28419,28421,28424],{"class":93,"line":11},[91,28420,28221],{"class":101},[91,28422,28423],{"class":206},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[91,28425,24653],{"class":150},[91,28427,28428,28430,28433],{"class":93,"line":1157},[91,28429,28221],{"class":101},[91,28431,28432],{"class":206},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[91,28434,24653],{"class":150},[5105,28436,28437],{},"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":10,"searchDepth":11,"depth":11,"links":28439},[28440,28441,28442],{"id":27438,"depth":1157,"text":27439},{"id":27448,"depth":1157,"text":27449},{"id":27859,"depth":1157,"text":27862},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27430,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28449,"title":28450,"body":28451,"description":10,"extension":14,"meta":30074,"navigation":17,"path":30075,"seo":30076,"stem":30077,"__hash__":30078},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28452,"toc":30069},[28453,28456,28460,28463,28685,28689,28693,28696,28802,28807,28810,28815,28818,28823,28826,28831,28834,28846,28849,28854,28861,28889,28896,28972,28977,28980,29003,29005,29080,29085,29088,29092,29100,29105,29110,29114,29125,29131,29134,29137,29161,29164,29167,29195,29198,29201,29666,29669,29674,29679,29683,29706,29711,29715,29719,29722,29725,29728,29755,29758,29761,29779,29782,29785,29807,29815,29820,29825,29829,29832,29835,29838,29841,29886,29889,29907,29910,29915,29918,29939,29942,29998,30001,30006,30010,30013,30020,30023,30026,30031,30034,30050,30053,30066],[29,28454,28450],{"id":28455},"_6手动创建docker镜像",[63,28457,28459],{"id":28458},"_61dockerfile","6.1.DockerFile",[38,28461,28462],{},"常用命令：",[239,28464,28465,28476],{},[242,28466,28467],{},[245,28468,28469,28472,28474],{},[248,28470,28471],{"align":23710},"指令",[248,28473,25844],{"align":23710},[248,28475,27467],{"align":23710},[286,28477,28478,28488,28504,28515,28526,28537,28548,28559,28570,28584,28598,28609,28623,28634,28645,28659,28674],{},[245,28479,28480,28482,28485],{},[291,28481,27345],{"align":23710},[291,28483,28484],{"align":23710},"指定基础镜像，是 Dockerfile 的起点",[291,28486,28487],{"align":23710},"FROM ubuntu:22.04",[245,28489,28490,28493,28496],{},[291,28491,28492],{"align":23710},"LABEL",[291,28494,28495],{"align":23710},"添加元数据（如作者、版本等）",[291,28497,28498,28499,28503],{"align":23710},"LABEL maintainer=”",[340,28500,28502],{"href":28501},"mailto:you@example.com","you@example.com","”",[245,28505,28506,28509,28512],{},[291,28507,28508],{"align":23710},"ENV",[291,28510,28511],{"align":23710},"设置环境变量",[291,28513,28514],{"align":23710},"ENV PORT=8080",[245,28516,28517,28520,28523],{},[291,28518,28519],{"align":23710},"ARG",[291,28521,28522],{"align":23710},"构建参数，只在构建期间可用",[291,28524,28525],{"align":23710},"ARG VERSION=1.0",[245,28527,28528,28531,28534],{},[291,28529,28530],{"align":23710},"RUN",[291,28532,28533],{"align":23710},"构建镜像时运行命令",[291,28535,28536],{"align":23710},"RUN apt-get update && apt-get install -y curl",[245,28538,28539,28542,28545],{},[291,28540,28541],{"align":23710},"COPY",[291,28543,28544],{"align":23710},"复制文件到镜像中",[291,28546,28547],{"align":23710},"COPY . \u002Fapp",[245,28549,28550,28553,28556],{},[291,28551,28552],{"align":23710},"ADD",[291,28554,28555],{"align":23710},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[291,28557,28558],{"align":23710},"ADD archive.tar.gz \u002Fdata\u002F",[245,28560,28561,28564,28567],{},[291,28562,28563],{"align":23710},"WORKDIR",[291,28565,28566],{"align":23710},"设置工作目录",[291,28568,28569],{"align":23710},"WORKDIR \u002Fopt",[245,28571,28572,28575,28578],{},[291,28573,28574],{"align":23710},"CMD",[291,28576,28577],{"align":23710},"设置容器启动时默认命令（可被 docker run 覆盖）",[291,28579,28580,28581],{"align":23710},"CMD ",[91,28582,28583],{},"“node”, “index.js”",[245,28585,28586,28589,28592],{},[291,28587,28588],{"align":23710},"ENTRYPOINT",[291,28590,28591],{"align":23710},"设置容器启动时固定命令（通常用于 CLI 工具等）",[291,28593,28594,28595],{"align":23710},"ENTRYPOINT ",[91,28596,28597],{},"“python3”",[245,28599,28600,28603,28606],{},[291,28601,28602],{"align":23710},"EXPOSE",[291,28604,28605],{"align":23710},"声明镜像内服务监听的端口（不会自动映射）",[291,28607,28608],{"align":23710},"EXPOSE 80",[245,28610,28611,28614,28617],{},[291,28612,28613],{"align":23710},"VOLUME",[291,28615,28616],{"align":23710},"声明数据卷挂载点",[291,28618,28619,28620],{"align":23710},"VOLUME ",[91,28621,28622],{},"“\u002Fdata”",[245,28624,28625,28628,28631],{},[291,28626,28627],{"align":23710},"USER",[291,28629,28630],{"align":23710},"设置后续命令执行的用户",[291,28632,28633],{"align":23710},"USER appuser",[245,28635,28636,28639,28642],{},[291,28637,28638],{"align":23710},"ONBUILD",[291,28640,28641],{"align":23710},"当镜像作为其他镜像基础镜像时触发的构建指令",[291,28643,28644],{"align":23710},"ONBUILD COPY . \u002Fsrc",[245,28646,28647,28650,28653],{},[291,28648,28649],{"align":23710},"SHELL",[291,28651,28652],{"align":23710},"更改默认 shell，比如将 sh -c 改为 bash -c",[291,28654,28655,28656],{"align":23710},"SHELL ",[91,28657,28658],{},"“\u002Fbin\u002Fbash”, “-c”",[245,28660,28661,28664,28667],{},[291,28662,28663],{"align":23710},"HEALTHCHECK",[291,28665,28666],{"align":23710},"定义容器运行时的健康检查命令",[291,28668,28669,28670],{"align":23710},"`HEALTHCHECK CMD curl –fail ",[340,28671,28672],{"href":28672,"rel":28673},"http:\u002F\u002Flocalhost:8080",[23839],[245,28675,28676,28679,28682],{},[291,28677,28678],{"align":23710},"STOPSIGNAL",[291,28680,28681],{"align":23710},"容器停止时发送的信号",[291,28683,28684],{"align":23710},"STOPSIGNAL SIGKILL",[63,28686,28688],{"id":28687},"_62自己创建容器","6.2.自己创建容器",[21977,28690,28692],{"id":28691},"_621手动创建","6.2.1.手动创建",[38,28694,28695],{},"在x86电脑上编译x86的：",[83,28697,28699],{"className":23796,"code":28698,"language":23798,"meta":10,"style":10},"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",[88,28700,28701,28717,28721,28734,28738,28751,28755,28768,28772,28785,28789],{"__ignoreMap":10},[91,28702,28703,28705,28708,28711,28714],{"class":93,"line":94},[91,28704,26528],{"class":1941},[91,28706,28707],{"class":206}," build",[91,28709,28710],{"class":150}," -t",[91,28712,28713],{"class":206}," ros-melodic-cuda118-cudnn8-bionic:latest",[91,28715,28716],{"class":206}," .\n",[91,28718,28719],{"class":93,"line":11},[91,28720,2378],{"emptyLinePlaceholder":17},[91,28722,28723,28725,28727,28729,28732],{"class":93,"line":1157},[91,28724,26528],{"class":1941},[91,28726,28707],{"class":206},[91,28728,28710],{"class":150},[91,28730,28731],{"class":206}," ros-noetic-focal:latest",[91,28733,28716],{"class":206},[91,28735,28736],{"class":93,"line":1172},[91,28737,2378],{"emptyLinePlaceholder":17},[91,28739,28740,28742,28744,28746,28749],{"class":93,"line":1178},[91,28741,26528],{"class":1941},[91,28743,28707],{"class":206},[91,28745,28710],{"class":150},[91,28747,28748],{"class":206}," ros-humble-jammy:latest",[91,28750,28716],{"class":206},[91,28752,28753],{"class":93,"line":1192},[91,28754,2378],{"emptyLinePlaceholder":17},[91,28756,28757,28759,28761,28763,28766],{"class":93,"line":1198},[91,28758,26528],{"class":1941},[91,28760,28707],{"class":206},[91,28762,28710],{"class":150},[91,28764,28765],{"class":206}," ros-jazzy-noble:latest",[91,28767,28716],{"class":206},[91,28769,28770],{"class":93,"line":1289},[91,28771,2378],{"emptyLinePlaceholder":17},[91,28773,28774,28776,28778,28780,28783],{"class":93,"line":1295},[91,28775,26528],{"class":1941},[91,28777,28707],{"class":206},[91,28779,28710],{"class":150},[91,28781,28782],{"class":206}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[91,28784,28716],{"class":206},[91,28786,28787],{"class":93,"line":1307},[91,28788,2378],{"emptyLinePlaceholder":17},[91,28790,28791,28793,28795,28797,28800],{"class":93,"line":1590},[91,28792,26528],{"class":1941},[91,28794,28707],{"class":206},[91,28796,28710],{"class":150},[91,28798,28799],{"class":206}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[91,28801,28716],{"class":206},[38,28803,28804],{},[1440,28805],{"alt":10,"src":28806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[38,28808,28809],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[38,28811,28812],{},[1440,28813],{"alt":10,"src":28814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[38,28816,28817],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[46,28819,28820],{},[49,28821,28822],{},"创建 Docker Hub 账户",[38,28824,28825],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[46,28827,28828],{"start":11},[49,28829,28830],{},"登录 Docker Hub",[38,28832,28833],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[83,28835,28837],{"className":23796,"code":28836,"language":23798,"meta":10,"style":10},"docker login\n",[88,28838,28839],{"__ignoreMap":10},[91,28840,28841,28843],{"class":93,"line":94},[91,28842,26528],{"class":1941},[91,28844,28845],{"class":206}," login\n",[38,28847,28848],{},"输入你的 Docker Hub 用户名和密码进行验证。",[46,28850,28851],{},[49,28852,28853],{},"为你的镜像打标签",[38,28855,28856,28857,28860],{},"Docker Hub 使用 ",[88,28858,28859],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[83,28862,28864],{"className":23796,"code":28863,"language":23798,"meta":10,"style":10},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[88,28865,28866],{"__ignoreMap":10},[91,28867,28868,28870,28873,28875,28878,28881,28884,28886],{"class":93,"line":94},[91,28869,26528],{"class":1941},[91,28871,28872],{"class":206}," tag",[91,28874,28765],{"class":206},[91,28876,28877],{"class":97}," \u003C",[91,28879,28880],{"class":206},"你的用户",[91,28882,28883],{"class":101},"名",[91,28885,1062],{"class":97},[91,28887,28888],{"class":206},"\u002Fros-jazzy-noble:latest\n",[38,28890,28891,28892,28895],{},"例如，如果你的 Docker Hub 用户名是 ",[88,28893,28894],{},"tungchiahui","，你应该执行：",[83,28897,28899],{"className":23796,"code":28898,"language":23798,"meta":10,"style":10},"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",[88,28900,28901,28912,28916,28927,28931,28942,28946,28957,28961],{"__ignoreMap":10},[91,28902,28903,28905,28907,28909],{"class":93,"line":94},[91,28904,26528],{"class":1941},[91,28906,28872],{"class":206},[91,28908,28731],{"class":206},[91,28910,28911],{"class":206}," tungchiahui\u002Fros-noetic-focal:latest\n",[91,28913,28914],{"class":93,"line":11},[91,28915,2378],{"emptyLinePlaceholder":17},[91,28917,28918,28920,28922,28924],{"class":93,"line":1157},[91,28919,26528],{"class":1941},[91,28921,28872],{"class":206},[91,28923,28748],{"class":206},[91,28925,28926],{"class":206}," tungchiahui\u002Fros-humble-jammy:latest\n",[91,28928,28929],{"class":93,"line":1172},[91,28930,2378],{"emptyLinePlaceholder":17},[91,28932,28933,28935,28937,28939],{"class":93,"line":1178},[91,28934,26528],{"class":1941},[91,28936,28872],{"class":206},[91,28938,28765],{"class":206},[91,28940,28941],{"class":206}," tungchiahui\u002Fros-jazzy-noble:latest\n",[91,28943,28944],{"class":93,"line":1192},[91,28945,2378],{"emptyLinePlaceholder":17},[91,28947,28948,28950,28952,28954],{"class":93,"line":1198},[91,28949,26528],{"class":1941},[91,28951,28872],{"class":206},[91,28953,28782],{"class":206},[91,28955,28956],{"class":206}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[91,28958,28959],{"class":93,"line":1289},[91,28960,2378],{"emptyLinePlaceholder":17},[91,28962,28963,28965,28967,28969],{"class":93,"line":1295},[91,28964,26528],{"class":1941},[91,28966,28872],{"class":206},[91,28968,28799],{"class":206},[91,28970,28971],{"class":206}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[46,28973,28974],{"start":11},[49,28975,28976],{},"推送镜像到 Docker Hub",[38,28978,28979],{},"使用以下命令将镜像推送到 Docker Hub：",[83,28981,28983],{"className":23796,"code":28982,"language":23798,"meta":10,"style":10},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[88,28984,28985],{"__ignoreMap":10},[91,28986,28987,28989,28992,28994,28996,28998,29000],{"class":93,"line":94},[91,28988,26528],{"class":1941},[91,28990,28991],{"class":206}," push",[91,28993,28877],{"class":97},[91,28995,28880],{"class":206},[91,28997,28883],{"class":101},[91,28999,1062],{"class":97},[91,29001,29002],{"class":206},"\u002Fros-noetic-jazzy-noble:latest\n",[38,29004,14612],{},[83,29006,29008],{"className":23796,"code":29007,"language":23798,"meta":10,"style":10},"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",[88,29009,29010,29018,29022,29030,29034,29042,29046,29055,29059,29067,29071],{"__ignoreMap":10},[91,29011,29012,29014,29016],{"class":93,"line":94},[91,29013,26528],{"class":1941},[91,29015,28991],{"class":206},[91,29017,28911],{"class":206},[91,29019,29020],{"class":93,"line":11},[91,29021,2378],{"emptyLinePlaceholder":17},[91,29023,29024,29026,29028],{"class":93,"line":1157},[91,29025,26528],{"class":1941},[91,29027,28991],{"class":206},[91,29029,28926],{"class":206},[91,29031,29032],{"class":93,"line":1172},[91,29033,2378],{"emptyLinePlaceholder":17},[91,29035,29036,29038,29040],{"class":93,"line":1178},[91,29037,26528],{"class":1941},[91,29039,28991],{"class":206},[91,29041,28941],{"class":206},[91,29043,29044],{"class":93,"line":1192},[91,29045,2378],{"emptyLinePlaceholder":17},[91,29047,29048,29050,29052],{"class":93,"line":1198},[91,29049,26528],{"class":1941},[91,29051,28991],{"class":206},[91,29053,29054],{"class":206}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[91,29056,29057],{"class":93,"line":1289},[91,29058,2378],{"emptyLinePlaceholder":17},[91,29060,29061,29063,29065],{"class":93,"line":1295},[91,29062,26528],{"class":1941},[91,29064,28991],{"class":206},[91,29066,28971],{"class":206},[91,29068,29069],{"class":93,"line":1307},[91,29070,2378],{"emptyLinePlaceholder":17},[91,29072,29073,29075,29077],{"class":93,"line":1590},[91,29074,26528],{"class":1941},[91,29076,28991],{"class":206},[91,29078,29079],{"class":206}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[46,29081,29082],{"start":1157},[49,29083,29084],{},"验证推送成功",[38,29086,29087],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[38,29089,29090],{},[251,29091,3762],{},[1109,29093,29094,29097],{},[49,29095,29096],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[49,29098,29099],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[38,29101,29102],{},[1440,29103],{"alt":10,"src":29104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[38,29106,29107],{},[1440,29108],{"alt":10,"src":29109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21977,29111,29113],{"id":29112},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[38,29115,29116,29117,29120,29121,29124],{},"如果您想在 ",[251,29118,29119],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[251,29122,29123],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[38,29126,29127,29128],{},"1. ",[251,29129,29130],{},"启用 Docker 跨平台构建",[38,29132,29133],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[38,29135,29136],{},"第一步：启用 buildx（只需执行一次）",[83,29138,29140],{"className":23796,"code":29139,"language":23798,"meta":10,"style":10},"docker buildx create --name multiarch_builder --use\n",[88,29141,29142],{"__ignoreMap":10},[91,29143,29144,29146,29149,29152,29155,29158],{"class":93,"line":94},[91,29145,26528],{"class":1941},[91,29147,29148],{"class":206}," buildx",[91,29150,29151],{"class":206}," create",[91,29153,29154],{"class":150}," --name",[91,29156,29157],{"class":206}," multiarch_builder",[91,29159,29160],{"class":150}," --use\n",[38,29162,29163],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[38,29165,29166],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[83,29168,29170],{"className":23796,"code":29169,"language":23798,"meta":10,"style":10},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[88,29171,29172],{"__ignoreMap":10},[91,29173,29174,29176,29178,29180,29183,29186,29189,29192],{"class":93,"line":94},[91,29175,26528],{"class":1941},[91,29177,27205],{"class":206},[91,29179,27208],{"class":150},[91,29181,29182],{"class":150}," --privileged",[91,29184,29185],{"class":206}," multiarch\u002Fqemu-user-static",[91,29187,29188],{"class":150}," --reset",[91,29190,29191],{"class":150}," -p",[91,29193,29194],{"class":206}," yes\n",[38,29196,29197],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[38,29199,29200],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[83,29202,29204],{"className":23796,"code":29203,"language":23798,"meta":10,"style":10},"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",[88,29205,29206,29248,29252,29257,29267,29277,29286,29292,29296,29300,29310,29318,29327,29333,29337,29341,29351,29359,29368,29374,29378,29382,29392,29400,29409,29415,29419,29423,29433,29441,29450,29456,29460,29464,29474,29482,29491,29497,29501,29505,29515,29523,29532,29538,29542,29546,29556,29564,29573,29579,29583,29587,29597,29605,29614,29620,29624,29628,29639,29647,29656,29662],{"__ignoreMap":10},[91,29207,29208,29210,29212,29214,29217,29220,29222,29224,29227,29229,29231,29233,29235,29238,29241,29243,29246],{"class":93,"line":94},[91,29209,26528],{"class":1941},[91,29211,29148],{"class":206},[91,29213,28707],{"class":206},[91,29215,29216],{"class":150}," --platform",[91,29218,29219],{"class":206}," linux\u002Famd64,linux\u002Farm64",[91,29221,28710],{"class":150},[91,29223,28877],{"class":97},[91,29225,29226],{"class":206},"你的镜像",[91,29228,28883],{"class":101},[91,29230,1062],{"class":97},[91,29232,961],{"class":206},[91,29234,1012],{"class":97},[91,29236,29237],{"class":206},"标",[91,29239,29240],{"class":101},"签",[91,29242,1062],{"class":97},[91,29244,29245],{"class":150}," --push",[91,29247,28716],{"class":206},[91,29249,29250],{"class":93,"line":11},[91,29251,2378],{"emptyLinePlaceholder":17},[91,29253,29254],{"class":93,"line":1157},[91,29255,29256],{"class":160},"# 例子：\n",[91,29258,29259,29261,29263,29265],{"class":93,"line":1172},[91,29260,26528],{"class":1941},[91,29262,29148],{"class":206},[91,29264,28707],{"class":206},[91,29266,24653],{"class":150},[91,29268,29269,29272,29275],{"class":93,"line":1178},[91,29270,29271],{"class":101},"--platform ",[91,29273,29274],{"class":206},"linux\u002Famd64,linux\u002Farm64",[91,29276,24653],{"class":150},[91,29278,29279,29281,29284],{"class":93,"line":1192},[91,29280,28710],{"class":150},[91,29282,29283],{"class":206}," tungchiahui\u002Fros:noetic-focal",[91,29285,24653],{"class":150},[91,29287,29288,29290],{"class":93,"line":1198},[91,29289,29245],{"class":150},[91,29291,24653],{"class":150},[91,29293,29294],{"class":93,"line":1289},[91,29295,28716],{"class":206},[91,29297,29298],{"class":93,"line":1295},[91,29299,2378],{"emptyLinePlaceholder":17},[91,29301,29302,29304,29306,29308],{"class":93,"line":1307},[91,29303,26528],{"class":1941},[91,29305,29148],{"class":206},[91,29307,28707],{"class":206},[91,29309,24653],{"class":150},[91,29311,29312,29314,29316],{"class":93,"line":1590},[91,29313,29271],{"class":101},[91,29315,29274],{"class":206},[91,29317,24653],{"class":150},[91,29319,29320,29322,29325],{"class":93,"line":1595},[91,29321,28710],{"class":150},[91,29323,29324],{"class":206}," tungchiahui\u002Fros:humble-jammy",[91,29326,24653],{"class":150},[91,29328,29329,29331],{"class":93,"line":1601},[91,29330,29245],{"class":150},[91,29332,24653],{"class":150},[91,29334,29335],{"class":93,"line":1606},[91,29336,28716],{"class":206},[91,29338,29339],{"class":93,"line":1620},[91,29340,2378],{"emptyLinePlaceholder":17},[91,29342,29343,29345,29347,29349],{"class":93,"line":1625},[91,29344,26528],{"class":1941},[91,29346,29148],{"class":206},[91,29348,28707],{"class":206},[91,29350,24653],{"class":150},[91,29352,29353,29355,29357],{"class":93,"line":1631},[91,29354,29271],{"class":101},[91,29356,29274],{"class":206},[91,29358,24653],{"class":150},[91,29360,29361,29363,29366],{"class":93,"line":1652},[91,29362,28710],{"class":150},[91,29364,29365],{"class":206}," tungchiahui\u002Fros:jazzy-noble",[91,29367,24653],{"class":150},[91,29369,29370,29372],{"class":93,"line":1657},[91,29371,29245],{"class":150},[91,29373,24653],{"class":150},[91,29375,29376],{"class":93,"line":1671},[91,29377,28716],{"class":206},[91,29379,29380],{"class":93,"line":1676},[91,29381,2378],{"emptyLinePlaceholder":17},[91,29383,29384,29386,29388,29390],{"class":93,"line":1705},[91,29385,26295],{"class":1941},[91,29387,29148],{"class":206},[91,29389,28707],{"class":206},[91,29391,24653],{"class":150},[91,29393,29394,29396,29398],{"class":93,"line":1710},[91,29395,29271],{"class":101},[91,29397,29274],{"class":206},[91,29399,24653],{"class":150},[91,29401,29402,29404,29407],{"class":93,"line":1727},[91,29403,28710],{"class":150},[91,29405,29406],{"class":206}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[91,29408,24653],{"class":150},[91,29410,29411,29413],{"class":93,"line":1732},[91,29412,29245],{"class":150},[91,29414,24653],{"class":150},[91,29416,29417],{"class":93,"line":1737},[91,29418,28716],{"class":206},[91,29420,29421],{"class":93,"line":1742},[91,29422,2378],{"emptyLinePlaceholder":17},[91,29424,29425,29427,29429,29431],{"class":93,"line":1756},[91,29426,26528],{"class":1941},[91,29428,29148],{"class":206},[91,29430,28707],{"class":206},[91,29432,24653],{"class":150},[91,29434,29435,29437,29439],{"class":93,"line":1761},[91,29436,29271],{"class":101},[91,29438,29274],{"class":206},[91,29440,24653],{"class":150},[91,29442,29443,29445,29448],{"class":93,"line":2555},[91,29444,28710],{"class":150},[91,29446,29447],{"class":206}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[91,29449,24653],{"class":150},[91,29451,29452,29454],{"class":93,"line":2569},[91,29453,29245],{"class":150},[91,29455,24653],{"class":150},[91,29457,29458],{"class":93,"line":2577},[91,29459,28716],{"class":206},[91,29461,29462],{"class":93,"line":2582},[91,29463,2378],{"emptyLinePlaceholder":17},[91,29465,29466,29468,29470,29472],{"class":93,"line":2588},[91,29467,26295],{"class":1941},[91,29469,29148],{"class":206},[91,29471,28707],{"class":206},[91,29473,24653],{"class":150},[91,29475,29476,29478,29480],{"class":93,"line":2594},[91,29477,29271],{"class":101},[91,29479,29274],{"class":206},[91,29481,24653],{"class":150},[91,29483,29484,29486,29489],{"class":93,"line":2599},[91,29485,28710],{"class":150},[91,29487,29488],{"class":206}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[91,29490,24653],{"class":150},[91,29492,29493,29495],{"class":93,"line":7927},[91,29494,29245],{"class":150},[91,29496,24653],{"class":150},[91,29498,29499],{"class":93,"line":7951},[91,29500,28716],{"class":206},[91,29502,29503],{"class":93,"line":7956},[91,29504,2378],{"emptyLinePlaceholder":17},[91,29506,29507,29509,29511,29513],{"class":93,"line":7962},[91,29508,26528],{"class":1941},[91,29510,29148],{"class":206},[91,29512,28707],{"class":206},[91,29514,24653],{"class":150},[91,29516,29517,29519,29521],{"class":93,"line":7989},[91,29518,29271],{"class":101},[91,29520,29274],{"class":206},[91,29522,24653],{"class":150},[91,29524,29525,29527,29530],{"class":93,"line":7994},[91,29526,28710],{"class":150},[91,29528,29529],{"class":206}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[91,29531,24653],{"class":150},[91,29533,29534,29536],{"class":93,"line":8000},[91,29535,29245],{"class":150},[91,29537,24653],{"class":150},[91,29539,29540],{"class":93,"line":8012},[91,29541,28716],{"class":206},[91,29543,29544],{"class":93,"line":8024},[91,29545,2378],{"emptyLinePlaceholder":17},[91,29547,29548,29550,29552,29554],{"class":93,"line":8036},[91,29549,26528],{"class":1941},[91,29551,29148],{"class":206},[91,29553,28707],{"class":206},[91,29555,24653],{"class":150},[91,29557,29558,29560,29562],{"class":93,"line":9695},[91,29559,29271],{"class":101},[91,29561,29274],{"class":206},[91,29563,24653],{"class":150},[91,29565,29566,29568,29571],{"class":93,"line":9720},[91,29567,28710],{"class":150},[91,29569,29570],{"class":206}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[91,29572,24653],{"class":150},[91,29574,29575,29577],{"class":93,"line":9743},[91,29576,29245],{"class":150},[91,29578,24653],{"class":150},[91,29580,29581],{"class":93,"line":9767},[91,29582,28716],{"class":206},[91,29584,29585],{"class":93,"line":9772},[91,29586,2378],{"emptyLinePlaceholder":17},[91,29588,29589,29591,29593,29595],{"class":93,"line":9777},[91,29590,26295],{"class":1941},[91,29592,29148],{"class":206},[91,29594,28707],{"class":206},[91,29596,24653],{"class":150},[91,29598,29599,29601,29603],{"class":93,"line":9782},[91,29600,29271],{"class":101},[91,29602,29274],{"class":206},[91,29604,24653],{"class":150},[91,29606,29607,29609,29612],{"class":93,"line":9791},[91,29608,28710],{"class":150},[91,29610,29611],{"class":206}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[91,29613,24653],{"class":150},[91,29615,29616,29618],{"class":93,"line":9796},[91,29617,29245],{"class":150},[91,29619,24653],{"class":150},[91,29621,29622],{"class":93,"line":9802},[91,29623,28716],{"class":206},[91,29625,29626],{"class":93,"line":9823},[91,29627,2378],{"emptyLinePlaceholder":17},[91,29629,29630,29633,29635,29637],{"class":93,"line":9829},[91,29631,29632],{"class":1941},"  docker",[91,29634,29148],{"class":206},[91,29636,28707],{"class":206},[91,29638,24653],{"class":150},[91,29640,29641,29643,29645],{"class":93,"line":9843},[91,29642,29271],{"class":101},[91,29644,29274],{"class":206},[91,29646,24653],{"class":150},[91,29648,29649,29651,29654],{"class":93,"line":9849},[91,29650,28710],{"class":150},[91,29652,29653],{"class":206}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[91,29655,24653],{"class":150},[91,29657,29658,29660],{"class":93,"line":9876},[91,29659,29245],{"class":150},[91,29661,24653],{"class":150},[91,29663,29664],{"class":93,"line":9885},[91,29665,28716],{"class":206},[38,29667,29668],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[38,29670,29671],{},[1440,29672],{"alt":10,"src":29673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[38,29675,29676],{},[1440,29677],{"alt":10,"src":29678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21977,29680,29682],{"id":29681},"_623清除构建缓存","6.2.3.清除构建缓存",[83,29684,29686],{"className":23796,"code":29685,"language":23798,"meta":10,"style":10},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[88,29687,29688,29693],{"__ignoreMap":10},[91,29689,29690],{"class":93,"line":94},[91,29691,29692],{"class":160},"# 清理BuildKit构建缓存\n",[91,29694,29695,29697,29700,29703],{"class":93,"line":11},[91,29696,26528],{"class":1941},[91,29698,29699],{"class":206}," builder",[91,29701,29702],{"class":206}," prune",[91,29704,29705],{"class":150}," -f\n",[38,29707,29708],{},[1440,29709],{"alt":10,"src":29710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[63,29712,29714],{"id":29713},"_63补充","6.3.补充",[21977,29716,29718],{"id":29717},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[38,29720,29721],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[38,29723,29724],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[38,29726,29727],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[83,29729,29731],{"className":23796,"code":29730,"language":23798,"meta":10,"style":10},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[88,29732,29733,29740],{"__ignoreMap":10},[91,29734,29735,29737],{"class":93,"line":94},[91,29736,27345],{"class":1941},[91,29738,29739],{"class":206}," nginx\n",[91,29741,29742,29744,29747,29750,29752],{"class":93,"line":11},[91,29743,28530],{"class":1941},[91,29745,29746],{"class":206}," echo",[91,29748,29749],{"class":206}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[91,29751,26197],{"class":97},[91,29753,29754],{"class":206}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[38,29756,29757],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[38,29759,29760],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[83,29762,29764],{"className":23796,"code":29763,"language":23798,"meta":10,"style":10},"docker build -t nginx:tuling .\n",[88,29765,29766],{"__ignoreMap":10},[91,29767,29768,29770,29772,29774,29777],{"class":93,"line":94},[91,29769,26528],{"class":1941},[91,29771,28707],{"class":206},[91,29773,28710],{"class":150},[91,29775,29776],{"class":206}," nginx:tuling",[91,29778,28716],{"class":206},[38,29780,29781],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[38,29783,29784],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[83,29786,29788],{"className":23796,"code":29787,"language":23798,"meta":10,"style":10},"docker run -d -p 92:80 nginx:tuling\n",[88,29789,29790],{"__ignoreMap":10},[91,29791,29792,29794,29796,29799,29801,29804],{"class":93,"line":94},[91,29793,26528],{"class":1941},[91,29795,27205],{"class":206},[91,29797,29798],{"class":150}," -d",[91,29800,29191],{"class":150},[91,29802,29803],{"class":206}," 92:80",[91,29805,29806],{"class":206}," nginx:tuling\n",[38,29808,29809,29810],{},"4、访问 ",[340,29811,29814],{"href":29812,"rel":29813},"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",[23839],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[38,29816,29817],{},[1440,29818],{"alt":10,"src":29819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[38,29821,29822],{},[1440,29823],{"alt":10,"src":29824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21977,29826,29828],{"id":29827},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[38,29830,29831],{},"只需要知道大体流程即可",[38,29833,29834],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[38,29836,29837],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[38,29839,29840],{},"2、在Dockerfile中添加以下内容",[83,29842,29844],{"className":26066,"code":29843,"language":26068,"meta":10,"style":10},"# 基于哪个镜像\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",[88,29845,29846,29851,29856,29861,29866,29871,29876,29881],{"__ignoreMap":10},[91,29847,29848],{"class":93,"line":94},[91,29849,29850],{},"# 基于哪个镜像\n",[91,29852,29853],{"class":93,"line":11},[91,29854,29855],{},"From java:8\n",[91,29857,29858],{"class":93,"line":1157},[91,29859,29860],{},"# 复制文件到容器\n",[91,29862,29863],{"class":93,"line":1172},[91,29864,29865],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[91,29867,29868],{"class":93,"line":1178},[91,29869,29870],{},"# 声明需要暴露的端口\n",[91,29872,29873],{"class":93,"line":1192},[91,29874,29875],{},"EXPOSE 8877\n",[91,29877,29878],{"class":93,"line":1198},[91,29879,29880],{},"# 配置容器启动后执行的命令\n",[91,29882,29883],{"class":93,"line":1289},[91,29884,29885],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[38,29887,29888],{},"3、使用docker build命令构建镜像",[83,29890,29892],{"className":23796,"code":29891,"language":23798,"meta":10,"style":10},"docker build -t tulingmall-member:0.0.5 .\n",[88,29893,29894],{"__ignoreMap":10},[91,29895,29896,29898,29900,29902,29905],{"class":93,"line":94},[91,29897,26528],{"class":1941},[91,29899,28707],{"class":206},[91,29901,28710],{"class":150},[91,29903,29904],{"class":206}," tulingmall-member:0.0.5",[91,29906,28716],{"class":206},[38,29908,29909],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[38,29911,29912],{},[1440,29913],{"alt":10,"src":29914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[38,29916,29917],{},"4、启动镜像，加-d可在后台启动",[83,29919,29921],{"className":23796,"code":29920,"language":23798,"meta":10,"style":10},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[88,29922,29923],{"__ignoreMap":10},[91,29924,29925,29927,29929,29931,29933,29936],{"class":93,"line":94},[91,29926,26528],{"class":1941},[91,29928,27205],{"class":206},[91,29930,29798],{"class":150},[91,29932,29191],{"class":150},[91,29934,29935],{"class":206}," 8877:8877",[91,29937,29938],{"class":206}," tulingmall-member:0.0.5\n",[38,29940,29941],{},"加上JVM参数：",[83,29943,29945],{"className":23796,"code":29944,"language":23798,"meta":10,"style":10},"# --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",[88,29946,29947,29952,29967,29977,29986,29993],{"__ignoreMap":10},[91,29948,29949],{"class":93,"line":94},[91,29950,29951],{"class":160},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[91,29953,29954,29956,29958,29961,29963,29965],{"class":93,"line":11},[91,29955,26528],{"class":1941},[91,29957,27205],{"class":206},[91,29959,29960],{"class":150},"  -d",[91,29962,29191],{"class":150},[91,29964,29935],{"class":206},[91,29966,24653],{"class":150},[91,29968,29969,29971,29974],{"class":93,"line":1157},[91,29970,28103],{"class":101},[91,29972,29973],{"class":206},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[91,29975,29976],{"class":150},"  \\\n",[91,29978,29979,29981,29984],{"class":93,"line":1172},[91,29980,28103],{"class":101},[91,29982,29983],{"class":206},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[91,29985,29976],{"class":150},[91,29987,29988,29991],{"class":93,"line":1178},[91,29989,29990],{"class":101},"--cap-add=SYS_PTRACE  ",[91,29992,26150],{"class":150},[91,29994,29995],{"class":93,"line":1192},[91,29996,29997],{"class":101},"tulingmall-member:0.0.5\n",[38,29999,30000],{},"5、访问会员服务接口",[38,30002,30003],{},[1440,30004],{"alt":10,"src":30005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21977,30007,30009],{"id":30008},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[38,30011,30012],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[38,30014,30015,30016],{},"阿里云docker镜像仓库：",[340,30017,30018],{"href":30018,"rel":30019},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23839],[38,30021,30022],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[38,30024,30025],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[38,30027,30028],{},[1440,30029],{"alt":10,"src":30030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[38,30032,30033],{},"要把镜像推送到镜像仓库",[83,30035,30037],{"className":23796,"code":30036,"language":23798,"meta":10,"style":10},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[88,30038,30039],{"__ignoreMap":10},[91,30040,30041,30043,30045,30047],{"class":93,"line":94},[91,30042,26528],{"class":1941},[91,30044,28872],{"class":206},[91,30046,29904],{"class":206},[91,30048,30049],{"class":206}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[38,30051,30052],{},"最后将镜像推送到远程仓库",[83,30054,30056],{"className":23796,"code":30055,"language":23798,"meta":10,"style":10},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[88,30057,30058],{"__ignoreMap":10},[91,30059,30060,30062,30064],{"class":93,"line":94},[91,30061,26528],{"class":1941},[91,30063,28991],{"class":206},[91,30065,30049],{"class":206},[5105,30067,30068],{},"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":10,"searchDepth":11,"depth":11,"links":30070},[30071,30072,30073],{"id":28458,"depth":1157,"text":28459},{"id":28687,"depth":1157,"text":28688},{"id":29713,"depth":1157,"text":29714},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28450,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30080,"title":30081,"body":30082,"description":10,"extension":14,"meta":30225,"navigation":17,"path":30226,"seo":30227,"stem":30228,"__hash__":30229},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30083,"toc":30223},[30084,30087,30092,30097,30100,30105,30110,30113,30118,30123,30126,30131,30134,30137,30140,30143,30146,30149,30169,30191,30194,30197,30217,30220],[29,30085,30081],{"id":30086},"_7vscode远程开发",[46,30088,30089],{},[49,30090,30091],{},"插件1：微软Docker工具",[38,30093,30094],{},[1440,30095],{"alt":10,"src":30096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[38,30098,30099],{},"docker扩展插件已经进化为container tools了，请安装container tools",[38,30101,30102],{},[1440,30103],{"alt":10,"src":30104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[46,30106,30107],{"start":11},[49,30108,30109],{},"插件2：微软Docker远程开发工具",[38,30111,30112],{},"下面这是远程开发的插件。",[38,30114,30115],{},[1440,30116],{"alt":10,"src":30117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[38,30119,30120],{},[1440,30121],{"alt":10,"src":30122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[38,30124,30125],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[38,30127,30128],{},[1440,30129],{"alt":10,"src":30130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[38,30132,30133],{},"安装完拓展之后，vscode进行链接：",[38,30135,30136],{},"1.按ctrl+shift+p",[38,30138,30139],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[38,30141,30142],{},"3.选择目前运行的容器",[38,30144,30145],{},"4.VS Code 会在新窗口中打开并连接到容器",[38,30147,30148],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[83,30150,30152],{"className":23796,"code":30151,"language":23798,"meta":10,"style":10},"docker run -v 主机目录:容器目录 image-name\n",[88,30153,30154],{"__ignoreMap":10},[91,30155,30156,30158,30160,30163,30166],{"class":93,"line":94},[91,30157,26528],{"class":1941},[91,30159,27205],{"class":206},[91,30161,30162],{"class":150}," -v",[91,30164,30165],{"class":206}," 主机目录:容器目录",[91,30167,30168],{"class":206}," image-name\n",[83,30170,30172],{"className":23796,"code":30171,"language":23798,"meta":10,"style":10},"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",[88,30173,30174],{"__ignoreMap":10},[91,30175,30176,30178,30180,30183,30185,30188],{"class":93,"line":94},[91,30177,26528],{"class":1941},[91,30179,27205],{"class":206},[91,30181,30182],{"class":150}," -it",[91,30184,30162],{"class":150},[91,30186,30187],{"class":206}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[91,30189,30190],{"class":206}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[38,30192,30193],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[38,30195,30196],{},"查看挂载情况：",[83,30198,30200],{"className":23796,"code":30199,"language":23798,"meta":10,"style":10},"mount | grep -i project\n",[88,30201,30202],{"__ignoreMap":10},[91,30203,30204,30207,30209,30212,30214],{"class":93,"line":94},[91,30205,30206],{"class":1941},"mount",[91,30208,25084],{"class":97},[91,30210,30211],{"class":1941}," grep",[91,30213,26405],{"class":150},[91,30215,30216],{"class":206}," project\n",[38,30218,30219],{},"也可以通过ls来进行查看",[5105,30221,30222],{},"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":10,"searchDepth":11,"depth":11,"links":30224},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30081,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30231,"title":30232,"body":30233,"description":13,"extension":14,"meta":30237,"navigation":17,"path":30239,"seo":30240,"stem":30241,"__hash__":30242},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30234,"toc":30235},[],{"title":10,"searchDepth":11,"depth":11,"links":30236},[],{"category":30238},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30232,"description":13},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30244,"title":30245,"body":30246,"description":13,"extension":14,"meta":30250,"navigation":17,"path":30251,"seo":30252,"stem":30253,"__hash__":30254},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30247,"toc":30248},[],{"title":10,"searchDepth":11,"depth":11,"links":30249},[],{"category":30238},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30245,"description":13},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30256,"title":30257,"body":30258,"description":13,"extension":14,"meta":30551,"navigation":17,"path":30552,"seo":30553,"stem":30554,"__hash__":30555},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30259,"toc":30549},[30260,30263,30271,30286,30291,30342,30345,30351,30538,30543,30546],[29,30261,30257],{"id":30262},"_1验证深度学习环境",[38,30264,30265,30266],{},"关于环境的安装，看",[340,30267,30270],{"href":30268,"rel":30269},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23839],"Pytorch-->深度学习",[38,30272,30273,30274,30277,30278,30281,30282,30285],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[88,30275,30276],{},"pytorch-cuda=12.4"," 是一个“ ",[251,30279,30280],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[251,30283,30284],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[38,30287,30288],{},[1440,30289],{"alt":10,"src":30290},"\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",[83,30292,30294],{"className":23796,"code":30293,"language":23798,"meta":10,"style":10},"# 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",[88,30295,30296,30301],{"__ignoreMap":10},[91,30297,30298],{"class":93,"line":94},[91,30299,30300],{"class":160},"# CUDA 12.4\n",[91,30302,30303,30306,30308,30311,30314,30317,30320,30323,30325,30328,30331,30334,30337,30339],{"class":93,"line":11},[91,30304,30305],{"class":1941},"conda",[91,30307,23808],{"class":206},[91,30309,30310],{"class":206}," pytorch==",[91,30312,30313],{"class":150},"2.5.1",[91,30315,30316],{"class":206}," torchvision==",[91,30318,30319],{"class":150},"0.20.1",[91,30321,30322],{"class":206}," torchaudio==",[91,30324,30313],{"class":150},[91,30326,30327],{"class":206}," pytorch-cuda=",[91,30329,30330],{"class":150},"12.4",[91,30332,30333],{"class":150}," -c",[91,30335,30336],{"class":206}," pytorch",[91,30338,30333],{"class":150},[91,30340,30341],{"class":206}," nvidia\n",[38,30343,30344],{},"）：",[38,30346,30347],{},[340,30348,30349],{"href":30349,"rel":30350},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23839],[83,30352,30356],{"className":30353,"code":30354,"language":30355,"meta":10,"style":10},"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",[88,30357,30358,30363,30371,30376,30386,30402,30407,30417,30454,30461,30473,30489,30494,30504,30516,30526],{"__ignoreMap":10},[91,30359,30360],{"class":93,"line":94},[91,30361,30362],{"class":160},"# 对深度学习环境进行测试\n",[91,30364,30365,30368],{"class":93,"line":11},[91,30366,30367],{"class":97},"import",[91,30369,30370],{"class":101}," torch\n",[91,30372,30373],{"class":93,"line":1157},[91,30374,30375],{"class":160},"# 查看cuda是否被激活\n",[91,30377,30378,30381,30383],{"class":93,"line":1172},[91,30379,30380],{"class":101},"flag",[91,30382,147],{"class":97},[91,30384,30385],{"class":101},"torch.cuda.is_available()\n",[91,30387,30388,30391,30393,30396,30399],{"class":93,"line":1178},[91,30389,30390],{"class":150},"print",[91,30392,102],{"class":101},[91,30394,30395],{"class":206},"\"cuda:\"",[91,30397,30398],{"class":101},", flag)   ",[91,30400,30401],{"class":160},"#返回true的话说明被激活\n",[91,30403,30404],{"class":93,"line":1192},[91,30405,30406],{"class":160},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[91,30408,30409,30412,30414],{"class":93,"line":1198},[91,30410,30411],{"class":101},"ngpu",[91,30413,147],{"class":97},[91,30415,30416],{"class":150},"1\n",[91,30418,30419,30422,30424,30427,30430,30432,30435,30438,30441,30443,30445,30447,30449,30452],{"class":93,"line":1289},[91,30420,30421],{"class":101},"device",[91,30423,147],{"class":97},[91,30425,30426],{"class":101},"torch.device(",[91,30428,30429],{"class":206},"\"cuda:0\"",[91,30431,1682],{"class":97},[91,30433,30434],{"class":101},"(torch.cuda.is_available() ",[91,30436,30437],{"class":97},"and",[91,30439,30440],{"class":101}," ngpu",[91,30442,1062],{"class":97},[91,30444,293],{"class":150},[91,30446,13693],{"class":101},[91,30448,1679],{"class":97},[91,30450,30451],{"class":206}," \"cpu\"",[91,30453,108],{"class":101},[91,30455,30456,30458],{"class":93,"line":1295},[91,30457,30390],{"class":150},[91,30459,30460],{"class":101},"(device)\n",[91,30462,30463,30465,30468,30470],{"class":93,"line":1307},[91,30464,30390],{"class":150},[91,30466,30467],{"class":101},"(torch.cuda.get_device_name(",[91,30469,293],{"class":150},[91,30471,30472],{"class":101},"))\n",[91,30474,30475,30477,30480,30482,30484,30486],{"class":93,"line":1590},[91,30476,30390],{"class":150},[91,30478,30479],{"class":101},"(torch.rand(",[91,30481,173],{"class":150},[91,30483,480],{"class":101},[91,30485,173],{"class":150},[91,30487,30488],{"class":101},").cuda())\n",[91,30490,30491],{"class":93,"line":1595},[91,30492,30493],{"class":160},"# 查看cuda和cudnn的版本\n",[91,30495,30496,30499,30501],{"class":93,"line":1601},[91,30497,30498],{"class":101},"cuda_version",[91,30500,147],{"class":97},[91,30502,30503],{"class":101},"torch.version.cuda\n",[91,30505,30506,30508,30510,30513],{"class":93,"line":1606},[91,30507,30390],{"class":150},[91,30509,102],{"class":101},[91,30511,30512],{"class":206},"\"cuda version\"",[91,30514,30515],{"class":101},",cuda_version)\n",[91,30517,30518,30521,30523],{"class":93,"line":1620},[91,30519,30520],{"class":101},"cudnn_version",[91,30522,147],{"class":97},[91,30524,30525],{"class":101},"torch.backends.cudnn.version()\n",[91,30527,30528,30530,30532,30535],{"class":93,"line":1625},[91,30529,30390],{"class":150},[91,30531,102],{"class":101},[91,30533,30534],{"class":206},"\"cudnn version\"",[91,30536,30537],{"class":101},",cudnn_version)\n",[38,30539,30540],{},[1440,30541],{"alt":10,"src":30542},"\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",[38,30544,30545],{},"cuda:0 指的是一块显卡",[5105,30547,30548],{},"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":10,"searchDepth":11,"depth":11,"links":30550},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30257,"description":13},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30557,"title":30558,"body":30559,"description":13,"extension":14,"meta":50363,"navigation":17,"path":50364,"seo":50365,"stem":50366,"__hash__":50367},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30560,"toc":50357},[30561,30564,30568,30572,30575,30580,30585,30588,30593,30598,30603,30606,30610,30615,30619,30624,30627,30632,30635,30638,30641,30644,30649,30652,30657,30662,30667,30672,30675,30679,30682,30687,31291,31296,31299,31304,31307,31310,31774,31777,31780,31783,31786,33837,33840,33845,33850,34645,34648,34653,35431,35435,37094,37098,37812,37816,37820,37825,37830,37835,37838,37843,37848,37853,37858,37863,37867,37872,39154,39159,39162,39165,39168,39323,39326,39329,40545,40550,41245,41249,41253,41258,41263,41266,41271,41276,41281,41286,41291,41296,41301,41306,41311,41316,41321,41326,41331,41336,41341,41346,41351,41356,41361,41366,41371,41376,41381,41386,41391,41396,41401,41406,41411,41416,41420,41424,41427,42905,42909,44556,44560,45254,45258,45261,45264,45808,45811,45815,45818,47215,47219,47222,47800,49587,49591,49594,50354],[29,30562,30558],{"id":30563},"_2经典神经网络",[63,30565,30567],{"id":30566},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21977,30569,30571],{"id":30570},"_211原理介绍","2.1.1.原理介绍",[38,30573,30574],{},"LeNet-5",[46,30576,30577],{},[49,30578,30579],{},"原理",[38,30581,30582],{},[1440,30583],{"alt":10,"src":30584},"\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",[38,30586,30587],{},"B是batch批次；C是channel通道",[46,30589,30590],{"start":11},[49,30591,30592],{},"网络参数详细",[38,30594,30595],{},[1440,30596],{"alt":10,"src":30597},"\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",[38,30599,30600],{},[1440,30601],{"alt":10,"src":30602},"\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",[38,30604,30605],{},"AlexNet",[46,30607,30608],{},[49,30609,30579],{},[38,30611,30612],{},[1440,30613],{"alt":10,"src":30614},"\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",[46,30616,30617],{"start":11},[49,30618,30592],{},[38,30620,30621],{},[1440,30622],{"alt":10,"src":30623},"\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",[38,30625,30626],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[38,30628,30629],{},[1440,30630],{"alt":10,"src":30631},"\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",[38,30633,30634],{},"数据处理中的图像增强操作:",[38,30636,30637],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[38,30639,30640],{},"①增加数据量，保证训练数据充足；②防止过拟合",[38,30642,30643],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[38,30645,30646],{},[1440,30647],{"alt":10,"src":30648},"\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",[38,30650,30651],{},"提升网络精确度的方法：LRN正则化",[38,30653,30654],{},[1440,30655],{"alt":10,"src":30656},"\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",[38,30658,30659],{},[1440,30660],{"alt":10,"src":30661},"\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",[46,30663,30664],{"start":1157},[49,30665,30666],{},"AlexNet的总结",[38,30668,30669],{},[1440,30670],{"alt":10,"src":30671},"\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",[38,30673,30674],{},"比LeNet模型要深一丢丢",[21977,30676,30678],{"id":30677},"_212代码实现","2.1.2.代码实现",[38,30680,30681],{},"（1）LeNet",[46,30683,30684],{},[49,30685,30686],{},"模型搭建",[83,30688,30690],{"className":30353,"code":30689,"language":30355,"meta":10,"style":10},"# 导入库\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",[88,30691,30692,30697,30703,30708,30721,30726,30738,30742,30762,30767,30772,30783,30788,30807,30811,30816,30865,30877,30882,30911,30946,30973,30978,30990,30995,31015,31034,31053,31057,31062,31072,31089,31100,31115,31126,31137,31152,31167,31178,31185,31189,31203,31208,31231,31236,31241,31246,31250,31255,31260,31270],{"__ignoreMap":10},[91,30693,30694],{"class":93,"line":94},[91,30695,30696],{"class":160},"# 导入库\n",[91,30698,30699,30701],{"class":93,"line":11},[91,30700,30367],{"class":97},[91,30702,30370],{"class":101},[91,30704,30705],{"class":93,"line":1157},[91,30706,30707],{"class":160},"# 导入神经网络层\n",[91,30709,30710,30713,30716,30718],{"class":93,"line":1172},[91,30711,30712],{"class":97},"from",[91,30714,30715],{"class":101}," torch ",[91,30717,30367],{"class":97},[91,30719,30720],{"class":101}," nn\n",[91,30722,30723],{"class":93,"line":1178},[91,30724,30725],{"class":160},"# 导入展示神经网络参数的包\n",[91,30727,30728,30730,30733,30735],{"class":93,"line":1192},[91,30729,30712],{"class":97},[91,30731,30732],{"class":101}," torchsummary ",[91,30734,30367],{"class":97},[91,30736,30737],{"class":101}," summary\n",[91,30739,30740],{"class":93,"line":1198},[91,30741,2378],{"emptyLinePlaceholder":17},[91,30743,30744,30746,30749,30751,30754,30756,30759],{"class":93,"line":1289},[91,30745,14673],{"class":97},[91,30747,30748],{"class":1941}," LeNet",[91,30750,102],{"class":101},[91,30752,30753],{"class":1941},"nn",[91,30755,660],{"class":101},[91,30757,30758],{"class":1941},"Module",[91,30760,30761],{"class":101},"):\n",[91,30763,30764],{"class":93,"line":1295},[91,30765,30766],{"class":160},"    # 模型初始化:\n",[91,30768,30769],{"class":93,"line":1307},[91,30770,30771],{"class":160},"    # 定义一些网络层和激活函数\n",[91,30773,30774,30777,30780],{"class":93,"line":1590},[91,30775,30776],{"class":97},"    def",[91,30778,30779],{"class":150}," __init__",[91,30781,30782],{"class":101},"(self):\n",[91,30784,30785],{"class":93,"line":1595},[91,30786,30787],{"class":160},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[91,30789,30790,30793,30796,30799,30802,30805],{"class":93,"line":1601},[91,30791,30792],{"class":150},"        super",[91,30794,30795],{"class":101},"(LeNet,",[91,30797,30798],{"class":150},"self",[91,30800,30801],{"class":101},").",[91,30803,30804],{"class":150},"__init__",[91,30806,1954],{"class":101},[91,30808,30809],{"class":93,"line":1606},[91,30810,2378],{"emptyLinePlaceholder":17},[91,30812,30813],{"class":93,"line":1620},[91,30814,30815],{"class":160},"        # 定义网络层\n",[91,30817,30818,30821,30824,30826,30829,30832,30834,30836,30838,30841,30843,30845,30847,30850,30852,30854,30856,30859,30861,30863],{"class":93,"line":1625},[91,30819,30820],{"class":150},"        self",[91,30822,30823],{"class":101},".c1",[91,30825,147],{"class":97},[91,30827,30828],{"class":101},"nn.Conv2d(",[91,30830,30831],{"class":5195},"in_channels",[91,30833,147],{"class":97},[91,30835,319],{"class":150},[91,30837,480],{"class":101},[91,30839,30840],{"class":5195},"out_channels",[91,30842,147],{"class":97},[91,30844,446],{"class":150},[91,30846,480],{"class":101},[91,30848,30849],{"class":5195},"kernel_size",[91,30851,147],{"class":97},[91,30853,421],{"class":150},[91,30855,480],{"class":101},[91,30857,30858],{"class":5195},"padding",[91,30860,147],{"class":97},[91,30862,179],{"class":150},[91,30864,108],{"class":101},[91,30866,30867,30869,30872,30874],{"class":93,"line":1631},[91,30868,30820],{"class":150},[91,30870,30871],{"class":101},".sig",[91,30873,147],{"class":97},[91,30875,30876],{"class":101},"nn.Sigmoid()\n",[91,30878,30879],{"class":93,"line":1652},[91,30880,30881],{"class":160},"        # 定义池化\n",[91,30883,30884,30886,30889,30891,30894,30896,30898,30900,30902,30905,30907,30909],{"class":93,"line":1657},[91,30885,30820],{"class":150},[91,30887,30888],{"class":101},".s2",[91,30890,147],{"class":97},[91,30892,30893],{"class":101},"nn.AvgPool2d(",[91,30895,30849],{"class":5195},[91,30897,147],{"class":97},[91,30899,179],{"class":150},[91,30901,480],{"class":101},[91,30903,30904],{"class":5195},"stride",[91,30906,147],{"class":97},[91,30908,179],{"class":150},[91,30910,108],{"class":101},[91,30912,30913,30915,30918,30920,30922,30924,30926,30928,30930,30932,30934,30936,30938,30940,30942,30944],{"class":93,"line":1671},[91,30914,30820],{"class":150},[91,30916,30917],{"class":101},".c3",[91,30919,147],{"class":97},[91,30921,30828],{"class":101},[91,30923,30831],{"class":5195},[91,30925,147],{"class":97},[91,30927,446],{"class":150},[91,30929,480],{"class":101},[91,30931,30840],{"class":5195},[91,30933,147],{"class":97},[91,30935,703],{"class":150},[91,30937,480],{"class":101},[91,30939,30849],{"class":5195},[91,30941,147],{"class":97},[91,30943,421],{"class":150},[91,30945,108],{"class":101},[91,30947,30948,30950,30953,30955,30957,30959,30961,30963,30965,30967,30969,30971],{"class":93,"line":1676},[91,30949,30820],{"class":150},[91,30951,30952],{"class":101},".s4",[91,30954,147],{"class":97},[91,30956,30893],{"class":101},[91,30958,30849],{"class":5195},[91,30960,147],{"class":97},[91,30962,179],{"class":150},[91,30964,480],{"class":101},[91,30966,30904],{"class":5195},[91,30968,147],{"class":97},[91,30970,179],{"class":150},[91,30972,108],{"class":101},[91,30974,30975],{"class":93,"line":1705},[91,30976,30977],{"class":160},"        # 定义平展层\n",[91,30979,30980,30982,30985,30987],{"class":93,"line":1710},[91,30981,30820],{"class":150},[91,30983,30984],{"class":101},".flatten",[91,30986,147],{"class":97},[91,30988,30989],{"class":101},"nn.Flatten()\n",[91,30991,30992],{"class":93,"line":1727},[91,30993,30994],{"class":160},"        # 定义全连接层\n",[91,30996,30997,30999,31002,31004,31007,31009,31011,31013],{"class":93,"line":1732},[91,30998,30820],{"class":150},[91,31000,31001],{"class":101},".f5",[91,31003,147],{"class":97},[91,31005,31006],{"class":101},"nn.Linear(",[91,31008,3965],{"class":150},[91,31010,480],{"class":101},[91,31012,919],{"class":150},[91,31014,108],{"class":101},[91,31016,31017,31019,31022,31024,31026,31028,31030,31032],{"class":93,"line":1737},[91,31018,30820],{"class":150},[91,31020,31021],{"class":101},".f6",[91,31023,147],{"class":97},[91,31025,31006],{"class":101},[91,31027,919],{"class":150},[91,31029,480],{"class":101},[91,31031,813],{"class":150},[91,31033,108],{"class":101},[91,31035,31036,31038,31041,31043,31045,31047,31049,31051],{"class":93,"line":1742},[91,31037,30820],{"class":150},[91,31039,31040],{"class":101},".f7",[91,31042,147],{"class":97},[91,31044,31006],{"class":101},[91,31046,813],{"class":150},[91,31048,480],{"class":101},[91,31050,548],{"class":150},[91,31052,108],{"class":101},[91,31054,31055],{"class":93,"line":1756},[91,31056,2378],{"emptyLinePlaceholder":17},[91,31058,31059],{"class":93,"line":1761},[91,31060,31061],{"class":160},"    # 写工具->写前向传播\n",[91,31063,31064,31066,31069],{"class":93,"line":2555},[91,31065,30776],{"class":97},[91,31067,31068],{"class":1941}," forward",[91,31070,31071],{"class":101},"(self,x):\n",[91,31073,31074,31077,31079,31081,31084,31086],{"class":93,"line":2569},[91,31075,31076],{"class":101},"        x",[91,31078,147],{"class":97},[91,31080,30798],{"class":150},[91,31082,31083],{"class":101},".sig(",[91,31085,30798],{"class":150},[91,31087,31088],{"class":101},".c1(x))\n",[91,31090,31091,31093,31095,31097],{"class":93,"line":2577},[91,31092,31076],{"class":101},[91,31094,147],{"class":97},[91,31096,30798],{"class":150},[91,31098,31099],{"class":101},".s2(x)\n",[91,31101,31102,31104,31106,31108,31110,31112],{"class":93,"line":2582},[91,31103,31076],{"class":101},[91,31105,147],{"class":97},[91,31107,30798],{"class":150},[91,31109,31083],{"class":101},[91,31111,30798],{"class":150},[91,31113,31114],{"class":101},".c3(x))\n",[91,31116,31117,31119,31121,31123],{"class":93,"line":2588},[91,31118,31076],{"class":101},[91,31120,147],{"class":97},[91,31122,30798],{"class":150},[91,31124,31125],{"class":101},".s4(x)\n",[91,31127,31128,31130,31132,31134],{"class":93,"line":2594},[91,31129,31076],{"class":101},[91,31131,147],{"class":97},[91,31133,30798],{"class":150},[91,31135,31136],{"class":101},".flatten(x)\n",[91,31138,31139,31141,31143,31145,31147,31149],{"class":93,"line":2599},[91,31140,31076],{"class":101},[91,31142,147],{"class":97},[91,31144,30798],{"class":150},[91,31146,31083],{"class":101},[91,31148,30798],{"class":150},[91,31150,31151],{"class":101},".f5(x))\n",[91,31153,31154,31156,31158,31160,31162,31164],{"class":93,"line":7927},[91,31155,31076],{"class":101},[91,31157,147],{"class":97},[91,31159,30798],{"class":150},[91,31161,31083],{"class":101},[91,31163,30798],{"class":150},[91,31165,31166],{"class":101},".f6(x))\n",[91,31168,31169,31171,31173,31175],{"class":93,"line":7951},[91,31170,31076],{"class":101},[91,31172,147],{"class":97},[91,31174,30798],{"class":150},[91,31176,31177],{"class":101},".f7(x)\n",[91,31179,31180,31182],{"class":93,"line":7956},[91,31181,14731],{"class":97},[91,31183,31184],{"class":101}," x\n",[91,31186,31187],{"class":93,"line":7962},[91,31188,2378],{"emptyLinePlaceholder":17},[91,31190,31191,31193,31196,31198,31201],{"class":93,"line":7989},[91,31192,1509],{"class":97},[91,31194,31195],{"class":150}," __name__",[91,31197,2927],{"class":97},[91,31199,31200],{"class":206},"\"__main__\"",[91,31202,3717],{"class":101},[91,31204,31205],{"class":93,"line":7994},[91,31206,31207],{"class":160},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[91,31209,31210,31213,31215,31217,31220,31222,31225,31227,31229],{"class":93,"line":8000},[91,31211,31212],{"class":101},"    device",[91,31214,147],{"class":97},[91,31216,30426],{"class":101},[91,31218,31219],{"class":206},"\"cuda\"",[91,31221,1682],{"class":97},[91,31223,31224],{"class":101}," torch.cuda.is_available() ",[91,31226,1679],{"class":97},[91,31228,30451],{"class":206},[91,31230,108],{"class":101},[91,31232,31233],{"class":93,"line":8012},[91,31234,31235],{"class":160},"    # 如果就是想指定用cpu用下方代码:\n",[91,31237,31238],{"class":93,"line":8024},[91,31239,31240],{"class":160},"    # device=\"cpu\"\n",[91,31242,31243],{"class":93,"line":8036},[91,31244,31245],{"class":160},"    # print(device)\n",[91,31247,31248],{"class":93,"line":9695},[91,31249,2378],{"emptyLinePlaceholder":17},[91,31251,31252],{"class":93,"line":9720},[91,31253,31254],{"class":160},"    # 实例化模型\n",[91,31256,31257],{"class":93,"line":9743},[91,31258,31259],{"class":160},"    # 将模型放到设备中去运行\n",[91,31261,31262,31265,31267],{"class":93,"line":9767},[91,31263,31264],{"class":101},"    model",[91,31266,147],{"class":97},[91,31268,31269],{"class":101},"LeNet().to(device)\n",[91,31271,31272,31275,31278,31280,31282,31284,31286,31288],{"class":93,"line":9772},[91,31273,31274],{"class":150},"    print",[91,31276,31277],{"class":101},"(summary(model,(",[91,31279,319],{"class":150},[91,31281,480],{"class":101},[91,31283,1003],{"class":150},[91,31285,480],{"class":101},[91,31287,1003],{"class":150},[91,31289,31290],{"class":101},")))\n",[38,31292,31293],{},[1440,31294],{"alt":10,"src":31295},"\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",[38,31297,31298],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[46,31300,31301],{"start":11},[49,31302,31303],{},"训练",[38,31305,31306],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[38,31308,31309],{},"在训练之前可以将数据展示看一下",[83,31311,31313],{"className":30353,"code":31312,"language":30355,"meta":10,"style":10},"# 建立画图的函数，用于展示数据\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",[88,31314,31315,31320,31325,31337,31349,31362,31367,31379,31384,31396,31401,31413,31417,31421,31442,31454,31459,31480,31491,31495,31500,31518,31529,31534,31545,31550,31561,31565,31570,31585,31598,31603,31608,31621,31634,31647,31652,31656,31661,31681,31698,31718,31731,31744,31754,31769],{"__ignoreMap":10},[91,31316,31317],{"class":93,"line":94},[91,31318,31319],{"class":160},"# 建立画图的函数，用于展示数据\n",[91,31321,31322],{"class":93,"line":11},[91,31323,31324],{"class":160},"# torchvision中包含很多内置的数据集\n",[91,31326,31327,31329,31332,31334],{"class":93,"line":1157},[91,31328,30712],{"class":97},[91,31330,31331],{"class":101}," sklearn.externals.array_api_compat.torch ",[91,31333,30367],{"class":97},[91,31335,31336],{"class":101}," squeeze\n",[91,31338,31339,31341,31344,31346],{"class":93,"line":1172},[91,31340,30712],{"class":97},[91,31342,31343],{"class":101}," torchvision.datasets ",[91,31345,30367],{"class":97},[91,31347,31348],{"class":101}," FashionMNIST\n",[91,31350,31351,31353,31356,31359],{"class":93,"line":1178},[91,31352,30367],{"class":97},[91,31354,31355],{"class":101}," numpy ",[91,31357,31358],{"class":97},"as",[91,31360,31361],{"class":101}," np\n",[91,31363,31364],{"class":93,"line":1192},[91,31365,31366],{"class":160},"# 引入处理数据集的包\n",[91,31368,31369,31371,31374,31376],{"class":93,"line":1198},[91,31370,30712],{"class":97},[91,31372,31373],{"class":101}," torchvision ",[91,31375,30367],{"class":97},[91,31377,31378],{"class":101}," transforms\n",[91,31380,31381],{"class":93,"line":1289},[91,31382,31383],{"class":160},"# 从torch库中引入数据处理的包\n",[91,31385,31386,31388,31391,31393],{"class":93,"line":1295},[91,31387,30367],{"class":97},[91,31389,31390],{"class":101}," torch.utils.data ",[91,31392,31358],{"class":97},[91,31394,31395],{"class":101}," Data\n",[91,31397,31398],{"class":93,"line":1307},[91,31399,31400],{"class":160},"# 导入画图的库\n",[91,31402,31403,31405,31408,31410],{"class":93,"line":1590},[91,31404,30367],{"class":97},[91,31406,31407],{"class":101}," matplotlib.pyplot ",[91,31409,31358],{"class":97},[91,31411,31412],{"class":101}," plt\n",[91,31414,31415],{"class":93,"line":1595},[91,31416,2378],{"emptyLinePlaceholder":17},[91,31418,31419],{"class":93,"line":1601},[91,31420,2378],{"emptyLinePlaceholder":17},[91,31422,31423,31426,31428,31431,31434,31436,31439],{"class":93,"line":1606},[91,31424,31425],{"class":101},"train_data",[91,31427,147],{"class":97},[91,31429,31430],{"class":101},"FashionMNIST(",[91,31432,31433],{"class":5195},"root",[91,31435,147],{"class":97},[91,31437,31438],{"class":206},"'.\u002Fdata'",[91,31440,31441],{"class":101},",\n",[91,31443,31444,31447,31449,31452],{"class":93,"line":1620},[91,31445,31446],{"class":5195},"                        train",[91,31448,147],{"class":97},[91,31450,31451],{"class":150},"True",[91,31453,31441],{"class":101},[91,31455,31456],{"class":93,"line":1625},[91,31457,31458],{"class":160},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[91,31460,31461,31464,31466,31469,31472,31474,31477],{"class":93,"line":1631},[91,31462,31463],{"class":5195},"                        transform",[91,31465,147],{"class":97},[91,31467,31468],{"class":101},"transforms.Compose([transforms.Resize(",[91,31470,31471],{"class":5195},"size",[91,31473,147],{"class":97},[91,31475,31476],{"class":150},"224",[91,31478,31479],{"class":101},"),transforms.ToTensor()]),\n",[91,31481,31482,31485,31487,31489],{"class":93,"line":1652},[91,31483,31484],{"class":5195},"                        download",[91,31486,147],{"class":97},[91,31488,31451],{"class":150},[91,31490,108],{"class":101},[91,31492,31493],{"class":93,"line":1657},[91,31494,2378],{"emptyLinePlaceholder":17},[91,31496,31497],{"class":93,"line":1671},[91,31498,31499],{"class":160},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[91,31501,31502,31505,31507,31510,31513,31515],{"class":93,"line":1676},[91,31503,31504],{"class":101},"train_loader",[91,31506,147],{"class":97},[91,31508,31509],{"class":101},"Data.DataLoader(",[91,31511,31512],{"class":5195},"dataset",[91,31514,147],{"class":97},[91,31516,31517],{"class":101},"train_data,\n",[91,31519,31520,31523,31525,31527],{"class":93,"line":1705},[91,31521,31522],{"class":5195},"                             batch_size",[91,31524,147],{"class":97},[91,31526,305],{"class":150},[91,31528,31441],{"class":101},[91,31530,31531],{"class":93,"line":1710},[91,31532,31533],{"class":160},"                             # 数据是否打乱\n",[91,31535,31536,31539,31541,31543],{"class":93,"line":1727},[91,31537,31538],{"class":5195},"                             shuffle",[91,31540,147],{"class":97},[91,31542,31451],{"class":150},[91,31544,31441],{"class":101},[91,31546,31547],{"class":93,"line":1732},[91,31548,31549],{"class":160},"                             # 规定加载数据的进程\n",[91,31551,31552,31555,31557,31559],{"class":93,"line":1737},[91,31553,31554],{"class":5195},"                             num_workers",[91,31556,147],{"class":97},[91,31558,293],{"class":150},[91,31560,108],{"class":101},[91,31562,31563],{"class":93,"line":1742},[91,31564,2378],{"emptyLinePlaceholder":17},[91,31566,31567],{"class":93,"line":1756},[91,31568,31569],{"class":160},"# 获得一个batch的数据\n",[91,31571,31572,31574,31577,31579,31582],{"class":93,"line":1761},[91,31573,3003],{"class":97},[91,31575,31576],{"class":101}," step,(b_x,b_y) ",[91,31578,26018],{"class":97},[91,31580,31581],{"class":150}," enumerate",[91,31583,31584],{"class":101},"(train_loader):\n",[91,31586,31587,31589,31592,31594,31596],{"class":93,"line":2555},[91,31588,3079],{"class":97},[91,31590,31591],{"class":101}," step ",[91,31593,1062],{"class":97},[91,31595,4071],{"class":150},[91,31597,3717],{"class":101},[91,31599,31600],{"class":93,"line":2569},[91,31601,31602],{"class":97},"        break\n",[91,31604,31605],{"class":93,"line":2577},[91,31606,31607],{"class":160},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[91,31609,31610,31613,31615,31618],{"class":93,"line":2582},[91,31611,31612],{"class":101},"batch_x",[91,31614,147],{"class":97},[91,31616,31617],{"class":101},"b_x.squeeze().numpy()  ",[91,31619,31620],{"class":160},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[91,31622,31623,31626,31628,31631],{"class":93,"line":2588},[91,31624,31625],{"class":101},"batch_y",[91,31627,147],{"class":97},[91,31629,31630],{"class":101},"b_y.numpy()   ",[91,31632,31633],{"class":160},"#将张量转换成功numpy数组\n",[91,31635,31636,31639,31641,31644],{"class":93,"line":2594},[91,31637,31638],{"class":101},"class_label",[91,31640,147],{"class":97},[91,31642,31643],{"class":101},"train_data.classes  ",[91,31645,31646],{"class":160},"#训练集标签\n",[91,31648,31649],{"class":93,"line":2599},[91,31650,31651],{"class":160},"# print(class_label)\n",[91,31653,31654],{"class":93,"line":7927},[91,31655,2378],{"emptyLinePlaceholder":17},[91,31657,31658],{"class":93,"line":7951},[91,31659,31660],{"class":160},"# 可视化一个batch的图像\n",[91,31662,31663,31666,31669,31671,31673,31675,31677,31679],{"class":93,"line":7956},[91,31664,31665],{"class":101},"plt.figure(",[91,31667,31668],{"class":5195},"figsize",[91,31670,147],{"class":97},[91,31672,102],{"class":101},[91,31674,600],{"class":150},[91,31676,480],{"class":101},[91,31678,421],{"class":150},[91,31680,30472],{"class":101},[91,31682,31683,31685,31688,31690,31693,31695],{"class":93,"line":7962},[91,31684,3003],{"class":97},[91,31686,31687],{"class":101}," ii ",[91,31689,26018],{"class":97},[91,31691,31692],{"class":101}," np.arange(",[91,31694,7337],{"class":150},[91,31696,31697],{"class":101},"(batch_y)):\n",[91,31699,31700,31703,31705,31707,31709,31712,31714,31716],{"class":93,"line":7989},[91,31701,31702],{"class":101},"    plt.subplot(",[91,31704,395],{"class":150},[91,31706,480],{"class":101},[91,31708,703],{"class":150},[91,31710,31711],{"class":101},",ii ",[91,31713,583],{"class":97},[91,31715,25093],{"class":150},[91,31717,108],{"class":101},[91,31719,31720,31723,31726,31728],{"class":93,"line":7994},[91,31721,31722],{"class":101},"    plt.imshow(batch_x[ii,:,:],",[91,31724,31725],{"class":5195},"cmap",[91,31727,147],{"class":97},[91,31729,31730],{"class":101},"plt.cm.gray)\n",[91,31732,31733,31736,31738,31740,31742],{"class":93,"line":8000},[91,31734,31735],{"class":101},"    plt.title(class_label[batch_y[ii]],",[91,31737,31471],{"class":5195},[91,31739,147],{"class":97},[91,31741,548],{"class":150},[91,31743,108],{"class":101},[91,31745,31746,31749,31752],{"class":93,"line":8012},[91,31747,31748],{"class":101},"    plt.axis(",[91,31750,31751],{"class":206},"\"off\"",[91,31753,108],{"class":101},[91,31755,31756,31759,31762,31764,31767],{"class":93,"line":8024},[91,31757,31758],{"class":101},"    plt.subplots_adjust(",[91,31760,31761],{"class":5195},"wspace",[91,31763,147],{"class":97},[91,31765,31766],{"class":150},"0.05",[91,31768,108],{"class":101},[91,31770,31771],{"class":93,"line":8036},[91,31772,31773],{"class":101},"plt.show()\n",[38,31775,31776],{},"用matplotlib进行展示的过程可以后续再补",[38,31778,31779],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[38,31781,31782],{},"训练次数就是按照批次过整个训练集数据的次数",[38,31784,31785],{},"模型训练：",[83,31787,31789],{"className":30353,"code":31788,"language":30355,"meta":10,"style":10},"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",[88,31790,31791,31798,31805,31809,31821,31827,31838,31848,31858,31868,31878,31883,31895,31905,31909,31913,31918,31929,31942,31953,31970,31981,32020,32036,32048,32059,32064,32075,32091,32102,32113,32124,32131,32135,32140,32145,32149,32154,32164,32185,32189,32193,32198,32203,32208,32228,32232,32237,32247,32251,32256,32265,32270,32275,32280,32290,32294,32298,32303,32308,32318,32323,32333,32338,32347,32352,32361,32366,32375,32379,32384,32394,32398,32402,32407,32422,32450,32465,32469,32474,32479,32488,32493,32502,32507,32516,32521,32530,32535,32544,32549,32558,32563,32576,32581,32591,32596,32606,32612,32618,32624,32630,32641,32647,32667,32673,32684,32690,32696,32702,32708,32714,32720,32726,32746,32752,32768,32774,32788,32794,32809,32815,32824,32830,32839,32845,32851,32860,32866,32877,32883,32902,32908,32919,32925,32945,32961,32967,32981,32987,32993,33004,33010,33016,33026,33032,33043,33049,33059,33064,33070,33119,33166,33171,33177,33196,33202,33222,33228,33234,33244,33249,33255,33271,33316,33322,33328,33334,33345,33351,33357,33363,33381,33395,33404,33413,33422,33431,33437,33443,33451,33456,33462,33473,33479,33499,33505,33511,33517,33534,33540,33546,33552,33558,33564,33591,33615,33621,33627,33633,33644,33655,33661,33678,33701,33724,33730,33735,33744,33754,33760,33765,33771,33784,33790,33801,33812,33831],{"__ignoreMap":10},[91,31792,31793,31795],{"class":93,"line":94},[91,31794,30367],{"class":97},[91,31796,31797],{"class":101}," copy\n",[91,31799,31800,31802],{"class":93,"line":11},[91,31801,30367],{"class":97},[91,31803,31804],{"class":101}," time\n",[91,31806,31807],{"class":93,"line":1157},[91,31808,2378],{"emptyLinePlaceholder":17},[91,31810,31811,31813,31816,31818],{"class":93,"line":1172},[91,31812,30367],{"class":97},[91,31814,31815],{"class":101}," pandas ",[91,31817,31358],{"class":97},[91,31819,31820],{"class":101}," pd\n",[91,31822,31823,31825],{"class":93,"line":1178},[91,31824,30367],{"class":97},[91,31826,30370],{"class":101},[91,31828,31829,31831,31833,31835],{"class":93,"line":1192},[91,31830,30712],{"class":97},[91,31832,31390],{"class":101},[91,31834,30367],{"class":97},[91,31836,31837],{"class":101}," Dataset\n",[91,31839,31840,31842,31844,31846],{"class":93,"line":1198},[91,31841,30712],{"class":97},[91,31843,31343],{"class":101},[91,31845,30367],{"class":97},[91,31847,31348],{"class":101},[91,31849,31850,31852,31854,31856],{"class":93,"line":1289},[91,31851,30712],{"class":97},[91,31853,31373],{"class":101},[91,31855,30367],{"class":97},[91,31857,31378],{"class":101},[91,31859,31860,31862,31864,31866],{"class":93,"line":1295},[91,31861,30367],{"class":97},[91,31863,31390],{"class":101},[91,31865,31358],{"class":97},[91,31867,31395],{"class":101},[91,31869,31870,31872,31874,31876],{"class":93,"line":1307},[91,31871,30367],{"class":97},[91,31873,31407],{"class":101},[91,31875,31358],{"class":97},[91,31877,31412],{"class":101},[91,31879,31880],{"class":93,"line":1590},[91,31881,31882],{"class":160},"# 导入模型\n",[91,31884,31885,31887,31890,31892],{"class":93,"line":1595},[91,31886,30712],{"class":97},[91,31888,31889],{"class":101}," model ",[91,31891,30367],{"class":97},[91,31893,31894],{"class":101}," LeNet\n",[91,31896,31897,31899,31901,31903],{"class":93,"line":1601},[91,31898,30712],{"class":97},[91,31900,30715],{"class":101},[91,31902,30367],{"class":97},[91,31904,30720],{"class":101},[91,31906,31907],{"class":93,"line":1606},[91,31908,2378],{"emptyLinePlaceholder":17},[91,31910,31911],{"class":93,"line":1620},[91,31912,2378],{"emptyLinePlaceholder":17},[91,31914,31915],{"class":93,"line":1625},[91,31916,31917],{"class":160},"# 处理训练集与验证集函数--->划分数据集\n",[91,31919,31920,31923,31926],{"class":93,"line":1631},[91,31921,31922],{"class":97},"def",[91,31924,31925],{"class":1941}," train_val_data_process",[91,31927,31928],{"class":101},"():\n",[91,31930,31931,31934,31936,31938,31940],{"class":93,"line":1652},[91,31932,31933],{"class":101},"    train_data",[91,31935,147],{"class":97},[91,31937,31430],{"class":101},[91,31939,31438],{"class":206},[91,31941,31441],{"class":101},[91,31943,31944,31947,31949,31951],{"class":93,"line":1657},[91,31945,31946],{"class":5195},"                            train",[91,31948,147],{"class":97},[91,31950,31451],{"class":150},[91,31952,31441],{"class":101},[91,31954,31955,31958,31960,31962,31964,31966,31968],{"class":93,"line":1671},[91,31956,31957],{"class":5195},"                            transform",[91,31959,147],{"class":97},[91,31961,31468],{"class":101},[91,31963,31471],{"class":5195},[91,31965,147],{"class":97},[91,31967,1003],{"class":150},[91,31969,31479],{"class":101},[91,31971,31972,31975,31977,31979],{"class":93,"line":1676},[91,31973,31974],{"class":5195},"                            download",[91,31976,147],{"class":97},[91,31978,31451],{"class":150},[91,31980,108],{"class":101},[91,31982,31983,31986,31988,31991,31994,31996,31999,32001,32003,32006,32008,32010,32013,32015,32017],{"class":93,"line":1705},[91,31984,31985],{"class":101},"    train_data,val_data",[91,31987,147],{"class":97},[91,31989,31990],{"class":101},"Data.random_split(train_data,[",[91,31992,31993],{"class":150},"round",[91,31995,102],{"class":101},[91,31997,31998],{"class":150},"0.8",[91,32000,557],{"class":97},[91,32002,7337],{"class":150},[91,32004,32005],{"class":101},"(train_data)),",[91,32007,31993],{"class":150},[91,32009,102],{"class":101},[91,32011,32012],{"class":150},"0.2",[91,32014,557],{"class":97},[91,32016,7337],{"class":150},[91,32018,32019],{"class":101},"(train_data))])\n",[91,32021,32022,32025,32027,32030,32032,32034],{"class":93,"line":1710},[91,32023,32024],{"class":101},"    train_dataloader ",[91,32026,147],{"class":97},[91,32028,32029],{"class":101}," Data.DataLoader(",[91,32031,31512],{"class":5195},[91,32033,147],{"class":97},[91,32035,31517],{"class":101},[91,32037,32038,32041,32043,32046],{"class":93,"line":1727},[91,32039,32040],{"class":5195},"                                       batch_size",[91,32042,147],{"class":97},[91,32044,32045],{"class":150},"128",[91,32047,31441],{"class":101},[91,32049,32050,32053,32055,32057],{"class":93,"line":1732},[91,32051,32052],{"class":5195},"                                       shuffle",[91,32054,147],{"class":97},[91,32056,31451],{"class":150},[91,32058,31441],{"class":101},[91,32060,32061],{"class":93,"line":1737},[91,32062,32063],{"class":160},"                                       # 规定8个进程\n",[91,32065,32066,32069,32071,32073],{"class":93,"line":1742},[91,32067,32068],{"class":5195},"                                       num_workers",[91,32070,147],{"class":97},[91,32072,497],{"class":150},[91,32074,108],{"class":101},[91,32076,32077,32080,32082,32084,32086,32088],{"class":93,"line":1756},[91,32078,32079],{"class":101},"    val_dataloader",[91,32081,147],{"class":97},[91,32083,31509],{"class":101},[91,32085,31512],{"class":5195},[91,32087,147],{"class":97},[91,32089,32090],{"class":101},"val_data,\n",[91,32092,32093,32096,32098,32100],{"class":93,"line":1761},[91,32094,32095],{"class":5195},"                                   batch_size",[91,32097,147],{"class":97},[91,32099,32045],{"class":150},[91,32101,31441],{"class":101},[91,32103,32104,32107,32109,32111],{"class":93,"line":2555},[91,32105,32106],{"class":5195},"                                   shuffle",[91,32108,147],{"class":97},[91,32110,31451],{"class":150},[91,32112,31441],{"class":101},[91,32114,32115,32118,32120,32122],{"class":93,"line":2569},[91,32116,32117],{"class":5195},"                                   num_workers",[91,32119,147],{"class":97},[91,32121,497],{"class":150},[91,32123,108],{"class":101},[91,32125,32126,32128],{"class":93,"line":2577},[91,32127,4068],{"class":97},[91,32129,32130],{"class":101}," train_dataloader,val_dataloader\n",[91,32132,32133],{"class":93,"line":2582},[91,32134,2378],{"emptyLinePlaceholder":17},[91,32136,32137],{"class":93,"line":2588},[91,32138,32139],{"class":160},"# 验证是否出错\n",[91,32141,32142],{"class":93,"line":2594},[91,32143,32144],{"class":160},"# train_val_data_process()\n",[91,32146,32147],{"class":93,"line":2599},[91,32148,2378],{"emptyLinePlaceholder":17},[91,32150,32151],{"class":93,"line":7927},[91,32152,32153],{"class":160},"# 定义模型训练函数\n",[91,32155,32156,32158,32161],{"class":93,"line":7951},[91,32157,31922],{"class":97},[91,32159,32160],{"class":1941}," train_model_process",[91,32162,32163],{"class":101},"(model,train_dataloader,val_dataloader,num_epochs):\n",[91,32165,32166,32168,32170,32172,32174,32176,32178,32180,32183],{"class":93,"line":7956},[91,32167,31212],{"class":101},[91,32169,147],{"class":97},[91,32171,30426],{"class":101},[91,32173,31219],{"class":206},[91,32175,1682],{"class":97},[91,32177,31224],{"class":101},[91,32179,1679],{"class":97},[91,32181,32182],{"class":206}," 'cpu'",[91,32184,108],{"class":101},[91,32186,32187],{"class":93,"line":7962},[91,32188,2378],{"emptyLinePlaceholder":17},[91,32190,32191],{"class":93,"line":7989},[91,32192,2378],{"emptyLinePlaceholder":17},[91,32194,32195],{"class":93,"line":7994},[91,32196,32197],{"class":160},"    # 定义优化器\n",[91,32199,32200],{"class":93,"line":8000},[91,32201,32202],{"class":160},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[91,32204,32205],{"class":93,"line":8012},[91,32206,32207],{"class":160},"    # lr为学习率\n",[91,32209,32210,32213,32215,32218,32221,32223,32226],{"class":93,"line":8024},[91,32211,32212],{"class":101},"    optimizer",[91,32214,147],{"class":97},[91,32216,32217],{"class":101},"torch.optim.Adam(model.parameters(),",[91,32219,32220],{"class":5195},"lr",[91,32222,147],{"class":97},[91,32224,32225],{"class":150},"0.001",[91,32227,108],{"class":101},[91,32229,32230],{"class":93,"line":8036},[91,32231,2378],{"emptyLinePlaceholder":17},[91,32233,32234],{"class":93,"line":9695},[91,32235,32236],{"class":160},"    # 定义损失函数使用交叉熵损失函数\n",[91,32238,32239,32242,32244],{"class":93,"line":9720},[91,32240,32241],{"class":101},"    criterion",[91,32243,147],{"class":97},[91,32245,32246],{"class":101},"nn.CrossEntropyLoss()\n",[91,32248,32249],{"class":93,"line":9743},[91,32250,2378],{"emptyLinePlaceholder":17},[91,32252,32253],{"class":93,"line":9767},[91,32254,32255],{"class":160},"    # 将模型放到GPU中进行训练\n",[91,32257,32258,32260,32262],{"class":93,"line":9772},[91,32259,31264],{"class":101},[91,32261,147],{"class":97},[91,32263,32264],{"class":101},"model.to(device)\n",[91,32266,32267],{"class":93,"line":9777},[91,32268,32269],{"class":160},"    # 复制当前模型的参数\n",[91,32271,32272],{"class":93,"line":9782},[91,32273,32274],{"class":160},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[91,32276,32277],{"class":93,"line":9791},[91,32278,32279],{"class":160},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[91,32281,32282,32285,32287],{"class":93,"line":9796},[91,32283,32284],{"class":101},"    best_model_wts",[91,32286,147],{"class":97},[91,32288,32289],{"class":101},"copy.deepcopy(model.state_dict())\n",[91,32291,32292],{"class":93,"line":9802},[91,32293,2378],{"emptyLinePlaceholder":17},[91,32295,32296],{"class":93,"line":9823},[91,32297,2378],{"emptyLinePlaceholder":17},[91,32299,32300],{"class":93,"line":9829},[91,32301,32302],{"class":160},"    # 初始化参数\n",[91,32304,32305],{"class":93,"line":9843},[91,32306,32307],{"class":160},"    # 最高准确度\n",[91,32309,32310,32313,32315],{"class":93,"line":9849},[91,32311,32312],{"class":101},"    best_acc",[91,32314,147],{"class":97},[91,32316,32317],{"class":150},"0.0\n",[91,32319,32320],{"class":93,"line":9876},[91,32321,32322],{"class":160},"    # 训练集损失列表\n",[91,32324,32325,32328,32330],{"class":93,"line":9885},[91,32326,32327],{"class":101},"    train_loss_all",[91,32329,147],{"class":97},[91,32331,32332],{"class":101},"[]\n",[91,32334,32335],{"class":93,"line":9891},[91,32336,32337],{"class":160},"    # 验证集函数列表\n",[91,32339,32340,32343,32345],{"class":93,"line":9899},[91,32341,32342],{"class":101},"    val_loss_all",[91,32344,147],{"class":97},[91,32346,32332],{"class":101},[91,32348,32349],{"class":93,"line":9904},[91,32350,32351],{"class":160},"    # 训练集准确度列表\n",[91,32353,32354,32357,32359],{"class":93,"line":16583},[91,32355,32356],{"class":101},"    train_acc_all",[91,32358,147],{"class":97},[91,32360,32332],{"class":101},[91,32362,32363],{"class":93,"line":16589},[91,32364,32365],{"class":160},"    # 验证集准确度列表\n",[91,32367,32368,32371,32373],{"class":93,"line":16612},[91,32369,32370],{"class":101},"    val_acc_all",[91,32372,147],{"class":97},[91,32374,32332],{"class":101},[91,32376,32377],{"class":93,"line":16618},[91,32378,2378],{"emptyLinePlaceholder":17},[91,32380,32381],{"class":93,"line":16641},[91,32382,32383],{"class":160},"    # 保存当前时间--->方便看每轮训练的时间\n",[91,32385,32386,32389,32391],{"class":93,"line":16655},[91,32387,32388],{"class":101},"    since",[91,32390,147],{"class":97},[91,32392,32393],{"class":101},"time.time()\n",[91,32395,32396],{"class":93,"line":16675},[91,32397,2378],{"emptyLinePlaceholder":17},[91,32399,32400],{"class":93,"line":16681},[91,32401,2378],{"emptyLinePlaceholder":17},[91,32403,32404],{"class":93,"line":16692},[91,32405,32406],{"class":160},"    # 准备工作完成--->开始训练模型\n",[91,32408,32409,32411,32414,32416,32419],{"class":93,"line":16715},[91,32410,3179],{"class":97},[91,32412,32413],{"class":101}," epoch ",[91,32415,26018],{"class":97},[91,32417,32418],{"class":150}," range",[91,32420,32421],{"class":101},"(num_epochs):\n",[91,32423,32424,32427,32429,32432,32435,32437,32439,32441,32444,32446,32448],{"class":93,"line":16737},[91,32425,32426],{"class":150},"        print",[91,32428,102],{"class":101},[91,32430,32431],{"class":206},"\"Epoch ",[91,32433,32434],{"class":150},"{}",[91,32436,686],{"class":206},[91,32438,32434],{"class":150},[91,32440,353],{"class":206},[91,32442,32443],{"class":101},".format(epoch,num_epochs",[91,32445,634],{"class":97},[91,32447,319],{"class":150},[91,32449,30472],{"class":101},[91,32451,32452,32454,32456,32459,32461,32463],{"class":93,"line":16742},[91,32453,32426],{"class":150},[91,32455,102],{"class":101},[91,32457,32458],{"class":206},"\"-\"",[91,32460,557],{"class":97},[91,32462,548],{"class":150},[91,32464,108],{"class":101},[91,32466,32467],{"class":93,"line":16748},[91,32468,2378],{"emptyLinePlaceholder":17},[91,32470,32471],{"class":93,"line":16762},[91,32472,32473],{"class":160},"        # 初始化参数\n",[91,32475,32476],{"class":93,"line":16775},[91,32477,32478],{"class":160},"        # 训练集损失函数\n",[91,32480,32481,32484,32486],{"class":93,"line":16780},[91,32482,32483],{"class":101},"        train_loss",[91,32485,147],{"class":97},[91,32487,32317],{"class":150},[91,32489,32490],{"class":93,"line":16794},[91,32491,32492],{"class":160},"        # 训练集准确度\n",[91,32494,32495,32498,32500],{"class":93,"line":16799},[91,32496,32497],{"class":101},"        train_corrects",[91,32499,147],{"class":97},[91,32501,3063],{"class":150},[91,32503,32504],{"class":93,"line":16805},[91,32505,32506],{"class":160},"        # 验证集损失函数\n",[91,32508,32509,32512,32514],{"class":93,"line":16810},[91,32510,32511],{"class":101},"        val_loss",[91,32513,147],{"class":97},[91,32515,32317],{"class":150},[91,32517,32518],{"class":93,"line":16824},[91,32519,32520],{"class":160},"        # 验证集准确度\n",[91,32522,32523,32526,32528],{"class":93,"line":16829},[91,32524,32525],{"class":101},"        val_corrects",[91,32527,147],{"class":97},[91,32529,3063],{"class":150},[91,32531,32532],{"class":93,"line":16834},[91,32533,32534],{"class":160},"        # 训练集样本数量\n",[91,32536,32537,32540,32542],{"class":93,"line":16848},[91,32538,32539],{"class":101},"        train_num",[91,32541,147],{"class":97},[91,32543,3063],{"class":150},[91,32545,32546],{"class":93,"line":16860},[91,32547,32548],{"class":160},"        # 验证集样本数量\n",[91,32550,32551,32554,32556],{"class":93,"line":16865},[91,32552,32553],{"class":101},"        val_num",[91,32555,147],{"class":97},[91,32557,3063],{"class":150},[91,32559,32560],{"class":93,"line":16878},[91,32561,32562],{"class":160},"        # 将数据放到设备,并开始训练\n",[91,32564,32565,32567,32569,32571,32573],{"class":93,"line":16883},[91,32566,3381],{"class":97},[91,32568,31576],{"class":101},[91,32570,26018],{"class":97},[91,32572,31581],{"class":150},[91,32574,32575],{"class":101},"(train_dataloader):\n",[91,32577,32578],{"class":93,"line":16888},[91,32579,32580],{"class":160},"            # 将特征放入到训练设备\n",[91,32582,32583,32586,32588],{"class":93,"line":16893},[91,32584,32585],{"class":101},"            b_x",[91,32587,147],{"class":97},[91,32589,32590],{"class":101},"b_x.to(device)\n",[91,32592,32593],{"class":93,"line":16906},[91,32594,32595],{"class":160},"            # 将标签放入到训练设备当中\n",[91,32597,32598,32601,32603],{"class":93,"line":16911},[91,32599,32600],{"class":101},"            b_y",[91,32602,147],{"class":97},[91,32604,32605],{"class":101},"b_y.to(device)\n",[91,32607,32609],{"class":93,"line":32608},98,[91,32610,32611],{"class":160},"            # 设置模型为训练模式\n",[91,32613,32615],{"class":93,"line":32614},99,[91,32616,32617],{"class":101},"            model.train()\n",[91,32619,32621],{"class":93,"line":32620},100,[91,32622,32623],{"class":160},"            # 将数据放到模型当中,开始前向传播\n",[91,32625,32627],{"class":93,"line":32626},101,[91,32628,32629],{"class":160},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[91,32631,32633,32636,32638],{"class":93,"line":32632},102,[91,32634,32635],{"class":101},"            output",[91,32637,147],{"class":97},[91,32639,32640],{"class":101},"model(b_x)\n",[91,32642,32644],{"class":93,"line":32643},103,[91,32645,32646],{"class":160},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[91,32648,32650,32653,32655,32658,32661,32663,32665],{"class":93,"line":32649},104,[91,32651,32652],{"class":101},"            pre_lab",[91,32654,147],{"class":97},[91,32656,32657],{"class":101},"torch.argmax(output,",[91,32659,32660],{"class":5195},"dim",[91,32662,147],{"class":97},[91,32664,319],{"class":150},[91,32666,108],{"class":101},[91,32668,32670],{"class":93,"line":32669},105,[91,32671,32672],{"class":160},"            # 计算每一个batch的损失函数\n",[91,32674,32676,32679,32681],{"class":93,"line":32675},106,[91,32677,32678],{"class":101},"            loss",[91,32680,147],{"class":97},[91,32682,32683],{"class":101},"criterion(output,b_y)\n",[91,32685,32687],{"class":93,"line":32686},107,[91,32688,32689],{"class":160},"            # 将梯度初始化为0\n",[91,32691,32693],{"class":93,"line":32692},108,[91,32694,32695],{"class":101},"            optimizer.zero_grad()\n",[91,32697,32699],{"class":93,"line":32698},109,[91,32700,32701],{"class":160},"            # 梯度置为0后再进行反向传播\n",[91,32703,32705],{"class":93,"line":32704},110,[91,32706,32707],{"class":101},"            loss.backward()\n",[91,32709,32711],{"class":93,"line":32710},111,[91,32712,32713],{"class":160},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[91,32715,32717],{"class":93,"line":32716},112,[91,32718,32719],{"class":101},"            optimizer.step()\n",[91,32721,32723],{"class":93,"line":32722},113,[91,32724,32725],{"class":160},"            # loss.item()指的是batch的平均损失\n",[91,32727,32729,32732,32734,32737,32739,32742,32744],{"class":93,"line":32728},114,[91,32730,32731],{"class":101},"            train_loss",[91,32733,9456],{"class":97},[91,32735,32736],{"class":101},"loss.item()",[91,32738,557],{"class":97},[91,32740,32741],{"class":101},"b_x.size(",[91,32743,293],{"class":150},[91,32745,108],{"class":101},[91,32747,32749],{"class":93,"line":32748},115,[91,32750,32751],{"class":160},"            # 计算每个批次中正确预测的数量\n",[91,32753,32755,32758,32760,32763,32765],{"class":93,"line":32754},116,[91,32756,32757],{"class":101},"            train_corrects",[91,32759,9456],{"class":97},[91,32761,32762],{"class":101},"torch.sum(pre_lab",[91,32764,2927],{"class":97},[91,32766,32767],{"class":101},"b_y.data)\n",[91,32769,32771],{"class":93,"line":32770},117,[91,32772,32773],{"class":160},"            # 计算目前为止一共处理了多少样本\n",[91,32775,32777,32780,32782,32784,32786],{"class":93,"line":32776},118,[91,32778,32779],{"class":101},"            train_num",[91,32781,9456],{"class":97},[91,32783,32741],{"class":101},[91,32785,293],{"class":150},[91,32787,108],{"class":101},[91,32789,32791],{"class":93,"line":32790},119,[91,32792,32793],{"class":160},"        # 验证数据\n",[91,32795,32797,32799,32802,32804,32806],{"class":93,"line":32796},120,[91,32798,3381],{"class":97},[91,32800,32801],{"class":101}," step ,(b_x,b_y) ",[91,32803,26018],{"class":97},[91,32805,31581],{"class":150},[91,32807,32808],{"class":101},"(val_dataloader):\n",[91,32810,32812],{"class":93,"line":32811},121,[91,32813,32814],{"class":160},"            # 将特征放到验证设备当中\n",[91,32816,32818,32820,32822],{"class":93,"line":32817},122,[91,32819,32585],{"class":101},[91,32821,147],{"class":97},[91,32823,32590],{"class":101},[91,32825,32827],{"class":93,"line":32826},123,[91,32828,32829],{"class":160},"            # 将标签放到放到训练设备当中\n",[91,32831,32833,32835,32837],{"class":93,"line":32832},124,[91,32834,32600],{"class":101},[91,32836,147],{"class":97},[91,32838,32605],{"class":101},[91,32840,32842],{"class":93,"line":32841},125,[91,32843,32844],{"class":160},"            # 开启验证模式，设置模型为评估模式\n",[91,32846,32848],{"class":93,"line":32847},126,[91,32849,32850],{"class":101},"            model.eval()\n",[91,32852,32854,32857],{"class":93,"line":32853},127,[91,32855,32856],{"class":97},"            with",[91,32858,32859],{"class":101}," torch.no_grad():\n",[91,32861,32863],{"class":93,"line":32862},128,[91,32864,32865],{"class":160},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[91,32867,32869,32872,32874],{"class":93,"line":32868},129,[91,32870,32871],{"class":101},"                output ",[91,32873,147],{"class":97},[91,32875,32876],{"class":101}," model(b_x)\n",[91,32878,32880],{"class":93,"line":32879},130,[91,32881,32882],{"class":160},"                # 查找每一行中最大值对应的下标\n",[91,32884,32886,32889,32891,32894,32896,32898,32900],{"class":93,"line":32885},131,[91,32887,32888],{"class":101},"                pre_lab ",[91,32890,147],{"class":97},[91,32892,32893],{"class":101}," torch.argmax(output, ",[91,32895,32660],{"class":5195},[91,32897,147],{"class":97},[91,32899,319],{"class":150},[91,32901,108],{"class":101},[91,32903,32905],{"class":93,"line":32904},132,[91,32906,32907],{"class":160},"                # 计算验证集上的当前 batch 损失\n",[91,32909,32911,32914,32916],{"class":93,"line":32910},133,[91,32912,32913],{"class":101},"                val_batch_loss ",[91,32915,147],{"class":97},[91,32917,32918],{"class":101}," criterion(output, b_y)\n",[91,32920,32922],{"class":93,"line":32921},134,[91,32923,32924],{"class":160},"                # 对损失函数进行累加（按样本数加权）\n",[91,32926,32928,32931,32933,32936,32938,32941,32943],{"class":93,"line":32927},135,[91,32929,32930],{"class":101},"                val_loss ",[91,32932,9456],{"class":97},[91,32934,32935],{"class":101}," val_batch_loss.item() ",[91,32937,557],{"class":97},[91,32939,32940],{"class":101}," b_x.size(",[91,32942,293],{"class":150},[91,32944,108],{"class":101},[91,32946,32948,32951,32953,32956,32958],{"class":93,"line":32947},136,[91,32949,32950],{"class":101},"                val_corrects ",[91,32952,9456],{"class":97},[91,32954,32955],{"class":101}," torch.sum(pre_lab ",[91,32957,2927],{"class":97},[91,32959,32960],{"class":101}," b_y.data)\n",[91,32962,32964],{"class":93,"line":32963},137,[91,32965,32966],{"class":160},"                # 当前用于验证的样本数量\n",[91,32968,32970,32973,32975,32977,32979],{"class":93,"line":32969},138,[91,32971,32972],{"class":101},"            val_num ",[91,32974,9456],{"class":97},[91,32976,32940],{"class":101},[91,32978,293],{"class":150},[91,32980,108],{"class":101},[91,32982,32984],{"class":93,"line":32983},139,[91,32985,32986],{"class":160},"        # 计算并保存每一次迭代的loss值和准确率\n",[91,32988,32990],{"class":93,"line":32989},140,[91,32991,32992],{"class":160},"        # 计算并保存训练集的loss值\n",[91,32994,32996,32999,33001],{"class":93,"line":32995},141,[91,32997,32998],{"class":101},"        train_loss_all.append(train_loss",[91,33000,686],{"class":97},[91,33002,33003],{"class":101},"train_num)\n",[91,33005,33007],{"class":93,"line":33006},142,[91,33008,33009],{"class":160},"        # 取双精度\n",[91,33011,33013],{"class":93,"line":33012},143,[91,33014,33015],{"class":160},"        # 计算并保存训练集的准确率\n",[91,33017,33019,33022,33024],{"class":93,"line":33018},144,[91,33020,33021],{"class":101},"        train_acc_all.append(train_corrects.double().item()",[91,33023,686],{"class":97},[91,33025,33003],{"class":101},[91,33027,33029],{"class":93,"line":33028},145,[91,33030,33031],{"class":160},"        # 计算并保存验证集的loss值\n",[91,33033,33035,33038,33040],{"class":93,"line":33034},146,[91,33036,33037],{"class":101},"        val_loss_all.append(val_loss",[91,33039,686],{"class":97},[91,33041,33042],{"class":101},"val_num)\n",[91,33044,33046],{"class":93,"line":33045},147,[91,33047,33048],{"class":160},"        # 计算并保存验证集的准确率\n",[91,33050,33052,33055,33057],{"class":93,"line":33051},148,[91,33053,33054],{"class":101},"        val_acc_all.append(val_corrects.double().item()",[91,33056,686],{"class":97},[91,33058,33042],{"class":101},[91,33060,33062],{"class":93,"line":33061},149,[91,33063,2378],{"emptyLinePlaceholder":17},[91,33065,33067],{"class":93,"line":33066},150,[91,33068,33069],{"class":160},"        # 打印训练一轮的loss值和准确率\n",[91,33071,33073,33075,33077,33079,33081,33084,33086,33089,33091,33094,33096,33098,33100,33102,33105,33107,33109,33112,33114,33116],{"class":93,"line":33072},151,[91,33074,32426],{"class":150},[91,33076,102],{"class":101},[91,33078,3570],{"class":206},[91,33080,32434],{"class":150},[91,33082,33083],{"class":206},"train loss:",[91,33085,998],{"class":150},[91,33087,33088],{"class":97},":.4f",[91,33090,1048],{"class":150},[91,33092,33093],{"class":206}," train acc:",[91,33095,998],{"class":150},[91,33097,33088],{"class":97},[91,33099,1048],{"class":150},[91,33101,3570],{"class":206},[91,33103,33104],{"class":101},".format(epoch,train_loss_all[",[91,33106,634],{"class":97},[91,33108,319],{"class":150},[91,33110,33111],{"class":101},"],train_acc_all[",[91,33113,634],{"class":97},[91,33115,319],{"class":150},[91,33117,33118],{"class":101},"]))\n",[91,33120,33122,33124,33126,33128,33130,33133,33135,33137,33139,33142,33144,33146,33148,33150,33153,33155,33157,33160,33162,33164],{"class":93,"line":33121},152,[91,33123,32426],{"class":150},[91,33125,102],{"class":101},[91,33127,3570],{"class":206},[91,33129,32434],{"class":150},[91,33131,33132],{"class":206},"val loss:",[91,33134,998],{"class":150},[91,33136,33088],{"class":97},[91,33138,1048],{"class":150},[91,33140,33141],{"class":206}," val acc:",[91,33143,998],{"class":150},[91,33145,33088],{"class":97},[91,33147,1048],{"class":150},[91,33149,3570],{"class":206},[91,33151,33152],{"class":101},".format(epoch,val_loss_all[",[91,33154,634],{"class":97},[91,33156,319],{"class":150},[91,33158,33159],{"class":101},"],val_acc_all[",[91,33161,634],{"class":97},[91,33163,319],{"class":150},[91,33165,33118],{"class":101},[91,33167,33169],{"class":93,"line":33168},153,[91,33170,2378],{"emptyLinePlaceholder":17},[91,33172,33174],{"class":93,"line":33173},154,[91,33175,33176],{"class":160},"        # 判断准确度--->保存最优模型\n",[91,33178,33180,33182,33185,33187,33189,33191,33193],{"class":93,"line":33179},155,[91,33181,2475],{"class":97},[91,33183,33184],{"class":101}," val_acc_all[",[91,33186,634],{"class":97},[91,33188,319],{"class":150},[91,33190,1042],{"class":101},[91,33192,1062],{"class":97},[91,33194,33195],{"class":101},"best_acc:\n",[91,33197,33199],{"class":93,"line":33198},156,[91,33200,33201],{"class":160},"            # 保存当前模型准确度\n",[91,33203,33205,33208,33210,33212,33215,33217,33219],{"class":93,"line":33204},157,[91,33206,33207],{"class":101},"            best_acc:",[91,33209,141],{"class":150},[91,33211,147],{"class":97},[91,33213,33214],{"class":101},"val_acc_all[",[91,33216,634],{"class":97},[91,33218,319],{"class":150},[91,33220,33221],{"class":101},"]\n",[91,33223,33225],{"class":93,"line":33224},158,[91,33226,33227],{"class":160},"            # 保存当前的准确度\n",[91,33229,33231],{"class":93,"line":33230},159,[91,33232,33233],{"class":160},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[91,33235,33237,33240,33242],{"class":93,"line":33236},160,[91,33238,33239],{"class":101},"            best_model_wts",[91,33241,147],{"class":97},[91,33243,32289],{"class":101},[91,33245,33247],{"class":93,"line":33246},161,[91,33248,2378],{"emptyLinePlaceholder":17},[91,33250,33252],{"class":93,"line":33251},162,[91,33253,33254],{"class":160},"        # 计算耗时\n",[91,33256,33258,33261,33263,33266,33268],{"class":93,"line":33257},163,[91,33259,33260],{"class":101},"        time_use",[91,33262,147],{"class":97},[91,33264,33265],{"class":101},"time.time()",[91,33267,634],{"class":97},[91,33269,33270],{"class":101},"since\n",[91,33272,33274,33276,33278,33281,33283,33286,33288,33290,33292,33294,33296,33299,33302,33305,33307,33310,33312,33314],{"class":93,"line":33273},164,[91,33275,32426],{"class":150},[91,33277,102],{"class":101},[91,33279,33280],{"class":206},"'训练和验证耗费的时间",[91,33282,998],{"class":150},[91,33284,33285],{"class":97},":.0f",[91,33287,1048],{"class":150},[91,33289,646],{"class":206},[91,33291,998],{"class":150},[91,33293,33285],{"class":97},[91,33295,1048],{"class":150},[91,33297,33298],{"class":206},"s'",[91,33300,33301],{"class":101},".format(time_use",[91,33303,33304],{"class":97},"\u002F\u002F",[91,33306,1009],{"class":150},[91,33308,33309],{"class":101},",time_use",[91,33311,430],{"class":97},[91,33313,1009],{"class":150},[91,33315,30472],{"class":101},[91,33317,33319],{"class":93,"line":33318},165,[91,33320,33321],{"class":160},"    # 选择最优参数\n",[91,33323,33325],{"class":93,"line":33324},166,[91,33326,33327],{"class":160},"    # 加载最高准确率下的模型参数\n",[91,33329,33331],{"class":93,"line":33330},167,[91,33332,33333],{"class":160},"    # model.load_state_dict(best_model_wts)\n",[91,33335,33337,33340,33343],{"class":93,"line":33336},168,[91,33338,33339],{"class":101},"    torch.save(model.state_dict(best_model_wts), ",[91,33341,33342],{"class":206},"'.\u002Fbest_model.pth'",[91,33344,108],{"class":101},[91,33346,33348],{"class":93,"line":33347},169,[91,33349,33350],{"class":160},"    # 或者写成\n",[91,33352,33354],{"class":93,"line":33353},170,[91,33355,33356],{"class":160},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[91,33358,33360],{"class":93,"line":33359},171,[91,33361,33362],{"class":160},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[91,33364,33366,33369,33371,33374,33377,33379],{"class":93,"line":33365},172,[91,33367,33368],{"class":101},"    train_process",[91,33370,147],{"class":97},[91,33372,33373],{"class":101},"pd.DataFrame(",[91,33375,33376],{"class":5195},"data",[91,33378,147],{"class":97},[91,33380,1524],{"class":101},[91,33382,33384,33387,33389,33392],{"class":93,"line":33383},173,[91,33385,33386],{"class":206},"        \"epoch\"",[91,33388,961],{"class":101},[91,33390,33391],{"class":150},"range",[91,33393,33394],{"class":101},"(num_epochs),\n",[91,33396,33398,33401],{"class":93,"line":33397},174,[91,33399,33400],{"class":206},"        \"train_loss_all\"",[91,33402,33403],{"class":101},":train_loss_all,\n",[91,33405,33407,33410],{"class":93,"line":33406},175,[91,33408,33409],{"class":206},"        \"val_loss_all\"",[91,33411,33412],{"class":101},":val_loss_all,\n",[91,33414,33416,33419],{"class":93,"line":33415},176,[91,33417,33418],{"class":206},"        \"train_acc_all\"",[91,33420,33421],{"class":101},":train_acc_all,\n",[91,33423,33425,33428],{"class":93,"line":33424},177,[91,33426,33427],{"class":206},"        \"val_acc_all\"",[91,33429,33430],{"class":101},":val_acc_all\n",[91,33432,33434],{"class":93,"line":33433},178,[91,33435,33436],{"class":101},"    })\n",[91,33438,33440],{"class":93,"line":33439},179,[91,33441,33442],{"class":160},"    # 返回训练保存的过程\n",[91,33444,33446,33448],{"class":93,"line":33445},180,[91,33447,4068],{"class":97},[91,33449,33450],{"class":101}," train_process\n",[91,33452,33454],{"class":93,"line":33453},181,[91,33455,2378],{"emptyLinePlaceholder":17},[91,33457,33459],{"class":93,"line":33458},182,[91,33460,33461],{"class":160},"# 将loss值和精度按照图片的形式展示出来\n",[91,33463,33465,33467,33470],{"class":93,"line":33464},183,[91,33466,31922],{"class":97},[91,33468,33469],{"class":1941}," matplot_acc_loss",[91,33471,33472],{"class":101},"(train_process):\n",[91,33474,33476],{"class":93,"line":33475},184,[91,33477,33478],{"class":160},"    # 设置图的大小\n",[91,33480,33482,33485,33487,33489,33491,33493,33495,33497],{"class":93,"line":33481},185,[91,33483,33484],{"class":101},"    plt.figure(",[91,33486,31668],{"class":5195},[91,33488,147],{"class":97},[91,33490,102],{"class":101},[91,33492,600],{"class":150},[91,33494,480],{"class":101},[91,33496,395],{"class":150},[91,33498,30472],{"class":101},[91,33500,33502],{"class":93,"line":33501},186,[91,33503,33504],{"class":160},"    # 设置图中有几张图\n",[91,33506,33508],{"class":93,"line":33507},187,[91,33509,33510],{"class":160},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[91,33512,33514],{"class":93,"line":33513},188,[91,33515,33516],{"class":160},"    # ①loss图\n",[91,33518,33520,33522,33524,33526,33528,33530,33532],{"class":93,"line":33519},189,[91,33521,31702],{"class":101},[91,33523,319],{"class":150},[91,33525,480],{"class":101},[91,33527,179],{"class":150},[91,33529,480],{"class":101},[91,33531,319],{"class":150},[91,33533,108],{"class":101},[91,33535,33537],{"class":93,"line":33536},190,[91,33538,33539],{"class":160},"    # 补充:\n",[91,33541,33543],{"class":93,"line":33542},191,[91,33544,33545],{"class":160},"    # plt.subplot(nrows, ncols, index)\n",[91,33547,33549],{"class":93,"line":33548},192,[91,33550,33551],{"class":160},"    # nrows：行数\n",[91,33553,33555],{"class":93,"line":33554},193,[91,33556,33557],{"class":160},"    # ncols：列数\n",[91,33559,33561],{"class":93,"line":33560},194,[91,33562,33563],{"class":160},"    # index：目前选中第几个子图（从1开始）\n",[91,33565,33567,33570,33573,33576,33579,33581,33584,33586,33589],{"class":93,"line":33566},195,[91,33568,33569],{"class":101},"    plt.plot(train_process[",[91,33571,33572],{"class":206},"\"epoch\"",[91,33574,33575],{"class":101},"],train_process.train_loss_all,",[91,33577,33578],{"class":206},"'ro-'",[91,33580,480],{"class":101},[91,33582,33583],{"class":5195},"label",[91,33585,147],{"class":97},[91,33587,33588],{"class":206},"'train loss'",[91,33590,108],{"class":101},[91,33592,33594,33596,33598,33601,33604,33606,33608,33610,33613],{"class":93,"line":33593},196,[91,33595,33569],{"class":101},[91,33597,33572],{"class":206},[91,33599,33600],{"class":101},"],train_process.val_loss_all,",[91,33602,33603],{"class":206},"'bs--'",[91,33605,480],{"class":101},[91,33607,33583],{"class":5195},[91,33609,147],{"class":97},[91,33611,33612],{"class":206},"'val loss'",[91,33614,108],{"class":101},[91,33616,33618],{"class":93,"line":33617},197,[91,33619,33620],{"class":160},"    # 添加一个图例\n",[91,33622,33624],{"class":93,"line":33623},198,[91,33625,33626],{"class":101},"    plt.legend()\n",[91,33628,33630],{"class":93,"line":33629},199,[91,33631,33632],{"class":160},"    # 给轴添加标签\n",[91,33634,33636,33639,33642],{"class":93,"line":33635},200,[91,33637,33638],{"class":101},"    plt.xlabel(",[91,33640,33641],{"class":206},"'epoch'",[91,33643,108],{"class":101},[91,33645,33647,33650,33653],{"class":93,"line":33646},201,[91,33648,33649],{"class":101},"    plt.ylabel(",[91,33651,33652],{"class":206},"'loss'",[91,33654,108],{"class":101},[91,33656,33658],{"class":93,"line":33657},202,[91,33659,33660],{"class":160},"    # ②准确度图\n",[91,33662,33664,33666,33668,33670,33672,33674,33676],{"class":93,"line":33663},203,[91,33665,31702],{"class":101},[91,33667,319],{"class":150},[91,33669,480],{"class":101},[91,33671,179],{"class":150},[91,33673,480],{"class":101},[91,33675,179],{"class":150},[91,33677,108],{"class":101},[91,33679,33681,33683,33685,33688,33690,33692,33694,33696,33699],{"class":93,"line":33680},204,[91,33682,33569],{"class":101},[91,33684,33572],{"class":206},[91,33686,33687],{"class":101},"],train_process.train_acc_all,",[91,33689,33578],{"class":206},[91,33691,480],{"class":101},[91,33693,33583],{"class":5195},[91,33695,147],{"class":97},[91,33697,33698],{"class":206},"'train acc'",[91,33700,108],{"class":101},[91,33702,33704,33706,33708,33711,33713,33715,33717,33719,33722],{"class":93,"line":33703},205,[91,33705,33569],{"class":101},[91,33707,33572],{"class":206},[91,33709,33710],{"class":101},"],train_process.val_acc_all,",[91,33712,33603],{"class":206},[91,33714,480],{"class":101},[91,33716,33583],{"class":5195},[91,33718,147],{"class":97},[91,33720,33721],{"class":206},"'val acc'",[91,33723,108],{"class":101},[91,33725,33727],{"class":93,"line":33726},206,[91,33728,33729],{"class":160},"    # 添加图例\n",[91,33731,33733],{"class":93,"line":33732},207,[91,33734,33626],{"class":101},[91,33736,33738,33740,33742],{"class":93,"line":33737},208,[91,33739,33638],{"class":101},[91,33741,33572],{"class":206},[91,33743,108],{"class":101},[91,33745,33747,33749,33752],{"class":93,"line":33746},209,[91,33748,33649],{"class":101},[91,33750,33751],{"class":206},"\"acc\"",[91,33753,108],{"class":101},[91,33755,33757],{"class":93,"line":33756},210,[91,33758,33759],{"class":101},"    plt.show()\n",[91,33761,33763],{"class":93,"line":33762},211,[91,33764,2378],{"emptyLinePlaceholder":17},[91,33766,33768],{"class":93,"line":33767},212,[91,33769,33770],{"class":160},"# 正式开始训练:\n",[91,33772,33774,33776,33778,33780,33782],{"class":93,"line":33773},213,[91,33775,1509],{"class":97},[91,33777,31195],{"class":150},[91,33779,2927],{"class":97},[91,33781,31200],{"class":206},[91,33783,3717],{"class":101},[91,33785,33787],{"class":93,"line":33786},214,[91,33788,33789],{"class":160},"    # 将模型实例化\n",[91,33791,33793,33796,33798],{"class":93,"line":33792},215,[91,33794,33795],{"class":101},"    LeNet",[91,33797,147],{"class":97},[91,33799,33800],{"class":101},"LeNet()\n",[91,33802,33804,33807,33809],{"class":93,"line":33803},216,[91,33805,33806],{"class":101},"    train_dataloader,val_dataloader",[91,33808,147],{"class":97},[91,33810,33811],{"class":101},"train_val_data_process()\n",[91,33813,33815,33817,33819,33822,33825,33827,33829],{"class":93,"line":33814},217,[91,33816,33368],{"class":101},[91,33818,147],{"class":97},[91,33820,33821],{"class":101},"train_model_process(LeNet,train_dataloader,val_dataloader,",[91,33823,33824],{"class":5195},"num_epochs",[91,33826,147],{"class":97},[91,33828,802],{"class":150},[91,33830,108],{"class":101},[91,33832,33834],{"class":93,"line":33833},218,[91,33835,33836],{"class":101},"    matplot_acc_loss(train_process)\n",[38,33838,33839],{},"画图的补充点学习：",[38,33841,33842],{},[1440,33843],{"alt":10,"src":33844},"\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",[46,33846,33847],{"start":1157},[49,33848,33849],{},"测试",[83,33851,33853],{"className":30353,"code":33852,"language":30355,"meta":10,"style":10},"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",[88,33854,33855,33861,33871,33883,33893,33898,33908,33918,33922,33927,33936,33953,33965,33982,33993,34009,34014,34025,34036,34047,34054,34058,34063,34073,34078,34095,34103,34107,34112,34121,34130,34134,34139,34144,34149,34156,34161,34173,34183,34193,34198,34202,34207,34216,34221,34237,34242,34247,34252,34266,34271,34285,34289,34294,34309,34314,34326,34330,34335,34347,34352,34360,34365,34370,34380,34385,34394,34399,34404,34408,34413,34418,34434,34442,34447,34452,34511,34517,34522,34533,34541,34549,34553,34558,34562,34567,34575,34580,34596,34601,34611,34621],{"__ignoreMap":10},[91,33856,33857,33859],{"class":93,"line":94},[91,33858,30367],{"class":97},[91,33860,30370],{"class":101},[91,33862,33863,33865,33867,33869],{"class":93,"line":11},[91,33864,30367],{"class":97},[91,33866,31390],{"class":101},[91,33868,31358],{"class":97},[91,33870,31395],{"class":101},[91,33872,33873,33875,33878,33880],{"class":93,"line":1157},[91,33874,30712],{"class":97},[91,33876,33877],{"class":101}," jupyter_client.consoleapp ",[91,33879,30367],{"class":97},[91,33881,33882],{"class":101}," classes\n",[91,33884,33885,33887,33889,33891],{"class":93,"line":1172},[91,33886,30712],{"class":97},[91,33888,31373],{"class":101},[91,33890,30367],{"class":97},[91,33892,31378],{"class":101},[91,33894,33895],{"class":93,"line":1178},[91,33896,33897],{"class":160},"# 导入数据集\n",[91,33899,33900,33902,33904,33906],{"class":93,"line":1192},[91,33901,30712],{"class":97},[91,33903,31343],{"class":101},[91,33905,30367],{"class":97},[91,33907,31348],{"class":101},[91,33909,33910,33912,33914,33916],{"class":93,"line":1198},[91,33911,30712],{"class":97},[91,33913,31889],{"class":101},[91,33915,30367],{"class":97},[91,33917,31894],{"class":101},[91,33919,33920],{"class":93,"line":1289},[91,33921,2378],{"emptyLinePlaceholder":17},[91,33923,33924],{"class":93,"line":1295},[91,33925,33926],{"class":160},"# 测试数据处理\n",[91,33928,33929,33931,33934],{"class":93,"line":1307},[91,33930,31922],{"class":97},[91,33932,33933],{"class":1941}," test_data_process",[91,33935,31928],{"class":101},[91,33937,33938,33941,33943,33945,33947,33949,33951],{"class":93,"line":1590},[91,33939,33940],{"class":101},"    test_data",[91,33942,147],{"class":97},[91,33944,31430],{"class":101},[91,33946,31433],{"class":5195},[91,33948,147],{"class":97},[91,33950,31438],{"class":206},[91,33952,31441],{"class":101},[91,33954,33955,33958,33960,33963],{"class":93,"line":1595},[91,33956,33957],{"class":5195},"                           train",[91,33959,147],{"class":97},[91,33961,33962],{"class":150},"False",[91,33964,31441],{"class":101},[91,33966,33967,33970,33972,33974,33976,33978,33980],{"class":93,"line":1601},[91,33968,33969],{"class":5195},"                           transform",[91,33971,147],{"class":97},[91,33973,31468],{"class":101},[91,33975,31471],{"class":5195},[91,33977,147],{"class":97},[91,33979,1003],{"class":150},[91,33981,31479],{"class":101},[91,33983,33984,33987,33989,33991],{"class":93,"line":1606},[91,33985,33986],{"class":5195},"                           download",[91,33988,147],{"class":97},[91,33990,31451],{"class":150},[91,33992,108],{"class":101},[91,33994,33995,33998,34000,34002,34004,34006],{"class":93,"line":1620},[91,33996,33997],{"class":101},"    test_dataloader",[91,33999,147],{"class":97},[91,34001,31509],{"class":101},[91,34003,31512],{"class":5195},[91,34005,147],{"class":97},[91,34007,34008],{"class":101},"test_data,\n",[91,34010,34011],{"class":93,"line":1625},[91,34012,34013],{"class":160},"                                    # 这里是一张一张进行测试\n",[91,34015,34016,34019,34021,34023],{"class":93,"line":1631},[91,34017,34018],{"class":5195},"                                    batch_size",[91,34020,147],{"class":97},[91,34022,319],{"class":150},[91,34024,31441],{"class":101},[91,34026,34027,34030,34032,34034],{"class":93,"line":1652},[91,34028,34029],{"class":5195},"                                    shuffle",[91,34031,147],{"class":97},[91,34033,31451],{"class":150},[91,34035,31441],{"class":101},[91,34037,34038,34041,34043,34045],{"class":93,"line":1657},[91,34039,34040],{"class":5195},"                                    num_workers",[91,34042,147],{"class":97},[91,34044,293],{"class":150},[91,34046,108],{"class":101},[91,34048,34049,34051],{"class":93,"line":1671},[91,34050,4068],{"class":97},[91,34052,34053],{"class":101}," test_dataloader\n",[91,34055,34056],{"class":93,"line":1676},[91,34057,2378],{"emptyLinePlaceholder":17},[91,34059,34060],{"class":93,"line":1705},[91,34061,34062],{"class":160},"# 定义模型测试函数\n",[91,34064,34065,34067,34070],{"class":93,"line":1710},[91,34066,31922],{"class":97},[91,34068,34069],{"class":1941}," test_model_process",[91,34071,34072],{"class":101},"(model,test_dataloader):\n",[91,34074,34075],{"class":93,"line":1727},[91,34076,34077],{"class":160},"    # 将模型放到设备当中，先进行判断\n",[91,34079,34080,34082,34084,34086,34088,34090,34092],{"class":93,"line":1732},[91,34081,31212],{"class":101},[91,34083,147],{"class":97},[91,34085,31219],{"class":206},[91,34087,1682],{"class":97},[91,34089,31224],{"class":101},[91,34091,1679],{"class":97},[91,34093,34094],{"class":206}," \"cpu\"\n",[91,34096,34097,34099,34101],{"class":93,"line":1737},[91,34098,31264],{"class":101},[91,34100,147],{"class":97},[91,34102,32264],{"class":101},[91,34104,34105],{"class":93,"line":1742},[91,34106,2378],{"emptyLinePlaceholder":17},[91,34108,34109],{"class":93,"line":1756},[91,34110,34111],{"class":160},"    # 设置初始化参数\n",[91,34113,34114,34117,34119],{"class":93,"line":1761},[91,34115,34116],{"class":101},"    test_corrects",[91,34118,147],{"class":97},[91,34120,32317],{"class":150},[91,34122,34123,34126,34128],{"class":93,"line":2555},[91,34124,34125],{"class":101},"    test_num",[91,34127,147],{"class":97},[91,34129,3063],{"class":150},[91,34131,34132],{"class":93,"line":2569},[91,34133,2378],{"emptyLinePlaceholder":17},[91,34135,34136],{"class":93,"line":2577},[91,34137,34138],{"class":160},"    # 进行模型测试\n",[91,34140,34141],{"class":93,"line":2582},[91,34142,34143],{"class":160},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[91,34145,34146],{"class":93,"line":2588},[91,34147,34148],{"class":160},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[91,34150,34151,34154],{"class":93,"line":2594},[91,34152,34153],{"class":97},"    with",[91,34155,32859],{"class":101},[91,34157,34158],{"class":93,"line":2599},[91,34159,34160],{"class":160},"        # 从数据中进行\n",[91,34162,34163,34165,34168,34170],{"class":93,"line":7927},[91,34164,3381],{"class":97},[91,34166,34167],{"class":101}," test_data_x,test_data_y ",[91,34169,26018],{"class":97},[91,34171,34172],{"class":101}," test_dataloader:\n",[91,34174,34175,34178,34180],{"class":93,"line":7951},[91,34176,34177],{"class":101},"            test_data_x",[91,34179,147],{"class":97},[91,34181,34182],{"class":101},"test_data_x.to(device)\n",[91,34184,34185,34188,34190],{"class":93,"line":7956},[91,34186,34187],{"class":101},"            test_data_y",[91,34189,147],{"class":97},[91,34191,34192],{"class":101},"test_data_y.to(device)\n",[91,34194,34195],{"class":93,"line":7962},[91,34196,34197],{"class":160},"            # 设置为验证模式\n",[91,34199,34200],{"class":93,"line":7989},[91,34201,32850],{"class":101},[91,34203,34204],{"class":93,"line":7994},[91,34205,34206],{"class":160},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[91,34208,34209,34211,34213],{"class":93,"line":8000},[91,34210,32635],{"class":101},[91,34212,147],{"class":97},[91,34214,34215],{"class":101},"model(test_data_x)\n",[91,34217,34218],{"class":93,"line":8012},[91,34219,34220],{"class":160},"            # 查找每一行中最大值对应的下标\n",[91,34222,34223,34225,34227,34229,34231,34233,34235],{"class":93,"line":8024},[91,34224,32652],{"class":101},[91,34226,147],{"class":97},[91,34228,32657],{"class":101},[91,34230,32660],{"class":5195},[91,34232,147],{"class":97},[91,34234,319],{"class":150},[91,34236,108],{"class":101},[91,34238,34239],{"class":93,"line":8036},[91,34240,34241],{"class":160},"            # 计算正确率\n",[91,34243,34244],{"class":93,"line":9695},[91,34245,34246],{"class":160},"            # .data表示是一个不带梯度信息的tensor\n",[91,34248,34249],{"class":93,"line":9720},[91,34250,34251],{"class":160},"            # 如果预测正确，则准确度test_corrects加1\n",[91,34253,34254,34257,34259,34261,34263],{"class":93,"line":9743},[91,34255,34256],{"class":101},"            test_corrects",[91,34258,9456],{"class":97},[91,34260,32762],{"class":101},[91,34262,2927],{"class":97},[91,34264,34265],{"class":101},"test_data_y.data)\n",[91,34267,34268],{"class":93,"line":9767},[91,34269,34270],{"class":160},"            # 将所有的测试样本进行累计\n",[91,34272,34273,34276,34278,34281,34283],{"class":93,"line":9772},[91,34274,34275],{"class":101},"            test_num",[91,34277,9456],{"class":97},[91,34279,34280],{"class":101},"test_data_x.size(",[91,34282,293],{"class":150},[91,34284,108],{"class":101},[91,34286,34287],{"class":93,"line":9777},[91,34288,2378],{"emptyLinePlaceholder":17},[91,34290,34291],{"class":93,"line":9782},[91,34292,34293],{"class":160},"        # 计算准确度\n",[91,34295,34296,34299,34301,34304,34306],{"class":93,"line":9791},[91,34297,34298],{"class":101},"        test_acc",[91,34300,147],{"class":97},[91,34302,34303],{"class":101},"test_corrects.double().item()",[91,34305,686],{"class":97},[91,34307,34308],{"class":101},"test_num\n",[91,34310,34311],{"class":93,"line":9796},[91,34312,34313],{"class":160},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[91,34315,34316,34318,34320,34323],{"class":93,"line":9802},[91,34317,32426],{"class":150},[91,34319,102],{"class":101},[91,34321,34322],{"class":206},"\"测试的准确率：\"",[91,34324,34325],{"class":101},",test_acc)\n",[91,34327,34328],{"class":93,"line":9823},[91,34329,2378],{"emptyLinePlaceholder":17},[91,34331,34332],{"class":93,"line":9829},[91,34333,34334],{"class":160},"# 实现模型的测试功能\n",[91,34336,34337,34339,34341,34343,34345],{"class":93,"line":9843},[91,34338,1509],{"class":97},[91,34340,31195],{"class":150},[91,34342,2927],{"class":97},[91,34344,31200],{"class":206},[91,34346,3717],{"class":101},[91,34348,34349],{"class":93,"line":9849},[91,34350,34351],{"class":160},"    # 加载模型\n",[91,34353,34354,34356,34358],{"class":93,"line":9876},[91,34355,31264],{"class":101},[91,34357,147],{"class":97},[91,34359,33800],{"class":101},[91,34361,34362],{"class":93,"line":9885},[91,34363,34364],{"class":160},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[91,34366,34367],{"class":93,"line":9891},[91,34368,34369],{"class":160},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[91,34371,34372,34375,34378],{"class":93,"line":9899},[91,34373,34374],{"class":101},"    model.load_state_dict(torch.load(",[91,34376,34377],{"class":206},"'best_model.pth'",[91,34379,30472],{"class":101},[91,34381,34382],{"class":93,"line":9904},[91,34383,34384],{"class":160},"    # 数据加载\n",[91,34386,34387,34389,34391],{"class":93,"line":16583},[91,34388,33997],{"class":101},[91,34390,147],{"class":97},[91,34392,34393],{"class":101},"test_data_process()\n",[91,34395,34396],{"class":93,"line":16589},[91,34397,34398],{"class":160},"    # 加载模型测试的函数\n",[91,34400,34401],{"class":93,"line":16612},[91,34402,34403],{"class":101},"    test_model_process(model,test_dataloader)\n",[91,34405,34406],{"class":93,"line":16618},[91,34407,2378],{"emptyLinePlaceholder":17},[91,34409,34410],{"class":93,"line":16641},[91,34411,34412],{"class":160},"    # 验证集推理实现：\n",[91,34414,34415],{"class":93,"line":16655},[91,34416,34417],{"class":160},"    # 加载数据加载的更详细一些\n",[91,34419,34420,34422,34424,34426,34428,34430,34432],{"class":93,"line":16675},[91,34421,31212],{"class":101},[91,34423,147],{"class":97},[91,34425,31219],{"class":206},[91,34427,1682],{"class":97},[91,34429,31224],{"class":101},[91,34431,1679],{"class":97},[91,34433,34094],{"class":206},[91,34435,34436,34438,34440],{"class":93,"line":16681},[91,34437,31264],{"class":101},[91,34439,147],{"class":97},[91,34441,32264],{"class":101},[91,34443,34444],{"class":93,"line":16692},[91,34445,34446],{"class":160},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[91,34448,34449],{"class":93,"line":16715},[91,34450,34451],{"class":160},"    # 顺序不可改变\n",[91,34453,34454,34457,34459,34461,34464,34466,34469,34471,34474,34476,34479,34481,34484,34486,34489,34491,34494,34496,34499,34501,34504,34506,34509],{"class":93,"line":16737},[91,34455,34456],{"class":101},"    classes",[91,34458,147],{"class":97},[91,34460,992],{"class":101},[91,34462,34463],{"class":206},"'T-shirt\u002Ftop'",[91,34465,480],{"class":101},[91,34467,34468],{"class":206},"'Trouser'",[91,34470,480],{"class":101},[91,34472,34473],{"class":206},"'Pullover'",[91,34475,480],{"class":101},[91,34477,34478],{"class":206},"'Dress'",[91,34480,480],{"class":101},[91,34482,34483],{"class":206},"'Coat'",[91,34485,480],{"class":101},[91,34487,34488],{"class":206},"'Sandal'",[91,34490,480],{"class":101},[91,34492,34493],{"class":206},"'Shirt'",[91,34495,480],{"class":101},[91,34497,34498],{"class":206},"'Sneaker'",[91,34500,480],{"class":101},[91,34502,34503],{"class":206},"'Bag'",[91,34505,480],{"class":101},[91,34507,34508],{"class":206},"'Ankle boot'",[91,34510,33221],{"class":101},[91,34512,34513,34515],{"class":93,"line":16742},[91,34514,34153],{"class":97},[91,34516,32859],{"class":101},[91,34518,34519],{"class":93,"line":16748},[91,34520,34521],{"class":160},"        # 将数据和标签都放到设备当中\n",[91,34523,34524,34526,34529,34531],{"class":93,"line":16762},[91,34525,3381],{"class":97},[91,34527,34528],{"class":101}," b_x,b_y ",[91,34530,26018],{"class":97},[91,34532,34172],{"class":101},[91,34534,34535,34537,34539],{"class":93,"line":16775},[91,34536,32585],{"class":101},[91,34538,147],{"class":97},[91,34540,32590],{"class":101},[91,34542,34543,34545,34547],{"class":93,"line":16780},[91,34544,32600],{"class":101},[91,34546,147],{"class":97},[91,34548,32605],{"class":101},[91,34550,34551],{"class":93,"line":16794},[91,34552,2378],{"emptyLinePlaceholder":17},[91,34554,34555],{"class":93,"line":16799},[91,34556,34557],{"class":160},"            # 设置模型为验证模式\n",[91,34559,34560],{"class":93,"line":16805},[91,34561,32850],{"class":101},[91,34563,34564],{"class":93,"line":16810},[91,34565,34566],{"class":160},"            # 模型推理结果\n",[91,34568,34569,34571,34573],{"class":93,"line":16824},[91,34570,32635],{"class":101},[91,34572,147],{"class":97},[91,34574,32640],{"class":101},[91,34576,34577],{"class":93,"line":16829},[91,34578,34579],{"class":160},"            # 获取最大下标，最大下标就是类别号\n",[91,34581,34582,34584,34586,34588,34590,34592,34594],{"class":93,"line":16834},[91,34583,32652],{"class":101},[91,34585,147],{"class":97},[91,34587,32657],{"class":101},[91,34589,32660],{"class":5195},[91,34591,147],{"class":97},[91,34593,319],{"class":150},[91,34595,108],{"class":101},[91,34597,34598],{"class":93,"line":16848},[91,34599,34600],{"class":160},"            # 取出张量中的数值\n",[91,34602,34603,34606,34608],{"class":93,"line":16860},[91,34604,34605],{"class":101},"            result",[91,34607,147],{"class":97},[91,34609,34610],{"class":101},"pre_lab.item()\n",[91,34612,34613,34616,34618],{"class":93,"line":16865},[91,34614,34615],{"class":101},"            label",[91,34617,147],{"class":97},[91,34619,34620],{"class":101},"b_y.item()\n",[91,34622,34623,34626,34628,34631,34634,34637,34639,34642],{"class":93,"line":16878},[91,34624,34625],{"class":150},"            print",[91,34627,102],{"class":101},[91,34629,34630],{"class":206},"\"预测值：\"",[91,34632,34633],{"class":101},",classes[result],",[91,34635,34636],{"class":206},"\"------\"",[91,34638,480],{"class":101},[91,34640,34641],{"class":206},"\"真实值：\"",[91,34643,34644],{"class":101},",classes[label])\n",[38,34646,34647],{},"（2）AlexNet",[46,34649,34650],{},[49,34651,34652],{},"神经网络构建",[83,34654,34656],{"className":30353,"code":34655,"language":30355,"meta":10,"style":10},"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",[88,34657,34658,34664,34674,34684,34696,34700,34717,34725,34740,34752,34794,34821,34864,34890,34934,34977,35020,35047,35051,35061,35066,35094,35113,35132,35136,35141,35149,35164,35174,35188,35198,35213,35228,35243,35254,35258,35263,35273,35288,35293,35307,35322,35334,35339,35350,35355,35361,35366,35378,35398,35403,35412],{"__ignoreMap":10},[91,34659,34660,34662],{"class":93,"line":94},[91,34661,30367],{"class":97},[91,34663,30370],{"class":101},[91,34665,34666,34668,34670,34672],{"class":93,"line":11},[91,34667,30712],{"class":97},[91,34669,30715],{"class":101},[91,34671,30367],{"class":97},[91,34673,30720],{"class":101},[91,34675,34676,34678,34680,34682],{"class":93,"line":1157},[91,34677,30712],{"class":97},[91,34679,30732],{"class":101},[91,34681,30367],{"class":97},[91,34683,30737],{"class":101},[91,34685,34686,34688,34691,34693],{"class":93,"line":1172},[91,34687,30367],{"class":97},[91,34689,34690],{"class":101}," torch.nn.functional ",[91,34692,31358],{"class":97},[91,34694,34695],{"class":101}," F\n",[91,34697,34698],{"class":93,"line":1178},[91,34699,2378],{"emptyLinePlaceholder":17},[91,34701,34702,34704,34707,34709,34711,34713,34715],{"class":93,"line":1192},[91,34703,14673],{"class":97},[91,34705,34706],{"class":1941}," AlexNet",[91,34708,102],{"class":101},[91,34710,30753],{"class":1941},[91,34712,660],{"class":101},[91,34714,30758],{"class":1941},[91,34716,30761],{"class":101},[91,34718,34719,34721,34723],{"class":93,"line":1198},[91,34720,30776],{"class":97},[91,34722,30779],{"class":150},[91,34724,30782],{"class":101},[91,34726,34727,34729,34732,34734,34736,34738],{"class":93,"line":1289},[91,34728,30792],{"class":150},[91,34730,34731],{"class":101},"(AlexNet,",[91,34733,30798],{"class":150},[91,34735,30801],{"class":101},[91,34737,30804],{"class":150},[91,34739,1954],{"class":101},[91,34741,34742,34744,34747,34749],{"class":93,"line":1295},[91,34743,30820],{"class":150},[91,34745,34746],{"class":101},".ReLu",[91,34748,147],{"class":97},[91,34750,34751],{"class":101},"nn.ReLU()\n",[91,34753,34754,34756,34758,34760,34762,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792],{"class":93,"line":1307},[91,34755,30820],{"class":150},[91,34757,30823],{"class":101},[91,34759,147],{"class":97},[91,34761,30828],{"class":101},[91,34763,30831],{"class":5195},[91,34765,147],{"class":97},[91,34767,319],{"class":150},[91,34769,480],{"class":101},[91,34771,30840],{"class":5195},[91,34773,147],{"class":97},[91,34775,311],{"class":150},[91,34777,480],{"class":101},[91,34779,30849],{"class":5195},[91,34781,147],{"class":97},[91,34783,574],{"class":150},[91,34785,480],{"class":101},[91,34787,30904],{"class":5195},[91,34789,147],{"class":97},[91,34791,395],{"class":150},[91,34793,108],{"class":101},[91,34795,34796,34798,34800,34802,34805,34807,34809,34811,34813,34815,34817,34819],{"class":93,"line":1590},[91,34797,30820],{"class":150},[91,34799,30888],{"class":101},[91,34801,147],{"class":97},[91,34803,34804],{"class":101},"nn.MaxPool2d(",[91,34806,30849],{"class":5195},[91,34808,147],{"class":97},[91,34810,173],{"class":150},[91,34812,480],{"class":101},[91,34814,30904],{"class":5195},[91,34816,147],{"class":97},[91,34818,179],{"class":150},[91,34820,108],{"class":101},[91,34822,34823,34825,34827,34829,34831,34833,34835,34837,34839,34841,34843,34846,34848,34850,34852,34854,34856,34858,34860,34862],{"class":93,"line":1595},[91,34824,30820],{"class":150},[91,34826,30917],{"class":101},[91,34828,147],{"class":97},[91,34830,30828],{"class":101},[91,34832,30831],{"class":5195},[91,34834,147],{"class":97},[91,34836,311],{"class":150},[91,34838,480],{"class":101},[91,34840,30840],{"class":5195},[91,34842,147],{"class":97},[91,34844,34845],{"class":150},"256",[91,34847,480],{"class":101},[91,34849,30849],{"class":5195},[91,34851,147],{"class":97},[91,34853,421],{"class":150},[91,34855,480],{"class":101},[91,34857,30858],{"class":5195},[91,34859,147],{"class":97},[91,34861,179],{"class":150},[91,34863,108],{"class":101},[91,34865,34866,34868,34870,34872,34874,34876,34878,34880,34882,34884,34886,34888],{"class":93,"line":1601},[91,34867,30820],{"class":150},[91,34869,30952],{"class":101},[91,34871,147],{"class":97},[91,34873,34804],{"class":101},[91,34875,30849],{"class":5195},[91,34877,147],{"class":97},[91,34879,173],{"class":150},[91,34881,480],{"class":101},[91,34883,30904],{"class":5195},[91,34885,147],{"class":97},[91,34887,179],{"class":150},[91,34889,108],{"class":101},[91,34891,34892,34894,34897,34899,34901,34903,34905,34907,34909,34911,34913,34916,34918,34920,34922,34924,34926,34928,34930,34932],{"class":93,"line":1606},[91,34893,30820],{"class":150},[91,34895,34896],{"class":101},".c5",[91,34898,147],{"class":97},[91,34900,30828],{"class":101},[91,34902,30831],{"class":5195},[91,34904,147],{"class":97},[91,34906,34845],{"class":150},[91,34908,480],{"class":101},[91,34910,30840],{"class":5195},[91,34912,147],{"class":97},[91,34914,34915],{"class":150},"384",[91,34917,480],{"class":101},[91,34919,30849],{"class":5195},[91,34921,147],{"class":97},[91,34923,173],{"class":150},[91,34925,480],{"class":101},[91,34927,30858],{"class":5195},[91,34929,147],{"class":97},[91,34931,319],{"class":150},[91,34933,108],{"class":101},[91,34935,34936,34938,34941,34943,34945,34947,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975],{"class":93,"line":1620},[91,34937,30820],{"class":150},[91,34939,34940],{"class":101},".c6",[91,34942,147],{"class":97},[91,34944,30828],{"class":101},[91,34946,30831],{"class":5195},[91,34948,147],{"class":97},[91,34950,34915],{"class":150},[91,34952,480],{"class":101},[91,34954,30840],{"class":5195},[91,34956,147],{"class":97},[91,34958,34915],{"class":150},[91,34960,480],{"class":101},[91,34962,30849],{"class":5195},[91,34964,147],{"class":97},[91,34966,173],{"class":150},[91,34968,480],{"class":101},[91,34970,30858],{"class":5195},[91,34972,147],{"class":97},[91,34974,319],{"class":150},[91,34976,108],{"class":101},[91,34978,34979,34981,34984,34986,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018],{"class":93,"line":1625},[91,34980,30820],{"class":150},[91,34982,34983],{"class":101},".c7",[91,34985,147],{"class":97},[91,34987,30828],{"class":101},[91,34989,30831],{"class":5195},[91,34991,147],{"class":97},[91,34993,34915],{"class":150},[91,34995,480],{"class":101},[91,34997,30840],{"class":5195},[91,34999,147],{"class":97},[91,35001,34845],{"class":150},[91,35003,480],{"class":101},[91,35005,30849],{"class":5195},[91,35007,147],{"class":97},[91,35009,173],{"class":150},[91,35011,480],{"class":101},[91,35013,30858],{"class":5195},[91,35015,147],{"class":97},[91,35017,319],{"class":150},[91,35019,108],{"class":101},[91,35021,35022,35024,35027,35029,35031,35033,35035,35037,35039,35041,35043,35045],{"class":93,"line":1631},[91,35023,30820],{"class":150},[91,35025,35026],{"class":101},".s8",[91,35028,147],{"class":97},[91,35030,34804],{"class":101},[91,35032,30849],{"class":5195},[91,35034,147],{"class":97},[91,35036,173],{"class":150},[91,35038,480],{"class":101},[91,35040,30904],{"class":5195},[91,35042,147],{"class":97},[91,35044,179],{"class":150},[91,35046,108],{"class":101},[91,35048,35049],{"class":93,"line":1652},[91,35050,30977],{"class":160},[91,35052,35053,35055,35057,35059],{"class":93,"line":1657},[91,35054,30820],{"class":150},[91,35056,30984],{"class":101},[91,35058,147],{"class":97},[91,35060,30989],{"class":101},[91,35062,35063],{"class":93,"line":1671},[91,35064,35065],{"class":160},"       # 定义全连接层\n",[91,35067,35068,35070,35073,35075,35077,35079,35081,35083,35085,35087,35089,35092],{"class":93,"line":1676},[91,35069,30820],{"class":150},[91,35071,35072],{"class":101},".f1",[91,35074,147],{"class":97},[91,35076,31006],{"class":101},[91,35078,446],{"class":150},[91,35080,557],{"class":97},[91,35082,446],{"class":150},[91,35084,557],{"class":97},[91,35086,34845],{"class":150},[91,35088,480],{"class":101},[91,35090,35091],{"class":150},"4096",[91,35093,108],{"class":101},[91,35095,35096,35098,35101,35103,35105,35107,35109,35111],{"class":93,"line":1705},[91,35097,30820],{"class":150},[91,35099,35100],{"class":101},".f2",[91,35102,147],{"class":97},[91,35104,31006],{"class":101},[91,35106,35091],{"class":150},[91,35108,480],{"class":101},[91,35110,35091],{"class":150},[91,35112,108],{"class":101},[91,35114,35115,35117,35120,35122,35124,35126,35128,35130],{"class":93,"line":1710},[91,35116,30820],{"class":150},[91,35118,35119],{"class":101},".f3",[91,35121,147],{"class":97},[91,35123,31006],{"class":101},[91,35125,35091],{"class":150},[91,35127,480],{"class":101},[91,35129,548],{"class":150},[91,35131,108],{"class":101},[91,35133,35134],{"class":93,"line":1727},[91,35135,2378],{"emptyLinePlaceholder":17},[91,35137,35138],{"class":93,"line":1732},[91,35139,35140],{"class":160},"    # 定义前向传播\n",[91,35142,35143,35145,35147],{"class":93,"line":1737},[91,35144,30776],{"class":97},[91,35146,31068],{"class":1941},[91,35148,31071],{"class":101},[91,35150,35151,35153,35155,35157,35160,35162],{"class":93,"line":1742},[91,35152,31076],{"class":101},[91,35154,147],{"class":97},[91,35156,30798],{"class":150},[91,35158,35159],{"class":101},".ReLu(",[91,35161,30798],{"class":150},[91,35163,31088],{"class":101},[91,35165,35166,35168,35170,35172],{"class":93,"line":1756},[91,35167,31076],{"class":101},[91,35169,147],{"class":97},[91,35171,30798],{"class":150},[91,35173,31099],{"class":101},[91,35175,35176,35178,35180,35182,35184,35186],{"class":93,"line":1761},[91,35177,31076],{"class":101},[91,35179,147],{"class":97},[91,35181,30798],{"class":150},[91,35183,35159],{"class":101},[91,35185,30798],{"class":150},[91,35187,31114],{"class":101},[91,35189,35190,35192,35194,35196],{"class":93,"line":2555},[91,35191,31076],{"class":101},[91,35193,147],{"class":97},[91,35195,30798],{"class":150},[91,35197,31125],{"class":101},[91,35199,35200,35202,35204,35206,35208,35210],{"class":93,"line":2569},[91,35201,31076],{"class":101},[91,35203,147],{"class":97},[91,35205,30798],{"class":150},[91,35207,35159],{"class":101},[91,35209,30798],{"class":150},[91,35211,35212],{"class":101},".c5(x))\n",[91,35214,35215,35217,35219,35221,35223,35225],{"class":93,"line":2577},[91,35216,31076],{"class":101},[91,35218,147],{"class":97},[91,35220,30798],{"class":150},[91,35222,35159],{"class":101},[91,35224,30798],{"class":150},[91,35226,35227],{"class":101},".c6(x))\n",[91,35229,35230,35232,35234,35236,35238,35240],{"class":93,"line":2582},[91,35231,31076],{"class":101},[91,35233,147],{"class":97},[91,35235,30798],{"class":150},[91,35237,35159],{"class":101},[91,35239,30798],{"class":150},[91,35241,35242],{"class":101},".c7(x))\n",[91,35244,35245,35247,35249,35251],{"class":93,"line":2588},[91,35246,31076],{"class":101},[91,35248,147],{"class":97},[91,35250,30798],{"class":150},[91,35252,35253],{"class":101},".s8(x)\n",[91,35255,35256],{"class":93,"line":2594},[91,35257,2378],{"emptyLinePlaceholder":17},[91,35259,35260],{"class":93,"line":2599},[91,35261,35262],{"class":160},"        # 展平加线性全连接层\n",[91,35264,35265,35267,35269,35271],{"class":93,"line":7927},[91,35266,31076],{"class":101},[91,35268,147],{"class":97},[91,35270,30798],{"class":150},[91,35272,31136],{"class":101},[91,35274,35275,35277,35279,35281,35283,35285],{"class":93,"line":7951},[91,35276,31076],{"class":101},[91,35278,147],{"class":97},[91,35280,30798],{"class":150},[91,35282,35159],{"class":101},[91,35284,30798],{"class":150},[91,35286,35287],{"class":101},".f1(x))\n",[91,35289,35290],{"class":93,"line":7956},[91,35291,35292],{"class":160},"        # 还需要dropout对神经元随机进行失活\n",[91,35294,35295,35297,35299,35302,35305],{"class":93,"line":7962},[91,35296,31076],{"class":101},[91,35298,147],{"class":97},[91,35300,35301],{"class":101},"F.dropout(x,",[91,35303,35304],{"class":150},"0.5",[91,35306,108],{"class":101},[91,35308,35309,35311,35313,35315,35317,35319],{"class":93,"line":7989},[91,35310,31076],{"class":101},[91,35312,147],{"class":97},[91,35314,30798],{"class":150},[91,35316,35159],{"class":101},[91,35318,30798],{"class":150},[91,35320,35321],{"class":101},".f2(x))\n",[91,35323,35324,35326,35328,35330,35332],{"class":93,"line":7994},[91,35325,31076],{"class":101},[91,35327,147],{"class":97},[91,35329,35301],{"class":101},[91,35331,35304],{"class":150},[91,35333,108],{"class":101},[91,35335,35336],{"class":93,"line":8000},[91,35337,35338],{"class":160},"        # 直接输出\n",[91,35340,35341,35343,35345,35347],{"class":93,"line":8012},[91,35342,31076],{"class":101},[91,35344,147],{"class":97},[91,35346,30798],{"class":150},[91,35348,35349],{"class":101},".f3(x)\n",[91,35351,35352],{"class":93,"line":8024},[91,35353,35354],{"class":160},"        # 前向传播输出\n",[91,35356,35357,35359],{"class":93,"line":8036},[91,35358,14731],{"class":97},[91,35360,31184],{"class":101},[91,35362,35363],{"class":93,"line":9695},[91,35364,35365],{"class":160},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[91,35367,35368,35370,35372,35374,35376],{"class":93,"line":9720},[91,35369,1509],{"class":97},[91,35371,31195],{"class":150},[91,35373,2927],{"class":97},[91,35375,31200],{"class":206},[91,35377,3717],{"class":101},[91,35379,35380,35382,35384,35386,35388,35390,35392,35394,35396],{"class":93,"line":9743},[91,35381,31212],{"class":101},[91,35383,147],{"class":97},[91,35385,30426],{"class":101},[91,35387,31219],{"class":206},[91,35389,1682],{"class":97},[91,35391,31224],{"class":101},[91,35393,1679],{"class":97},[91,35395,30451],{"class":206},[91,35397,108],{"class":101},[91,35399,35400],{"class":93,"line":9767},[91,35401,35402],{"class":160},"    # 模型实例化，然后将实例化的模型放到设备中\n",[91,35404,35405,35407,35409],{"class":93,"line":9772},[91,35406,31264],{"class":101},[91,35408,147],{"class":97},[91,35410,35411],{"class":101},"AlexNet().to(device)\n",[91,35413,35414,35416,35418,35420,35422,35425,35427,35429],{"class":93,"line":9777},[91,35415,31274],{"class":150},[91,35417,31277],{"class":101},[91,35419,319],{"class":150},[91,35421,480],{"class":101},[91,35423,35424],{"class":150},"227",[91,35426,480],{"class":101},[91,35428,35424],{"class":150},[91,35430,31290],{"class":101},[46,35432,35433],{"start":11},[49,35434,31303],{},[83,35436,35438],{"className":30353,"code":35437,"language":30355,"meta":10,"style":10},"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",[88,35439,35440,35446,35452,35462,35468,35478,35488,35498,35508,35518,35522,35533,35543,35547,35551,35555,35563,35575,35585,35601,35611,35643,35657,35667,35677,35681,35691,35705,35715,35725,35735,35741,35745,35749,35753,35757,35761,35769,35789,35793,35797,35801,35805,35809,35825,35829,35833,35841,35845,35849,35857,35861,35865,35869,35877,35881,35885,35889,35893,35901,35905,35913,35917,35925,35929,35937,35941,35949,35953,35957,35965,35969,35973,35977,35989,36013,36027,36031,36035,36039,36047,36051,36059,36063,36071,36075,36083,36087,36095,36099,36107,36111,36123,36127,36135,36139,36147,36151,36155,36159,36163,36171,36175,36191,36195,36203,36207,36211,36215,36219,36223,36227,36231,36247,36251,36263,36267,36279,36283,36295,36299,36307,36311,36319,36323,36327,36332,36338,36342,36351,36355,36372,36376,36385,36389,36407,36420,36425,36438,36442,36446,36454,36458,36462,36470,36474,36482,36486,36494,36498,36502,36544,36586,36590,36594,36610,36614,36630,36634,36638,36646,36650,36654,36666,36704,36709,36714,36723,36727,36741,36751,36757,36763,36769,36775,36779,36783,36789,36793,36797,36805,36809,36827,36831,36835,36839,36855,36859,36863,36867,36871,36875,36895,36915,36919,36923,36927,36935,36943,36947,36963,36983,37003,37007,37011,37019,37027,37031,37035,37039,37051,37055,37065,37073,37090],{"__ignoreMap":10},[91,35441,35442,35444],{"class":93,"line":94},[91,35443,30367],{"class":97},[91,35445,31797],{"class":101},[91,35447,35448,35450],{"class":93,"line":11},[91,35449,30367],{"class":97},[91,35451,31804],{"class":101},[91,35453,35454,35456,35458,35460],{"class":93,"line":1157},[91,35455,30367],{"class":97},[91,35457,31815],{"class":101},[91,35459,31358],{"class":97},[91,35461,31820],{"class":101},[91,35463,35464,35466],{"class":93,"line":1172},[91,35465,30367],{"class":97},[91,35467,30370],{"class":101},[91,35469,35470,35472,35474,35476],{"class":93,"line":1178},[91,35471,30712],{"class":97},[91,35473,31390],{"class":101},[91,35475,30367],{"class":97},[91,35477,31837],{"class":101},[91,35479,35480,35482,35484,35486],{"class":93,"line":1192},[91,35481,30712],{"class":97},[91,35483,31343],{"class":101},[91,35485,30367],{"class":97},[91,35487,31348],{"class":101},[91,35489,35490,35492,35494,35496],{"class":93,"line":1198},[91,35491,30712],{"class":97},[91,35493,31373],{"class":101},[91,35495,30367],{"class":97},[91,35497,31378],{"class":101},[91,35499,35500,35502,35504,35506],{"class":93,"line":1289},[91,35501,30367],{"class":97},[91,35503,31390],{"class":101},[91,35505,31358],{"class":97},[91,35507,31395],{"class":101},[91,35509,35510,35512,35514,35516],{"class":93,"line":1295},[91,35511,30367],{"class":97},[91,35513,31407],{"class":101},[91,35515,31358],{"class":97},[91,35517,31412],{"class":101},[91,35519,35520],{"class":93,"line":1307},[91,35521,31882],{"class":160},[91,35523,35524,35526,35528,35530],{"class":93,"line":1590},[91,35525,30712],{"class":97},[91,35527,31889],{"class":101},[91,35529,30367],{"class":97},[91,35531,35532],{"class":101}," AlexNet\n",[91,35534,35535,35537,35539,35541],{"class":93,"line":1595},[91,35536,30712],{"class":97},[91,35538,30715],{"class":101},[91,35540,30367],{"class":97},[91,35542,30720],{"class":101},[91,35544,35545],{"class":93,"line":1601},[91,35546,2378],{"emptyLinePlaceholder":17},[91,35548,35549],{"class":93,"line":1606},[91,35550,2378],{"emptyLinePlaceholder":17},[91,35552,35553],{"class":93,"line":1620},[91,35554,31917],{"class":160},[91,35556,35557,35559,35561],{"class":93,"line":1625},[91,35558,31922],{"class":97},[91,35560,31925],{"class":1941},[91,35562,31928],{"class":101},[91,35564,35565,35567,35569,35571,35573],{"class":93,"line":1631},[91,35566,31933],{"class":101},[91,35568,147],{"class":97},[91,35570,31430],{"class":101},[91,35572,31438],{"class":206},[91,35574,31441],{"class":101},[91,35576,35577,35579,35581,35583],{"class":93,"line":1652},[91,35578,31946],{"class":5195},[91,35580,147],{"class":97},[91,35582,31451],{"class":150},[91,35584,31441],{"class":101},[91,35586,35587,35589,35591,35593,35595,35597,35599],{"class":93,"line":1657},[91,35588,31957],{"class":5195},[91,35590,147],{"class":97},[91,35592,31468],{"class":101},[91,35594,31471],{"class":5195},[91,35596,147],{"class":97},[91,35598,35424],{"class":150},[91,35600,31479],{"class":101},[91,35602,35603,35605,35607,35609],{"class":93,"line":1671},[91,35604,31974],{"class":5195},[91,35606,147],{"class":97},[91,35608,31451],{"class":150},[91,35610,108],{"class":101},[91,35612,35613,35615,35617,35619,35621,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641],{"class":93,"line":1676},[91,35614,31985],{"class":101},[91,35616,147],{"class":97},[91,35618,31990],{"class":101},[91,35620,31993],{"class":150},[91,35622,102],{"class":101},[91,35624,31998],{"class":150},[91,35626,557],{"class":97},[91,35628,7337],{"class":150},[91,35630,32005],{"class":101},[91,35632,31993],{"class":150},[91,35634,102],{"class":101},[91,35636,32012],{"class":150},[91,35638,557],{"class":97},[91,35640,7337],{"class":150},[91,35642,32019],{"class":101},[91,35644,35645,35647,35649,35651,35653,35655],{"class":93,"line":1705},[91,35646,32024],{"class":101},[91,35648,147],{"class":97},[91,35650,32029],{"class":101},[91,35652,31512],{"class":5195},[91,35654,147],{"class":97},[91,35656,31517],{"class":101},[91,35658,35659,35661,35663,35665],{"class":93,"line":1710},[91,35660,32040],{"class":5195},[91,35662,147],{"class":97},[91,35664,32045],{"class":150},[91,35666,31441],{"class":101},[91,35668,35669,35671,35673,35675],{"class":93,"line":1727},[91,35670,32052],{"class":5195},[91,35672,147],{"class":97},[91,35674,31451],{"class":150},[91,35676,31441],{"class":101},[91,35678,35679],{"class":93,"line":1732},[91,35680,32063],{"class":160},[91,35682,35683,35685,35687,35689],{"class":93,"line":1737},[91,35684,32068],{"class":5195},[91,35686,147],{"class":97},[91,35688,497],{"class":150},[91,35690,108],{"class":101},[91,35692,35693,35695,35697,35699,35701,35703],{"class":93,"line":1742},[91,35694,32079],{"class":101},[91,35696,147],{"class":97},[91,35698,31509],{"class":101},[91,35700,31512],{"class":5195},[91,35702,147],{"class":97},[91,35704,32090],{"class":101},[91,35706,35707,35709,35711,35713],{"class":93,"line":1756},[91,35708,32095],{"class":5195},[91,35710,147],{"class":97},[91,35712,32045],{"class":150},[91,35714,31441],{"class":101},[91,35716,35717,35719,35721,35723],{"class":93,"line":1761},[91,35718,32106],{"class":5195},[91,35720,147],{"class":97},[91,35722,31451],{"class":150},[91,35724,31441],{"class":101},[91,35726,35727,35729,35731,35733],{"class":93,"line":2555},[91,35728,32117],{"class":5195},[91,35730,147],{"class":97},[91,35732,497],{"class":150},[91,35734,108],{"class":101},[91,35736,35737,35739],{"class":93,"line":2569},[91,35738,4068],{"class":97},[91,35740,32130],{"class":101},[91,35742,35743],{"class":93,"line":2577},[91,35744,2378],{"emptyLinePlaceholder":17},[91,35746,35747],{"class":93,"line":2582},[91,35748,32139],{"class":160},[91,35750,35751],{"class":93,"line":2588},[91,35752,32144],{"class":160},[91,35754,35755],{"class":93,"line":2594},[91,35756,2378],{"emptyLinePlaceholder":17},[91,35758,35759],{"class":93,"line":2599},[91,35760,32153],{"class":160},[91,35762,35763,35765,35767],{"class":93,"line":7927},[91,35764,31922],{"class":97},[91,35766,32160],{"class":1941},[91,35768,32163],{"class":101},[91,35770,35771,35773,35775,35777,35779,35781,35783,35785,35787],{"class":93,"line":7951},[91,35772,31212],{"class":101},[91,35774,147],{"class":97},[91,35776,30426],{"class":101},[91,35778,31219],{"class":206},[91,35780,1682],{"class":97},[91,35782,31224],{"class":101},[91,35784,1679],{"class":97},[91,35786,32182],{"class":206},[91,35788,108],{"class":101},[91,35790,35791],{"class":93,"line":7956},[91,35792,2378],{"emptyLinePlaceholder":17},[91,35794,35795],{"class":93,"line":7962},[91,35796,2378],{"emptyLinePlaceholder":17},[91,35798,35799],{"class":93,"line":7989},[91,35800,32197],{"class":160},[91,35802,35803],{"class":93,"line":7994},[91,35804,32202],{"class":160},[91,35806,35807],{"class":93,"line":8000},[91,35808,32207],{"class":160},[91,35810,35811,35813,35815,35817,35819,35821,35823],{"class":93,"line":8012},[91,35812,32212],{"class":101},[91,35814,147],{"class":97},[91,35816,32217],{"class":101},[91,35818,32220],{"class":5195},[91,35820,147],{"class":97},[91,35822,32225],{"class":150},[91,35824,108],{"class":101},[91,35826,35827],{"class":93,"line":8024},[91,35828,2378],{"emptyLinePlaceholder":17},[91,35830,35831],{"class":93,"line":8036},[91,35832,32236],{"class":160},[91,35834,35835,35837,35839],{"class":93,"line":9695},[91,35836,32241],{"class":101},[91,35838,147],{"class":97},[91,35840,32246],{"class":101},[91,35842,35843],{"class":93,"line":9720},[91,35844,2378],{"emptyLinePlaceholder":17},[91,35846,35847],{"class":93,"line":9743},[91,35848,32255],{"class":160},[91,35850,35851,35853,35855],{"class":93,"line":9767},[91,35852,31264],{"class":101},[91,35854,147],{"class":97},[91,35856,32264],{"class":101},[91,35858,35859],{"class":93,"line":9772},[91,35860,32269],{"class":160},[91,35862,35863],{"class":93,"line":9777},[91,35864,32274],{"class":160},[91,35866,35867],{"class":93,"line":9782},[91,35868,32279],{"class":160},[91,35870,35871,35873,35875],{"class":93,"line":9791},[91,35872,32284],{"class":101},[91,35874,147],{"class":97},[91,35876,32289],{"class":101},[91,35878,35879],{"class":93,"line":9796},[91,35880,2378],{"emptyLinePlaceholder":17},[91,35882,35883],{"class":93,"line":9802},[91,35884,2378],{"emptyLinePlaceholder":17},[91,35886,35887],{"class":93,"line":9823},[91,35888,32302],{"class":160},[91,35890,35891],{"class":93,"line":9829},[91,35892,32307],{"class":160},[91,35894,35895,35897,35899],{"class":93,"line":9843},[91,35896,32312],{"class":101},[91,35898,147],{"class":97},[91,35900,32317],{"class":150},[91,35902,35903],{"class":93,"line":9849},[91,35904,32322],{"class":160},[91,35906,35907,35909,35911],{"class":93,"line":9876},[91,35908,32327],{"class":101},[91,35910,147],{"class":97},[91,35912,32332],{"class":101},[91,35914,35915],{"class":93,"line":9885},[91,35916,32337],{"class":160},[91,35918,35919,35921,35923],{"class":93,"line":9891},[91,35920,32342],{"class":101},[91,35922,147],{"class":97},[91,35924,32332],{"class":101},[91,35926,35927],{"class":93,"line":9899},[91,35928,32351],{"class":160},[91,35930,35931,35933,35935],{"class":93,"line":9904},[91,35932,32356],{"class":101},[91,35934,147],{"class":97},[91,35936,32332],{"class":101},[91,35938,35939],{"class":93,"line":16583},[91,35940,32365],{"class":160},[91,35942,35943,35945,35947],{"class":93,"line":16589},[91,35944,32370],{"class":101},[91,35946,147],{"class":97},[91,35948,32332],{"class":101},[91,35950,35951],{"class":93,"line":16612},[91,35952,2378],{"emptyLinePlaceholder":17},[91,35954,35955],{"class":93,"line":16618},[91,35956,32383],{"class":160},[91,35958,35959,35961,35963],{"class":93,"line":16641},[91,35960,32388],{"class":101},[91,35962,147],{"class":97},[91,35964,32393],{"class":101},[91,35966,35967],{"class":93,"line":16655},[91,35968,2378],{"emptyLinePlaceholder":17},[91,35970,35971],{"class":93,"line":16675},[91,35972,2378],{"emptyLinePlaceholder":17},[91,35974,35975],{"class":93,"line":16681},[91,35976,32406],{"class":160},[91,35978,35979,35981,35983,35985,35987],{"class":93,"line":16692},[91,35980,3179],{"class":97},[91,35982,32413],{"class":101},[91,35984,26018],{"class":97},[91,35986,32418],{"class":150},[91,35988,32421],{"class":101},[91,35990,35991,35993,35995,35997,35999,36001,36003,36005,36007,36009,36011],{"class":93,"line":16715},[91,35992,32426],{"class":150},[91,35994,102],{"class":101},[91,35996,32431],{"class":206},[91,35998,32434],{"class":150},[91,36000,686],{"class":206},[91,36002,32434],{"class":150},[91,36004,353],{"class":206},[91,36006,32443],{"class":101},[91,36008,634],{"class":97},[91,36010,319],{"class":150},[91,36012,30472],{"class":101},[91,36014,36015,36017,36019,36021,36023,36025],{"class":93,"line":16737},[91,36016,32426],{"class":150},[91,36018,102],{"class":101},[91,36020,32458],{"class":206},[91,36022,557],{"class":97},[91,36024,548],{"class":150},[91,36026,108],{"class":101},[91,36028,36029],{"class":93,"line":16742},[91,36030,2378],{"emptyLinePlaceholder":17},[91,36032,36033],{"class":93,"line":16748},[91,36034,32473],{"class":160},[91,36036,36037],{"class":93,"line":16762},[91,36038,32478],{"class":160},[91,36040,36041,36043,36045],{"class":93,"line":16775},[91,36042,32483],{"class":101},[91,36044,147],{"class":97},[91,36046,32317],{"class":150},[91,36048,36049],{"class":93,"line":16780},[91,36050,32492],{"class":160},[91,36052,36053,36055,36057],{"class":93,"line":16794},[91,36054,32497],{"class":101},[91,36056,147],{"class":97},[91,36058,3063],{"class":150},[91,36060,36061],{"class":93,"line":16799},[91,36062,32506],{"class":160},[91,36064,36065,36067,36069],{"class":93,"line":16805},[91,36066,32511],{"class":101},[91,36068,147],{"class":97},[91,36070,32317],{"class":150},[91,36072,36073],{"class":93,"line":16810},[91,36074,32520],{"class":160},[91,36076,36077,36079,36081],{"class":93,"line":16824},[91,36078,32525],{"class":101},[91,36080,147],{"class":97},[91,36082,3063],{"class":150},[91,36084,36085],{"class":93,"line":16829},[91,36086,32534],{"class":160},[91,36088,36089,36091,36093],{"class":93,"line":16834},[91,36090,32539],{"class":101},[91,36092,147],{"class":97},[91,36094,3063],{"class":150},[91,36096,36097],{"class":93,"line":16848},[91,36098,32548],{"class":160},[91,36100,36101,36103,36105],{"class":93,"line":16860},[91,36102,32553],{"class":101},[91,36104,147],{"class":97},[91,36106,3063],{"class":150},[91,36108,36109],{"class":93,"line":16865},[91,36110,32562],{"class":160},[91,36112,36113,36115,36117,36119,36121],{"class":93,"line":16878},[91,36114,3381],{"class":97},[91,36116,31576],{"class":101},[91,36118,26018],{"class":97},[91,36120,31581],{"class":150},[91,36122,32575],{"class":101},[91,36124,36125],{"class":93,"line":16883},[91,36126,32580],{"class":160},[91,36128,36129,36131,36133],{"class":93,"line":16888},[91,36130,32585],{"class":101},[91,36132,147],{"class":97},[91,36134,32590],{"class":101},[91,36136,36137],{"class":93,"line":16893},[91,36138,32595],{"class":160},[91,36140,36141,36143,36145],{"class":93,"line":16906},[91,36142,32600],{"class":101},[91,36144,147],{"class":97},[91,36146,32605],{"class":101},[91,36148,36149],{"class":93,"line":16911},[91,36150,32611],{"class":160},[91,36152,36153],{"class":93,"line":32608},[91,36154,32617],{"class":101},[91,36156,36157],{"class":93,"line":32614},[91,36158,32623],{"class":160},[91,36160,36161],{"class":93,"line":32620},[91,36162,32629],{"class":160},[91,36164,36165,36167,36169],{"class":93,"line":32626},[91,36166,32635],{"class":101},[91,36168,147],{"class":97},[91,36170,32640],{"class":101},[91,36172,36173],{"class":93,"line":32632},[91,36174,32646],{"class":160},[91,36176,36177,36179,36181,36183,36185,36187,36189],{"class":93,"line":32643},[91,36178,32652],{"class":101},[91,36180,147],{"class":97},[91,36182,32657],{"class":101},[91,36184,32660],{"class":5195},[91,36186,147],{"class":97},[91,36188,319],{"class":150},[91,36190,108],{"class":101},[91,36192,36193],{"class":93,"line":32649},[91,36194,32672],{"class":160},[91,36196,36197,36199,36201],{"class":93,"line":32669},[91,36198,32678],{"class":101},[91,36200,147],{"class":97},[91,36202,32683],{"class":101},[91,36204,36205],{"class":93,"line":32675},[91,36206,32689],{"class":160},[91,36208,36209],{"class":93,"line":32686},[91,36210,32695],{"class":101},[91,36212,36213],{"class":93,"line":32692},[91,36214,32701],{"class":160},[91,36216,36217],{"class":93,"line":32698},[91,36218,32707],{"class":101},[91,36220,36221],{"class":93,"line":32704},[91,36222,32713],{"class":160},[91,36224,36225],{"class":93,"line":32710},[91,36226,32719],{"class":101},[91,36228,36229],{"class":93,"line":32716},[91,36230,32725],{"class":160},[91,36232,36233,36235,36237,36239,36241,36243,36245],{"class":93,"line":32722},[91,36234,32731],{"class":101},[91,36236,9456],{"class":97},[91,36238,32736],{"class":101},[91,36240,557],{"class":97},[91,36242,32741],{"class":101},[91,36244,293],{"class":150},[91,36246,108],{"class":101},[91,36248,36249],{"class":93,"line":32728},[91,36250,32751],{"class":160},[91,36252,36253,36255,36257,36259,36261],{"class":93,"line":32748},[91,36254,32757],{"class":101},[91,36256,9456],{"class":97},[91,36258,32762],{"class":101},[91,36260,2927],{"class":97},[91,36262,32767],{"class":101},[91,36264,36265],{"class":93,"line":32754},[91,36266,32773],{"class":160},[91,36268,36269,36271,36273,36275,36277],{"class":93,"line":32770},[91,36270,32779],{"class":101},[91,36272,9456],{"class":97},[91,36274,32741],{"class":101},[91,36276,293],{"class":150},[91,36278,108],{"class":101},[91,36280,36281],{"class":93,"line":32776},[91,36282,32793],{"class":160},[91,36284,36285,36287,36289,36291,36293],{"class":93,"line":32790},[91,36286,3381],{"class":97},[91,36288,32801],{"class":101},[91,36290,26018],{"class":97},[91,36292,31581],{"class":150},[91,36294,32808],{"class":101},[91,36296,36297],{"class":93,"line":32796},[91,36298,32814],{"class":160},[91,36300,36301,36303,36305],{"class":93,"line":32811},[91,36302,32585],{"class":101},[91,36304,147],{"class":97},[91,36306,32590],{"class":101},[91,36308,36309],{"class":93,"line":32817},[91,36310,32829],{"class":160},[91,36312,36313,36315,36317],{"class":93,"line":32826},[91,36314,32600],{"class":101},[91,36316,147],{"class":97},[91,36318,32605],{"class":101},[91,36320,36321],{"class":93,"line":32832},[91,36322,32844],{"class":160},[91,36324,36325],{"class":93,"line":32841},[91,36326,32850],{"class":101},[91,36328,36329],{"class":93,"line":32847},[91,36330,36331],{"class":160},"            # 验证时不计算梯度以节省内存\u002F计算\n",[91,36333,36334,36336],{"class":93,"line":32853},[91,36335,32856],{"class":97},[91,36337,32859],{"class":101},[91,36339,36340],{"class":93,"line":32862},[91,36341,32865],{"class":160},[91,36343,36344,36347,36349],{"class":93,"line":32868},[91,36345,36346],{"class":101},"                output",[91,36348,147],{"class":97},[91,36350,32640],{"class":101},[91,36352,36353],{"class":93,"line":32879},[91,36354,32882],{"class":160},[91,36356,36357,36360,36362,36364,36366,36368,36370],{"class":93,"line":32885},[91,36358,36359],{"class":101},"                pre_lab",[91,36361,147],{"class":97},[91,36363,32657],{"class":101},[91,36365,32660],{"class":5195},[91,36367,147],{"class":97},[91,36369,319],{"class":150},[91,36371,108],{"class":101},[91,36373,36374],{"class":93,"line":32904},[91,36375,32907],{"class":160},[91,36377,36378,36381,36383],{"class":93,"line":32910},[91,36379,36380],{"class":101},"                val_batch_loss",[91,36382,147],{"class":97},[91,36384,32683],{"class":101},[91,36386,36387],{"class":93,"line":32921},[91,36388,32924],{"class":160},[91,36390,36391,36394,36396,36399,36401,36403,36405],{"class":93,"line":32927},[91,36392,36393],{"class":101},"                val_loss",[91,36395,9456],{"class":97},[91,36397,36398],{"class":101},"val_batch_loss.item()",[91,36400,557],{"class":97},[91,36402,32741],{"class":101},[91,36404,293],{"class":150},[91,36406,108],{"class":101},[91,36408,36409,36412,36414,36416,36418],{"class":93,"line":32947},[91,36410,36411],{"class":101},"                val_corrects",[91,36413,9456],{"class":97},[91,36415,32762],{"class":101},[91,36417,2927],{"class":97},[91,36419,32767],{"class":101},[91,36421,36422],{"class":93,"line":32963},[91,36423,36424],{"class":160},"            # 当前用于验证的样本数量\n",[91,36426,36427,36430,36432,36434,36436],{"class":93,"line":32969},[91,36428,36429],{"class":101},"            val_num",[91,36431,9456],{"class":97},[91,36433,32741],{"class":101},[91,36435,293],{"class":150},[91,36437,108],{"class":101},[91,36439,36440],{"class":93,"line":32983},[91,36441,32986],{"class":160},[91,36443,36444],{"class":93,"line":32989},[91,36445,32992],{"class":160},[91,36447,36448,36450,36452],{"class":93,"line":32995},[91,36449,32998],{"class":101},[91,36451,686],{"class":97},[91,36453,33003],{"class":101},[91,36455,36456],{"class":93,"line":33006},[91,36457,33009],{"class":160},[91,36459,36460],{"class":93,"line":33012},[91,36461,33015],{"class":160},[91,36463,36464,36466,36468],{"class":93,"line":33018},[91,36465,33021],{"class":101},[91,36467,686],{"class":97},[91,36469,33003],{"class":101},[91,36471,36472],{"class":93,"line":33028},[91,36473,33031],{"class":160},[91,36475,36476,36478,36480],{"class":93,"line":33034},[91,36477,33037],{"class":101},[91,36479,686],{"class":97},[91,36481,33042],{"class":101},[91,36483,36484],{"class":93,"line":33045},[91,36485,33048],{"class":160},[91,36487,36488,36490,36492],{"class":93,"line":33051},[91,36489,33054],{"class":101},[91,36491,686],{"class":97},[91,36493,33042],{"class":101},[91,36495,36496],{"class":93,"line":33061},[91,36497,2378],{"emptyLinePlaceholder":17},[91,36499,36500],{"class":93,"line":33066},[91,36501,33069],{"class":160},[91,36503,36504,36506,36508,36510,36512,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542],{"class":93,"line":33072},[91,36505,32426],{"class":150},[91,36507,102],{"class":101},[91,36509,3570],{"class":206},[91,36511,32434],{"class":150},[91,36513,33083],{"class":206},[91,36515,998],{"class":150},[91,36517,33088],{"class":97},[91,36519,1048],{"class":150},[91,36521,33093],{"class":206},[91,36523,998],{"class":150},[91,36525,33088],{"class":97},[91,36527,1048],{"class":150},[91,36529,3570],{"class":206},[91,36531,33104],{"class":101},[91,36533,634],{"class":97},[91,36535,319],{"class":150},[91,36537,33111],{"class":101},[91,36539,634],{"class":97},[91,36541,319],{"class":150},[91,36543,33118],{"class":101},[91,36545,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584],{"class":93,"line":33121},[91,36547,32426],{"class":150},[91,36549,102],{"class":101},[91,36551,3570],{"class":206},[91,36553,32434],{"class":150},[91,36555,33132],{"class":206},[91,36557,998],{"class":150},[91,36559,33088],{"class":97},[91,36561,1048],{"class":150},[91,36563,33141],{"class":206},[91,36565,998],{"class":150},[91,36567,33088],{"class":97},[91,36569,1048],{"class":150},[91,36571,3570],{"class":206},[91,36573,33152],{"class":101},[91,36575,634],{"class":97},[91,36577,319],{"class":150},[91,36579,33159],{"class":101},[91,36581,634],{"class":97},[91,36583,319],{"class":150},[91,36585,33118],{"class":101},[91,36587,36588],{"class":93,"line":33168},[91,36589,2378],{"emptyLinePlaceholder":17},[91,36591,36592],{"class":93,"line":33173},[91,36593,33176],{"class":160},[91,36595,36596,36598,36600,36602,36604,36606,36608],{"class":93,"line":33179},[91,36597,2475],{"class":97},[91,36599,33184],{"class":101},[91,36601,634],{"class":97},[91,36603,319],{"class":150},[91,36605,1042],{"class":101},[91,36607,1062],{"class":97},[91,36609,33195],{"class":101},[91,36611,36612],{"class":93,"line":33198},[91,36613,33201],{"class":160},[91,36615,36616,36618,36620,36622,36624,36626,36628],{"class":93,"line":33204},[91,36617,33207],{"class":101},[91,36619,141],{"class":150},[91,36621,147],{"class":97},[91,36623,33214],{"class":101},[91,36625,634],{"class":97},[91,36627,319],{"class":150},[91,36629,33221],{"class":101},[91,36631,36632],{"class":93,"line":33224},[91,36633,33227],{"class":160},[91,36635,36636],{"class":93,"line":33230},[91,36637,33233],{"class":160},[91,36639,36640,36642,36644],{"class":93,"line":33236},[91,36641,33239],{"class":101},[91,36643,147],{"class":97},[91,36645,32289],{"class":101},[91,36647,36648],{"class":93,"line":33246},[91,36649,2378],{"emptyLinePlaceholder":17},[91,36651,36652],{"class":93,"line":33251},[91,36653,33254],{"class":160},[91,36655,36656,36658,36660,36662,36664],{"class":93,"line":33257},[91,36657,33260],{"class":101},[91,36659,147],{"class":97},[91,36661,33265],{"class":101},[91,36663,634],{"class":97},[91,36665,33270],{"class":101},[91,36667,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702],{"class":93,"line":33273},[91,36669,32426],{"class":150},[91,36671,102],{"class":101},[91,36673,33280],{"class":206},[91,36675,998],{"class":150},[91,36677,33285],{"class":97},[91,36679,1048],{"class":150},[91,36681,646],{"class":206},[91,36683,998],{"class":150},[91,36685,33285],{"class":97},[91,36687,1048],{"class":150},[91,36689,33298],{"class":206},[91,36691,33301],{"class":101},[91,36693,33304],{"class":97},[91,36695,1009],{"class":150},[91,36697,33309],{"class":101},[91,36699,430],{"class":97},[91,36701,1009],{"class":150},[91,36703,30472],{"class":101},[91,36705,36706],{"class":93,"line":33318},[91,36707,36708],{"class":160},"    # 选择最优参数并保存\n",[91,36710,36711],{"class":93,"line":33324},[91,36712,36713],{"class":160},"    # 保存最佳模型权重字典\n",[91,36715,36716,36719,36721],{"class":93,"line":33330},[91,36717,36718],{"class":101},"    torch.save(best_model_wts,",[91,36720,33342],{"class":206},[91,36722,108],{"class":101},[91,36724,36725],{"class":93,"line":33336},[91,36726,33362],{"class":160},[91,36728,36729,36731,36733,36735,36737,36739],{"class":93,"line":33347},[91,36730,33368],{"class":101},[91,36732,147],{"class":97},[91,36734,33373],{"class":101},[91,36736,33376],{"class":5195},[91,36738,147],{"class":97},[91,36740,1524],{"class":101},[91,36742,36743,36745,36747,36749],{"class":93,"line":33353},[91,36744,33386],{"class":206},[91,36746,961],{"class":101},[91,36748,33391],{"class":150},[91,36750,33394],{"class":101},[91,36752,36753,36755],{"class":93,"line":33359},[91,36754,33400],{"class":206},[91,36756,33403],{"class":101},[91,36758,36759,36761],{"class":93,"line":33365},[91,36760,33409],{"class":206},[91,36762,33412],{"class":101},[91,36764,36765,36767],{"class":93,"line":33383},[91,36766,33418],{"class":206},[91,36768,33421],{"class":101},[91,36770,36771,36773],{"class":93,"line":33397},[91,36772,33427],{"class":206},[91,36774,33430],{"class":101},[91,36776,36777],{"class":93,"line":33406},[91,36778,33436],{"class":101},[91,36780,36781],{"class":93,"line":33415},[91,36782,33442],{"class":160},[91,36784,36785,36787],{"class":93,"line":33424},[91,36786,4068],{"class":97},[91,36788,33450],{"class":101},[91,36790,36791],{"class":93,"line":33433},[91,36792,2378],{"emptyLinePlaceholder":17},[91,36794,36795],{"class":93,"line":33439},[91,36796,33461],{"class":160},[91,36798,36799,36801,36803],{"class":93,"line":33445},[91,36800,31922],{"class":97},[91,36802,33469],{"class":1941},[91,36804,33472],{"class":101},[91,36806,36807],{"class":93,"line":33453},[91,36808,33478],{"class":160},[91,36810,36811,36813,36815,36817,36819,36821,36823,36825],{"class":93,"line":33458},[91,36812,33484],{"class":101},[91,36814,31668],{"class":5195},[91,36816,147],{"class":97},[91,36818,102],{"class":101},[91,36820,600],{"class":150},[91,36822,480],{"class":101},[91,36824,395],{"class":150},[91,36826,30472],{"class":101},[91,36828,36829],{"class":93,"line":33464},[91,36830,33504],{"class":160},[91,36832,36833],{"class":93,"line":33475},[91,36834,33510],{"class":160},[91,36836,36837],{"class":93,"line":33481},[91,36838,33516],{"class":160},[91,36840,36841,36843,36845,36847,36849,36851,36853],{"class":93,"line":33501},[91,36842,31702],{"class":101},[91,36844,319],{"class":150},[91,36846,480],{"class":101},[91,36848,179],{"class":150},[91,36850,480],{"class":101},[91,36852,319],{"class":150},[91,36854,108],{"class":101},[91,36856,36857],{"class":93,"line":33507},[91,36858,33539],{"class":160},[91,36860,36861],{"class":93,"line":33513},[91,36862,33545],{"class":160},[91,36864,36865],{"class":93,"line":33519},[91,36866,33551],{"class":160},[91,36868,36869],{"class":93,"line":33536},[91,36870,33557],{"class":160},[91,36872,36873],{"class":93,"line":33542},[91,36874,33563],{"class":160},[91,36876,36877,36879,36881,36883,36885,36887,36889,36891,36893],{"class":93,"line":33548},[91,36878,33569],{"class":101},[91,36880,33572],{"class":206},[91,36882,33575],{"class":101},[91,36884,33578],{"class":206},[91,36886,480],{"class":101},[91,36888,33583],{"class":5195},[91,36890,147],{"class":97},[91,36892,33588],{"class":206},[91,36894,108],{"class":101},[91,36896,36897,36899,36901,36903,36905,36907,36909,36911,36913],{"class":93,"line":33554},[91,36898,33569],{"class":101},[91,36900,33572],{"class":206},[91,36902,33600],{"class":101},[91,36904,33603],{"class":206},[91,36906,480],{"class":101},[91,36908,33583],{"class":5195},[91,36910,147],{"class":97},[91,36912,33612],{"class":206},[91,36914,108],{"class":101},[91,36916,36917],{"class":93,"line":33560},[91,36918,33620],{"class":160},[91,36920,36921],{"class":93,"line":33566},[91,36922,33626],{"class":101},[91,36924,36925],{"class":93,"line":33593},[91,36926,33632],{"class":160},[91,36928,36929,36931,36933],{"class":93,"line":33617},[91,36930,33638],{"class":101},[91,36932,33641],{"class":206},[91,36934,108],{"class":101},[91,36936,36937,36939,36941],{"class":93,"line":33623},[91,36938,33649],{"class":101},[91,36940,33652],{"class":206},[91,36942,108],{"class":101},[91,36944,36945],{"class":93,"line":33629},[91,36946,33660],{"class":160},[91,36948,36949,36951,36953,36955,36957,36959,36961],{"class":93,"line":33635},[91,36950,31702],{"class":101},[91,36952,319],{"class":150},[91,36954,480],{"class":101},[91,36956,179],{"class":150},[91,36958,480],{"class":101},[91,36960,179],{"class":150},[91,36962,108],{"class":101},[91,36964,36965,36967,36969,36971,36973,36975,36977,36979,36981],{"class":93,"line":33646},[91,36966,33569],{"class":101},[91,36968,33572],{"class":206},[91,36970,33687],{"class":101},[91,36972,33578],{"class":206},[91,36974,480],{"class":101},[91,36976,33583],{"class":5195},[91,36978,147],{"class":97},[91,36980,33698],{"class":206},[91,36982,108],{"class":101},[91,36984,36985,36987,36989,36991,36993,36995,36997,36999,37001],{"class":93,"line":33657},[91,36986,33569],{"class":101},[91,36988,33572],{"class":206},[91,36990,33710],{"class":101},[91,36992,33603],{"class":206},[91,36994,480],{"class":101},[91,36996,33583],{"class":5195},[91,36998,147],{"class":97},[91,37000,33721],{"class":206},[91,37002,108],{"class":101},[91,37004,37005],{"class":93,"line":33663},[91,37006,33729],{"class":160},[91,37008,37009],{"class":93,"line":33680},[91,37010,33626],{"class":101},[91,37012,37013,37015,37017],{"class":93,"line":33703},[91,37014,33638],{"class":101},[91,37016,33572],{"class":206},[91,37018,108],{"class":101},[91,37020,37021,37023,37025],{"class":93,"line":33726},[91,37022,33649],{"class":101},[91,37024,33751],{"class":206},[91,37026,108],{"class":101},[91,37028,37029],{"class":93,"line":33732},[91,37030,33759],{"class":101},[91,37032,37033],{"class":93,"line":33737},[91,37034,2378],{"emptyLinePlaceholder":17},[91,37036,37037],{"class":93,"line":33746},[91,37038,33770],{"class":160},[91,37040,37041,37043,37045,37047,37049],{"class":93,"line":33756},[91,37042,1509],{"class":97},[91,37044,31195],{"class":150},[91,37046,2927],{"class":97},[91,37048,31200],{"class":206},[91,37050,3717],{"class":101},[91,37052,37053],{"class":93,"line":33762},[91,37054,33789],{"class":160},[91,37056,37057,37060,37062],{"class":93,"line":33767},[91,37058,37059],{"class":101},"    AlexNet",[91,37061,147],{"class":97},[91,37063,37064],{"class":101},"AlexNet()\n",[91,37066,37067,37069,37071],{"class":93,"line":33773},[91,37068,33806],{"class":101},[91,37070,147],{"class":97},[91,37072,33811],{"class":101},[91,37074,37075,37077,37079,37082,37084,37086,37088],{"class":93,"line":33786},[91,37076,33368],{"class":101},[91,37078,147],{"class":97},[91,37080,37081],{"class":101},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[91,37083,33824],{"class":5195},[91,37085,147],{"class":97},[91,37087,802],{"class":150},[91,37089,108],{"class":101},[91,37091,37092],{"class":93,"line":33792},[91,37093,33836],{"class":101},[46,37095,37096],{"start":1157},[49,37097,33849],{},[83,37099,37101],{"className":30353,"code":37100,"language":30355,"meta":10,"style":10},"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",[88,37102,37103,37109,37119,37129,37139,37143,37153,37163,37174,37178,37182,37186,37194,37210,37220,37236,37246,37260,37264,37274,37284,37294,37300,37304,37308,37316,37320,37336,37344,37348,37352,37360,37368,37372,37376,37380,37384,37390,37394,37404,37412,37420,37424,37428,37432,37440,37444,37460,37464,37468,37472,37484,37488,37500,37504,37508,37520,37524,37534,37538,37542,37554,37558,37566,37570,37574,37582,37586,37594,37598,37602,37606,37610,37614,37630,37638,37642,37646,37694,37700,37704,37714,37722,37730,37734,37738,37742,37746,37754,37758,37774,37778,37786,37794],{"__ignoreMap":10},[91,37104,37105,37107],{"class":93,"line":94},[91,37106,30367],{"class":97},[91,37108,30370],{"class":101},[91,37110,37111,37113,37115,37117],{"class":93,"line":11},[91,37112,30367],{"class":97},[91,37114,31390],{"class":101},[91,37116,31358],{"class":97},[91,37118,31395],{"class":101},[91,37120,37121,37123,37125,37127],{"class":93,"line":1157},[91,37122,30712],{"class":97},[91,37124,33877],{"class":101},[91,37126,30367],{"class":97},[91,37128,33882],{"class":101},[91,37130,37131,37133,37135,37137],{"class":93,"line":1172},[91,37132,30712],{"class":97},[91,37134,31373],{"class":101},[91,37136,30367],{"class":97},[91,37138,31378],{"class":101},[91,37140,37141],{"class":93,"line":1178},[91,37142,33897],{"class":160},[91,37144,37145,37147,37149,37151],{"class":93,"line":1192},[91,37146,30712],{"class":97},[91,37148,31343],{"class":101},[91,37150,30367],{"class":97},[91,37152,31348],{"class":101},[91,37154,37155,37157,37159,37161],{"class":93,"line":1198},[91,37156,30712],{"class":97},[91,37158,31889],{"class":101},[91,37160,30367],{"class":97},[91,37162,35532],{"class":101},[91,37164,37165,37167,37170,37172],{"class":93,"line":1289},[91,37166,30712],{"class":97},[91,37168,37169],{"class":101}," 练习.AlexNet.model ",[91,37171,30367],{"class":97},[91,37173,35532],{"class":101},[91,37175,37176],{"class":93,"line":1295},[91,37177,2378],{"emptyLinePlaceholder":17},[91,37179,37180],{"class":93,"line":1307},[91,37181,2378],{"emptyLinePlaceholder":17},[91,37183,37184],{"class":93,"line":1590},[91,37185,33926],{"class":160},[91,37187,37188,37190,37192],{"class":93,"line":1595},[91,37189,31922],{"class":97},[91,37191,33933],{"class":1941},[91,37193,31928],{"class":101},[91,37195,37196,37198,37200,37202,37204,37206,37208],{"class":93,"line":1601},[91,37197,33940],{"class":101},[91,37199,147],{"class":97},[91,37201,31430],{"class":101},[91,37203,31433],{"class":5195},[91,37205,147],{"class":97},[91,37207,31438],{"class":206},[91,37209,31441],{"class":101},[91,37211,37212,37214,37216,37218],{"class":93,"line":1606},[91,37213,33957],{"class":5195},[91,37215,147],{"class":97},[91,37217,33962],{"class":150},[91,37219,31441],{"class":101},[91,37221,37222,37224,37226,37228,37230,37232,37234],{"class":93,"line":1620},[91,37223,33969],{"class":5195},[91,37225,147],{"class":97},[91,37227,31468],{"class":101},[91,37229,31471],{"class":5195},[91,37231,147],{"class":97},[91,37233,35424],{"class":150},[91,37235,31479],{"class":101},[91,37237,37238,37240,37242,37244],{"class":93,"line":1625},[91,37239,33986],{"class":5195},[91,37241,147],{"class":97},[91,37243,31451],{"class":150},[91,37245,108],{"class":101},[91,37247,37248,37250,37252,37254,37256,37258],{"class":93,"line":1631},[91,37249,33997],{"class":101},[91,37251,147],{"class":97},[91,37253,31509],{"class":101},[91,37255,31512],{"class":5195},[91,37257,147],{"class":97},[91,37259,34008],{"class":101},[91,37261,37262],{"class":93,"line":1652},[91,37263,34013],{"class":160},[91,37265,37266,37268,37270,37272],{"class":93,"line":1657},[91,37267,34018],{"class":5195},[91,37269,147],{"class":97},[91,37271,319],{"class":150},[91,37273,31441],{"class":101},[91,37275,37276,37278,37280,37282],{"class":93,"line":1671},[91,37277,34029],{"class":5195},[91,37279,147],{"class":97},[91,37281,31451],{"class":150},[91,37283,31441],{"class":101},[91,37285,37286,37288,37290,37292],{"class":93,"line":1676},[91,37287,34040],{"class":5195},[91,37289,147],{"class":97},[91,37291,293],{"class":150},[91,37293,108],{"class":101},[91,37295,37296,37298],{"class":93,"line":1705},[91,37297,4068],{"class":97},[91,37299,34053],{"class":101},[91,37301,37302],{"class":93,"line":1710},[91,37303,2378],{"emptyLinePlaceholder":17},[91,37305,37306],{"class":93,"line":1727},[91,37307,34062],{"class":160},[91,37309,37310,37312,37314],{"class":93,"line":1732},[91,37311,31922],{"class":97},[91,37313,34069],{"class":1941},[91,37315,34072],{"class":101},[91,37317,37318],{"class":93,"line":1737},[91,37319,34077],{"class":160},[91,37321,37322,37324,37326,37328,37330,37332,37334],{"class":93,"line":1742},[91,37323,31212],{"class":101},[91,37325,147],{"class":97},[91,37327,31219],{"class":206},[91,37329,1682],{"class":97},[91,37331,31224],{"class":101},[91,37333,1679],{"class":97},[91,37335,34094],{"class":206},[91,37337,37338,37340,37342],{"class":93,"line":1756},[91,37339,31264],{"class":101},[91,37341,147],{"class":97},[91,37343,32264],{"class":101},[91,37345,37346],{"class":93,"line":1761},[91,37347,2378],{"emptyLinePlaceholder":17},[91,37349,37350],{"class":93,"line":2555},[91,37351,34111],{"class":160},[91,37353,37354,37356,37358],{"class":93,"line":2569},[91,37355,34116],{"class":101},[91,37357,147],{"class":97},[91,37359,32317],{"class":150},[91,37361,37362,37364,37366],{"class":93,"line":2577},[91,37363,34125],{"class":101},[91,37365,147],{"class":97},[91,37367,3063],{"class":150},[91,37369,37370],{"class":93,"line":2582},[91,37371,2378],{"emptyLinePlaceholder":17},[91,37373,37374],{"class":93,"line":2588},[91,37375,34138],{"class":160},[91,37377,37378],{"class":93,"line":2594},[91,37379,34143],{"class":160},[91,37381,37382],{"class":93,"line":2599},[91,37383,34148],{"class":160},[91,37385,37386,37388],{"class":93,"line":7927},[91,37387,34153],{"class":97},[91,37389,32859],{"class":101},[91,37391,37392],{"class":93,"line":7951},[91,37393,34160],{"class":160},[91,37395,37396,37398,37400,37402],{"class":93,"line":7956},[91,37397,3381],{"class":97},[91,37399,34167],{"class":101},[91,37401,26018],{"class":97},[91,37403,34172],{"class":101},[91,37405,37406,37408,37410],{"class":93,"line":7962},[91,37407,34177],{"class":101},[91,37409,147],{"class":97},[91,37411,34182],{"class":101},[91,37413,37414,37416,37418],{"class":93,"line":7989},[91,37415,34187],{"class":101},[91,37417,147],{"class":97},[91,37419,34192],{"class":101},[91,37421,37422],{"class":93,"line":7994},[91,37423,34197],{"class":160},[91,37425,37426],{"class":93,"line":8000},[91,37427,32850],{"class":101},[91,37429,37430],{"class":93,"line":8012},[91,37431,34206],{"class":160},[91,37433,37434,37436,37438],{"class":93,"line":8024},[91,37435,32635],{"class":101},[91,37437,147],{"class":97},[91,37439,34215],{"class":101},[91,37441,37442],{"class":93,"line":8036},[91,37443,34220],{"class":160},[91,37445,37446,37448,37450,37452,37454,37456,37458],{"class":93,"line":9695},[91,37447,32652],{"class":101},[91,37449,147],{"class":97},[91,37451,32657],{"class":101},[91,37453,32660],{"class":5195},[91,37455,147],{"class":97},[91,37457,319],{"class":150},[91,37459,108],{"class":101},[91,37461,37462],{"class":93,"line":9720},[91,37463,34241],{"class":160},[91,37465,37466],{"class":93,"line":9743},[91,37467,34246],{"class":160},[91,37469,37470],{"class":93,"line":9767},[91,37471,34251],{"class":160},[91,37473,37474,37476,37478,37480,37482],{"class":93,"line":9772},[91,37475,34256],{"class":101},[91,37477,9456],{"class":97},[91,37479,32762],{"class":101},[91,37481,2927],{"class":97},[91,37483,34265],{"class":101},[91,37485,37486],{"class":93,"line":9777},[91,37487,34270],{"class":160},[91,37489,37490,37492,37494,37496,37498],{"class":93,"line":9782},[91,37491,34275],{"class":101},[91,37493,9456],{"class":97},[91,37495,34280],{"class":101},[91,37497,293],{"class":150},[91,37499,108],{"class":101},[91,37501,37502],{"class":93,"line":9791},[91,37503,2378],{"emptyLinePlaceholder":17},[91,37505,37506],{"class":93,"line":9796},[91,37507,34293],{"class":160},[91,37509,37510,37512,37514,37516,37518],{"class":93,"line":9802},[91,37511,34298],{"class":101},[91,37513,147],{"class":97},[91,37515,34303],{"class":101},[91,37517,686],{"class":97},[91,37519,34308],{"class":101},[91,37521,37522],{"class":93,"line":9823},[91,37523,34313],{"class":160},[91,37525,37526,37528,37530,37532],{"class":93,"line":9829},[91,37527,32426],{"class":150},[91,37529,102],{"class":101},[91,37531,34322],{"class":206},[91,37533,34325],{"class":101},[91,37535,37536],{"class":93,"line":9843},[91,37537,2378],{"emptyLinePlaceholder":17},[91,37539,37540],{"class":93,"line":9849},[91,37541,34334],{"class":160},[91,37543,37544,37546,37548,37550,37552],{"class":93,"line":9876},[91,37545,1509],{"class":97},[91,37547,31195],{"class":150},[91,37549,2927],{"class":97},[91,37551,31200],{"class":206},[91,37553,3717],{"class":101},[91,37555,37556],{"class":93,"line":9885},[91,37557,34351],{"class":160},[91,37559,37560,37562,37564],{"class":93,"line":9891},[91,37561,31264],{"class":101},[91,37563,147],{"class":97},[91,37565,37064],{"class":101},[91,37567,37568],{"class":93,"line":9899},[91,37569,34364],{"class":160},[91,37571,37572],{"class":93,"line":9904},[91,37573,34369],{"class":160},[91,37575,37576,37578,37580],{"class":93,"line":16583},[91,37577,34374],{"class":101},[91,37579,34377],{"class":206},[91,37581,30472],{"class":101},[91,37583,37584],{"class":93,"line":16589},[91,37585,34384],{"class":160},[91,37587,37588,37590,37592],{"class":93,"line":16612},[91,37589,33997],{"class":101},[91,37591,147],{"class":97},[91,37593,34393],{"class":101},[91,37595,37596],{"class":93,"line":16618},[91,37597,34398],{"class":160},[91,37599,37600],{"class":93,"line":16641},[91,37601,34403],{"class":101},[91,37603,37604],{"class":93,"line":16655},[91,37605,2378],{"emptyLinePlaceholder":17},[91,37607,37608],{"class":93,"line":16675},[91,37609,34412],{"class":160},[91,37611,37612],{"class":93,"line":16681},[91,37613,34417],{"class":160},[91,37615,37616,37618,37620,37622,37624,37626,37628],{"class":93,"line":16692},[91,37617,31212],{"class":101},[91,37619,147],{"class":97},[91,37621,31219],{"class":206},[91,37623,1682],{"class":97},[91,37625,31224],{"class":101},[91,37627,1679],{"class":97},[91,37629,34094],{"class":206},[91,37631,37632,37634,37636],{"class":93,"line":16715},[91,37633,31264],{"class":101},[91,37635,147],{"class":97},[91,37637,32264],{"class":101},[91,37639,37640],{"class":93,"line":16737},[91,37641,34446],{"class":160},[91,37643,37644],{"class":93,"line":16742},[91,37645,34451],{"class":160},[91,37647,37648,37650,37652,37654,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692],{"class":93,"line":16748},[91,37649,34456],{"class":101},[91,37651,147],{"class":97},[91,37653,992],{"class":101},[91,37655,34463],{"class":206},[91,37657,480],{"class":101},[91,37659,34468],{"class":206},[91,37661,480],{"class":101},[91,37663,34473],{"class":206},[91,37665,480],{"class":101},[91,37667,34478],{"class":206},[91,37669,480],{"class":101},[91,37671,34483],{"class":206},[91,37673,480],{"class":101},[91,37675,34488],{"class":206},[91,37677,480],{"class":101},[91,37679,34493],{"class":206},[91,37681,480],{"class":101},[91,37683,34498],{"class":206},[91,37685,480],{"class":101},[91,37687,34503],{"class":206},[91,37689,480],{"class":101},[91,37691,34508],{"class":206},[91,37693,33221],{"class":101},[91,37695,37696,37698],{"class":93,"line":16762},[91,37697,34153],{"class":97},[91,37699,32859],{"class":101},[91,37701,37702],{"class":93,"line":16775},[91,37703,34521],{"class":160},[91,37705,37706,37708,37710,37712],{"class":93,"line":16780},[91,37707,3381],{"class":97},[91,37709,34528],{"class":101},[91,37711,26018],{"class":97},[91,37713,34172],{"class":101},[91,37715,37716,37718,37720],{"class":93,"line":16794},[91,37717,32585],{"class":101},[91,37719,147],{"class":97},[91,37721,32590],{"class":101},[91,37723,37724,37726,37728],{"class":93,"line":16799},[91,37725,32600],{"class":101},[91,37727,147],{"class":97},[91,37729,32605],{"class":101},[91,37731,37732],{"class":93,"line":16805},[91,37733,2378],{"emptyLinePlaceholder":17},[91,37735,37736],{"class":93,"line":16810},[91,37737,34557],{"class":160},[91,37739,37740],{"class":93,"line":16824},[91,37741,32850],{"class":101},[91,37743,37744],{"class":93,"line":16829},[91,37745,34566],{"class":160},[91,37747,37748,37750,37752],{"class":93,"line":16834},[91,37749,32635],{"class":101},[91,37751,147],{"class":97},[91,37753,32640],{"class":101},[91,37755,37756],{"class":93,"line":16848},[91,37757,34579],{"class":160},[91,37759,37760,37762,37764,37766,37768,37770,37772],{"class":93,"line":16860},[91,37761,32652],{"class":101},[91,37763,147],{"class":97},[91,37765,32657],{"class":101},[91,37767,32660],{"class":5195},[91,37769,147],{"class":97},[91,37771,319],{"class":150},[91,37773,108],{"class":101},[91,37775,37776],{"class":93,"line":16865},[91,37777,34600],{"class":160},[91,37779,37780,37782,37784],{"class":93,"line":16878},[91,37781,34605],{"class":101},[91,37783,147],{"class":97},[91,37785,34610],{"class":101},[91,37787,37788,37790,37792],{"class":93,"line":16883},[91,37789,34615],{"class":101},[91,37791,147],{"class":97},[91,37793,34620],{"class":101},[91,37795,37796,37798,37800,37802,37804,37806,37808,37810],{"class":93,"line":16888},[91,37797,34625],{"class":150},[91,37799,102],{"class":101},[91,37801,34630],{"class":206},[91,37803,34633],{"class":101},[91,37805,34636],{"class":206},[91,37807,480],{"class":101},[91,37809,34641],{"class":206},[91,37811,34644],{"class":101},[63,37813,37815],{"id":37814},"_22vgg","2.2.VGG",[21977,37817,37819],{"id":37818},"_221原理","2.2.1.原理",[38,37821,37822],{},[1440,37823],{"alt":10,"src":37824},"\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",[38,37826,37827],{},[1440,37828],{"alt":10,"src":37829},"\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",[38,37831,37832],{},[1440,37833],{"alt":10,"src":37834},"\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",[38,37836,37837],{},"参数详细描述：",[38,37839,37840],{},[1440,37841],{"alt":10,"src":37842},"\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",[38,37844,37845],{},[1440,37846],{"alt":10,"src":37847},"\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",[38,37849,37850],{},[1440,37851],{"alt":10,"src":37852},"\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",[38,37854,37855],{},[1440,37856],{"alt":10,"src":37857},"\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",[38,37859,37860],{},[1440,37861],{"alt":10,"src":37862},"\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",[21977,37864,37866],{"id":37865},"_222代码实现","2.2.2.代码实现",[46,37868,37869],{},[49,37870,37871],{},"网络搭建",[83,37873,37875],{"className":30353,"code":37874,"language":30355,"meta":10,"style":10},"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",[88,37876,37877,37883,37895,37905,37915,37919,37936,37944,37963,37968,37973,37985,38023,38028,38064,38068,38097,38102,38107,38118,38154,38158,38194,38198,38226,38230,38235,38246,38282,38286,38322,38326,38362,38366,38394,38398,38403,38414,38451,38455,38491,38495,38531,38535,38563,38567,38572,38583,38619,38623,38659,38663,38699,38703,38731,38735,38740,38751,38756,38761,38766,38787,38791,38803,38807,38819,38823,38827,38832,38837,38852,38857,38867,38872,38887,38892,38911,38916,38925,38930,38940,38945,38950,38964,38969,38983,38991,38995,38999,39007,39018,39029,39040,39051,39062,39073,39079,39083,39088,39101,39121,39127,39136],{"__ignoreMap":10},[91,37878,37879,37881],{"class":93,"line":94},[91,37880,30367],{"class":97},[91,37882,30370],{"class":101},[91,37884,37885,37887,37890,37892],{"class":93,"line":11},[91,37886,30712],{"class":97},[91,37888,37889],{"class":101}," sympy.core.sympify ",[91,37891,30367],{"class":97},[91,37893,37894],{"class":101}," kernS\n",[91,37896,37897,37899,37901,37903],{"class":93,"line":1157},[91,37898,30712],{"class":97},[91,37900,30715],{"class":101},[91,37902,30367],{"class":97},[91,37904,30720],{"class":101},[91,37906,37907,37909,37911,37913],{"class":93,"line":1172},[91,37908,30712],{"class":97},[91,37910,30732],{"class":101},[91,37912,30367],{"class":97},[91,37914,30737],{"class":101},[91,37916,37917],{"class":93,"line":1178},[91,37918,2378],{"emptyLinePlaceholder":17},[91,37920,37921,37923,37926,37928,37930,37932,37934],{"class":93,"line":1192},[91,37922,14673],{"class":97},[91,37924,37925],{"class":1941}," VGG16",[91,37927,102],{"class":101},[91,37929,30753],{"class":1941},[91,37931,660],{"class":101},[91,37933,30758],{"class":1941},[91,37935,30761],{"class":101},[91,37937,37938,37940,37942],{"class":93,"line":1198},[91,37939,30776],{"class":97},[91,37941,30779],{"class":150},[91,37943,30782],{"class":101},[91,37945,37946,37948,37950,37953,37955,37957,37959,37961],{"class":93,"line":1289},[91,37947,30792],{"class":150},[91,37949,102],{"class":101},[91,37951,37952],{"class":150},"VGG16",[91,37954,12414],{"class":101},[91,37956,30798],{"class":150},[91,37958,30801],{"class":101},[91,37960,30804],{"class":150},[91,37962,1954],{"class":101},[91,37964,37965],{"class":93,"line":1295},[91,37966,37967],{"class":160},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[91,37969,37970],{"class":93,"line":1307},[91,37971,37972],{"class":160},"        # 这里用的是灰度图\n",[91,37974,37975,37977,37980,37982],{"class":93,"line":1590},[91,37976,30820],{"class":150},[91,37978,37979],{"class":101},".block1",[91,37981,147],{"class":97},[91,37983,37984],{"class":101},"nn.Sequential(\n",[91,37986,37987,37990,37992,37994,37996,37998,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020],{"class":93,"line":1595},[91,37988,37989],{"class":101},"            nn.Conv2d(",[91,37991,30831],{"class":5195},[91,37993,147],{"class":97},[91,37995,319],{"class":150},[91,37997,480],{"class":101},[91,37999,30840],{"class":5195},[91,38001,147],{"class":97},[91,38003,305],{"class":150},[91,38005,480],{"class":101},[91,38007,30849],{"class":5195},[91,38009,147],{"class":97},[91,38011,173],{"class":150},[91,38013,480],{"class":101},[91,38015,30858],{"class":5195},[91,38017,147],{"class":97},[91,38019,319],{"class":150},[91,38021,38022],{"class":101},"),\n",[91,38024,38025],{"class":93,"line":1601},[91,38026,38027],{"class":101},"            nn.ReLU(),\n",[91,38029,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062],{"class":93,"line":1606},[91,38031,37989],{"class":101},[91,38033,30831],{"class":5195},[91,38035,147],{"class":97},[91,38037,305],{"class":150},[91,38039,480],{"class":101},[91,38041,30840],{"class":5195},[91,38043,147],{"class":97},[91,38045,305],{"class":150},[91,38047,480],{"class":101},[91,38049,30849],{"class":5195},[91,38051,147],{"class":97},[91,38053,173],{"class":150},[91,38055,480],{"class":101},[91,38057,30858],{"class":5195},[91,38059,147],{"class":97},[91,38061,319],{"class":150},[91,38063,38022],{"class":101},[91,38065,38066],{"class":93,"line":1620},[91,38067,38027],{"class":101},[91,38069,38070,38073,38075,38077,38079,38081,38083,38085,38087,38089,38091,38093,38095],{"class":93,"line":1625},[91,38071,38072],{"class":101},"            nn.MaxPool2d(",[91,38074,30849],{"class":5195},[91,38076,147],{"class":97},[91,38078,179],{"class":150},[91,38080,480],{"class":101},[91,38082,30904],{"class":5195},[91,38084,147],{"class":97},[91,38086,179],{"class":150},[91,38088,480],{"class":101},[91,38090,30858],{"class":5195},[91,38092,147],{"class":97},[91,38094,293],{"class":150},[91,38096,108],{"class":101},[91,38098,38099],{"class":93,"line":1631},[91,38100,38101],{"class":101},"        )\n",[91,38103,38104],{"class":93,"line":1652},[91,38105,38106],{"class":160},"        # 第二层\n",[91,38108,38109,38111,38114,38116],{"class":93,"line":1657},[91,38110,30820],{"class":150},[91,38112,38113],{"class":101},".block2",[91,38115,147],{"class":97},[91,38117,37984],{"class":101},[91,38119,38120,38122,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152],{"class":93,"line":1671},[91,38121,37989],{"class":101},[91,38123,30831],{"class":5195},[91,38125,147],{"class":97},[91,38127,305],{"class":150},[91,38129,480],{"class":101},[91,38131,30840],{"class":5195},[91,38133,147],{"class":97},[91,38135,32045],{"class":150},[91,38137,480],{"class":101},[91,38139,30849],{"class":5195},[91,38141,147],{"class":97},[91,38143,173],{"class":150},[91,38145,480],{"class":101},[91,38147,30858],{"class":5195},[91,38149,147],{"class":97},[91,38151,319],{"class":150},[91,38153,38022],{"class":101},[91,38155,38156],{"class":93,"line":1676},[91,38157,38027],{"class":101},[91,38159,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192],{"class":93,"line":1705},[91,38161,37989],{"class":101},[91,38163,30831],{"class":5195},[91,38165,147],{"class":97},[91,38167,32045],{"class":150},[91,38169,480],{"class":101},[91,38171,30840],{"class":5195},[91,38173,147],{"class":97},[91,38175,32045],{"class":150},[91,38177,480],{"class":101},[91,38179,30849],{"class":5195},[91,38181,147],{"class":97},[91,38183,173],{"class":150},[91,38185,480],{"class":101},[91,38187,30858],{"class":5195},[91,38189,147],{"class":97},[91,38191,319],{"class":150},[91,38193,38022],{"class":101},[91,38195,38196],{"class":93,"line":1710},[91,38197,38027],{"class":101},[91,38199,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224],{"class":93,"line":1727},[91,38201,38072],{"class":101},[91,38203,30849],{"class":5195},[91,38205,147],{"class":97},[91,38207,179],{"class":150},[91,38209,480],{"class":101},[91,38211,30904],{"class":5195},[91,38213,147],{"class":97},[91,38215,179],{"class":150},[91,38217,480],{"class":101},[91,38219,30858],{"class":5195},[91,38221,147],{"class":97},[91,38223,293],{"class":150},[91,38225,108],{"class":101},[91,38227,38228],{"class":93,"line":1732},[91,38229,38101],{"class":101},[91,38231,38232],{"class":93,"line":1737},[91,38233,38234],{"class":160},"        # 第三层\n",[91,38236,38237,38239,38242,38244],{"class":93,"line":1742},[91,38238,30820],{"class":150},[91,38240,38241],{"class":101},".block3",[91,38243,147],{"class":97},[91,38245,37984],{"class":101},[91,38247,38248,38250,38252,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280],{"class":93,"line":1756},[91,38249,37989],{"class":101},[91,38251,30831],{"class":5195},[91,38253,147],{"class":97},[91,38255,32045],{"class":150},[91,38257,480],{"class":101},[91,38259,30840],{"class":5195},[91,38261,147],{"class":97},[91,38263,34845],{"class":150},[91,38265,480],{"class":101},[91,38267,30849],{"class":5195},[91,38269,147],{"class":97},[91,38271,173],{"class":150},[91,38273,480],{"class":101},[91,38275,30858],{"class":5195},[91,38277,147],{"class":97},[91,38279,319],{"class":150},[91,38281,38022],{"class":101},[91,38283,38284],{"class":93,"line":1761},[91,38285,38027],{"class":101},[91,38287,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320],{"class":93,"line":2555},[91,38289,37989],{"class":101},[91,38291,30831],{"class":5195},[91,38293,147],{"class":97},[91,38295,34845],{"class":150},[91,38297,480],{"class":101},[91,38299,30840],{"class":5195},[91,38301,147],{"class":97},[91,38303,34845],{"class":150},[91,38305,480],{"class":101},[91,38307,30849],{"class":5195},[91,38309,147],{"class":97},[91,38311,173],{"class":150},[91,38313,480],{"class":101},[91,38315,30858],{"class":5195},[91,38317,147],{"class":97},[91,38319,319],{"class":150},[91,38321,38022],{"class":101},[91,38323,38324],{"class":93,"line":2569},[91,38325,38027],{"class":101},[91,38327,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360],{"class":93,"line":2577},[91,38329,37989],{"class":101},[91,38331,30831],{"class":5195},[91,38333,147],{"class":97},[91,38335,34845],{"class":150},[91,38337,480],{"class":101},[91,38339,30840],{"class":5195},[91,38341,147],{"class":97},[91,38343,34845],{"class":150},[91,38345,480],{"class":101},[91,38347,30849],{"class":5195},[91,38349,147],{"class":97},[91,38351,173],{"class":150},[91,38353,480],{"class":101},[91,38355,30858],{"class":5195},[91,38357,147],{"class":97},[91,38359,319],{"class":150},[91,38361,38022],{"class":101},[91,38363,38364],{"class":93,"line":2582},[91,38365,38027],{"class":101},[91,38367,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392],{"class":93,"line":2588},[91,38369,38072],{"class":101},[91,38371,30849],{"class":5195},[91,38373,147],{"class":97},[91,38375,179],{"class":150},[91,38377,480],{"class":101},[91,38379,30904],{"class":5195},[91,38381,147],{"class":97},[91,38383,179],{"class":150},[91,38385,480],{"class":101},[91,38387,30858],{"class":5195},[91,38389,147],{"class":97},[91,38391,293],{"class":150},[91,38393,108],{"class":101},[91,38395,38396],{"class":93,"line":2594},[91,38397,38101],{"class":101},[91,38399,38400],{"class":93,"line":2599},[91,38401,38402],{"class":160},"        # 第四层\n",[91,38404,38405,38407,38410,38412],{"class":93,"line":7927},[91,38406,30820],{"class":150},[91,38408,38409],{"class":101},".block4",[91,38411,147],{"class":97},[91,38413,37984],{"class":101},[91,38415,38416,38418,38420,38422,38424,38426,38428,38430,38433,38435,38437,38439,38441,38443,38445,38447,38449],{"class":93,"line":7951},[91,38417,37989],{"class":101},[91,38419,30831],{"class":5195},[91,38421,147],{"class":97},[91,38423,34845],{"class":150},[91,38425,480],{"class":101},[91,38427,30840],{"class":5195},[91,38429,147],{"class":97},[91,38431,38432],{"class":150},"512",[91,38434,480],{"class":101},[91,38436,30849],{"class":5195},[91,38438,147],{"class":97},[91,38440,173],{"class":150},[91,38442,480],{"class":101},[91,38444,30858],{"class":5195},[91,38446,147],{"class":97},[91,38448,319],{"class":150},[91,38450,38022],{"class":101},[91,38452,38453],{"class":93,"line":7956},[91,38454,38027],{"class":101},[91,38456,38457,38459,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489],{"class":93,"line":7962},[91,38458,37989],{"class":101},[91,38460,30831],{"class":5195},[91,38462,147],{"class":97},[91,38464,38432],{"class":150},[91,38466,480],{"class":101},[91,38468,30840],{"class":5195},[91,38470,147],{"class":97},[91,38472,38432],{"class":150},[91,38474,480],{"class":101},[91,38476,30849],{"class":5195},[91,38478,147],{"class":97},[91,38480,173],{"class":150},[91,38482,480],{"class":101},[91,38484,30858],{"class":5195},[91,38486,147],{"class":97},[91,38488,319],{"class":150},[91,38490,38022],{"class":101},[91,38492,38493],{"class":93,"line":7989},[91,38494,38027],{"class":101},[91,38496,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529],{"class":93,"line":7994},[91,38498,37989],{"class":101},[91,38500,30831],{"class":5195},[91,38502,147],{"class":97},[91,38504,38432],{"class":150},[91,38506,480],{"class":101},[91,38508,30840],{"class":5195},[91,38510,147],{"class":97},[91,38512,38432],{"class":150},[91,38514,480],{"class":101},[91,38516,30849],{"class":5195},[91,38518,147],{"class":97},[91,38520,173],{"class":150},[91,38522,480],{"class":101},[91,38524,30858],{"class":5195},[91,38526,147],{"class":97},[91,38528,319],{"class":150},[91,38530,38022],{"class":101},[91,38532,38533],{"class":93,"line":8000},[91,38534,38027],{"class":101},[91,38536,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561],{"class":93,"line":8012},[91,38538,38072],{"class":101},[91,38540,30849],{"class":5195},[91,38542,147],{"class":97},[91,38544,179],{"class":150},[91,38546,480],{"class":101},[91,38548,30904],{"class":5195},[91,38550,147],{"class":97},[91,38552,179],{"class":150},[91,38554,480],{"class":101},[91,38556,30858],{"class":5195},[91,38558,147],{"class":97},[91,38560,293],{"class":150},[91,38562,108],{"class":101},[91,38564,38565],{"class":93,"line":8024},[91,38566,38101],{"class":101},[91,38568,38569],{"class":93,"line":8036},[91,38570,38571],{"class":160},"        # 第五层\n",[91,38573,38574,38576,38579,38581],{"class":93,"line":9695},[91,38575,30820],{"class":150},[91,38577,38578],{"class":101},".block5",[91,38580,147],{"class":97},[91,38582,37984],{"class":101},[91,38584,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617],{"class":93,"line":9720},[91,38586,37989],{"class":101},[91,38588,30831],{"class":5195},[91,38590,147],{"class":97},[91,38592,38432],{"class":150},[91,38594,480],{"class":101},[91,38596,30840],{"class":5195},[91,38598,147],{"class":97},[91,38600,38432],{"class":150},[91,38602,480],{"class":101},[91,38604,30849],{"class":5195},[91,38606,147],{"class":97},[91,38608,173],{"class":150},[91,38610,480],{"class":101},[91,38612,30858],{"class":5195},[91,38614,147],{"class":97},[91,38616,319],{"class":150},[91,38618,38022],{"class":101},[91,38620,38621],{"class":93,"line":9743},[91,38622,38027],{"class":101},[91,38624,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657],{"class":93,"line":9767},[91,38626,37989],{"class":101},[91,38628,30831],{"class":5195},[91,38630,147],{"class":97},[91,38632,38432],{"class":150},[91,38634,480],{"class":101},[91,38636,30840],{"class":5195},[91,38638,147],{"class":97},[91,38640,38432],{"class":150},[91,38642,480],{"class":101},[91,38644,30849],{"class":5195},[91,38646,147],{"class":97},[91,38648,173],{"class":150},[91,38650,480],{"class":101},[91,38652,30858],{"class":5195},[91,38654,147],{"class":97},[91,38656,319],{"class":150},[91,38658,38022],{"class":101},[91,38660,38661],{"class":93,"line":9772},[91,38662,38027],{"class":101},[91,38664,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697],{"class":93,"line":9777},[91,38666,37989],{"class":101},[91,38668,30831],{"class":5195},[91,38670,147],{"class":97},[91,38672,38432],{"class":150},[91,38674,480],{"class":101},[91,38676,30840],{"class":5195},[91,38678,147],{"class":97},[91,38680,38432],{"class":150},[91,38682,480],{"class":101},[91,38684,30849],{"class":5195},[91,38686,147],{"class":97},[91,38688,173],{"class":150},[91,38690,480],{"class":101},[91,38692,30858],{"class":5195},[91,38694,147],{"class":97},[91,38696,319],{"class":150},[91,38698,38022],{"class":101},[91,38700,38701],{"class":93,"line":9782},[91,38702,38027],{"class":101},[91,38704,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729],{"class":93,"line":9791},[91,38706,38072],{"class":101},[91,38708,30849],{"class":5195},[91,38710,147],{"class":97},[91,38712,179],{"class":150},[91,38714,480],{"class":101},[91,38716,30904],{"class":5195},[91,38718,147],{"class":97},[91,38720,179],{"class":150},[91,38722,480],{"class":101},[91,38724,30858],{"class":5195},[91,38726,147],{"class":97},[91,38728,293],{"class":150},[91,38730,108],{"class":101},[91,38732,38733],{"class":93,"line":9796},[91,38734,38101],{"class":101},[91,38736,38737],{"class":93,"line":9802},[91,38738,38739],{"class":160},"        # 全连接层\n",[91,38741,38742,38744,38747,38749],{"class":93,"line":9823},[91,38743,30820],{"class":150},[91,38745,38746],{"class":101},".block6",[91,38748,147],{"class":97},[91,38750,37984],{"class":101},[91,38752,38753],{"class":93,"line":9829},[91,38754,38755],{"class":160},"            # 平展操作\n",[91,38757,38758],{"class":93,"line":9843},[91,38759,38760],{"class":160},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[91,38762,38763],{"class":93,"line":9849},[91,38764,38765],{"class":101},"            nn.Flatten(),\n",[91,38767,38768,38771,38773,38775,38777,38779,38781,38783,38785],{"class":93,"line":9876},[91,38769,38770],{"class":101},"            nn.Linear(",[91,38772,471],{"class":150},[91,38774,557],{"class":97},[91,38776,471],{"class":150},[91,38778,557],{"class":97},[91,38780,38432],{"class":150},[91,38782,480],{"class":101},[91,38784,34845],{"class":150},[91,38786,38022],{"class":101},[91,38788,38789],{"class":93,"line":9885},[91,38790,38027],{"class":101},[91,38792,38793,38795,38797,38799,38801],{"class":93,"line":9891},[91,38794,38770],{"class":101},[91,38796,34845],{"class":150},[91,38798,480],{"class":101},[91,38800,32045],{"class":150},[91,38802,38022],{"class":101},[91,38804,38805],{"class":93,"line":9899},[91,38806,38027],{"class":101},[91,38808,38809,38811,38813,38815,38817],{"class":93,"line":9904},[91,38810,38770],{"class":101},[91,38812,32045],{"class":150},[91,38814,480],{"class":101},[91,38816,548],{"class":150},[91,38818,108],{"class":101},[91,38820,38821],{"class":93,"line":16583},[91,38822,38101],{"class":101},[91,38824,38825],{"class":93,"line":16589},[91,38826,2378],{"emptyLinePlaceholder":17},[91,38828,38829],{"class":93,"line":16612},[91,38830,38831],{"class":160},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[91,38833,38834],{"class":93,"line":16618},[91,38835,38836],{"class":160},"        # 循环遍历模型\n",[91,38838,38839,38841,38844,38846,38849],{"class":93,"line":16641},[91,38840,3381],{"class":97},[91,38842,38843],{"class":101}," m ",[91,38845,26018],{"class":97},[91,38847,38848],{"class":150}," self",[91,38850,38851],{"class":101},".modules():\n",[91,38853,38854],{"class":93,"line":16655},[91,38855,38856],{"class":160},"            # print(m)\n",[91,38858,38859,38861,38864],{"class":93,"line":16675},[91,38860,4620],{"class":97},[91,38862,38863],{"class":150}," isinstance",[91,38865,38866],{"class":101},"(m,nn.Conv2d):\n",[91,38868,38869],{"class":93,"line":16681},[91,38870,38871],{"class":160},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[91,38873,38874,38877,38880,38882,38885],{"class":93,"line":16692},[91,38875,38876],{"class":101},"                nn.init.kaiming_normal_(m.weight,",[91,38878,38879],{"class":5195},"nonlinearity",[91,38881,147],{"class":97},[91,38883,38884],{"class":206},"'relu'",[91,38886,108],{"class":101},[91,38888,38889],{"class":93,"line":16715},[91,38890,38891],{"class":160},"                # 判断b参数是否存在\n",[91,38893,38894,38897,38900,38903,38906,38909],{"class":93,"line":16737},[91,38895,38896],{"class":97},"                if",[91,38898,38899],{"class":101}," m.bias ",[91,38901,38902],{"class":97},"is",[91,38904,38905],{"class":97}," not",[91,38907,38908],{"class":150}," None",[91,38910,3717],{"class":101},[91,38912,38913],{"class":93,"line":16742},[91,38914,38915],{"class":160},"                    # 如果参数不存在的化初始化b=0\n",[91,38917,38918,38921,38923],{"class":93,"line":16748},[91,38919,38920],{"class":101},"                    nn.init.constant_(m.bias,",[91,38922,293],{"class":150},[91,38924,108],{"class":101},[91,38926,38927],{"class":93,"line":16762},[91,38928,38929],{"class":160},"            # 全连接层初始化\n",[91,38931,38932,38935,38937],{"class":93,"line":16775},[91,38933,38934],{"class":97},"            elif",[91,38936,38863],{"class":150},[91,38938,38939],{"class":101},"(m,nn.Linear):\n",[91,38941,38942],{"class":93,"line":16780},[91,38943,38944],{"class":160},"                # 这个初始化方法是利用的是正太分布的方式\n",[91,38946,38947],{"class":93,"line":16794},[91,38948,38949],{"class":160},"                # 均值为0，方差为0.01\n",[91,38951,38952,38955,38957,38959,38962],{"class":93,"line":16799},[91,38953,38954],{"class":101},"                nn.init.normal_(m.weight,",[91,38956,293],{"class":150},[91,38958,480],{"class":101},[91,38960,38961],{"class":150},"0.01",[91,38963,108],{"class":101},[91,38965,38966],{"class":93,"line":16805},[91,38967,38968],{"class":160},"                # 初始化b参数\n",[91,38970,38971,38973,38975,38977,38979,38981],{"class":93,"line":16810},[91,38972,38896],{"class":97},[91,38974,38899],{"class":101},[91,38976,38902],{"class":97},[91,38978,38905],{"class":97},[91,38980,38908],{"class":150},[91,38982,3717],{"class":101},[91,38984,38985,38987,38989],{"class":93,"line":16824},[91,38986,38920],{"class":101},[91,38988,293],{"class":150},[91,38990,108],{"class":101},[91,38992,38993],{"class":93,"line":16829},[91,38994,2378],{"emptyLinePlaceholder":17},[91,38996,38997],{"class":93,"line":16834},[91,38998,35140],{"class":160},[91,39000,39001,39003,39005],{"class":93,"line":16848},[91,39002,30776],{"class":97},[91,39004,31068],{"class":1941},[91,39006,31071],{"class":101},[91,39008,39009,39011,39013,39015],{"class":93,"line":16860},[91,39010,31076],{"class":101},[91,39012,147],{"class":97},[91,39014,30798],{"class":150},[91,39016,39017],{"class":101},".block1(x)\n",[91,39019,39020,39022,39024,39026],{"class":93,"line":16865},[91,39021,31076],{"class":101},[91,39023,147],{"class":97},[91,39025,30798],{"class":150},[91,39027,39028],{"class":101},".block2(x)\n",[91,39030,39031,39033,39035,39037],{"class":93,"line":16878},[91,39032,31076],{"class":101},[91,39034,147],{"class":97},[91,39036,30798],{"class":150},[91,39038,39039],{"class":101},".block3(x)\n",[91,39041,39042,39044,39046,39048],{"class":93,"line":16883},[91,39043,31076],{"class":101},[91,39045,147],{"class":97},[91,39047,30798],{"class":150},[91,39049,39050],{"class":101},".block4(x)\n",[91,39052,39053,39055,39057,39059],{"class":93,"line":16888},[91,39054,31076],{"class":101},[91,39056,147],{"class":97},[91,39058,30798],{"class":150},[91,39060,39061],{"class":101},".block5(x)\n",[91,39063,39064,39066,39068,39070],{"class":93,"line":16893},[91,39065,31076],{"class":101},[91,39067,147],{"class":97},[91,39069,30798],{"class":150},[91,39071,39072],{"class":101},".block6(x)\n",[91,39074,39075,39077],{"class":93,"line":16906},[91,39076,14731],{"class":97},[91,39078,31184],{"class":101},[91,39080,39081],{"class":93,"line":16911},[91,39082,2378],{"emptyLinePlaceholder":17},[91,39084,39085],{"class":93,"line":32608},[91,39086,39087],{"class":160},"# 验证模型\n",[91,39089,39090,39092,39094,39096,39099],{"class":93,"line":32614},[91,39091,1509],{"class":97},[91,39093,31195],{"class":150},[91,39095,2927],{"class":97},[91,39097,39098],{"class":206},"'__main__'",[91,39100,3717],{"class":101},[91,39102,39103,39105,39107,39109,39111,39113,39115,39117,39119],{"class":93,"line":32620},[91,39104,31212],{"class":101},[91,39106,147],{"class":97},[91,39108,30426],{"class":101},[91,39110,31219],{"class":206},[91,39112,1682],{"class":97},[91,39114,31224],{"class":101},[91,39116,1679],{"class":97},[91,39118,30451],{"class":206},[91,39120,108],{"class":101},[91,39122,39123,39125],{"class":93,"line":32626},[91,39124,31274],{"class":150},[91,39126,30460],{"class":101},[91,39128,39129,39131,39133],{"class":93,"line":32632},[91,39130,31264],{"class":101},[91,39132,147],{"class":97},[91,39134,39135],{"class":101},"VGG16().to(device)\n",[91,39137,39138,39140,39142,39144,39146,39148,39150,39152],{"class":93,"line":32643},[91,39139,31274],{"class":150},[91,39141,31277],{"class":101},[91,39143,319],{"class":150},[91,39145,480],{"class":101},[91,39147,31476],{"class":150},[91,39149,480],{"class":101},[91,39151,31476],{"class":150},[91,39153,31290],{"class":101},[46,39155,39156],{"start":11},[49,39157,39158],{},"训练代码",[38,39160,39161],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[38,39163,39164],{},"解决方式:",[38,39166,39167],{},"①权重初始化",[83,39169,39171],{"className":30353,"code":39170,"language":30355,"meta":10,"style":10},"# 权重初始化,保证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",[88,39172,39173,39178,39183,39195,39200,39208,39213,39226,39231,39245,39250,39259,39264,39273,39278,39283,39296,39301,39315],{"__ignoreMap":10},[91,39174,39175],{"class":93,"line":94},[91,39176,39177],{"class":160},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[91,39179,39180],{"class":93,"line":11},[91,39181,39182],{"class":160},"# 循环遍历模型\n",[91,39184,39185,39187,39189,39191,39193],{"class":93,"line":1157},[91,39186,3003],{"class":97},[91,39188,38843],{"class":101},[91,39190,26018],{"class":97},[91,39192,38848],{"class":150},[91,39194,38851],{"class":101},[91,39196,39197],{"class":93,"line":1172},[91,39198,39199],{"class":160},"    # print(m)\n",[91,39201,39202,39204,39206],{"class":93,"line":1178},[91,39203,3079],{"class":97},[91,39205,38863],{"class":150},[91,39207,38866],{"class":101},[91,39209,39210],{"class":93,"line":1192},[91,39211,39212],{"class":160},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[91,39214,39215,39218,39220,39222,39224],{"class":93,"line":1198},[91,39216,39217],{"class":101},"        nn.init.kaiming_normal_(m.weight,",[91,39219,38879],{"class":5195},[91,39221,147],{"class":97},[91,39223,38884],{"class":206},[91,39225,108],{"class":101},[91,39227,39228],{"class":93,"line":1289},[91,39229,39230],{"class":160},"        # 判断b参数是否存在\n",[91,39232,39233,39235,39237,39239,39241,39243],{"class":93,"line":1295},[91,39234,2475],{"class":97},[91,39236,38899],{"class":101},[91,39238,38902],{"class":97},[91,39240,38905],{"class":97},[91,39242,38908],{"class":150},[91,39244,3717],{"class":101},[91,39246,39247],{"class":93,"line":1307},[91,39248,39249],{"class":160},"            # 如果参数不存在的化初始化b=0\n",[91,39251,39252,39255,39257],{"class":93,"line":1590},[91,39253,39254],{"class":101},"            nn.init.constant_(m.bias,",[91,39256,293],{"class":150},[91,39258,108],{"class":101},[91,39260,39261],{"class":93,"line":1595},[91,39262,39263],{"class":160},"    # 全连接层初始化\n",[91,39265,39266,39269,39271],{"class":93,"line":1601},[91,39267,39268],{"class":97},"    elif",[91,39270,38863],{"class":150},[91,39272,38939],{"class":101},[91,39274,39275],{"class":93,"line":1606},[91,39276,39277],{"class":160},"        # 这个初始化方法是利用的是正太分布的方式\n",[91,39279,39280],{"class":93,"line":1620},[91,39281,39282],{"class":160},"        # 均值为0，方差为0.01\n",[91,39284,39285,39288,39290,39292,39294],{"class":93,"line":1625},[91,39286,39287],{"class":101},"        nn.init.normal_(m.weight,",[91,39289,293],{"class":150},[91,39291,480],{"class":101},[91,39293,38961],{"class":150},[91,39295,108],{"class":101},[91,39297,39298],{"class":93,"line":1631},[91,39299,39300],{"class":160},"        # 初始化b参数\n",[91,39302,39303,39305,39307,39309,39311,39313],{"class":93,"line":1652},[91,39304,2475],{"class":97},[91,39306,38899],{"class":101},[91,39308,38902],{"class":97},[91,39310,38905],{"class":97},[91,39312,38908],{"class":150},[91,39314,3717],{"class":101},[91,39316,39317,39319,39321],{"class":93,"line":1657},[91,39318,39254],{"class":101},[91,39320,293],{"class":150},[91,39322,108],{"class":101},[38,39324,39325],{},"②尽可能地增加批次",[38,39327,39328],{},"训练完整代码：",[83,39330,39331],{"className":30353,"code":37874,"language":30355,"meta":10,"style":10},[88,39332,39333,39339,39349,39359,39369,39373,39389,39397,39415,39419,39423,39433,39469,39473,39509,39513,39541,39545,39549,39559,39595,39599,39635,39639,39667,39671,39675,39685,39721,39725,39761,39765,39801,39805,39833,39837,39841,39851,39887,39891,39927,39931,39967,39971,39999,40003,40007,40017,40053,40057,40093,40097,40133,40137,40165,40169,40173,40183,40187,40191,40195,40215,40219,40231,40235,40247,40251,40255,40259,40263,40275,40279,40287,40291,40303,40307,40321,40325,40333,40337,40345,40349,40353,40365,40369,40383,40391,40395,40399,40407,40417,40427,40437,40447,40457,40467,40473,40477,40481,40493,40513,40519,40527],{"__ignoreMap":10},[91,39334,39335,39337],{"class":93,"line":94},[91,39336,30367],{"class":97},[91,39338,30370],{"class":101},[91,39340,39341,39343,39345,39347],{"class":93,"line":11},[91,39342,30712],{"class":97},[91,39344,37889],{"class":101},[91,39346,30367],{"class":97},[91,39348,37894],{"class":101},[91,39350,39351,39353,39355,39357],{"class":93,"line":1157},[91,39352,30712],{"class":97},[91,39354,30715],{"class":101},[91,39356,30367],{"class":97},[91,39358,30720],{"class":101},[91,39360,39361,39363,39365,39367],{"class":93,"line":1172},[91,39362,30712],{"class":97},[91,39364,30732],{"class":101},[91,39366,30367],{"class":97},[91,39368,30737],{"class":101},[91,39370,39371],{"class":93,"line":1178},[91,39372,2378],{"emptyLinePlaceholder":17},[91,39374,39375,39377,39379,39381,39383,39385,39387],{"class":93,"line":1192},[91,39376,14673],{"class":97},[91,39378,37925],{"class":1941},[91,39380,102],{"class":101},[91,39382,30753],{"class":1941},[91,39384,660],{"class":101},[91,39386,30758],{"class":1941},[91,39388,30761],{"class":101},[91,39390,39391,39393,39395],{"class":93,"line":1198},[91,39392,30776],{"class":97},[91,39394,30779],{"class":150},[91,39396,30782],{"class":101},[91,39398,39399,39401,39403,39405,39407,39409,39411,39413],{"class":93,"line":1289},[91,39400,30792],{"class":150},[91,39402,102],{"class":101},[91,39404,37952],{"class":150},[91,39406,12414],{"class":101},[91,39408,30798],{"class":150},[91,39410,30801],{"class":101},[91,39412,30804],{"class":150},[91,39414,1954],{"class":101},[91,39416,39417],{"class":93,"line":1295},[91,39418,37967],{"class":160},[91,39420,39421],{"class":93,"line":1307},[91,39422,37972],{"class":160},[91,39424,39425,39427,39429,39431],{"class":93,"line":1590},[91,39426,30820],{"class":150},[91,39428,37979],{"class":101},[91,39430,147],{"class":97},[91,39432,37984],{"class":101},[91,39434,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467],{"class":93,"line":1595},[91,39436,37989],{"class":101},[91,39438,30831],{"class":5195},[91,39440,147],{"class":97},[91,39442,319],{"class":150},[91,39444,480],{"class":101},[91,39446,30840],{"class":5195},[91,39448,147],{"class":97},[91,39450,305],{"class":150},[91,39452,480],{"class":101},[91,39454,30849],{"class":5195},[91,39456,147],{"class":97},[91,39458,173],{"class":150},[91,39460,480],{"class":101},[91,39462,30858],{"class":5195},[91,39464,147],{"class":97},[91,39466,319],{"class":150},[91,39468,38022],{"class":101},[91,39470,39471],{"class":93,"line":1601},[91,39472,38027],{"class":101},[91,39474,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507],{"class":93,"line":1606},[91,39476,37989],{"class":101},[91,39478,30831],{"class":5195},[91,39480,147],{"class":97},[91,39482,305],{"class":150},[91,39484,480],{"class":101},[91,39486,30840],{"class":5195},[91,39488,147],{"class":97},[91,39490,305],{"class":150},[91,39492,480],{"class":101},[91,39494,30849],{"class":5195},[91,39496,147],{"class":97},[91,39498,173],{"class":150},[91,39500,480],{"class":101},[91,39502,30858],{"class":5195},[91,39504,147],{"class":97},[91,39506,319],{"class":150},[91,39508,38022],{"class":101},[91,39510,39511],{"class":93,"line":1620},[91,39512,38027],{"class":101},[91,39514,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539],{"class":93,"line":1625},[91,39516,38072],{"class":101},[91,39518,30849],{"class":5195},[91,39520,147],{"class":97},[91,39522,179],{"class":150},[91,39524,480],{"class":101},[91,39526,30904],{"class":5195},[91,39528,147],{"class":97},[91,39530,179],{"class":150},[91,39532,480],{"class":101},[91,39534,30858],{"class":5195},[91,39536,147],{"class":97},[91,39538,293],{"class":150},[91,39540,108],{"class":101},[91,39542,39543],{"class":93,"line":1631},[91,39544,38101],{"class":101},[91,39546,39547],{"class":93,"line":1652},[91,39548,38106],{"class":160},[91,39550,39551,39553,39555,39557],{"class":93,"line":1657},[91,39552,30820],{"class":150},[91,39554,38113],{"class":101},[91,39556,147],{"class":97},[91,39558,37984],{"class":101},[91,39560,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593],{"class":93,"line":1671},[91,39562,37989],{"class":101},[91,39564,30831],{"class":5195},[91,39566,147],{"class":97},[91,39568,305],{"class":150},[91,39570,480],{"class":101},[91,39572,30840],{"class":5195},[91,39574,147],{"class":97},[91,39576,32045],{"class":150},[91,39578,480],{"class":101},[91,39580,30849],{"class":5195},[91,39582,147],{"class":97},[91,39584,173],{"class":150},[91,39586,480],{"class":101},[91,39588,30858],{"class":5195},[91,39590,147],{"class":97},[91,39592,319],{"class":150},[91,39594,38022],{"class":101},[91,39596,39597],{"class":93,"line":1676},[91,39598,38027],{"class":101},[91,39600,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633],{"class":93,"line":1705},[91,39602,37989],{"class":101},[91,39604,30831],{"class":5195},[91,39606,147],{"class":97},[91,39608,32045],{"class":150},[91,39610,480],{"class":101},[91,39612,30840],{"class":5195},[91,39614,147],{"class":97},[91,39616,32045],{"class":150},[91,39618,480],{"class":101},[91,39620,30849],{"class":5195},[91,39622,147],{"class":97},[91,39624,173],{"class":150},[91,39626,480],{"class":101},[91,39628,30858],{"class":5195},[91,39630,147],{"class":97},[91,39632,319],{"class":150},[91,39634,38022],{"class":101},[91,39636,39637],{"class":93,"line":1710},[91,39638,38027],{"class":101},[91,39640,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665],{"class":93,"line":1727},[91,39642,38072],{"class":101},[91,39644,30849],{"class":5195},[91,39646,147],{"class":97},[91,39648,179],{"class":150},[91,39650,480],{"class":101},[91,39652,30904],{"class":5195},[91,39654,147],{"class":97},[91,39656,179],{"class":150},[91,39658,480],{"class":101},[91,39660,30858],{"class":5195},[91,39662,147],{"class":97},[91,39664,293],{"class":150},[91,39666,108],{"class":101},[91,39668,39669],{"class":93,"line":1732},[91,39670,38101],{"class":101},[91,39672,39673],{"class":93,"line":1737},[91,39674,38234],{"class":160},[91,39676,39677,39679,39681,39683],{"class":93,"line":1742},[91,39678,30820],{"class":150},[91,39680,38241],{"class":101},[91,39682,147],{"class":97},[91,39684,37984],{"class":101},[91,39686,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719],{"class":93,"line":1756},[91,39688,37989],{"class":101},[91,39690,30831],{"class":5195},[91,39692,147],{"class":97},[91,39694,32045],{"class":150},[91,39696,480],{"class":101},[91,39698,30840],{"class":5195},[91,39700,147],{"class":97},[91,39702,34845],{"class":150},[91,39704,480],{"class":101},[91,39706,30849],{"class":5195},[91,39708,147],{"class":97},[91,39710,173],{"class":150},[91,39712,480],{"class":101},[91,39714,30858],{"class":5195},[91,39716,147],{"class":97},[91,39718,319],{"class":150},[91,39720,38022],{"class":101},[91,39722,39723],{"class":93,"line":1761},[91,39724,38027],{"class":101},[91,39726,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759],{"class":93,"line":2555},[91,39728,37989],{"class":101},[91,39730,30831],{"class":5195},[91,39732,147],{"class":97},[91,39734,34845],{"class":150},[91,39736,480],{"class":101},[91,39738,30840],{"class":5195},[91,39740,147],{"class":97},[91,39742,34845],{"class":150},[91,39744,480],{"class":101},[91,39746,30849],{"class":5195},[91,39748,147],{"class":97},[91,39750,173],{"class":150},[91,39752,480],{"class":101},[91,39754,30858],{"class":5195},[91,39756,147],{"class":97},[91,39758,319],{"class":150},[91,39760,38022],{"class":101},[91,39762,39763],{"class":93,"line":2569},[91,39764,38027],{"class":101},[91,39766,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799],{"class":93,"line":2577},[91,39768,37989],{"class":101},[91,39770,30831],{"class":5195},[91,39772,147],{"class":97},[91,39774,34845],{"class":150},[91,39776,480],{"class":101},[91,39778,30840],{"class":5195},[91,39780,147],{"class":97},[91,39782,34845],{"class":150},[91,39784,480],{"class":101},[91,39786,30849],{"class":5195},[91,39788,147],{"class":97},[91,39790,173],{"class":150},[91,39792,480],{"class":101},[91,39794,30858],{"class":5195},[91,39796,147],{"class":97},[91,39798,319],{"class":150},[91,39800,38022],{"class":101},[91,39802,39803],{"class":93,"line":2582},[91,39804,38027],{"class":101},[91,39806,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831],{"class":93,"line":2588},[91,39808,38072],{"class":101},[91,39810,30849],{"class":5195},[91,39812,147],{"class":97},[91,39814,179],{"class":150},[91,39816,480],{"class":101},[91,39818,30904],{"class":5195},[91,39820,147],{"class":97},[91,39822,179],{"class":150},[91,39824,480],{"class":101},[91,39826,30858],{"class":5195},[91,39828,147],{"class":97},[91,39830,293],{"class":150},[91,39832,108],{"class":101},[91,39834,39835],{"class":93,"line":2594},[91,39836,38101],{"class":101},[91,39838,39839],{"class":93,"line":2599},[91,39840,38402],{"class":160},[91,39842,39843,39845,39847,39849],{"class":93,"line":7927},[91,39844,30820],{"class":150},[91,39846,38409],{"class":101},[91,39848,147],{"class":97},[91,39850,37984],{"class":101},[91,39852,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885],{"class":93,"line":7951},[91,39854,37989],{"class":101},[91,39856,30831],{"class":5195},[91,39858,147],{"class":97},[91,39860,34845],{"class":150},[91,39862,480],{"class":101},[91,39864,30840],{"class":5195},[91,39866,147],{"class":97},[91,39868,38432],{"class":150},[91,39870,480],{"class":101},[91,39872,30849],{"class":5195},[91,39874,147],{"class":97},[91,39876,173],{"class":150},[91,39878,480],{"class":101},[91,39880,30858],{"class":5195},[91,39882,147],{"class":97},[91,39884,319],{"class":150},[91,39886,38022],{"class":101},[91,39888,39889],{"class":93,"line":7956},[91,39890,38027],{"class":101},[91,39892,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925],{"class":93,"line":7962},[91,39894,37989],{"class":101},[91,39896,30831],{"class":5195},[91,39898,147],{"class":97},[91,39900,38432],{"class":150},[91,39902,480],{"class":101},[91,39904,30840],{"class":5195},[91,39906,147],{"class":97},[91,39908,38432],{"class":150},[91,39910,480],{"class":101},[91,39912,30849],{"class":5195},[91,39914,147],{"class":97},[91,39916,173],{"class":150},[91,39918,480],{"class":101},[91,39920,30858],{"class":5195},[91,39922,147],{"class":97},[91,39924,319],{"class":150},[91,39926,38022],{"class":101},[91,39928,39929],{"class":93,"line":7989},[91,39930,38027],{"class":101},[91,39932,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965],{"class":93,"line":7994},[91,39934,37989],{"class":101},[91,39936,30831],{"class":5195},[91,39938,147],{"class":97},[91,39940,38432],{"class":150},[91,39942,480],{"class":101},[91,39944,30840],{"class":5195},[91,39946,147],{"class":97},[91,39948,38432],{"class":150},[91,39950,480],{"class":101},[91,39952,30849],{"class":5195},[91,39954,147],{"class":97},[91,39956,173],{"class":150},[91,39958,480],{"class":101},[91,39960,30858],{"class":5195},[91,39962,147],{"class":97},[91,39964,319],{"class":150},[91,39966,38022],{"class":101},[91,39968,39969],{"class":93,"line":8000},[91,39970,38027],{"class":101},[91,39972,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997],{"class":93,"line":8012},[91,39974,38072],{"class":101},[91,39976,30849],{"class":5195},[91,39978,147],{"class":97},[91,39980,179],{"class":150},[91,39982,480],{"class":101},[91,39984,30904],{"class":5195},[91,39986,147],{"class":97},[91,39988,179],{"class":150},[91,39990,480],{"class":101},[91,39992,30858],{"class":5195},[91,39994,147],{"class":97},[91,39996,293],{"class":150},[91,39998,108],{"class":101},[91,40000,40001],{"class":93,"line":8024},[91,40002,38101],{"class":101},[91,40004,40005],{"class":93,"line":8036},[91,40006,38571],{"class":160},[91,40008,40009,40011,40013,40015],{"class":93,"line":9695},[91,40010,30820],{"class":150},[91,40012,38578],{"class":101},[91,40014,147],{"class":97},[91,40016,37984],{"class":101},[91,40018,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051],{"class":93,"line":9720},[91,40020,37989],{"class":101},[91,40022,30831],{"class":5195},[91,40024,147],{"class":97},[91,40026,38432],{"class":150},[91,40028,480],{"class":101},[91,40030,30840],{"class":5195},[91,40032,147],{"class":97},[91,40034,38432],{"class":150},[91,40036,480],{"class":101},[91,40038,30849],{"class":5195},[91,40040,147],{"class":97},[91,40042,173],{"class":150},[91,40044,480],{"class":101},[91,40046,30858],{"class":5195},[91,40048,147],{"class":97},[91,40050,319],{"class":150},[91,40052,38022],{"class":101},[91,40054,40055],{"class":93,"line":9743},[91,40056,38027],{"class":101},[91,40058,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":93,"line":9767},[91,40060,37989],{"class":101},[91,40062,30831],{"class":5195},[91,40064,147],{"class":97},[91,40066,38432],{"class":150},[91,40068,480],{"class":101},[91,40070,30840],{"class":5195},[91,40072,147],{"class":97},[91,40074,38432],{"class":150},[91,40076,480],{"class":101},[91,40078,30849],{"class":5195},[91,40080,147],{"class":97},[91,40082,173],{"class":150},[91,40084,480],{"class":101},[91,40086,30858],{"class":5195},[91,40088,147],{"class":97},[91,40090,319],{"class":150},[91,40092,38022],{"class":101},[91,40094,40095],{"class":93,"line":9772},[91,40096,38027],{"class":101},[91,40098,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131],{"class":93,"line":9777},[91,40100,37989],{"class":101},[91,40102,30831],{"class":5195},[91,40104,147],{"class":97},[91,40106,38432],{"class":150},[91,40108,480],{"class":101},[91,40110,30840],{"class":5195},[91,40112,147],{"class":97},[91,40114,38432],{"class":150},[91,40116,480],{"class":101},[91,40118,30849],{"class":5195},[91,40120,147],{"class":97},[91,40122,173],{"class":150},[91,40124,480],{"class":101},[91,40126,30858],{"class":5195},[91,40128,147],{"class":97},[91,40130,319],{"class":150},[91,40132,38022],{"class":101},[91,40134,40135],{"class":93,"line":9782},[91,40136,38027],{"class":101},[91,40138,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163],{"class":93,"line":9791},[91,40140,38072],{"class":101},[91,40142,30849],{"class":5195},[91,40144,147],{"class":97},[91,40146,179],{"class":150},[91,40148,480],{"class":101},[91,40150,30904],{"class":5195},[91,40152,147],{"class":97},[91,40154,179],{"class":150},[91,40156,480],{"class":101},[91,40158,30858],{"class":5195},[91,40160,147],{"class":97},[91,40162,293],{"class":150},[91,40164,108],{"class":101},[91,40166,40167],{"class":93,"line":9796},[91,40168,38101],{"class":101},[91,40170,40171],{"class":93,"line":9802},[91,40172,38739],{"class":160},[91,40174,40175,40177,40179,40181],{"class":93,"line":9823},[91,40176,30820],{"class":150},[91,40178,38746],{"class":101},[91,40180,147],{"class":97},[91,40182,37984],{"class":101},[91,40184,40185],{"class":93,"line":9829},[91,40186,38755],{"class":160},[91,40188,40189],{"class":93,"line":9843},[91,40190,38760],{"class":160},[91,40192,40193],{"class":93,"line":9849},[91,40194,38765],{"class":101},[91,40196,40197,40199,40201,40203,40205,40207,40209,40211,40213],{"class":93,"line":9876},[91,40198,38770],{"class":101},[91,40200,471],{"class":150},[91,40202,557],{"class":97},[91,40204,471],{"class":150},[91,40206,557],{"class":97},[91,40208,38432],{"class":150},[91,40210,480],{"class":101},[91,40212,34845],{"class":150},[91,40214,38022],{"class":101},[91,40216,40217],{"class":93,"line":9885},[91,40218,38027],{"class":101},[91,40220,40221,40223,40225,40227,40229],{"class":93,"line":9891},[91,40222,38770],{"class":101},[91,40224,34845],{"class":150},[91,40226,480],{"class":101},[91,40228,32045],{"class":150},[91,40230,38022],{"class":101},[91,40232,40233],{"class":93,"line":9899},[91,40234,38027],{"class":101},[91,40236,40237,40239,40241,40243,40245],{"class":93,"line":9904},[91,40238,38770],{"class":101},[91,40240,32045],{"class":150},[91,40242,480],{"class":101},[91,40244,548],{"class":150},[91,40246,108],{"class":101},[91,40248,40249],{"class":93,"line":16583},[91,40250,38101],{"class":101},[91,40252,40253],{"class":93,"line":16589},[91,40254,2378],{"emptyLinePlaceholder":17},[91,40256,40257],{"class":93,"line":16612},[91,40258,38831],{"class":160},[91,40260,40261],{"class":93,"line":16618},[91,40262,38836],{"class":160},[91,40264,40265,40267,40269,40271,40273],{"class":93,"line":16641},[91,40266,3381],{"class":97},[91,40268,38843],{"class":101},[91,40270,26018],{"class":97},[91,40272,38848],{"class":150},[91,40274,38851],{"class":101},[91,40276,40277],{"class":93,"line":16655},[91,40278,38856],{"class":160},[91,40280,40281,40283,40285],{"class":93,"line":16675},[91,40282,4620],{"class":97},[91,40284,38863],{"class":150},[91,40286,38866],{"class":101},[91,40288,40289],{"class":93,"line":16681},[91,40290,38871],{"class":160},[91,40292,40293,40295,40297,40299,40301],{"class":93,"line":16692},[91,40294,38876],{"class":101},[91,40296,38879],{"class":5195},[91,40298,147],{"class":97},[91,40300,38884],{"class":206},[91,40302,108],{"class":101},[91,40304,40305],{"class":93,"line":16715},[91,40306,38891],{"class":160},[91,40308,40309,40311,40313,40315,40317,40319],{"class":93,"line":16737},[91,40310,38896],{"class":97},[91,40312,38899],{"class":101},[91,40314,38902],{"class":97},[91,40316,38905],{"class":97},[91,40318,38908],{"class":150},[91,40320,3717],{"class":101},[91,40322,40323],{"class":93,"line":16742},[91,40324,38915],{"class":160},[91,40326,40327,40329,40331],{"class":93,"line":16748},[91,40328,38920],{"class":101},[91,40330,293],{"class":150},[91,40332,108],{"class":101},[91,40334,40335],{"class":93,"line":16762},[91,40336,38929],{"class":160},[91,40338,40339,40341,40343],{"class":93,"line":16775},[91,40340,38934],{"class":97},[91,40342,38863],{"class":150},[91,40344,38939],{"class":101},[91,40346,40347],{"class":93,"line":16780},[91,40348,38944],{"class":160},[91,40350,40351],{"class":93,"line":16794},[91,40352,38949],{"class":160},[91,40354,40355,40357,40359,40361,40363],{"class":93,"line":16799},[91,40356,38954],{"class":101},[91,40358,293],{"class":150},[91,40360,480],{"class":101},[91,40362,38961],{"class":150},[91,40364,108],{"class":101},[91,40366,40367],{"class":93,"line":16805},[91,40368,38968],{"class":160},[91,40370,40371,40373,40375,40377,40379,40381],{"class":93,"line":16810},[91,40372,38896],{"class":97},[91,40374,38899],{"class":101},[91,40376,38902],{"class":97},[91,40378,38905],{"class":97},[91,40380,38908],{"class":150},[91,40382,3717],{"class":101},[91,40384,40385,40387,40389],{"class":93,"line":16824},[91,40386,38920],{"class":101},[91,40388,293],{"class":150},[91,40390,108],{"class":101},[91,40392,40393],{"class":93,"line":16829},[91,40394,2378],{"emptyLinePlaceholder":17},[91,40396,40397],{"class":93,"line":16834},[91,40398,35140],{"class":160},[91,40400,40401,40403,40405],{"class":93,"line":16848},[91,40402,30776],{"class":97},[91,40404,31068],{"class":1941},[91,40406,31071],{"class":101},[91,40408,40409,40411,40413,40415],{"class":93,"line":16860},[91,40410,31076],{"class":101},[91,40412,147],{"class":97},[91,40414,30798],{"class":150},[91,40416,39017],{"class":101},[91,40418,40419,40421,40423,40425],{"class":93,"line":16865},[91,40420,31076],{"class":101},[91,40422,147],{"class":97},[91,40424,30798],{"class":150},[91,40426,39028],{"class":101},[91,40428,40429,40431,40433,40435],{"class":93,"line":16878},[91,40430,31076],{"class":101},[91,40432,147],{"class":97},[91,40434,30798],{"class":150},[91,40436,39039],{"class":101},[91,40438,40439,40441,40443,40445],{"class":93,"line":16883},[91,40440,31076],{"class":101},[91,40442,147],{"class":97},[91,40444,30798],{"class":150},[91,40446,39050],{"class":101},[91,40448,40449,40451,40453,40455],{"class":93,"line":16888},[91,40450,31076],{"class":101},[91,40452,147],{"class":97},[91,40454,30798],{"class":150},[91,40456,39061],{"class":101},[91,40458,40459,40461,40463,40465],{"class":93,"line":16893},[91,40460,31076],{"class":101},[91,40462,147],{"class":97},[91,40464,30798],{"class":150},[91,40466,39072],{"class":101},[91,40468,40469,40471],{"class":93,"line":16906},[91,40470,14731],{"class":97},[91,40472,31184],{"class":101},[91,40474,40475],{"class":93,"line":16911},[91,40476,2378],{"emptyLinePlaceholder":17},[91,40478,40479],{"class":93,"line":32608},[91,40480,39087],{"class":160},[91,40482,40483,40485,40487,40489,40491],{"class":93,"line":32614},[91,40484,1509],{"class":97},[91,40486,31195],{"class":150},[91,40488,2927],{"class":97},[91,40490,39098],{"class":206},[91,40492,3717],{"class":101},[91,40494,40495,40497,40499,40501,40503,40505,40507,40509,40511],{"class":93,"line":32620},[91,40496,31212],{"class":101},[91,40498,147],{"class":97},[91,40500,30426],{"class":101},[91,40502,31219],{"class":206},[91,40504,1682],{"class":97},[91,40506,31224],{"class":101},[91,40508,1679],{"class":97},[91,40510,30451],{"class":206},[91,40512,108],{"class":101},[91,40514,40515,40517],{"class":93,"line":32626},[91,40516,31274],{"class":150},[91,40518,30460],{"class":101},[91,40520,40521,40523,40525],{"class":93,"line":32632},[91,40522,31264],{"class":101},[91,40524,147],{"class":97},[91,40526,39135],{"class":101},[91,40528,40529,40531,40533,40535,40537,40539,40541,40543],{"class":93,"line":32643},[91,40530,31274],{"class":150},[91,40532,31277],{"class":101},[91,40534,319],{"class":150},[91,40536,480],{"class":101},[91,40538,31476],{"class":150},[91,40540,480],{"class":101},[91,40542,31476],{"class":150},[91,40544,31290],{"class":101},[46,40546,40547],{"start":1157},[49,40548,40549],{},"测试代码",[83,40551,40553],{"className":30353,"code":40552,"language":30355,"meta":10,"style":10},"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",[88,40554,40555,40561,40571,40581,40585,40595,40606,40610,40614,40618,40626,40642,40652,40668,40678,40692,40696,40706,40716,40726,40732,40736,40740,40748,40752,40768,40776,40780,40784,40792,40800,40804,40808,40812,40816,40822,40826,40836,40844,40852,40856,40860,40864,40872,40876,40892,40896,40900,40904,40916,40920,40932,40936,40940,40952,40956,40966,40970,40974,40986,40990,40999,41003,41007,41015,41019,41027,41031,41035,41039,41043,41047,41063,41071,41075,41079,41127,41133,41137,41147,41155,41163,41167,41171,41175,41179,41187,41191,41207,41211,41219,41227],{"__ignoreMap":10},[91,40556,40557,40559],{"class":93,"line":94},[91,40558,30367],{"class":97},[91,40560,30370],{"class":101},[91,40562,40563,40565,40567,40569],{"class":93,"line":11},[91,40564,30367],{"class":97},[91,40566,31390],{"class":101},[91,40568,31358],{"class":97},[91,40570,31395],{"class":101},[91,40572,40573,40575,40577,40579],{"class":93,"line":1157},[91,40574,30712],{"class":97},[91,40576,31373],{"class":101},[91,40578,30367],{"class":97},[91,40580,31378],{"class":101},[91,40582,40583],{"class":93,"line":1172},[91,40584,33897],{"class":160},[91,40586,40587,40589,40591,40593],{"class":93,"line":1178},[91,40588,30712],{"class":97},[91,40590,31343],{"class":101},[91,40592,30367],{"class":97},[91,40594,31348],{"class":101},[91,40596,40597,40599,40601,40603],{"class":93,"line":1192},[91,40598,30712],{"class":97},[91,40600,31889],{"class":101},[91,40602,30367],{"class":97},[91,40604,40605],{"class":150}," VGG16\n",[91,40607,40608],{"class":93,"line":1198},[91,40609,2378],{"emptyLinePlaceholder":17},[91,40611,40612],{"class":93,"line":1289},[91,40613,2378],{"emptyLinePlaceholder":17},[91,40615,40616],{"class":93,"line":1295},[91,40617,33926],{"class":160},[91,40619,40620,40622,40624],{"class":93,"line":1307},[91,40621,31922],{"class":97},[91,40623,33933],{"class":1941},[91,40625,31928],{"class":101},[91,40627,40628,40630,40632,40634,40636,40638,40640],{"class":93,"line":1590},[91,40629,33940],{"class":101},[91,40631,147],{"class":97},[91,40633,31430],{"class":101},[91,40635,31433],{"class":5195},[91,40637,147],{"class":97},[91,40639,31438],{"class":206},[91,40641,31441],{"class":101},[91,40643,40644,40646,40648,40650],{"class":93,"line":1595},[91,40645,33957],{"class":5195},[91,40647,147],{"class":97},[91,40649,33962],{"class":150},[91,40651,31441],{"class":101},[91,40653,40654,40656,40658,40660,40662,40664,40666],{"class":93,"line":1601},[91,40655,33969],{"class":5195},[91,40657,147],{"class":97},[91,40659,31468],{"class":101},[91,40661,31471],{"class":5195},[91,40663,147],{"class":97},[91,40665,31476],{"class":150},[91,40667,31479],{"class":101},[91,40669,40670,40672,40674,40676],{"class":93,"line":1606},[91,40671,33986],{"class":5195},[91,40673,147],{"class":97},[91,40675,31451],{"class":150},[91,40677,108],{"class":101},[91,40679,40680,40682,40684,40686,40688,40690],{"class":93,"line":1620},[91,40681,33997],{"class":101},[91,40683,147],{"class":97},[91,40685,31509],{"class":101},[91,40687,31512],{"class":5195},[91,40689,147],{"class":97},[91,40691,34008],{"class":101},[91,40693,40694],{"class":93,"line":1625},[91,40695,34013],{"class":160},[91,40697,40698,40700,40702,40704],{"class":93,"line":1631},[91,40699,34018],{"class":5195},[91,40701,147],{"class":97},[91,40703,319],{"class":150},[91,40705,31441],{"class":101},[91,40707,40708,40710,40712,40714],{"class":93,"line":1652},[91,40709,34029],{"class":5195},[91,40711,147],{"class":97},[91,40713,31451],{"class":150},[91,40715,31441],{"class":101},[91,40717,40718,40720,40722,40724],{"class":93,"line":1657},[91,40719,34040],{"class":5195},[91,40721,147],{"class":97},[91,40723,293],{"class":150},[91,40725,108],{"class":101},[91,40727,40728,40730],{"class":93,"line":1671},[91,40729,4068],{"class":97},[91,40731,34053],{"class":101},[91,40733,40734],{"class":93,"line":1676},[91,40735,2378],{"emptyLinePlaceholder":17},[91,40737,40738],{"class":93,"line":1705},[91,40739,34062],{"class":160},[91,40741,40742,40744,40746],{"class":93,"line":1710},[91,40743,31922],{"class":97},[91,40745,34069],{"class":1941},[91,40747,34072],{"class":101},[91,40749,40750],{"class":93,"line":1727},[91,40751,34077],{"class":160},[91,40753,40754,40756,40758,40760,40762,40764,40766],{"class":93,"line":1732},[91,40755,31212],{"class":101},[91,40757,147],{"class":97},[91,40759,31219],{"class":206},[91,40761,1682],{"class":97},[91,40763,31224],{"class":101},[91,40765,1679],{"class":97},[91,40767,34094],{"class":206},[91,40769,40770,40772,40774],{"class":93,"line":1737},[91,40771,31264],{"class":101},[91,40773,147],{"class":97},[91,40775,32264],{"class":101},[91,40777,40778],{"class":93,"line":1742},[91,40779,2378],{"emptyLinePlaceholder":17},[91,40781,40782],{"class":93,"line":1756},[91,40783,34111],{"class":160},[91,40785,40786,40788,40790],{"class":93,"line":1761},[91,40787,34116],{"class":101},[91,40789,147],{"class":97},[91,40791,32317],{"class":150},[91,40793,40794,40796,40798],{"class":93,"line":2555},[91,40795,34125],{"class":101},[91,40797,147],{"class":97},[91,40799,3063],{"class":150},[91,40801,40802],{"class":93,"line":2569},[91,40803,2378],{"emptyLinePlaceholder":17},[91,40805,40806],{"class":93,"line":2577},[91,40807,34138],{"class":160},[91,40809,40810],{"class":93,"line":2582},[91,40811,34143],{"class":160},[91,40813,40814],{"class":93,"line":2588},[91,40815,34148],{"class":160},[91,40817,40818,40820],{"class":93,"line":2594},[91,40819,34153],{"class":97},[91,40821,32859],{"class":101},[91,40823,40824],{"class":93,"line":2599},[91,40825,34160],{"class":160},[91,40827,40828,40830,40832,40834],{"class":93,"line":7927},[91,40829,3381],{"class":97},[91,40831,34167],{"class":101},[91,40833,26018],{"class":97},[91,40835,34172],{"class":101},[91,40837,40838,40840,40842],{"class":93,"line":7951},[91,40839,34177],{"class":101},[91,40841,147],{"class":97},[91,40843,34182],{"class":101},[91,40845,40846,40848,40850],{"class":93,"line":7956},[91,40847,34187],{"class":101},[91,40849,147],{"class":97},[91,40851,34192],{"class":101},[91,40853,40854],{"class":93,"line":7962},[91,40855,34197],{"class":160},[91,40857,40858],{"class":93,"line":7989},[91,40859,32850],{"class":101},[91,40861,40862],{"class":93,"line":7994},[91,40863,34206],{"class":160},[91,40865,40866,40868,40870],{"class":93,"line":8000},[91,40867,32635],{"class":101},[91,40869,147],{"class":97},[91,40871,34215],{"class":101},[91,40873,40874],{"class":93,"line":8012},[91,40875,34220],{"class":160},[91,40877,40878,40880,40882,40884,40886,40888,40890],{"class":93,"line":8024},[91,40879,32652],{"class":101},[91,40881,147],{"class":97},[91,40883,32657],{"class":101},[91,40885,32660],{"class":5195},[91,40887,147],{"class":97},[91,40889,319],{"class":150},[91,40891,108],{"class":101},[91,40893,40894],{"class":93,"line":8036},[91,40895,34241],{"class":160},[91,40897,40898],{"class":93,"line":9695},[91,40899,34246],{"class":160},[91,40901,40902],{"class":93,"line":9720},[91,40903,34251],{"class":160},[91,40905,40906,40908,40910,40912,40914],{"class":93,"line":9743},[91,40907,34256],{"class":101},[91,40909,9456],{"class":97},[91,40911,32762],{"class":101},[91,40913,2927],{"class":97},[91,40915,34265],{"class":101},[91,40917,40918],{"class":93,"line":9767},[91,40919,34270],{"class":160},[91,40921,40922,40924,40926,40928,40930],{"class":93,"line":9772},[91,40923,34275],{"class":101},[91,40925,9456],{"class":97},[91,40927,34280],{"class":101},[91,40929,293],{"class":150},[91,40931,108],{"class":101},[91,40933,40934],{"class":93,"line":9777},[91,40935,2378],{"emptyLinePlaceholder":17},[91,40937,40938],{"class":93,"line":9782},[91,40939,34293],{"class":160},[91,40941,40942,40944,40946,40948,40950],{"class":93,"line":9791},[91,40943,34298],{"class":101},[91,40945,147],{"class":97},[91,40947,34303],{"class":101},[91,40949,686],{"class":97},[91,40951,34308],{"class":101},[91,40953,40954],{"class":93,"line":9796},[91,40955,34313],{"class":160},[91,40957,40958,40960,40962,40964],{"class":93,"line":9802},[91,40959,32426],{"class":150},[91,40961,102],{"class":101},[91,40963,34322],{"class":206},[91,40965,34325],{"class":101},[91,40967,40968],{"class":93,"line":9823},[91,40969,2378],{"emptyLinePlaceholder":17},[91,40971,40972],{"class":93,"line":9829},[91,40973,34334],{"class":160},[91,40975,40976,40978,40980,40982,40984],{"class":93,"line":9843},[91,40977,1509],{"class":97},[91,40979,31195],{"class":150},[91,40981,2927],{"class":97},[91,40983,31200],{"class":206},[91,40985,3717],{"class":101},[91,40987,40988],{"class":93,"line":9849},[91,40989,34351],{"class":160},[91,40991,40992,40994,40996],{"class":93,"line":9876},[91,40993,31264],{"class":101},[91,40995,147],{"class":97},[91,40997,40998],{"class":101},"VGG16()\n",[91,41000,41001],{"class":93,"line":9885},[91,41002,34364],{"class":160},[91,41004,41005],{"class":93,"line":9891},[91,41006,34369],{"class":160},[91,41008,41009,41011,41013],{"class":93,"line":9899},[91,41010,34374],{"class":101},[91,41012,34377],{"class":206},[91,41014,30472],{"class":101},[91,41016,41017],{"class":93,"line":9904},[91,41018,34384],{"class":160},[91,41020,41021,41023,41025],{"class":93,"line":16583},[91,41022,33997],{"class":101},[91,41024,147],{"class":97},[91,41026,34393],{"class":101},[91,41028,41029],{"class":93,"line":16589},[91,41030,34398],{"class":160},[91,41032,41033],{"class":93,"line":16612},[91,41034,34403],{"class":101},[91,41036,41037],{"class":93,"line":16618},[91,41038,2378],{"emptyLinePlaceholder":17},[91,41040,41041],{"class":93,"line":16641},[91,41042,34412],{"class":160},[91,41044,41045],{"class":93,"line":16655},[91,41046,34417],{"class":160},[91,41048,41049,41051,41053,41055,41057,41059,41061],{"class":93,"line":16675},[91,41050,31212],{"class":101},[91,41052,147],{"class":97},[91,41054,31219],{"class":206},[91,41056,1682],{"class":97},[91,41058,31224],{"class":101},[91,41060,1679],{"class":97},[91,41062,34094],{"class":206},[91,41064,41065,41067,41069],{"class":93,"line":16681},[91,41066,31264],{"class":101},[91,41068,147],{"class":97},[91,41070,32264],{"class":101},[91,41072,41073],{"class":93,"line":16692},[91,41074,34446],{"class":160},[91,41076,41077],{"class":93,"line":16715},[91,41078,34451],{"class":160},[91,41080,41081,41083,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125],{"class":93,"line":16737},[91,41082,34456],{"class":101},[91,41084,147],{"class":97},[91,41086,992],{"class":101},[91,41088,34463],{"class":206},[91,41090,480],{"class":101},[91,41092,34468],{"class":206},[91,41094,480],{"class":101},[91,41096,34473],{"class":206},[91,41098,480],{"class":101},[91,41100,34478],{"class":206},[91,41102,480],{"class":101},[91,41104,34483],{"class":206},[91,41106,480],{"class":101},[91,41108,34488],{"class":206},[91,41110,480],{"class":101},[91,41112,34493],{"class":206},[91,41114,480],{"class":101},[91,41116,34498],{"class":206},[91,41118,480],{"class":101},[91,41120,34503],{"class":206},[91,41122,480],{"class":101},[91,41124,34508],{"class":206},[91,41126,33221],{"class":101},[91,41128,41129,41131],{"class":93,"line":16742},[91,41130,34153],{"class":97},[91,41132,32859],{"class":101},[91,41134,41135],{"class":93,"line":16748},[91,41136,34521],{"class":160},[91,41138,41139,41141,41143,41145],{"class":93,"line":16762},[91,41140,3381],{"class":97},[91,41142,34528],{"class":101},[91,41144,26018],{"class":97},[91,41146,34172],{"class":101},[91,41148,41149,41151,41153],{"class":93,"line":16775},[91,41150,32585],{"class":101},[91,41152,147],{"class":97},[91,41154,32590],{"class":101},[91,41156,41157,41159,41161],{"class":93,"line":16780},[91,41158,32600],{"class":101},[91,41160,147],{"class":97},[91,41162,32605],{"class":101},[91,41164,41165],{"class":93,"line":16794},[91,41166,2378],{"emptyLinePlaceholder":17},[91,41168,41169],{"class":93,"line":16799},[91,41170,34557],{"class":160},[91,41172,41173],{"class":93,"line":16805},[91,41174,32850],{"class":101},[91,41176,41177],{"class":93,"line":16810},[91,41178,34566],{"class":160},[91,41180,41181,41183,41185],{"class":93,"line":16824},[91,41182,32635],{"class":101},[91,41184,147],{"class":97},[91,41186,32640],{"class":101},[91,41188,41189],{"class":93,"line":16829},[91,41190,34579],{"class":160},[91,41192,41193,41195,41197,41199,41201,41203,41205],{"class":93,"line":16834},[91,41194,32652],{"class":101},[91,41196,147],{"class":97},[91,41198,32657],{"class":101},[91,41200,32660],{"class":5195},[91,41202,147],{"class":97},[91,41204,319],{"class":150},[91,41206,108],{"class":101},[91,41208,41209],{"class":93,"line":16848},[91,41210,34600],{"class":160},[91,41212,41213,41215,41217],{"class":93,"line":16860},[91,41214,34605],{"class":101},[91,41216,147],{"class":97},[91,41218,34610],{"class":101},[91,41220,41221,41223,41225],{"class":93,"line":16865},[91,41222,34615],{"class":101},[91,41224,147],{"class":97},[91,41226,34620],{"class":101},[91,41228,41229,41231,41233,41235,41237,41239,41241,41243],{"class":93,"line":16878},[91,41230,34625],{"class":150},[91,41232,102],{"class":101},[91,41234,34630],{"class":206},[91,41236,34633],{"class":101},[91,41238,34636],{"class":206},[91,41240,480],{"class":101},[91,41242,34641],{"class":206},[91,41244,34644],{"class":101},[63,41246,41248],{"id":41247},"_23googlenet","2.3.GoogLeNet",[21977,41250,41252],{"id":41251},"_231原理","2.3.1.原理",[46,41254,41255],{},[49,41256,41257],{},"网络结构",[38,41259,41260],{},[1440,41261],{"alt":10,"src":41262},"\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",[38,41264,41265],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[38,41267,41268],{},[1440,41269],{"alt":10,"src":41270},"\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",[38,41272,41273],{},[1440,41274],{"alt":10,"src":41275},"\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",[38,41277,41278],{},[1440,41279],{"alt":10,"src":41280},"\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",[46,41282,41283],{"start":11},[49,41284,41285],{},"1x1卷积的优点",[38,41287,41288],{},[1440,41289],{"alt":10,"src":41290},"\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",[46,41292,41293],{"start":1157},[49,41294,41295],{},"全局平均池化层优点",[38,41297,41298],{},[1440,41299],{"alt":10,"src":41300},"\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",[38,41302,41303],{},[1440,41304],{"alt":10,"src":41305},"\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",[46,41307,41308],{"start":1172},[49,41309,41310],{},"参数详细描述",[38,41312,41313],{},[1440,41314],{"alt":10,"src":41315},"\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",[38,41317,41318],{},[1440,41319],{"alt":10,"src":41320},"\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",[38,41322,41323],{},[1440,41324],{"alt":10,"src":41325},"\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",[38,41327,41328],{},[1440,41329],{"alt":10,"src":41330},"\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",[38,41332,41333],{},[1440,41334],{"alt":10,"src":41335},"\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",[38,41337,41338],{},[1440,41339],{"alt":10,"src":41340},"\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",[38,41342,41343],{},[1440,41344],{"alt":10,"src":41345},"\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",[38,41347,41348],{},[1440,41349],{"alt":10,"src":41350},"\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",[38,41352,41353],{},[1440,41354],{"alt":10,"src":41355},"\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",[38,41357,41358],{},[1440,41359],{"alt":10,"src":41360},"\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",[38,41362,41363],{},[1440,41364],{"alt":10,"src":41365},"\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",[38,41367,41368],{},[1440,41369],{"alt":10,"src":41370},"\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",[38,41372,41373],{},[1440,41374],{"alt":10,"src":41375},"\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",[38,41377,41378],{},[1440,41379],{"alt":10,"src":41380},"\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",[38,41382,41383],{},[1440,41384],{"alt":10,"src":41385},"\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",[38,41387,41388],{},[1440,41389],{"alt":10,"src":41390},"\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",[38,41392,41393],{},[1440,41394],{"alt":10,"src":41395},"\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",[38,41397,41398],{},[1440,41399],{"alt":10,"src":41400},"\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",[38,41402,41403],{},[1440,41404],{"alt":10,"src":41405},"\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",[38,41407,41408],{},[1440,41409],{"alt":10,"src":41410},"\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",[38,41412,41413],{},[1440,41414],{"alt":10,"src":41415},"\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",[21977,41417,41419],{"id":41418},"_232代码实现","2.3.2.代码实现",[46,41421,41422],{},[49,41423,30686],{},[38,41425,41426],{},"根据原理一步一步搭建即可",[83,41428,41430],{"className":30353,"code":41429,"language":30355,"meta":10,"style":10},"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",[88,41431,41432,41438,41448,41458,41462,41479,41488,41503,41513,41518,41551,41556,41593,41640,41645,41681,41728,41733,41738,41773,41805,41809,41817,41833,41857,41882,41903,41908,41923,41927,41931,41936,41953,41958,41967,41982,41993,42037,42041,42069,42073,42084,42112,42116,42153,42157,42185,42189,42200,42236,42268,42296,42300,42311,42345,42377,42409,42442,42476,42504,42508,42519,42552,42584,42598,42602,42615,42619,42624,42636,42644,42666,42671,42676,42681,42686,42691,42696,42710,42718,42727,42740,42755,42764,42768,42776,42787,42798,42809,42820,42831,42837,42841,42846,42858,42878,42887],{"__ignoreMap":10},[91,41433,41434,41436],{"class":93,"line":94},[91,41435,30367],{"class":97},[91,41437,30370],{"class":101},[91,41439,41440,41442,41444,41446],{"class":93,"line":11},[91,41441,30712],{"class":97},[91,41443,30715],{"class":101},[91,41445,30367],{"class":97},[91,41447,30720],{"class":101},[91,41449,41450,41452,41454,41456],{"class":93,"line":1157},[91,41451,30712],{"class":97},[91,41453,30732],{"class":101},[91,41455,30367],{"class":97},[91,41457,30737],{"class":101},[91,41459,41460],{"class":93,"line":1172},[91,41461,2378],{"emptyLinePlaceholder":17},[91,41463,41464,41466,41469,41471,41473,41475,41477],{"class":93,"line":1178},[91,41465,14673],{"class":97},[91,41467,41468],{"class":1941}," Inception",[91,41470,102],{"class":101},[91,41472,30753],{"class":1941},[91,41474,660],{"class":101},[91,41476,30758],{"class":1941},[91,41478,30761],{"class":101},[91,41480,41481,41483,41485],{"class":93,"line":1192},[91,41482,30776],{"class":97},[91,41484,30779],{"class":150},[91,41486,41487],{"class":101},"(self,in_channels,c1,c2,c3,c4):\n",[91,41489,41490,41492,41495,41497,41499,41501],{"class":93,"line":1198},[91,41491,30792],{"class":150},[91,41493,41494],{"class":101},"(Inception,",[91,41496,30798],{"class":150},[91,41498,30801],{"class":101},[91,41500,30804],{"class":150},[91,41502,1954],{"class":101},[91,41504,41505,41507,41509,41511],{"class":93,"line":1289},[91,41506,30820],{"class":150},[91,41508,34746],{"class":101},[91,41510,147],{"class":97},[91,41512,34751],{"class":101},[91,41514,41515],{"class":93,"line":1295},[91,41516,41517],{"class":160},"        # 路线1：定义1*1卷积\n",[91,41519,41520,41522,41525,41527,41529,41531,41533,41536,41538,41540,41543,41545,41547,41549],{"class":93,"line":1307},[91,41521,30820],{"class":150},[91,41523,41524],{"class":101},".p1_1",[91,41526,147],{"class":97},[91,41528,30828],{"class":101},[91,41530,30831],{"class":5195},[91,41532,147],{"class":97},[91,41534,41535],{"class":101},"in_channels,",[91,41537,30840],{"class":5195},[91,41539,147],{"class":97},[91,41541,41542],{"class":101},"c1,",[91,41544,30849],{"class":5195},[91,41546,147],{"class":97},[91,41548,319],{"class":150},[91,41550,108],{"class":101},[91,41552,41553],{"class":93,"line":1590},[91,41554,41555],{"class":160},"        # 路线2：定义1*1卷积和3*3\n",[91,41557,41558,41560,41563,41565,41567,41569,41571,41573,41575,41577,41580,41582,41585,41587,41589,41591],{"class":93,"line":1595},[91,41559,30820],{"class":150},[91,41561,41562],{"class":101},".p2_1",[91,41564,147],{"class":97},[91,41566,30828],{"class":101},[91,41568,30831],{"class":5195},[91,41570,147],{"class":97},[91,41572,41535],{"class":101},[91,41574,30840],{"class":5195},[91,41576,147],{"class":97},[91,41578,41579],{"class":101},"c2[",[91,41581,293],{"class":150},[91,41583,41584],{"class":101},"],",[91,41586,30849],{"class":5195},[91,41588,147],{"class":97},[91,41590,319],{"class":150},[91,41592,108],{"class":101},[91,41594,41595,41597,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638],{"class":93,"line":1601},[91,41596,30820],{"class":150},[91,41598,41599],{"class":101},".p2_2",[91,41601,147],{"class":97},[91,41603,30828],{"class":101},[91,41605,30831],{"class":5195},[91,41607,147],{"class":97},[91,41609,41579],{"class":101},[91,41611,293],{"class":150},[91,41613,41584],{"class":101},[91,41615,30840],{"class":5195},[91,41617,147],{"class":97},[91,41619,41579],{"class":101},[91,41621,319],{"class":150},[91,41623,41584],{"class":101},[91,41625,30849],{"class":5195},[91,41627,147],{"class":97},[91,41629,173],{"class":150},[91,41631,480],{"class":101},[91,41633,30858],{"class":5195},[91,41635,147],{"class":97},[91,41637,319],{"class":150},[91,41639,108],{"class":101},[91,41641,41642],{"class":93,"line":1606},[91,41643,41644],{"class":160},"        # 路线3：定义1*1卷积和5*5\n",[91,41646,41647,41649,41652,41654,41656,41658,41660,41662,41664,41666,41669,41671,41673,41675,41677,41679],{"class":93,"line":1620},[91,41648,30820],{"class":150},[91,41650,41651],{"class":101},".p3_1",[91,41653,147],{"class":97},[91,41655,30828],{"class":101},[91,41657,30831],{"class":5195},[91,41659,147],{"class":97},[91,41661,41535],{"class":101},[91,41663,30840],{"class":5195},[91,41665,147],{"class":97},[91,41667,41668],{"class":101},"c3[",[91,41670,293],{"class":150},[91,41672,41584],{"class":101},[91,41674,30849],{"class":5195},[91,41676,147],{"class":97},[91,41678,319],{"class":150},[91,41680,108],{"class":101},[91,41682,41683,41685,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726],{"class":93,"line":1625},[91,41684,30820],{"class":150},[91,41686,41687],{"class":101},".p3_2",[91,41689,147],{"class":97},[91,41691,30828],{"class":101},[91,41693,30831],{"class":5195},[91,41695,147],{"class":97},[91,41697,41668],{"class":101},[91,41699,293],{"class":150},[91,41701,41584],{"class":101},[91,41703,30840],{"class":5195},[91,41705,147],{"class":97},[91,41707,41668],{"class":101},[91,41709,319],{"class":150},[91,41711,41584],{"class":101},[91,41713,30849],{"class":5195},[91,41715,147],{"class":97},[91,41717,421],{"class":150},[91,41719,480],{"class":101},[91,41721,30858],{"class":5195},[91,41723,147],{"class":97},[91,41725,179],{"class":150},[91,41727,108],{"class":101},[91,41729,41730],{"class":93,"line":1631},[91,41731,41732],{"class":160},"        # 路线4：定义3*3最大池化和1*1卷积\n",[91,41734,41735],{"class":93,"line":1652},[91,41736,41737],{"class":160},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[91,41739,41740,41742,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771],{"class":93,"line":1657},[91,41741,30820],{"class":150},[91,41743,41744],{"class":101},".p4_1",[91,41746,147],{"class":97},[91,41748,34804],{"class":101},[91,41750,30849],{"class":5195},[91,41752,147],{"class":97},[91,41754,173],{"class":150},[91,41756,480],{"class":101},[91,41758,30904],{"class":5195},[91,41760,147],{"class":97},[91,41762,319],{"class":150},[91,41764,480],{"class":101},[91,41766,30858],{"class":5195},[91,41768,147],{"class":97},[91,41770,319],{"class":150},[91,41772,108],{"class":101},[91,41774,41775,41777,41780,41782,41784,41786,41788,41790,41792,41794,41797,41799,41801,41803],{"class":93,"line":1671},[91,41776,30820],{"class":150},[91,41778,41779],{"class":101},".p4_2",[91,41781,147],{"class":97},[91,41783,30828],{"class":101},[91,41785,30831],{"class":5195},[91,41787,147],{"class":97},[91,41789,41535],{"class":101},[91,41791,30840],{"class":5195},[91,41793,147],{"class":97},[91,41795,41796],{"class":101},"c4,",[91,41798,30849],{"class":5195},[91,41800,147],{"class":97},[91,41802,319],{"class":150},[91,41804,108],{"class":101},[91,41806,41807],{"class":93,"line":1676},[91,41808,2378],{"emptyLinePlaceholder":17},[91,41810,41811,41813,41815],{"class":93,"line":1705},[91,41812,30776],{"class":97},[91,41814,31068],{"class":1941},[91,41816,31071],{"class":101},[91,41818,41819,41822,41824,41826,41828,41830],{"class":93,"line":1710},[91,41820,41821],{"class":101},"        p1",[91,41823,147],{"class":97},[91,41825,30798],{"class":150},[91,41827,35159],{"class":101},[91,41829,30798],{"class":150},[91,41831,41832],{"class":101},".p1_1(x))\n",[91,41834,41835,41837,41839,41841,41843,41845,41848,41850,41852,41854],{"class":93,"line":1727},[91,41836,7064],{"class":101},[91,41838,147],{"class":97},[91,41840,30798],{"class":150},[91,41842,35159],{"class":101},[91,41844,30798],{"class":150},[91,41846,41847],{"class":101},".p2_2(",[91,41849,30798],{"class":150},[91,41851,35159],{"class":101},[91,41853,30798],{"class":150},[91,41855,41856],{"class":101},".p2_1(x))))\n",[91,41858,41859,41862,41864,41866,41868,41870,41873,41875,41877,41879],{"class":93,"line":1732},[91,41860,41861],{"class":101},"        p3",[91,41863,147],{"class":97},[91,41865,30798],{"class":150},[91,41867,35159],{"class":101},[91,41869,30798],{"class":150},[91,41871,41872],{"class":101},".p3_2(",[91,41874,30798],{"class":150},[91,41876,35159],{"class":101},[91,41878,30798],{"class":150},[91,41880,41881],{"class":101},".p3_1(x))))\n",[91,41883,41884,41887,41889,41891,41893,41895,41898,41900],{"class":93,"line":1737},[91,41885,41886],{"class":101},"        p4",[91,41888,147],{"class":97},[91,41890,30798],{"class":150},[91,41892,35159],{"class":101},[91,41894,30798],{"class":150},[91,41896,41897],{"class":101},".p4_2(",[91,41899,30798],{"class":150},[91,41901,41902],{"class":101},".p4_1(x)))\n",[91,41904,41905],{"class":93,"line":1742},[91,41906,41907],{"class":160},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[91,41909,41910,41912,41915,41917,41919,41921],{"class":93,"line":1756},[91,41911,14731],{"class":97},[91,41913,41914],{"class":101}," torch.cat((p1,p2,p3,p4),",[91,41916,32660],{"class":5195},[91,41918,147],{"class":97},[91,41920,319],{"class":150},[91,41922,108],{"class":101},[91,41924,41925],{"class":93,"line":1761},[91,41926,2378],{"emptyLinePlaceholder":17},[91,41928,41929],{"class":93,"line":2555},[91,41930,2378],{"emptyLinePlaceholder":17},[91,41932,41933],{"class":93,"line":2569},[91,41934,41935],{"class":160},"# 搭建GoogLeNet网络\n",[91,41937,41938,41940,41943,41945,41947,41949,41951],{"class":93,"line":2577},[91,41939,14673],{"class":97},[91,41941,41942],{"class":1941}," GoogLeNet",[91,41944,102],{"class":101},[91,41946,30753],{"class":1941},[91,41948,660],{"class":101},[91,41950,30758],{"class":1941},[91,41952,30761],{"class":101},[91,41954,41955],{"class":93,"line":2582},[91,41956,41957],{"class":160},"    # 必须把Inception导入到里边\n",[91,41959,41960,41962,41964],{"class":93,"line":2588},[91,41961,30776],{"class":97},[91,41963,30779],{"class":150},[91,41965,41966],{"class":101},"(self,Inception):\n",[91,41968,41969,41971,41974,41976,41978,41980],{"class":93,"line":2594},[91,41970,30792],{"class":150},[91,41972,41973],{"class":101},"(GoogLeNet,",[91,41975,30798],{"class":150},[91,41977,30801],{"class":101},[91,41979,30804],{"class":150},[91,41981,1954],{"class":101},[91,41983,41984,41986,41989,41991],{"class":93,"line":2599},[91,41985,30820],{"class":150},[91,41987,41988],{"class":101},".b1",[91,41990,147],{"class":97},[91,41992,37984],{"class":101},[91,41994,41995,41997,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035],{"class":93,"line":7927},[91,41996,37989],{"class":101},[91,41998,30831],{"class":5195},[91,42000,147],{"class":97},[91,42002,319],{"class":150},[91,42004,480],{"class":101},[91,42006,30840],{"class":5195},[91,42008,147],{"class":97},[91,42010,305],{"class":150},[91,42012,480],{"class":101},[91,42014,30849],{"class":5195},[91,42016,147],{"class":97},[91,42018,471],{"class":150},[91,42020,480],{"class":101},[91,42022,30904],{"class":5195},[91,42024,147],{"class":97},[91,42026,179],{"class":150},[91,42028,480],{"class":101},[91,42030,30858],{"class":5195},[91,42032,147],{"class":97},[91,42034,173],{"class":150},[91,42036,38022],{"class":101},[91,42038,42039],{"class":93,"line":7951},[91,42040,38027],{"class":101},[91,42042,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067],{"class":93,"line":7956},[91,42044,38072],{"class":101},[91,42046,30849],{"class":5195},[91,42048,147],{"class":97},[91,42050,173],{"class":150},[91,42052,480],{"class":101},[91,42054,30904],{"class":5195},[91,42056,147],{"class":97},[91,42058,179],{"class":150},[91,42060,480],{"class":101},[91,42062,30858],{"class":5195},[91,42064,147],{"class":97},[91,42066,319],{"class":150},[91,42068,108],{"class":101},[91,42070,42071],{"class":93,"line":7962},[91,42072,38101],{"class":101},[91,42074,42075,42077,42080,42082],{"class":93,"line":7989},[91,42076,30820],{"class":150},[91,42078,42079],{"class":101},".b2",[91,42081,147],{"class":97},[91,42083,37984],{"class":101},[91,42085,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110],{"class":93,"line":7994},[91,42087,37989],{"class":101},[91,42089,30831],{"class":5195},[91,42091,147],{"class":97},[91,42093,305],{"class":150},[91,42095,480],{"class":101},[91,42097,30840],{"class":5195},[91,42099,147],{"class":97},[91,42101,305],{"class":150},[91,42103,480],{"class":101},[91,42105,30849],{"class":5195},[91,42107,147],{"class":97},[91,42109,319],{"class":150},[91,42111,38022],{"class":101},[91,42113,42114],{"class":93,"line":8000},[91,42115,38027],{"class":101},[91,42117,42118,42120,42122,42124,42126,42128,42130,42132,42135,42137,42139,42141,42143,42145,42147,42149,42151],{"class":93,"line":8012},[91,42119,37989],{"class":101},[91,42121,30831],{"class":5195},[91,42123,147],{"class":97},[91,42125,305],{"class":150},[91,42127,480],{"class":101},[91,42129,30840],{"class":5195},[91,42131,147],{"class":97},[91,42133,42134],{"class":150},"192",[91,42136,480],{"class":101},[91,42138,30849],{"class":5195},[91,42140,147],{"class":97},[91,42142,173],{"class":150},[91,42144,480],{"class":101},[91,42146,30858],{"class":5195},[91,42148,147],{"class":97},[91,42150,319],{"class":150},[91,42152,38022],{"class":101},[91,42154,42155],{"class":93,"line":8024},[91,42156,38027],{"class":101},[91,42158,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183],{"class":93,"line":8036},[91,42160,38072],{"class":101},[91,42162,30849],{"class":5195},[91,42164,147],{"class":97},[91,42166,173],{"class":150},[91,42168,480],{"class":101},[91,42170,30904],{"class":5195},[91,42172,147],{"class":97},[91,42174,179],{"class":150},[91,42176,480],{"class":101},[91,42178,30858],{"class":5195},[91,42180,147],{"class":97},[91,42182,319],{"class":150},[91,42184,108],{"class":101},[91,42186,42187],{"class":93,"line":9695},[91,42188,38101],{"class":101},[91,42190,42191,42193,42196,42198],{"class":93,"line":9720},[91,42192,30820],{"class":150},[91,42194,42195],{"class":101},".b3",[91,42197,147],{"class":97},[91,42199,37984],{"class":101},[91,42201,42202,42205,42207,42209,42211,42214,42216,42218,42220,42223,42225,42227,42229,42232,42234],{"class":93,"line":9743},[91,42203,42204],{"class":101},"            Inception(",[91,42206,42134],{"class":150},[91,42208,480],{"class":101},[91,42210,305],{"class":150},[91,42212,42213],{"class":101},",(",[91,42215,311],{"class":150},[91,42217,480],{"class":101},[91,42219,32045],{"class":150},[91,42221,42222],{"class":101},"),(",[91,42224,703],{"class":150},[91,42226,480],{"class":101},[91,42228,299],{"class":150},[91,42230,42231],{"class":101},"),",[91,42233,299],{"class":150},[91,42235,38022],{"class":101},[91,42237,42238,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266],{"class":93,"line":9767},[91,42239,42204],{"class":101},[91,42241,34845],{"class":150},[91,42243,480],{"class":101},[91,42245,32045],{"class":150},[91,42247,42213],{"class":101},[91,42249,32045],{"class":150},[91,42251,480],{"class":101},[91,42253,42134],{"class":150},[91,42255,42222],{"class":101},[91,42257,299],{"class":150},[91,42259,480],{"class":101},[91,42261,311],{"class":150},[91,42263,42231],{"class":101},[91,42265,305],{"class":150},[91,42267,38022],{"class":101},[91,42269,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294],{"class":93,"line":9772},[91,42271,38072],{"class":101},[91,42273,30849],{"class":5195},[91,42275,147],{"class":97},[91,42277,173],{"class":150},[91,42279,480],{"class":101},[91,42281,30904],{"class":5195},[91,42283,147],{"class":97},[91,42285,179],{"class":150},[91,42287,480],{"class":101},[91,42289,30858],{"class":5195},[91,42291,147],{"class":97},[91,42293,319],{"class":150},[91,42295,108],{"class":101},[91,42297,42298],{"class":93,"line":9777},[91,42299,38101],{"class":101},[91,42301,42302,42304,42307,42309],{"class":93,"line":9782},[91,42303,30820],{"class":150},[91,42305,42306],{"class":101},".b4",[91,42308,147],{"class":97},[91,42310,37984],{"class":101},[91,42312,42313,42315,42318,42320,42322,42324,42326,42328,42331,42333,42335,42337,42339,42341,42343],{"class":93,"line":9791},[91,42314,42204],{"class":101},[91,42316,42317],{"class":150},"480",[91,42319,480],{"class":101},[91,42321,42134],{"class":150},[91,42323,42213],{"class":101},[91,42325,311],{"class":150},[91,42327,480],{"class":101},[91,42329,42330],{"class":150},"208",[91,42332,42222],{"class":101},[91,42334,703],{"class":150},[91,42336,480],{"class":101},[91,42338,709],{"class":150},[91,42340,42231],{"class":101},[91,42342,305],{"class":150},[91,42344,38022],{"class":101},[91,42346,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375],{"class":93,"line":9796},[91,42348,42204],{"class":101},[91,42350,38432],{"class":150},[91,42352,480],{"class":101},[91,42354,21027],{"class":150},[91,42356,42213],{"class":101},[91,42358,720],{"class":150},[91,42360,480],{"class":101},[91,42362,31476],{"class":150},[91,42364,42222],{"class":101},[91,42366,902],{"class":150},[91,42368,480],{"class":101},[91,42370,305],{"class":150},[91,42372,42231],{"class":101},[91,42374,305],{"class":150},[91,42376,38022],{"class":101},[91,42378,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407],{"class":93,"line":9802},[91,42380,42204],{"class":101},[91,42382,38432],{"class":150},[91,42384,480],{"class":101},[91,42386,32045],{"class":150},[91,42388,42213],{"class":101},[91,42390,32045],{"class":150},[91,42392,480],{"class":101},[91,42394,34845],{"class":150},[91,42396,42222],{"class":101},[91,42398,902],{"class":150},[91,42400,480],{"class":101},[91,42402,305],{"class":150},[91,42404,42231],{"class":101},[91,42406,305],{"class":150},[91,42408,38022],{"class":101},[91,42410,42411,42413,42415,42417,42419,42421,42423,42425,42428,42430,42432,42434,42436,42438,42440],{"class":93,"line":9823},[91,42412,42204],{"class":101},[91,42414,38432],{"class":150},[91,42416,480],{"class":101},[91,42418,720],{"class":150},[91,42420,42213],{"class":101},[91,42422,32045],{"class":150},[91,42424,480],{"class":101},[91,42426,42427],{"class":150},"288",[91,42429,42222],{"class":101},[91,42431,299],{"class":150},[91,42433,480],{"class":101},[91,42435,305],{"class":150},[91,42437,42231],{"class":101},[91,42439,305],{"class":150},[91,42441,38022],{"class":101},[91,42443,42444,42446,42449,42451,42453,42455,42457,42459,42462,42464,42466,42468,42470,42472,42474],{"class":93,"line":9829},[91,42445,42204],{"class":101},[91,42447,42448],{"class":150},"528",[91,42450,480],{"class":101},[91,42452,34845],{"class":150},[91,42454,42213],{"class":101},[91,42456,21027],{"class":150},[91,42458,480],{"class":101},[91,42460,42461],{"class":150},"320",[91,42463,42222],{"class":101},[91,42465,299],{"class":150},[91,42467,480],{"class":101},[91,42469,32045],{"class":150},[91,42471,42231],{"class":101},[91,42473,32045],{"class":150},[91,42475,38022],{"class":101},[91,42477,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502],{"class":93,"line":9843},[91,42479,38072],{"class":101},[91,42481,30849],{"class":5195},[91,42483,147],{"class":97},[91,42485,173],{"class":150},[91,42487,480],{"class":101},[91,42489,30904],{"class":5195},[91,42491,147],{"class":97},[91,42493,179],{"class":150},[91,42495,480],{"class":101},[91,42497,30858],{"class":5195},[91,42499,147],{"class":97},[91,42501,319],{"class":150},[91,42503,108],{"class":101},[91,42505,42506],{"class":93,"line":9849},[91,42507,38101],{"class":101},[91,42509,42510,42512,42515,42517],{"class":93,"line":9876},[91,42511,30820],{"class":150},[91,42513,42514],{"class":101},".b5",[91,42516,147],{"class":97},[91,42518,37984],{"class":101},[91,42520,42521,42523,42526,42528,42530,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550],{"class":93,"line":9885},[91,42522,42204],{"class":101},[91,42524,42525],{"class":150},"832",[91,42527,480],{"class":101},[91,42529,34845],{"class":150},[91,42531,42213],{"class":101},[91,42533,21027],{"class":150},[91,42535,480],{"class":101},[91,42537,42461],{"class":150},[91,42539,42222],{"class":101},[91,42541,299],{"class":150},[91,42543,480],{"class":101},[91,42545,32045],{"class":150},[91,42547,42231],{"class":101},[91,42549,32045],{"class":150},[91,42551,38022],{"class":101},[91,42553,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582],{"class":93,"line":9891},[91,42555,42204],{"class":101},[91,42557,42525],{"class":150},[91,42559,480],{"class":101},[91,42561,34915],{"class":150},[91,42563,42213],{"class":101},[91,42565,42134],{"class":150},[91,42567,480],{"class":101},[91,42569,34915],{"class":150},[91,42571,42222],{"class":101},[91,42573,709],{"class":150},[91,42575,480],{"class":101},[91,42577,32045],{"class":150},[91,42579,42231],{"class":101},[91,42581,32045],{"class":150},[91,42583,38022],{"class":101},[91,42585,42586,42589,42591,42593,42595],{"class":93,"line":9899},[91,42587,42588],{"class":101},"            nn.AdaptiveAvgPool2d((",[91,42590,319],{"class":150},[91,42592,480],{"class":101},[91,42594,319],{"class":150},[91,42596,42597],{"class":101},")),\n",[91,42599,42600],{"class":93,"line":9904},[91,42601,38765],{"class":101},[91,42603,42604,42606,42609,42611,42613],{"class":93,"line":16583},[91,42605,38770],{"class":101},[91,42607,42608],{"class":150},"1024",[91,42610,480],{"class":101},[91,42612,548],{"class":150},[91,42614,108],{"class":101},[91,42616,42617],{"class":93,"line":16589},[91,42618,38101],{"class":101},[91,42620,42621],{"class":93,"line":16612},[91,42622,42623],{"class":160},"        # 对模型参数初始化\n",[91,42625,42626,42628,42630,42632,42634],{"class":93,"line":16618},[91,42627,3381],{"class":97},[91,42629,38843],{"class":101},[91,42631,26018],{"class":97},[91,42633,38848],{"class":150},[91,42635,38851],{"class":101},[91,42637,42638,42640,42642],{"class":93,"line":16641},[91,42639,4620],{"class":97},[91,42641,38863],{"class":150},[91,42643,38866],{"class":101},[91,42645,42646,42648,42651,42653,42656,42658,42660,42662,42664],{"class":93,"line":16655},[91,42647,38876],{"class":101},[91,42649,42650],{"class":5195},"mode",[91,42652,147],{"class":97},[91,42654,42655],{"class":206},"'fan_out'",[91,42657,480],{"class":101},[91,42659,38879],{"class":5195},[91,42661,147],{"class":97},[91,42663,38884],{"class":206},[91,42665,108],{"class":101},[91,42667,42668],{"class":93,"line":16675},[91,42669,42670],{"class":160},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[91,42672,42673],{"class":93,"line":16681},[91,42674,42675],{"class":160},"                # ② mode = 'fan_out'决定使用的fan值：\n",[91,42677,42678],{"class":93,"line":16692},[91,42679,42680],{"class":160},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[91,42682,42683],{"class":93,"line":16715},[91,42684,42685],{"class":160},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[91,42687,42688],{"class":93,"line":16737},[91,42689,42690],{"class":160},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[91,42692,42693],{"class":93,"line":16742},[91,42694,42695],{"class":160},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[91,42697,42698,42700,42702,42704,42706,42708],{"class":93,"line":16748},[91,42699,38896],{"class":97},[91,42701,38899],{"class":101},[91,42703,38902],{"class":97},[91,42705,38905],{"class":97},[91,42707,38908],{"class":150},[91,42709,3717],{"class":101},[91,42711,42712,42714,42716],{"class":93,"line":16762},[91,42713,38920],{"class":101},[91,42715,293],{"class":150},[91,42717,108],{"class":101},[91,42719,42720,42723,42725],{"class":93,"line":16775},[91,42721,42722],{"class":97},"                elif",[91,42724,38863],{"class":150},[91,42726,38939],{"class":101},[91,42728,42729,42732,42734,42736,42738],{"class":93,"line":16780},[91,42730,42731],{"class":101},"                    nn.init.normal_(m.weight,",[91,42733,293],{"class":150},[91,42735,480],{"class":101},[91,42737,38961],{"class":150},[91,42739,108],{"class":101},[91,42741,42742,42745,42747,42749,42751,42753],{"class":93,"line":16794},[91,42743,42744],{"class":97},"                    if",[91,42746,38899],{"class":101},[91,42748,38902],{"class":97},[91,42750,38905],{"class":97},[91,42752,38908],{"class":150},[91,42754,3717],{"class":101},[91,42756,42757,42760,42762],{"class":93,"line":16799},[91,42758,42759],{"class":101},"                        nn.init.constant_(m.bias,",[91,42761,293],{"class":150},[91,42763,108],{"class":101},[91,42765,42766],{"class":93,"line":16805},[91,42767,35140],{"class":160},[91,42769,42770,42772,42774],{"class":93,"line":16810},[91,42771,30776],{"class":97},[91,42773,31068],{"class":1941},[91,42775,31071],{"class":101},[91,42777,42778,42780,42782,42784],{"class":93,"line":16824},[91,42779,31076],{"class":101},[91,42781,147],{"class":97},[91,42783,30798],{"class":150},[91,42785,42786],{"class":101},".b1(x)\n",[91,42788,42789,42791,42793,42795],{"class":93,"line":16829},[91,42790,31076],{"class":101},[91,42792,147],{"class":97},[91,42794,30798],{"class":150},[91,42796,42797],{"class":101},".b2(x)\n",[91,42799,42800,42802,42804,42806],{"class":93,"line":16834},[91,42801,31076],{"class":101},[91,42803,147],{"class":97},[91,42805,30798],{"class":150},[91,42807,42808],{"class":101},".b3(x)\n",[91,42810,42811,42813,42815,42817],{"class":93,"line":16848},[91,42812,31076],{"class":101},[91,42814,147],{"class":97},[91,42816,30798],{"class":150},[91,42818,42819],{"class":101},".b4(x)\n",[91,42821,42822,42824,42826,42828],{"class":93,"line":16860},[91,42823,31076],{"class":101},[91,42825,147],{"class":97},[91,42827,30798],{"class":150},[91,42829,42830],{"class":101},".b5(x)\n",[91,42832,42833,42835],{"class":93,"line":16865},[91,42834,14731],{"class":97},[91,42836,31184],{"class":101},[91,42838,42839],{"class":93,"line":16878},[91,42840,2378],{"emptyLinePlaceholder":17},[91,42842,42843],{"class":93,"line":16883},[91,42844,42845],{"class":160},"# 模型展示\n",[91,42847,42848,42850,42852,42854,42856],{"class":93,"line":16888},[91,42849,1509],{"class":97},[91,42851,31195],{"class":150},[91,42853,2927],{"class":97},[91,42855,31200],{"class":206},[91,42857,3717],{"class":101},[91,42859,42860,42862,42864,42866,42868,42870,42872,42874,42876],{"class":93,"line":16893},[91,42861,31212],{"class":101},[91,42863,147],{"class":97},[91,42865,30426],{"class":101},[91,42867,31219],{"class":206},[91,42869,1682],{"class":97},[91,42871,31224],{"class":101},[91,42873,1679],{"class":97},[91,42875,30451],{"class":206},[91,42877,108],{"class":101},[91,42879,42880,42882,42884],{"class":93,"line":16906},[91,42881,31264],{"class":101},[91,42883,147],{"class":97},[91,42885,42886],{"class":101},"GoogLeNet(Inception).to(device)\n",[91,42888,42889,42891,42893,42895,42897,42899,42901,42903],{"class":93,"line":16911},[91,42890,31274],{"class":150},[91,42892,31277],{"class":101},[91,42894,319],{"class":150},[91,42896,480],{"class":101},[91,42898,31476],{"class":150},[91,42900,480],{"class":101},[91,42902,31476],{"class":150},[91,42904,31290],{"class":101},[46,42906,42907],{"start":11},[49,42908,39158],{},[83,42910,42912],{"className":30353,"code":42911,"language":30355,"meta":10,"style":10},"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",[88,42913,42914,42920,42926,42936,42942,42952,42962,42972,42982,42992,42996,43007,43017,43021,43025,43029,43037,43049,43059,43075,43085,43117,43131,43141,43151,43155,43165,43179,43189,43199,43209,43215,43219,43223,43227,43231,43235,43243,43263,43267,43271,43275,43279,43283,43299,43303,43307,43315,43319,43323,43331,43335,43339,43343,43351,43355,43359,43363,43367,43375,43379,43387,43391,43399,43403,43411,43415,43423,43427,43431,43439,43443,43447,43451,43463,43487,43501,43505,43509,43513,43521,43525,43533,43537,43545,43549,43557,43561,43569,43573,43581,43585,43597,43601,43609,43613,43621,43625,43629,43633,43637,43645,43649,43665,43669,43677,43681,43685,43689,43693,43697,43701,43705,43721,43725,43737,43741,43753,43757,43769,43773,43781,43785,43793,43797,43801,43805,43811,43815,43823,43827,43843,43847,43855,43859,43875,43887,43891,43903,43907,43911,43919,43923,43927,43935,43939,43947,43951,43959,43963,43967,44009,44051,44055,44059,44075,44079,44095,44099,44103,44111,44115,44119,44131,44169,44173,44177,44185,44189,44203,44213,44219,44225,44231,44237,44241,44245,44251,44255,44259,44267,44271,44289,44293,44297,44301,44317,44321,44325,44329,44333,44337,44357,44377,44381,44385,44389,44397,44405,44409,44425,44445,44465,44469,44473,44481,44489,44493,44497,44501,44513,44517,44527,44535,44552],{"__ignoreMap":10},[91,42915,42916,42918],{"class":93,"line":94},[91,42917,30367],{"class":97},[91,42919,31797],{"class":101},[91,42921,42922,42924],{"class":93,"line":11},[91,42923,30367],{"class":97},[91,42925,31804],{"class":101},[91,42927,42928,42930,42932,42934],{"class":93,"line":1157},[91,42929,30367],{"class":97},[91,42931,31815],{"class":101},[91,42933,31358],{"class":97},[91,42935,31820],{"class":101},[91,42937,42938,42940],{"class":93,"line":1172},[91,42939,30367],{"class":97},[91,42941,30370],{"class":101},[91,42943,42944,42946,42948,42950],{"class":93,"line":1178},[91,42945,30712],{"class":97},[91,42947,31390],{"class":101},[91,42949,30367],{"class":97},[91,42951,31837],{"class":101},[91,42953,42954,42956,42958,42960],{"class":93,"line":1192},[91,42955,30712],{"class":97},[91,42957,31343],{"class":101},[91,42959,30367],{"class":97},[91,42961,31348],{"class":101},[91,42963,42964,42966,42968,42970],{"class":93,"line":1198},[91,42965,30712],{"class":97},[91,42967,31373],{"class":101},[91,42969,30367],{"class":97},[91,42971,31378],{"class":101},[91,42973,42974,42976,42978,42980],{"class":93,"line":1289},[91,42975,30367],{"class":97},[91,42977,31390],{"class":101},[91,42979,31358],{"class":97},[91,42981,31395],{"class":101},[91,42983,42984,42986,42988,42990],{"class":93,"line":1295},[91,42985,30367],{"class":97},[91,42987,31407],{"class":101},[91,42989,31358],{"class":97},[91,42991,31412],{"class":101},[91,42993,42994],{"class":93,"line":1307},[91,42995,31882],{"class":160},[91,42997,42998,43000,43002,43004],{"class":93,"line":1590},[91,42999,30712],{"class":97},[91,43001,31889],{"class":101},[91,43003,30367],{"class":97},[91,43005,43006],{"class":101}," GoogLeNet, Inception\n",[91,43008,43009,43011,43013,43015],{"class":93,"line":1595},[91,43010,30712],{"class":97},[91,43012,30715],{"class":101},[91,43014,30367],{"class":97},[91,43016,30720],{"class":101},[91,43018,43019],{"class":93,"line":1601},[91,43020,2378],{"emptyLinePlaceholder":17},[91,43022,43023],{"class":93,"line":1606},[91,43024,2378],{"emptyLinePlaceholder":17},[91,43026,43027],{"class":93,"line":1620},[91,43028,31917],{"class":160},[91,43030,43031,43033,43035],{"class":93,"line":1625},[91,43032,31922],{"class":97},[91,43034,31925],{"class":1941},[91,43036,31928],{"class":101},[91,43038,43039,43041,43043,43045,43047],{"class":93,"line":1631},[91,43040,31933],{"class":101},[91,43042,147],{"class":97},[91,43044,31430],{"class":101},[91,43046,31438],{"class":206},[91,43048,31441],{"class":101},[91,43050,43051,43053,43055,43057],{"class":93,"line":1652},[91,43052,31946],{"class":5195},[91,43054,147],{"class":97},[91,43056,31451],{"class":150},[91,43058,31441],{"class":101},[91,43060,43061,43063,43065,43067,43069,43071,43073],{"class":93,"line":1657},[91,43062,31957],{"class":5195},[91,43064,147],{"class":97},[91,43066,31468],{"class":101},[91,43068,31471],{"class":5195},[91,43070,147],{"class":97},[91,43072,35424],{"class":150},[91,43074,31479],{"class":101},[91,43076,43077,43079,43081,43083],{"class":93,"line":1671},[91,43078,31974],{"class":5195},[91,43080,147],{"class":97},[91,43082,31451],{"class":150},[91,43084,108],{"class":101},[91,43086,43087,43089,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115],{"class":93,"line":1676},[91,43088,31985],{"class":101},[91,43090,147],{"class":97},[91,43092,31990],{"class":101},[91,43094,31993],{"class":150},[91,43096,102],{"class":101},[91,43098,31998],{"class":150},[91,43100,557],{"class":97},[91,43102,7337],{"class":150},[91,43104,32005],{"class":101},[91,43106,31993],{"class":150},[91,43108,102],{"class":101},[91,43110,32012],{"class":150},[91,43112,557],{"class":97},[91,43114,7337],{"class":150},[91,43116,32019],{"class":101},[91,43118,43119,43121,43123,43125,43127,43129],{"class":93,"line":1705},[91,43120,32024],{"class":101},[91,43122,147],{"class":97},[91,43124,32029],{"class":101},[91,43126,31512],{"class":5195},[91,43128,147],{"class":97},[91,43130,31517],{"class":101},[91,43132,43133,43135,43137,43139],{"class":93,"line":1710},[91,43134,32040],{"class":5195},[91,43136,147],{"class":97},[91,43138,299],{"class":150},[91,43140,31441],{"class":101},[91,43142,43143,43145,43147,43149],{"class":93,"line":1727},[91,43144,32052],{"class":5195},[91,43146,147],{"class":97},[91,43148,31451],{"class":150},[91,43150,31441],{"class":101},[91,43152,43153],{"class":93,"line":1732},[91,43154,32063],{"class":160},[91,43156,43157,43159,43161,43163],{"class":93,"line":1737},[91,43158,32068],{"class":5195},[91,43160,147],{"class":97},[91,43162,497],{"class":150},[91,43164,108],{"class":101},[91,43166,43167,43169,43171,43173,43175,43177],{"class":93,"line":1742},[91,43168,32079],{"class":101},[91,43170,147],{"class":97},[91,43172,31509],{"class":101},[91,43174,31512],{"class":5195},[91,43176,147],{"class":97},[91,43178,32090],{"class":101},[91,43180,43181,43183,43185,43187],{"class":93,"line":1756},[91,43182,32095],{"class":5195},[91,43184,147],{"class":97},[91,43186,299],{"class":150},[91,43188,31441],{"class":101},[91,43190,43191,43193,43195,43197],{"class":93,"line":1761},[91,43192,32106],{"class":5195},[91,43194,147],{"class":97},[91,43196,31451],{"class":150},[91,43198,31441],{"class":101},[91,43200,43201,43203,43205,43207],{"class":93,"line":2555},[91,43202,32117],{"class":5195},[91,43204,147],{"class":97},[91,43206,497],{"class":150},[91,43208,108],{"class":101},[91,43210,43211,43213],{"class":93,"line":2569},[91,43212,4068],{"class":97},[91,43214,32130],{"class":101},[91,43216,43217],{"class":93,"line":2577},[91,43218,2378],{"emptyLinePlaceholder":17},[91,43220,43221],{"class":93,"line":2582},[91,43222,32139],{"class":160},[91,43224,43225],{"class":93,"line":2588},[91,43226,32144],{"class":160},[91,43228,43229],{"class":93,"line":2594},[91,43230,2378],{"emptyLinePlaceholder":17},[91,43232,43233],{"class":93,"line":2599},[91,43234,32153],{"class":160},[91,43236,43237,43239,43241],{"class":93,"line":7927},[91,43238,31922],{"class":97},[91,43240,32160],{"class":1941},[91,43242,32163],{"class":101},[91,43244,43245,43247,43249,43251,43253,43255,43257,43259,43261],{"class":93,"line":7951},[91,43246,31212],{"class":101},[91,43248,147],{"class":97},[91,43250,30426],{"class":101},[91,43252,31219],{"class":206},[91,43254,1682],{"class":97},[91,43256,31224],{"class":101},[91,43258,1679],{"class":97},[91,43260,32182],{"class":206},[91,43262,108],{"class":101},[91,43264,43265],{"class":93,"line":7956},[91,43266,2378],{"emptyLinePlaceholder":17},[91,43268,43269],{"class":93,"line":7962},[91,43270,2378],{"emptyLinePlaceholder":17},[91,43272,43273],{"class":93,"line":7989},[91,43274,32197],{"class":160},[91,43276,43277],{"class":93,"line":7994},[91,43278,32202],{"class":160},[91,43280,43281],{"class":93,"line":8000},[91,43282,32207],{"class":160},[91,43284,43285,43287,43289,43291,43293,43295,43297],{"class":93,"line":8012},[91,43286,32212],{"class":101},[91,43288,147],{"class":97},[91,43290,32217],{"class":101},[91,43292,32220],{"class":5195},[91,43294,147],{"class":97},[91,43296,32225],{"class":150},[91,43298,108],{"class":101},[91,43300,43301],{"class":93,"line":8024},[91,43302,2378],{"emptyLinePlaceholder":17},[91,43304,43305],{"class":93,"line":8036},[91,43306,32236],{"class":160},[91,43308,43309,43311,43313],{"class":93,"line":9695},[91,43310,32241],{"class":101},[91,43312,147],{"class":97},[91,43314,32246],{"class":101},[91,43316,43317],{"class":93,"line":9720},[91,43318,2378],{"emptyLinePlaceholder":17},[91,43320,43321],{"class":93,"line":9743},[91,43322,32255],{"class":160},[91,43324,43325,43327,43329],{"class":93,"line":9767},[91,43326,31264],{"class":101},[91,43328,147],{"class":97},[91,43330,32264],{"class":101},[91,43332,43333],{"class":93,"line":9772},[91,43334,32269],{"class":160},[91,43336,43337],{"class":93,"line":9777},[91,43338,32274],{"class":160},[91,43340,43341],{"class":93,"line":9782},[91,43342,32279],{"class":160},[91,43344,43345,43347,43349],{"class":93,"line":9791},[91,43346,32284],{"class":101},[91,43348,147],{"class":97},[91,43350,32289],{"class":101},[91,43352,43353],{"class":93,"line":9796},[91,43354,2378],{"emptyLinePlaceholder":17},[91,43356,43357],{"class":93,"line":9802},[91,43358,2378],{"emptyLinePlaceholder":17},[91,43360,43361],{"class":93,"line":9823},[91,43362,32302],{"class":160},[91,43364,43365],{"class":93,"line":9829},[91,43366,32307],{"class":160},[91,43368,43369,43371,43373],{"class":93,"line":9843},[91,43370,32312],{"class":101},[91,43372,147],{"class":97},[91,43374,32317],{"class":150},[91,43376,43377],{"class":93,"line":9849},[91,43378,32322],{"class":160},[91,43380,43381,43383,43385],{"class":93,"line":9876},[91,43382,32327],{"class":101},[91,43384,147],{"class":97},[91,43386,32332],{"class":101},[91,43388,43389],{"class":93,"line":9885},[91,43390,32337],{"class":160},[91,43392,43393,43395,43397],{"class":93,"line":9891},[91,43394,32342],{"class":101},[91,43396,147],{"class":97},[91,43398,32332],{"class":101},[91,43400,43401],{"class":93,"line":9899},[91,43402,32351],{"class":160},[91,43404,43405,43407,43409],{"class":93,"line":9904},[91,43406,32356],{"class":101},[91,43408,147],{"class":97},[91,43410,32332],{"class":101},[91,43412,43413],{"class":93,"line":16583},[91,43414,32365],{"class":160},[91,43416,43417,43419,43421],{"class":93,"line":16589},[91,43418,32370],{"class":101},[91,43420,147],{"class":97},[91,43422,32332],{"class":101},[91,43424,43425],{"class":93,"line":16612},[91,43426,2378],{"emptyLinePlaceholder":17},[91,43428,43429],{"class":93,"line":16618},[91,43430,32383],{"class":160},[91,43432,43433,43435,43437],{"class":93,"line":16641},[91,43434,32388],{"class":101},[91,43436,147],{"class":97},[91,43438,32393],{"class":101},[91,43440,43441],{"class":93,"line":16655},[91,43442,2378],{"emptyLinePlaceholder":17},[91,43444,43445],{"class":93,"line":16675},[91,43446,2378],{"emptyLinePlaceholder":17},[91,43448,43449],{"class":93,"line":16681},[91,43450,32406],{"class":160},[91,43452,43453,43455,43457,43459,43461],{"class":93,"line":16692},[91,43454,3179],{"class":97},[91,43456,32413],{"class":101},[91,43458,26018],{"class":97},[91,43460,32418],{"class":150},[91,43462,32421],{"class":101},[91,43464,43465,43467,43469,43471,43473,43475,43477,43479,43481,43483,43485],{"class":93,"line":16715},[91,43466,32426],{"class":150},[91,43468,102],{"class":101},[91,43470,32431],{"class":206},[91,43472,32434],{"class":150},[91,43474,686],{"class":206},[91,43476,32434],{"class":150},[91,43478,353],{"class":206},[91,43480,32443],{"class":101},[91,43482,634],{"class":97},[91,43484,319],{"class":150},[91,43486,30472],{"class":101},[91,43488,43489,43491,43493,43495,43497,43499],{"class":93,"line":16737},[91,43490,32426],{"class":150},[91,43492,102],{"class":101},[91,43494,32458],{"class":206},[91,43496,557],{"class":97},[91,43498,548],{"class":150},[91,43500,108],{"class":101},[91,43502,43503],{"class":93,"line":16742},[91,43504,2378],{"emptyLinePlaceholder":17},[91,43506,43507],{"class":93,"line":16748},[91,43508,32473],{"class":160},[91,43510,43511],{"class":93,"line":16762},[91,43512,32478],{"class":160},[91,43514,43515,43517,43519],{"class":93,"line":16775},[91,43516,32483],{"class":101},[91,43518,147],{"class":97},[91,43520,32317],{"class":150},[91,43522,43523],{"class":93,"line":16780},[91,43524,32492],{"class":160},[91,43526,43527,43529,43531],{"class":93,"line":16794},[91,43528,32497],{"class":101},[91,43530,147],{"class":97},[91,43532,3063],{"class":150},[91,43534,43535],{"class":93,"line":16799},[91,43536,32506],{"class":160},[91,43538,43539,43541,43543],{"class":93,"line":16805},[91,43540,32511],{"class":101},[91,43542,147],{"class":97},[91,43544,32317],{"class":150},[91,43546,43547],{"class":93,"line":16810},[91,43548,32520],{"class":160},[91,43550,43551,43553,43555],{"class":93,"line":16824},[91,43552,32525],{"class":101},[91,43554,147],{"class":97},[91,43556,3063],{"class":150},[91,43558,43559],{"class":93,"line":16829},[91,43560,32534],{"class":160},[91,43562,43563,43565,43567],{"class":93,"line":16834},[91,43564,32539],{"class":101},[91,43566,147],{"class":97},[91,43568,3063],{"class":150},[91,43570,43571],{"class":93,"line":16848},[91,43572,32548],{"class":160},[91,43574,43575,43577,43579],{"class":93,"line":16860},[91,43576,32553],{"class":101},[91,43578,147],{"class":97},[91,43580,3063],{"class":150},[91,43582,43583],{"class":93,"line":16865},[91,43584,32562],{"class":160},[91,43586,43587,43589,43591,43593,43595],{"class":93,"line":16878},[91,43588,3381],{"class":97},[91,43590,31576],{"class":101},[91,43592,26018],{"class":97},[91,43594,31581],{"class":150},[91,43596,32575],{"class":101},[91,43598,43599],{"class":93,"line":16883},[91,43600,32580],{"class":160},[91,43602,43603,43605,43607],{"class":93,"line":16888},[91,43604,32585],{"class":101},[91,43606,147],{"class":97},[91,43608,32590],{"class":101},[91,43610,43611],{"class":93,"line":16893},[91,43612,32595],{"class":160},[91,43614,43615,43617,43619],{"class":93,"line":16906},[91,43616,32600],{"class":101},[91,43618,147],{"class":97},[91,43620,32605],{"class":101},[91,43622,43623],{"class":93,"line":16911},[91,43624,32611],{"class":160},[91,43626,43627],{"class":93,"line":32608},[91,43628,32617],{"class":101},[91,43630,43631],{"class":93,"line":32614},[91,43632,32623],{"class":160},[91,43634,43635],{"class":93,"line":32620},[91,43636,32629],{"class":160},[91,43638,43639,43641,43643],{"class":93,"line":32626},[91,43640,32635],{"class":101},[91,43642,147],{"class":97},[91,43644,32640],{"class":101},[91,43646,43647],{"class":93,"line":32632},[91,43648,32646],{"class":160},[91,43650,43651,43653,43655,43657,43659,43661,43663],{"class":93,"line":32643},[91,43652,32652],{"class":101},[91,43654,147],{"class":97},[91,43656,32657],{"class":101},[91,43658,32660],{"class":5195},[91,43660,147],{"class":97},[91,43662,319],{"class":150},[91,43664,108],{"class":101},[91,43666,43667],{"class":93,"line":32649},[91,43668,32672],{"class":160},[91,43670,43671,43673,43675],{"class":93,"line":32669},[91,43672,32678],{"class":101},[91,43674,147],{"class":97},[91,43676,32683],{"class":101},[91,43678,43679],{"class":93,"line":32675},[91,43680,32689],{"class":160},[91,43682,43683],{"class":93,"line":32686},[91,43684,32695],{"class":101},[91,43686,43687],{"class":93,"line":32692},[91,43688,32701],{"class":160},[91,43690,43691],{"class":93,"line":32698},[91,43692,32707],{"class":101},[91,43694,43695],{"class":93,"line":32704},[91,43696,32713],{"class":160},[91,43698,43699],{"class":93,"line":32710},[91,43700,32719],{"class":101},[91,43702,43703],{"class":93,"line":32716},[91,43704,32725],{"class":160},[91,43706,43707,43709,43711,43713,43715,43717,43719],{"class":93,"line":32722},[91,43708,32731],{"class":101},[91,43710,9456],{"class":97},[91,43712,32736],{"class":101},[91,43714,557],{"class":97},[91,43716,32741],{"class":101},[91,43718,293],{"class":150},[91,43720,108],{"class":101},[91,43722,43723],{"class":93,"line":32728},[91,43724,32751],{"class":160},[91,43726,43727,43729,43731,43733,43735],{"class":93,"line":32748},[91,43728,32757],{"class":101},[91,43730,9456],{"class":97},[91,43732,32762],{"class":101},[91,43734,2927],{"class":97},[91,43736,32767],{"class":101},[91,43738,43739],{"class":93,"line":32754},[91,43740,32773],{"class":160},[91,43742,43743,43745,43747,43749,43751],{"class":93,"line":32770},[91,43744,32779],{"class":101},[91,43746,9456],{"class":97},[91,43748,32741],{"class":101},[91,43750,293],{"class":150},[91,43752,108],{"class":101},[91,43754,43755],{"class":93,"line":32776},[91,43756,32793],{"class":160},[91,43758,43759,43761,43763,43765,43767],{"class":93,"line":32790},[91,43760,3381],{"class":97},[91,43762,32801],{"class":101},[91,43764,26018],{"class":97},[91,43766,31581],{"class":150},[91,43768,32808],{"class":101},[91,43770,43771],{"class":93,"line":32796},[91,43772,32814],{"class":160},[91,43774,43775,43777,43779],{"class":93,"line":32811},[91,43776,32585],{"class":101},[91,43778,147],{"class":97},[91,43780,32590],{"class":101},[91,43782,43783],{"class":93,"line":32817},[91,43784,32829],{"class":160},[91,43786,43787,43789,43791],{"class":93,"line":32826},[91,43788,32600],{"class":101},[91,43790,147],{"class":97},[91,43792,32605],{"class":101},[91,43794,43795],{"class":93,"line":32832},[91,43796,32844],{"class":160},[91,43798,43799],{"class":93,"line":32841},[91,43800,32850],{"class":101},[91,43802,43803],{"class":93,"line":32847},[91,43804,36331],{"class":160},[91,43806,43807,43809],{"class":93,"line":32853},[91,43808,32856],{"class":97},[91,43810,32859],{"class":101},[91,43812,43813],{"class":93,"line":32862},[91,43814,32865],{"class":160},[91,43816,43817,43819,43821],{"class":93,"line":32868},[91,43818,36346],{"class":101},[91,43820,147],{"class":97},[91,43822,32640],{"class":101},[91,43824,43825],{"class":93,"line":32879},[91,43826,32882],{"class":160},[91,43828,43829,43831,43833,43835,43837,43839,43841],{"class":93,"line":32885},[91,43830,36359],{"class":101},[91,43832,147],{"class":97},[91,43834,32657],{"class":101},[91,43836,32660],{"class":5195},[91,43838,147],{"class":97},[91,43840,319],{"class":150},[91,43842,108],{"class":101},[91,43844,43845],{"class":93,"line":32904},[91,43846,32907],{"class":160},[91,43848,43849,43851,43853],{"class":93,"line":32910},[91,43850,36380],{"class":101},[91,43852,147],{"class":97},[91,43854,32683],{"class":101},[91,43856,43857],{"class":93,"line":32921},[91,43858,32924],{"class":160},[91,43860,43861,43863,43865,43867,43869,43871,43873],{"class":93,"line":32927},[91,43862,36393],{"class":101},[91,43864,9456],{"class":97},[91,43866,36398],{"class":101},[91,43868,557],{"class":97},[91,43870,32741],{"class":101},[91,43872,293],{"class":150},[91,43874,108],{"class":101},[91,43876,43877,43879,43881,43883,43885],{"class":93,"line":32947},[91,43878,36411],{"class":101},[91,43880,9456],{"class":97},[91,43882,32762],{"class":101},[91,43884,2927],{"class":97},[91,43886,32767],{"class":101},[91,43888,43889],{"class":93,"line":32963},[91,43890,36424],{"class":160},[91,43892,43893,43895,43897,43899,43901],{"class":93,"line":32969},[91,43894,36429],{"class":101},[91,43896,9456],{"class":97},[91,43898,32741],{"class":101},[91,43900,293],{"class":150},[91,43902,108],{"class":101},[91,43904,43905],{"class":93,"line":32983},[91,43906,32986],{"class":160},[91,43908,43909],{"class":93,"line":32989},[91,43910,32992],{"class":160},[91,43912,43913,43915,43917],{"class":93,"line":32995},[91,43914,32998],{"class":101},[91,43916,686],{"class":97},[91,43918,33003],{"class":101},[91,43920,43921],{"class":93,"line":33006},[91,43922,33009],{"class":160},[91,43924,43925],{"class":93,"line":33012},[91,43926,33015],{"class":160},[91,43928,43929,43931,43933],{"class":93,"line":33018},[91,43930,33021],{"class":101},[91,43932,686],{"class":97},[91,43934,33003],{"class":101},[91,43936,43937],{"class":93,"line":33028},[91,43938,33031],{"class":160},[91,43940,43941,43943,43945],{"class":93,"line":33034},[91,43942,33037],{"class":101},[91,43944,686],{"class":97},[91,43946,33042],{"class":101},[91,43948,43949],{"class":93,"line":33045},[91,43950,33048],{"class":160},[91,43952,43953,43955,43957],{"class":93,"line":33051},[91,43954,33054],{"class":101},[91,43956,686],{"class":97},[91,43958,33042],{"class":101},[91,43960,43961],{"class":93,"line":33061},[91,43962,2378],{"emptyLinePlaceholder":17},[91,43964,43965],{"class":93,"line":33066},[91,43966,33069],{"class":160},[91,43968,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007],{"class":93,"line":33072},[91,43970,32426],{"class":150},[91,43972,102],{"class":101},[91,43974,3570],{"class":206},[91,43976,32434],{"class":150},[91,43978,33083],{"class":206},[91,43980,998],{"class":150},[91,43982,33088],{"class":97},[91,43984,1048],{"class":150},[91,43986,33093],{"class":206},[91,43988,998],{"class":150},[91,43990,33088],{"class":97},[91,43992,1048],{"class":150},[91,43994,3570],{"class":206},[91,43996,33104],{"class":101},[91,43998,634],{"class":97},[91,44000,319],{"class":150},[91,44002,33111],{"class":101},[91,44004,634],{"class":97},[91,44006,319],{"class":150},[91,44008,33118],{"class":101},[91,44010,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049],{"class":93,"line":33121},[91,44012,32426],{"class":150},[91,44014,102],{"class":101},[91,44016,3570],{"class":206},[91,44018,32434],{"class":150},[91,44020,33132],{"class":206},[91,44022,998],{"class":150},[91,44024,33088],{"class":97},[91,44026,1048],{"class":150},[91,44028,33141],{"class":206},[91,44030,998],{"class":150},[91,44032,33088],{"class":97},[91,44034,1048],{"class":150},[91,44036,3570],{"class":206},[91,44038,33152],{"class":101},[91,44040,634],{"class":97},[91,44042,319],{"class":150},[91,44044,33159],{"class":101},[91,44046,634],{"class":97},[91,44048,319],{"class":150},[91,44050,33118],{"class":101},[91,44052,44053],{"class":93,"line":33168},[91,44054,2378],{"emptyLinePlaceholder":17},[91,44056,44057],{"class":93,"line":33173},[91,44058,33176],{"class":160},[91,44060,44061,44063,44065,44067,44069,44071,44073],{"class":93,"line":33179},[91,44062,2475],{"class":97},[91,44064,33184],{"class":101},[91,44066,634],{"class":97},[91,44068,319],{"class":150},[91,44070,1042],{"class":101},[91,44072,1062],{"class":97},[91,44074,33195],{"class":101},[91,44076,44077],{"class":93,"line":33198},[91,44078,33201],{"class":160},[91,44080,44081,44083,44085,44087,44089,44091,44093],{"class":93,"line":33204},[91,44082,33207],{"class":101},[91,44084,141],{"class":150},[91,44086,147],{"class":97},[91,44088,33214],{"class":101},[91,44090,634],{"class":97},[91,44092,319],{"class":150},[91,44094,33221],{"class":101},[91,44096,44097],{"class":93,"line":33224},[91,44098,33227],{"class":160},[91,44100,44101],{"class":93,"line":33230},[91,44102,33233],{"class":160},[91,44104,44105,44107,44109],{"class":93,"line":33236},[91,44106,33239],{"class":101},[91,44108,147],{"class":97},[91,44110,32289],{"class":101},[91,44112,44113],{"class":93,"line":33246},[91,44114,2378],{"emptyLinePlaceholder":17},[91,44116,44117],{"class":93,"line":33251},[91,44118,33254],{"class":160},[91,44120,44121,44123,44125,44127,44129],{"class":93,"line":33257},[91,44122,33260],{"class":101},[91,44124,147],{"class":97},[91,44126,33265],{"class":101},[91,44128,634],{"class":97},[91,44130,33270],{"class":101},[91,44132,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167],{"class":93,"line":33273},[91,44134,32426],{"class":150},[91,44136,102],{"class":101},[91,44138,33280],{"class":206},[91,44140,998],{"class":150},[91,44142,33285],{"class":97},[91,44144,1048],{"class":150},[91,44146,646],{"class":206},[91,44148,998],{"class":150},[91,44150,33285],{"class":97},[91,44152,1048],{"class":150},[91,44154,33298],{"class":206},[91,44156,33301],{"class":101},[91,44158,33304],{"class":97},[91,44160,1009],{"class":150},[91,44162,33309],{"class":101},[91,44164,430],{"class":97},[91,44166,1009],{"class":150},[91,44168,30472],{"class":101},[91,44170,44171],{"class":93,"line":33318},[91,44172,36708],{"class":160},[91,44174,44175],{"class":93,"line":33324},[91,44176,36713],{"class":160},[91,44178,44179,44181,44183],{"class":93,"line":33330},[91,44180,36718],{"class":101},[91,44182,33342],{"class":206},[91,44184,108],{"class":101},[91,44186,44187],{"class":93,"line":33336},[91,44188,33362],{"class":160},[91,44190,44191,44193,44195,44197,44199,44201],{"class":93,"line":33347},[91,44192,33368],{"class":101},[91,44194,147],{"class":97},[91,44196,33373],{"class":101},[91,44198,33376],{"class":5195},[91,44200,147],{"class":97},[91,44202,1524],{"class":101},[91,44204,44205,44207,44209,44211],{"class":93,"line":33353},[91,44206,33386],{"class":206},[91,44208,961],{"class":101},[91,44210,33391],{"class":150},[91,44212,33394],{"class":101},[91,44214,44215,44217],{"class":93,"line":33359},[91,44216,33400],{"class":206},[91,44218,33403],{"class":101},[91,44220,44221,44223],{"class":93,"line":33365},[91,44222,33409],{"class":206},[91,44224,33412],{"class":101},[91,44226,44227,44229],{"class":93,"line":33383},[91,44228,33418],{"class":206},[91,44230,33421],{"class":101},[91,44232,44233,44235],{"class":93,"line":33397},[91,44234,33427],{"class":206},[91,44236,33430],{"class":101},[91,44238,44239],{"class":93,"line":33406},[91,44240,33436],{"class":101},[91,44242,44243],{"class":93,"line":33415},[91,44244,33442],{"class":160},[91,44246,44247,44249],{"class":93,"line":33424},[91,44248,4068],{"class":97},[91,44250,33450],{"class":101},[91,44252,44253],{"class":93,"line":33433},[91,44254,2378],{"emptyLinePlaceholder":17},[91,44256,44257],{"class":93,"line":33439},[91,44258,33461],{"class":160},[91,44260,44261,44263,44265],{"class":93,"line":33445},[91,44262,31922],{"class":97},[91,44264,33469],{"class":1941},[91,44266,33472],{"class":101},[91,44268,44269],{"class":93,"line":33453},[91,44270,33478],{"class":160},[91,44272,44273,44275,44277,44279,44281,44283,44285,44287],{"class":93,"line":33458},[91,44274,33484],{"class":101},[91,44276,31668],{"class":5195},[91,44278,147],{"class":97},[91,44280,102],{"class":101},[91,44282,600],{"class":150},[91,44284,480],{"class":101},[91,44286,395],{"class":150},[91,44288,30472],{"class":101},[91,44290,44291],{"class":93,"line":33464},[91,44292,33504],{"class":160},[91,44294,44295],{"class":93,"line":33475},[91,44296,33510],{"class":160},[91,44298,44299],{"class":93,"line":33481},[91,44300,33516],{"class":160},[91,44302,44303,44305,44307,44309,44311,44313,44315],{"class":93,"line":33501},[91,44304,31702],{"class":101},[91,44306,319],{"class":150},[91,44308,480],{"class":101},[91,44310,179],{"class":150},[91,44312,480],{"class":101},[91,44314,319],{"class":150},[91,44316,108],{"class":101},[91,44318,44319],{"class":93,"line":33507},[91,44320,33539],{"class":160},[91,44322,44323],{"class":93,"line":33513},[91,44324,33545],{"class":160},[91,44326,44327],{"class":93,"line":33519},[91,44328,33551],{"class":160},[91,44330,44331],{"class":93,"line":33536},[91,44332,33557],{"class":160},[91,44334,44335],{"class":93,"line":33542},[91,44336,33563],{"class":160},[91,44338,44339,44341,44343,44345,44347,44349,44351,44353,44355],{"class":93,"line":33548},[91,44340,33569],{"class":101},[91,44342,33572],{"class":206},[91,44344,33575],{"class":101},[91,44346,33578],{"class":206},[91,44348,480],{"class":101},[91,44350,33583],{"class":5195},[91,44352,147],{"class":97},[91,44354,33588],{"class":206},[91,44356,108],{"class":101},[91,44358,44359,44361,44363,44365,44367,44369,44371,44373,44375],{"class":93,"line":33554},[91,44360,33569],{"class":101},[91,44362,33572],{"class":206},[91,44364,33600],{"class":101},[91,44366,33603],{"class":206},[91,44368,480],{"class":101},[91,44370,33583],{"class":5195},[91,44372,147],{"class":97},[91,44374,33612],{"class":206},[91,44376,108],{"class":101},[91,44378,44379],{"class":93,"line":33560},[91,44380,33620],{"class":160},[91,44382,44383],{"class":93,"line":33566},[91,44384,33626],{"class":101},[91,44386,44387],{"class":93,"line":33593},[91,44388,33632],{"class":160},[91,44390,44391,44393,44395],{"class":93,"line":33617},[91,44392,33638],{"class":101},[91,44394,33641],{"class":206},[91,44396,108],{"class":101},[91,44398,44399,44401,44403],{"class":93,"line":33623},[91,44400,33649],{"class":101},[91,44402,33652],{"class":206},[91,44404,108],{"class":101},[91,44406,44407],{"class":93,"line":33629},[91,44408,33660],{"class":160},[91,44410,44411,44413,44415,44417,44419,44421,44423],{"class":93,"line":33635},[91,44412,31702],{"class":101},[91,44414,319],{"class":150},[91,44416,480],{"class":101},[91,44418,179],{"class":150},[91,44420,480],{"class":101},[91,44422,179],{"class":150},[91,44424,108],{"class":101},[91,44426,44427,44429,44431,44433,44435,44437,44439,44441,44443],{"class":93,"line":33646},[91,44428,33569],{"class":101},[91,44430,33572],{"class":206},[91,44432,33687],{"class":101},[91,44434,33578],{"class":206},[91,44436,480],{"class":101},[91,44438,33583],{"class":5195},[91,44440,147],{"class":97},[91,44442,33698],{"class":206},[91,44444,108],{"class":101},[91,44446,44447,44449,44451,44453,44455,44457,44459,44461,44463],{"class":93,"line":33657},[91,44448,33569],{"class":101},[91,44450,33572],{"class":206},[91,44452,33710],{"class":101},[91,44454,33603],{"class":206},[91,44456,480],{"class":101},[91,44458,33583],{"class":5195},[91,44460,147],{"class":97},[91,44462,33721],{"class":206},[91,44464,108],{"class":101},[91,44466,44467],{"class":93,"line":33663},[91,44468,33729],{"class":160},[91,44470,44471],{"class":93,"line":33680},[91,44472,33626],{"class":101},[91,44474,44475,44477,44479],{"class":93,"line":33703},[91,44476,33638],{"class":101},[91,44478,33572],{"class":206},[91,44480,108],{"class":101},[91,44482,44483,44485,44487],{"class":93,"line":33726},[91,44484,33649],{"class":101},[91,44486,33751],{"class":206},[91,44488,108],{"class":101},[91,44490,44491],{"class":93,"line":33732},[91,44492,33759],{"class":101},[91,44494,44495],{"class":93,"line":33737},[91,44496,2378],{"emptyLinePlaceholder":17},[91,44498,44499],{"class":93,"line":33746},[91,44500,33770],{"class":160},[91,44502,44503,44505,44507,44509,44511],{"class":93,"line":33756},[91,44504,1509],{"class":97},[91,44506,31195],{"class":150},[91,44508,2927],{"class":97},[91,44510,31200],{"class":206},[91,44512,3717],{"class":101},[91,44514,44515],{"class":93,"line":33762},[91,44516,33789],{"class":160},[91,44518,44519,44522,44524],{"class":93,"line":33767},[91,44520,44521],{"class":101},"    GoogLeNet",[91,44523,147],{"class":97},[91,44525,44526],{"class":101},"GoogLeNet(Inception)\n",[91,44528,44529,44531,44533],{"class":93,"line":33773},[91,44530,33806],{"class":101},[91,44532,147],{"class":97},[91,44534,33811],{"class":101},[91,44536,44537,44539,44541,44544,44546,44548,44550],{"class":93,"line":33786},[91,44538,33368],{"class":101},[91,44540,147],{"class":97},[91,44542,44543],{"class":101},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[91,44545,33824],{"class":5195},[91,44547,147],{"class":97},[91,44549,1053],{"class":150},[91,44551,108],{"class":101},[91,44553,44554],{"class":93,"line":33792},[91,44555,33836],{"class":101},[46,44557,44558],{"start":1157},[49,44559,40549],{},[83,44561,44563],{"className":30353,"code":44562,"language":30355,"meta":10,"style":10},"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",[88,44564,44565,44571,44581,44591,44595,44605,44616,44620,44624,44628,44636,44652,44662,44678,44688,44702,44706,44716,44726,44736,44742,44746,44750,44758,44762,44778,44786,44790,44794,44802,44810,44814,44818,44822,44826,44832,44836,44846,44854,44862,44866,44870,44874,44882,44886,44902,44906,44910,44914,44926,44930,44942,44946,44950,44962,44966,44976,44980,44984,44996,45000,45008,45012,45016,45024,45028,45036,45040,45044,45048,45052,45056,45072,45080,45084,45088,45136,45142,45146,45156,45164,45172,45176,45180,45184,45188,45196,45200,45216,45220,45228,45236],{"__ignoreMap":10},[91,44566,44567,44569],{"class":93,"line":94},[91,44568,30367],{"class":97},[91,44570,30370],{"class":101},[91,44572,44573,44575,44577,44579],{"class":93,"line":11},[91,44574,30367],{"class":97},[91,44576,31390],{"class":101},[91,44578,31358],{"class":97},[91,44580,31395],{"class":101},[91,44582,44583,44585,44587,44589],{"class":93,"line":1157},[91,44584,30712],{"class":97},[91,44586,31373],{"class":101},[91,44588,30367],{"class":97},[91,44590,31378],{"class":101},[91,44592,44593],{"class":93,"line":1172},[91,44594,33897],{"class":160},[91,44596,44597,44599,44601,44603],{"class":93,"line":1178},[91,44598,30712],{"class":97},[91,44600,31343],{"class":101},[91,44602,30367],{"class":97},[91,44604,31348],{"class":101},[91,44606,44607,44609,44611,44613],{"class":93,"line":1192},[91,44608,30712],{"class":97},[91,44610,31889],{"class":101},[91,44612,30367],{"class":97},[91,44614,44615],{"class":101}," GoogLeNet,Inception\n",[91,44617,44618],{"class":93,"line":1198},[91,44619,2378],{"emptyLinePlaceholder":17},[91,44621,44622],{"class":93,"line":1289},[91,44623,2378],{"emptyLinePlaceholder":17},[91,44625,44626],{"class":93,"line":1295},[91,44627,33926],{"class":160},[91,44629,44630,44632,44634],{"class":93,"line":1307},[91,44631,31922],{"class":97},[91,44633,33933],{"class":1941},[91,44635,31928],{"class":101},[91,44637,44638,44640,44642,44644,44646,44648,44650],{"class":93,"line":1590},[91,44639,33940],{"class":101},[91,44641,147],{"class":97},[91,44643,31430],{"class":101},[91,44645,31433],{"class":5195},[91,44647,147],{"class":97},[91,44649,31438],{"class":206},[91,44651,31441],{"class":101},[91,44653,44654,44656,44658,44660],{"class":93,"line":1595},[91,44655,33957],{"class":5195},[91,44657,147],{"class":97},[91,44659,33962],{"class":150},[91,44661,31441],{"class":101},[91,44663,44664,44666,44668,44670,44672,44674,44676],{"class":93,"line":1601},[91,44665,33969],{"class":5195},[91,44667,147],{"class":97},[91,44669,31468],{"class":101},[91,44671,31471],{"class":5195},[91,44673,147],{"class":97},[91,44675,35424],{"class":150},[91,44677,31479],{"class":101},[91,44679,44680,44682,44684,44686],{"class":93,"line":1606},[91,44681,33986],{"class":5195},[91,44683,147],{"class":97},[91,44685,31451],{"class":150},[91,44687,108],{"class":101},[91,44689,44690,44692,44694,44696,44698,44700],{"class":93,"line":1620},[91,44691,33997],{"class":101},[91,44693,147],{"class":97},[91,44695,31509],{"class":101},[91,44697,31512],{"class":5195},[91,44699,147],{"class":97},[91,44701,34008],{"class":101},[91,44703,44704],{"class":93,"line":1625},[91,44705,34013],{"class":160},[91,44707,44708,44710,44712,44714],{"class":93,"line":1631},[91,44709,34018],{"class":5195},[91,44711,147],{"class":97},[91,44713,319],{"class":150},[91,44715,31441],{"class":101},[91,44717,44718,44720,44722,44724],{"class":93,"line":1652},[91,44719,34029],{"class":5195},[91,44721,147],{"class":97},[91,44723,31451],{"class":150},[91,44725,31441],{"class":101},[91,44727,44728,44730,44732,44734],{"class":93,"line":1657},[91,44729,34040],{"class":5195},[91,44731,147],{"class":97},[91,44733,293],{"class":150},[91,44735,108],{"class":101},[91,44737,44738,44740],{"class":93,"line":1671},[91,44739,4068],{"class":97},[91,44741,34053],{"class":101},[91,44743,44744],{"class":93,"line":1676},[91,44745,2378],{"emptyLinePlaceholder":17},[91,44747,44748],{"class":93,"line":1705},[91,44749,34062],{"class":160},[91,44751,44752,44754,44756],{"class":93,"line":1710},[91,44753,31922],{"class":97},[91,44755,34069],{"class":1941},[91,44757,34072],{"class":101},[91,44759,44760],{"class":93,"line":1727},[91,44761,34077],{"class":160},[91,44763,44764,44766,44768,44770,44772,44774,44776],{"class":93,"line":1732},[91,44765,31212],{"class":101},[91,44767,147],{"class":97},[91,44769,31219],{"class":206},[91,44771,1682],{"class":97},[91,44773,31224],{"class":101},[91,44775,1679],{"class":97},[91,44777,34094],{"class":206},[91,44779,44780,44782,44784],{"class":93,"line":1737},[91,44781,31264],{"class":101},[91,44783,147],{"class":97},[91,44785,32264],{"class":101},[91,44787,44788],{"class":93,"line":1742},[91,44789,2378],{"emptyLinePlaceholder":17},[91,44791,44792],{"class":93,"line":1756},[91,44793,34111],{"class":160},[91,44795,44796,44798,44800],{"class":93,"line":1761},[91,44797,34116],{"class":101},[91,44799,147],{"class":97},[91,44801,32317],{"class":150},[91,44803,44804,44806,44808],{"class":93,"line":2555},[91,44805,34125],{"class":101},[91,44807,147],{"class":97},[91,44809,3063],{"class":150},[91,44811,44812],{"class":93,"line":2569},[91,44813,2378],{"emptyLinePlaceholder":17},[91,44815,44816],{"class":93,"line":2577},[91,44817,34138],{"class":160},[91,44819,44820],{"class":93,"line":2582},[91,44821,34143],{"class":160},[91,44823,44824],{"class":93,"line":2588},[91,44825,34148],{"class":160},[91,44827,44828,44830],{"class":93,"line":2594},[91,44829,34153],{"class":97},[91,44831,32859],{"class":101},[91,44833,44834],{"class":93,"line":2599},[91,44835,34160],{"class":160},[91,44837,44838,44840,44842,44844],{"class":93,"line":7927},[91,44839,3381],{"class":97},[91,44841,34167],{"class":101},[91,44843,26018],{"class":97},[91,44845,34172],{"class":101},[91,44847,44848,44850,44852],{"class":93,"line":7951},[91,44849,34177],{"class":101},[91,44851,147],{"class":97},[91,44853,34182],{"class":101},[91,44855,44856,44858,44860],{"class":93,"line":7956},[91,44857,34187],{"class":101},[91,44859,147],{"class":97},[91,44861,34192],{"class":101},[91,44863,44864],{"class":93,"line":7962},[91,44865,34197],{"class":160},[91,44867,44868],{"class":93,"line":7989},[91,44869,32850],{"class":101},[91,44871,44872],{"class":93,"line":7994},[91,44873,34206],{"class":160},[91,44875,44876,44878,44880],{"class":93,"line":8000},[91,44877,32635],{"class":101},[91,44879,147],{"class":97},[91,44881,34215],{"class":101},[91,44883,44884],{"class":93,"line":8012},[91,44885,34220],{"class":160},[91,44887,44888,44890,44892,44894,44896,44898,44900],{"class":93,"line":8024},[91,44889,32652],{"class":101},[91,44891,147],{"class":97},[91,44893,32657],{"class":101},[91,44895,32660],{"class":5195},[91,44897,147],{"class":97},[91,44899,319],{"class":150},[91,44901,108],{"class":101},[91,44903,44904],{"class":93,"line":8036},[91,44905,34241],{"class":160},[91,44907,44908],{"class":93,"line":9695},[91,44909,34246],{"class":160},[91,44911,44912],{"class":93,"line":9720},[91,44913,34251],{"class":160},[91,44915,44916,44918,44920,44922,44924],{"class":93,"line":9743},[91,44917,34256],{"class":101},[91,44919,9456],{"class":97},[91,44921,32762],{"class":101},[91,44923,2927],{"class":97},[91,44925,34265],{"class":101},[91,44927,44928],{"class":93,"line":9767},[91,44929,34270],{"class":160},[91,44931,44932,44934,44936,44938,44940],{"class":93,"line":9772},[91,44933,34275],{"class":101},[91,44935,9456],{"class":97},[91,44937,34280],{"class":101},[91,44939,293],{"class":150},[91,44941,108],{"class":101},[91,44943,44944],{"class":93,"line":9777},[91,44945,2378],{"emptyLinePlaceholder":17},[91,44947,44948],{"class":93,"line":9782},[91,44949,34293],{"class":160},[91,44951,44952,44954,44956,44958,44960],{"class":93,"line":9791},[91,44953,34298],{"class":101},[91,44955,147],{"class":97},[91,44957,34303],{"class":101},[91,44959,686],{"class":97},[91,44961,34308],{"class":101},[91,44963,44964],{"class":93,"line":9796},[91,44965,34313],{"class":160},[91,44967,44968,44970,44972,44974],{"class":93,"line":9802},[91,44969,32426],{"class":150},[91,44971,102],{"class":101},[91,44973,34322],{"class":206},[91,44975,34325],{"class":101},[91,44977,44978],{"class":93,"line":9823},[91,44979,2378],{"emptyLinePlaceholder":17},[91,44981,44982],{"class":93,"line":9829},[91,44983,34334],{"class":160},[91,44985,44986,44988,44990,44992,44994],{"class":93,"line":9843},[91,44987,1509],{"class":97},[91,44989,31195],{"class":150},[91,44991,2927],{"class":97},[91,44993,31200],{"class":206},[91,44995,3717],{"class":101},[91,44997,44998],{"class":93,"line":9849},[91,44999,34351],{"class":160},[91,45001,45002,45004,45006],{"class":93,"line":9876},[91,45003,31264],{"class":101},[91,45005,147],{"class":97},[91,45007,44526],{"class":101},[91,45009,45010],{"class":93,"line":9885},[91,45011,34364],{"class":160},[91,45013,45014],{"class":93,"line":9891},[91,45015,34369],{"class":160},[91,45017,45018,45020,45022],{"class":93,"line":9899},[91,45019,34374],{"class":101},[91,45021,34377],{"class":206},[91,45023,30472],{"class":101},[91,45025,45026],{"class":93,"line":9904},[91,45027,34384],{"class":160},[91,45029,45030,45032,45034],{"class":93,"line":16583},[91,45031,33997],{"class":101},[91,45033,147],{"class":97},[91,45035,34393],{"class":101},[91,45037,45038],{"class":93,"line":16589},[91,45039,34398],{"class":160},[91,45041,45042],{"class":93,"line":16612},[91,45043,34403],{"class":101},[91,45045,45046],{"class":93,"line":16618},[91,45047,2378],{"emptyLinePlaceholder":17},[91,45049,45050],{"class":93,"line":16641},[91,45051,34412],{"class":160},[91,45053,45054],{"class":93,"line":16655},[91,45055,34417],{"class":160},[91,45057,45058,45060,45062,45064,45066,45068,45070],{"class":93,"line":16675},[91,45059,31212],{"class":101},[91,45061,147],{"class":97},[91,45063,31219],{"class":206},[91,45065,1682],{"class":97},[91,45067,31224],{"class":101},[91,45069,1679],{"class":97},[91,45071,34094],{"class":206},[91,45073,45074,45076,45078],{"class":93,"line":16681},[91,45075,31264],{"class":101},[91,45077,147],{"class":97},[91,45079,32264],{"class":101},[91,45081,45082],{"class":93,"line":16692},[91,45083,34446],{"class":160},[91,45085,45086],{"class":93,"line":16715},[91,45087,34451],{"class":160},[91,45089,45090,45092,45094,45096,45098,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134],{"class":93,"line":16737},[91,45091,34456],{"class":101},[91,45093,147],{"class":97},[91,45095,992],{"class":101},[91,45097,34463],{"class":206},[91,45099,480],{"class":101},[91,45101,34468],{"class":206},[91,45103,480],{"class":101},[91,45105,34473],{"class":206},[91,45107,480],{"class":101},[91,45109,34478],{"class":206},[91,45111,480],{"class":101},[91,45113,34483],{"class":206},[91,45115,480],{"class":101},[91,45117,34488],{"class":206},[91,45119,480],{"class":101},[91,45121,34493],{"class":206},[91,45123,480],{"class":101},[91,45125,34498],{"class":206},[91,45127,480],{"class":101},[91,45129,34503],{"class":206},[91,45131,480],{"class":101},[91,45133,34508],{"class":206},[91,45135,33221],{"class":101},[91,45137,45138,45140],{"class":93,"line":16742},[91,45139,34153],{"class":97},[91,45141,32859],{"class":101},[91,45143,45144],{"class":93,"line":16748},[91,45145,34521],{"class":160},[91,45147,45148,45150,45152,45154],{"class":93,"line":16762},[91,45149,3381],{"class":97},[91,45151,34528],{"class":101},[91,45153,26018],{"class":97},[91,45155,34172],{"class":101},[91,45157,45158,45160,45162],{"class":93,"line":16775},[91,45159,32585],{"class":101},[91,45161,147],{"class":97},[91,45163,32590],{"class":101},[91,45165,45166,45168,45170],{"class":93,"line":16780},[91,45167,32600],{"class":101},[91,45169,147],{"class":97},[91,45171,32605],{"class":101},[91,45173,45174],{"class":93,"line":16794},[91,45175,2378],{"emptyLinePlaceholder":17},[91,45177,45178],{"class":93,"line":16799},[91,45179,34557],{"class":160},[91,45181,45182],{"class":93,"line":16805},[91,45183,32850],{"class":101},[91,45185,45186],{"class":93,"line":16810},[91,45187,34566],{"class":160},[91,45189,45190,45192,45194],{"class":93,"line":16824},[91,45191,32635],{"class":101},[91,45193,147],{"class":97},[91,45195,32640],{"class":101},[91,45197,45198],{"class":93,"line":16829},[91,45199,34579],{"class":160},[91,45201,45202,45204,45206,45208,45210,45212,45214],{"class":93,"line":16834},[91,45203,32652],{"class":101},[91,45205,147],{"class":97},[91,45207,32657],{"class":101},[91,45209,32660],{"class":5195},[91,45211,147],{"class":97},[91,45213,319],{"class":150},[91,45215,108],{"class":101},[91,45217,45218],{"class":93,"line":16848},[91,45219,34600],{"class":160},[91,45221,45222,45224,45226],{"class":93,"line":16860},[91,45223,34605],{"class":101},[91,45225,147],{"class":97},[91,45227,34610],{"class":101},[91,45229,45230,45232,45234],{"class":93,"line":16865},[91,45231,34615],{"class":101},[91,45233,147],{"class":97},[91,45235,34620],{"class":101},[91,45237,45238,45240,45242,45244,45246,45248,45250,45252],{"class":93,"line":16878},[91,45239,34625],{"class":150},[91,45241,102],{"class":101},[91,45243,34630],{"class":206},[91,45245,34633],{"class":101},[91,45247,34636],{"class":206},[91,45249,480],{"class":101},[91,45251,34641],{"class":206},[91,45253,34644],{"class":101},[63,45255,45257],{"id":45256},"_24训练自己的数据集","2.4.训练自己的数据集",[38,45259,45260],{},"猫狗分类任务",[38,45262,45263],{},"划分数据集和验证集",[83,45265,45267],{"className":30353,"code":45266,"language":30355,"meta":10,"style":10},"# 创建脚本，用于划分数据集和验证集\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",[88,45268,45269,45274,45281,45286,45297,45304,45308,45318,45332,45341,45345,45350,45360,45380,45384,45389,45399,45410,45423,45427,45432,45441,45451,45462,45466,45471,45481,45485,45490,45495,45500,45505,45510,45514,45524,45551,45564,45576,45603,45608,45613,45627,45632,45644,45659,45674,45682,45686,45691,45697,45709,45722,45727,45732,45737,45787,45793,45797],{"__ignoreMap":10},[91,45270,45271],{"class":93,"line":94},[91,45272,45273],{"class":160},"# 创建脚本，用于划分数据集和验证集\n",[91,45275,45276,45278],{"class":93,"line":11},[91,45277,30367],{"class":97},[91,45279,45280],{"class":101}," os\n",[91,45282,45283],{"class":93,"line":1157},[91,45284,45285],{"class":160},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[91,45287,45288,45290,45293,45295],{"class":93,"line":1172},[91,45289,30712],{"class":97},[91,45291,45292],{"class":101}," shutil ",[91,45294,30367],{"class":97},[91,45296,31797],{"class":101},[91,45298,45299,45301],{"class":93,"line":1178},[91,45300,30367],{"class":97},[91,45302,45303],{"class":101}," random\n",[91,45305,45306],{"class":93,"line":1192},[91,45307,2378],{"emptyLinePlaceholder":17},[91,45309,45310,45312,45315],{"class":93,"line":1198},[91,45311,31922],{"class":97},[91,45313,45314],{"class":1941}," mkfile",[91,45316,45317],{"class":101},"(file):\n",[91,45319,45320,45322,45324,45327,45330],{"class":93,"line":1289},[91,45321,3079],{"class":97},[91,45323,38905],{"class":97},[91,45325,45326],{"class":101}," os.path.exists(",[91,45328,45329],{"class":5195},"file",[91,45331,30761],{"class":101},[91,45333,45334,45337,45339],{"class":93,"line":1295},[91,45335,45336],{"class":101},"        os.makedirs(",[91,45338,45329],{"class":5195},[91,45340,108],{"class":101},[91,45342,45343],{"class":93,"line":1307},[91,45344,2378],{"emptyLinePlaceholder":17},[91,45346,45347],{"class":93,"line":1590},[91,45348,45349],{"class":160},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[91,45351,45352,45355,45357],{"class":93,"line":1595},[91,45353,45354],{"class":101},"file_path",[91,45356,147],{"class":97},[91,45358,45359],{"class":206},"'data_cat_dog'\n",[91,45361,45362,45365,45367,45370,45372,45375,45377],{"class":93,"line":1601},[91,45363,45364],{"class":101},"flower_class",[91,45366,147],{"class":97},[91,45368,45369],{"class":101},"[cla ",[91,45371,3003],{"class":97},[91,45373,45374],{"class":101}," cla ",[91,45376,26018],{"class":97},[91,45378,45379],{"class":101}," os.listdir(file_path)]\n",[91,45381,45382],{"class":93,"line":1606},[91,45383,2378],{"emptyLinePlaceholder":17},[91,45385,45386],{"class":93,"line":1620},[91,45387,45388],{"class":160},"# 创建训练集train文件夹\n",[91,45390,45391,45394,45397],{"class":93,"line":1625},[91,45392,45393],{"class":101},"mkfile(",[91,45395,45396],{"class":206},"'data\u002Ftrain'",[91,45398,108],{"class":101},[91,45400,45401,45403,45405,45407],{"class":93,"line":1631},[91,45402,3003],{"class":97},[91,45404,45374],{"class":101},[91,45406,26018],{"class":97},[91,45408,45409],{"class":101}," flower_class:\n",[91,45411,45412,45415,45418,45420],{"class":93,"line":1652},[91,45413,45414],{"class":101},"    mkfile(",[91,45416,45417],{"class":206},"'data\u002Ftrain\u002F'",[91,45419,583],{"class":97},[91,45421,45422],{"class":101},"cla)\n",[91,45424,45425],{"class":93,"line":1657},[91,45426,2378],{"emptyLinePlaceholder":17},[91,45428,45429],{"class":93,"line":1671},[91,45430,45431],{"class":160},"# 创建验证集val文件夹\n",[91,45433,45434,45436,45439],{"class":93,"line":1676},[91,45435,45393],{"class":101},[91,45437,45438],{"class":206},"'data\u002Ftest'",[91,45440,108],{"class":101},[91,45442,45443,45445,45447,45449],{"class":93,"line":1705},[91,45444,3003],{"class":97},[91,45446,45374],{"class":101},[91,45448,26018],{"class":97},[91,45450,45409],{"class":101},[91,45452,45453,45455,45458,45460],{"class":93,"line":1710},[91,45454,45414],{"class":101},[91,45456,45457],{"class":206},"'data\u002Ftest\u002F'",[91,45459,583],{"class":97},[91,45461,45422],{"class":101},[91,45463,45464],{"class":93,"line":1727},[91,45465,2378],{"emptyLinePlaceholder":17},[91,45467,45468],{"class":93,"line":1732},[91,45469,45470],{"class":160},"# 划分比例，训练集：测试集=9：1\n",[91,45472,45473,45476,45478],{"class":93,"line":1737},[91,45474,45475],{"class":101},"split_rate",[91,45477,147],{"class":97},[91,45479,45480],{"class":150},"0.1\n",[91,45482,45483],{"class":93,"line":1742},[91,45484,2378],{"emptyLinePlaceholder":17},[91,45486,45487],{"class":93,"line":1756},[91,45488,45489],{"class":160},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[91,45491,45492],{"class":93,"line":1761},[91,45493,45494],{"class":160},"# cla_path：当前类别的原始图片路径\n",[91,45496,45497],{"class":93,"line":2555},[91,45498,45499],{"class":160},"# images：当前类别下所有图片的文件名列表\n",[91,45501,45502],{"class":93,"line":2569},[91,45503,45504],{"class":160},"# num：该类别图片总数\n",[91,45506,45507],{"class":93,"line":2577},[91,45508,45509],{"class":160},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[91,45511,45512],{"class":93,"line":2582},[91,45513,2378],{"emptyLinePlaceholder":17},[91,45515,45516,45518,45520,45522],{"class":93,"line":2588},[91,45517,3003],{"class":97},[91,45519,45374],{"class":101},[91,45521,26018],{"class":97},[91,45523,45409],{"class":101},[91,45525,45526,45529,45531,45534,45536,45539,45542,45544,45546,45548],{"class":93,"line":2594},[91,45527,45528],{"class":101},"    cla_path ",[91,45530,147],{"class":97},[91,45532,45533],{"class":101}," file_path ",[91,45535,583],{"class":97},[91,45537,45538],{"class":206}," '\u002F'",[91,45540,45541],{"class":97}," +",[91,45543,45374],{"class":101},[91,45545,583],{"class":97},[91,45547,45538],{"class":206},[91,45549,45550],{"class":160},"  # 某一类别的子目录\n",[91,45552,45553,45556,45558,45561],{"class":93,"line":2599},[91,45554,45555],{"class":101},"    images ",[91,45557,147],{"class":97},[91,45559,45560],{"class":101}," os.listdir(cla_path)  ",[91,45562,45563],{"class":160},"# iamges 列表存储了该目录下所有图像的名称\n",[91,45565,45566,45569,45571,45573],{"class":93,"line":7927},[91,45567,45568],{"class":101},"    num ",[91,45570,147],{"class":97},[91,45572,7310],{"class":150},[91,45574,45575],{"class":101},"(images)\n",[91,45577,45578,45581,45583,45586,45588,45590,45592,45595,45597,45600],{"class":93,"line":7951},[91,45579,45580],{"class":101},"    eval_index ",[91,45582,147],{"class":97},[91,45584,45585],{"class":101}," random.sample(images, ",[91,45587,595],{"class":5195},[91,45589,147],{"class":97},[91,45591,105],{"class":150},[91,45593,45594],{"class":101},"(num ",[91,45596,557],{"class":97},[91,45598,45599],{"class":101}," split_rate))  ",[91,45601,45602],{"class":160},"# 从images列表中随机抽取 k 个图像名称\n",[91,45604,45605],{"class":93,"line":7956},[91,45606,45607],{"class":160},"    # 遍历该类别下的所有图片\n",[91,45609,45610],{"class":93,"line":7962},[91,45611,45612],{"class":160},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[91,45614,45615,45617,45620,45622,45624],{"class":93,"line":7989},[91,45616,3179],{"class":97},[91,45618,45619],{"class":101}," index, image ",[91,45621,26018],{"class":97},[91,45623,31581],{"class":150},[91,45625,45626],{"class":101},"(images):\n",[91,45628,45629],{"class":93,"line":7994},[91,45630,45631],{"class":160},"        # eval_index 中保存验证集val的图像名称\n",[91,45633,45634,45636,45639,45641],{"class":93,"line":8000},[91,45635,2475],{"class":97},[91,45637,45638],{"class":101}," image ",[91,45640,26018],{"class":97},[91,45642,45643],{"class":101}," eval_index:\n",[91,45645,45646,45649,45651,45654,45656],{"class":93,"line":8012},[91,45647,45648],{"class":101},"            image_path ",[91,45650,147],{"class":97},[91,45652,45653],{"class":101}," cla_path ",[91,45655,583],{"class":97},[91,45657,45658],{"class":101}," image\n",[91,45660,45661,45664,45666,45669,45671],{"class":93,"line":8024},[91,45662,45663],{"class":101},"            new_path ",[91,45665,147],{"class":97},[91,45667,45668],{"class":206}," 'data\u002Ftest\u002F'",[91,45670,45541],{"class":97},[91,45672,45673],{"class":101}," cla\n",[91,45675,45676,45679],{"class":93,"line":8036},[91,45677,45678],{"class":101},"            copy(image_path, new_path)  ",[91,45680,45681],{"class":160},"# 将选中的图像复制到新路径\n",[91,45683,45684],{"class":93,"line":9695},[91,45685,2378],{"emptyLinePlaceholder":17},[91,45687,45688],{"class":93,"line":9720},[91,45689,45690],{"class":160},"        # 其余的图像保存在训练集train中\n",[91,45692,45693,45695],{"class":93,"line":9743},[91,45694,2512],{"class":97},[91,45696,3717],{"class":101},[91,45698,45699,45701,45703,45705,45707],{"class":93,"line":9767},[91,45700,45648],{"class":101},[91,45702,147],{"class":97},[91,45704,45653],{"class":101},[91,45706,583],{"class":97},[91,45708,45658],{"class":101},[91,45710,45711,45713,45715,45718,45720],{"class":93,"line":9772},[91,45712,45663],{"class":101},[91,45714,147],{"class":97},[91,45716,45717],{"class":206}," 'data\u002Ftrain\u002F'",[91,45719,45541],{"class":97},[91,45721,45673],{"class":101},[91,45723,45724],{"class":93,"line":9777},[91,45725,45726],{"class":101},"            copy(image_path, new_path)\n",[91,45728,45729],{"class":93,"line":9782},[91,45730,45731],{"class":160},"            # 打印进度条信息\n",[91,45733,45734],{"class":93,"line":9791},[91,45735,45736],{"class":160},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[91,45738,45739,45741,45743,45745,45748,45750,45752,45755,45757,45759,45761,45764,45767,45769,45771,45774,45777,45779,45781,45784],{"class":93,"line":9796},[91,45740,32426],{"class":150},[91,45742,102],{"class":101},[91,45744,353],{"class":206},[91,45746,45747],{"class":150},"\\r",[91,45749,992],{"class":206},[91,45751,32434],{"class":150},[91,45753,45754],{"class":206},"] processing [",[91,45756,32434],{"class":150},[91,45758,686],{"class":206},[91,45760,32434],{"class":150},[91,45762,45763],{"class":206},"]\"",[91,45765,45766],{"class":101},".format(cla, index ",[91,45768,583],{"class":97},[91,45770,25093],{"class":150},[91,45772,45773],{"class":101},", num), ",[91,45775,45776],{"class":5195},"end",[91,45778,147],{"class":97},[91,45780,7631],{"class":206},[91,45782,45783],{"class":101},")  ",[91,45785,45786],{"class":160},"# processing bar\n",[91,45788,45789,45791],{"class":93,"line":9802},[91,45790,31274],{"class":150},[91,45792,1954],{"class":101},[91,45794,45795],{"class":93,"line":9823},[91,45796,2378],{"emptyLinePlaceholder":17},[91,45798,45799,45801,45803,45806],{"class":93,"line":9829},[91,45800,30390],{"class":150},[91,45802,102],{"class":101},[91,45804,45805],{"class":206},"\"processing done!\"",[91,45807,108],{"class":101},[38,45809,45810],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21977,45812,45814],{"id":45813},"_242模型代码","2.4.2.模型代码",[38,45816,45817],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[83,45819,45821],{"className":30353,"code":45820,"language":30355,"meta":10,"style":10},"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",[88,45822,45823,45829,45839,45849,45853,45869,45877,45891,45901,45905,45935,45939,45973,46019,46023,46057,46103,46107,46111,46145,46175,46179,46187,46201,46223,46245,46263,46267,46281,46285,46289,46305,46309,46317,46331,46341,46385,46389,46417,46421,46431,46459,46463,46499,46503,46531,46535,46545,46577,46609,46637,46641,46651,46683,46715,46747,46779,46811,46839,46843,46853,46885,46917,46929,46933,46945,46949,46953,46965,46973,46993,46997,47001,47005,47009,47013,47017,47031,47039,47047,47059,47073,47081,47085,47093,47103,47113,47123,47133,47143,47149,47153,47157,47169,47189,47197],{"__ignoreMap":10},[91,45824,45825,45827],{"class":93,"line":94},[91,45826,30367],{"class":97},[91,45828,30370],{"class":101},[91,45830,45831,45833,45835,45837],{"class":93,"line":11},[91,45832,30712],{"class":97},[91,45834,30715],{"class":101},[91,45836,30367],{"class":97},[91,45838,30720],{"class":101},[91,45840,45841,45843,45845,45847],{"class":93,"line":1157},[91,45842,30712],{"class":97},[91,45844,30732],{"class":101},[91,45846,30367],{"class":97},[91,45848,30737],{"class":101},[91,45850,45851],{"class":93,"line":1172},[91,45852,2378],{"emptyLinePlaceholder":17},[91,45854,45855,45857,45859,45861,45863,45865,45867],{"class":93,"line":1178},[91,45856,14673],{"class":97},[91,45858,41468],{"class":1941},[91,45860,102],{"class":101},[91,45862,30753],{"class":1941},[91,45864,660],{"class":101},[91,45866,30758],{"class":1941},[91,45868,30761],{"class":101},[91,45870,45871,45873,45875],{"class":93,"line":1192},[91,45872,30776],{"class":97},[91,45874,30779],{"class":150},[91,45876,41487],{"class":101},[91,45878,45879,45881,45883,45885,45887,45889],{"class":93,"line":1198},[91,45880,30792],{"class":150},[91,45882,41494],{"class":101},[91,45884,30798],{"class":150},[91,45886,30801],{"class":101},[91,45888,30804],{"class":150},[91,45890,1954],{"class":101},[91,45892,45893,45895,45897,45899],{"class":93,"line":1289},[91,45894,30820],{"class":150},[91,45896,34746],{"class":101},[91,45898,147],{"class":97},[91,45900,34751],{"class":101},[91,45902,45903],{"class":93,"line":1295},[91,45904,41517],{"class":160},[91,45906,45907,45909,45911,45913,45915,45917,45919,45921,45923,45925,45927,45929,45931,45933],{"class":93,"line":1307},[91,45908,30820],{"class":150},[91,45910,41524],{"class":101},[91,45912,147],{"class":97},[91,45914,30828],{"class":101},[91,45916,30831],{"class":5195},[91,45918,147],{"class":97},[91,45920,41535],{"class":101},[91,45922,30840],{"class":5195},[91,45924,147],{"class":97},[91,45926,41542],{"class":101},[91,45928,30849],{"class":5195},[91,45930,147],{"class":97},[91,45932,319],{"class":150},[91,45934,108],{"class":101},[91,45936,45937],{"class":93,"line":1590},[91,45938,41555],{"class":160},[91,45940,45941,45943,45945,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971],{"class":93,"line":1595},[91,45942,30820],{"class":150},[91,45944,41562],{"class":101},[91,45946,147],{"class":97},[91,45948,30828],{"class":101},[91,45950,30831],{"class":5195},[91,45952,147],{"class":97},[91,45954,41535],{"class":101},[91,45956,30840],{"class":5195},[91,45958,147],{"class":97},[91,45960,41579],{"class":101},[91,45962,293],{"class":150},[91,45964,41584],{"class":101},[91,45966,30849],{"class":5195},[91,45968,147],{"class":97},[91,45970,319],{"class":150},[91,45972,108],{"class":101},[91,45974,45975,45977,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017],{"class":93,"line":1601},[91,45976,30820],{"class":150},[91,45978,41599],{"class":101},[91,45980,147],{"class":97},[91,45982,30828],{"class":101},[91,45984,30831],{"class":5195},[91,45986,147],{"class":97},[91,45988,41579],{"class":101},[91,45990,293],{"class":150},[91,45992,41584],{"class":101},[91,45994,30840],{"class":5195},[91,45996,147],{"class":97},[91,45998,41579],{"class":101},[91,46000,319],{"class":150},[91,46002,41584],{"class":101},[91,46004,30849],{"class":5195},[91,46006,147],{"class":97},[91,46008,173],{"class":150},[91,46010,480],{"class":101},[91,46012,30858],{"class":5195},[91,46014,147],{"class":97},[91,46016,319],{"class":150},[91,46018,108],{"class":101},[91,46020,46021],{"class":93,"line":1606},[91,46022,41644],{"class":160},[91,46024,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055],{"class":93,"line":1620},[91,46026,30820],{"class":150},[91,46028,41651],{"class":101},[91,46030,147],{"class":97},[91,46032,30828],{"class":101},[91,46034,30831],{"class":5195},[91,46036,147],{"class":97},[91,46038,41535],{"class":101},[91,46040,30840],{"class":5195},[91,46042,147],{"class":97},[91,46044,41668],{"class":101},[91,46046,293],{"class":150},[91,46048,41584],{"class":101},[91,46050,30849],{"class":5195},[91,46052,147],{"class":97},[91,46054,319],{"class":150},[91,46056,108],{"class":101},[91,46058,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101],{"class":93,"line":1625},[91,46060,30820],{"class":150},[91,46062,41687],{"class":101},[91,46064,147],{"class":97},[91,46066,30828],{"class":101},[91,46068,30831],{"class":5195},[91,46070,147],{"class":97},[91,46072,41668],{"class":101},[91,46074,293],{"class":150},[91,46076,41584],{"class":101},[91,46078,30840],{"class":5195},[91,46080,147],{"class":97},[91,46082,41668],{"class":101},[91,46084,319],{"class":150},[91,46086,41584],{"class":101},[91,46088,30849],{"class":5195},[91,46090,147],{"class":97},[91,46092,421],{"class":150},[91,46094,480],{"class":101},[91,46096,30858],{"class":5195},[91,46098,147],{"class":97},[91,46100,179],{"class":150},[91,46102,108],{"class":101},[91,46104,46105],{"class":93,"line":1631},[91,46106,41732],{"class":160},[91,46108,46109],{"class":93,"line":1652},[91,46110,41737],{"class":160},[91,46112,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143],{"class":93,"line":1657},[91,46114,30820],{"class":150},[91,46116,41744],{"class":101},[91,46118,147],{"class":97},[91,46120,34804],{"class":101},[91,46122,30849],{"class":5195},[91,46124,147],{"class":97},[91,46126,173],{"class":150},[91,46128,480],{"class":101},[91,46130,30904],{"class":5195},[91,46132,147],{"class":97},[91,46134,319],{"class":150},[91,46136,480],{"class":101},[91,46138,30858],{"class":5195},[91,46140,147],{"class":97},[91,46142,319],{"class":150},[91,46144,108],{"class":101},[91,46146,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173],{"class":93,"line":1671},[91,46148,30820],{"class":150},[91,46150,41779],{"class":101},[91,46152,147],{"class":97},[91,46154,30828],{"class":101},[91,46156,30831],{"class":5195},[91,46158,147],{"class":97},[91,46160,41535],{"class":101},[91,46162,30840],{"class":5195},[91,46164,147],{"class":97},[91,46166,41796],{"class":101},[91,46168,30849],{"class":5195},[91,46170,147],{"class":97},[91,46172,319],{"class":150},[91,46174,108],{"class":101},[91,46176,46177],{"class":93,"line":1676},[91,46178,2378],{"emptyLinePlaceholder":17},[91,46180,46181,46183,46185],{"class":93,"line":1705},[91,46182,30776],{"class":97},[91,46184,31068],{"class":1941},[91,46186,31071],{"class":101},[91,46188,46189,46191,46193,46195,46197,46199],{"class":93,"line":1710},[91,46190,41821],{"class":101},[91,46192,147],{"class":97},[91,46194,30798],{"class":150},[91,46196,35159],{"class":101},[91,46198,30798],{"class":150},[91,46200,41832],{"class":101},[91,46202,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221],{"class":93,"line":1727},[91,46204,7064],{"class":101},[91,46206,147],{"class":97},[91,46208,30798],{"class":150},[91,46210,35159],{"class":101},[91,46212,30798],{"class":150},[91,46214,41847],{"class":101},[91,46216,30798],{"class":150},[91,46218,35159],{"class":101},[91,46220,30798],{"class":150},[91,46222,41856],{"class":101},[91,46224,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243],{"class":93,"line":1732},[91,46226,41861],{"class":101},[91,46228,147],{"class":97},[91,46230,30798],{"class":150},[91,46232,35159],{"class":101},[91,46234,30798],{"class":150},[91,46236,41872],{"class":101},[91,46238,30798],{"class":150},[91,46240,35159],{"class":101},[91,46242,30798],{"class":150},[91,46244,41881],{"class":101},[91,46246,46247,46249,46251,46253,46255,46257,46259,46261],{"class":93,"line":1737},[91,46248,41886],{"class":101},[91,46250,147],{"class":97},[91,46252,30798],{"class":150},[91,46254,35159],{"class":101},[91,46256,30798],{"class":150},[91,46258,41897],{"class":101},[91,46260,30798],{"class":150},[91,46262,41902],{"class":101},[91,46264,46265],{"class":93,"line":1742},[91,46266,41907],{"class":160},[91,46268,46269,46271,46273,46275,46277,46279],{"class":93,"line":1756},[91,46270,14731],{"class":97},[91,46272,41914],{"class":101},[91,46274,32660],{"class":5195},[91,46276,147],{"class":97},[91,46278,319],{"class":150},[91,46280,108],{"class":101},[91,46282,46283],{"class":93,"line":1761},[91,46284,2378],{"emptyLinePlaceholder":17},[91,46286,46287],{"class":93,"line":2555},[91,46288,41935],{"class":160},[91,46290,46291,46293,46295,46297,46299,46301,46303],{"class":93,"line":2569},[91,46292,14673],{"class":97},[91,46294,41942],{"class":1941},[91,46296,102],{"class":101},[91,46298,30753],{"class":1941},[91,46300,660],{"class":101},[91,46302,30758],{"class":1941},[91,46304,30761],{"class":101},[91,46306,46307],{"class":93,"line":2577},[91,46308,41957],{"class":160},[91,46310,46311,46313,46315],{"class":93,"line":2582},[91,46312,30776],{"class":97},[91,46314,30779],{"class":150},[91,46316,41966],{"class":101},[91,46318,46319,46321,46323,46325,46327,46329],{"class":93,"line":2588},[91,46320,30792],{"class":150},[91,46322,41973],{"class":101},[91,46324,30798],{"class":150},[91,46326,30801],{"class":101},[91,46328,30804],{"class":150},[91,46330,1954],{"class":101},[91,46332,46333,46335,46337,46339],{"class":93,"line":2594},[91,46334,30820],{"class":150},[91,46336,41988],{"class":101},[91,46338,147],{"class":97},[91,46340,37984],{"class":101},[91,46342,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383],{"class":93,"line":2599},[91,46344,37989],{"class":101},[91,46346,30831],{"class":5195},[91,46348,147],{"class":97},[91,46350,173],{"class":150},[91,46352,480],{"class":101},[91,46354,30840],{"class":5195},[91,46356,147],{"class":97},[91,46358,305],{"class":150},[91,46360,480],{"class":101},[91,46362,30849],{"class":5195},[91,46364,147],{"class":97},[91,46366,471],{"class":150},[91,46368,480],{"class":101},[91,46370,30904],{"class":5195},[91,46372,147],{"class":97},[91,46374,179],{"class":150},[91,46376,480],{"class":101},[91,46378,30858],{"class":5195},[91,46380,147],{"class":97},[91,46382,173],{"class":150},[91,46384,38022],{"class":101},[91,46386,46387],{"class":93,"line":7927},[91,46388,38027],{"class":101},[91,46390,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415],{"class":93,"line":7951},[91,46392,38072],{"class":101},[91,46394,30849],{"class":5195},[91,46396,147],{"class":97},[91,46398,173],{"class":150},[91,46400,480],{"class":101},[91,46402,30904],{"class":5195},[91,46404,147],{"class":97},[91,46406,179],{"class":150},[91,46408,480],{"class":101},[91,46410,30858],{"class":5195},[91,46412,147],{"class":97},[91,46414,319],{"class":150},[91,46416,108],{"class":101},[91,46418,46419],{"class":93,"line":7956},[91,46420,38101],{"class":101},[91,46422,46423,46425,46427,46429],{"class":93,"line":7962},[91,46424,30820],{"class":150},[91,46426,42079],{"class":101},[91,46428,147],{"class":97},[91,46430,37984],{"class":101},[91,46432,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457],{"class":93,"line":7989},[91,46434,37989],{"class":101},[91,46436,30831],{"class":5195},[91,46438,147],{"class":97},[91,46440,305],{"class":150},[91,46442,480],{"class":101},[91,46444,30840],{"class":5195},[91,46446,147],{"class":97},[91,46448,305],{"class":150},[91,46450,480],{"class":101},[91,46452,30849],{"class":5195},[91,46454,147],{"class":97},[91,46456,319],{"class":150},[91,46458,38022],{"class":101},[91,46460,46461],{"class":93,"line":7994},[91,46462,38027],{"class":101},[91,46464,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497],{"class":93,"line":8000},[91,46466,37989],{"class":101},[91,46468,30831],{"class":5195},[91,46470,147],{"class":97},[91,46472,305],{"class":150},[91,46474,480],{"class":101},[91,46476,30840],{"class":5195},[91,46478,147],{"class":97},[91,46480,42134],{"class":150},[91,46482,480],{"class":101},[91,46484,30849],{"class":5195},[91,46486,147],{"class":97},[91,46488,173],{"class":150},[91,46490,480],{"class":101},[91,46492,30858],{"class":5195},[91,46494,147],{"class":97},[91,46496,319],{"class":150},[91,46498,38022],{"class":101},[91,46500,46501],{"class":93,"line":8012},[91,46502,38027],{"class":101},[91,46504,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529],{"class":93,"line":8024},[91,46506,38072],{"class":101},[91,46508,30849],{"class":5195},[91,46510,147],{"class":97},[91,46512,173],{"class":150},[91,46514,480],{"class":101},[91,46516,30904],{"class":5195},[91,46518,147],{"class":97},[91,46520,179],{"class":150},[91,46522,480],{"class":101},[91,46524,30858],{"class":5195},[91,46526,147],{"class":97},[91,46528,319],{"class":150},[91,46530,108],{"class":101},[91,46532,46533],{"class":93,"line":8036},[91,46534,38101],{"class":101},[91,46536,46537,46539,46541,46543],{"class":93,"line":9695},[91,46538,30820],{"class":150},[91,46540,42195],{"class":101},[91,46542,147],{"class":97},[91,46544,37984],{"class":101},[91,46546,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575],{"class":93,"line":9720},[91,46548,42204],{"class":101},[91,46550,42134],{"class":150},[91,46552,480],{"class":101},[91,46554,305],{"class":150},[91,46556,42213],{"class":101},[91,46558,311],{"class":150},[91,46560,480],{"class":101},[91,46562,32045],{"class":150},[91,46564,42222],{"class":101},[91,46566,703],{"class":150},[91,46568,480],{"class":101},[91,46570,299],{"class":150},[91,46572,42231],{"class":101},[91,46574,299],{"class":150},[91,46576,38022],{"class":101},[91,46578,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607],{"class":93,"line":9743},[91,46580,42204],{"class":101},[91,46582,34845],{"class":150},[91,46584,480],{"class":101},[91,46586,32045],{"class":150},[91,46588,42213],{"class":101},[91,46590,32045],{"class":150},[91,46592,480],{"class":101},[91,46594,42134],{"class":150},[91,46596,42222],{"class":101},[91,46598,299],{"class":150},[91,46600,480],{"class":101},[91,46602,311],{"class":150},[91,46604,42231],{"class":101},[91,46606,305],{"class":150},[91,46608,38022],{"class":101},[91,46610,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635],{"class":93,"line":9767},[91,46612,38072],{"class":101},[91,46614,30849],{"class":5195},[91,46616,147],{"class":97},[91,46618,173],{"class":150},[91,46620,480],{"class":101},[91,46622,30904],{"class":5195},[91,46624,147],{"class":97},[91,46626,179],{"class":150},[91,46628,480],{"class":101},[91,46630,30858],{"class":5195},[91,46632,147],{"class":97},[91,46634,319],{"class":150},[91,46636,108],{"class":101},[91,46638,46639],{"class":93,"line":9772},[91,46640,38101],{"class":101},[91,46642,46643,46645,46647,46649],{"class":93,"line":9777},[91,46644,30820],{"class":150},[91,46646,42306],{"class":101},[91,46648,147],{"class":97},[91,46650,37984],{"class":101},[91,46652,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681],{"class":93,"line":9782},[91,46654,42204],{"class":101},[91,46656,42317],{"class":150},[91,46658,480],{"class":101},[91,46660,42134],{"class":150},[91,46662,42213],{"class":101},[91,46664,311],{"class":150},[91,46666,480],{"class":101},[91,46668,42330],{"class":150},[91,46670,42222],{"class":101},[91,46672,703],{"class":150},[91,46674,480],{"class":101},[91,46676,709],{"class":150},[91,46678,42231],{"class":101},[91,46680,305],{"class":150},[91,46682,38022],{"class":101},[91,46684,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":93,"line":9791},[91,46686,42204],{"class":101},[91,46688,38432],{"class":150},[91,46690,480],{"class":101},[91,46692,21027],{"class":150},[91,46694,42213],{"class":101},[91,46696,720],{"class":150},[91,46698,480],{"class":101},[91,46700,31476],{"class":150},[91,46702,42222],{"class":101},[91,46704,902],{"class":150},[91,46706,480],{"class":101},[91,46708,305],{"class":150},[91,46710,42231],{"class":101},[91,46712,305],{"class":150},[91,46714,38022],{"class":101},[91,46716,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745],{"class":93,"line":9796},[91,46718,42204],{"class":101},[91,46720,38432],{"class":150},[91,46722,480],{"class":101},[91,46724,32045],{"class":150},[91,46726,42213],{"class":101},[91,46728,32045],{"class":150},[91,46730,480],{"class":101},[91,46732,34845],{"class":150},[91,46734,42222],{"class":101},[91,46736,902],{"class":150},[91,46738,480],{"class":101},[91,46740,305],{"class":150},[91,46742,42231],{"class":101},[91,46744,305],{"class":150},[91,46746,38022],{"class":101},[91,46748,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777],{"class":93,"line":9802},[91,46750,42204],{"class":101},[91,46752,38432],{"class":150},[91,46754,480],{"class":101},[91,46756,720],{"class":150},[91,46758,42213],{"class":101},[91,46760,32045],{"class":150},[91,46762,480],{"class":101},[91,46764,42427],{"class":150},[91,46766,42222],{"class":101},[91,46768,299],{"class":150},[91,46770,480],{"class":101},[91,46772,305],{"class":150},[91,46774,42231],{"class":101},[91,46776,305],{"class":150},[91,46778,38022],{"class":101},[91,46780,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809],{"class":93,"line":9823},[91,46782,42204],{"class":101},[91,46784,42448],{"class":150},[91,46786,480],{"class":101},[91,46788,34845],{"class":150},[91,46790,42213],{"class":101},[91,46792,21027],{"class":150},[91,46794,480],{"class":101},[91,46796,42461],{"class":150},[91,46798,42222],{"class":101},[91,46800,299],{"class":150},[91,46802,480],{"class":101},[91,46804,32045],{"class":150},[91,46806,42231],{"class":101},[91,46808,32045],{"class":150},[91,46810,38022],{"class":101},[91,46812,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837],{"class":93,"line":9829},[91,46814,38072],{"class":101},[91,46816,30849],{"class":5195},[91,46818,147],{"class":97},[91,46820,173],{"class":150},[91,46822,480],{"class":101},[91,46824,30904],{"class":5195},[91,46826,147],{"class":97},[91,46828,179],{"class":150},[91,46830,480],{"class":101},[91,46832,30858],{"class":5195},[91,46834,147],{"class":97},[91,46836,319],{"class":150},[91,46838,108],{"class":101},[91,46840,46841],{"class":93,"line":9843},[91,46842,38101],{"class":101},[91,46844,46845,46847,46849,46851],{"class":93,"line":9849},[91,46846,30820],{"class":150},[91,46848,42514],{"class":101},[91,46850,147],{"class":97},[91,46852,37984],{"class":101},[91,46854,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883],{"class":93,"line":9876},[91,46856,42204],{"class":101},[91,46858,42525],{"class":150},[91,46860,480],{"class":101},[91,46862,34845],{"class":150},[91,46864,42213],{"class":101},[91,46866,21027],{"class":150},[91,46868,480],{"class":101},[91,46870,42461],{"class":150},[91,46872,42222],{"class":101},[91,46874,299],{"class":150},[91,46876,480],{"class":101},[91,46878,32045],{"class":150},[91,46880,42231],{"class":101},[91,46882,32045],{"class":150},[91,46884,38022],{"class":101},[91,46886,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":93,"line":9885},[91,46888,42204],{"class":101},[91,46890,42525],{"class":150},[91,46892,480],{"class":101},[91,46894,34915],{"class":150},[91,46896,42213],{"class":101},[91,46898,42134],{"class":150},[91,46900,480],{"class":101},[91,46902,34915],{"class":150},[91,46904,42222],{"class":101},[91,46906,709],{"class":150},[91,46908,480],{"class":101},[91,46910,32045],{"class":150},[91,46912,42231],{"class":101},[91,46914,32045],{"class":150},[91,46916,38022],{"class":101},[91,46918,46919,46921,46923,46925,46927],{"class":93,"line":9891},[91,46920,42588],{"class":101},[91,46922,319],{"class":150},[91,46924,480],{"class":101},[91,46926,319],{"class":150},[91,46928,42597],{"class":101},[91,46930,46931],{"class":93,"line":9899},[91,46932,38765],{"class":101},[91,46934,46935,46937,46939,46941,46943],{"class":93,"line":9904},[91,46936,38770],{"class":101},[91,46938,42608],{"class":150},[91,46940,480],{"class":101},[91,46942,179],{"class":150},[91,46944,108],{"class":101},[91,46946,46947],{"class":93,"line":16583},[91,46948,38101],{"class":101},[91,46950,46951],{"class":93,"line":16589},[91,46952,42623],{"class":160},[91,46954,46955,46957,46959,46961,46963],{"class":93,"line":16612},[91,46956,3381],{"class":97},[91,46958,38843],{"class":101},[91,46960,26018],{"class":97},[91,46962,38848],{"class":150},[91,46964,38851],{"class":101},[91,46966,46967,46969,46971],{"class":93,"line":16618},[91,46968,4620],{"class":97},[91,46970,38863],{"class":150},[91,46972,38866],{"class":101},[91,46974,46975,46977,46979,46981,46983,46985,46987,46989,46991],{"class":93,"line":16641},[91,46976,38876],{"class":101},[91,46978,42650],{"class":5195},[91,46980,147],{"class":97},[91,46982,42655],{"class":206},[91,46984,480],{"class":101},[91,46986,38879],{"class":5195},[91,46988,147],{"class":97},[91,46990,38884],{"class":206},[91,46992,108],{"class":101},[91,46994,46995],{"class":93,"line":16655},[91,46996,42670],{"class":160},[91,46998,46999],{"class":93,"line":16675},[91,47000,42675],{"class":160},[91,47002,47003],{"class":93,"line":16681},[91,47004,42680],{"class":160},[91,47006,47007],{"class":93,"line":16692},[91,47008,42685],{"class":160},[91,47010,47011],{"class":93,"line":16715},[91,47012,42690],{"class":160},[91,47014,47015],{"class":93,"line":16737},[91,47016,42695],{"class":160},[91,47018,47019,47021,47023,47025,47027,47029],{"class":93,"line":16742},[91,47020,38896],{"class":97},[91,47022,38899],{"class":101},[91,47024,38902],{"class":97},[91,47026,38905],{"class":97},[91,47028,38908],{"class":150},[91,47030,3717],{"class":101},[91,47032,47033,47035,47037],{"class":93,"line":16748},[91,47034,38920],{"class":101},[91,47036,293],{"class":150},[91,47038,108],{"class":101},[91,47040,47041,47043,47045],{"class":93,"line":16762},[91,47042,42722],{"class":97},[91,47044,38863],{"class":150},[91,47046,38939],{"class":101},[91,47048,47049,47051,47053,47055,47057],{"class":93,"line":16775},[91,47050,42731],{"class":101},[91,47052,293],{"class":150},[91,47054,480],{"class":101},[91,47056,38961],{"class":150},[91,47058,108],{"class":101},[91,47060,47061,47063,47065,47067,47069,47071],{"class":93,"line":16780},[91,47062,42744],{"class":97},[91,47064,38899],{"class":101},[91,47066,38902],{"class":97},[91,47068,38905],{"class":97},[91,47070,38908],{"class":150},[91,47072,3717],{"class":101},[91,47074,47075,47077,47079],{"class":93,"line":16794},[91,47076,42759],{"class":101},[91,47078,293],{"class":150},[91,47080,108],{"class":101},[91,47082,47083],{"class":93,"line":16799},[91,47084,35140],{"class":160},[91,47086,47087,47089,47091],{"class":93,"line":16805},[91,47088,30776],{"class":97},[91,47090,31068],{"class":1941},[91,47092,31071],{"class":101},[91,47094,47095,47097,47099,47101],{"class":93,"line":16810},[91,47096,31076],{"class":101},[91,47098,147],{"class":97},[91,47100,30798],{"class":150},[91,47102,42786],{"class":101},[91,47104,47105,47107,47109,47111],{"class":93,"line":16824},[91,47106,31076],{"class":101},[91,47108,147],{"class":97},[91,47110,30798],{"class":150},[91,47112,42797],{"class":101},[91,47114,47115,47117,47119,47121],{"class":93,"line":16829},[91,47116,31076],{"class":101},[91,47118,147],{"class":97},[91,47120,30798],{"class":150},[91,47122,42808],{"class":101},[91,47124,47125,47127,47129,47131],{"class":93,"line":16834},[91,47126,31076],{"class":101},[91,47128,147],{"class":97},[91,47130,30798],{"class":150},[91,47132,42819],{"class":101},[91,47134,47135,47137,47139,47141],{"class":93,"line":16848},[91,47136,31076],{"class":101},[91,47138,147],{"class":97},[91,47140,30798],{"class":150},[91,47142,42830],{"class":101},[91,47144,47145,47147],{"class":93,"line":16860},[91,47146,14731],{"class":97},[91,47148,31184],{"class":101},[91,47150,47151],{"class":93,"line":16865},[91,47152,2378],{"emptyLinePlaceholder":17},[91,47154,47155],{"class":93,"line":16878},[91,47156,42845],{"class":160},[91,47158,47159,47161,47163,47165,47167],{"class":93,"line":16883},[91,47160,1509],{"class":97},[91,47162,31195],{"class":150},[91,47164,2927],{"class":97},[91,47166,31200],{"class":206},[91,47168,3717],{"class":101},[91,47170,47171,47173,47175,47177,47179,47181,47183,47185,47187],{"class":93,"line":16888},[91,47172,31212],{"class":101},[91,47174,147],{"class":97},[91,47176,30426],{"class":101},[91,47178,31219],{"class":206},[91,47180,1682],{"class":97},[91,47182,31224],{"class":101},[91,47184,1679],{"class":97},[91,47186,30451],{"class":206},[91,47188,108],{"class":101},[91,47190,47191,47193,47195],{"class":93,"line":16893},[91,47192,31264],{"class":101},[91,47194,147],{"class":97},[91,47196,42886],{"class":101},[91,47198,47199,47201,47203,47205,47207,47209,47211,47213],{"class":93,"line":16906},[91,47200,31274],{"class":150},[91,47202,31277],{"class":101},[91,47204,319],{"class":150},[91,47206,480],{"class":101},[91,47208,31476],{"class":150},[91,47210,480],{"class":101},[91,47212,31476],{"class":150},[91,47214,31290],{"class":101},[21977,47216,47218],{"id":47217},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[38,47220,47221],{},"计算图片的均值与方差，用于训练中归一化处理操作",[83,47223,47225],{"className":30353,"code":47224,"language":30355,"meta":10,"style":10},"# 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",[88,47226,47227,47232,47245,47250,47256,47261,47271,47275,47280,47290,47294,47299,47309,47326,47330,47335,47347,47359,47390,47399,47409,47419,47423,47428,47443,47447,47452,47457,47462,47472,47477,47502,47506,47511,47526,47530,47543,47547,47552,47557,47562,47567,47572,47582,47592,47615,47623,47631,47639,47643,47655,47659,47664,47668,47672,47679,47699,47723,47730,47744,47749,47754,47758,47772,47776,47788],{"__ignoreMap":10},[91,47228,47229],{"class":93,"line":94},[91,47230,47231],{"class":160},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[91,47233,47234,47236,47239,47242],{"class":93,"line":11},[91,47235,30712],{"class":97},[91,47237,47238],{"class":150}," PIL",[91,47240,47241],{"class":97}," import",[91,47243,47244],{"class":101}," Image\n",[91,47246,47247],{"class":93,"line":1157},[91,47248,47249],{"class":160},"# os 用来处理文件夹和文件路径\n",[91,47251,47252,47254],{"class":93,"line":1172},[91,47253,30367],{"class":97},[91,47255,45280],{"class":101},[91,47257,47258],{"class":93,"line":1178},[91,47259,47260],{"class":160},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[91,47262,47263,47265,47267,47269],{"class":93,"line":1192},[91,47264,30367],{"class":97},[91,47266,31355],{"class":101},[91,47268,31358],{"class":97},[91,47270,31361],{"class":101},[91,47272,47273],{"class":93,"line":1198},[91,47274,2378],{"emptyLinePlaceholder":17},[91,47276,47277],{"class":93,"line":1289},[91,47278,47279],{"class":160},"# 文件夹路径，包含所有图片文件\n",[91,47281,47282,47285,47287],{"class":93,"line":1295},[91,47283,47284],{"class":101},"folder_path ",[91,47286,147],{"class":97},[91,47288,47289],{"class":206}," 'data_cat_dog'\n",[91,47291,47292],{"class":93,"line":1307},[91,47293,2378],{"emptyLinePlaceholder":17},[91,47295,47296],{"class":93,"line":1590},[91,47297,47298],{"class":160},"# 初始化累积变量\n",[91,47300,47301,47304,47306],{"class":93,"line":1595},[91,47302,47303],{"class":101},"total_pixels ",[91,47305,147],{"class":97},[91,47307,47308],{"class":150}," 0\n",[91,47310,47311,47314,47316,47319,47321,47323],{"class":93,"line":1601},[91,47312,47313],{"class":101},"sum_normalized_pixel_values ",[91,47315,147],{"class":97},[91,47317,47318],{"class":101}," np.zeros(",[91,47320,173],{"class":150},[91,47322,45783],{"class":101},[91,47324,47325],{"class":160},"# 如果是RGB图像，需要三个通道的均值和方差\n",[91,47327,47328],{"class":93,"line":1606},[91,47329,2378],{"emptyLinePlaceholder":17},[91,47331,47332],{"class":93,"line":1620},[91,47333,47334],{"class":160},"# 遍历文件夹中的图片文件\n",[91,47336,47337,47339,47342,47344],{"class":93,"line":1625},[91,47338,3003],{"class":97},[91,47340,47341],{"class":101}," root, dirs, files ",[91,47343,26018],{"class":97},[91,47345,47346],{"class":101}," os.walk(folder_path):\n",[91,47348,47349,47351,47354,47356],{"class":93,"line":1631},[91,47350,3179],{"class":97},[91,47352,47353],{"class":101}," filename ",[91,47355,26018],{"class":97},[91,47357,47358],{"class":101}," files:\n",[91,47360,47361,47363,47366,47369,47371,47374,47376,47379,47381,47384,47387],{"class":93,"line":1652},[91,47362,2475],{"class":97},[91,47364,47365],{"class":101}," filename.endswith((",[91,47367,47368],{"class":206},"'.jpg'",[91,47370,12414],{"class":101},[91,47372,47373],{"class":206},"'.jpeg'",[91,47375,12414],{"class":101},[91,47377,47378],{"class":206},"'.png'",[91,47380,12414],{"class":101},[91,47382,47383],{"class":206},"'.bmp'",[91,47385,47386],{"class":101},")):  ",[91,47388,47389],{"class":160},"# 可根据实际情况添加其他格式\n",[91,47391,47392,47394,47396],{"class":93,"line":1657},[91,47393,45648],{"class":101},[91,47395,147],{"class":97},[91,47397,47398],{"class":101}," os.path.join(root, filename)\n",[91,47400,47401,47404,47406],{"class":93,"line":1671},[91,47402,47403],{"class":101},"            image ",[91,47405,147],{"class":97},[91,47407,47408],{"class":101}," Image.open(image_path)\n",[91,47410,47411,47414,47416],{"class":93,"line":1676},[91,47412,47413],{"class":101},"            image_array ",[91,47415,147],{"class":97},[91,47417,47418],{"class":101}," np.array(image)\n",[91,47420,47421],{"class":93,"line":1705},[91,47422,2378],{"emptyLinePlaceholder":17},[91,47424,47425],{"class":93,"line":1710},[91,47426,47427],{"class":160},"            # 归一化像素值到0-1之间\n",[91,47429,47430,47433,47435,47438,47440],{"class":93,"line":1727},[91,47431,47432],{"class":101},"            normalized_image_array ",[91,47434,147],{"class":97},[91,47436,47437],{"class":101}," image_array ",[91,47439,686],{"class":97},[91,47441,47442],{"class":150}," 255.0\n",[91,47444,47445],{"class":93,"line":1732},[91,47446,2378],{"emptyLinePlaceholder":17},[91,47448,47449],{"class":93,"line":1737},[91,47450,47451],{"class":160},"            # print(image_path)\n",[91,47453,47454],{"class":93,"line":1742},[91,47455,47456],{"class":160},"            # print(normalized_image_array.shape)\n",[91,47458,47459],{"class":93,"line":1756},[91,47460,47461],{"class":160},"            # 累积归一化后的像素值和像素数量\n",[91,47463,47464,47467,47469],{"class":93,"line":1761},[91,47465,47466],{"class":101},"            total_pixels ",[91,47468,9456],{"class":97},[91,47470,47471],{"class":101}," normalized_image_array.size\n",[91,47473,47474],{"class":93,"line":2555},[91,47475,47476],{"class":160},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[91,47478,47479,47482,47484,47487,47490,47492,47494,47496,47498,47500],{"class":93,"line":2569},[91,47480,47481],{"class":101},"            sum_normalized_pixel_values ",[91,47483,9456],{"class":97},[91,47485,47486],{"class":101}," np.sum(normalized_image_array, ",[91,47488,47489],{"class":5195},"axis",[91,47491,147],{"class":97},[91,47493,102],{"class":101},[91,47495,293],{"class":150},[91,47497,12414],{"class":101},[91,47499,319],{"class":150},[91,47501,30472],{"class":101},[91,47503,47504],{"class":93,"line":2577},[91,47505,2378],{"emptyLinePlaceholder":17},[91,47507,47508],{"class":93,"line":2582},[91,47509,47510],{"class":160},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[91,47512,47513,47516,47518,47521,47523],{"class":93,"line":2588},[91,47514,47515],{"class":101},"mean ",[91,47517,147],{"class":97},[91,47519,47520],{"class":101}," sum_normalized_pixel_values ",[91,47522,686],{"class":97},[91,47524,47525],{"class":101}," total_pixels\n",[91,47527,47528],{"class":93,"line":2594},[91,47529,2378],{"emptyLinePlaceholder":17},[91,47531,47532,47535,47537,47539,47541],{"class":93,"line":2599},[91,47533,47534],{"class":101},"sum_squared_diff ",[91,47536,147],{"class":97},[91,47538,47318],{"class":101},[91,47540,173],{"class":150},[91,47542,108],{"class":101},[91,47544,47545],{"class":93,"line":7927},[91,47546,2378],{"emptyLinePlaceholder":17},[91,47548,47549],{"class":93,"line":7951},[91,47550,47551],{"class":160},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[91,47553,47554],{"class":93,"line":7956},[91,47555,47556],{"class":160},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[91,47558,47559],{"class":93,"line":7962},[91,47560,47561],{"class":160},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[91,47563,47564],{"class":93,"line":7989},[91,47565,47566],{"class":160},"# Image.open(image_path)：打开图片\n",[91,47568,47569],{"class":93,"line":7994},[91,47570,47571],{"class":160},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[91,47573,47574,47576,47578,47580],{"class":93,"line":8000},[91,47575,3003],{"class":97},[91,47577,47341],{"class":101},[91,47579,26018],{"class":97},[91,47581,47346],{"class":101},[91,47583,47584,47586,47588,47590],{"class":93,"line":8012},[91,47585,3179],{"class":97},[91,47587,47353],{"class":101},[91,47589,26018],{"class":97},[91,47591,47358],{"class":101},[91,47593,47594,47596,47598,47600,47602,47604,47606,47608,47610,47612],{"class":93,"line":8024},[91,47595,2475],{"class":97},[91,47597,47365],{"class":101},[91,47599,47368],{"class":206},[91,47601,12414],{"class":101},[91,47603,47373],{"class":206},[91,47605,12414],{"class":101},[91,47607,47378],{"class":206},[91,47609,12414],{"class":101},[91,47611,47383],{"class":206},[91,47613,47614],{"class":101},")):\n",[91,47616,47617,47619,47621],{"class":93,"line":8036},[91,47618,45648],{"class":101},[91,47620,147],{"class":97},[91,47622,47398],{"class":101},[91,47624,47625,47627,47629],{"class":93,"line":9695},[91,47626,47403],{"class":101},[91,47628,147],{"class":97},[91,47630,47408],{"class":101},[91,47632,47633,47635,47637],{"class":93,"line":9720},[91,47634,47413],{"class":101},[91,47636,147],{"class":97},[91,47638,47418],{"class":101},[91,47640,47641],{"class":93,"line":9743},[91,47642,47427],{"class":160},[91,47644,47645,47647,47649,47651,47653],{"class":93,"line":9767},[91,47646,47432],{"class":101},[91,47648,147],{"class":97},[91,47650,47437],{"class":101},[91,47652,686],{"class":97},[91,47654,47442],{"class":150},[91,47656,47657],{"class":93,"line":9772},[91,47658,47456],{"class":160},[91,47660,47661],{"class":93,"line":9777},[91,47662,47663],{"class":160},"            # print(mean.shape)\n",[91,47665,47666],{"class":93,"line":9782},[91,47667,47451],{"class":160},[91,47669,47670],{"class":93,"line":9791},[91,47671,2378],{"emptyLinePlaceholder":17},[91,47673,47674,47677],{"class":93,"line":9796},[91,47675,47676],{"class":97},"            try",[91,47678,3717],{"class":101},[91,47680,47681,47684,47686,47689,47691,47694,47696],{"class":93,"line":9802},[91,47682,47683],{"class":101},"                diff ",[91,47685,147],{"class":97},[91,47687,47688],{"class":101}," (normalized_image_array ",[91,47690,634],{"class":97},[91,47692,47693],{"class":101}," mean) ",[91,47695,10640],{"class":97},[91,47697,47698],{"class":150}," 2\n",[91,47700,47701,47704,47706,47709,47711,47713,47715,47717,47719,47721],{"class":93,"line":9823},[91,47702,47703],{"class":101},"                sum_squared_diff ",[91,47705,9456],{"class":97},[91,47707,47708],{"class":101}," np.sum(diff, ",[91,47710,47489],{"class":5195},[91,47712,147],{"class":97},[91,47714,102],{"class":101},[91,47716,293],{"class":150},[91,47718,12414],{"class":101},[91,47720,319],{"class":150},[91,47722,30472],{"class":101},[91,47724,47725,47728],{"class":93,"line":9829},[91,47726,47727],{"class":97},"            except",[91,47729,3717],{"class":101},[91,47731,47732,47735,47737,47739,47742],{"class":93,"line":9843},[91,47733,47734],{"class":150},"                print",[91,47736,102],{"class":101},[91,47738,154],{"class":97},[91,47740,47741],{"class":206},"\"捕获到自定义异常\"",[91,47743,108],{"class":101},[91,47745,47746],{"class":93,"line":9849},[91,47747,47748],{"class":160},"            # diff = (normalized_image_array - mean) ** 2\n",[91,47750,47751],{"class":93,"line":9876},[91,47752,47753],{"class":160},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[91,47755,47756],{"class":93,"line":9885},[91,47757,2378],{"emptyLinePlaceholder":17},[91,47759,47760,47763,47765,47768,47770],{"class":93,"line":9891},[91,47761,47762],{"class":101},"variance ",[91,47764,147],{"class":97},[91,47766,47767],{"class":101}," sum_squared_diff ",[91,47769,686],{"class":97},[91,47771,47525],{"class":101},[91,47773,47774],{"class":93,"line":9899},[91,47775,2378],{"emptyLinePlaceholder":17},[91,47777,47778,47780,47782,47785],{"class":93,"line":9904},[91,47779,30390],{"class":150},[91,47781,102],{"class":101},[91,47783,47784],{"class":206},"\"Mean:\"",[91,47786,47787],{"class":101},", mean)\n",[91,47789,47790,47792,47794,47797],{"class":93,"line":16583},[91,47791,30390],{"class":150},[91,47793,102],{"class":101},[91,47795,47796],{"class":206},"\"Variance:\"",[91,47798,47799],{"class":101},", variance)\n",[83,47801,47803],{"className":30353,"code":47802,"language":30355,"meta":10,"style":10},"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",[88,47804,47805,47811,47817,47827,47833,47843,47857,47867,47877,47887,47891,47901,47911,47915,47919,47927,47932,47937,47956,47960,47965,47970,47975,47980,48021,48026,48036,48041,48054,48059,48064,48069,48074,48079,48083,48088,48093,48115,48119,48151,48165,48175,48185,48189,48199,48213,48223,48233,48243,48249,48253,48257,48261,48265,48269,48277,48297,48301,48305,48309,48313,48329,48333,48337,48345,48349,48353,48361,48365,48369,48373,48381,48385,48389,48393,48401,48405,48413,48417,48425,48429,48437,48441,48449,48453,48457,48465,48469,48473,48485,48509,48523,48527,48531,48535,48543,48547,48555,48559,48567,48571,48579,48583,48591,48595,48603,48607,48619,48623,48631,48635,48643,48647,48651,48655,48659,48667,48671,48687,48691,48699,48703,48707,48711,48715,48719,48723,48727,48743,48747,48759,48763,48775,48779,48791,48795,48803,48807,48815,48819,48823,48827,48833,48837,48845,48849,48865,48869,48877,48881,48897,48909,48913,48925,48929,48933,48941,48945,48949,48957,48961,48969,48973,48981,48985,48989,49031,49073,49077,49081,49097,49101,49117,49121,49125,49133,49137,49141,49153,49191,49195,49199,49207,49211,49225,49235,49241,49247,49253,49259,49263,49267,49273,49277,49281,49289,49293,49311,49315,49319,49323,49339,49343,49347,49351,49355,49359,49379,49399,49403,49407,49411,49419,49427,49431,49447,49467,49487,49491,49496,49505,49514,49519,49524,49529,49542,49547,49556,49565,49582],{"__ignoreMap":10},[91,47806,47807,47809],{"class":93,"line":94},[91,47808,30367],{"class":97},[91,47810,31797],{"class":101},[91,47812,47813,47815],{"class":93,"line":11},[91,47814,30367],{"class":97},[91,47816,31804],{"class":101},[91,47818,47819,47821,47823,47825],{"class":93,"line":1157},[91,47820,30367],{"class":97},[91,47822,31815],{"class":101},[91,47824,31358],{"class":97},[91,47826,31820],{"class":101},[91,47828,47829,47831],{"class":93,"line":1172},[91,47830,30367],{"class":97},[91,47832,30370],{"class":101},[91,47834,47835,47837,47839,47841],{"class":93,"line":1178},[91,47836,30712],{"class":97},[91,47838,31390],{"class":101},[91,47840,30367],{"class":97},[91,47842,31837],{"class":101},[91,47844,47845,47847,47849,47851,47854],{"class":93,"line":1192},[91,47846,30712],{"class":97},[91,47848,31343],{"class":101},[91,47850,30367],{"class":97},[91,47852,47853],{"class":101}," ImageFolder ",[91,47855,47856],{"class":160},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[91,47858,47859,47861,47863,47865],{"class":93,"line":1198},[91,47860,30712],{"class":97},[91,47862,31373],{"class":101},[91,47864,30367],{"class":97},[91,47866,31378],{"class":101},[91,47868,47869,47871,47873,47875],{"class":93,"line":1289},[91,47870,30367],{"class":97},[91,47872,31390],{"class":101},[91,47874,31358],{"class":97},[91,47876,31395],{"class":101},[91,47878,47879,47881,47883,47885],{"class":93,"line":1295},[91,47880,30367],{"class":97},[91,47882,31407],{"class":101},[91,47884,31358],{"class":97},[91,47886,31412],{"class":101},[91,47888,47889],{"class":93,"line":1307},[91,47890,31882],{"class":160},[91,47892,47893,47895,47897,47899],{"class":93,"line":1590},[91,47894,30712],{"class":97},[91,47896,31889],{"class":101},[91,47898,30367],{"class":97},[91,47900,43006],{"class":101},[91,47902,47903,47905,47907,47909],{"class":93,"line":1595},[91,47904,30712],{"class":97},[91,47906,30715],{"class":101},[91,47908,30367],{"class":97},[91,47910,30720],{"class":101},[91,47912,47913],{"class":93,"line":1601},[91,47914,2378],{"emptyLinePlaceholder":17},[91,47916,47917],{"class":93,"line":1606},[91,47918,31917],{"class":160},[91,47920,47921,47923,47925],{"class":93,"line":1620},[91,47922,31922],{"class":97},[91,47924,31925],{"class":1941},[91,47926,31928],{"class":101},[91,47928,47929],{"class":93,"line":1625},[91,47930,47931],{"class":160},"    # 导入自己的数据集，并进行数据处理\n",[91,47933,47934],{"class":93,"line":1631},[91,47935,47936],{"class":160},"    # 定义数据集的路径\n",[91,47938,47939,47942,47944,47946,47948,47950,47954],{"class":93,"line":1652},[91,47940,47941],{"class":150},"    ROOT_PATH",[91,47943,147],{"class":97},[91,47945,772],{"class":97},[91,47947,353],{"class":206},[91,47949,660],{"class":150},[91,47951,47953],{"class":47952},"sA_wV","\u002Fdata\u002Ftrain",[91,47955,25108],{"class":206},[91,47957,47958],{"class":93,"line":1657},[91,47959,2378],{"emptyLinePlaceholder":17},[91,47961,47962],{"class":93,"line":1671},[91,47963,47964],{"class":160},"    # 定义归一化方法\n",[91,47966,47967],{"class":93,"line":1676},[91,47968,47969],{"class":160},"    # 这里需要先计算一下数据集的均值和方差\n",[91,47971,47972],{"class":93,"line":1705},[91,47973,47974],{"class":160},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[91,47976,47977],{"class":93,"line":1710},[91,47978,47979],{"class":160},"    # 第一个参数是均值，第二个参数是方差\n",[91,47981,47982,47985,47987,47990,47993,47995,47998,48000,48003,48006,48009,48011,48014,48016,48019],{"class":93,"line":1727},[91,47983,47984],{"class":101},"    normalize",[91,47986,147],{"class":97},[91,47988,47989],{"class":101},"transforms.Normalize([",[91,47991,47992],{"class":150},"0.162",[91,47994,480],{"class":101},[91,47996,47997],{"class":150},"0.151",[91,47999,480],{"class":101},[91,48001,48002],{"class":150},"0.138",[91,48004,48005],{"class":101},"],[",[91,48007,48008],{"class":150},"0.058",[91,48010,480],{"class":101},[91,48012,48013],{"class":150},"0.052",[91,48015,480],{"class":101},[91,48017,48018],{"class":150},"0.048",[91,48020,4635],{"class":101},[91,48022,48023],{"class":93,"line":1732},[91,48024,48025],{"class":160},"    # 定义数据集处理方法变量\n",[91,48027,48028,48031,48033],{"class":93,"line":1737},[91,48029,48030],{"class":101},"    train_transform",[91,48032,147],{"class":97},[91,48034,48035],{"class":101},"transforms.Compose([\n",[91,48037,48038],{"class":93,"line":1742},[91,48039,48040],{"class":160},"        # 调整图像大小为224*224\n",[91,48042,48043,48046,48048,48050,48052],{"class":93,"line":1756},[91,48044,48045],{"class":101},"        transforms.Resize((",[91,48047,31476],{"class":150},[91,48049,480],{"class":101},[91,48051,31476],{"class":150},[91,48053,42597],{"class":101},[91,48055,48056],{"class":93,"line":1761},[91,48057,48058],{"class":160},"        # 将图像转换为张量\n",[91,48060,48061],{"class":93,"line":2555},[91,48062,48063],{"class":101},"        transforms.ToTensor(),\n",[91,48065,48066],{"class":93,"line":2569},[91,48067,48068],{"class":101},"        normalize])\n",[91,48070,48071],{"class":93,"line":2577},[91,48072,48073],{"class":160},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[91,48075,48076],{"class":93,"line":2582},[91,48077,48078],{"class":160},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[91,48080,48081],{"class":93,"line":2588},[91,48082,2378],{"emptyLinePlaceholder":17},[91,48084,48085],{"class":93,"line":2594},[91,48086,48087],{"class":160},"    # 加载数据集\n",[91,48089,48090],{"class":93,"line":2599},[91,48091,48092],{"class":160},"    # 传入数据集路径与处理方法\n",[91,48094,48095,48097,48099,48102,48105,48107,48110,48112],{"class":93,"line":7927},[91,48096,31933],{"class":101},[91,48098,147],{"class":97},[91,48100,48101],{"class":101},"ImageFolder(",[91,48103,48104],{"class":150},"ROOT_PATH",[91,48106,480],{"class":101},[91,48108,48109],{"class":5195},"transform",[91,48111,147],{"class":97},[91,48113,48114],{"class":101},"train_transform)\n",[91,48116,48117],{"class":93,"line":7951},[91,48118,2378],{"emptyLinePlaceholder":17},[91,48120,48121,48123,48125,48127,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149],{"class":93,"line":7956},[91,48122,31985],{"class":101},[91,48124,147],{"class":97},[91,48126,31990],{"class":101},[91,48128,31993],{"class":150},[91,48130,102],{"class":101},[91,48132,31998],{"class":150},[91,48134,557],{"class":97},[91,48136,7337],{"class":150},[91,48138,32005],{"class":101},[91,48140,31993],{"class":150},[91,48142,102],{"class":101},[91,48144,32012],{"class":150},[91,48146,557],{"class":97},[91,48148,7337],{"class":150},[91,48150,32019],{"class":101},[91,48152,48153,48155,48157,48159,48161,48163],{"class":93,"line":7962},[91,48154,32024],{"class":101},[91,48156,147],{"class":97},[91,48158,32029],{"class":101},[91,48160,31512],{"class":5195},[91,48162,147],{"class":97},[91,48164,31517],{"class":101},[91,48166,48167,48169,48171,48173],{"class":93,"line":7989},[91,48168,32040],{"class":5195},[91,48170,147],{"class":97},[91,48172,299],{"class":150},[91,48174,31441],{"class":101},[91,48176,48177,48179,48181,48183],{"class":93,"line":7994},[91,48178,32052],{"class":5195},[91,48180,147],{"class":97},[91,48182,31451],{"class":150},[91,48184,31441],{"class":101},[91,48186,48187],{"class":93,"line":8000},[91,48188,32063],{"class":160},[91,48190,48191,48193,48195,48197],{"class":93,"line":8012},[91,48192,32068],{"class":5195},[91,48194,147],{"class":97},[91,48196,497],{"class":150},[91,48198,108],{"class":101},[91,48200,48201,48203,48205,48207,48209,48211],{"class":93,"line":8024},[91,48202,32079],{"class":101},[91,48204,147],{"class":97},[91,48206,31509],{"class":101},[91,48208,31512],{"class":5195},[91,48210,147],{"class":97},[91,48212,32090],{"class":101},[91,48214,48215,48217,48219,48221],{"class":93,"line":8036},[91,48216,32095],{"class":5195},[91,48218,147],{"class":97},[91,48220,299],{"class":150},[91,48222,31441],{"class":101},[91,48224,48225,48227,48229,48231],{"class":93,"line":9695},[91,48226,32106],{"class":5195},[91,48228,147],{"class":97},[91,48230,31451],{"class":150},[91,48232,31441],{"class":101},[91,48234,48235,48237,48239,48241],{"class":93,"line":9720},[91,48236,32117],{"class":5195},[91,48238,147],{"class":97},[91,48240,497],{"class":150},[91,48242,108],{"class":101},[91,48244,48245,48247],{"class":93,"line":9743},[91,48246,4068],{"class":97},[91,48248,32130],{"class":101},[91,48250,48251],{"class":93,"line":9767},[91,48252,2378],{"emptyLinePlaceholder":17},[91,48254,48255],{"class":93,"line":9772},[91,48256,32139],{"class":160},[91,48258,48259],{"class":93,"line":9777},[91,48260,32144],{"class":160},[91,48262,48263],{"class":93,"line":9782},[91,48264,2378],{"emptyLinePlaceholder":17},[91,48266,48267],{"class":93,"line":9791},[91,48268,32153],{"class":160},[91,48270,48271,48273,48275],{"class":93,"line":9796},[91,48272,31922],{"class":97},[91,48274,32160],{"class":1941},[91,48276,32163],{"class":101},[91,48278,48279,48281,48283,48285,48287,48289,48291,48293,48295],{"class":93,"line":9802},[91,48280,31212],{"class":101},[91,48282,147],{"class":97},[91,48284,30426],{"class":101},[91,48286,31219],{"class":206},[91,48288,1682],{"class":97},[91,48290,31224],{"class":101},[91,48292,1679],{"class":97},[91,48294,32182],{"class":206},[91,48296,108],{"class":101},[91,48298,48299],{"class":93,"line":9823},[91,48300,2378],{"emptyLinePlaceholder":17},[91,48302,48303],{"class":93,"line":9829},[91,48304,32197],{"class":160},[91,48306,48307],{"class":93,"line":9843},[91,48308,32202],{"class":160},[91,48310,48311],{"class":93,"line":9849},[91,48312,32207],{"class":160},[91,48314,48315,48317,48319,48321,48323,48325,48327],{"class":93,"line":9876},[91,48316,32212],{"class":101},[91,48318,147],{"class":97},[91,48320,32217],{"class":101},[91,48322,32220],{"class":5195},[91,48324,147],{"class":97},[91,48326,32225],{"class":150},[91,48328,108],{"class":101},[91,48330,48331],{"class":93,"line":9885},[91,48332,2378],{"emptyLinePlaceholder":17},[91,48334,48335],{"class":93,"line":9891},[91,48336,32236],{"class":160},[91,48338,48339,48341,48343],{"class":93,"line":9899},[91,48340,32241],{"class":101},[91,48342,147],{"class":97},[91,48344,32246],{"class":101},[91,48346,48347],{"class":93,"line":9904},[91,48348,2378],{"emptyLinePlaceholder":17},[91,48350,48351],{"class":93,"line":16583},[91,48352,32255],{"class":160},[91,48354,48355,48357,48359],{"class":93,"line":16589},[91,48356,31264],{"class":101},[91,48358,147],{"class":97},[91,48360,32264],{"class":101},[91,48362,48363],{"class":93,"line":16612},[91,48364,32269],{"class":160},[91,48366,48367],{"class":93,"line":16618},[91,48368,32274],{"class":160},[91,48370,48371],{"class":93,"line":16641},[91,48372,32279],{"class":160},[91,48374,48375,48377,48379],{"class":93,"line":16655},[91,48376,32284],{"class":101},[91,48378,147],{"class":97},[91,48380,32289],{"class":101},[91,48382,48383],{"class":93,"line":16675},[91,48384,2378],{"emptyLinePlaceholder":17},[91,48386,48387],{"class":93,"line":16681},[91,48388,32302],{"class":160},[91,48390,48391],{"class":93,"line":16692},[91,48392,32307],{"class":160},[91,48394,48395,48397,48399],{"class":93,"line":16715},[91,48396,32312],{"class":101},[91,48398,147],{"class":97},[91,48400,32317],{"class":150},[91,48402,48403],{"class":93,"line":16737},[91,48404,32322],{"class":160},[91,48406,48407,48409,48411],{"class":93,"line":16742},[91,48408,32327],{"class":101},[91,48410,147],{"class":97},[91,48412,32332],{"class":101},[91,48414,48415],{"class":93,"line":16748},[91,48416,32337],{"class":160},[91,48418,48419,48421,48423],{"class":93,"line":16762},[91,48420,32342],{"class":101},[91,48422,147],{"class":97},[91,48424,32332],{"class":101},[91,48426,48427],{"class":93,"line":16775},[91,48428,32351],{"class":160},[91,48430,48431,48433,48435],{"class":93,"line":16780},[91,48432,32356],{"class":101},[91,48434,147],{"class":97},[91,48436,32332],{"class":101},[91,48438,48439],{"class":93,"line":16794},[91,48440,32365],{"class":160},[91,48442,48443,48445,48447],{"class":93,"line":16799},[91,48444,32370],{"class":101},[91,48446,147],{"class":97},[91,48448,32332],{"class":101},[91,48450,48451],{"class":93,"line":16805},[91,48452,2378],{"emptyLinePlaceholder":17},[91,48454,48455],{"class":93,"line":16810},[91,48456,32383],{"class":160},[91,48458,48459,48461,48463],{"class":93,"line":16824},[91,48460,32388],{"class":101},[91,48462,147],{"class":97},[91,48464,32393],{"class":101},[91,48466,48467],{"class":93,"line":16829},[91,48468,2378],{"emptyLinePlaceholder":17},[91,48470,48471],{"class":93,"line":16834},[91,48472,32406],{"class":160},[91,48474,48475,48477,48479,48481,48483],{"class":93,"line":16848},[91,48476,3179],{"class":97},[91,48478,32413],{"class":101},[91,48480,26018],{"class":97},[91,48482,32418],{"class":150},[91,48484,32421],{"class":101},[91,48486,48487,48489,48491,48493,48495,48497,48499,48501,48503,48505,48507],{"class":93,"line":16860},[91,48488,32426],{"class":150},[91,48490,102],{"class":101},[91,48492,32431],{"class":206},[91,48494,32434],{"class":150},[91,48496,686],{"class":206},[91,48498,32434],{"class":150},[91,48500,353],{"class":206},[91,48502,32443],{"class":101},[91,48504,634],{"class":97},[91,48506,319],{"class":150},[91,48508,30472],{"class":101},[91,48510,48511,48513,48515,48517,48519,48521],{"class":93,"line":16865},[91,48512,32426],{"class":150},[91,48514,102],{"class":101},[91,48516,32458],{"class":206},[91,48518,557],{"class":97},[91,48520,548],{"class":150},[91,48522,108],{"class":101},[91,48524,48525],{"class":93,"line":16878},[91,48526,2378],{"emptyLinePlaceholder":17},[91,48528,48529],{"class":93,"line":16883},[91,48530,32473],{"class":160},[91,48532,48533],{"class":93,"line":16888},[91,48534,32478],{"class":160},[91,48536,48537,48539,48541],{"class":93,"line":16893},[91,48538,32483],{"class":101},[91,48540,147],{"class":97},[91,48542,32317],{"class":150},[91,48544,48545],{"class":93,"line":16906},[91,48546,32492],{"class":160},[91,48548,48549,48551,48553],{"class":93,"line":16911},[91,48550,32497],{"class":101},[91,48552,147],{"class":97},[91,48554,3063],{"class":150},[91,48556,48557],{"class":93,"line":32608},[91,48558,32506],{"class":160},[91,48560,48561,48563,48565],{"class":93,"line":32614},[91,48562,32511],{"class":101},[91,48564,147],{"class":97},[91,48566,32317],{"class":150},[91,48568,48569],{"class":93,"line":32620},[91,48570,32520],{"class":160},[91,48572,48573,48575,48577],{"class":93,"line":32626},[91,48574,32525],{"class":101},[91,48576,147],{"class":97},[91,48578,3063],{"class":150},[91,48580,48581],{"class":93,"line":32632},[91,48582,32534],{"class":160},[91,48584,48585,48587,48589],{"class":93,"line":32643},[91,48586,32539],{"class":101},[91,48588,147],{"class":97},[91,48590,3063],{"class":150},[91,48592,48593],{"class":93,"line":32649},[91,48594,32548],{"class":160},[91,48596,48597,48599,48601],{"class":93,"line":32669},[91,48598,32553],{"class":101},[91,48600,147],{"class":97},[91,48602,3063],{"class":150},[91,48604,48605],{"class":93,"line":32675},[91,48606,32562],{"class":160},[91,48608,48609,48611,48613,48615,48617],{"class":93,"line":32686},[91,48610,3381],{"class":97},[91,48612,31576],{"class":101},[91,48614,26018],{"class":97},[91,48616,31581],{"class":150},[91,48618,32575],{"class":101},[91,48620,48621],{"class":93,"line":32692},[91,48622,32580],{"class":160},[91,48624,48625,48627,48629],{"class":93,"line":32698},[91,48626,32585],{"class":101},[91,48628,147],{"class":97},[91,48630,32590],{"class":101},[91,48632,48633],{"class":93,"line":32704},[91,48634,32595],{"class":160},[91,48636,48637,48639,48641],{"class":93,"line":32710},[91,48638,32600],{"class":101},[91,48640,147],{"class":97},[91,48642,32605],{"class":101},[91,48644,48645],{"class":93,"line":32716},[91,48646,32611],{"class":160},[91,48648,48649],{"class":93,"line":32722},[91,48650,32617],{"class":101},[91,48652,48653],{"class":93,"line":32728},[91,48654,32623],{"class":160},[91,48656,48657],{"class":93,"line":32748},[91,48658,32629],{"class":160},[91,48660,48661,48663,48665],{"class":93,"line":32754},[91,48662,32635],{"class":101},[91,48664,147],{"class":97},[91,48666,32640],{"class":101},[91,48668,48669],{"class":93,"line":32770},[91,48670,32646],{"class":160},[91,48672,48673,48675,48677,48679,48681,48683,48685],{"class":93,"line":32776},[91,48674,32652],{"class":101},[91,48676,147],{"class":97},[91,48678,32657],{"class":101},[91,48680,32660],{"class":5195},[91,48682,147],{"class":97},[91,48684,319],{"class":150},[91,48686,108],{"class":101},[91,48688,48689],{"class":93,"line":32790},[91,48690,32672],{"class":160},[91,48692,48693,48695,48697],{"class":93,"line":32796},[91,48694,32678],{"class":101},[91,48696,147],{"class":97},[91,48698,32683],{"class":101},[91,48700,48701],{"class":93,"line":32811},[91,48702,32689],{"class":160},[91,48704,48705],{"class":93,"line":32817},[91,48706,32695],{"class":101},[91,48708,48709],{"class":93,"line":32826},[91,48710,32701],{"class":160},[91,48712,48713],{"class":93,"line":32832},[91,48714,32707],{"class":101},[91,48716,48717],{"class":93,"line":32841},[91,48718,32713],{"class":160},[91,48720,48721],{"class":93,"line":32847},[91,48722,32719],{"class":101},[91,48724,48725],{"class":93,"line":32853},[91,48726,32725],{"class":160},[91,48728,48729,48731,48733,48735,48737,48739,48741],{"class":93,"line":32862},[91,48730,32731],{"class":101},[91,48732,9456],{"class":97},[91,48734,32736],{"class":101},[91,48736,557],{"class":97},[91,48738,32741],{"class":101},[91,48740,293],{"class":150},[91,48742,108],{"class":101},[91,48744,48745],{"class":93,"line":32868},[91,48746,32751],{"class":160},[91,48748,48749,48751,48753,48755,48757],{"class":93,"line":32879},[91,48750,32757],{"class":101},[91,48752,9456],{"class":97},[91,48754,32762],{"class":101},[91,48756,2927],{"class":97},[91,48758,32767],{"class":101},[91,48760,48761],{"class":93,"line":32885},[91,48762,32773],{"class":160},[91,48764,48765,48767,48769,48771,48773],{"class":93,"line":32904},[91,48766,32779],{"class":101},[91,48768,9456],{"class":97},[91,48770,32741],{"class":101},[91,48772,293],{"class":150},[91,48774,108],{"class":101},[91,48776,48777],{"class":93,"line":32910},[91,48778,32793],{"class":160},[91,48780,48781,48783,48785,48787,48789],{"class":93,"line":32921},[91,48782,3381],{"class":97},[91,48784,32801],{"class":101},[91,48786,26018],{"class":97},[91,48788,31581],{"class":150},[91,48790,32808],{"class":101},[91,48792,48793],{"class":93,"line":32927},[91,48794,32814],{"class":160},[91,48796,48797,48799,48801],{"class":93,"line":32947},[91,48798,32585],{"class":101},[91,48800,147],{"class":97},[91,48802,32590],{"class":101},[91,48804,48805],{"class":93,"line":32963},[91,48806,32829],{"class":160},[91,48808,48809,48811,48813],{"class":93,"line":32969},[91,48810,32600],{"class":101},[91,48812,147],{"class":97},[91,48814,32605],{"class":101},[91,48816,48817],{"class":93,"line":32983},[91,48818,32844],{"class":160},[91,48820,48821],{"class":93,"line":32989},[91,48822,32850],{"class":101},[91,48824,48825],{"class":93,"line":32995},[91,48826,36331],{"class":160},[91,48828,48829,48831],{"class":93,"line":33006},[91,48830,32856],{"class":97},[91,48832,32859],{"class":101},[91,48834,48835],{"class":93,"line":33012},[91,48836,32865],{"class":160},[91,48838,48839,48841,48843],{"class":93,"line":33018},[91,48840,36346],{"class":101},[91,48842,147],{"class":97},[91,48844,32640],{"class":101},[91,48846,48847],{"class":93,"line":33028},[91,48848,32882],{"class":160},[91,48850,48851,48853,48855,48857,48859,48861,48863],{"class":93,"line":33034},[91,48852,36359],{"class":101},[91,48854,147],{"class":97},[91,48856,32657],{"class":101},[91,48858,32660],{"class":5195},[91,48860,147],{"class":97},[91,48862,319],{"class":150},[91,48864,108],{"class":101},[91,48866,48867],{"class":93,"line":33045},[91,48868,32907],{"class":160},[91,48870,48871,48873,48875],{"class":93,"line":33051},[91,48872,36380],{"class":101},[91,48874,147],{"class":97},[91,48876,32683],{"class":101},[91,48878,48879],{"class":93,"line":33061},[91,48880,32924],{"class":160},[91,48882,48883,48885,48887,48889,48891,48893,48895],{"class":93,"line":33066},[91,48884,36393],{"class":101},[91,48886,9456],{"class":97},[91,48888,36398],{"class":101},[91,48890,557],{"class":97},[91,48892,32741],{"class":101},[91,48894,293],{"class":150},[91,48896,108],{"class":101},[91,48898,48899,48901,48903,48905,48907],{"class":93,"line":33072},[91,48900,36411],{"class":101},[91,48902,9456],{"class":97},[91,48904,32762],{"class":101},[91,48906,2927],{"class":97},[91,48908,32767],{"class":101},[91,48910,48911],{"class":93,"line":33121},[91,48912,36424],{"class":160},[91,48914,48915,48917,48919,48921,48923],{"class":93,"line":33168},[91,48916,36429],{"class":101},[91,48918,9456],{"class":97},[91,48920,32741],{"class":101},[91,48922,293],{"class":150},[91,48924,108],{"class":101},[91,48926,48927],{"class":93,"line":33173},[91,48928,32986],{"class":160},[91,48930,48931],{"class":93,"line":33179},[91,48932,32992],{"class":160},[91,48934,48935,48937,48939],{"class":93,"line":33198},[91,48936,32998],{"class":101},[91,48938,686],{"class":97},[91,48940,33003],{"class":101},[91,48942,48943],{"class":93,"line":33204},[91,48944,33009],{"class":160},[91,48946,48947],{"class":93,"line":33224},[91,48948,33015],{"class":160},[91,48950,48951,48953,48955],{"class":93,"line":33230},[91,48952,33021],{"class":101},[91,48954,686],{"class":97},[91,48956,33003],{"class":101},[91,48958,48959],{"class":93,"line":33236},[91,48960,33031],{"class":160},[91,48962,48963,48965,48967],{"class":93,"line":33246},[91,48964,33037],{"class":101},[91,48966,686],{"class":97},[91,48968,33042],{"class":101},[91,48970,48971],{"class":93,"line":33251},[91,48972,33048],{"class":160},[91,48974,48975,48977,48979],{"class":93,"line":33257},[91,48976,33054],{"class":101},[91,48978,686],{"class":97},[91,48980,33042],{"class":101},[91,48982,48983],{"class":93,"line":33273},[91,48984,2378],{"emptyLinePlaceholder":17},[91,48986,48987],{"class":93,"line":33318},[91,48988,33069],{"class":160},[91,48990,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029],{"class":93,"line":33324},[91,48992,32426],{"class":150},[91,48994,102],{"class":101},[91,48996,3570],{"class":206},[91,48998,32434],{"class":150},[91,49000,33083],{"class":206},[91,49002,998],{"class":150},[91,49004,33088],{"class":97},[91,49006,1048],{"class":150},[91,49008,33093],{"class":206},[91,49010,998],{"class":150},[91,49012,33088],{"class":97},[91,49014,1048],{"class":150},[91,49016,3570],{"class":206},[91,49018,33104],{"class":101},[91,49020,634],{"class":97},[91,49022,319],{"class":150},[91,49024,33111],{"class":101},[91,49026,634],{"class":97},[91,49028,319],{"class":150},[91,49030,33118],{"class":101},[91,49032,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071],{"class":93,"line":33330},[91,49034,32426],{"class":150},[91,49036,102],{"class":101},[91,49038,3570],{"class":206},[91,49040,32434],{"class":150},[91,49042,33132],{"class":206},[91,49044,998],{"class":150},[91,49046,33088],{"class":97},[91,49048,1048],{"class":150},[91,49050,33141],{"class":206},[91,49052,998],{"class":150},[91,49054,33088],{"class":97},[91,49056,1048],{"class":150},[91,49058,3570],{"class":206},[91,49060,33152],{"class":101},[91,49062,634],{"class":97},[91,49064,319],{"class":150},[91,49066,33159],{"class":101},[91,49068,634],{"class":97},[91,49070,319],{"class":150},[91,49072,33118],{"class":101},[91,49074,49075],{"class":93,"line":33336},[91,49076,2378],{"emptyLinePlaceholder":17},[91,49078,49079],{"class":93,"line":33347},[91,49080,33176],{"class":160},[91,49082,49083,49085,49087,49089,49091,49093,49095],{"class":93,"line":33353},[91,49084,2475],{"class":97},[91,49086,33184],{"class":101},[91,49088,634],{"class":97},[91,49090,319],{"class":150},[91,49092,1042],{"class":101},[91,49094,1062],{"class":97},[91,49096,33195],{"class":101},[91,49098,49099],{"class":93,"line":33359},[91,49100,33201],{"class":160},[91,49102,49103,49105,49107,49109,49111,49113,49115],{"class":93,"line":33365},[91,49104,33207],{"class":101},[91,49106,141],{"class":150},[91,49108,147],{"class":97},[91,49110,33214],{"class":101},[91,49112,634],{"class":97},[91,49114,319],{"class":150},[91,49116,33221],{"class":101},[91,49118,49119],{"class":93,"line":33383},[91,49120,33227],{"class":160},[91,49122,49123],{"class":93,"line":33397},[91,49124,33233],{"class":160},[91,49126,49127,49129,49131],{"class":93,"line":33406},[91,49128,33239],{"class":101},[91,49130,147],{"class":97},[91,49132,32289],{"class":101},[91,49134,49135],{"class":93,"line":33415},[91,49136,2378],{"emptyLinePlaceholder":17},[91,49138,49139],{"class":93,"line":33424},[91,49140,33254],{"class":160},[91,49142,49143,49145,49147,49149,49151],{"class":93,"line":33433},[91,49144,33260],{"class":101},[91,49146,147],{"class":97},[91,49148,33265],{"class":101},[91,49150,634],{"class":97},[91,49152,33270],{"class":101},[91,49154,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189],{"class":93,"line":33439},[91,49156,32426],{"class":150},[91,49158,102],{"class":101},[91,49160,33280],{"class":206},[91,49162,998],{"class":150},[91,49164,33285],{"class":97},[91,49166,1048],{"class":150},[91,49168,646],{"class":206},[91,49170,998],{"class":150},[91,49172,33285],{"class":97},[91,49174,1048],{"class":150},[91,49176,33298],{"class":206},[91,49178,33301],{"class":101},[91,49180,33304],{"class":97},[91,49182,1009],{"class":150},[91,49184,33309],{"class":101},[91,49186,430],{"class":97},[91,49188,1009],{"class":150},[91,49190,30472],{"class":101},[91,49192,49193],{"class":93,"line":33445},[91,49194,36708],{"class":160},[91,49196,49197],{"class":93,"line":33453},[91,49198,36713],{"class":160},[91,49200,49201,49203,49205],{"class":93,"line":33458},[91,49202,36718],{"class":101},[91,49204,33342],{"class":206},[91,49206,108],{"class":101},[91,49208,49209],{"class":93,"line":33464},[91,49210,33362],{"class":160},[91,49212,49213,49215,49217,49219,49221,49223],{"class":93,"line":33475},[91,49214,33368],{"class":101},[91,49216,147],{"class":97},[91,49218,33373],{"class":101},[91,49220,33376],{"class":5195},[91,49222,147],{"class":97},[91,49224,1524],{"class":101},[91,49226,49227,49229,49231,49233],{"class":93,"line":33481},[91,49228,33386],{"class":206},[91,49230,961],{"class":101},[91,49232,33391],{"class":150},[91,49234,33394],{"class":101},[91,49236,49237,49239],{"class":93,"line":33501},[91,49238,33400],{"class":206},[91,49240,33403],{"class":101},[91,49242,49243,49245],{"class":93,"line":33507},[91,49244,33409],{"class":206},[91,49246,33412],{"class":101},[91,49248,49249,49251],{"class":93,"line":33513},[91,49250,33418],{"class":206},[91,49252,33421],{"class":101},[91,49254,49255,49257],{"class":93,"line":33519},[91,49256,33427],{"class":206},[91,49258,33430],{"class":101},[91,49260,49261],{"class":93,"line":33536},[91,49262,33436],{"class":101},[91,49264,49265],{"class":93,"line":33542},[91,49266,33442],{"class":160},[91,49268,49269,49271],{"class":93,"line":33548},[91,49270,4068],{"class":97},[91,49272,33450],{"class":101},[91,49274,49275],{"class":93,"line":33554},[91,49276,2378],{"emptyLinePlaceholder":17},[91,49278,49279],{"class":93,"line":33560},[91,49280,33461],{"class":160},[91,49282,49283,49285,49287],{"class":93,"line":33566},[91,49284,31922],{"class":97},[91,49286,33469],{"class":1941},[91,49288,33472],{"class":101},[91,49290,49291],{"class":93,"line":33593},[91,49292,33478],{"class":160},[91,49294,49295,49297,49299,49301,49303,49305,49307,49309],{"class":93,"line":33617},[91,49296,33484],{"class":101},[91,49298,31668],{"class":5195},[91,49300,147],{"class":97},[91,49302,102],{"class":101},[91,49304,600],{"class":150},[91,49306,480],{"class":101},[91,49308,395],{"class":150},[91,49310,30472],{"class":101},[91,49312,49313],{"class":93,"line":33623},[91,49314,33504],{"class":160},[91,49316,49317],{"class":93,"line":33629},[91,49318,33510],{"class":160},[91,49320,49321],{"class":93,"line":33635},[91,49322,33516],{"class":160},[91,49324,49325,49327,49329,49331,49333,49335,49337],{"class":93,"line":33646},[91,49326,31702],{"class":101},[91,49328,319],{"class":150},[91,49330,480],{"class":101},[91,49332,179],{"class":150},[91,49334,480],{"class":101},[91,49336,319],{"class":150},[91,49338,108],{"class":101},[91,49340,49341],{"class":93,"line":33657},[91,49342,33539],{"class":160},[91,49344,49345],{"class":93,"line":33663},[91,49346,33545],{"class":160},[91,49348,49349],{"class":93,"line":33680},[91,49350,33551],{"class":160},[91,49352,49353],{"class":93,"line":33703},[91,49354,33557],{"class":160},[91,49356,49357],{"class":93,"line":33726},[91,49358,33563],{"class":160},[91,49360,49361,49363,49365,49367,49369,49371,49373,49375,49377],{"class":93,"line":33732},[91,49362,33569],{"class":101},[91,49364,33572],{"class":206},[91,49366,33575],{"class":101},[91,49368,33578],{"class":206},[91,49370,480],{"class":101},[91,49372,33583],{"class":5195},[91,49374,147],{"class":97},[91,49376,33588],{"class":206},[91,49378,108],{"class":101},[91,49380,49381,49383,49385,49387,49389,49391,49393,49395,49397],{"class":93,"line":33737},[91,49382,33569],{"class":101},[91,49384,33572],{"class":206},[91,49386,33600],{"class":101},[91,49388,33603],{"class":206},[91,49390,480],{"class":101},[91,49392,33583],{"class":5195},[91,49394,147],{"class":97},[91,49396,33612],{"class":206},[91,49398,108],{"class":101},[91,49400,49401],{"class":93,"line":33746},[91,49402,33620],{"class":160},[91,49404,49405],{"class":93,"line":33756},[91,49406,33626],{"class":101},[91,49408,49409],{"class":93,"line":33762},[91,49410,33632],{"class":160},[91,49412,49413,49415,49417],{"class":93,"line":33767},[91,49414,33638],{"class":101},[91,49416,33641],{"class":206},[91,49418,108],{"class":101},[91,49420,49421,49423,49425],{"class":93,"line":33773},[91,49422,33649],{"class":101},[91,49424,33652],{"class":206},[91,49426,108],{"class":101},[91,49428,49429],{"class":93,"line":33786},[91,49430,33660],{"class":160},[91,49432,49433,49435,49437,49439,49441,49443,49445],{"class":93,"line":33792},[91,49434,31702],{"class":101},[91,49436,319],{"class":150},[91,49438,480],{"class":101},[91,49440,179],{"class":150},[91,49442,480],{"class":101},[91,49444,179],{"class":150},[91,49446,108],{"class":101},[91,49448,49449,49451,49453,49455,49457,49459,49461,49463,49465],{"class":93,"line":33803},[91,49450,33569],{"class":101},[91,49452,33572],{"class":206},[91,49454,33687],{"class":101},[91,49456,33578],{"class":206},[91,49458,480],{"class":101},[91,49460,33583],{"class":5195},[91,49462,147],{"class":97},[91,49464,33698],{"class":206},[91,49466,108],{"class":101},[91,49468,49469,49471,49473,49475,49477,49479,49481,49483,49485],{"class":93,"line":33814},[91,49470,33569],{"class":101},[91,49472,33572],{"class":206},[91,49474,33710],{"class":101},[91,49476,33603],{"class":206},[91,49478,480],{"class":101},[91,49480,33583],{"class":5195},[91,49482,147],{"class":97},[91,49484,33721],{"class":206},[91,49486,108],{"class":101},[91,49488,49489],{"class":93,"line":33833},[91,49490,33729],{"class":160},[91,49492,49494],{"class":93,"line":49493},219,[91,49495,33626],{"class":101},[91,49497,49499,49501,49503],{"class":93,"line":49498},220,[91,49500,33638],{"class":101},[91,49502,33572],{"class":206},[91,49504,108],{"class":101},[91,49506,49508,49510,49512],{"class":93,"line":49507},221,[91,49509,33649],{"class":101},[91,49511,33751],{"class":206},[91,49513,108],{"class":101},[91,49515,49517],{"class":93,"line":49516},222,[91,49518,33759],{"class":101},[91,49520,49522],{"class":93,"line":49521},223,[91,49523,2378],{"emptyLinePlaceholder":17},[91,49525,49527],{"class":93,"line":49526},224,[91,49528,33770],{"class":160},[91,49530,49532,49534,49536,49538,49540],{"class":93,"line":49531},225,[91,49533,1509],{"class":97},[91,49535,31195],{"class":150},[91,49537,2927],{"class":97},[91,49539,31200],{"class":206},[91,49541,3717],{"class":101},[91,49543,49545],{"class":93,"line":49544},226,[91,49546,33789],{"class":160},[91,49548,49550,49552,49554],{"class":93,"line":49549},227,[91,49551,44521],{"class":101},[91,49553,147],{"class":97},[91,49555,44526],{"class":101},[91,49557,49559,49561,49563],{"class":93,"line":49558},228,[91,49560,33806],{"class":101},[91,49562,147],{"class":97},[91,49564,33811],{"class":101},[91,49566,49568,49570,49572,49574,49576,49578,49580],{"class":93,"line":49567},229,[91,49569,33368],{"class":101},[91,49571,147],{"class":97},[91,49573,44543],{"class":101},[91,49575,33824],{"class":5195},[91,49577,147],{"class":97},[91,49579,1009],{"class":150},[91,49581,108],{"class":101},[91,49583,49585],{"class":93,"line":49584},230,[91,49586,33836],{"class":101},[21977,49588,49590],{"id":49589},"_242测试代码","2.4.2.测试代码",[38,49592,49593],{},"使用测试集进行测试与推理",[83,49595,49597],{"className":30353,"code":49596,"language":30355,"meta":10,"style":10},"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",[88,49598,49599,49605,49615,49625,49636,49646,49650,49654,49662,49667,49671,49688,49692,49696,49700,49704,49708,49740,49744,49752,49756,49768,49772,49776,49780,49784,49788,49792,49796,49800,49818,49832,49836,49846,49856,49866,49872,49876,49880,49888,49892,49908,49916,49920,49924,49932,49940,49944,49948,49952,49956,49962,49966,49976,49984,49992,49996,50000,50004,50012,50016,50032,50036,50040,50044,50056,50060,50072,50076,50080,50092,50096,50106,50110,50114,50126,50130,50138,50142,50146,50154,50158,50166,50170,50174,50178,50182,50186,50202,50210,50214,50218,50236,50242,50246,50256,50264,50272,50276,50280,50284,50288,50296,50300,50316,50320,50328,50336],{"__ignoreMap":10},[91,49600,49601,49603],{"class":93,"line":94},[91,49602,30367],{"class":97},[91,49604,30370],{"class":101},[91,49606,49607,49609,49611,49613],{"class":93,"line":11},[91,49608,30367],{"class":97},[91,49610,31390],{"class":101},[91,49612,31358],{"class":97},[91,49614,31395],{"class":101},[91,49616,49617,49619,49621,49623],{"class":93,"line":1157},[91,49618,30712],{"class":97},[91,49620,31373],{"class":101},[91,49622,30367],{"class":97},[91,49624,31378],{"class":101},[91,49626,49627,49629,49631,49633],{"class":93,"line":1172},[91,49628,30712],{"class":97},[91,49630,31343],{"class":101},[91,49632,30367],{"class":97},[91,49634,49635],{"class":101}," ImageFolder\n",[91,49637,49638,49640,49642,49644],{"class":93,"line":1178},[91,49639,30712],{"class":97},[91,49641,31889],{"class":101},[91,49643,30367],{"class":97},[91,49645,44615],{"class":101},[91,49647,49648],{"class":93,"line":1192},[91,49649,2378],{"emptyLinePlaceholder":17},[91,49651,49652],{"class":93,"line":1198},[91,49653,33926],{"class":160},[91,49655,49656,49658,49660],{"class":93,"line":1289},[91,49657,31922],{"class":97},[91,49659,33933],{"class":1941},[91,49661,31928],{"class":101},[91,49663,49664],{"class":93,"line":1295},[91,49665,49666],{"class":160},"   # 导入自己的数据集，并进行数据处理\n",[91,49668,49669],{"class":93,"line":1307},[91,49670,47936],{"class":160},[91,49672,49673,49675,49677,49679,49681,49683,49686],{"class":93,"line":1590},[91,49674,47941],{"class":150},[91,49676,147],{"class":97},[91,49678,772],{"class":97},[91,49680,353],{"class":206},[91,49682,660],{"class":150},[91,49684,49685],{"class":47952},"\u002Fdata\u002Ftest",[91,49687,25108],{"class":206},[91,49689,49690],{"class":93,"line":1595},[91,49691,2378],{"emptyLinePlaceholder":17},[91,49693,49694],{"class":93,"line":1601},[91,49695,47964],{"class":160},[91,49697,49698],{"class":93,"line":1606},[91,49699,47969],{"class":160},[91,49701,49702],{"class":93,"line":1620},[91,49703,47974],{"class":160},[91,49705,49706],{"class":93,"line":1625},[91,49707,47979],{"class":160},[91,49709,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738],{"class":93,"line":1631},[91,49711,47984],{"class":101},[91,49713,147],{"class":97},[91,49715,47989],{"class":101},[91,49717,47992],{"class":150},[91,49719,480],{"class":101},[91,49721,47997],{"class":150},[91,49723,480],{"class":101},[91,49725,48002],{"class":150},[91,49727,48005],{"class":101},[91,49729,48008],{"class":150},[91,49731,480],{"class":101},[91,49733,48013],{"class":150},[91,49735,480],{"class":101},[91,49737,48018],{"class":150},[91,49739,4635],{"class":101},[91,49741,49742],{"class":93,"line":1652},[91,49743,48025],{"class":160},[91,49745,49746,49748,49750],{"class":93,"line":1657},[91,49747,48030],{"class":101},[91,49749,147],{"class":97},[91,49751,48035],{"class":101},[91,49753,49754],{"class":93,"line":1671},[91,49755,48040],{"class":160},[91,49757,49758,49760,49762,49764,49766],{"class":93,"line":1676},[91,49759,48045],{"class":101},[91,49761,31476],{"class":150},[91,49763,480],{"class":101},[91,49765,31476],{"class":150},[91,49767,42597],{"class":101},[91,49769,49770],{"class":93,"line":1705},[91,49771,48058],{"class":160},[91,49773,49774],{"class":93,"line":1710},[91,49775,48063],{"class":101},[91,49777,49778],{"class":93,"line":1727},[91,49779,48068],{"class":101},[91,49781,49782],{"class":93,"line":1732},[91,49783,48073],{"class":160},[91,49785,49786],{"class":93,"line":1737},[91,49787,48078],{"class":160},[91,49789,49790],{"class":93,"line":1742},[91,49791,2378],{"emptyLinePlaceholder":17},[91,49793,49794],{"class":93,"line":1756},[91,49795,48087],{"class":160},[91,49797,49798],{"class":93,"line":1761},[91,49799,48092],{"class":160},[91,49801,49802,49804,49806,49808,49810,49812,49814,49816],{"class":93,"line":2555},[91,49803,33940],{"class":101},[91,49805,147],{"class":97},[91,49807,48101],{"class":101},[91,49809,48104],{"class":150},[91,49811,480],{"class":101},[91,49813,48109],{"class":5195},[91,49815,147],{"class":97},[91,49817,48114],{"class":101},[91,49819,49820,49822,49824,49826,49828,49830],{"class":93,"line":2569},[91,49821,33997],{"class":101},[91,49823,147],{"class":97},[91,49825,31509],{"class":101},[91,49827,31512],{"class":5195},[91,49829,147],{"class":97},[91,49831,34008],{"class":101},[91,49833,49834],{"class":93,"line":2577},[91,49835,34013],{"class":160},[91,49837,49838,49840,49842,49844],{"class":93,"line":2582},[91,49839,34018],{"class":5195},[91,49841,147],{"class":97},[91,49843,319],{"class":150},[91,49845,31441],{"class":101},[91,49847,49848,49850,49852,49854],{"class":93,"line":2588},[91,49849,34029],{"class":5195},[91,49851,147],{"class":97},[91,49853,31451],{"class":150},[91,49855,31441],{"class":101},[91,49857,49858,49860,49862,49864],{"class":93,"line":2594},[91,49859,34040],{"class":5195},[91,49861,147],{"class":97},[91,49863,293],{"class":150},[91,49865,108],{"class":101},[91,49867,49868,49870],{"class":93,"line":2599},[91,49869,4068],{"class":97},[91,49871,34053],{"class":101},[91,49873,49874],{"class":93,"line":7927},[91,49875,2378],{"emptyLinePlaceholder":17},[91,49877,49878],{"class":93,"line":7951},[91,49879,34062],{"class":160},[91,49881,49882,49884,49886],{"class":93,"line":7956},[91,49883,31922],{"class":97},[91,49885,34069],{"class":1941},[91,49887,34072],{"class":101},[91,49889,49890],{"class":93,"line":7962},[91,49891,34077],{"class":160},[91,49893,49894,49896,49898,49900,49902,49904,49906],{"class":93,"line":7989},[91,49895,31212],{"class":101},[91,49897,147],{"class":97},[91,49899,31219],{"class":206},[91,49901,1682],{"class":97},[91,49903,31224],{"class":101},[91,49905,1679],{"class":97},[91,49907,34094],{"class":206},[91,49909,49910,49912,49914],{"class":93,"line":7994},[91,49911,31264],{"class":101},[91,49913,147],{"class":97},[91,49915,32264],{"class":101},[91,49917,49918],{"class":93,"line":8000},[91,49919,2378],{"emptyLinePlaceholder":17},[91,49921,49922],{"class":93,"line":8012},[91,49923,34111],{"class":160},[91,49925,49926,49928,49930],{"class":93,"line":8024},[91,49927,34116],{"class":101},[91,49929,147],{"class":97},[91,49931,32317],{"class":150},[91,49933,49934,49936,49938],{"class":93,"line":8036},[91,49935,34125],{"class":101},[91,49937,147],{"class":97},[91,49939,3063],{"class":150},[91,49941,49942],{"class":93,"line":9695},[91,49943,2378],{"emptyLinePlaceholder":17},[91,49945,49946],{"class":93,"line":9720},[91,49947,34138],{"class":160},[91,49949,49950],{"class":93,"line":9743},[91,49951,34143],{"class":160},[91,49953,49954],{"class":93,"line":9767},[91,49955,34148],{"class":160},[91,49957,49958,49960],{"class":93,"line":9772},[91,49959,34153],{"class":97},[91,49961,32859],{"class":101},[91,49963,49964],{"class":93,"line":9777},[91,49965,34160],{"class":160},[91,49967,49968,49970,49972,49974],{"class":93,"line":9782},[91,49969,3381],{"class":97},[91,49971,34167],{"class":101},[91,49973,26018],{"class":97},[91,49975,34172],{"class":101},[91,49977,49978,49980,49982],{"class":93,"line":9791},[91,49979,34177],{"class":101},[91,49981,147],{"class":97},[91,49983,34182],{"class":101},[91,49985,49986,49988,49990],{"class":93,"line":9796},[91,49987,34187],{"class":101},[91,49989,147],{"class":97},[91,49991,34192],{"class":101},[91,49993,49994],{"class":93,"line":9802},[91,49995,34197],{"class":160},[91,49997,49998],{"class":93,"line":9823},[91,49999,32850],{"class":101},[91,50001,50002],{"class":93,"line":9829},[91,50003,34206],{"class":160},[91,50005,50006,50008,50010],{"class":93,"line":9843},[91,50007,32635],{"class":101},[91,50009,147],{"class":97},[91,50011,34215],{"class":101},[91,50013,50014],{"class":93,"line":9849},[91,50015,34220],{"class":160},[91,50017,50018,50020,50022,50024,50026,50028,50030],{"class":93,"line":9876},[91,50019,32652],{"class":101},[91,50021,147],{"class":97},[91,50023,32657],{"class":101},[91,50025,32660],{"class":5195},[91,50027,147],{"class":97},[91,50029,319],{"class":150},[91,50031,108],{"class":101},[91,50033,50034],{"class":93,"line":9885},[91,50035,34241],{"class":160},[91,50037,50038],{"class":93,"line":9891},[91,50039,34246],{"class":160},[91,50041,50042],{"class":93,"line":9899},[91,50043,34251],{"class":160},[91,50045,50046,50048,50050,50052,50054],{"class":93,"line":9904},[91,50047,34256],{"class":101},[91,50049,9456],{"class":97},[91,50051,32762],{"class":101},[91,50053,2927],{"class":97},[91,50055,34265],{"class":101},[91,50057,50058],{"class":93,"line":16583},[91,50059,34270],{"class":160},[91,50061,50062,50064,50066,50068,50070],{"class":93,"line":16589},[91,50063,34275],{"class":101},[91,50065,9456],{"class":97},[91,50067,34280],{"class":101},[91,50069,293],{"class":150},[91,50071,108],{"class":101},[91,50073,50074],{"class":93,"line":16612},[91,50075,2378],{"emptyLinePlaceholder":17},[91,50077,50078],{"class":93,"line":16618},[91,50079,34293],{"class":160},[91,50081,50082,50084,50086,50088,50090],{"class":93,"line":16641},[91,50083,34298],{"class":101},[91,50085,147],{"class":97},[91,50087,34303],{"class":101},[91,50089,686],{"class":97},[91,50091,34308],{"class":101},[91,50093,50094],{"class":93,"line":16655},[91,50095,34313],{"class":160},[91,50097,50098,50100,50102,50104],{"class":93,"line":16675},[91,50099,32426],{"class":150},[91,50101,102],{"class":101},[91,50103,34322],{"class":206},[91,50105,34325],{"class":101},[91,50107,50108],{"class":93,"line":16681},[91,50109,2378],{"emptyLinePlaceholder":17},[91,50111,50112],{"class":93,"line":16692},[91,50113,34334],{"class":160},[91,50115,50116,50118,50120,50122,50124],{"class":93,"line":16715},[91,50117,1509],{"class":97},[91,50119,31195],{"class":150},[91,50121,2927],{"class":97},[91,50123,31200],{"class":206},[91,50125,3717],{"class":101},[91,50127,50128],{"class":93,"line":16737},[91,50129,34351],{"class":160},[91,50131,50132,50134,50136],{"class":93,"line":16742},[91,50133,31264],{"class":101},[91,50135,147],{"class":97},[91,50137,44526],{"class":101},[91,50139,50140],{"class":93,"line":16748},[91,50141,34364],{"class":160},[91,50143,50144],{"class":93,"line":16762},[91,50145,34369],{"class":160},[91,50147,50148,50150,50152],{"class":93,"line":16775},[91,50149,34374],{"class":101},[91,50151,34377],{"class":206},[91,50153,30472],{"class":101},[91,50155,50156],{"class":93,"line":16780},[91,50157,34384],{"class":160},[91,50159,50160,50162,50164],{"class":93,"line":16794},[91,50161,33997],{"class":101},[91,50163,147],{"class":97},[91,50165,34393],{"class":101},[91,50167,50168],{"class":93,"line":16799},[91,50169,34398],{"class":160},[91,50171,50172],{"class":93,"line":16805},[91,50173,34403],{"class":101},[91,50175,50176],{"class":93,"line":16810},[91,50177,2378],{"emptyLinePlaceholder":17},[91,50179,50180],{"class":93,"line":16824},[91,50181,34412],{"class":160},[91,50183,50184],{"class":93,"line":16829},[91,50185,34417],{"class":160},[91,50187,50188,50190,50192,50194,50196,50198,50200],{"class":93,"line":16834},[91,50189,31212],{"class":101},[91,50191,147],{"class":97},[91,50193,31219],{"class":206},[91,50195,1682],{"class":97},[91,50197,31224],{"class":101},[91,50199,1679],{"class":97},[91,50201,34094],{"class":206},[91,50203,50204,50206,50208],{"class":93,"line":16848},[91,50205,31264],{"class":101},[91,50207,147],{"class":97},[91,50209,32264],{"class":101},[91,50211,50212],{"class":93,"line":16860},[91,50213,34446],{"class":160},[91,50215,50216],{"class":93,"line":16865},[91,50217,34451],{"class":160},[91,50219,50220,50222,50224,50226,50229,50231,50234],{"class":93,"line":16878},[91,50221,34456],{"class":101},[91,50223,147],{"class":97},[91,50225,992],{"class":101},[91,50227,50228],{"class":206},"'猫'",[91,50230,480],{"class":101},[91,50232,50233],{"class":206},"'狗'",[91,50235,33221],{"class":101},[91,50237,50238,50240],{"class":93,"line":16883},[91,50239,34153],{"class":97},[91,50241,32859],{"class":101},[91,50243,50244],{"class":93,"line":16888},[91,50245,34521],{"class":160},[91,50247,50248,50250,50252,50254],{"class":93,"line":16893},[91,50249,3381],{"class":97},[91,50251,34528],{"class":101},[91,50253,26018],{"class":97},[91,50255,34172],{"class":101},[91,50257,50258,50260,50262],{"class":93,"line":16906},[91,50259,32585],{"class":101},[91,50261,147],{"class":97},[91,50263,32590],{"class":101},[91,50265,50266,50268,50270],{"class":93,"line":16911},[91,50267,32600],{"class":101},[91,50269,147],{"class":97},[91,50271,32605],{"class":101},[91,50273,50274],{"class":93,"line":32608},[91,50275,2378],{"emptyLinePlaceholder":17},[91,50277,50278],{"class":93,"line":32614},[91,50279,34557],{"class":160},[91,50281,50282],{"class":93,"line":32620},[91,50283,32850],{"class":101},[91,50285,50286],{"class":93,"line":32626},[91,50287,34566],{"class":160},[91,50289,50290,50292,50294],{"class":93,"line":32632},[91,50291,32635],{"class":101},[91,50293,147],{"class":97},[91,50295,32640],{"class":101},[91,50297,50298],{"class":93,"line":32643},[91,50299,34579],{"class":160},[91,50301,50302,50304,50306,50308,50310,50312,50314],{"class":93,"line":32649},[91,50303,32652],{"class":101},[91,50305,147],{"class":97},[91,50307,32657],{"class":101},[91,50309,32660],{"class":5195},[91,50311,147],{"class":97},[91,50313,319],{"class":150},[91,50315,108],{"class":101},[91,50317,50318],{"class":93,"line":32669},[91,50319,34600],{"class":160},[91,50321,50322,50324,50326],{"class":93,"line":32675},[91,50323,34605],{"class":101},[91,50325,147],{"class":97},[91,50327,34610],{"class":101},[91,50329,50330,50332,50334],{"class":93,"line":32686},[91,50331,34615],{"class":101},[91,50333,147],{"class":97},[91,50335,34620],{"class":101},[91,50337,50338,50340,50342,50344,50346,50348,50350,50352],{"class":93,"line":32692},[91,50339,34625],{"class":150},[91,50341,102],{"class":101},[91,50343,34630],{"class":206},[91,50345,34633],{"class":101},[91,50347,34636],{"class":206},[91,50349,480],{"class":101},[91,50351,34641],{"class":206},[91,50353,34644],{"class":101},[5105,50355,50356],{},"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":10,"searchDepth":11,"depth":11,"links":50358},[50359,50360,50361,50362],{"id":30566,"depth":1157,"text":30567},{"id":37814,"depth":1157,"text":37815},{"id":41247,"depth":1157,"text":41248},{"id":45256,"depth":1157,"text":45257},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30558,"description":13},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50369,"title":50370,"body":50371,"description":13,"extension":14,"meta":50378,"navigation":17,"path":50379,"seo":50380,"stem":50381,"__hash__":50382},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50372,"toc":50376},[50373],[29,50374,50370],{"id":50375},"_3yolo模型学习",{"title":10,"searchDepth":11,"depth":11,"links":50377},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50370,"description":13},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50384,"title":50385,"body":50386,"description":50393,"extension":14,"meta":50394,"navigation":17,"path":50396,"seo":50397,"stem":50398,"__hash__":50399},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50387,"toc":50391},[50388],[38,50389,50390],{},"yolo模型还未补充",{"title":10,"searchDepth":11,"depth":11,"links":50392},[],"深度学习学习",{"category":50395},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50385,"description":50393},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50401,"title":50402,"body":50403,"description":13,"extension":14,"meta":50428,"navigation":17,"path":50429,"seo":50430,"stem":50431,"__hash__":50432},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50404,"toc":50426},[50405,50408,50411,50416,50423],[29,50406,50402],{"id":50407},"_1工具",[38,50409,50410],{},"提示错误插件：有问题会提前报错",[38,50412,50413],{},[1440,50414],{"alt":10,"src":50415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[38,50417,50418],{},[340,50419,50422],{"href":50420,"rel":50421},"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",[23839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[38,50424,50425],{},"alt键加上下箭头可以实现语句的移动",{"title":10,"searchDepth":11,"depth":11,"links":50427},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50402,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50434,"title":50435,"body":50436,"description":13,"extension":14,"meta":53300,"navigation":17,"path":53301,"seo":53302,"stem":53303,"__hash__":53304},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50437,"toc":53251},[50438,50441,50445,50449,50454,50457,50462,50466,50473,50478,50485,50490,50497,50502,50506,50511,50514,50518,50523,50527,50532,50535,50538,50541,50544,50547,50550,50553,50556,50561,50566,50571,50575,50578,50581,50585,50590,50593,50601,50606,50623,50631,50636,50641,50646,50651,50656,50659,50664,50669,50673,50682,50687,50692,50696,50701,50704,50708,50713,50721,50726,50731,50734,50739,50744,50749,50752,50755,50758,50763,50768,50771,50776,50779,50784,50787,50790,50793,50798,50801,50804,50819,50824,50829,50834,50837,50840,50843,50857,50860,50865,50870,50873,50876,50879,50882,50885,50888,50891,50895,50899,50904,50908,50911,50916,50921,50924,50929,50932,50936,50941,50944,50947,50950,50953,50956,50959,50962,50965,50968,50972,50977,50982,50987,50990,50993,50997,51002,51005,51009,51012,51015,51020,51023,51026,51030,51034,51037,51042,51047,51050,51079,51084,51089,51094,51099,51103,51108,51112,51117,51120,51124,51128,51133,51137,51142,51147,51151,51156,51159,51161,51164,51169,51173,51178,51182,51186,51191,51196,51201,51206,51210,51215,51220,51225,51228,51231,51236,51239,51244,51249,51254,51259,51263,52070,52074,52417,52422,52425,52428,52431,52434,52437,52440,52443,52446,52448,52451,52453,52456,52460,52465,52468,52471,52474,52478,52483,52488,52508,52511,52515,52520,52525,52542,52546,52575,52579,52601,52603,52642,52650,52656,52660,52663,52666,52671,52676,52679,52682,52685,52690,52695,52698,52701,52704,52707,52710,52713,52716,52719,52722,52725,52728,52730,52733,52736,52739,52742,52745,52748,52751,52754,52758,52763,52766,52771,52774,52777,52780,52783,52786,52789,52792,52794,52797,52800,52803,52806,52809,52812,52816,52819,52828,52831,52836,52839,52844,52847,52850,52853,52856,52859,52862,52865,52869,52873,52876,52879,52884,52889,52894,52898,52903,52908,52911,52914,52917,52920,52923,52928,52931,52936,52938,52943,52946,52950,52955,52958,52961,52966,52970,52973,52978,52981,52984,53013,53018,53021,53024,53027,53030,53033,53037,53040,53126,53130,53133,53138,53143,53150,53153,53156,53159,53162,53165,53170,53175,53178,53181,53184,53187,53190,53193,53196,53199,53202,53204,53207,53211,53216,53221,53226,53229,53234,53239,53242,53245,53248],[29,50439,50435],{"id":50440},"_2基础语法",[33,50442,50444],{"id":50443},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[63,50446,50448],{"id":50447},"_211-js组成","2.1.1 js组成",[46,50450,50451],{},[49,50452,50453],{},"js是编程语言，html和css不是编程语言，是标记语言",[38,50455,50456],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[46,50458,50459],{"start":11},[49,50460,50461],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[63,50463,50465],{"id":50464},"_212-js书写位置","2.1.2 js书写位置",[46,50467,50468],{},[49,50469,50470],{},[251,50471,50472],{},"内部 JavaScript",[38,50474,50475],{},[1440,50476],{"alt":10,"src":50477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[46,50479,50480],{"start":11},[49,50481,50482],{},[251,50483,50484],{},"外部 JavaScript",[38,50486,50487],{},[1440,50488],{"alt":10,"src":50489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[46,50491,50492],{"start":1157},[49,50493,50494],{},[251,50495,50496],{},"内联 JavaScript",[38,50498,50499],{},[1440,50500],{"alt":10,"src":50501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[63,50503,50505],{"id":50504},"_213-javascript注释","2.1.3 JavaScript注释",[38,50507,50508],{},[1440,50509],{"alt":10,"src":50510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[38,50512,50513],{},"alt+shift+a一定要记住！",[63,50515,50517],{"id":50516},"_214-javascript结束符","2.1.4 JavaScript结束符",[38,50519,50520],{},[1440,50521],{"alt":10,"src":50522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[63,50524,50526],{"id":50525},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[46,50528,50529],{},[49,50530,50531],{},"输出语法：",[38,50533,50534],{},"①document.write('要出的内容')",[38,50536,50537],{},"向body内输出内容；",[38,50539,50540],{},"如果输出的内容写的是标签，也会被解析cheng",[38,50542,50543],{},"②alert('要出的内容')",[38,50545,50546],{},"页面弹出警告对话框",[38,50548,50549],{},"③console.log('控制台打印')",[38,50551,50552],{},"控制台输出语法，程序员调试使用",[38,50554,50555],{},"输入log就行，自动生成：",[38,50557,50558],{},[1440,50559],{"alt":10,"src":50560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[46,50562,50563],{"start":11},[49,50564,50565],{},"输入语法：",[38,50567,50568],{},[1440,50569],{"alt":10,"src":50570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[63,50572,50574],{"id":50573},"_2116-字面量","21.1.6 字面量",[38,50576,50577],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[38,50579,50580],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[33,50582,50584],{"id":50583},"_22-变量","2.2 变量",[46,50586,50587],{},[49,50588,50589],{},"变量声明",[38,50591,50592],{},"let 变量名",[1109,50594,50595,50598],{},[49,50596,50597],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[49,50599,50600],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[46,50602,50603],{"start":11},[49,50604,50605],{},"变量赋值",[83,50607,50611],{"className":50608,"code":50609,"language":50610,"meta":10,"style":10},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[88,50612,50613,50618],{"__ignoreMap":10},[91,50614,50615],{"class":93,"line":94},[91,50616,50617],{"class":101},"let age\n",[91,50619,50620],{"class":93,"line":11},[91,50621,50622],{"class":101},"age=18\n",[46,50624,50625,50628],{"start":1157},[49,50626,50627],{},"连这些（变量的初始化）：let age=18",[49,50629,50630],{},"更新变量",[38,50632,50633],{},[1440,50634],{"alt":10,"src":50635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[46,50637,50638],{"start":1178},[49,50639,50640],{},"声明多个变量",[38,50642,50643],{},[1440,50644],{"alt":10,"src":50645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[46,50647,50648],{"start":1192},[49,50649,50650],{},"变量命名规则与规范",[38,50652,50653],{},[1440,50654],{"alt":10,"src":50655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[38,50657,50658],{},"遵守小驼峰！",[46,50660,50661],{"start":1198},[49,50662,50663],{},"变量拓展-let和var的区别",[38,50665,50666],{},[1440,50667],{"alt":10,"src":50668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[33,50670,50672],{"id":50671},"_23-数组","2.3 数组",[83,50674,50676],{"className":50608,"code":50675,"language":50610,"meta":10,"style":10},"let arr = []\n",[88,50677,50678],{"__ignoreMap":10},[91,50679,50680],{"class":93,"line":94},[91,50681,50675],{"class":101},[38,50683,50684],{},[1440,50685],{"alt":10,"src":50686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[38,50688,50689],{},[1440,50690],{"alt":10,"src":50691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[33,50693,50695],{"id":50694},"_24-常量","2.4 常量",[38,50697,50698],{},[1440,50699],{"alt":10,"src":50700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[38,50702,50703],{},"const — 类似于 let ，但是变量的值无法被修改",[33,50705,50707],{"id":50706},"_25-数据类型","2.5 数据类型",[38,50709,50710],{},[1440,50711],{"alt":10,"src":50712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[46,50714,50715,50718],{},[49,50716,50717],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[49,50719,50720],{},"算数运算符：",[38,50722,50723],{},[1440,50724],{"alt":10,"src":50725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[46,50727,50728],{"start":1157},[49,50729,50730],{},"数字类型（Number）",[38,50732,50733],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[38,50735,50736],{},[1440,50737],{"alt":10,"src":50738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[46,50740,50741],{"start":1172},[49,50742,50743],{},"字符串类型（string）",[38,50745,50746],{},[1440,50747],{"alt":10,"src":50748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[38,50750,50751],{},"反引号也是可以使用的",[38,50753,50754],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[38,50756,50757],{},"例如：document.write(\"我今年\"+age+\"岁\")",[46,50759,50760],{"start":1178},[49,50761,50762],{},"模板字符串",[38,50764,50765],{},[1440,50766],{"alt":10,"src":50767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[38,50769,50770],{},"类似于python的字符串格式化",[46,50772,50773],{"start":1192},[49,50774,50775],{},"布尔类型",[38,50777,50778],{},"true 和 false",[46,50780,50781],{"start":1198},[49,50782,50783],{},"未定义类型（underfined）",[38,50785,50786],{},"表示没有赋值",[38,50788,50789],{},"未定义类型是比较特殊的类型，只有一个值undefined",[38,50791,50792],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[46,50794,50795],{"start":1289},[49,50796,50797],{},"null（空类型）",[38,50799,50800],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[38,50802,50803],{},"赋值了，但是内容为空",[83,50805,50807],{"className":50608,"code":50806,"language":50610,"meta":10,"style":10},"typeof null\n输出的是'object'，是一个对象数据类型\n",[88,50808,50809,50814],{"__ignoreMap":10},[91,50810,50811],{"class":93,"line":94},[91,50812,50813],{"class":101},"typeof null\n",[91,50815,50816],{"class":93,"line":11},[91,50817,50818],{"class":101},"输出的是'object'，是一个对象数据类型\n",[46,50820,50821],{"start":1295},[49,50822,50823],{},"控制台检测数据类型",[38,50825,50826],{},[1440,50827],{"alt":10,"src":50828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[46,50830,50831],{"start":1307},[49,50832,50833],{},"类型转换",[38,50835,50836],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[38,50838,50839],{},"转换方式：隐式转换和显示转换",[38,50841,50842],{},"①隐式转换",[1109,50844,50845,50848,50851,50854],{},[49,50846,50847],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[49,50849,50850],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[49,50852,50853],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[49,50855,50856],{},"任何数据和字符串相加结果都是字符串",[38,50858,50859],{},"②显示转换",[38,50861,50862],{},[1440,50863],{"alt":10,"src":50864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[38,50866,50867],{},[1440,50868],{"alt":10,"src":50869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[38,50871,50872],{},"在输入的时候要用好隐式转换，简单写起来",[38,50874,50875],{},"let num = +prompt(’请输入数字：‘)",[38,50877,50878],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[38,50880,50881],{},"console.log(parseInt('12.333px'))",[38,50883,50884],{},"输出为：12",[38,50886,50887],{},"console.log(parseInt('a'a'a12.333px'))",[38,50889,50890],{},"输出：NaN",[33,50892,50894],{"id":50893},"_26-运算符","2.6 运算符",[63,50896,50898],{"id":50897},"_261-赋值运算符","2.6.1 赋值运算符",[38,50900,50901],{},[1440,50902],{"alt":10,"src":50903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[63,50905,50907],{"id":50906},"_262-一元运算符","2.6.2 一元运算符",[38,50909,50910],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[38,50912,50913],{},[1440,50914],{"alt":10,"src":50915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[38,50917,50918],{},[1440,50919],{"alt":10,"src":50920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[38,50922,50923],{},"两者的区别：",[38,50925,50926],{},[1440,50927],{"alt":10,"src":50928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[38,50930,50931],{},"前置先自加；后置后加，代码执行完之后再加",[63,50933,50935],{"id":50934},"_263-比较运算符","2.6.3 比较运算符",[38,50937,50938],{},[1440,50939],{"alt":10,"src":50940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[38,50942,50943],{},"比较运算符也有隐式转换",[38,50945,50946],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[38,50948,50949],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[38,50951,50952],{},"要使用三等，开发的时候",[38,50954,50955],{},"NaN不等于任何人，包括它自己",[38,50957,50958],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[38,50960,50961],{},"7\u002F10=0.7",[38,50963,50964],{},"最后：0.5+0.2=0.7",[38,50966,50967],{},"字符串比较，比较的是字符对应的ASCII码",[63,50969,50971],{"id":50970},"_264-逻辑运算符","2.6.4 逻辑运算符",[38,50973,50974],{},[1440,50975],{"alt":10,"src":50976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[38,50978,50979],{},[1440,50980],{"alt":10,"src":50981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[38,50983,50984],{},[1440,50985],{"alt":10,"src":50986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[38,50988,50989],{},"上述题目选D",[38,50991,50992],{},"与真2假1；或真1假2",[63,50994,50996],{"id":50995},"_265-运算符优先级","2.6.5 运算符优先级",[38,50998,50999],{},[1440,51000],{"alt":10,"src":51001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[38,51003,51004],{},"先算逻辑与，后算逻辑或",[33,51006,51008],{"id":51007},"_27-语句","2.7 语句",[38,51010,51011],{},"表达式：是可以被求值的代码，会有结果给我们",[38,51013,51014],{},"语句：语句是可以被执行的代码，例如prompt()",[38,51016,51017],{},[1440,51018],{"alt":10,"src":51019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[38,51021,51022],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[38,51024,51025],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[63,51027,51029],{"id":51028},"_271-分支语句","2.7.1 分支语句",[21977,51031,51033],{"id":51032},"_2711-if分支语句","2.7.1.1 if分支语句",[38,51035,51036],{},"if语句单行简单的话，可以不写{}，写在一行就行",[46,51038,51039],{},[49,51040,51041],{},"单分支语句",[38,51043,51044],{},[1440,51045],{"alt":10,"src":51046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[38,51048,51049],{},"除了0，所有数字都为真",[83,51051,51053],{"className":50608,"code":51052,"language":50610,"meta":10,"style":10},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[88,51054,51055,51060,51065,51070,51074],{"__ignoreMap":10},[91,51056,51057],{"class":93,"line":94},[91,51058,51059],{"class":101},"if（0) {\n",[91,51061,51062],{"class":93,"line":11},[91,51063,51064],{"class":101},"    let a=1\n",[91,51066,51067],{"class":93,"line":1157},[91,51068,51069],{"class":101},"    alert(typeof a)\n",[91,51071,51072],{"class":93,"line":1172},[91,51073,1543],{"class":101},[91,51075,51076],{"class":93,"line":1178},[91,51077,51078],{"class":101},"不输出，括号为假\n",[46,51080,51081],{"start":11},[49,51082,51083],{},"双分支语句",[38,51085,51086],{},[1440,51087],{"alt":10,"src":51088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[46,51090,51091],{"start":1157},[49,51092,51093],{},"多分支语句",[38,51095,51096],{},[1440,51097],{"alt":10,"src":51098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21977,51100,51102],{"id":51101},"_2712-三元运算符","2.7.1.2 三元运算符",[38,51104,51105],{},[1440,51106],{"alt":10,"src":51107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21977,51109,51111],{"id":51110},"_2713-switch语句","2.7.1.3 switch语句",[38,51113,51114],{},[1440,51115],{"alt":10,"src":51116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[38,51118,51119],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[63,51121,51123],{"id":51122},"_272-循环语句","2.7.2 循环语句",[21977,51125,51127],{"id":51126},"_2721-断点演示","2.7.2.1 断点演示",[38,51129,51130],{},[1440,51131],{"alt":10,"src":51132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21977,51134,51136],{"id":51135},"_2722-while循环","2.7.2.2 while循环",[38,51138,51139],{},[1440,51140],{"alt":10,"src":51141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[38,51143,51144],{},[1440,51145],{"alt":10,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21977,51148,51150],{"id":51149},"_2723-for循环","2.7.2.3 for循环",[38,51152,51153],{},[1440,51154],{"alt":10,"src":51155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[38,51157,51158],{},"for(;;) {",[38,51160,1048],{},[38,51162,51163],{},"表示无限循环",[38,51165,51166],{},[1440,51167],{"alt":10,"src":51168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21977,51170,51172],{"id":51171},"_2724-循环的退出","2.7.2.4 循环的退出",[38,51174,51175],{},[1440,51176],{"alt":10,"src":51177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[33,51179,51181],{"id":51180},"_28-数组","2.8 数组",[63,51183,51185],{"id":51184},"_281-基础认识","2.8.1 基础认识",[38,51187,51188],{},[1440,51189],{"alt":10,"src":51190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[38,51192,51193],{},[1440,51194],{"alt":10,"src":51195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[38,51197,51198],{},[1440,51199],{"alt":10,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[38,51202,51203],{},[1440,51204],{"alt":10,"src":51205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[63,51207,51209],{"id":51208},"_282-操作数组","2.8.2 操作数组",[38,51211,51212],{},[1440,51213],{"alt":10,"src":51214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[46,51216,51217],{},[49,51218,51219],{},"添加元素",[38,51221,51222],{},[1440,51223],{"alt":10,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[38,51226,51227],{},"console.log(arr.push('green'))",[38,51229,51230],{},"输出结果：为新数组的长度",[38,51232,51233],{},[1440,51234],{"alt":10,"src":51235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[38,51237,51238],{},"push用的非常多，一定要记住",[46,51240,51241],{},[49,51242,51243],{},"删除元素",[38,51245,51246],{},[1440,51247],{"alt":10,"src":51248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[38,51250,51251],{},[1440,51252],{"alt":10,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[38,51255,51256],{},[1440,51257],{"alt":10,"src":51258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[63,51260,51262],{"id":51261},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[83,51264,51266],{"className":50608,"code":51265,"language":50610,"meta":10,"style":10},"\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",[88,51267,51268,51283,51299,51303,51312,51330,51354,51376,51390,51398,51405,51417,51428,51432,51436,51443,51455,51470,51483,51502,51519,51534,51546,51558,51570,51574,51578,51589,51599,51611,51623,51635,51646,51650,51654,51666,51670,51684,51688,51692,51703,51717,51729,51743,51747,51756,51765,51769,51778,51782,51791,51796,51801,51814,51842,51847,51852,51877,51882,51886,51891,51896,51911,51915,51920,51950,51962,51978,51994,52008,52013,52020,52024,52029,52042,52050,52058,52062],{"__ignoreMap":10},[91,51269,51270,51273,51277,51280],{"class":93,"line":94},[91,51271,51272],{"class":101},"\u003C!",[91,51274,51276],{"class":51275},"s9eBZ","DOCTYPE",[91,51278,51279],{"class":1941}," html",[91,51281,51282],{"class":101},">\n",[91,51284,51285,51287,51289,51292,51294,51297],{"class":93,"line":11},[91,51286,1012],{"class":101},[91,51288,50610],{"class":51275},[91,51290,51291],{"class":1941}," lang",[91,51293,147],{"class":101},[91,51295,51296],{"class":206},"\"en\"",[91,51298,51282],{"class":101},[91,51300,51301],{"class":93,"line":1157},[91,51302,2378],{"emptyLinePlaceholder":17},[91,51304,51305,51307,51310],{"class":93,"line":1172},[91,51306,1012],{"class":101},[91,51308,51309],{"class":51275},"head",[91,51311,51282],{"class":101},[91,51313,51314,51317,51320,51323,51325,51328],{"class":93,"line":1178},[91,51315,51316],{"class":101},"    \u003C",[91,51318,51319],{"class":51275},"meta",[91,51321,51322],{"class":1941}," charset",[91,51324,147],{"class":101},[91,51326,51327],{"class":206},"\"UTF-8\"",[91,51329,51282],{"class":101},[91,51331,51332,51334,51336,51339,51341,51344,51347,51349,51352],{"class":93,"line":1192},[91,51333,51316],{"class":101},[91,51335,51319],{"class":51275},[91,51337,51338],{"class":1941}," http-equiv",[91,51340,147],{"class":101},[91,51342,51343],{"class":206},"\"X-UA-Compatible\"",[91,51345,51346],{"class":1941}," content",[91,51348,147],{"class":101},[91,51350,51351],{"class":206},"\"IE=edge\"",[91,51353,51282],{"class":101},[91,51355,51356,51358,51360,51362,51364,51367,51369,51371,51374],{"class":93,"line":1198},[91,51357,51316],{"class":101},[91,51359,51319],{"class":51275},[91,51361,14899],{"class":1941},[91,51363,147],{"class":101},[91,51365,51366],{"class":206},"\"viewport\"",[91,51368,51346],{"class":1941},[91,51370,147],{"class":101},[91,51372,51373],{"class":206},"\"width=device-width, initial-scale=1.0\"",[91,51375,51282],{"class":101},[91,51377,51378,51380,51383,51386,51388],{"class":93,"line":1289},[91,51379,51316],{"class":101},[91,51381,51382],{"class":51275},"title",[91,51384,51385],{"class":101},">Document\u003C\u002F",[91,51387,51382],{"class":51275},[91,51389,51282],{"class":101},[91,51391,51392,51394,51396],{"class":93,"line":1295},[91,51393,51316],{"class":101},[91,51395,5105],{"class":51275},[91,51397,51282],{"class":101},[91,51399,51400,51403],{"class":93,"line":1307},[91,51401,51402],{"class":51275},"        *",[91,51404,15551],{"class":101},[91,51406,51407,51410,51413,51415],{"class":93,"line":1590},[91,51408,51409],{"class":150},"            margin",[91,51411,51412],{"class":101},": ",[91,51414,293],{"class":150},[91,51416,1268],{"class":101},[91,51418,51419,51422,51424,51426],{"class":93,"line":1595},[91,51420,51421],{"class":150},"            padding",[91,51423,51412],{"class":101},[91,51425,293],{"class":150},[91,51427,1268],{"class":101},[91,51429,51430],{"class":93,"line":1601},[91,51431,2507],{"class":101},[91,51433,51434],{"class":93,"line":1606},[91,51435,2378],{"emptyLinePlaceholder":17},[91,51437,51438,51441],{"class":93,"line":1620},[91,51439,51440],{"class":1941},"        .box",[91,51442,15551],{"class":101},[91,51444,51445,51448,51450,51453],{"class":93,"line":1625},[91,51446,51447],{"class":150},"            display",[91,51449,51412],{"class":101},[91,51451,51452],{"class":150},"flex",[91,51454,1268],{"class":101},[91,51456,51457,51460,51462,51465,51468],{"class":93,"line":1631},[91,51458,51459],{"class":150},"            width",[91,51461,51412],{"class":101},[91,51463,51464],{"class":150},"700",[91,51466,51467],{"class":97},"px",[91,51469,1268],{"class":101},[91,51471,51472,51475,51477,51479,51481],{"class":93,"line":1652},[91,51473,51474],{"class":150},"            height",[91,51476,51412],{"class":101},[91,51478,3951],{"class":150},[91,51480,51467],{"class":97},[91,51482,1268],{"class":101},[91,51484,51485,51488,51490,51492,51494,51497,51500],{"class":93,"line":1657},[91,51486,51487],{"class":150},"            border-left",[91,51489,51412],{"class":101},[91,51491,319],{"class":150},[91,51493,51467],{"class":97},[91,51495,51496],{"class":150}," solid",[91,51498,51499],{"class":150}," pink",[91,51501,1268],{"class":101},[91,51503,51504,51507,51509,51511,51513,51515,51517],{"class":93,"line":1671},[91,51505,51506],{"class":150},"            border-bottom",[91,51508,51412],{"class":101},[91,51510,319],{"class":150},[91,51512,51467],{"class":97},[91,51514,51496],{"class":150},[91,51516,51499],{"class":150},[91,51518,1268],{"class":101},[91,51520,51521,51523,51525,51527,51529,51532],{"class":93,"line":1676},[91,51522,51409],{"class":150},[91,51524,51412],{"class":101},[91,51526,758],{"class":150},[91,51528,51467],{"class":97},[91,51530,51531],{"class":150}," auto",[91,51533,1268],{"class":101},[91,51535,51536,51539,51541,51544],{"class":93,"line":1705},[91,51537,51538],{"class":150},"            justify-content",[91,51540,51412],{"class":101},[91,51542,51543],{"class":150},"space-around",[91,51545,1268],{"class":101},[91,51547,51548,51551,51553,51556],{"class":93,"line":1710},[91,51549,51550],{"class":150},"            align-items",[91,51552,51412],{"class":101},[91,51554,51555],{"class":150},"flex-end",[91,51557,1268],{"class":101},[91,51559,51560,51563,51565,51568],{"class":93,"line":1727},[91,51561,51562],{"class":150},"            text-align",[91,51564,51412],{"class":101},[91,51566,51567],{"class":150},"center",[91,51569,1268],{"class":101},[91,51571,51572],{"class":93,"line":1732},[91,51573,2507],{"class":101},[91,51575,51576],{"class":93,"line":1737},[91,51577,2378],{"emptyLinePlaceholder":17},[91,51579,51580,51582,51584,51587],{"class":93,"line":1742},[91,51581,51440],{"class":1941},[91,51583,1062],{"class":97},[91,51585,51586],{"class":51275},"div",[91,51588,15551],{"class":101},[91,51590,51591,51593,51595,51597],{"class":93,"line":1756},[91,51592,51447],{"class":150},[91,51594,51412],{"class":101},[91,51596,51452],{"class":150},[91,51598,1268],{"class":101},[91,51600,51601,51603,51605,51607,51609],{"class":93,"line":1761},[91,51602,51459],{"class":150},[91,51604,51412],{"class":101},[91,51606,758],{"class":150},[91,51608,51467],{"class":97},[91,51610,1268],{"class":101},[91,51612,51613,51616,51618,51621],{"class":93,"line":2555},[91,51614,51615],{"class":150},"            background-color",[91,51617,51412],{"class":101},[91,51619,51620],{"class":150},"pink",[91,51622,1268],{"class":101},[91,51624,51625,51628,51630,51633],{"class":93,"line":2569},[91,51626,51627],{"class":150},"            flex-direction",[91,51629,51412],{"class":101},[91,51631,51632],{"class":150},"column",[91,51634,1268],{"class":101},[91,51636,51637,51639,51641,51644],{"class":93,"line":2577},[91,51638,51538],{"class":150},[91,51640,51412],{"class":101},[91,51642,51643],{"class":150},"space-between",[91,51645,1268],{"class":101},[91,51647,51648],{"class":93,"line":2582},[91,51649,2507],{"class":101},[91,51651,51652],{"class":93,"line":2588},[91,51653,2378],{"emptyLinePlaceholder":17},[91,51655,51656,51658,51661,51664],{"class":93,"line":2594},[91,51657,51440],{"class":1941},[91,51659,51660],{"class":51275}," div",[91,51662,51663],{"class":51275}," span",[91,51665,15551],{"class":101},[91,51667,51668],{"class":93,"line":2599},[91,51669,2378],{"emptyLinePlaceholder":17},[91,51671,51672,51675,51677,51680,51682],{"class":93,"line":7927},[91,51673,51674],{"class":150},"            margin-top",[91,51676,51412],{"class":101},[91,51678,51679],{"class":150},"-20",[91,51681,51467],{"class":97},[91,51683,1268],{"class":101},[91,51685,51686],{"class":93,"line":7951},[91,51687,2507],{"class":101},[91,51689,51690],{"class":93,"line":7956},[91,51691,2378],{"emptyLinePlaceholder":17},[91,51693,51694,51696,51698,51701],{"class":93,"line":7962},[91,51695,51440],{"class":1941},[91,51697,51660],{"class":51275},[91,51699,51700],{"class":51275}," h4",[91,51702,15551],{"class":101},[91,51704,51705,51708,51710,51713,51715],{"class":93,"line":7989},[91,51706,51707],{"class":150},"            margin-bottom",[91,51709,51412],{"class":101},[91,51711,51712],{"class":150},"-35",[91,51714,51467],{"class":97},[91,51716,1268],{"class":101},[91,51718,51719,51721,51723,51725,51727],{"class":93,"line":7994},[91,51720,51459],{"class":150},[91,51722,51412],{"class":101},[91,51724,458],{"class":150},[91,51726,51467],{"class":97},[91,51728,1268],{"class":101},[91,51730,51731,51734,51736,51739,51741],{"class":93,"line":8000},[91,51732,51733],{"class":150},"            margin-left",[91,51735,51412],{"class":101},[91,51737,51738],{"class":150},"-10",[91,51740,51467],{"class":97},[91,51742,1268],{"class":101},[91,51744,51745],{"class":93,"line":8012},[91,51746,2507],{"class":101},[91,51748,51749,51752,51754],{"class":93,"line":8024},[91,51750,51751],{"class":101},"    \u003C\u002F",[91,51753,5105],{"class":51275},[91,51755,51282],{"class":101},[91,51757,51758,51761,51763],{"class":93,"line":8036},[91,51759,51760],{"class":101},"\u003C\u002F",[91,51762,51309],{"class":51275},[91,51764,51282],{"class":101},[91,51766,51767],{"class":93,"line":9695},[91,51768,2378],{"emptyLinePlaceholder":17},[91,51770,51771,51773,51776],{"class":93,"line":9720},[91,51772,1012],{"class":101},[91,51774,51775],{"class":51275},"body",[91,51777,51282],{"class":101},[91,51779,51780],{"class":93,"line":9743},[91,51781,2378],{"emptyLinePlaceholder":17},[91,51783,51784,51786,51789],{"class":93,"line":9767},[91,51785,51316],{"class":101},[91,51787,51788],{"class":51275},"script",[91,51790,51282],{"class":101},[91,51792,51793],{"class":93,"line":9772},[91,51794,51795],{"class":160},"        \u002F\u002F 1. 四次弹框效果\n",[91,51797,51798],{"class":93,"line":9777},[91,51799,51800],{"class":160},"        \u002F\u002F 声明一个新的数组\n",[91,51802,51803,51806,51809,51811],{"class":93,"line":9782},[91,51804,51805],{"class":97},"        let",[91,51807,51808],{"class":101}," arr ",[91,51810,147],{"class":97},[91,51812,51813],{"class":101}," []\n",[91,51815,51816,51818,51820,51823,51825,51827,51829,51831,51833,51836,51838,51840],{"class":93,"line":9791},[91,51817,3381],{"class":97},[91,51819,1636],{"class":101},[91,51821,51822],{"class":97},"let",[91,51824,9417],{"class":101},[91,51826,147],{"class":97},[91,51828,25093],{"class":150},[91,51830,9424],{"class":101},[91,51832,1566],{"class":97},[91,51834,51835],{"class":150}," 4",[91,51837,3192],{"class":101},[91,51839,2270],{"class":97},[91,51841,12421],{"class":101},[91,51843,51844],{"class":93,"line":9796},[91,51845,51846],{"class":160},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[91,51848,51849],{"class":93,"line":9802},[91,51850,51851],{"class":160},"            \u002F\u002F arr.push(num)\n",[91,51853,51854,51857,51860,51862,51865,51867,51870,51872,51875],{"class":93,"line":9823},[91,51855,51856],{"class":101},"            arr.",[91,51858,51859],{"class":1941},"push",[91,51861,102],{"class":101},[91,51863,51864],{"class":1941},"prompt",[91,51866,102],{"class":101},[91,51868,51869],{"class":206},"`请输入第${",[91,51871,543],{"class":101},[91,51873,51874],{"class":206},"}季度的数据:`",[91,51876,30472],{"class":101},[91,51878,51879],{"class":93,"line":9829},[91,51880,51881],{"class":160},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[91,51883,51884],{"class":93,"line":9843},[91,51885,2507],{"class":101},[91,51887,51888],{"class":93,"line":9849},[91,51889,51890],{"class":160},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[91,51892,51893],{"class":93,"line":9876},[91,51894,51895],{"class":160},"        \u002F\u002F 盒子开头\n",[91,51897,51898,51901,51904,51906,51909],{"class":93,"line":9885},[91,51899,51900],{"class":101},"        document.",[91,51902,51903],{"class":1941},"write",[91,51905,102],{"class":101},[91,51907,51908],{"class":206},"` \u003Cdiv class=\"box\">`",[91,51910,108],{"class":101},[91,51912,51913],{"class":93,"line":9891},[91,51914,2378],{"emptyLinePlaceholder":17},[91,51916,51917],{"class":93,"line":9899},[91,51918,51919],{"class":160},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[91,51921,51922,51924,51926,51928,51930,51932,51934,51936,51938,51941,51944,51946,51948],{"class":93,"line":9904},[91,51923,3381],{"class":97},[91,51925,1636],{"class":101},[91,51927,51822],{"class":97},[91,51929,9417],{"class":101},[91,51931,147],{"class":97},[91,51933,4071],{"class":150},[91,51935,9424],{"class":101},[91,51937,1012],{"class":97},[91,51939,51940],{"class":101}," arr.",[91,51942,51943],{"class":150},"length",[91,51945,3192],{"class":101},[91,51947,2270],{"class":97},[91,51949,12421],{"class":101},[91,51951,51952,51955,51957,51959],{"class":93,"line":16583},[91,51953,51954],{"class":101},"            document.",[91,51956,51903],{"class":1941},[91,51958,102],{"class":101},[91,51960,51961],{"class":206},"`\n",[91,51963,51964,51967,51969,51971,51973,51975],{"class":93,"line":16589},[91,51965,51966],{"class":206},"              \u003Cdiv style=\"height: ${",[91,51968,3858],{"class":101},[91,51970,992],{"class":206},[91,51972,543],{"class":101},[91,51974,1042],{"class":206},[91,51976,51977],{"class":206},"}px;\">\n",[91,51979,51980,51983,51985,51987,51989,51991],{"class":93,"line":16612},[91,51981,51982],{"class":206},"                \u003Cspan>${",[91,51984,3858],{"class":101},[91,51986,992],{"class":206},[91,51988,543],{"class":101},[91,51990,1042],{"class":206},[91,51992,51993],{"class":206},"}\u003C\u002Fspan>\n",[91,51995,51996,51999,52001,52003,52005],{"class":93,"line":16618},[91,51997,51998],{"class":206},"                \u003Ch4>第${",[91,52000,543],{"class":101},[91,52002,45541],{"class":97},[91,52004,25093],{"class":150},[91,52006,52007],{"class":206},"}季度\u003C\u002Fh4>\n",[91,52009,52010],{"class":93,"line":16641},[91,52011,52012],{"class":206},"              \u003C\u002Fdiv>          \n",[91,52014,52015,52018],{"class":93,"line":16655},[91,52016,52017],{"class":206},"            `",[91,52019,108],{"class":101},[91,52021,52022],{"class":93,"line":16675},[91,52023,2507],{"class":101},[91,52025,52026],{"class":93,"line":16681},[91,52027,52028],{"class":160},"        \u002F\u002F 盒子结尾\n",[91,52030,52031,52033,52035,52037,52040],{"class":93,"line":16692},[91,52032,51900],{"class":101},[91,52034,51903],{"class":1941},[91,52036,102],{"class":101},[91,52038,52039],{"class":206},"` \u003C\u002Fdiv>`",[91,52041,108],{"class":101},[91,52043,52044,52046,52048],{"class":93,"line":16715},[91,52045,51751],{"class":101},[91,52047,51788],{"class":51275},[91,52049,51282],{"class":101},[91,52051,52052,52054,52056],{"class":93,"line":16737},[91,52053,51760],{"class":101},[91,52055,51775],{"class":51275},[91,52057,51282],{"class":101},[91,52059,52060],{"class":93,"line":16742},[91,52061,2378],{"emptyLinePlaceholder":17},[91,52063,52064,52066,52068],{"class":93,"line":16748},[91,52065,51760],{"class":101},[91,52067,50610],{"class":51275},[91,52069,51282],{"class":101},[63,52071,52073],{"id":52072},"_284-冒泡排序","2.8.4 冒泡排序",[83,52075,52077],{"className":50608,"code":52076,"language":50610,"meta":10,"style":10},"\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",[88,52078,52079,52089,52103,52107,52115,52130,52150,52162,52170,52174,52182,52190,52222,52255,52292,52297,52316,52321,52334,52349,52365,52369,52374,52378,52388,52397,52405,52409],{"__ignoreMap":10},[91,52080,52081,52083,52085,52087],{"class":93,"line":94},[91,52082,51272],{"class":101},[91,52084,51276],{"class":51275},[91,52086,51279],{"class":1941},[91,52088,51282],{"class":101},[91,52090,52091,52093,52095,52097,52099,52101],{"class":93,"line":11},[91,52092,1012],{"class":101},[91,52094,50610],{"class":51275},[91,52096,51291],{"class":1941},[91,52098,147],{"class":101},[91,52100,51296],{"class":206},[91,52102,51282],{"class":101},[91,52104,52105],{"class":93,"line":1157},[91,52106,2378],{"emptyLinePlaceholder":17},[91,52108,52109,52111,52113],{"class":93,"line":1172},[91,52110,1012],{"class":101},[91,52112,51309],{"class":51275},[91,52114,51282],{"class":101},[91,52116,52117,52120,52122,52124,52126,52128],{"class":93,"line":1178},[91,52118,52119],{"class":101},"  \u003C",[91,52121,51319],{"class":51275},[91,52123,51322],{"class":1941},[91,52125,147],{"class":101},[91,52127,51327],{"class":206},[91,52129,51282],{"class":101},[91,52131,52132,52134,52136,52138,52140,52142,52144,52146,52148],{"class":93,"line":1192},[91,52133,52119],{"class":101},[91,52135,51319],{"class":51275},[91,52137,14899],{"class":1941},[91,52139,147],{"class":101},[91,52141,51366],{"class":206},[91,52143,51346],{"class":1941},[91,52145,147],{"class":101},[91,52147,51373],{"class":206},[91,52149,51282],{"class":101},[91,52151,52152,52154,52156,52158,52160],{"class":93,"line":1198},[91,52153,52119],{"class":101},[91,52155,51382],{"class":51275},[91,52157,51385],{"class":101},[91,52159,51382],{"class":51275},[91,52161,51282],{"class":101},[91,52163,52164,52166,52168],{"class":93,"line":1289},[91,52165,51760],{"class":101},[91,52167,51309],{"class":51275},[91,52169,51282],{"class":101},[91,52171,52172],{"class":93,"line":1295},[91,52173,2378],{"emptyLinePlaceholder":17},[91,52175,52176,52178,52180],{"class":93,"line":1307},[91,52177,1012],{"class":101},[91,52179,51775],{"class":51275},[91,52181,51282],{"class":101},[91,52183,52184,52186,52188],{"class":93,"line":1590},[91,52185,52119],{"class":101},[91,52187,51788],{"class":51275},[91,52189,51282],{"class":101},[91,52191,52192,52195,52197,52199,52202,52204,52206,52208,52210,52212,52214,52216,52218,52220],{"class":93,"line":1595},[91,52193,52194],{"class":97},"    let",[91,52196,51808],{"class":101},[91,52198,147],{"class":97},[91,52200,52201],{"class":101}," [",[91,52203,421],{"class":150},[91,52205,12414],{"class":101},[91,52207,395],{"class":150},[91,52209,12414],{"class":101},[91,52211,173],{"class":150},[91,52213,12414],{"class":101},[91,52215,179],{"class":150},[91,52217,12414],{"class":101},[91,52219,319],{"class":150},[91,52221,33221],{"class":101},[91,52223,52224,52226,52228,52230,52232,52234,52236,52238,52240,52242,52244,52247,52249,52251,52253],{"class":93,"line":1601},[91,52225,3179],{"class":97},[91,52227,1636],{"class":101},[91,52229,51822],{"class":97},[91,52231,9417],{"class":101},[91,52233,147],{"class":97},[91,52235,4071],{"class":150},[91,52237,9424],{"class":101},[91,52239,1012],{"class":97},[91,52241,51940],{"class":101},[91,52243,51943],{"class":150},[91,52245,52246],{"class":97}," -",[91,52248,25093],{"class":150},[91,52250,3192],{"class":101},[91,52252,2270],{"class":97},[91,52254,12421],{"class":101},[91,52256,52257,52260,52262,52264,52266,52268,52270,52272,52274,52276,52278,52280,52282,52284,52286,52288,52290],{"class":93,"line":1606},[91,52258,52259],{"class":97},"      for",[91,52261,1636],{"class":101},[91,52263,51822],{"class":97},[91,52265,9479],{"class":101},[91,52267,147],{"class":97},[91,52269,4071],{"class":150},[91,52271,9486],{"class":101},[91,52273,1012],{"class":97},[91,52275,51940],{"class":101},[91,52277,51943],{"class":150},[91,52279,52246],{"class":97},[91,52281,9417],{"class":101},[91,52283,634],{"class":97},[91,52285,25093],{"class":150},[91,52287,9493],{"class":101},[91,52289,2270],{"class":97},[91,52291,12421],{"class":101},[91,52293,52294],{"class":93,"line":1620},[91,52295,52296],{"class":160},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[91,52298,52299,52301,52304,52306,52309,52311,52313],{"class":93,"line":1625},[91,52300,2475],{"class":97},[91,52302,52303],{"class":101}," (arr[j] ",[91,52305,1062],{"class":97},[91,52307,52308],{"class":101}," arr[j ",[91,52310,583],{"class":97},[91,52312,25093],{"class":150},[91,52314,52315],{"class":101},"]) {\n",[91,52317,52318],{"class":93,"line":1631},[91,52319,52320],{"class":160},"          \u002F\u002F 交换两个变量\n",[91,52322,52323,52326,52329,52331],{"class":93,"line":1652},[91,52324,52325],{"class":97},"          let",[91,52327,52328],{"class":101}," tmp ",[91,52330,147],{"class":97},[91,52332,52333],{"class":101}," arr[j]\n",[91,52335,52336,52339,52341,52343,52345,52347],{"class":93,"line":1657},[91,52337,52338],{"class":101},"          arr[j] ",[91,52340,147],{"class":97},[91,52342,52308],{"class":101},[91,52344,583],{"class":97},[91,52346,25093],{"class":150},[91,52348,33221],{"class":101},[91,52350,52351,52354,52356,52358,52360,52362],{"class":93,"line":1671},[91,52352,52353],{"class":101},"          arr[j ",[91,52355,583],{"class":97},[91,52357,25093],{"class":150},[91,52359,4421],{"class":101},[91,52361,147],{"class":97},[91,52363,52364],{"class":101}," tmp\n",[91,52366,52367],{"class":93,"line":1676},[91,52368,2507],{"class":101},[91,52370,52371],{"class":93,"line":1705},[91,52372,52373],{"class":101},"      }\n",[91,52375,52376],{"class":93,"line":1710},[91,52377,2165],{"class":101},[91,52379,52380,52383,52385],{"class":93,"line":1727},[91,52381,52382],{"class":101},"    document.",[91,52384,51903],{"class":1941},[91,52386,52387],{"class":101},"(arr)\n",[91,52389,52390,52393,52395],{"class":93,"line":1732},[91,52391,52392],{"class":101},"  \u003C\u002F",[91,52394,51788],{"class":51275},[91,52396,51282],{"class":101},[91,52398,52399,52401,52403],{"class":93,"line":1737},[91,52400,51760],{"class":101},[91,52402,51775],{"class":51275},[91,52404,51282],{"class":101},[91,52406,52407],{"class":93,"line":1742},[91,52408,2378],{"emptyLinePlaceholder":17},[91,52410,52411,52413,52415],{"class":93,"line":1756},[91,52412,51760],{"class":101},[91,52414,50610],{"class":51275},[91,52416,51282],{"class":101},[38,52418,52419],{},[1440,52420],{"alt":10,"src":52421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[38,52423,52424],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[38,52426,52427],{},"let arr = [4, 2, 5, 1, 3]",[38,52429,52430],{},"\u002F\u002F 1.升序排列写法",[38,52432,52433],{},"arr.sort(function (a, b) {",[38,52435,52436],{},"return a - b",[38,52438,52439],{},"})",[38,52441,52442],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[38,52444,52445],{},"\u002F\u002F 降序排列写法",[38,52447,52433],{},[38,52449,52450],{},"return b - a",[38,52452,52439],{},[38,52454,52455],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[33,52457,52459],{"id":52458},"_29-函数","2.9 函数",[38,52461,52462],{},[1440,52463],{"alt":10,"src":52464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[38,52466,52467],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[38,52469,52470],{},"函数的声明用function",[38,52472,52473],{},"函数里边可以嵌套函数",[63,52475,52477],{"id":52476},"_291-函数传参","2.9.1 函数传参",[38,52479,52480],{},[1440,52481],{"alt":10,"src":52482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[38,52484,52485],{},[1440,52486],{"alt":10,"src":52487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1109,52489,52490,52493,52496,52499,52502,52505],{},[49,52491,52492],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[49,52494,52495],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[49,52497,52498],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[49,52500,52501],{},"开发中尽量保持形参和实参个数一致",[49,52503,52504],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[49,52506,52507],{},"形参只在函数中有用，所以不需要进行声明这个变量",[38,52509,52510],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[63,52512,52514],{"id":52513},"_292-函数的返回值","2.9.2 函数的返回值",[38,52516,52517],{},[1440,52518],{"alt":10,"src":52519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[38,52521,52522],{},[1440,52523],{"alt":10,"src":52524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1109,52526,52527,52530,52533,52536,52539],{},[49,52528,52529],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[49,52531,52532],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[49,52534,52535],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[49,52537,52538],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[49,52540,52541],{},"断点调试:进入函数内部看执行过程F11",[63,52543,52545],{"id":52544},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[83,52547,52549],{"className":50608,"code":52548,"language":50610,"meta":10,"style":10},"    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",[88,52550,52551,52556,52561,52565,52570],{"__ignoreMap":10},[91,52552,52553],{"class":93,"line":94},[91,52554,52555],{"class":101},"    function fn(a, b) {\n",[91,52557,52558],{"class":93,"line":11},[91,52559,52560],{"class":101},"      console.log(a + b);\n",[91,52562,52563],{"class":93,"line":1157},[91,52564,2165],{"class":101},[91,52566,52567],{"class":93,"line":1172},[91,52568,52569],{"class":101},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[91,52571,52572],{"class":93,"line":1178},[91,52573,52574],{"class":101},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[63,52576,52578],{"id":52577},"_294-作用域","2.9.4 作用域",[1109,52580,52581,52587,52592,52595,52598],{},[49,52582,52583,52584],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[251,52585,52586],{},"作用域",[49,52588,52589],{},[251,52590,52591],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[49,52593,52594],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[49,52596,52597],{},"函数内部可以直接所使用全局变量",[49,52599,52600],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[38,52602,14612],{},[83,52604,52606],{"className":50608,"code":52605,"language":50610,"meta":10,"style":10},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[88,52607,52608,52613,52618,52622,52627,52632,52637],{"__ignoreMap":10},[91,52609,52610],{"class":93,"line":94},[91,52611,52612],{"class":101},"    function fun() {\n",[91,52614,52615],{"class":93,"line":11},[91,52616,52617],{"class":101},"      num = 10\n",[91,52619,52620],{"class":93,"line":1157},[91,52621,2165],{"class":101},[91,52623,52624],{"class":93,"line":1172},[91,52625,52626],{"class":101},"    fun()\n",[91,52628,52629],{"class":93,"line":1178},[91,52630,52631],{"class":101},"    console.log(num)\n",[91,52633,52634],{"class":93,"line":1192},[91,52635,52636],{"class":101},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[91,52638,52639],{"class":93,"line":1198},[91,52640,52641],{"class":101},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1109,52643,52644,52647],{},[49,52645,52646],{},"函数内部的形参可以看做是局部变量",[49,52648,52649],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[38,52651,52652,52653],{},"变量访问原则： ",[251,52654,52655],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[63,52657,52659],{"id":52658},"_295-匿名函数","2.9.5 匿名函数",[38,52661,52662],{},"函数可以分为具名函数和匿名函数",[38,52664,52665],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[46,52667,52668],{},[49,52669,52670],{},"函数表达式",[38,52672,52673],{},[1440,52674],{"alt":10,"src":52675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[38,52677,52678],{},"里边也可以写参数",[38,52680,52681],{},"具名函数调用位置可以随意调整；",[38,52683,52684],{},"匿名函数函数表达式形式只能在声明后才可以使用",[46,52686,52687],{"start":11},[49,52688,52689],{},"立即执行函数",[38,52691,52692],{},[1440,52693],{"alt":10,"src":52694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[38,52696,52697],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[38,52699,52700],{},"写法：两个小括号，然后在第一个小括号中写function",[38,52702,52703],{},"(function () {})();",[38,52705,52706],{},"不要落下最后的;",[38,52708,52709],{},"立即执行函数必须要加;",[38,52711,52712],{},"分号写前写后都没问题",[38,52714,52715],{},"写前：",[38,52717,52718],{},"(function() {})()",[38,52720,52721],{},";(function () {})();",[38,52723,52724],{},"写后:",[38,52726,52727],{},"(function() {})();",[38,52729,52703],{},[38,52731,52732],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[38,52734,52735],{},"还有一种写法：",[38,52737,52738],{},"(function(){}());",[38,52740,52741],{},"或者:",[38,52743,52744],{},"!function(){}();",[38,52746,52747],{},"立即执行函数有时候也是可以加名字的：",[38,52749,52750],{},"(function flexible(window,document) {}(window,document));",[38,52752,52753],{},"省一些调用方法",[63,52755,52757],{"id":52756},"_296-逻辑中断","2.9.6 逻辑中断!!!",[38,52759,52760],{},[1440,52761],{"alt":10,"src":52762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[38,52764,52765],{},"这样就不用非得给x,y初始化了",[38,52767,52768],{},[1440,52769],{"alt":10,"src":52770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[38,52772,52773],{},"代码执行时先看左边",[38,52775,52776],{},"例如：console.log(false && 3+5)",[38,52778,52779],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[38,52781,52782],{},"&&都是真时，就返回最后一个真值",[38,52784,52785],{},"console.log(11 && 22)",[38,52787,52788],{},"输出22",[38,52790,52791],{},"逻辑与：遇真则真",[38,52793,14612],{},[38,52795,52796],{},"let age=1",[38,52798,52799],{},"console.log(11 || age++)",[38,52801,52802],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[38,52804,52805],{},"console.log(11 || 22)",[38,52807,52808],{},"||逻辑或遇到真就直接输出，输出结果为11",[38,52810,52811],{},"||如果都是假的话，就取最后一个假的值了",[63,52813,52815],{"id":52814},"_297-转换为boolean型","2.9.7 转换为Boolean型",[38,52817,52818],{},"显示转换：",[38,52820,52821,52824,52825],{},[251,52822,52823],{},"记忆","： ",[251,52826,52827],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[38,52829,52830],{},"空字符串为假，其他字符串全为真",[38,52832,52833],{},[1440,52834],{"alt":10,"src":52835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[38,52837,52838],{},"隐式转换：",[38,52840,52841],{},[1440,52842],{"alt":10,"src":52843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[38,52845,52846],{},"隐式转换:",[38,52848,52849],{},"null+3=3",[38,52851,52852],{},"undefined+3=NaN",[38,52854,52855],{},"null==undefined 输出true,他两个都当0看",[38,52857,52858],{},"null===undefined 输出false",[38,52860,52861],{},"undefined做任何操作都是NaN",[38,52863,52864],{},"NaN不等于NaN，NaN表示计算错误",[33,52866,52868],{"id":52867},"_210-对象","2.10 对象",[63,52870,52872],{"id":52871},"_2101-对象的介绍","2.10.1 对象的介绍",[38,52874,52875],{},"对象也是一种数据类型，里边的数据是无序的",[38,52877,52878],{},"对象由属性和方法组成",[38,52880,52881],{},[1440,52882],{"alt":10,"src":52883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[38,52885,52886],{},[1440,52887],{"alt":10,"src":52888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[38,52890,52891],{},[1440,52892],{"alt":10,"src":52893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[63,52895,52897],{"id":52896},"_2102-对象属性","2.10.2 对象属性",[38,52899,52900],{},[1440,52901],{"alt":10,"src":52902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[46,52904,52905],{},[49,52906,52907],{},"查询对象",[38,52909,52910],{},"对象名.属性 goods.uname",[38,52912,52913],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[38,52915,52916],{},"不带字符串的属性名也可以使用 对象名['属性名']",[38,52918,52919],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[38,52921,52922],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[46,52924,52925],{"start":11},[49,52926,52927],{},"重新赋值",[38,52929,52930],{},"对象名.属性=新值",[46,52932,52933],{"start":1157},[49,52934,52935],{},"增加新数据",[38,52937,52930],{},[46,52939,52940],{"start":1172},[49,52941,52942],{},"删除对象中的属性",[38,52944,52945],{},"delete 对象名.属性",[63,52947,52949],{"id":52948},"_2103-对象方法","2.10.3 对象方法",[38,52951,52952],{},[1440,52953],{"alt":10,"src":52954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[38,52956,52957],{},"后边跟的是匿名函数",[38,52959,52960],{},"对象外面的叫函数；对象内部的叫方法",[38,52962,52963],{},[1440,52964],{"alt":10,"src":52965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[63,52967,52969],{"id":52968},"_2104-遍历对象","2.10.4 遍历对象",[38,52971,52972],{},"理解为加括号的python字典遍历",[38,52974,52975],{},[1440,52976],{"alt":10,"src":52977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[38,52979,52980],{},"k是字符串类型",[38,52982,52983],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[83,52985,52987],{"className":50608,"code":52986,"language":50610,"meta":10,"style":10},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[88,52988,52989,52994,52999,53004,53009],{"__ignoreMap":10},[91,52990,52991],{"class":93,"line":94},[91,52992,52993],{"class":101},"   let arr = [1, 2, 3]\n",[91,52995,52996],{"class":93,"line":11},[91,52997,52998],{"class":101},"    for (let k in arr) {\n",[91,53000,53001],{"class":93,"line":1157},[91,53002,53003],{"class":101},"      console.log(k)\n",[91,53005,53006],{"class":93,"line":1172},[91,53007,53008],{"class":101},"      console.log(arr[k])\n",[91,53010,53011],{"class":93,"line":1178},[91,53012,2165],{"class":101},[38,53014,53015],{},[1440,53016],{"alt":10,"src":53017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[38,53019,53020],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[38,53022,53023],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[38,53025,53026],{},"for in 得到的k是属性名",[51788,53028,53029],{},"\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",[38,53031,53032],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[63,53034,53036],{"id":53035},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[38,53038,53039],{},"数组中放对象信息",[83,53041,53045],{"className":53042,"code":53043,"language":53044,"meta":10,"style":10},"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",[88,53046,53047,53055,53060,53065,53070,53075,53080,53085,53090,53095,53100,53105,53110,53114,53118],{"__ignoreMap":10},[91,53048,53049,53051,53053],{"class":93,"line":94},[91,53050,1012],{"class":101},[91,53052,51788],{"class":51275},[91,53054,51282],{"class":101},[91,53056,53057],{"class":93,"line":11},[91,53058,53059],{"class":101},"    let students = [\n",[91,53061,53062],{"class":93,"line":1157},[91,53063,53064],{"class":101},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[91,53066,53067],{"class":93,"line":1172},[91,53068,53069],{"class":101},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[91,53071,53072],{"class":93,"line":1178},[91,53073,53074],{"class":101},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[91,53076,53077],{"class":93,"line":1192},[91,53078,53079],{"class":101},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[91,53081,53082],{"class":93,"line":1198},[91,53083,53084],{"class":101},"    ]\n",[91,53086,53087],{"class":93,"line":1289},[91,53088,53089],{"class":101},"    for (let i = 0; i \u003C students.length; i++) {\n",[91,53091,53092],{"class":93,"line":1295},[91,53093,53094],{"class":101},"      for (let k in students[i]) {\n",[91,53096,53097],{"class":93,"line":1307},[91,53098,53099],{"class":101},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[91,53101,53102],{"class":93,"line":1590},[91,53103,53104],{"class":101},"        \u002F\u002F输出每个人的名字：\n",[91,53106,53107],{"class":93,"line":1595},[91,53108,53109],{"class":101},"        \u002F\u002Fconsole.log(students[i].name)\n",[91,53111,53112],{"class":93,"line":1601},[91,53113,52373],{"class":101},[91,53115,53116],{"class":93,"line":1606},[91,53117,2165],{"class":101},[91,53119,53120,53122,53124],{"class":93,"line":1620},[91,53121,52392],{"class":101},[91,53123,51788],{"class":51275},[91,53125,51282],{"class":101},[63,53127,53129],{"id":53128},"_2106-内置对象","2.10.6 内置对象",[38,53131,53132],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[46,53134,53135],{},[49,53136,53137],{},"数学对象Math",[38,53139,53140],{},[1440,53141],{"alt":10,"src":53142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[38,53144,53145],{},[340,53146,53149],{"href":53147,"rel":53148},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[38,53151,53152],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[38,53154,53155],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[38,53157,53158],{},"数组不可以使用Math中的max,min来求最大值与最小值",[38,53160,53161],{},"null是一个空对象，可以认为：null类似于let obj={}",[38,53163,53164],{},"null属于对象数据类型",[46,53166,53167],{"start":11},[49,53168,53169],{},"生成任意范围随机数",[38,53171,53172],{},[1440,53173],{"alt":10,"src":53174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[38,53176,53177],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[38,53179,53180],{},"乘以几就取不到几",[38,53182,53183],{},"取数组中的随机元素：",[38,53185,53186],{},"let arr = ['red', 'green', 'blue']",[38,53188,53189],{},"let random = Math.floor(Math.random() * arr.length)",[38,53191,53192],{},"console.log(arr[random])",[38,53194,53195],{},"这个函数得到的是全闭区间",[38,53197,53198],{},"function getRandom(N, M) {",[38,53200,53201],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[38,53203,1048],{},[38,53205,53206],{},"console.log(getRandom(4, 8))",[63,53208,53210],{"id":53209},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[38,53212,53213],{},[1440,53214],{"alt":10,"src":53215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[38,53217,53218],{},[1440,53219],{"alt":10,"src":53220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[38,53222,53223],{},[1440,53224],{"alt":10,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[38,53227,53228],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[38,53230,53231],{},[1440,53232],{"alt":10,"src":53233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[38,53235,53236],{},[1440,53237],{"alt":10,"src":53238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[38,53240,53241],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[38,53243,53244],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[38,53246,53247],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5105,53249,53250],{},"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":10,"searchDepth":11,"depth":11,"links":53252},[53253,53261,53262,53263,53264,53265,53272,53276,53282,53291],{"id":50443,"depth":11,"text":50444,"children":53254},[53255,53256,53257,53258,53259,53260],{"id":50447,"depth":1157,"text":50448},{"id":50464,"depth":1157,"text":50465},{"id":50504,"depth":1157,"text":50505},{"id":50516,"depth":1157,"text":50517},{"id":50525,"depth":1157,"text":50526},{"id":50573,"depth":1157,"text":50574},{"id":50583,"depth":11,"text":50584},{"id":50671,"depth":11,"text":50672},{"id":50694,"depth":11,"text":50695},{"id":50706,"depth":11,"text":50707},{"id":50893,"depth":11,"text":50894,"children":53266},[53267,53268,53269,53270,53271],{"id":50897,"depth":1157,"text":50898},{"id":50906,"depth":1157,"text":50907},{"id":50934,"depth":1157,"text":50935},{"id":50970,"depth":1157,"text":50971},{"id":50995,"depth":1157,"text":50996},{"id":51007,"depth":11,"text":51008,"children":53273},[53274,53275],{"id":51028,"depth":1157,"text":51029},{"id":51122,"depth":1157,"text":51123},{"id":51180,"depth":11,"text":51181,"children":53277},[53278,53279,53280,53281],{"id":51184,"depth":1157,"text":51185},{"id":51208,"depth":1157,"text":51209},{"id":51261,"depth":1157,"text":51262},{"id":52072,"depth":1157,"text":52073},{"id":52458,"depth":11,"text":52459,"children":53283},[53284,53285,53286,53287,53288,53289,53290],{"id":52476,"depth":1157,"text":52477},{"id":52513,"depth":1157,"text":52514},{"id":52544,"depth":1157,"text":52545},{"id":52577,"depth":1157,"text":52578},{"id":52658,"depth":1157,"text":52659},{"id":52756,"depth":1157,"text":52757},{"id":52814,"depth":1157,"text":52815},{"id":52867,"depth":11,"text":52868,"children":53292},[53293,53294,53295,53296,53297,53298,53299],{"id":52871,"depth":1157,"text":52872},{"id":52896,"depth":1157,"text":52897},{"id":52948,"depth":1157,"text":52949},{"id":52968,"depth":1157,"text":52969},{"id":53035,"depth":1157,"text":53036},{"id":53128,"depth":1157,"text":53129},{"id":53209,"depth":1157,"text":53210},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50435,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53306,"title":53307,"body":53308,"description":13,"extension":14,"meta":76648,"navigation":17,"path":76649,"seo":76650,"stem":76651,"__hash__":76652},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53309,"toc":76588},[53310,53313,53316,53319,53324,53327,53330,53333,53337,53341,53347,53352,53360,53367,53370,53374,53379,53384,53389,53392,53395,53406,53409,53413,53416,53419,53424,53429,53434,53437,53440,53532,53535,53540,53543,53548,53551,53554,53559,53562,53567,53571,53574,53588,53592,53597,53600,53603,53607,53612,53615,53619,53623,53628,53632,53637,53640,53643,53646,53649,53652,53655,53660,53665,53693,53696,53699,53702,53707,53710,53713,53716,53719,53723,53752,53756,53761,53766,53769,53772,53775,53780,53895,53900,53905,54066,54071,54074,54078,54083,54088,54091,54094,54097,54100,54103,54106,54109,54112,54115,54118,54121,54124,54127,54130,54132,54135,54138,54141,54146,54150,54547,54550,54556,54560,54565,55847,55852,55855,55858,55861,55866,57062,57066,57072,57077,57080,57085,57090,57094,57098,57103,57106,57111,57114,57117,57121,58029,58032,58036,58257,58260,58263,58266,58492,58495,58719,58722,58726,58731,58734,58737,58965,58968,59001,59004,59008,59013,59017,59020,59023,59026,59029,59032,59035,59038,59043,60323,60327,60330,61423,61427,61430,61433,61436,61439,61443,61446,61449,61451,61459,62940,62944,62947,62950,62953,63162,63165,63169,63173,63178,63183,63186,63189,63194,63198,63203,63206,63315,63319,63324,63329,63332,63335,63339,63344,63349,63354,63357,63360,63371,63374,63379,63384,63387,63390,63463,63467,63472,63475,63477,63488,63492,63497,64823,64826,64829,64832,64834,64837,64840,64843,64846,64849,64852,64855,64858,64861,64864,64867,64870,64872,64874,64877,64881,65975,65978,65981,65997,66011,66014,66019,66025,66030,66034,66038,66043,66047,66052,66494,66499,66502,66506,66511,66514,66517,66521,66526,66530,66535,66540,66544,66549,66554,66557,66562,66567,66571,66576,66581,66685,66688,66692,66697,67063,67066,67069,67072,67075,67078,67081,67084,67087,68383,68387,68392,68397,68400,68403,68406,68409,68411,68416,68421,68424,68428,68433,68438,68443,68446,68449,68452,68455,68458,68463,68466,68470,68475,68480,68484,68489,68492,68497,68500,68503,68506,68509,68512,68517,68520,68523,68526,68529,68533,68538,68541,68545,68550,68553,68556,68560,68589,68592,68596,68600,68605,68609,68614,68617,68620,68623,68626,68629,68632,68635,68638,68641,68644,68647,68650,68653,68656,68660,68665,68670,68673,68677,68681,68686,68689,68693,68696,68699,68704,68709,68714,68719,68724,68727,68730,68735,68740,68744,68749,68752,68757,68760,68763,68766,68769,68774,68777,68786,68790,68795,68798,68801,68805,68808,68813,68817,68820,68826,68832,68836,68862,68865,70426,70429,70925,70928,70933,70938,70943,70947,70952,70957,70962,70966,70971,70974,70977,70980,70983,70987,70990,70995,70998,71003,71007,71012,71015,71020,71025,71030,71033,71036,71041,71046,71049,71052,71056,71059,71064,71067,71072,71075,71080,71085,71090,71093,71098,71163,71166,71177,71181,71186,71358,71362,71367,71370,71373,71376,71380,71391,71395,71398,71403,71408,71411,71414,71417,71420,71423,71425,71428,71431,71434,71439,71442,71447,71450,71454,71457,71460,71474,71478,71481,71536,71541,71544,71547,71552,71555,71559,71564,71694,71698,71703,71708,71789,71794,71798,71801,71806,71811,71817,71820,71823,71826,71830,71835,71838,71849,71853,71870,74917,74921,74924,74927,74930,74951,74955,74958,74966,74969,74974,74977,74980,74985,74990,74994,75015,75019,75024,75027,75030,75033,75036,75040,75045,75048,75052,75057,75060,75065,75068,75073,75076,75081,76284,76288,76293,76296,76301,76585],[29,53311,53307],{"id":53312},"_3web-apis",[38,53314,53315],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[38,53317,53318],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[38,53320,53321],{},[1440,53322],{"alt":10,"src":53323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[38,53325,53326],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[38,53328,53329],{},"建议数组和对象使用 const 来声明",[38,53331,53332],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[33,53334,53336],{"id":53335},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[63,53338,53340],{"id":53339},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[38,53342,53343,53346],{},[88,53344,53345],{},"document"," = HTML 文件解析后的对象化表示；",[38,53348,53349,53351],{},[88,53350,53345],{}," ≠ HTML 文件本身",[38,53353,53354,53359],{},[251,53355,53356],{},[88,53357,53358],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[38,53361,53362,53366],{},[251,53363,53364],{},[88,53365,53345],{}," ：容器里的内容，代表当前加载的网页（DOM）",[38,53368,53369],{},"document实际上为window.document的简写",[63,53371,53373],{"id":53372},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[38,53375,53376],{},[1440,53377],{"alt":10,"src":53378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[38,53380,53381],{},[1440,53382],{"alt":10,"src":53383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[38,53385,53386],{},[1440,53387],{"alt":10,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[38,53390,53391],{},"console.dir()",[38,53393,53394],{},"dir用来打印对象",[1109,53396,53397,53400,53403],{},[49,53398,53399],{},"任何一个标签，都是一个对象",[49,53401,53402],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[49,53404,53405],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[38,53407,53408],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[63,53410,53412],{"id":53411},"_312-获取dom对象","3.1.2 获取DoM对象",[38,53414,53415],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[38,53417,53418],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[38,53420,53421],{},[251,53422,53423],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[46,53425,53426],{},[49,53427,53428],{},"利用CSS选择器来获取标签元素",[38,53430,53431],{},[1440,53432],{"alt":10,"src":53433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[38,53435,53436],{},"里边的选择器必须必须加引号！！！",[38,53438,53439],{},"只选择第一个元素",[83,53441,53443],{"className":53042,"code":53442,"language":53044,"meta":10,"style":10},"\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",[88,53444,53445,53453,53474,53493,53501,53506,53511,53516,53524],{"__ignoreMap":10},[91,53446,53447,53449,53451],{"class":93,"line":94},[91,53448,1012],{"class":101},[91,53450,51775],{"class":51275},[91,53452,51282],{"class":101},[91,53454,53455,53457,53459,53462,53464,53467,53470,53472],{"class":93,"line":11},[91,53456,52119],{"class":101},[91,53458,51586],{"class":51275},[91,53460,53461],{"class":1941}," class",[91,53463,147],{"class":101},[91,53465,53466],{"class":206},"\"box\"",[91,53468,53469],{"class":101},">123\u003C\u002F",[91,53471,51586],{"class":51275},[91,53473,51282],{"class":101},[91,53475,53476,53478,53480,53482,53484,53486,53489,53491],{"class":93,"line":1157},[91,53477,52119],{"class":101},[91,53479,51586],{"class":51275},[91,53481,53461],{"class":1941},[91,53483,147],{"class":101},[91,53485,53466],{"class":206},[91,53487,53488],{"class":101},">456\u003C\u002F",[91,53490,51586],{"class":51275},[91,53492,51282],{"class":101},[91,53494,53495,53497,53499],{"class":93,"line":1172},[91,53496,52119],{"class":101},[91,53498,51788],{"class":51275},[91,53500,51282],{"class":101},[91,53502,53503],{"class":93,"line":1178},[91,53504,53505],{"class":101},"    \u002F\u002F 1.获取匹配的第一个元素\n",[91,53507,53508],{"class":93,"line":1192},[91,53509,53510],{"class":101},"    const box = document.querySelector('div')\n",[91,53512,53513],{"class":93,"line":1198},[91,53514,53515],{"class":101},"    console.dir(box)\n",[91,53517,53518,53520,53522],{"class":93,"line":1289},[91,53519,52392],{"class":101},[91,53521,51788],{"class":51275},[91,53523,51282],{"class":101},[91,53525,53526,53528,53530],{"class":93,"line":1295},[91,53527,51760],{"class":101},[91,53529,51775],{"class":51275},[91,53531,51282],{"class":101},[38,53533,53534],{},"只选123，不选456",[38,53536,53537],{},[1440,53538],{"alt":10,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[38,53541,53542],{},"返回的是一个数组的集合，不能对其进行直接修改",[38,53544,53545],{},[1440,53546],{"alt":10,"src":53547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[38,53549,53550],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[38,53552,53553],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[46,53555,53556],{"start":11},[49,53557,53558],{},"其他方法来获取标签元素",[38,53560,53561],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[38,53563,53564],{},[1440,53565],{"alt":10,"src":53566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[63,53568,53570],{"id":53569},"_313-操作元素的内容","3.1.3 操作元素的内容",[38,53572,53573],{},"设置修改DOM元素内容有两种方式：",[1109,53575,53576,53579,53582,53585],{},[49,53577,53578],{},"元素.innerText=''",[49,53580,53581],{},"元素.innerHTML=''",[49,53583,53584],{},"不写字符串输出数字也是可以的",[49,53586,53587],{},"元素.innerHtml=1",[21977,53589,53591],{"id":53590},"_3131-innertext","3.1.3.1 innerText",[38,53593,53594],{},[1440,53595],{"alt":10,"src":53596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[38,53598,53599],{},"思路：实现了修改盒子中的内容！",[38,53601,53602],{},"它只显示纯文本，不解析标签",[21977,53604,53606],{"id":53605},"_3132-innerhtml","3.1.3.2 innerHTML",[38,53608,53609],{},[1440,53610],{"alt":10,"src":53611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[38,53613,53614],{},"相比于innerText，他的强大之处在于可以解析标签",[63,53616,53618],{"id":53617},"_314-操作元素属性","3.1.4 操作元素属性",[21977,53620,53622],{"id":53621},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[38,53624,53625],{},[1440,53626],{"alt":10,"src":53627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21977,53629,53631],{"id":53630},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[38,53633,53634],{},[1440,53635],{"alt":10,"src":53636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[38,53638,53639],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[38,53641,53642],{},"div.style.backgroundColor = 'hotpink'",[38,53644,53645],{},"如果按照css的写法，-表示减，就会出错",[38,53647,53648],{},"body元素不需要再获取，直接用就行！！！！！！",[38,53650,53651],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[38,53653,53654],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[38,53656,53657],{},[1440,53658],{"alt":10,"src":53659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[38,53661,53662],{},[1440,53663],{"alt":10,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[46,53666,53667,53670,53673,53676,53679,53682],{},[49,53668,53669],{},"className这个方式就是修改很多样式的时候来使用的！",[49,53671,53672],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[49,53674,53675],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[49,53677,53678],{},"className为属性名，如果还用class的话就导致与关键字冲突",[49,53680,53681],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[49,53683,53684,53685,53690],{},"解析标签的时候就变为了",[51586,53686],{"className":53687},[53688,53689],"nav","box",[53691,53692],"br",{},[38,53694,53695],{},"例子：",[51586,53697],{"className":53698},[53688],[51788,53700,53701],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[38,53703,53704],{},[1440,53705],{"alt":10,"src":53706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[38,53708,53709],{},"追加和删除类名用classList",[38,53711,53712],{},"常用于类似于开关的操作",[38,53714,53715],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[38,53717,53718],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21977,53720,53722],{"id":53721},"_3143-牢记点","3.1.4.3 牢记点",[46,53724,53725,53728,53731,53734,53737,53740,53743,53746,53749],{},[49,53726,53727],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[49,53729,53730],{},"使用style属性操作css时不要忘记引号",[49,53732,53733],{},"使用className或者classList时也不要忘记引号",[49,53735,53736],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[49,53738,53739],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[49,53741,53742],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[49,53744,53745],{},"若： let arr=['1','2',3] arr[0]=1",[49,53747,53748],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[49,53750,53751],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[63,53753,53755],{"id":53754},"_315-操作表单元素","3.1.5 操作表单元素",[46,53757,53758],{},[49,53759,53760],{},"天生的属性",[38,53762,53763],{},[1440,53764],{"alt":10,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[38,53767,53768],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[38,53770,53771],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[38,53773,53774],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[38,53776,53777],{},[1440,53778],{"alt":10,"src":53779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[83,53781,53783],{"className":50608,"code":53782,"language":50610,"meta":10,"style":10},"在复选框中如果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",[88,53784,53785,53790,53822,53827,53832,53837,53842,53846,53851,53856,53873,53885,53890],{"__ignoreMap":10},[91,53786,53787],{"class":93,"line":94},[91,53788,53789],{"class":101},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[91,53791,53792,53794,53797,53800,53802,53805,53807,53809,53811,53813,53815,53817,53820],{"class":93,"line":11},[91,53793,1012],{"class":101},[91,53795,53796],{"class":51275},"input",[91,53798,53799],{"class":1941}," type",[91,53801,147],{"class":101},[91,53803,53804],{"class":206},"\"checkbox\"",[91,53806,14899],{"class":1941},[91,53808,147],{"class":101},[91,53810,7631],{"class":206},[91,53812,14938],{"class":1941},[91,53814,147],{"class":101},[91,53816,7631],{"class":206},[91,53818,53819],{"class":1941}," checked",[91,53821,51282],{"class":101},[91,53823,53824],{"class":93,"line":1157},[91,53825,53826],{"class":101},"不选的话：\n",[91,53828,53829],{"class":93,"line":1172},[91,53830,53831],{"class":101},"const input = document.querySelector('input')\n",[91,53833,53834],{"class":93,"line":1178},[91,53835,53836],{"class":101},"input.checked=false\n",[91,53838,53839],{"class":93,"line":1192},[91,53840,53841],{"class":101},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[91,53843,53844],{"class":93,"line":1198},[91,53845,2378],{"emptyLinePlaceholder":17},[91,53847,53848],{"class":93,"line":1289},[91,53849,53850],{"class":101},"禁用按钮：\n",[91,53852,53853],{"class":93,"line":1295},[91,53854,53855],{"class":101},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[91,53857,53858,53860,53863,53866,53869,53871],{"class":93,"line":1307},[91,53859,1012],{"class":101},[91,53861,53862],{"class":51275},"button",[91,53864,53865],{"class":1941}," disabled",[91,53867,53868],{"class":101},">点击\u003C\u002F",[91,53870,53862],{"class":51275},[91,53872,51282],{"class":101},[91,53874,53875,53877,53879,53881,53883],{"class":93,"line":1590},[91,53876,1012],{"class":101},[91,53878,53862],{"class":51275},[91,53880,53868],{"class":101},[91,53882,53862],{"class":51275},[91,53884,51282],{"class":101},[91,53886,53887],{"class":93,"line":1595},[91,53888,53889],{"class":101},"const bt = document.querySelector('button')\n",[91,53891,53892],{"class":93,"line":1601},[91,53893,53894],{"class":101},"bt.disabled = false\n",[46,53896,53897],{"start":11},[49,53898,53899],{},"自定义属性",[38,53901,53902],{},[1440,53903],{"alt":10,"src":53904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[83,53906,53908],{"className":53042,"code":53907,"language":53044,"meta":10,"style":10},"\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",[88,53909,53910,53918,53946,53965,53984,54003,54022,54030,54035,54040,54045,54050,54058],{"__ignoreMap":10},[91,53911,53912,53914,53916],{"class":93,"line":94},[91,53913,1012],{"class":101},[91,53915,51775],{"class":51275},[91,53917,51282],{"class":101},[91,53919,53920,53922,53924,53927,53929,53931,53934,53936,53939,53942,53944],{"class":93,"line":11},[91,53921,52119],{"class":101},[91,53923,51586],{"class":51275},[91,53925,53926],{"class":1941}," data-id",[91,53928,147],{"class":101},[91,53930,3656],{"class":206},[91,53932,53933],{"class":1941}," data-spm",[91,53935,147],{"class":101},[91,53937,53938],{"class":206},"\"我不知道\"",[91,53940,53941],{"class":101},">1\u003C\u002F",[91,53943,51586],{"class":51275},[91,53945,51282],{"class":101},[91,53947,53948,53950,53952,53954,53956,53958,53961,53963],{"class":93,"line":1157},[91,53949,52119],{"class":101},[91,53951,51586],{"class":51275},[91,53953,53926],{"class":1941},[91,53955,147],{"class":101},[91,53957,3679],{"class":206},[91,53959,53960],{"class":101},">2\u003C\u002F",[91,53962,51586],{"class":51275},[91,53964,51282],{"class":101},[91,53966,53967,53969,53971,53973,53975,53977,53980,53982],{"class":93,"line":1172},[91,53968,52119],{"class":101},[91,53970,51586],{"class":51275},[91,53972,53926],{"class":1941},[91,53974,147],{"class":101},[91,53976,3692],{"class":206},[91,53978,53979],{"class":101},">3\u003C\u002F",[91,53981,51586],{"class":51275},[91,53983,51282],{"class":101},[91,53985,53986,53988,53990,53992,53994,53996,53999,54001],{"class":93,"line":1178},[91,53987,52119],{"class":101},[91,53989,51586],{"class":51275},[91,53991,53926],{"class":1941},[91,53993,147],{"class":101},[91,53995,3705],{"class":206},[91,53997,53998],{"class":101},">4\u003C\u002F",[91,54000,51586],{"class":51275},[91,54002,51282],{"class":101},[91,54004,54005,54007,54009,54011,54013,54015,54018,54020],{"class":93,"line":1192},[91,54006,52119],{"class":101},[91,54008,51586],{"class":51275},[91,54010,53926],{"class":1941},[91,54012,147],{"class":101},[91,54014,3726],{"class":206},[91,54016,54017],{"class":101},">5\u003C\u002F",[91,54019,51586],{"class":51275},[91,54021,51282],{"class":101},[91,54023,54024,54026,54028],{"class":93,"line":1198},[91,54025,52119],{"class":101},[91,54027,51788],{"class":51275},[91,54029,51282],{"class":101},[91,54031,54032],{"class":93,"line":1289},[91,54033,54034],{"class":101},"    const one = document.querySelector('div')\n",[91,54036,54037],{"class":93,"line":1295},[91,54038,54039],{"class":101},"    console.log(one.dataset)\n",[91,54041,54042],{"class":93,"line":1307},[91,54043,54044],{"class":101},"    console.log(one.dataset.id)\n",[91,54046,54047],{"class":93,"line":1590},[91,54048,54049],{"class":101},"    console.log(one.dataset.spm)\n",[91,54051,54052,54054,54056],{"class":93,"line":1595},[91,54053,52392],{"class":101},[91,54055,51788],{"class":51275},[91,54057,51282],{"class":101},[91,54059,54060,54062,54064],{"class":93,"line":1601},[91,54061,51760],{"class":101},[91,54063,51775],{"class":51275},[91,54065,51282],{"class":101},[38,54067,54068],{},[1440,54069],{"alt":10,"src":54070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[38,54072,54073],{},"document.querySelector选择的是第一个对象（元素）",[63,54075,54077],{"id":54076},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[38,54079,54080],{},[1440,54081],{"alt":10,"src":54082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[38,54084,54085],{},[1440,54086],{"alt":10,"src":54087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[38,54089,54090],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51788,54092,54093],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[38,54095,54096],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51788,54098,54099],{},"\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",[38,54101,54102],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[38,54104,54105],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[38,54107,54108],{},"单位为毫秒！！！",[38,54110,54111],{},"可以搭配匿名函数来用！！！",[38,54113,54114],{},"setInterval(function () {",[38,54116,54117],{},"alert('两秒执行一次')",[38,54119,54120],{},"}, 2000)",[38,54122,54123],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[38,54125,54126],{},"function fn() {",[38,54128,54129],{},"document.write(1)",[38,54131,1048],{},[38,54133,54134],{},"setInterval(fn, 1000)",[38,54136,54137],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[38,54139,54140],{},"setInterval('fn()', 1000)",[38,54142,54143],{},[1440,54144],{"alt":10,"src":54145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21977,54147,54149],{"id":54148},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[83,54151,54153],{"className":50608,"code":54152,"language":50610,"meta":10,"style":10},"\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",[88,54154,54155,54165,54179,54183,54191,54205,54225,54237,54245,54249,54257,54294,54299,54304,54309,54317,54325,54347,54355,54360,54382,54387,54392,54403,54408,54428,54436,54451,54466,54477,54482,54492,54502,54506,54515,54519,54527,54535,54539],{"__ignoreMap":10},[91,54156,54157,54159,54161,54163],{"class":93,"line":94},[91,54158,51272],{"class":101},[91,54160,51276],{"class":51275},[91,54162,51279],{"class":1941},[91,54164,51282],{"class":101},[91,54166,54167,54169,54171,54173,54175,54177],{"class":93,"line":11},[91,54168,1012],{"class":101},[91,54170,50610],{"class":51275},[91,54172,51291],{"class":1941},[91,54174,147],{"class":101},[91,54176,51296],{"class":206},[91,54178,51282],{"class":101},[91,54180,54181],{"class":93,"line":1157},[91,54182,2378],{"emptyLinePlaceholder":17},[91,54184,54185,54187,54189],{"class":93,"line":1172},[91,54186,1012],{"class":101},[91,54188,51309],{"class":51275},[91,54190,51282],{"class":101},[91,54192,54193,54195,54197,54199,54201,54203],{"class":93,"line":1178},[91,54194,52119],{"class":101},[91,54196,51319],{"class":51275},[91,54198,51322],{"class":1941},[91,54200,147],{"class":101},[91,54202,51327],{"class":206},[91,54204,51282],{"class":101},[91,54206,54207,54209,54211,54213,54215,54217,54219,54221,54223],{"class":93,"line":1192},[91,54208,52119],{"class":101},[91,54210,51319],{"class":51275},[91,54212,14899],{"class":1941},[91,54214,147],{"class":101},[91,54216,51366],{"class":206},[91,54218,51346],{"class":1941},[91,54220,147],{"class":101},[91,54222,51373],{"class":206},[91,54224,51282],{"class":101},[91,54226,54227,54229,54231,54233,54235],{"class":93,"line":1198},[91,54228,52119],{"class":101},[91,54230,51382],{"class":51275},[91,54232,51385],{"class":101},[91,54234,51382],{"class":51275},[91,54236,51282],{"class":101},[91,54238,54239,54241,54243],{"class":93,"line":1289},[91,54240,51760],{"class":101},[91,54242,51309],{"class":51275},[91,54244,51282],{"class":101},[91,54246,54247],{"class":93,"line":1295},[91,54248,2378],{"emptyLinePlaceholder":17},[91,54250,54251,54253,54255],{"class":93,"line":1307},[91,54252,1012],{"class":101},[91,54254,51775],{"class":51275},[91,54256,51282],{"class":101},[91,54258,54259,54261,54264,54266,54268,54270,54272,54274,54276,54279,54281,54284,54287,54289,54292],{"class":93,"line":1590},[91,54260,52119],{"class":101},[91,54262,54263],{"class":51275},"textarea",[91,54265,14899],{"class":1941},[91,54267,147],{"class":101},[91,54269,7631],{"class":206},[91,54271,14938],{"class":1941},[91,54273,147],{"class":101},[91,54275,7631],{"class":206},[91,54277,54278],{"class":1941}," cols",[91,54280,147],{"class":101},[91,54282,54283],{"class":206},"\"30\"",[91,54285,54286],{"class":1941}," rows",[91,54288,147],{"class":101},[91,54290,54291],{"class":206},"\"10\"",[91,54293,51282],{"class":101},[91,54295,54296],{"class":93,"line":1595},[91,54297,54298],{"class":101},"        用户注册协议\n",[91,54300,54301],{"class":93,"line":1601},[91,54302,54303],{"class":101},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[91,54305,54306],{"class":93,"line":1606},[91,54307,54308],{"class":101},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[91,54310,54311,54313,54315],{"class":93,"line":1620},[91,54312,51751],{"class":101},[91,54314,54263],{"class":51275},[91,54316,51282],{"class":101},[91,54318,54319,54321,54323],{"class":93,"line":1625},[91,54320,52119],{"class":101},[91,54322,53691],{"class":51275},[91,54324,51282],{"class":101},[91,54326,54327,54329,54331,54333,54335,54338,54340,54343,54345],{"class":93,"line":1631},[91,54328,52119],{"class":101},[91,54330,53862],{"class":51275},[91,54332,53461],{"class":1941},[91,54334,147],{"class":101},[91,54336,54337],{"class":206},"\"btn\"",[91,54339,53865],{"class":1941},[91,54341,54342],{"class":101},">我已经阅读用户协议(5)\u003C\u002F",[91,54344,53862],{"class":51275},[91,54346,51282],{"class":101},[91,54348,54349,54351,54353],{"class":93,"line":1652},[91,54350,52119],{"class":101},[91,54352,51788],{"class":51275},[91,54354,51282],{"class":101},[91,54356,54357],{"class":93,"line":1657},[91,54358,54359],{"class":160},"    \u002F\u002F 1. 获取元素\n",[91,54361,54362,54364,54367,54369,54372,54375,54377,54380],{"class":93,"line":1671},[91,54363,11200],{"class":97},[91,54365,54366],{"class":150}," btn",[91,54368,13543],{"class":97},[91,54370,54371],{"class":101}," document.",[91,54373,54374],{"class":1941},"querySelector",[91,54376,102],{"class":101},[91,54378,54379],{"class":206},"'.btn'",[91,54381,108],{"class":101},[91,54383,54384],{"class":93,"line":1676},[91,54385,54386],{"class":160},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[91,54388,54389],{"class":93,"line":1705},[91,54390,54391],{"class":160},"    \u002F\u002F 2. 倒计时\n",[91,54393,54394,54396,54398,54400],{"class":93,"line":1710},[91,54395,52194],{"class":97},[91,54397,9417],{"class":101},[91,54399,147],{"class":97},[91,54401,54402],{"class":150}," 5\n",[91,54404,54405],{"class":93,"line":1727},[91,54406,54407],{"class":160},"    \u002F\u002F 2.1 开启定时器\n",[91,54409,54410,54412,54415,54417,54420,54422,54425],{"class":93,"line":1732},[91,54411,52194],{"class":97},[91,54413,54414],{"class":101}," n ",[91,54416,147],{"class":97},[91,54418,54419],{"class":1941}," setInterval",[91,54421,102],{"class":101},[91,54423,54424],{"class":97},"function",[91,54426,54427],{"class":101}," () {\n",[91,54429,54430,54433],{"class":93,"line":1737},[91,54431,54432],{"class":101},"      i",[91,54434,54435],{"class":97},"--\n",[91,54437,54438,54441,54443,54446,54448],{"class":93,"line":1742},[91,54439,54440],{"class":101},"      btn.innerHTML ",[91,54442,147],{"class":97},[91,54444,54445],{"class":206}," `我已经阅读用户协议(${",[91,54447,543],{"class":101},[91,54449,54450],{"class":206},"})`\n",[91,54452,54453,54456,54459,54462,54464],{"class":93,"line":1756},[91,54454,54455],{"class":97},"      if",[91,54457,54458],{"class":101}," (i ",[91,54460,54461],{"class":97},"===",[91,54463,4071],{"class":150},[91,54465,12421],{"class":101},[91,54467,54468,54471,54474],{"class":93,"line":1761},[91,54469,54470],{"class":1941},"        clearInterval",[91,54472,54473],{"class":101},"(n)  ",[91,54475,54476],{"class":160},"\u002F\u002F 关闭定时器\n",[91,54478,54479],{"class":93,"line":2555},[91,54480,54481],{"class":160},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[91,54483,54484,54487,54489],{"class":93,"line":2569},[91,54485,54486],{"class":101},"        btn.disabled ",[91,54488,147],{"class":97},[91,54490,54491],{"class":150}," false\n",[91,54493,54494,54497,54499],{"class":93,"line":2577},[91,54495,54496],{"class":101},"        btn.innerHTML ",[91,54498,147],{"class":97},[91,54500,54501],{"class":206}," '同意'\n",[91,54503,54504],{"class":93,"line":2582},[91,54505,52373],{"class":101},[91,54507,54508,54511,54513],{"class":93,"line":2588},[91,54509,54510],{"class":101},"    }, ",[91,54512,6389],{"class":150},[91,54514,108],{"class":101},[91,54516,54517],{"class":93,"line":2594},[91,54518,2378],{"emptyLinePlaceholder":17},[91,54520,54521,54523,54525],{"class":93,"line":2599},[91,54522,52392],{"class":101},[91,54524,51788],{"class":51275},[91,54526,51282],{"class":101},[91,54528,54529,54531,54533],{"class":93,"line":7927},[91,54530,51760],{"class":101},[91,54532,51775],{"class":51275},[91,54534,51282],{"class":101},[91,54536,54537],{"class":93,"line":7951},[91,54538,2378],{"emptyLinePlaceholder":17},[91,54540,54541,54543,54545],{"class":93,"line":7956},[91,54542,51760],{"class":101},[91,54544,50610],{"class":51275},[91,54546,51282],{"class":101},[38,54548,54549],{},"不要一直想着用死循环,避免死循环",[38,54551,54552,54555],{},[88,54553,54554],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21977,54557,54559],{"id":54558},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[46,54561,54562],{},[49,54563,54564],{},"法1",[83,54566,54568],{"className":50608,"code":54567,"language":50610,"meta":10,"style":10},"\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",[88,54569,54570,54580,54594,54598,54606,54620,54640,54652,54660,54666,54677,54688,54692,54696,54703,54715,54719,54723,54730,54742,54756,54769,54783,54787,54791,54798,54809,54820,54831,54843,54855,54867,54871,54875,54883,54893,54906,54918,54931,54935,54939,54946,54956,54968,54980,54991,55002,55012,55024,55036,55040,55044,55053,55065,55077,55105,55118,55122,55126,55133,55144,55148,55156,55164,55168,55176,55190,55205,55229,55237,55252,55265,55273,55294,55306,55318,55330,55342,55354,55366,55378,55387,55395,55403,55411,55423,55446,55465,55484,55503,55522,55541,55560,55580,55584,55604,55623,55643,55664,55675,55692,55702,55712,55722,55727,55732,55737,55742,55767,55780,55784,55807,55811,55819,55827,55835,55839],{"__ignoreMap":10},[91,54571,54572,54574,54576,54578],{"class":93,"line":94},[91,54573,51272],{"class":101},[91,54575,51276],{"class":51275},[91,54577,51279],{"class":1941},[91,54579,51282],{"class":101},[91,54581,54582,54584,54586,54588,54590,54592],{"class":93,"line":11},[91,54583,1012],{"class":101},[91,54585,50610],{"class":51275},[91,54587,51291],{"class":1941},[91,54589,147],{"class":101},[91,54591,51296],{"class":206},[91,54593,51282],{"class":101},[91,54595,54596],{"class":93,"line":1157},[91,54597,2378],{"emptyLinePlaceholder":17},[91,54599,54600,54602,54604],{"class":93,"line":1172},[91,54601,1012],{"class":101},[91,54603,51309],{"class":51275},[91,54605,51282],{"class":101},[91,54607,54608,54610,54612,54614,54616,54618],{"class":93,"line":1178},[91,54609,52119],{"class":101},[91,54611,51319],{"class":51275},[91,54613,51322],{"class":1941},[91,54615,147],{"class":101},[91,54617,51327],{"class":206},[91,54619,51282],{"class":101},[91,54621,54622,54624,54626,54628,54630,54632,54634,54636,54638],{"class":93,"line":1192},[91,54623,52119],{"class":101},[91,54625,51319],{"class":51275},[91,54627,14899],{"class":1941},[91,54629,147],{"class":101},[91,54631,51366],{"class":206},[91,54633,51346],{"class":1941},[91,54635,147],{"class":101},[91,54637,51373],{"class":206},[91,54639,51282],{"class":101},[91,54641,54642,54644,54646,54648,54650],{"class":93,"line":1198},[91,54643,52119],{"class":101},[91,54645,51382],{"class":51275},[91,54647,51385],{"class":101},[91,54649,51382],{"class":51275},[91,54651,51282],{"class":101},[91,54653,54654,54656,54658],{"class":93,"line":1289},[91,54655,52119],{"class":101},[91,54657,5105],{"class":51275},[91,54659,51282],{"class":101},[91,54661,54662,54664],{"class":93,"line":1295},[91,54663,6382],{"class":51275},[91,54665,15551],{"class":101},[91,54667,54668,54671,54673,54675],{"class":93,"line":1307},[91,54669,54670],{"class":150},"      padding",[91,54672,51412],{"class":101},[91,54674,293],{"class":150},[91,54676,1268],{"class":101},[91,54678,54679,54682,54684,54686],{"class":93,"line":1590},[91,54680,54681],{"class":150},"      margin",[91,54683,51412],{"class":101},[91,54685,293],{"class":150},[91,54687,1268],{"class":101},[91,54689,54690],{"class":93,"line":1595},[91,54691,2165],{"class":101},[91,54693,54694],{"class":93,"line":1601},[91,54695,2378],{"emptyLinePlaceholder":17},[91,54697,54698,54701],{"class":93,"line":1606},[91,54699,54700],{"class":51275},"    li",[91,54702,15551],{"class":101},[91,54704,54705,54708,54710,54713],{"class":93,"line":1620},[91,54706,54707],{"class":150},"      list-style",[91,54709,51412],{"class":101},[91,54711,54712],{"class":150},"none",[91,54714,1268],{"class":101},[91,54716,54717],{"class":93,"line":1625},[91,54718,2165],{"class":101},[91,54720,54721],{"class":93,"line":1631},[91,54722,2378],{"emptyLinePlaceholder":17},[91,54724,54725,54728],{"class":93,"line":1652},[91,54726,54727],{"class":1941},"    .box",[91,54729,15551],{"class":101},[91,54731,54732,54735,54737,54740],{"class":93,"line":1657},[91,54733,54734],{"class":150},"      position",[91,54736,51412],{"class":101},[91,54738,54739],{"class":150},"relative",[91,54741,1268],{"class":101},[91,54743,54744,54747,54749,54752,54754],{"class":93,"line":1671},[91,54745,54746],{"class":150},"      width",[91,54748,51412],{"class":101},[91,54750,54751],{"class":150},"976",[91,54753,51467],{"class":97},[91,54755,1268],{"class":101},[91,54757,54758,54761,54763,54765,54767],{"class":93,"line":1676},[91,54759,54760],{"class":150},"      height",[91,54762,51412],{"class":101},[91,54764,1517],{"class":150},[91,54766,51467],{"class":97},[91,54768,1268],{"class":101},[91,54770,54771,54773,54775,54777,54779,54781],{"class":93,"line":1705},[91,54772,54681],{"class":150},[91,54774,51412],{"class":101},[91,54776,413],{"class":150},[91,54778,51467],{"class":97},[91,54780,51531],{"class":150},[91,54782,1268],{"class":101},[91,54784,54785],{"class":93,"line":1710},[91,54786,2165],{"class":101},[91,54788,54789],{"class":93,"line":1727},[91,54790,2378],{"emptyLinePlaceholder":17},[91,54792,54793,54796],{"class":93,"line":1732},[91,54794,54795],{"class":1941},"    .slider-footer",[91,54797,15551],{"class":101},[91,54799,54800,54802,54804,54807],{"class":93,"line":1737},[91,54801,54734],{"class":150},[91,54803,51412],{"class":101},[91,54805,54806],{"class":150},"absolute",[91,54808,1268],{"class":101},[91,54810,54811,54814,54816,54818],{"class":93,"line":1742},[91,54812,54813],{"class":150},"      left",[91,54815,51412],{"class":101},[91,54817,293],{"class":150},[91,54819,1268],{"class":101},[91,54821,54822,54825,54827,54829],{"class":93,"line":1756},[91,54823,54824],{"class":150},"      bottom",[91,54826,51412],{"class":101},[91,54828,293],{"class":150},[91,54830,1268],{"class":101},[91,54832,54833,54835,54837,54839,54841],{"class":93,"line":1761},[91,54834,54746],{"class":150},[91,54836,51412],{"class":101},[91,54838,413],{"class":150},[91,54840,430],{"class":97},[91,54842,1268],{"class":101},[91,54844,54845,54847,54849,54851,54853],{"class":93,"line":2555},[91,54846,54760],{"class":150},[91,54848,51412],{"class":101},[91,54850,677],{"class":150},[91,54852,430],{"class":97},[91,54854,1268],{"class":101},[91,54856,54857,54860,54862,54865],{"class":93,"line":2569},[91,54858,54859],{"class":150},"      background-color",[91,54861,51412],{"class":101},[91,54863,54864],{"class":150},"skyblue",[91,54866,1268],{"class":101},[91,54868,54869],{"class":93,"line":2577},[91,54870,2165],{"class":101},[91,54872,54873],{"class":93,"line":2582},[91,54874,2378],{"emptyLinePlaceholder":17},[91,54876,54877,54879,54881],{"class":93,"line":2588},[91,54878,54795],{"class":1941},[91,54880,6804],{"class":51275},[91,54882,15551],{"class":101},[91,54884,54885,54887,54889,54891],{"class":93,"line":2594},[91,54886,54734],{"class":150},[91,54888,51412],{"class":101},[91,54890,54806],{"class":150},[91,54892,1268],{"class":101},[91,54894,54895,54898,54900,54902,54904],{"class":93,"line":2599},[91,54896,54897],{"class":150},"      font-size",[91,54899,51412],{"class":101},[91,54901,1003],{"class":150},[91,54903,51467],{"class":97},[91,54905,1268],{"class":101},[91,54907,54908,54910,54912,54914,54916],{"class":93,"line":7927},[91,54909,54813],{"class":150},[91,54911,51412],{"class":101},[91,54913,802],{"class":150},[91,54915,51467],{"class":97},[91,54917,1268],{"class":101},[91,54919,54920,54923,54925,54927,54929],{"class":93,"line":7951},[91,54921,54922],{"class":150},"      top",[91,54924,51412],{"class":101},[91,54926,421],{"class":150},[91,54928,51467],{"class":97},[91,54930,1268],{"class":101},[91,54932,54933],{"class":93,"line":7956},[91,54934,2165],{"class":101},[91,54936,54937],{"class":93,"line":7962},[91,54938,2378],{"emptyLinePlaceholder":17},[91,54940,54941,54944],{"class":93,"line":7989},[91,54942,54943],{"class":51275},"    ul",[91,54945,15551],{"class":101},[91,54947,54948,54950,54952,54954],{"class":93,"line":7994},[91,54949,54734],{"class":150},[91,54951,51412],{"class":101},[91,54953,54806],{"class":150},[91,54955,1268],{"class":101},[91,54957,54958,54960,54962,54964,54966],{"class":93,"line":8000},[91,54959,54922],{"class":150},[91,54961,51412],{"class":101},[91,54963,883],{"class":150},[91,54965,51467],{"class":97},[91,54967,1268],{"class":101},[91,54969,54970,54972,54974,54976,54978],{"class":93,"line":8012},[91,54971,54813],{"class":150},[91,54973,51412],{"class":101},[91,54975,802],{"class":150},[91,54977,51467],{"class":97},[91,54979,1268],{"class":101},[91,54981,54982,54985,54987,54989],{"class":93,"line":8024},[91,54983,54984],{"class":150},"      display",[91,54986,51412],{"class":101},[91,54988,51452],{"class":150},[91,54990,1268],{"class":101},[91,54992,54993,54996,54998,55000],{"class":93,"line":8036},[91,54994,54995],{"class":150},"      justify-content",[91,54997,51412],{"class":101},[91,54999,51643],{"class":150},[91,55001,1268],{"class":101},[91,55003,55004,55006,55008,55010],{"class":93,"line":9695},[91,55005,54734],{"class":150},[91,55007,51412],{"class":101},[91,55009,54806],{"class":150},[91,55011,1268],{"class":101},[91,55013,55014,55016,55018,55020,55022],{"class":93,"line":9720},[91,55015,54746],{"class":150},[91,55017,51412],{"class":101},[91,55019,3970],{"class":150},[91,55021,51467],{"class":97},[91,55023,1268],{"class":101},[91,55025,55026,55028,55030,55032,55034],{"class":93,"line":9743},[91,55027,54760],{"class":150},[91,55029,51412],{"class":101},[91,55031,802],{"class":150},[91,55033,51467],{"class":97},[91,55035,1268],{"class":101},[91,55037,55038],{"class":93,"line":9767},[91,55039,2165],{"class":101},[91,55041,55042],{"class":93,"line":9772},[91,55043,2378],{"emptyLinePlaceholder":17},[91,55045,55046,55048,55051],{"class":93,"line":9777},[91,55047,54943],{"class":51275},[91,55049,55050],{"class":51275}," li",[91,55052,15551],{"class":101},[91,55054,55055,55057,55059,55061,55063],{"class":93,"line":9782},[91,55056,54746],{"class":150},[91,55058,51412],{"class":101},[91,55060,802],{"class":150},[91,55062,51467],{"class":97},[91,55064,1268],{"class":101},[91,55066,55067,55069,55071,55073,55075],{"class":93,"line":9791},[91,55068,54760],{"class":150},[91,55070,51412],{"class":101},[91,55072,802],{"class":150},[91,55074,51467],{"class":97},[91,55076,1268],{"class":101},[91,55078,55079,55081,55083,55086,55088,55090,55092,55094,55096,55098,55100,55103],{"class":93,"line":9796},[91,55080,54859],{"class":150},[91,55082,51412],{"class":101},[91,55084,55085],{"class":150},"rgba",[91,55087,102],{"class":101},[91,55089,293],{"class":150},[91,55091,12414],{"class":101},[91,55093,293],{"class":150},[91,55095,12414],{"class":101},[91,55097,293],{"class":150},[91,55099,12414],{"class":101},[91,55101,55102],{"class":150},".4",[91,55104,2697],{"class":101},[91,55106,55107,55110,55112,55114,55116],{"class":93,"line":9802},[91,55108,55109],{"class":150},"      border-radius",[91,55111,51412],{"class":101},[91,55113,548],{"class":150},[91,55115,51467],{"class":97},[91,55117,1268],{"class":101},[91,55119,55120],{"class":93,"line":9823},[91,55121,2165],{"class":101},[91,55123,55124],{"class":93,"line":9829},[91,55125,2378],{"emptyLinePlaceholder":17},[91,55127,55128,55131],{"class":93,"line":9843},[91,55129,55130],{"class":1941},"    .activate",[91,55132,15551],{"class":101},[91,55134,55135,55137,55139,55142],{"class":93,"line":9849},[91,55136,54859],{"class":150},[91,55138,51412],{"class":101},[91,55140,55141],{"class":150},"#f7f7f7",[91,55143,1268],{"class":101},[91,55145,55146],{"class":93,"line":9876},[91,55147,2165],{"class":101},[91,55149,55150,55152,55154],{"class":93,"line":9885},[91,55151,52392],{"class":101},[91,55153,5105],{"class":51275},[91,55155,51282],{"class":101},[91,55157,55158,55160,55162],{"class":93,"line":9891},[91,55159,51760],{"class":101},[91,55161,51309],{"class":51275},[91,55163,51282],{"class":101},[91,55165,55166],{"class":93,"line":9899},[91,55167,2378],{"emptyLinePlaceholder":17},[91,55169,55170,55172,55174],{"class":93,"line":9904},[91,55171,1012],{"class":101},[91,55173,51775],{"class":51275},[91,55175,51282],{"class":101},[91,55177,55178,55180,55182,55184,55186,55188],{"class":93,"line":16583},[91,55179,52119],{"class":101},[91,55181,51586],{"class":51275},[91,55183,53461],{"class":1941},[91,55185,147],{"class":101},[91,55187,53466],{"class":206},[91,55189,51282],{"class":101},[91,55191,55192,55194,55196,55198,55200,55203],{"class":93,"line":16589},[91,55193,51316],{"class":101},[91,55195,51586],{"class":51275},[91,55197,53461],{"class":1941},[91,55199,147],{"class":101},[91,55201,55202],{"class":206},"\"slider-wrapper\"",[91,55204,51282],{"class":101},[91,55206,55207,55210,55212,55215,55217,55220,55223,55225,55227],{"class":93,"line":16612},[91,55208,55209],{"class":101},"      \u003C",[91,55211,1440],{"class":51275},[91,55213,55214],{"class":1941}," src",[91,55216,147],{"class":101},[91,55218,55219],{"class":206},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[91,55221,55222],{"class":1941}," alt",[91,55224,147],{"class":101},[91,55226,7631],{"class":206},[91,55228,51282],{"class":101},[91,55230,55231,55233,55235],{"class":93,"line":16618},[91,55232,51751],{"class":101},[91,55234,51586],{"class":51275},[91,55236,51282],{"class":101},[91,55238,55239,55241,55243,55245,55247,55250],{"class":93,"line":16641},[91,55240,51316],{"class":101},[91,55242,51586],{"class":51275},[91,55244,53461],{"class":1941},[91,55246,147],{"class":101},[91,55248,55249],{"class":206},"\"slider-footer\"",[91,55251,51282],{"class":101},[91,55253,55254,55256,55258,55261,55263],{"class":93,"line":16655},[91,55255,55209],{"class":101},[91,55257,38],{"class":51275},[91,55259,55260],{"class":101},">对人类来说会不会太超前了?\u003C\u002F",[91,55262,38],{"class":51275},[91,55264,51282],{"class":101},[91,55266,55267,55269,55271],{"class":93,"line":16675},[91,55268,55209],{"class":101},[91,55270,1109],{"class":51275},[91,55272,51282],{"class":101},[91,55274,55275,55278,55280,55282,55284,55287,55290,55292],{"class":93,"line":16681},[91,55276,55277],{"class":101},"        \u003C",[91,55279,49],{"class":51275},[91,55281,53461],{"class":1941},[91,55283,147],{"class":101},[91,55285,55286],{"class":206},"\"activate\"",[91,55288,55289],{"class":101},">\u003C\u002F",[91,55291,49],{"class":51275},[91,55293,51282],{"class":101},[91,55295,55296,55298,55300,55302,55304],{"class":93,"line":16692},[91,55297,55277],{"class":101},[91,55299,49],{"class":51275},[91,55301,55289],{"class":101},[91,55303,49],{"class":51275},[91,55305,51282],{"class":101},[91,55307,55308,55310,55312,55314,55316],{"class":93,"line":16715},[91,55309,55277],{"class":101},[91,55311,49],{"class":51275},[91,55313,55289],{"class":101},[91,55315,49],{"class":51275},[91,55317,51282],{"class":101},[91,55319,55320,55322,55324,55326,55328],{"class":93,"line":16737},[91,55321,55277],{"class":101},[91,55323,49],{"class":51275},[91,55325,55289],{"class":101},[91,55327,49],{"class":51275},[91,55329,51282],{"class":101},[91,55331,55332,55334,55336,55338,55340],{"class":93,"line":16742},[91,55333,55277],{"class":101},[91,55335,49],{"class":51275},[91,55337,55289],{"class":101},[91,55339,49],{"class":51275},[91,55341,51282],{"class":101},[91,55343,55344,55346,55348,55350,55352],{"class":93,"line":16748},[91,55345,55277],{"class":101},[91,55347,49],{"class":51275},[91,55349,55289],{"class":101},[91,55351,49],{"class":51275},[91,55353,51282],{"class":101},[91,55355,55356,55358,55360,55362,55364],{"class":93,"line":16762},[91,55357,55277],{"class":101},[91,55359,49],{"class":51275},[91,55361,55289],{"class":101},[91,55363,49],{"class":51275},[91,55365,51282],{"class":101},[91,55367,55368,55370,55372,55374,55376],{"class":93,"line":16775},[91,55369,55277],{"class":101},[91,55371,49],{"class":51275},[91,55373,55289],{"class":101},[91,55375,49],{"class":51275},[91,55377,51282],{"class":101},[91,55379,55380,55383,55385],{"class":93,"line":16780},[91,55381,55382],{"class":101},"      \u003C\u002F",[91,55384,1109],{"class":51275},[91,55386,51282],{"class":101},[91,55388,55389,55391,55393],{"class":93,"line":16794},[91,55390,51751],{"class":101},[91,55392,51586],{"class":51275},[91,55394,51282],{"class":101},[91,55396,55397,55399,55401],{"class":93,"line":16799},[91,55398,52392],{"class":101},[91,55400,51586],{"class":51275},[91,55402,51282],{"class":101},[91,55404,55405,55407,55409],{"class":93,"line":16805},[91,55406,52119],{"class":101},[91,55408,51788],{"class":51275},[91,55410,51282],{"class":101},[91,55412,55413,55415,55418,55420],{"class":93,"line":16810},[91,55414,11200],{"class":97},[91,55416,55417],{"class":150}," arrImage",[91,55419,13543],{"class":97},[91,55421,55422],{"class":101}," [\n",[91,55424,55425,55428,55431,55434,55437,55440,55443],{"class":93,"line":16824},[91,55426,55427],{"class":101},"      { url: ",[91,55429,55430],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[91,55432,55433],{"class":101},", title: ",[91,55435,55436],{"class":206},"'对人类来说会不会太超前了?'",[91,55438,55439],{"class":101},", color: ",[91,55441,55442],{"class":206},"'rgba(100,67,68)'",[91,55444,55445],{"class":101}," },\n",[91,55447,55448,55450,55453,55455,55458,55460,55463],{"class":93,"line":16829},[91,55449,55427],{"class":101},[91,55451,55452],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[91,55454,55433],{"class":101},[91,55456,55457],{"class":206},"'开启剑与雪的黑暗传说!'",[91,55459,55439],{"class":101},[91,55461,55462],{"class":206},"'rgba(43,35,26)'",[91,55464,55445],{"class":101},[91,55466,55467,55469,55472,55474,55477,55479,55482],{"class":93,"line":16834},[91,55468,55427],{"class":101},[91,55470,55471],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[91,55473,55433],{"class":101},[91,55475,55476],{"class":206},"'真正的jo厨出现了!'",[91,55478,55439],{"class":101},[91,55480,55481],{"class":206},"'rgba(36,31,33)'",[91,55483,55445],{"class":101},[91,55485,55486,55488,55491,55493,55496,55498,55501],{"class":93,"line":16848},[91,55487,55427],{"class":101},[91,55489,55490],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[91,55492,55433],{"class":101},[91,55494,55495],{"class":206},"'李玉刚:让世界通过b站看到东方大国文化'",[91,55497,55439],{"class":101},[91,55499,55500],{"class":206},"'rgba(139,98,66)'",[91,55502,55445],{"class":101},[91,55504,55505,55507,55510,55512,55515,55517,55520],{"class":93,"line":16860},[91,55506,55427],{"class":101},[91,55508,55509],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[91,55511,55433],{"class":101},[91,55513,55514],{"class":206},"'快来分享你的寒假日常吧'",[91,55516,55439],{"class":101},[91,55518,55519],{"class":206},"'rgba(67,90,92)'",[91,55521,55445],{"class":101},[91,55523,55524,55526,55529,55531,55534,55536,55539],{"class":93,"line":16865},[91,55525,55427],{"class":101},[91,55527,55528],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[91,55530,55433],{"class":101},[91,55532,55533],{"class":206},"'哔哩哔哩小年YEAR'",[91,55535,55439],{"class":101},[91,55537,55538],{"class":206},"'rgba(166,131,143)'",[91,55540,55445],{"class":101},[91,55542,55543,55545,55548,55550,55553,55555,55558],{"class":93,"line":16878},[91,55544,55427],{"class":101},[91,55546,55547],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[91,55549,55433],{"class":101},[91,55551,55552],{"class":206},"'一站式解决你的电脑配置问题'",[91,55554,55439],{"class":101},[91,55556,55557],{"class":206},"'rgba(53,29,25)'",[91,55559,55445],{"class":101},[91,55561,55562,55564,55567,55569,55572,55574,55577],{"class":93,"line":16883},[91,55563,55427],{"class":101},[91,55565,55566],{"class":206},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[91,55568,55433],{"class":101},[91,55570,55571],{"class":206},"'谁不想和小猫咪贴贴呢?'",[91,55573,55439],{"class":101},[91,55575,55576],{"class":206},"'rgba(99,72,114)'",[91,55578,55579],{"class":101}," }\n",[91,55581,55582],{"class":93,"line":16888},[91,55583,53084],{"class":101},[91,55585,55586,55588,55591,55593,55595,55597,55599,55602],{"class":93,"line":16893},[91,55587,11200],{"class":97},[91,55589,55590],{"class":150}," img",[91,55592,13543],{"class":97},[91,55594,54371],{"class":101},[91,55596,54374],{"class":1941},[91,55598,102],{"class":101},[91,55600,55601],{"class":206},"'.slider-wrapper img'",[91,55603,108],{"class":101},[91,55605,55606,55608,55610,55612,55614,55616,55618,55621],{"class":93,"line":16906},[91,55607,11200],{"class":97},[91,55609,6804],{"class":150},[91,55611,13543],{"class":97},[91,55613,54371],{"class":101},[91,55615,54374],{"class":1941},[91,55617,102],{"class":101},[91,55619,55620],{"class":206},"'.slider-footer p'",[91,55622,108],{"class":101},[91,55624,55625,55627,55630,55632,55634,55636,55638,55641],{"class":93,"line":16911},[91,55626,11200],{"class":97},[91,55628,55629],{"class":150}," color",[91,55631,13543],{"class":97},[91,55633,54371],{"class":101},[91,55635,54374],{"class":1941},[91,55637,102],{"class":101},[91,55639,55640],{"class":206},"'.slider-footer'",[91,55642,108],{"class":101},[91,55644,55645,55647,55650,55652,55654,55657,55659,55662],{"class":93,"line":32608},[91,55646,11200],{"class":97},[91,55648,55649],{"class":150}," lis",[91,55651,13543],{"class":97},[91,55653,54371],{"class":101},[91,55655,55656],{"class":1941},"querySelectorAll",[91,55658,102],{"class":101},[91,55660,55661],{"class":206},"'.slider-footer ul li'",[91,55663,108],{"class":101},[91,55665,55666,55668,55670,55672],{"class":93,"line":32614},[91,55667,52194],{"class":97},[91,55669,9417],{"class":101},[91,55671,147],{"class":97},[91,55673,55674],{"class":150}," 1\n",[91,55676,55677,55679,55682,55684,55686,55688,55690],{"class":93,"line":32620},[91,55678,52194],{"class":97},[91,55680,55681],{"class":101}," timer ",[91,55683,147],{"class":97},[91,55685,54419],{"class":1941},[91,55687,102],{"class":101},[91,55689,54424],{"class":97},[91,55691,54427],{"class":101},[91,55693,55694,55697,55699],{"class":93,"line":32626},[91,55695,55696],{"class":101},"      img.src ",[91,55698,147],{"class":97},[91,55700,55701],{"class":101}," arrImage[i].url\n",[91,55703,55704,55707,55709],{"class":93,"line":32632},[91,55705,55706],{"class":101},"      p.innerHTML ",[91,55708,147],{"class":97},[91,55710,55711],{"class":101}," arrImage[i].title\n",[91,55713,55714,55717,55719],{"class":93,"line":32643},[91,55715,55716],{"class":101},"      color.style.backgroundColor ",[91,55718,147],{"class":97},[91,55720,55721],{"class":101}," arrImage[i].color\n",[91,55723,55724],{"class":93,"line":32649},[91,55725,55726],{"class":160},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[91,55728,55729],{"class":93,"line":32669},[91,55730,55731],{"class":160},"      \u002F\u002F li.classList.add('activate')\n",[91,55733,55734],{"class":93,"line":32675},[91,55735,55736],{"class":160},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[91,55738,55739],{"class":93,"line":32686},[91,55740,55741],{"class":160},"      \u002F\u002F lis[i].classList.remove('activate')\n",[91,55743,55744,55747,55749,55751,55754,55757,55760,55762,55765],{"class":93,"line":32692},[91,55745,55746],{"class":101},"      document.",[91,55748,54374],{"class":1941},[91,55750,102],{"class":101},[91,55752,55753],{"class":206},"'.activate'",[91,55755,55756],{"class":101},")?.classList.",[91,55758,55759],{"class":1941},"toggle",[91,55761,102],{"class":101},[91,55763,55764],{"class":206},"'activate'",[91,55766,108],{"class":101},[91,55768,55769,55772,55774,55776,55778],{"class":93,"line":32698},[91,55770,55771],{"class":101},"      lis[i].classList.",[91,55773,5313],{"class":1941},[91,55775,102],{"class":101},[91,55777,55764],{"class":206},[91,55779,108],{"class":101},[91,55781,55782],{"class":93,"line":32704},[91,55783,2378],{"emptyLinePlaceholder":17},[91,55785,55786,55789,55791,55793,55795,55797,55799,55801,55804],{"class":93,"line":32710},[91,55787,55788],{"class":101},"      i ",[91,55790,147],{"class":97},[91,55792,54458],{"class":101},[91,55794,583],{"class":97},[91,55796,25093],{"class":150},[91,55798,13693],{"class":101},[91,55800,430],{"class":97},[91,55802,55803],{"class":101}," arrImage.",[91,55805,55806],{"class":150},"length\n",[91,55808,55809],{"class":93,"line":32716},[91,55810,2378],{"emptyLinePlaceholder":17},[91,55812,55813,55815,55817],{"class":93,"line":32722},[91,55814,54510],{"class":101},[91,55816,6389],{"class":150},[91,55818,108],{"class":101},[91,55820,55821,55823,55825],{"class":93,"line":32728},[91,55822,52392],{"class":101},[91,55824,51788],{"class":51275},[91,55826,51282],{"class":101},[91,55828,55829,55831,55833],{"class":93,"line":32748},[91,55830,51760],{"class":101},[91,55832,51775],{"class":51275},[91,55834,51282],{"class":101},[91,55836,55837],{"class":93,"line":32754},[91,55838,2378],{"emptyLinePlaceholder":17},[91,55840,55841,55843,55845],{"class":93,"line":32770},[91,55842,51760],{"class":101},[91,55844,50610],{"class":51275},[91,55846,51282],{"class":101},[38,55848,55849],{},[1440,55850],{"alt":10,"src":55851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[38,55853,55854],{},"?.就是短路保护,确保输出正常进行",[38,55856,55857],{},"不要忘记取余%,有时候可以用",[38,55859,55860],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[46,55862,55863],{"start":11},[49,55864,55865],{},"法2",[83,55867,55869],{"className":50608,"code":55868,"language":50610,"meta":10,"style":10},"\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",[88,55870,55871,55881,55895,55899,55907,55921,55941,55953,55961,55967,55977,55987,55991,55995,56001,56011,56015,56019,56025,56035,56047,56059,56073,56077,56081,56087,56097,56107,56117,56129,56141,56151,56155,56159,56167,56177,56189,56201,56213,56217,56221,56227,56237,56249,56261,56271,56281,56291,56303,56315,56319,56323,56331,56343,56355,56381,56393,56397,56401,56407,56417,56421,56429,56437,56441,56449,56463,56477,56497,56505,56519,56531,56539,56557,56569,56581,56593,56605,56617,56629,56641,56649,56657,56665,56673,56684,56700,56716,56732,56748,56764,56780,56796,56812,56816,56821,56839,56857,56867,56872,56877,56888,56894,56909,56918,56922,56927,56936,56941,56950,56955,56960,56965,56988,57018,57022,57030,57034,57042,57050,57054],{"__ignoreMap":10},[91,55872,55873,55875,55877,55879],{"class":93,"line":94},[91,55874,51272],{"class":101},[91,55876,51276],{"class":51275},[91,55878,51279],{"class":1941},[91,55880,51282],{"class":101},[91,55882,55883,55885,55887,55889,55891,55893],{"class":93,"line":11},[91,55884,1012],{"class":101},[91,55886,50610],{"class":51275},[91,55888,51291],{"class":1941},[91,55890,147],{"class":101},[91,55892,51296],{"class":206},[91,55894,51282],{"class":101},[91,55896,55897],{"class":93,"line":1157},[91,55898,2378],{"emptyLinePlaceholder":17},[91,55900,55901,55903,55905],{"class":93,"line":1172},[91,55902,1012],{"class":101},[91,55904,51309],{"class":51275},[91,55906,51282],{"class":101},[91,55908,55909,55911,55913,55915,55917,55919],{"class":93,"line":1178},[91,55910,52119],{"class":101},[91,55912,51319],{"class":51275},[91,55914,51322],{"class":1941},[91,55916,147],{"class":101},[91,55918,51327],{"class":206},[91,55920,51282],{"class":101},[91,55922,55923,55925,55927,55929,55931,55933,55935,55937,55939],{"class":93,"line":1192},[91,55924,52119],{"class":101},[91,55926,51319],{"class":51275},[91,55928,14899],{"class":1941},[91,55930,147],{"class":101},[91,55932,51366],{"class":206},[91,55934,51346],{"class":1941},[91,55936,147],{"class":101},[91,55938,51373],{"class":206},[91,55940,51282],{"class":101},[91,55942,55943,55945,55947,55949,55951],{"class":93,"line":1198},[91,55944,52119],{"class":101},[91,55946,51382],{"class":51275},[91,55948,51385],{"class":101},[91,55950,51382],{"class":51275},[91,55952,51282],{"class":101},[91,55954,55955,55957,55959],{"class":93,"line":1289},[91,55956,52119],{"class":101},[91,55958,5105],{"class":51275},[91,55960,51282],{"class":101},[91,55962,55963,55965],{"class":93,"line":1295},[91,55964,6382],{"class":51275},[91,55966,15551],{"class":101},[91,55968,55969,55971,55973,55975],{"class":93,"line":1307},[91,55970,54670],{"class":150},[91,55972,51412],{"class":101},[91,55974,293],{"class":150},[91,55976,1268],{"class":101},[91,55978,55979,55981,55983,55985],{"class":93,"line":1590},[91,55980,54681],{"class":150},[91,55982,51412],{"class":101},[91,55984,293],{"class":150},[91,55986,1268],{"class":101},[91,55988,55989],{"class":93,"line":1595},[91,55990,2165],{"class":101},[91,55992,55993],{"class":93,"line":1601},[91,55994,2378],{"emptyLinePlaceholder":17},[91,55996,55997,55999],{"class":93,"line":1606},[91,55998,54700],{"class":51275},[91,56000,15551],{"class":101},[91,56002,56003,56005,56007,56009],{"class":93,"line":1620},[91,56004,54707],{"class":150},[91,56006,51412],{"class":101},[91,56008,54712],{"class":150},[91,56010,1268],{"class":101},[91,56012,56013],{"class":93,"line":1625},[91,56014,2165],{"class":101},[91,56016,56017],{"class":93,"line":1631},[91,56018,2378],{"emptyLinePlaceholder":17},[91,56020,56021,56023],{"class":93,"line":1652},[91,56022,54727],{"class":1941},[91,56024,15551],{"class":101},[91,56026,56027,56029,56031,56033],{"class":93,"line":1657},[91,56028,54734],{"class":150},[91,56030,51412],{"class":101},[91,56032,54739],{"class":150},[91,56034,1268],{"class":101},[91,56036,56037,56039,56041,56043,56045],{"class":93,"line":1671},[91,56038,54746],{"class":150},[91,56040,51412],{"class":101},[91,56042,54751],{"class":150},[91,56044,51467],{"class":97},[91,56046,1268],{"class":101},[91,56048,56049,56051,56053,56055,56057],{"class":93,"line":1676},[91,56050,54760],{"class":150},[91,56052,51412],{"class":101},[91,56054,1517],{"class":150},[91,56056,51467],{"class":97},[91,56058,1268],{"class":101},[91,56060,56061,56063,56065,56067,56069,56071],{"class":93,"line":1705},[91,56062,54681],{"class":150},[91,56064,51412],{"class":101},[91,56066,413],{"class":150},[91,56068,51467],{"class":97},[91,56070,51531],{"class":150},[91,56072,1268],{"class":101},[91,56074,56075],{"class":93,"line":1710},[91,56076,2165],{"class":101},[91,56078,56079],{"class":93,"line":1727},[91,56080,2378],{"emptyLinePlaceholder":17},[91,56082,56083,56085],{"class":93,"line":1732},[91,56084,54795],{"class":1941},[91,56086,15551],{"class":101},[91,56088,56089,56091,56093,56095],{"class":93,"line":1737},[91,56090,54734],{"class":150},[91,56092,51412],{"class":101},[91,56094,54806],{"class":150},[91,56096,1268],{"class":101},[91,56098,56099,56101,56103,56105],{"class":93,"line":1742},[91,56100,54813],{"class":150},[91,56102,51412],{"class":101},[91,56104,293],{"class":150},[91,56106,1268],{"class":101},[91,56108,56109,56111,56113,56115],{"class":93,"line":1756},[91,56110,54824],{"class":150},[91,56112,51412],{"class":101},[91,56114,293],{"class":150},[91,56116,1268],{"class":101},[91,56118,56119,56121,56123,56125,56127],{"class":93,"line":1761},[91,56120,54746],{"class":150},[91,56122,51412],{"class":101},[91,56124,413],{"class":150},[91,56126,430],{"class":97},[91,56128,1268],{"class":101},[91,56130,56131,56133,56135,56137,56139],{"class":93,"line":2555},[91,56132,54760],{"class":150},[91,56134,51412],{"class":101},[91,56136,677],{"class":150},[91,56138,430],{"class":97},[91,56140,1268],{"class":101},[91,56142,56143,56145,56147,56149],{"class":93,"line":2569},[91,56144,54859],{"class":150},[91,56146,51412],{"class":101},[91,56148,54864],{"class":150},[91,56150,1268],{"class":101},[91,56152,56153],{"class":93,"line":2577},[91,56154,2165],{"class":101},[91,56156,56157],{"class":93,"line":2582},[91,56158,2378],{"emptyLinePlaceholder":17},[91,56160,56161,56163,56165],{"class":93,"line":2588},[91,56162,54795],{"class":1941},[91,56164,6804],{"class":51275},[91,56166,15551],{"class":101},[91,56168,56169,56171,56173,56175],{"class":93,"line":2594},[91,56170,54734],{"class":150},[91,56172,51412],{"class":101},[91,56174,54806],{"class":150},[91,56176,1268],{"class":101},[91,56178,56179,56181,56183,56185,56187],{"class":93,"line":2599},[91,56180,54897],{"class":150},[91,56182,51412],{"class":101},[91,56184,1003],{"class":150},[91,56186,51467],{"class":97},[91,56188,1268],{"class":101},[91,56190,56191,56193,56195,56197,56199],{"class":93,"line":7927},[91,56192,54813],{"class":150},[91,56194,51412],{"class":101},[91,56196,802],{"class":150},[91,56198,51467],{"class":97},[91,56200,1268],{"class":101},[91,56202,56203,56205,56207,56209,56211],{"class":93,"line":7951},[91,56204,54922],{"class":150},[91,56206,51412],{"class":101},[91,56208,421],{"class":150},[91,56210,51467],{"class":97},[91,56212,1268],{"class":101},[91,56214,56215],{"class":93,"line":7956},[91,56216,2165],{"class":101},[91,56218,56219],{"class":93,"line":7962},[91,56220,2378],{"emptyLinePlaceholder":17},[91,56222,56223,56225],{"class":93,"line":7989},[91,56224,54943],{"class":51275},[91,56226,15551],{"class":101},[91,56228,56229,56231,56233,56235],{"class":93,"line":7994},[91,56230,54734],{"class":150},[91,56232,51412],{"class":101},[91,56234,54806],{"class":150},[91,56236,1268],{"class":101},[91,56238,56239,56241,56243,56245,56247],{"class":93,"line":8000},[91,56240,54922],{"class":150},[91,56242,51412],{"class":101},[91,56244,883],{"class":150},[91,56246,51467],{"class":97},[91,56248,1268],{"class":101},[91,56250,56251,56253,56255,56257,56259],{"class":93,"line":8012},[91,56252,54813],{"class":150},[91,56254,51412],{"class":101},[91,56256,802],{"class":150},[91,56258,51467],{"class":97},[91,56260,1268],{"class":101},[91,56262,56263,56265,56267,56269],{"class":93,"line":8024},[91,56264,54984],{"class":150},[91,56266,51412],{"class":101},[91,56268,51452],{"class":150},[91,56270,1268],{"class":101},[91,56272,56273,56275,56277,56279],{"class":93,"line":8036},[91,56274,54995],{"class":150},[91,56276,51412],{"class":101},[91,56278,51643],{"class":150},[91,56280,1268],{"class":101},[91,56282,56283,56285,56287,56289],{"class":93,"line":9695},[91,56284,54734],{"class":150},[91,56286,51412],{"class":101},[91,56288,54806],{"class":150},[91,56290,1268],{"class":101},[91,56292,56293,56295,56297,56299,56301],{"class":93,"line":9720},[91,56294,54746],{"class":150},[91,56296,51412],{"class":101},[91,56298,3970],{"class":150},[91,56300,51467],{"class":97},[91,56302,1268],{"class":101},[91,56304,56305,56307,56309,56311,56313],{"class":93,"line":9743},[91,56306,54760],{"class":150},[91,56308,51412],{"class":101},[91,56310,802],{"class":150},[91,56312,51467],{"class":97},[91,56314,1268],{"class":101},[91,56316,56317],{"class":93,"line":9767},[91,56318,2165],{"class":101},[91,56320,56321],{"class":93,"line":9772},[91,56322,2378],{"emptyLinePlaceholder":17},[91,56324,56325,56327,56329],{"class":93,"line":9777},[91,56326,54943],{"class":51275},[91,56328,55050],{"class":51275},[91,56330,15551],{"class":101},[91,56332,56333,56335,56337,56339,56341],{"class":93,"line":9782},[91,56334,54746],{"class":150},[91,56336,51412],{"class":101},[91,56338,802],{"class":150},[91,56340,51467],{"class":97},[91,56342,1268],{"class":101},[91,56344,56345,56347,56349,56351,56353],{"class":93,"line":9791},[91,56346,54760],{"class":150},[91,56348,51412],{"class":101},[91,56350,802],{"class":150},[91,56352,51467],{"class":97},[91,56354,1268],{"class":101},[91,56356,56357,56359,56361,56363,56365,56367,56369,56371,56373,56375,56377,56379],{"class":93,"line":9796},[91,56358,54859],{"class":150},[91,56360,51412],{"class":101},[91,56362,55085],{"class":150},[91,56364,102],{"class":101},[91,56366,293],{"class":150},[91,56368,12414],{"class":101},[91,56370,293],{"class":150},[91,56372,12414],{"class":101},[91,56374,293],{"class":150},[91,56376,12414],{"class":101},[91,56378,55102],{"class":150},[91,56380,2697],{"class":101},[91,56382,56383,56385,56387,56389,56391],{"class":93,"line":9802},[91,56384,55109],{"class":150},[91,56386,51412],{"class":101},[91,56388,548],{"class":150},[91,56390,51467],{"class":97},[91,56392,1268],{"class":101},[91,56394,56395],{"class":93,"line":9823},[91,56396,2165],{"class":101},[91,56398,56399],{"class":93,"line":9829},[91,56400,2378],{"emptyLinePlaceholder":17},[91,56402,56403,56405],{"class":93,"line":9843},[91,56404,55130],{"class":1941},[91,56406,15551],{"class":101},[91,56408,56409,56411,56413,56415],{"class":93,"line":9849},[91,56410,54859],{"class":150},[91,56412,51412],{"class":101},[91,56414,55141],{"class":150},[91,56416,1268],{"class":101},[91,56418,56419],{"class":93,"line":9876},[91,56420,2165],{"class":101},[91,56422,56423,56425,56427],{"class":93,"line":9885},[91,56424,52392],{"class":101},[91,56426,5105],{"class":51275},[91,56428,51282],{"class":101},[91,56430,56431,56433,56435],{"class":93,"line":9891},[91,56432,51760],{"class":101},[91,56434,51309],{"class":51275},[91,56436,51282],{"class":101},[91,56438,56439],{"class":93,"line":9899},[91,56440,2378],{"emptyLinePlaceholder":17},[91,56442,56443,56445,56447],{"class":93,"line":9904},[91,56444,1012],{"class":101},[91,56446,51775],{"class":51275},[91,56448,51282],{"class":101},[91,56450,56451,56453,56455,56457,56459,56461],{"class":93,"line":16583},[91,56452,52119],{"class":101},[91,56454,51586],{"class":51275},[91,56456,53461],{"class":1941},[91,56458,147],{"class":101},[91,56460,53466],{"class":206},[91,56462,51282],{"class":101},[91,56464,56465,56467,56469,56471,56473,56475],{"class":93,"line":16589},[91,56466,51316],{"class":101},[91,56468,51586],{"class":51275},[91,56470,53461],{"class":1941},[91,56472,147],{"class":101},[91,56474,55202],{"class":206},[91,56476,51282],{"class":101},[91,56478,56479,56481,56483,56485,56487,56489,56491,56493,56495],{"class":93,"line":16612},[91,56480,55209],{"class":101},[91,56482,1440],{"class":51275},[91,56484,55214],{"class":1941},[91,56486,147],{"class":101},[91,56488,55219],{"class":206},[91,56490,55222],{"class":1941},[91,56492,147],{"class":101},[91,56494,7631],{"class":206},[91,56496,51282],{"class":101},[91,56498,56499,56501,56503],{"class":93,"line":16618},[91,56500,51751],{"class":101},[91,56502,51586],{"class":51275},[91,56504,51282],{"class":101},[91,56506,56507,56509,56511,56513,56515,56517],{"class":93,"line":16641},[91,56508,51316],{"class":101},[91,56510,51586],{"class":51275},[91,56512,53461],{"class":1941},[91,56514,147],{"class":101},[91,56516,55249],{"class":206},[91,56518,51282],{"class":101},[91,56520,56521,56523,56525,56527,56529],{"class":93,"line":16655},[91,56522,55209],{"class":101},[91,56524,38],{"class":51275},[91,56526,55260],{"class":101},[91,56528,38],{"class":51275},[91,56530,51282],{"class":101},[91,56532,56533,56535,56537],{"class":93,"line":16675},[91,56534,55209],{"class":101},[91,56536,1109],{"class":51275},[91,56538,51282],{"class":101},[91,56540,56541,56543,56545,56547,56549,56551,56553,56555],{"class":93,"line":16681},[91,56542,55277],{"class":101},[91,56544,49],{"class":51275},[91,56546,53461],{"class":1941},[91,56548,147],{"class":101},[91,56550,55286],{"class":206},[91,56552,55289],{"class":101},[91,56554,49],{"class":51275},[91,56556,51282],{"class":101},[91,56558,56559,56561,56563,56565,56567],{"class":93,"line":16692},[91,56560,55277],{"class":101},[91,56562,49],{"class":51275},[91,56564,55289],{"class":101},[91,56566,49],{"class":51275},[91,56568,51282],{"class":101},[91,56570,56571,56573,56575,56577,56579],{"class":93,"line":16715},[91,56572,55277],{"class":101},[91,56574,49],{"class":51275},[91,56576,55289],{"class":101},[91,56578,49],{"class":51275},[91,56580,51282],{"class":101},[91,56582,56583,56585,56587,56589,56591],{"class":93,"line":16737},[91,56584,55277],{"class":101},[91,56586,49],{"class":51275},[91,56588,55289],{"class":101},[91,56590,49],{"class":51275},[91,56592,51282],{"class":101},[91,56594,56595,56597,56599,56601,56603],{"class":93,"line":16742},[91,56596,55277],{"class":101},[91,56598,49],{"class":51275},[91,56600,55289],{"class":101},[91,56602,49],{"class":51275},[91,56604,51282],{"class":101},[91,56606,56607,56609,56611,56613,56615],{"class":93,"line":16748},[91,56608,55277],{"class":101},[91,56610,49],{"class":51275},[91,56612,55289],{"class":101},[91,56614,49],{"class":51275},[91,56616,51282],{"class":101},[91,56618,56619,56621,56623,56625,56627],{"class":93,"line":16762},[91,56620,55277],{"class":101},[91,56622,49],{"class":51275},[91,56624,55289],{"class":101},[91,56626,49],{"class":51275},[91,56628,51282],{"class":101},[91,56630,56631,56633,56635,56637,56639],{"class":93,"line":16775},[91,56632,55277],{"class":101},[91,56634,49],{"class":51275},[91,56636,55289],{"class":101},[91,56638,49],{"class":51275},[91,56640,51282],{"class":101},[91,56642,56643,56645,56647],{"class":93,"line":16780},[91,56644,55382],{"class":101},[91,56646,1109],{"class":51275},[91,56648,51282],{"class":101},[91,56650,56651,56653,56655],{"class":93,"line":16794},[91,56652,51751],{"class":101},[91,56654,51586],{"class":51275},[91,56656,51282],{"class":101},[91,56658,56659,56661,56663],{"class":93,"line":16799},[91,56660,52392],{"class":101},[91,56662,51586],{"class":51275},[91,56664,51282],{"class":101},[91,56666,56667,56669,56671],{"class":93,"line":16805},[91,56668,52119],{"class":101},[91,56670,51788],{"class":51275},[91,56672,51282],{"class":101},[91,56674,56675,56677,56680,56682],{"class":93,"line":16810},[91,56676,11200],{"class":97},[91,56678,56679],{"class":150}," sliderData",[91,56681,13543],{"class":97},[91,56683,55422],{"class":101},[91,56685,56686,56688,56690,56692,56694,56696,56698],{"class":93,"line":16824},[91,56687,55427],{"class":101},[91,56689,55430],{"class":206},[91,56691,55433],{"class":101},[91,56693,55436],{"class":206},[91,56695,55439],{"class":101},[91,56697,55442],{"class":206},[91,56699,55445],{"class":101},[91,56701,56702,56704,56706,56708,56710,56712,56714],{"class":93,"line":16829},[91,56703,55427],{"class":101},[91,56705,55452],{"class":206},[91,56707,55433],{"class":101},[91,56709,55457],{"class":206},[91,56711,55439],{"class":101},[91,56713,55462],{"class":206},[91,56715,55445],{"class":101},[91,56717,56718,56720,56722,56724,56726,56728,56730],{"class":93,"line":16834},[91,56719,55427],{"class":101},[91,56721,55471],{"class":206},[91,56723,55433],{"class":101},[91,56725,55476],{"class":206},[91,56727,55439],{"class":101},[91,56729,55481],{"class":206},[91,56731,55445],{"class":101},[91,56733,56734,56736,56738,56740,56742,56744,56746],{"class":93,"line":16848},[91,56735,55427],{"class":101},[91,56737,55490],{"class":206},[91,56739,55433],{"class":101},[91,56741,55495],{"class":206},[91,56743,55439],{"class":101},[91,56745,55500],{"class":206},[91,56747,55445],{"class":101},[91,56749,56750,56752,56754,56756,56758,56760,56762],{"class":93,"line":16860},[91,56751,55427],{"class":101},[91,56753,55509],{"class":206},[91,56755,55433],{"class":101},[91,56757,55514],{"class":206},[91,56759,55439],{"class":101},[91,56761,55519],{"class":206},[91,56763,55445],{"class":101},[91,56765,56766,56768,56770,56772,56774,56776,56778],{"class":93,"line":16865},[91,56767,55427],{"class":101},[91,56769,55528],{"class":206},[91,56771,55433],{"class":101},[91,56773,55533],{"class":206},[91,56775,55439],{"class":101},[91,56777,55538],{"class":206},[91,56779,55445],{"class":101},[91,56781,56782,56784,56786,56788,56790,56792,56794],{"class":93,"line":16878},[91,56783,55427],{"class":101},[91,56785,55547],{"class":206},[91,56787,55433],{"class":101},[91,56789,55552],{"class":206},[91,56791,55439],{"class":101},[91,56793,55557],{"class":206},[91,56795,55445],{"class":101},[91,56797,56798,56800,56802,56804,56806,56808,56810],{"class":93,"line":16883},[91,56799,55427],{"class":101},[91,56801,55566],{"class":206},[91,56803,55433],{"class":101},[91,56805,55571],{"class":206},[91,56807,55439],{"class":101},[91,56809,55576],{"class":206},[91,56811,55579],{"class":101},[91,56813,56814],{"class":93,"line":16888},[91,56815,53084],{"class":101},[91,56817,56818],{"class":93,"line":16893},[91,56819,56820],{"class":160},"    \u002F\u002F 1.获取元素\n",[91,56822,56823,56825,56827,56829,56831,56833,56835,56837],{"class":93,"line":16906},[91,56824,11200],{"class":97},[91,56826,55590],{"class":150},[91,56828,13543],{"class":97},[91,56830,54371],{"class":101},[91,56832,54374],{"class":1941},[91,56834,102],{"class":101},[91,56836,55601],{"class":206},[91,56838,108],{"class":101},[91,56840,56841,56843,56845,56847,56849,56851,56853,56855],{"class":93,"line":16911},[91,56842,11200],{"class":97},[91,56844,6804],{"class":150},[91,56846,13543],{"class":97},[91,56848,54371],{"class":101},[91,56850,54374],{"class":1941},[91,56852,102],{"class":101},[91,56854,55620],{"class":206},[91,56856,108],{"class":101},[91,56858,56859,56861,56863,56865],{"class":93,"line":32608},[91,56860,52194],{"class":97},[91,56862,9417],{"class":101},[91,56864,147],{"class":97},[91,56866,47308],{"class":150},[91,56868,56869],{"class":93,"line":32614},[91,56870,56871],{"class":160},"    \u002F\u002F 2.开启定时器\n",[91,56873,56874],{"class":93,"line":32620},[91,56875,56876],{"class":160},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[91,56878,56879,56882,56884,56886],{"class":93,"line":32626},[91,56880,56881],{"class":1941},"    setInterval",[91,56883,102],{"class":101},[91,56885,54424],{"class":97},[91,56887,54427],{"class":101},[91,56889,56890,56892],{"class":93,"line":32632},[91,56891,54432],{"class":101},[91,56893,2680],{"class":97},[91,56895,56896,56898,56900,56902,56905,56907],{"class":93,"line":32643},[91,56897,54455],{"class":97},[91,56899,54458],{"class":101},[91,56901,1688],{"class":97},[91,56903,56904],{"class":101}," sliderData.",[91,56906,51943],{"class":150},[91,56908,12421],{"class":101},[91,56910,56911,56914,56916],{"class":93,"line":32649},[91,56912,56913],{"class":101},"        i ",[91,56915,147],{"class":97},[91,56917,47308],{"class":150},[91,56919,56920],{"class":93,"line":32669},[91,56921,52373],{"class":101},[91,56923,56924],{"class":93,"line":32675},[91,56925,56926],{"class":160},"      \u002F\u002F 更换图片路径\n",[91,56928,56929,56931,56933],{"class":93,"line":32686},[91,56930,55696],{"class":101},[91,56932,147],{"class":97},[91,56934,56935],{"class":101}," sliderData[i].url\n",[91,56937,56938],{"class":93,"line":32692},[91,56939,56940],{"class":160},"      \u002F\u002F 把文字写到p里面\n",[91,56942,56943,56945,56947],{"class":93,"line":32698},[91,56944,55706],{"class":101},[91,56946,147],{"class":97},[91,56948,56949],{"class":101}," sliderData[i].title\n",[91,56951,56952],{"class":93,"line":32704},[91,56953,56954],{"class":160},"      \u002F\u002F 小圆点\n",[91,56956,56957],{"class":93,"line":32710},[91,56958,56959],{"class":160},"      \u002F\u002F 先删除以前的active\n",[91,56961,56962],{"class":93,"line":32716},[91,56963,56964],{"class":160},"      \u002F\u002F 只让当前li添加active\n",[91,56966,56967,56969,56971,56973,56976,56979,56982,56984,56986],{"class":93,"line":32722},[91,56968,55746],{"class":101},[91,56970,54374],{"class":1941},[91,56972,102],{"class":101},[91,56974,56975],{"class":206},"'.slider-footer .activate'",[91,56977,56978],{"class":101},").classList.",[91,56980,56981],{"class":1941},"remove",[91,56983,102],{"class":101},[91,56985,55764],{"class":206},[91,56987,108],{"class":101},[91,56989,56990,56992,56994,56996,56999,57001,57003,57005,57008,57010,57012,57014,57016],{"class":93,"line":32728},[91,56991,55746],{"class":101},[91,56993,54374],{"class":1941},[91,56995,102],{"class":101},[91,56997,56998],{"class":206},"`.slider-footer ul li:nth-child(${",[91,57000,543],{"class":101},[91,57002,45541],{"class":97},[91,57004,25093],{"class":150},[91,57006,57007],{"class":206},"})`",[91,57009,56978],{"class":101},[91,57011,5313],{"class":1941},[91,57013,102],{"class":101},[91,57015,55764],{"class":206},[91,57017,108],{"class":101},[91,57019,57020],{"class":93,"line":32748},[91,57021,2378],{"emptyLinePlaceholder":17},[91,57023,57024,57026,57028],{"class":93,"line":32754},[91,57025,54510],{"class":101},[91,57027,6389],{"class":150},[91,57029,108],{"class":101},[91,57031,57032],{"class":93,"line":32770},[91,57033,2378],{"emptyLinePlaceholder":17},[91,57035,57036,57038,57040],{"class":93,"line":32776},[91,57037,52392],{"class":101},[91,57039,51788],{"class":51275},[91,57041,51282],{"class":101},[91,57043,57044,57046,57048],{"class":93,"line":32790},[91,57045,51760],{"class":101},[91,57047,51775],{"class":51275},[91,57049,51282],{"class":101},[91,57051,57052],{"class":93,"line":32796},[91,57053,2378],{"emptyLinePlaceholder":17},[91,57055,57056,57058,57060],{"class":93,"line":32811},[91,57057,51760],{"class":101},[91,57059,50610],{"class":51275},[91,57061,51282],{"class":101},[63,57063,57065],{"id":57064},"_317-重要知识点","3.1.7 重要知识点",[38,57067,57068,57069],{},"浏览器在渲染文本时， ",[251,57070,57071],{},"没有空格或换行符就没有“断行点”",[38,57073,57074],{},[1440,57075],{"alt":10,"src":57076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[38,57078,57079],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[38,57081,57082],{},[1440,57083],{"alt":10,"src":57084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[38,57086,57087],{},[1440,57088],{"alt":10,"src":57089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[33,57091,57093],{"id":57092},"_32-dom事件基础","3.2 DOM事件基础",[63,57095,57097],{"id":57096},"_321-事件监听","3.2.1 事件监听",[38,57099,57100],{},[1440,57101],{"alt":10,"src":57102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[38,57104,57105],{},"事件监听有响应的发生",[38,57107,57108],{},[1440,57109],{"alt":10,"src":57110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[38,57112,57113],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[38,57115,57116],{},"对于有名函数,要执行的函数名后边不要加()",[63,57118,57120],{"id":57119},"_322-随机点名案例","3.2.2 随机点名案例",[83,57122,57124],{"className":50608,"code":57123,"language":50610,"meta":10,"style":10},"\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",[88,57125,57126,57136,57150,57154,57162,57176,57196,57208,57216,57222,57232,57242,57246,57250,57257,57268,57272,57276,57282,57294,57308,57318,57330,57343,57347,57351,57358,57362,57375,57387,57399,57403,57407,57411,57418,57428,57432,57436,57445,57457,57469,57484,57488,57496,57504,57508,57516,57529,57543,57556,57576,57584,57599,57619,57639,57647,57651,57659,57664,57700,57720,57725,57744,57749,57760,57765,57776,57781,57800,57815,57820,57846,57856,57865,57870,57886,57891,57896,57901,57916,57920,57924,57929,57948,57965,57973,57978,57993,57997,58001,58009,58017,58021],{"__ignoreMap":10},[91,57127,57128,57130,57132,57134],{"class":93,"line":94},[91,57129,51272],{"class":101},[91,57131,51276],{"class":51275},[91,57133,51279],{"class":1941},[91,57135,51282],{"class":101},[91,57137,57138,57140,57142,57144,57146,57148],{"class":93,"line":11},[91,57139,1012],{"class":101},[91,57141,50610],{"class":51275},[91,57143,51291],{"class":1941},[91,57145,147],{"class":101},[91,57147,51296],{"class":206},[91,57149,51282],{"class":101},[91,57151,57152],{"class":93,"line":1157},[91,57153,2378],{"emptyLinePlaceholder":17},[91,57155,57156,57158,57160],{"class":93,"line":1172},[91,57157,1012],{"class":101},[91,57159,51309],{"class":51275},[91,57161,51282],{"class":101},[91,57163,57164,57166,57168,57170,57172,57174],{"class":93,"line":1178},[91,57165,52119],{"class":101},[91,57167,51319],{"class":51275},[91,57169,51322],{"class":1941},[91,57171,147],{"class":101},[91,57173,51327],{"class":206},[91,57175,51282],{"class":101},[91,57177,57178,57180,57182,57184,57186,57188,57190,57192,57194],{"class":93,"line":1192},[91,57179,52119],{"class":101},[91,57181,51319],{"class":51275},[91,57183,14899],{"class":1941},[91,57185,147],{"class":101},[91,57187,51366],{"class":206},[91,57189,51346],{"class":1941},[91,57191,147],{"class":101},[91,57193,51373],{"class":206},[91,57195,51282],{"class":101},[91,57197,57198,57200,57202,57204,57206],{"class":93,"line":1198},[91,57199,52119],{"class":101},[91,57201,51382],{"class":51275},[91,57203,51385],{"class":101},[91,57205,51382],{"class":51275},[91,57207,51282],{"class":101},[91,57209,57210,57212,57214],{"class":93,"line":1289},[91,57211,52119],{"class":101},[91,57213,5105],{"class":51275},[91,57215,51282],{"class":101},[91,57217,57218,57220],{"class":93,"line":1295},[91,57219,6382],{"class":51275},[91,57221,15551],{"class":101},[91,57223,57224,57226,57228,57230],{"class":93,"line":1307},[91,57225,54681],{"class":150},[91,57227,51412],{"class":101},[91,57229,293],{"class":150},[91,57231,1268],{"class":101},[91,57233,57234,57236,57238,57240],{"class":93,"line":1590},[91,57235,54670],{"class":150},[91,57237,51412],{"class":101},[91,57239,293],{"class":150},[91,57241,1268],{"class":101},[91,57243,57244],{"class":93,"line":1595},[91,57245,2165],{"class":101},[91,57247,57248],{"class":93,"line":1601},[91,57249,2378],{"emptyLinePlaceholder":17},[91,57251,57252,57255],{"class":93,"line":1606},[91,57253,57254],{"class":51275},"    h2",[91,57256,15551],{"class":101},[91,57258,57259,57262,57264,57266],{"class":93,"line":1620},[91,57260,57261],{"class":150},"      text-align",[91,57263,51412],{"class":101},[91,57265,51567],{"class":150},[91,57267,1268],{"class":101},[91,57269,57270],{"class":93,"line":1625},[91,57271,2165],{"class":101},[91,57273,57274],{"class":93,"line":1631},[91,57275,2378],{"emptyLinePlaceholder":17},[91,57277,57278,57280],{"class":93,"line":1652},[91,57279,54727],{"class":1941},[91,57281,15551],{"class":101},[91,57283,57284,57286,57288,57290,57292],{"class":93,"line":1657},[91,57285,54746],{"class":150},[91,57287,51412],{"class":101},[91,57289,1517],{"class":150},[91,57291,51467],{"class":97},[91,57293,1268],{"class":101},[91,57295,57296,57298,57300,57302,57304,57306],{"class":93,"line":1671},[91,57297,54681],{"class":150},[91,57299,51412],{"class":101},[91,57301,758],{"class":150},[91,57303,51467],{"class":97},[91,57305,51531],{"class":150},[91,57307,1268],{"class":101},[91,57309,57310,57312,57314,57316],{"class":93,"line":1676},[91,57311,54984],{"class":150},[91,57313,51412],{"class":101},[91,57315,51452],{"class":150},[91,57317,1268],{"class":101},[91,57319,57320,57322,57324,57326,57328],{"class":93,"line":1705},[91,57321,54897],{"class":150},[91,57323,51412],{"class":101},[91,57325,927],{"class":150},[91,57327,51467],{"class":97},[91,57329,1268],{"class":101},[91,57331,57332,57335,57337,57339,57341],{"class":93,"line":1710},[91,57333,57334],{"class":150},"      line-height",[91,57336,51412],{"class":101},[91,57338,503],{"class":150},[91,57340,51467],{"class":97},[91,57342,1268],{"class":101},[91,57344,57345],{"class":93,"line":1727},[91,57346,2165],{"class":101},[91,57348,57349],{"class":93,"line":1732},[91,57350,2378],{"emptyLinePlaceholder":17},[91,57352,57353,57356],{"class":93,"line":1737},[91,57354,57355],{"class":1941},"    .qs",[91,57357,15551],{"class":101},[91,57359,57360],{"class":93,"line":1742},[91,57361,2378],{"emptyLinePlaceholder":17},[91,57363,57364,57366,57368,57371,57373],{"class":93,"line":1756},[91,57365,54746],{"class":150},[91,57367,51412],{"class":101},[91,57369,57370],{"class":150},"450",[91,57372,51467],{"class":97},[91,57374,1268],{"class":101},[91,57376,57377,57379,57381,57383,57385],{"class":93,"line":1761},[91,57378,54760],{"class":150},[91,57380,51412],{"class":101},[91,57382,503],{"class":150},[91,57384,51467],{"class":97},[91,57386,1268],{"class":101},[91,57388,57389,57392,57394,57397],{"class":93,"line":2555},[91,57390,57391],{"class":150},"      color",[91,57393,51412],{"class":101},[91,57395,57396],{"class":150},"red",[91,57398,1268],{"class":101},[91,57400,57401],{"class":93,"line":2569},[91,57402,2378],{"emptyLinePlaceholder":17},[91,57404,57405],{"class":93,"line":2577},[91,57406,2165],{"class":101},[91,57408,57409],{"class":93,"line":2582},[91,57410,2378],{"emptyLinePlaceholder":17},[91,57412,57413,57416],{"class":93,"line":2588},[91,57414,57415],{"class":1941},"    .btns",[91,57417,15551],{"class":101},[91,57419,57420,57422,57424,57426],{"class":93,"line":2594},[91,57421,57261],{"class":150},[91,57423,51412],{"class":101},[91,57425,51567],{"class":150},[91,57427,1268],{"class":101},[91,57429,57430],{"class":93,"line":2599},[91,57431,2165],{"class":101},[91,57433,57434],{"class":93,"line":7927},[91,57435,2378],{"emptyLinePlaceholder":17},[91,57437,57438,57440,57443],{"class":93,"line":7951},[91,57439,57415],{"class":1941},[91,57441,57442],{"class":51275}," button",[91,57444,15551],{"class":101},[91,57446,57447,57449,57451,57453,57455],{"class":93,"line":7956},[91,57448,54746],{"class":150},[91,57450,51412],{"class":101},[91,57452,919],{"class":150},[91,57454,51467],{"class":97},[91,57456,1268],{"class":101},[91,57458,57459,57461,57463,57465,57467],{"class":93,"line":7962},[91,57460,54760],{"class":150},[91,57462,51412],{"class":101},[91,57464,375],{"class":150},[91,57466,51467],{"class":97},[91,57468,1268],{"class":101},[91,57470,57471,57473,57475,57477,57480,57482],{"class":93,"line":7989},[91,57472,54681],{"class":150},[91,57474,51412],{"class":101},[91,57476,293],{"class":150},[91,57478,57479],{"class":150}," 50",[91,57481,51467],{"class":97},[91,57483,1268],{"class":101},[91,57485,57486],{"class":93,"line":7994},[91,57487,2165],{"class":101},[91,57489,57490,57492,57494],{"class":93,"line":8000},[91,57491,52392],{"class":101},[91,57493,5105],{"class":51275},[91,57495,51282],{"class":101},[91,57497,57498,57500,57502],{"class":93,"line":8012},[91,57499,51760],{"class":101},[91,57501,51309],{"class":51275},[91,57503,51282],{"class":101},[91,57505,57506],{"class":93,"line":8024},[91,57507,2378],{"emptyLinePlaceholder":17},[91,57509,57510,57512,57514],{"class":93,"line":8036},[91,57511,1012],{"class":101},[91,57513,51775],{"class":51275},[91,57515,51282],{"class":101},[91,57517,57518,57520,57522,57525,57527],{"class":93,"line":9695},[91,57519,52119],{"class":101},[91,57521,33],{"class":51275},[91,57523,57524],{"class":101},">随机点名\u003C\u002F",[91,57526,33],{"class":51275},[91,57528,51282],{"class":101},[91,57530,57531,57533,57535,57537,57539,57541],{"class":93,"line":9720},[91,57532,52119],{"class":101},[91,57534,51586],{"class":51275},[91,57536,53461],{"class":1941},[91,57538,147],{"class":101},[91,57540,53466],{"class":206},[91,57542,51282],{"class":101},[91,57544,57545,57547,57549,57552,57554],{"class":93,"line":9743},[91,57546,51316],{"class":101},[91,57548,91],{"class":51275},[91,57550,57551],{"class":101},">名字是：\u003C\u002F",[91,57553,91],{"class":51275},[91,57555,51282],{"class":101},[91,57557,57558,57560,57562,57564,57566,57569,57572,57574],{"class":93,"line":9767},[91,57559,51316],{"class":101},[91,57561,51586],{"class":51275},[91,57563,53461],{"class":1941},[91,57565,147],{"class":101},[91,57567,57568],{"class":206},"\"qs\"",[91,57570,57571],{"class":101},">这里显示姓名\u003C\u002F",[91,57573,51586],{"class":51275},[91,57575,51282],{"class":101},[91,57577,57578,57580,57582],{"class":93,"line":9772},[91,57579,52392],{"class":101},[91,57581,51586],{"class":51275},[91,57583,51282],{"class":101},[91,57585,57586,57588,57590,57592,57594,57597],{"class":93,"line":9777},[91,57587,52119],{"class":101},[91,57589,51586],{"class":51275},[91,57591,53461],{"class":1941},[91,57593,147],{"class":101},[91,57595,57596],{"class":206},"\"btns\"",[91,57598,51282],{"class":101},[91,57600,57601,57603,57605,57607,57609,57612,57615,57617],{"class":93,"line":9782},[91,57602,51316],{"class":101},[91,57604,53862],{"class":51275},[91,57606,53461],{"class":1941},[91,57608,147],{"class":101},[91,57610,57611],{"class":206},"\"start\"",[91,57613,57614],{"class":101},">开始\u003C\u002F",[91,57616,53862],{"class":51275},[91,57618,51282],{"class":101},[91,57620,57621,57623,57625,57627,57629,57632,57635,57637],{"class":93,"line":9791},[91,57622,51316],{"class":101},[91,57624,53862],{"class":51275},[91,57626,53461],{"class":1941},[91,57628,147],{"class":101},[91,57630,57631],{"class":206},"\"end\"",[91,57633,57634],{"class":101},">结束\u003C\u002F",[91,57636,53862],{"class":51275},[91,57638,51282],{"class":101},[91,57640,57641,57643,57645],{"class":93,"line":9796},[91,57642,52392],{"class":101},[91,57644,51586],{"class":51275},[91,57646,51282],{"class":101},[91,57648,57649],{"class":93,"line":9802},[91,57650,2378],{"emptyLinePlaceholder":17},[91,57652,57653,57655,57657],{"class":93,"line":9823},[91,57654,52119],{"class":101},[91,57656,51788],{"class":51275},[91,57658,51282],{"class":101},[91,57660,57661],{"class":93,"line":9829},[91,57662,57663],{"class":160},"    \u002F\u002F 数据数组\n",[91,57665,57666,57668,57671,57673,57675,57678,57680,57683,57685,57688,57690,57693,57695,57698],{"class":93,"line":9843},[91,57667,11200],{"class":97},[91,57669,57670],{"class":150}," arr",[91,57672,13543],{"class":97},[91,57674,52201],{"class":101},[91,57676,57677],{"class":206},"'马超'",[91,57679,12414],{"class":101},[91,57681,57682],{"class":206},"'黄忠'",[91,57684,12414],{"class":101},[91,57686,57687],{"class":206},"'赵云'",[91,57689,12414],{"class":101},[91,57691,57692],{"class":206},"'关羽'",[91,57694,12414],{"class":101},[91,57696,57697],{"class":206},"'张飞'",[91,57699,33221],{"class":101},[91,57701,57702,57704,57707,57709,57711,57713,57715,57718],{"class":93,"line":9849},[91,57703,11200],{"class":97},[91,57705,57706],{"class":150}," qs",[91,57708,13543],{"class":97},[91,57710,54371],{"class":101},[91,57712,54374],{"class":1941},[91,57714,102],{"class":101},[91,57716,57717],{"class":206},"'.qs'",[91,57719,108],{"class":101},[91,57721,57722],{"class":93,"line":9876},[91,57723,57724],{"class":160},"    \u002F\u002F 1.业务1.开始按钮模块\n",[91,57726,57727,57729,57731,57733,57735,57737,57739,57742],{"class":93,"line":9885},[91,57728,11200],{"class":97},[91,57730,4162],{"class":150},[91,57732,13543],{"class":97},[91,57734,54371],{"class":101},[91,57736,54374],{"class":1941},[91,57738,102],{"class":101},[91,57740,57741],{"class":206},"'.start'",[91,57743,108],{"class":101},[91,57745,57746],{"class":93,"line":9891},[91,57747,57748],{"class":160},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[91,57750,57751,57753,57756,57758],{"class":93,"line":9899},[91,57752,52194],{"class":97},[91,57754,57755],{"class":101}," timerId ",[91,57757,147],{"class":97},[91,57759,47308],{"class":150},[91,57761,57762],{"class":93,"line":9904},[91,57763,57764],{"class":160},"    \u002F\u002F 随机号要全局变量\n",[91,57766,57767,57769,57772,57774],{"class":93,"line":16583},[91,57768,52194],{"class":97},[91,57770,57771],{"class":101}," random ",[91,57773,147],{"class":97},[91,57775,47308],{"class":150},[91,57777,57778],{"class":93,"line":16589},[91,57779,57780],{"class":160},"    \u002F\u002F 1.1 添加点击事件\n",[91,57782,57783,57786,57789,57791,57794,57796,57798],{"class":93,"line":16612},[91,57784,57785],{"class":101},"    start.",[91,57787,57788],{"class":1941},"addEventListener",[91,57790,102],{"class":101},[91,57792,57793],{"class":206},"'click'",[91,57795,12414],{"class":101},[91,57797,54424],{"class":97},[91,57799,54427],{"class":101},[91,57801,57802,57805,57807,57809,57811,57813],{"class":93,"line":16618},[91,57803,57804],{"class":101},"      timerId ",[91,57806,147],{"class":97},[91,57808,54419],{"class":1941},[91,57810,102],{"class":101},[91,57812,54424],{"class":97},[91,57814,54427],{"class":101},[91,57816,57817],{"class":93,"line":16641},[91,57818,57819],{"class":160},"        \u002F\u002F 随机数\n",[91,57821,57822,57825,57827,57830,57833,57836,57838,57840,57842,57844],{"class":93,"line":16655},[91,57823,57824],{"class":101},"        random ",[91,57826,147],{"class":97},[91,57828,57829],{"class":1941}," parseInt",[91,57831,57832],{"class":101},"(Math.",[91,57834,57835],{"class":1941},"random",[91,57837,13029],{"class":101},[91,57839,557],{"class":97},[91,57841,51940],{"class":101},[91,57843,51943],{"class":150},[91,57845,108],{"class":101},[91,57847,57848,57851,57853],{"class":93,"line":16675},[91,57849,57850],{"class":101},"        qs.innerHTML ",[91,57852,147],{"class":97},[91,57854,57855],{"class":101}," arr[random]\n",[91,57857,57858,57861,57863],{"class":93,"line":16681},[91,57859,57860],{"class":101},"      }, ",[91,57862,375],{"class":150},[91,57864,108],{"class":101},[91,57866,57867],{"class":93,"line":16692},[91,57868,57869],{"class":160},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[91,57871,57872,57874,57877,57879,57882,57884],{"class":93,"line":16715},[91,57873,54455],{"class":97},[91,57875,57876],{"class":101}," (arr.",[91,57878,51943],{"class":150},[91,57880,57881],{"class":97}," ===",[91,57883,25093],{"class":150},[91,57885,12421],{"class":101},[91,57887,57888],{"class":93,"line":16737},[91,57889,57890],{"class":160},"        \u002F\u002F start.disabled = true\n",[91,57892,57893],{"class":93,"line":16742},[91,57894,57895],{"class":160},"        \u002F\u002F end.disabled = true\n",[91,57897,57898],{"class":93,"line":16748},[91,57899,57900],{"class":160},"        \u002F\u002F 可以合起来写\n",[91,57902,57903,57906,57908,57911,57913],{"class":93,"line":16762},[91,57904,57905],{"class":101},"        start.disabled ",[91,57907,147],{"class":97},[91,57909,57910],{"class":101}," end.disabled ",[91,57912,147],{"class":97},[91,57914,57915],{"class":150}," true\n",[91,57917,57918],{"class":93,"line":16775},[91,57919,52373],{"class":101},[91,57921,57922],{"class":93,"line":16780},[91,57923,33436],{"class":101},[91,57925,57926],{"class":93,"line":16794},[91,57927,57928],{"class":160},"    \u002F\u002F 1.2 关闭按钮模块\n",[91,57930,57931,57933,57935,57937,57939,57941,57943,57946],{"class":93,"line":16799},[91,57932,11200],{"class":97},[91,57934,4178],{"class":150},[91,57936,13543],{"class":97},[91,57938,54371],{"class":101},[91,57940,54374],{"class":1941},[91,57942,102],{"class":101},[91,57944,57945],{"class":206},"'.end'",[91,57947,108],{"class":101},[91,57949,57950,57953,57955,57957,57959,57961,57963],{"class":93,"line":16805},[91,57951,57952],{"class":101},"    end.",[91,57954,57788],{"class":1941},[91,57956,102],{"class":101},[91,57958,57793],{"class":206},[91,57960,12414],{"class":101},[91,57962,54424],{"class":97},[91,57964,54427],{"class":101},[91,57966,57967,57970],{"class":93,"line":16810},[91,57968,57969],{"class":1941},"      clearInterval",[91,57971,57972],{"class":101},"(timerId)\n",[91,57974,57975],{"class":93,"line":16824},[91,57976,57977],{"class":160},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[91,57979,57980,57983,57986,57989,57991],{"class":93,"line":16829},[91,57981,57982],{"class":101},"      arr.",[91,57984,57985],{"class":1941},"splice",[91,57987,57988],{"class":101},"(random, ",[91,57990,319],{"class":150},[91,57992,108],{"class":101},[91,57994,57995],{"class":93,"line":16834},[91,57996,33436],{"class":101},[91,57998,57999],{"class":93,"line":16848},[91,58000,2378],{"emptyLinePlaceholder":17},[91,58002,58003,58005,58007],{"class":93,"line":16860},[91,58004,52392],{"class":101},[91,58006,51788],{"class":51275},[91,58008,51282],{"class":101},[91,58010,58011,58013,58015],{"class":93,"line":16865},[91,58012,51760],{"class":101},[91,58014,51775],{"class":51275},[91,58016,51282],{"class":101},[91,58018,58019],{"class":93,"line":16878},[91,58020,2378],{"emptyLinePlaceholder":17},[91,58022,58023,58025,58027],{"class":93,"line":16883},[91,58024,51760],{"class":101},[91,58026,50610],{"class":51275},[91,58028,51282],{"class":101},[38,58030,58031],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[63,58033,58035],{"id":58034},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[83,58037,58039],{"className":50608,"code":58038,"language":50610,"meta":10,"style":10},"\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",[88,58040,58041,58051,58065,58069,58077,58091,58111,58123,58131,58135,58143,58155,58163,58182,58199,58215,58225,58229,58237,58245,58249],{"__ignoreMap":10},[91,58042,58043,58045,58047,58049],{"class":93,"line":94},[91,58044,51272],{"class":101},[91,58046,51276],{"class":51275},[91,58048,51279],{"class":1941},[91,58050,51282],{"class":101},[91,58052,58053,58055,58057,58059,58061,58063],{"class":93,"line":11},[91,58054,1012],{"class":101},[91,58056,50610],{"class":51275},[91,58058,51291],{"class":1941},[91,58060,147],{"class":101},[91,58062,51296],{"class":206},[91,58064,51282],{"class":101},[91,58066,58067],{"class":93,"line":1157},[91,58068,2378],{"emptyLinePlaceholder":17},[91,58070,58071,58073,58075],{"class":93,"line":1172},[91,58072,1012],{"class":101},[91,58074,51309],{"class":51275},[91,58076,51282],{"class":101},[91,58078,58079,58081,58083,58085,58087,58089],{"class":93,"line":1178},[91,58080,52119],{"class":101},[91,58082,51319],{"class":51275},[91,58084,51322],{"class":1941},[91,58086,147],{"class":101},[91,58088,51327],{"class":206},[91,58090,51282],{"class":101},[91,58092,58093,58095,58097,58099,58101,58103,58105,58107,58109],{"class":93,"line":1192},[91,58094,52119],{"class":101},[91,58096,51319],{"class":51275},[91,58098,14899],{"class":1941},[91,58100,147],{"class":101},[91,58102,51366],{"class":206},[91,58104,51346],{"class":1941},[91,58106,147],{"class":101},[91,58108,51373],{"class":206},[91,58110,51282],{"class":101},[91,58112,58113,58115,58117,58119,58121],{"class":93,"line":1198},[91,58114,52119],{"class":101},[91,58116,51382],{"class":51275},[91,58118,51385],{"class":101},[91,58120,51382],{"class":51275},[91,58122,51282],{"class":101},[91,58124,58125,58127,58129],{"class":93,"line":1289},[91,58126,51760],{"class":101},[91,58128,51309],{"class":51275},[91,58130,51282],{"class":101},[91,58132,58133],{"class":93,"line":1295},[91,58134,2378],{"emptyLinePlaceholder":17},[91,58136,58137,58139,58141],{"class":93,"line":1307},[91,58138,1012],{"class":101},[91,58140,51775],{"class":51275},[91,58142,51282],{"class":101},[91,58144,58145,58147,58149,58151,58153],{"class":93,"line":1590},[91,58146,52119],{"class":101},[91,58148,53862],{"class":51275},[91,58150,53868],{"class":101},[91,58152,53862],{"class":51275},[91,58154,51282],{"class":101},[91,58156,58157,58159,58161],{"class":93,"line":1595},[91,58158,52119],{"class":101},[91,58160,51788],{"class":51275},[91,58162,51282],{"class":101},[91,58164,58165,58167,58169,58171,58173,58175,58177,58180],{"class":93,"line":1601},[91,58166,11200],{"class":97},[91,58168,54366],{"class":150},[91,58170,13543],{"class":97},[91,58172,54371],{"class":101},[91,58174,54374],{"class":1941},[91,58176,102],{"class":101},[91,58178,58179],{"class":206},"'button'",[91,58181,108],{"class":101},[91,58183,58184,58187,58189,58191,58193,58195,58197],{"class":93,"line":1606},[91,58185,58186],{"class":101},"    btn.",[91,58188,57788],{"class":1941},[91,58190,102],{"class":101},[91,58192,57793],{"class":206},[91,58194,12414],{"class":101},[91,58196,54424],{"class":97},[91,58198,54427],{"class":101},[91,58200,58201,58204,58206,58208,58211,58213],{"class":93,"line":1620},[91,58202,58203],{"class":97},"      const",[91,58205,2218],{"class":150},[91,58207,13543],{"class":97},[91,58209,58210],{"class":101}," Math.",[91,58212,57835],{"class":1941},[91,58214,1954],{"class":101},[91,58216,58217,58220,58223],{"class":93,"line":1625},[91,58218,58219],{"class":101},"      console.",[91,58221,58222],{"class":1941},"log",[91,58224,115],{"class":101},[91,58226,58227],{"class":93,"line":1631},[91,58228,33436],{"class":101},[91,58230,58231,58233,58235],{"class":93,"line":1652},[91,58232,52392],{"class":101},[91,58234,51788],{"class":51275},[91,58236,51282],{"class":101},[91,58238,58239,58241,58243],{"class":93,"line":1657},[91,58240,51760],{"class":101},[91,58242,51775],{"class":51275},[91,58244,51282],{"class":101},[91,58246,58247],{"class":93,"line":1671},[91,58248,2378],{"emptyLinePlaceholder":17},[91,58250,58251,58253,58255],{"class":93,"line":1676},[91,58252,51760],{"class":101},[91,58254,50610],{"class":51275},[91,58256,51282],{"class":101},[38,58258,58259],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[38,58261,58262],{},"常量不可以重新赋值",[38,58264,58265],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[83,58267,58269],{"className":50608,"code":58268,"language":50610,"meta":10,"style":10},"\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",[88,58270,58271,58281,58295,58299,58307,58321,58341,58353,58361,58365,58373,58385,58393,58404,58422,58438,58452,58460,58464,58472,58480,58484],{"__ignoreMap":10},[91,58272,58273,58275,58277,58279],{"class":93,"line":94},[91,58274,51272],{"class":101},[91,58276,51276],{"class":51275},[91,58278,51279],{"class":1941},[91,58280,51282],{"class":101},[91,58282,58283,58285,58287,58289,58291,58293],{"class":93,"line":11},[91,58284,1012],{"class":101},[91,58286,50610],{"class":51275},[91,58288,51291],{"class":1941},[91,58290,147],{"class":101},[91,58292,51296],{"class":206},[91,58294,51282],{"class":101},[91,58296,58297],{"class":93,"line":1157},[91,58298,2378],{"emptyLinePlaceholder":17},[91,58300,58301,58303,58305],{"class":93,"line":1172},[91,58302,1012],{"class":101},[91,58304,51309],{"class":51275},[91,58306,51282],{"class":101},[91,58308,58309,58311,58313,58315,58317,58319],{"class":93,"line":1178},[91,58310,52119],{"class":101},[91,58312,51319],{"class":51275},[91,58314,51322],{"class":1941},[91,58316,147],{"class":101},[91,58318,51327],{"class":206},[91,58320,51282],{"class":101},[91,58322,58323,58325,58327,58329,58331,58333,58335,58337,58339],{"class":93,"line":1192},[91,58324,52119],{"class":101},[91,58326,51319],{"class":51275},[91,58328,14899],{"class":1941},[91,58330,147],{"class":101},[91,58332,51366],{"class":206},[91,58334,51346],{"class":1941},[91,58336,147],{"class":101},[91,58338,51373],{"class":206},[91,58340,51282],{"class":101},[91,58342,58343,58345,58347,58349,58351],{"class":93,"line":1198},[91,58344,52119],{"class":101},[91,58346,51382],{"class":51275},[91,58348,51385],{"class":101},[91,58350,51382],{"class":51275},[91,58352,51282],{"class":101},[91,58354,58355,58357,58359],{"class":93,"line":1289},[91,58356,51760],{"class":101},[91,58358,51309],{"class":51275},[91,58360,51282],{"class":101},[91,58362,58363],{"class":93,"line":1295},[91,58364,2378],{"emptyLinePlaceholder":17},[91,58366,58367,58369,58371],{"class":93,"line":1307},[91,58368,1012],{"class":101},[91,58370,51775],{"class":51275},[91,58372,51282],{"class":101},[91,58374,58375,58377,58379,58381,58383],{"class":93,"line":1590},[91,58376,52119],{"class":101},[91,58378,53862],{"class":51275},[91,58380,53868],{"class":101},[91,58382,53862],{"class":51275},[91,58384,51282],{"class":101},[91,58386,58387,58389,58391],{"class":93,"line":1595},[91,58388,52119],{"class":101},[91,58390,51788],{"class":51275},[91,58392,51282],{"class":101},[91,58394,58395,58397,58399,58401],{"class":93,"line":1601},[91,58396,11200],{"class":97},[91,58398,2218],{"class":150},[91,58400,13543],{"class":97},[91,58402,58403],{"class":150}," 10\n",[91,58405,58406,58408,58410,58412,58414,58416,58418,58420],{"class":93,"line":1606},[91,58407,11200],{"class":97},[91,58409,54366],{"class":150},[91,58411,13543],{"class":97},[91,58413,54371],{"class":101},[91,58415,54374],{"class":1941},[91,58417,102],{"class":101},[91,58419,58179],{"class":206},[91,58421,108],{"class":101},[91,58423,58424,58426,58428,58430,58432,58434,58436],{"class":93,"line":1620},[91,58425,58186],{"class":101},[91,58427,57788],{"class":1941},[91,58429,102],{"class":101},[91,58431,57793],{"class":206},[91,58433,12414],{"class":101},[91,58435,54424],{"class":97},[91,58437,54427],{"class":101},[91,58439,58440,58442,58444,58446,58448,58450],{"class":93,"line":1625},[91,58441,58203],{"class":97},[91,58443,2218],{"class":150},[91,58445,13543],{"class":97},[91,58447,58210],{"class":101},[91,58449,57835],{"class":1941},[91,58451,1954],{"class":101},[91,58453,58454,58456,58458],{"class":93,"line":1631},[91,58455,58219],{"class":101},[91,58457,58222],{"class":1941},[91,58459,115],{"class":101},[91,58461,58462],{"class":93,"line":1652},[91,58463,33436],{"class":101},[91,58465,58466,58468,58470],{"class":93,"line":1657},[91,58467,52392],{"class":101},[91,58469,51788],{"class":51275},[91,58471,51282],{"class":101},[91,58473,58474,58476,58478],{"class":93,"line":1671},[91,58475,51760],{"class":101},[91,58477,51775],{"class":51275},[91,58479,51282],{"class":101},[91,58481,58482],{"class":93,"line":1676},[91,58483,2378],{"emptyLinePlaceholder":17},[91,58485,58486,58488,58490],{"class":93,"line":1705},[91,58487,51760],{"class":101},[91,58489,50610],{"class":51275},[91,58491,51282],{"class":101},[38,58493,58494],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[83,58496,58498],{"className":50608,"code":58497,"language":50610,"meta":10,"style":10},"\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",[88,58499,58500,58510,58524,58528,58536,58550,58570,58582,58590,58594,58602,58614,58622,58632,58650,58666,58679,58687,58691,58699,58707,58711],{"__ignoreMap":10},[91,58501,58502,58504,58506,58508],{"class":93,"line":94},[91,58503,51272],{"class":101},[91,58505,51276],{"class":51275},[91,58507,51279],{"class":1941},[91,58509,51282],{"class":101},[91,58511,58512,58514,58516,58518,58520,58522],{"class":93,"line":11},[91,58513,1012],{"class":101},[91,58515,50610],{"class":51275},[91,58517,51291],{"class":1941},[91,58519,147],{"class":101},[91,58521,51296],{"class":206},[91,58523,51282],{"class":101},[91,58525,58526],{"class":93,"line":1157},[91,58527,2378],{"emptyLinePlaceholder":17},[91,58529,58530,58532,58534],{"class":93,"line":1172},[91,58531,1012],{"class":101},[91,58533,51309],{"class":51275},[91,58535,51282],{"class":101},[91,58537,58538,58540,58542,58544,58546,58548],{"class":93,"line":1178},[91,58539,52119],{"class":101},[91,58541,51319],{"class":51275},[91,58543,51322],{"class":1941},[91,58545,147],{"class":101},[91,58547,51327],{"class":206},[91,58549,51282],{"class":101},[91,58551,58552,58554,58556,58558,58560,58562,58564,58566,58568],{"class":93,"line":1192},[91,58553,52119],{"class":101},[91,58555,51319],{"class":51275},[91,58557,14899],{"class":1941},[91,58559,147],{"class":101},[91,58561,51366],{"class":206},[91,58563,51346],{"class":1941},[91,58565,147],{"class":101},[91,58567,51373],{"class":206},[91,58569,51282],{"class":101},[91,58571,58572,58574,58576,58578,58580],{"class":93,"line":1198},[91,58573,52119],{"class":101},[91,58575,51382],{"class":51275},[91,58577,51385],{"class":101},[91,58579,51382],{"class":51275},[91,58581,51282],{"class":101},[91,58583,58584,58586,58588],{"class":93,"line":1289},[91,58585,51760],{"class":101},[91,58587,51309],{"class":51275},[91,58589,51282],{"class":101},[91,58591,58592],{"class":93,"line":1295},[91,58593,2378],{"emptyLinePlaceholder":17},[91,58595,58596,58598,58600],{"class":93,"line":1307},[91,58597,1012],{"class":101},[91,58599,51775],{"class":51275},[91,58601,51282],{"class":101},[91,58603,58604,58606,58608,58610,58612],{"class":93,"line":1590},[91,58605,52119],{"class":101},[91,58607,53862],{"class":51275},[91,58609,53868],{"class":101},[91,58611,53862],{"class":51275},[91,58613,51282],{"class":101},[91,58615,58616,58618,58620],{"class":93,"line":1595},[91,58617,52119],{"class":101},[91,58619,51788],{"class":51275},[91,58621,51282],{"class":101},[91,58623,58624,58626,58628,58630],{"class":93,"line":1601},[91,58625,11200],{"class":97},[91,58627,2218],{"class":150},[91,58629,13543],{"class":97},[91,58631,58403],{"class":150},[91,58633,58634,58636,58638,58640,58642,58644,58646,58648],{"class":93,"line":1606},[91,58635,11200],{"class":97},[91,58637,54366],{"class":150},[91,58639,13543],{"class":97},[91,58641,54371],{"class":101},[91,58643,54374],{"class":1941},[91,58645,102],{"class":101},[91,58647,58179],{"class":206},[91,58649,108],{"class":101},[91,58651,58652,58654,58656,58658,58660,58662,58664],{"class":93,"line":1620},[91,58653,58186],{"class":101},[91,58655,57788],{"class":1941},[91,58657,102],{"class":101},[91,58659,57793],{"class":206},[91,58661,12414],{"class":101},[91,58663,54424],{"class":97},[91,58665,54427],{"class":101},[91,58667,58668,58671,58673,58675,58677],{"class":93,"line":1625},[91,58669,58670],{"class":101},"      num ",[91,58672,147],{"class":97},[91,58674,58210],{"class":101},[91,58676,57835],{"class":1941},[91,58678,1954],{"class":101},[91,58680,58681,58683,58685],{"class":93,"line":1631},[91,58682,58219],{"class":101},[91,58684,58222],{"class":1941},[91,58686,115],{"class":101},[91,58688,58689],{"class":93,"line":1652},[91,58690,33436],{"class":101},[91,58692,58693,58695,58697],{"class":93,"line":1657},[91,58694,52392],{"class":101},[91,58696,51788],{"class":51275},[91,58698,51282],{"class":101},[91,58700,58701,58703,58705],{"class":93,"line":1671},[91,58702,51760],{"class":101},[91,58704,51775],{"class":51275},[91,58706,51282],{"class":101},[91,58708,58709],{"class":93,"line":1676},[91,58710,2378],{"emptyLinePlaceholder":17},[91,58712,58713,58715,58717],{"class":93,"line":1705},[91,58714,51760],{"class":101},[91,58716,50610],{"class":51275},[91,58718,51282],{"class":101},[38,58720,58721],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[63,58723,58725],{"id":58724},"_324-事件监听版本","3.2.4 事件监听版本",[38,58727,58728],{},[1440,58729],{"alt":10,"src":58730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[38,58732,58733],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[38,58735,58736],{},"这种方式会覆盖前边的事件监听:",[83,58738,58740],{"className":50608,"code":58739,"language":50610,"meta":10,"style":10},"\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",[88,58741,58742,58752,58766,58770,58778,58792,58812,58824,58832,58836,58844,58856,58864,58882,58896,58907,58911,58923,58933,58937,58945,58953,58957],{"__ignoreMap":10},[91,58743,58744,58746,58748,58750],{"class":93,"line":94},[91,58745,51272],{"class":101},[91,58747,51276],{"class":51275},[91,58749,51279],{"class":1941},[91,58751,51282],{"class":101},[91,58753,58754,58756,58758,58760,58762,58764],{"class":93,"line":11},[91,58755,1012],{"class":101},[91,58757,50610],{"class":51275},[91,58759,51291],{"class":1941},[91,58761,147],{"class":101},[91,58763,51296],{"class":206},[91,58765,51282],{"class":101},[91,58767,58768],{"class":93,"line":1157},[91,58769,2378],{"emptyLinePlaceholder":17},[91,58771,58772,58774,58776],{"class":93,"line":1172},[91,58773,1012],{"class":101},[91,58775,51309],{"class":51275},[91,58777,51282],{"class":101},[91,58779,58780,58782,58784,58786,58788,58790],{"class":93,"line":1178},[91,58781,52119],{"class":101},[91,58783,51319],{"class":51275},[91,58785,51322],{"class":1941},[91,58787,147],{"class":101},[91,58789,51327],{"class":206},[91,58791,51282],{"class":101},[91,58793,58794,58796,58798,58800,58802,58804,58806,58808,58810],{"class":93,"line":1192},[91,58795,52119],{"class":101},[91,58797,51319],{"class":51275},[91,58799,14899],{"class":1941},[91,58801,147],{"class":101},[91,58803,51366],{"class":206},[91,58805,51346],{"class":1941},[91,58807,147],{"class":101},[91,58809,51373],{"class":206},[91,58811,51282],{"class":101},[91,58813,58814,58816,58818,58820,58822],{"class":93,"line":1198},[91,58815,52119],{"class":101},[91,58817,51382],{"class":51275},[91,58819,51385],{"class":101},[91,58821,51382],{"class":51275},[91,58823,51282],{"class":101},[91,58825,58826,58828,58830],{"class":93,"line":1289},[91,58827,51760],{"class":101},[91,58829,51309],{"class":51275},[91,58831,51282],{"class":101},[91,58833,58834],{"class":93,"line":1295},[91,58835,2378],{"emptyLinePlaceholder":17},[91,58837,58838,58840,58842],{"class":93,"line":1307},[91,58839,1012],{"class":101},[91,58841,51775],{"class":51275},[91,58843,51282],{"class":101},[91,58845,58846,58848,58850,58852,58854],{"class":93,"line":1590},[91,58847,52119],{"class":101},[91,58849,53862],{"class":51275},[91,58851,53868],{"class":101},[91,58853,53862],{"class":51275},[91,58855,51282],{"class":101},[91,58857,58858,58860,58862],{"class":93,"line":1595},[91,58859,52119],{"class":101},[91,58861,51788],{"class":51275},[91,58863,51282],{"class":101},[91,58865,58866,58868,58870,58872,58874,58876,58878,58880],{"class":93,"line":1601},[91,58867,11200],{"class":97},[91,58869,54366],{"class":150},[91,58871,13543],{"class":97},[91,58873,54371],{"class":101},[91,58875,54374],{"class":1941},[91,58877,102],{"class":101},[91,58879,58179],{"class":206},[91,58881,108],{"class":101},[91,58883,58884,58886,58889,58891,58894],{"class":93,"line":1606},[91,58885,58186],{"class":101},[91,58887,58888],{"class":1941},"onclick",[91,58890,13543],{"class":97},[91,58892,58893],{"class":97}," function",[91,58895,54427],{"class":101},[91,58897,58898,58901,58903,58905],{"class":93,"line":1620},[91,58899,58900],{"class":1941},"      alert",[91,58902,102],{"class":101},[91,58904,574],{"class":150},[91,58906,108],{"class":101},[91,58908,58909],{"class":93,"line":1625},[91,58910,2165],{"class":101},[91,58912,58913,58915,58917,58919,58921],{"class":93,"line":1631},[91,58914,58186],{"class":101},[91,58916,58888],{"class":1941},[91,58918,13543],{"class":97},[91,58920,58893],{"class":97},[91,58922,54427],{"class":101},[91,58924,58925,58927,58929,58931],{"class":93,"line":1652},[91,58926,58900],{"class":1941},[91,58928,102],{"class":101},[91,58930,852],{"class":150},[91,58932,108],{"class":101},[91,58934,58935],{"class":93,"line":1657},[91,58936,2165],{"class":101},[91,58938,58939,58941,58943],{"class":93,"line":1671},[91,58940,52392],{"class":101},[91,58942,51788],{"class":51275},[91,58944,51282],{"class":101},[91,58946,58947,58949,58951],{"class":93,"line":1676},[91,58948,51760],{"class":101},[91,58950,51775],{"class":51275},[91,58952,51282],{"class":101},[91,58954,58955],{"class":93,"line":1705},[91,58956,2378],{"emptyLinePlaceholder":17},[91,58958,58959,58961,58963],{"class":93,"line":1710},[91,58960,51760],{"class":101},[91,58962,50610],{"class":51275},[91,58964,51282],{"class":101},[38,58966,58967],{},"只要点击就输出结果为22,前边11被覆盖了",[83,58969,58971],{"className":50608,"code":58970,"language":50610,"meta":10,"style":10},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[88,58972,58973,58978,58983,58987,58992,58997],{"__ignoreMap":10},[91,58974,58975],{"class":93,"line":94},[91,58976,58977],{"class":101},"  btn.addEventListener('click', function () {\n",[91,58979,58980],{"class":93,"line":11},[91,58981,58982],{"class":101},"      alert(11)\n",[91,58984,58985],{"class":93,"line":1157},[91,58986,33436],{"class":101},[91,58988,58989],{"class":93,"line":1172},[91,58990,58991],{"class":101},"    btn.addEventListener('click', function () {\n",[91,58993,58994],{"class":93,"line":1178},[91,58995,58996],{"class":101},"      alert(22)\n",[91,58998,58999],{"class":93,"line":1192},[91,59000,33436],{"class":101},[38,59002,59003],{},"点击第一次输出11,第二次点击为22",[63,59005,59007],{"id":59006},"_325-事件类型","3.2.5 事件类型",[38,59009,59010],{},[1440,59011],{"alt":10,"src":59012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21977,59014,59016],{"id":59015},"_3251-鼠标事件","3.2.5.1 鼠标事件",[38,59018,59019],{},"补充知识:",[38,59021,59022],{},"轮播图自动播放模块,可以使用",[38,59024,59025],{},"let timerId = setInterval(function () {",[38,59027,59028],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[38,59030,59031],{},"用js方法模拟进行点击事件,click必须加()",[38,59033,59034],{},"next.click()",[38,59036,59037],{},"}, 1000)",[38,59039,59040],{},[1440,59041],{"alt":10,"src":59042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[83,59044,59046],{"className":53042,"code":59045,"language":53044,"meta":10,"style":10},"\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",[88,59047,59048,59052,59062,59076,59080,59088,59103,59123,59143,59156,59164,59169,59174,59178,59182,59187,59192,59197,59202,59206,59210,59215,59220,59225,59229,59233,59238,59242,59247,59252,59256,59260,59265,59270,59275,59280,59285,59289,59293,59298,59303,59308,59313,59318,59322,59326,59331,59336,59341,59346,59351,59356,59361,59366,59371,59376,59380,59384,59389,59394,59398,59402,59407,59412,59416,59421,59426,59430,59434,59439,59443,59448,59453,59457,59462,59466,59470,59475,59480,59485,59490,59495,59500,59505,59509,59513,59517,59522,59527,59532,59537,59541,59549,59557,59561,59569,59584,59598,59619,59627,59641,59654,59669,59688,59700,59712,59724,59736,59748,59760,59772,59780,59795,59819,59843,59851,59859,59867,59875,59880,59885,59890,59895,59900,59905,59910,59915,59920,59925,59929,59934,59939,59944,59949,59954,59959,59964,59969,59974,59978,59983,59988,59993,59998,60003,60008,60013,60018,60023,60028,60033,60038,60042,60046,60051,60056,60061,60065,60070,60075,60080,60085,60090,60094,60099,60103,60107,60111,60115,60119,60123,60128,60133,60138,60143,60148,60153,60158,60163,60168,60172,60176,60181,60186,60191,60196,60201,60205,60210,60215,60220,60225,60230,60235,60239,60243,60248,60252,60257,60261,60266,60271,60276,60281,60286,60291,60295,60303,60311,60315],{"__ignoreMap":10},[91,59049,59050],{"class":93,"line":94},[91,59051,2378],{"emptyLinePlaceholder":17},[91,59053,59054,59056,59058,59060],{"class":93,"line":11},[91,59055,51272],{"class":101},[91,59057,51276],{"class":97},[91,59059,51279],{"class":150},[91,59061,51282],{"class":101},[91,59063,59064,59066,59068,59070,59072,59074],{"class":93,"line":1157},[91,59065,1012],{"class":101},[91,59067,50610],{"class":51275},[91,59069,51291],{"class":1941},[91,59071,147],{"class":101},[91,59073,51296],{"class":206},[91,59075,51282],{"class":101},[91,59077,59078],{"class":93,"line":1172},[91,59079,2378],{"emptyLinePlaceholder":17},[91,59081,59082,59084,59086],{"class":93,"line":1178},[91,59083,1012],{"class":101},[91,59085,51309],{"class":51275},[91,59087,51282],{"class":101},[91,59089,59090,59092,59094,59096,59098,59100],{"class":93,"line":1192},[91,59091,52119],{"class":101},[91,59093,51319],{"class":51275},[91,59095,51322],{"class":1941},[91,59097,147],{"class":101},[91,59099,51327],{"class":206},[91,59101,59102],{"class":101}," \u002F>\n",[91,59104,59105,59107,59109,59111,59113,59115,59117,59119,59121],{"class":93,"line":1198},[91,59106,52119],{"class":101},[91,59108,51319],{"class":51275},[91,59110,51338],{"class":1941},[91,59112,147],{"class":101},[91,59114,51343],{"class":206},[91,59116,51346],{"class":1941},[91,59118,147],{"class":101},[91,59120,51351],{"class":206},[91,59122,59102],{"class":101},[91,59124,59125,59127,59129,59131,59133,59135,59137,59139,59141],{"class":93,"line":1289},[91,59126,52119],{"class":101},[91,59128,51319],{"class":51275},[91,59130,14899],{"class":1941},[91,59132,147],{"class":101},[91,59134,51366],{"class":206},[91,59136,51346],{"class":1941},[91,59138,147],{"class":101},[91,59140,51373],{"class":206},[91,59142,59102],{"class":101},[91,59144,59145,59147,59149,59152,59154],{"class":93,"line":1295},[91,59146,52119],{"class":101},[91,59148,51382],{"class":51275},[91,59150,59151],{"class":101},">轮播图点击切换\u003C\u002F",[91,59153,51382],{"class":51275},[91,59155,51282],{"class":101},[91,59157,59158,59160,59162],{"class":93,"line":1307},[91,59159,52119],{"class":101},[91,59161,5105],{"class":51275},[91,59163,51282],{"class":101},[91,59165,59166],{"class":93,"line":1590},[91,59167,59168],{"class":101},"    * {\n",[91,59170,59171],{"class":93,"line":1595},[91,59172,59173],{"class":101},"      box-sizing: border-box;\n",[91,59175,59176],{"class":93,"line":1601},[91,59177,2165],{"class":101},[91,59179,59180],{"class":93,"line":1606},[91,59181,2378],{"emptyLinePlaceholder":17},[91,59183,59184],{"class":93,"line":1620},[91,59185,59186],{"class":101},"    .slider {\n",[91,59188,59189],{"class":93,"line":1625},[91,59190,59191],{"class":101},"      width: 560px;\n",[91,59193,59194],{"class":93,"line":1631},[91,59195,59196],{"class":101},"      height: 400px;\n",[91,59198,59199],{"class":93,"line":1652},[91,59200,59201],{"class":101},"      overflow: hidden;\n",[91,59203,59204],{"class":93,"line":1657},[91,59205,2165],{"class":101},[91,59207,59208],{"class":93,"line":1671},[91,59209,2378],{"emptyLinePlaceholder":17},[91,59211,59212],{"class":93,"line":1676},[91,59213,59214],{"class":101},"    .slider-wrapper {\n",[91,59216,59217],{"class":93,"line":1705},[91,59218,59219],{"class":101},"      width: 100%;\n",[91,59221,59222],{"class":93,"line":1710},[91,59223,59224],{"class":101},"      height: 320px;\n",[91,59226,59227],{"class":93,"line":1727},[91,59228,2165],{"class":101},[91,59230,59231],{"class":93,"line":1732},[91,59232,2378],{"emptyLinePlaceholder":17},[91,59234,59235],{"class":93,"line":1737},[91,59236,59237],{"class":101},"    .slider-wrapper img {\n",[91,59239,59240],{"class":93,"line":1742},[91,59241,59219],{"class":101},[91,59243,59244],{"class":93,"line":1756},[91,59245,59246],{"class":101},"      height: 100%;\n",[91,59248,59249],{"class":93,"line":1761},[91,59250,59251],{"class":101},"      display: block;\n",[91,59253,59254],{"class":93,"line":2555},[91,59255,2165],{"class":101},[91,59257,59258],{"class":93,"line":2569},[91,59259,2378],{"emptyLinePlaceholder":17},[91,59261,59262],{"class":93,"line":2577},[91,59263,59264],{"class":101},"    .slider-footer {\n",[91,59266,59267],{"class":93,"line":2582},[91,59268,59269],{"class":101},"      height: 80px;\n",[91,59271,59272],{"class":93,"line":2588},[91,59273,59274],{"class":101},"      background-color: rgb(100, 67, 68);\n",[91,59276,59277],{"class":93,"line":2594},[91,59278,59279],{"class":101},"      padding: 12px 12px 0 12px;\n",[91,59281,59282],{"class":93,"line":2599},[91,59283,59284],{"class":101},"      position: relative;\n",[91,59286,59287],{"class":93,"line":7927},[91,59288,2165],{"class":101},[91,59290,59291],{"class":93,"line":7951},[91,59292,2378],{"emptyLinePlaceholder":17},[91,59294,59295],{"class":93,"line":7956},[91,59296,59297],{"class":101},"    .slider-footer .toggle {\n",[91,59299,59300],{"class":93,"line":7962},[91,59301,59302],{"class":101},"      position: absolute;\n",[91,59304,59305],{"class":93,"line":7989},[91,59306,59307],{"class":101},"      right: 0;\n",[91,59309,59310],{"class":93,"line":7994},[91,59311,59312],{"class":101},"      top: 12px;\n",[91,59314,59315],{"class":93,"line":8000},[91,59316,59317],{"class":101},"      display: flex;\n",[91,59319,59320],{"class":93,"line":8012},[91,59321,2165],{"class":101},[91,59323,59324],{"class":93,"line":8024},[91,59325,2378],{"emptyLinePlaceholder":17},[91,59327,59328],{"class":93,"line":8036},[91,59329,59330],{"class":101},"    .slider-footer .toggle button {\n",[91,59332,59333],{"class":93,"line":9695},[91,59334,59335],{"class":101},"      margin-right: 12px;\n",[91,59337,59338],{"class":93,"line":9720},[91,59339,59340],{"class":101},"      width: 28px;\n",[91,59342,59343],{"class":93,"line":9743},[91,59344,59345],{"class":101},"      height: 28px;\n",[91,59347,59348],{"class":93,"line":9767},[91,59349,59350],{"class":101},"      appearance: none;\n",[91,59352,59353],{"class":93,"line":9772},[91,59354,59355],{"class":101},"      border: none;\n",[91,59357,59358],{"class":93,"line":9777},[91,59359,59360],{"class":101},"      background: rgba(255, 255, 255, 0.1);\n",[91,59362,59363],{"class":93,"line":9782},[91,59364,59365],{"class":101},"      color: #fff;\n",[91,59367,59368],{"class":93,"line":9791},[91,59369,59370],{"class":101},"      border-radius: 4px;\n",[91,59372,59373],{"class":93,"line":9796},[91,59374,59375],{"class":101},"      cursor: pointer;\n",[91,59377,59378],{"class":93,"line":9802},[91,59379,2165],{"class":101},[91,59381,59382],{"class":93,"line":9823},[91,59383,2378],{"emptyLinePlaceholder":17},[91,59385,59386],{"class":93,"line":9829},[91,59387,59388],{"class":101},"    .slider-footer .toggle button:hover {\n",[91,59390,59391],{"class":93,"line":9843},[91,59392,59393],{"class":101},"      background: rgba(255, 255, 255, 0.2);\n",[91,59395,59396],{"class":93,"line":9849},[91,59397,2165],{"class":101},[91,59399,59400],{"class":93,"line":9876},[91,59401,2378],{"emptyLinePlaceholder":17},[91,59403,59404],{"class":93,"line":9885},[91,59405,59406],{"class":101},"    .slider-footer p {\n",[91,59408,59409],{"class":93,"line":9891},[91,59410,59411],{"class":101},"      margin: 0;\n",[91,59413,59414],{"class":93,"line":9899},[91,59415,59365],{"class":101},[91,59417,59418],{"class":93,"line":9904},[91,59419,59420],{"class":101},"      font-size: 18px;\n",[91,59422,59423],{"class":93,"line":16583},[91,59424,59425],{"class":101},"      margin-bottom: 10px;\n",[91,59427,59428],{"class":93,"line":16589},[91,59429,2165],{"class":101},[91,59431,59432],{"class":93,"line":16612},[91,59433,2378],{"emptyLinePlaceholder":17},[91,59435,59436],{"class":93,"line":16618},[91,59437,59438],{"class":101},"    .slider-indicator {\n",[91,59440,59441],{"class":93,"line":16641},[91,59442,59411],{"class":101},[91,59444,59445],{"class":93,"line":16655},[91,59446,59447],{"class":101},"      padding: 0;\n",[91,59449,59450],{"class":93,"line":16675},[91,59451,59452],{"class":101},"      list-style: none;\n",[91,59454,59455],{"class":93,"line":16681},[91,59456,59317],{"class":101},[91,59458,59459],{"class":93,"line":16692},[91,59460,59461],{"class":101},"      align-items: center;\n",[91,59463,59464],{"class":93,"line":16715},[91,59465,2165],{"class":101},[91,59467,59468],{"class":93,"line":16737},[91,59469,2378],{"emptyLinePlaceholder":17},[91,59471,59472],{"class":93,"line":16742},[91,59473,59474],{"class":101},"    .slider-indicator li {\n",[91,59476,59477],{"class":93,"line":16748},[91,59478,59479],{"class":101},"      width: 8px;\n",[91,59481,59482],{"class":93,"line":16762},[91,59483,59484],{"class":101},"      height: 8px;\n",[91,59486,59487],{"class":93,"line":16775},[91,59488,59489],{"class":101},"      margin: 4px;\n",[91,59491,59492],{"class":93,"line":16780},[91,59493,59494],{"class":101},"      border-radius: 50%;\n",[91,59496,59497],{"class":93,"line":16794},[91,59498,59499],{"class":101},"      background: #fff;\n",[91,59501,59502],{"class":93,"line":16799},[91,59503,59504],{"class":101},"      opacity: 0.4;\n",[91,59506,59507],{"class":93,"line":16805},[91,59508,59375],{"class":101},[91,59510,59511],{"class":93,"line":16810},[91,59512,2165],{"class":101},[91,59514,59515],{"class":93,"line":16824},[91,59516,2378],{"emptyLinePlaceholder":17},[91,59518,59519],{"class":93,"line":16829},[91,59520,59521],{"class":101},"    .slider-indicator li.active {\n",[91,59523,59524],{"class":93,"line":16834},[91,59525,59526],{"class":101},"      width: 12px;\n",[91,59528,59529],{"class":93,"line":16848},[91,59530,59531],{"class":101},"      height: 12px;\n",[91,59533,59534],{"class":93,"line":16860},[91,59535,59536],{"class":101},"      opacity: 1;\n",[91,59538,59539],{"class":93,"line":16865},[91,59540,2165],{"class":101},[91,59542,59543,59545,59547],{"class":93,"line":16878},[91,59544,52392],{"class":101},[91,59546,5105],{"class":51275},[91,59548,51282],{"class":101},[91,59550,59551,59553,59555],{"class":93,"line":16883},[91,59552,51760],{"class":101},[91,59554,51309],{"class":51275},[91,59556,51282],{"class":101},[91,59558,59559],{"class":93,"line":16888},[91,59560,2378],{"emptyLinePlaceholder":17},[91,59562,59563,59565,59567],{"class":93,"line":16893},[91,59564,1012],{"class":101},[91,59566,51775],{"class":51275},[91,59568,51282],{"class":101},[91,59570,59571,59573,59575,59577,59579,59582],{"class":93,"line":16906},[91,59572,52119],{"class":101},[91,59574,51586],{"class":51275},[91,59576,53461],{"class":1941},[91,59578,147],{"class":101},[91,59580,59581],{"class":206},"\"slider\"",[91,59583,51282],{"class":101},[91,59585,59586,59588,59590,59592,59594,59596],{"class":93,"line":16911},[91,59587,51316],{"class":101},[91,59589,51586],{"class":51275},[91,59591,53461],{"class":1941},[91,59593,147],{"class":101},[91,59595,55202],{"class":206},[91,59597,51282],{"class":101},[91,59599,59600,59602,59604,59606,59608,59611,59613,59615,59617],{"class":93,"line":32608},[91,59601,55209],{"class":101},[91,59603,1440],{"class":51275},[91,59605,55214],{"class":1941},[91,59607,147],{"class":101},[91,59609,59610],{"class":206},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[91,59612,55222],{"class":1941},[91,59614,147],{"class":101},[91,59616,7631],{"class":206},[91,59618,59102],{"class":101},[91,59620,59621,59623,59625],{"class":93,"line":32614},[91,59622,51751],{"class":101},[91,59624,51586],{"class":51275},[91,59626,51282],{"class":101},[91,59628,59629,59631,59633,59635,59637,59639],{"class":93,"line":32620},[91,59630,51316],{"class":101},[91,59632,51586],{"class":51275},[91,59634,53461],{"class":1941},[91,59636,147],{"class":101},[91,59638,55249],{"class":206},[91,59640,51282],{"class":101},[91,59642,59643,59645,59647,59650,59652],{"class":93,"line":32626},[91,59644,55209],{"class":101},[91,59646,38],{"class":51275},[91,59648,59649],{"class":101},">对人类来说会不会太超前了？\u003C\u002F",[91,59651,38],{"class":51275},[91,59653,51282],{"class":101},[91,59655,59656,59658,59660,59662,59664,59667],{"class":93,"line":32632},[91,59657,55209],{"class":101},[91,59659,1109],{"class":51275},[91,59661,53461],{"class":1941},[91,59663,147],{"class":101},[91,59665,59666],{"class":206},"\"slider-indicator\"",[91,59668,51282],{"class":101},[91,59670,59671,59673,59675,59677,59679,59682,59684,59686],{"class":93,"line":32643},[91,59672,55277],{"class":101},[91,59674,49],{"class":51275},[91,59676,53461],{"class":1941},[91,59678,147],{"class":101},[91,59680,59681],{"class":206},"\"active\"",[91,59683,55289],{"class":101},[91,59685,49],{"class":51275},[91,59687,51282],{"class":101},[91,59689,59690,59692,59694,59696,59698],{"class":93,"line":32649},[91,59691,55277],{"class":101},[91,59693,49],{"class":51275},[91,59695,55289],{"class":101},[91,59697,49],{"class":51275},[91,59699,51282],{"class":101},[91,59701,59702,59704,59706,59708,59710],{"class":93,"line":32669},[91,59703,55277],{"class":101},[91,59705,49],{"class":51275},[91,59707,55289],{"class":101},[91,59709,49],{"class":51275},[91,59711,51282],{"class":101},[91,59713,59714,59716,59718,59720,59722],{"class":93,"line":32675},[91,59715,55277],{"class":101},[91,59717,49],{"class":51275},[91,59719,55289],{"class":101},[91,59721,49],{"class":51275},[91,59723,51282],{"class":101},[91,59725,59726,59728,59730,59732,59734],{"class":93,"line":32686},[91,59727,55277],{"class":101},[91,59729,49],{"class":51275},[91,59731,55289],{"class":101},[91,59733,49],{"class":51275},[91,59735,51282],{"class":101},[91,59737,59738,59740,59742,59744,59746],{"class":93,"line":32692},[91,59739,55277],{"class":101},[91,59741,49],{"class":51275},[91,59743,55289],{"class":101},[91,59745,49],{"class":51275},[91,59747,51282],{"class":101},[91,59749,59750,59752,59754,59756,59758],{"class":93,"line":32698},[91,59751,55277],{"class":101},[91,59753,49],{"class":51275},[91,59755,55289],{"class":101},[91,59757,49],{"class":51275},[91,59759,51282],{"class":101},[91,59761,59762,59764,59766,59768,59770],{"class":93,"line":32704},[91,59763,55277],{"class":101},[91,59765,49],{"class":51275},[91,59767,55289],{"class":101},[91,59769,49],{"class":51275},[91,59771,51282],{"class":101},[91,59773,59774,59776,59778],{"class":93,"line":32710},[91,59775,55382],{"class":101},[91,59777,1109],{"class":51275},[91,59779,51282],{"class":101},[91,59781,59782,59784,59786,59788,59790,59793],{"class":93,"line":32716},[91,59783,55209],{"class":101},[91,59785,51586],{"class":51275},[91,59787,53461],{"class":1941},[91,59789,147],{"class":101},[91,59791,59792],{"class":206},"\"toggle\"",[91,59794,51282],{"class":101},[91,59796,59797,59799,59801,59803,59805,59808,59810,59813,59815,59817],{"class":93,"line":32722},[91,59798,55277],{"class":101},[91,59800,53862],{"class":51275},[91,59802,53461],{"class":1941},[91,59804,147],{"class":101},[91,59806,59807],{"class":206},"\"prev\"",[91,59809,1062],{"class":101},[91,59811,59812],{"class":150},"&lt;",[91,59814,51760],{"class":101},[91,59816,53862],{"class":51275},[91,59818,51282],{"class":101},[91,59820,59821,59823,59825,59827,59829,59832,59834,59837,59839,59841],{"class":93,"line":32728},[91,59822,55277],{"class":101},[91,59824,53862],{"class":51275},[91,59826,53461],{"class":1941},[91,59828,147],{"class":101},[91,59830,59831],{"class":206},"\"next\"",[91,59833,1062],{"class":101},[91,59835,59836],{"class":150},"&gt;",[91,59838,51760],{"class":101},[91,59840,53862],{"class":51275},[91,59842,51282],{"class":101},[91,59844,59845,59847,59849],{"class":93,"line":32748},[91,59846,55382],{"class":101},[91,59848,51586],{"class":51275},[91,59850,51282],{"class":101},[91,59852,59853,59855,59857],{"class":93,"line":32754},[91,59854,51751],{"class":101},[91,59856,51586],{"class":51275},[91,59858,51282],{"class":101},[91,59860,59861,59863,59865],{"class":93,"line":32770},[91,59862,52392],{"class":101},[91,59864,51586],{"class":51275},[91,59866,51282],{"class":101},[91,59868,59869,59871,59873],{"class":93,"line":32776},[91,59870,52119],{"class":101},[91,59872,51788],{"class":51275},[91,59874,51282],{"class":101},[91,59876,59877],{"class":93,"line":32790},[91,59878,59879],{"class":101},"    \u002F\u002F 1. 初始数据\n",[91,59881,59882],{"class":93,"line":32796},[91,59883,59884],{"class":101},"    const data = [\n",[91,59886,59887],{"class":93,"line":32811},[91,59888,59889],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[91,59891,59892],{"class":93,"line":32817},[91,59893,59894],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[91,59896,59897],{"class":93,"line":32826},[91,59898,59899],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[91,59901,59902],{"class":93,"line":32832},[91,59903,59904],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[91,59906,59907],{"class":93,"line":32841},[91,59908,59909],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[91,59911,59912],{"class":93,"line":32847},[91,59913,59914],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[91,59916,59917],{"class":93,"line":32853},[91,59918,59919],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[91,59921,59922],{"class":93,"line":32862},[91,59923,59924],{"class":101},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[91,59926,59927],{"class":93,"line":32868},[91,59928,53084],{"class":101},[91,59930,59931],{"class":93,"line":32879},[91,59932,59933],{"class":101},"    \u002F\u002F 获取元素\n",[91,59935,59936],{"class":93,"line":32885},[91,59937,59938],{"class":101},"    const img = document.querySelector('.slider-wrapper img')\n",[91,59940,59941],{"class":93,"line":32904},[91,59942,59943],{"class":101},"    const p = document.querySelector('.slider-footer p')\n",[91,59945,59946],{"class":93,"line":32910},[91,59947,59948],{"class":101},"    const footer = document.querySelector('.slider-footer')\n",[91,59950,59951],{"class":93,"line":32921},[91,59952,59953],{"class":101},"    \u002F\u002F 1. 右按钮业务\n",[91,59955,59956],{"class":93,"line":32927},[91,59957,59958],{"class":101},"    \u002F\u002F 1.1 获取右侧按钮 \n",[91,59960,59961],{"class":93,"line":32947},[91,59962,59963],{"class":101},"    const next = document.querySelector('.next')\n",[91,59965,59966],{"class":93,"line":32963},[91,59967,59968],{"class":101},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[91,59970,59971],{"class":93,"line":32969},[91,59972,59973],{"class":101},"    \u002F\u002F 1.2 注册点击事件\n",[91,59975,59976],{"class":93,"line":32983},[91,59977,2378],{"emptyLinePlaceholder":17},[91,59979,59980],{"class":93,"line":32989},[91,59981,59982],{"class":101},"    next.addEventListener('click', function () {\n",[91,59984,59985],{"class":93,"line":32995},[91,59986,59987],{"class":101},"      \u002F\u002F console.log(11)\n",[91,59989,59990],{"class":93,"line":33006},[91,59991,59992],{"class":101},"      i++\n",[91,59994,59995],{"class":93,"line":33012},[91,59996,59997],{"class":101},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[91,59999,60000],{"class":93,"line":33018},[91,60001,60002],{"class":101},"      \u002F\u002F if (i >= 8) {\n",[91,60004,60005],{"class":93,"line":33028},[91,60006,60007],{"class":101},"      \u002F\u002F   i = 0\n",[91,60009,60010],{"class":93,"line":33034},[91,60011,60012],{"class":101},"      \u002F\u002F }\n",[91,60014,60015],{"class":93,"line":33045},[91,60016,60017],{"class":101},"      i = i >= data.length ? 0 : i\n",[91,60019,60020],{"class":93,"line":33051},[91,60021,60022],{"class":101},"      \u002F\u002F 1.3 得到对应的对象\n",[91,60024,60025],{"class":93,"line":33061},[91,60026,60027],{"class":101},"      \u002F\u002F console.log(data[i])\n",[91,60029,60030],{"class":93,"line":33066},[91,60031,60032],{"class":101},"      \u002F\u002F 调用函数\n",[91,60034,60035],{"class":93,"line":33072},[91,60036,60037],{"class":101},"      toggle()\n",[91,60039,60040],{"class":93,"line":33121},[91,60041,33436],{"class":101},[91,60043,60044],{"class":93,"line":33168},[91,60045,2378],{"emptyLinePlaceholder":17},[91,60047,60048],{"class":93,"line":33173},[91,60049,60050],{"class":101},"    \u002F\u002F 2. 左侧按钮业务\n",[91,60052,60053],{"class":93,"line":33179},[91,60054,60055],{"class":101},"    \u002F\u002F 2.1 获取左侧按钮 \n",[91,60057,60058],{"class":93,"line":33198},[91,60059,60060],{"class":101},"    const prev = document.querySelector('.prev')\n",[91,60062,60063],{"class":93,"line":33204},[91,60064,59973],{"class":101},[91,60066,60067],{"class":93,"line":33224},[91,60068,60069],{"class":101},"    prev.addEventListener('click', function () {\n",[91,60071,60072],{"class":93,"line":33230},[91,60073,60074],{"class":101},"      i--\n",[91,60076,60077],{"class":93,"line":33236},[91,60078,60079],{"class":101},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[91,60081,60082],{"class":93,"line":33246},[91,60083,60084],{"class":101},"      \u002F\u002F if (i \u003C 0) {\n",[91,60086,60087],{"class":93,"line":33251},[91,60088,60089],{"class":101},"      \u002F\u002F   i = 7\n",[91,60091,60092],{"class":93,"line":33257},[91,60093,60012],{"class":101},[91,60095,60096],{"class":93,"line":33273},[91,60097,60098],{"class":101},"      i = i \u003C 0 ? data.length - 1 : i\n",[91,60100,60101],{"class":93,"line":33318},[91,60102,60022],{"class":101},[91,60104,60105],{"class":93,"line":33324},[91,60106,60027],{"class":101},[91,60108,60109],{"class":93,"line":33330},[91,60110,60032],{"class":101},[91,60112,60113],{"class":93,"line":33336},[91,60114,60037],{"class":101},[91,60116,60117],{"class":93,"line":33347},[91,60118,33436],{"class":101},[91,60120,60121],{"class":93,"line":33353},[91,60122,2378],{"emptyLinePlaceholder":17},[91,60124,60125],{"class":93,"line":33359},[91,60126,60127],{"class":101},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[91,60129,60130],{"class":93,"line":33365},[91,60131,60132],{"class":101},"    function toggle() {\n",[91,60134,60135],{"class":93,"line":33383},[91,60136,60137],{"class":101},"      \u002F\u002F 1.4 渲染对应的数据\n",[91,60139,60140],{"class":93,"line":33397},[91,60141,60142],{"class":101},"      img.src = data[i].url\n",[91,60144,60145],{"class":93,"line":33406},[91,60146,60147],{"class":101},"      p.innerHTML = data[i].title\n",[91,60149,60150],{"class":93,"line":33415},[91,60151,60152],{"class":101},"      footer.style.backgroundColor = data[i].color\n",[91,60154,60155],{"class":93,"line":33424},[91,60156,60157],{"class":101},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[91,60159,60160],{"class":93,"line":33433},[91,60161,60162],{"class":101},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[91,60164,60165],{"class":93,"line":33439},[91,60166,60167],{"class":101},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[91,60169,60170],{"class":93,"line":33445},[91,60171,2165],{"class":101},[91,60173,60174],{"class":93,"line":33453},[91,60175,2378],{"emptyLinePlaceholder":17},[91,60177,60178],{"class":93,"line":33458},[91,60179,60180],{"class":101},"    \u002F\u002F 3. 自动播放模块\n",[91,60182,60183],{"class":93,"line":33464},[91,60184,60185],{"class":101},"    let timerId = setInterval(function () {\n",[91,60187,60188],{"class":93,"line":33475},[91,60189,60190],{"class":101},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[91,60192,60193],{"class":93,"line":33481},[91,60194,60195],{"class":101},"      next.click()\n",[91,60197,60198],{"class":93,"line":33501},[91,60199,60200],{"class":101},"    }, 1000)\n",[91,60202,60203],{"class":93,"line":33507},[91,60204,2378],{"emptyLinePlaceholder":17},[91,60206,60207],{"class":93,"line":33513},[91,60208,60209],{"class":101},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[91,60211,60212],{"class":93,"line":33519},[91,60213,60214],{"class":101},"    const slider = document.querySelector('.slider')\n",[91,60216,60217],{"class":93,"line":33536},[91,60218,60219],{"class":101},"    \u002F\u002F 注册事件\n",[91,60221,60222],{"class":93,"line":33542},[91,60223,60224],{"class":101},"    slider.addEventListener('mouseenter', function () {\n",[91,60226,60227],{"class":93,"line":33548},[91,60228,60229],{"class":101},"      \u002F\u002F 停止定时器\n",[91,60231,60232],{"class":93,"line":33554},[91,60233,60234],{"class":101},"      clearInterval(timerId)\n",[91,60236,60237],{"class":93,"line":33560},[91,60238,33436],{"class":101},[91,60240,60241],{"class":93,"line":33566},[91,60242,2378],{"emptyLinePlaceholder":17},[91,60244,60245],{"class":93,"line":33593},[91,60246,60247],{"class":101},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[91,60249,60250],{"class":93,"line":33617},[91,60251,60219],{"class":101},[91,60253,60254],{"class":93,"line":33623},[91,60255,60256],{"class":101},"    slider.addEventListener('mouseleave', function () {\n",[91,60258,60259],{"class":93,"line":33629},[91,60260,60229],{"class":101},[91,60262,60263],{"class":93,"line":33635},[91,60264,60265],{"class":101},"      if (timerId) clearInterval(timerId)\n",[91,60267,60268],{"class":93,"line":33646},[91,60269,60270],{"class":101},"      \u002F\u002F 开启定时器\n",[91,60272,60273],{"class":93,"line":33657},[91,60274,60275],{"class":101},"      timerId = setInterval(function () {\n",[91,60277,60278],{"class":93,"line":33663},[91,60279,60280],{"class":101},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[91,60282,60283],{"class":93,"line":33680},[91,60284,60285],{"class":101},"        next.click()\n",[91,60287,60288],{"class":93,"line":33703},[91,60289,60290],{"class":101},"      }, 1000)\n",[91,60292,60293],{"class":93,"line":33726},[91,60294,33436],{"class":101},[91,60296,60297,60299,60301],{"class":93,"line":33732},[91,60298,52392],{"class":101},[91,60300,51788],{"class":51275},[91,60302,51282],{"class":101},[91,60304,60305,60307,60309],{"class":93,"line":33737},[91,60306,51760],{"class":101},[91,60308,51775],{"class":51275},[91,60310,51282],{"class":101},[91,60312,60313],{"class":93,"line":33746},[91,60314,2378],{"emptyLinePlaceholder":17},[91,60316,60317,60319,60321],{"class":93,"line":33756},[91,60318,51760],{"class":101},[91,60320,50610],{"class":51275},[91,60322,51282],{"class":101},[21977,60324,60326],{"id":60325},"_3252-焦点事件","3.2.5.2 焦点事件",[38,60328,60329],{},"小米搜索框案例：",[83,60331,60333],{"className":50608,"code":60332,"language":50610,"meta":10,"style":10},"\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",[88,60334,60335,60345,60359,60363,60371,60385,60405,60425,60437,60445,60451,60461,60471,60483,60487,60491,60498,60502,60513,60517,60521,60528,60539,60552,60566,60570,60574,60583,60595,60607,60621,60634,60647,60665,60676,60680,60684,60693,60710,60714,60718,60725,60735,60745,60756,60769,60781,60797,60808,60820,60824,60828,60836,60847,60864,60876,60888,60899,60903,60907,60918,60929,60933,60941,60945,60953,60957,60965,60980,61003,61018,61049,61076,61103,61130,61157,61184,61211,61220,61228,61236,61241,61261,61281,61286,61291,61309,61314,61324,61329,61343,61348,61353,61370,61379,61391,61395,61403,61411,61415],{"__ignoreMap":10},[91,60336,60337,60339,60341,60343],{"class":93,"line":94},[91,60338,51272],{"class":101},[91,60340,51276],{"class":51275},[91,60342,51279],{"class":1941},[91,60344,51282],{"class":101},[91,60346,60347,60349,60351,60353,60355,60357],{"class":93,"line":11},[91,60348,1012],{"class":101},[91,60350,50610],{"class":51275},[91,60352,51291],{"class":1941},[91,60354,147],{"class":101},[91,60356,51296],{"class":206},[91,60358,51282],{"class":101},[91,60360,60361],{"class":93,"line":1157},[91,60362,2378],{"emptyLinePlaceholder":17},[91,60364,60365,60367,60369],{"class":93,"line":1172},[91,60366,1012],{"class":101},[91,60368,51309],{"class":51275},[91,60370,51282],{"class":101},[91,60372,60373,60375,60377,60379,60381,60383],{"class":93,"line":1178},[91,60374,51316],{"class":101},[91,60376,51319],{"class":51275},[91,60378,51322],{"class":1941},[91,60380,147],{"class":101},[91,60382,51327],{"class":206},[91,60384,51282],{"class":101},[91,60386,60387,60389,60391,60393,60395,60397,60399,60401,60403],{"class":93,"line":1192},[91,60388,51316],{"class":101},[91,60390,51319],{"class":51275},[91,60392,51338],{"class":1941},[91,60394,147],{"class":101},[91,60396,51343],{"class":206},[91,60398,51346],{"class":1941},[91,60400,147],{"class":101},[91,60402,51351],{"class":206},[91,60404,51282],{"class":101},[91,60406,60407,60409,60411,60413,60415,60417,60419,60421,60423],{"class":93,"line":1198},[91,60408,51316],{"class":101},[91,60410,51319],{"class":51275},[91,60412,14899],{"class":1941},[91,60414,147],{"class":101},[91,60416,51366],{"class":206},[91,60418,51346],{"class":1941},[91,60420,147],{"class":101},[91,60422,51373],{"class":206},[91,60424,51282],{"class":101},[91,60426,60427,60429,60431,60433,60435],{"class":93,"line":1289},[91,60428,51316],{"class":101},[91,60430,51382],{"class":51275},[91,60432,51385],{"class":101},[91,60434,51382],{"class":51275},[91,60436,51282],{"class":101},[91,60438,60439,60441,60443],{"class":93,"line":1295},[91,60440,51316],{"class":101},[91,60442,5105],{"class":51275},[91,60444,51282],{"class":101},[91,60446,60447,60449],{"class":93,"line":1307},[91,60448,51402],{"class":51275},[91,60450,15551],{"class":101},[91,60452,60453,60455,60457,60459],{"class":93,"line":1590},[91,60454,51409],{"class":150},[91,60456,51412],{"class":101},[91,60458,293],{"class":150},[91,60460,1268],{"class":101},[91,60462,60463,60465,60467,60469],{"class":93,"line":1595},[91,60464,51421],{"class":150},[91,60466,51412],{"class":101},[91,60468,293],{"class":150},[91,60470,1268],{"class":101},[91,60472,60473,60476,60478,60481],{"class":93,"line":1601},[91,60474,60475],{"class":150},"            box-sizing",[91,60477,51412],{"class":101},[91,60479,60480],{"class":150},"border-box",[91,60482,1268],{"class":101},[91,60484,60485],{"class":93,"line":1606},[91,60486,2507],{"class":101},[91,60488,60489],{"class":93,"line":1620},[91,60490,2378],{"emptyLinePlaceholder":17},[91,60492,60493,60496],{"class":93,"line":1625},[91,60494,60495],{"class":51275},"        ul",[91,60497,15551],{"class":101},[91,60499,60500],{"class":93,"line":1631},[91,60501,2378],{"emptyLinePlaceholder":17},[91,60503,60504,60507,60509,60511],{"class":93,"line":1652},[91,60505,60506],{"class":150},"            list-style",[91,60508,51412],{"class":101},[91,60510,54712],{"class":150},[91,60512,1268],{"class":101},[91,60514,60515],{"class":93,"line":1657},[91,60516,2507],{"class":101},[91,60518,60519],{"class":93,"line":1671},[91,60520,2378],{"emptyLinePlaceholder":17},[91,60522,60523,60526],{"class":93,"line":1676},[91,60524,60525],{"class":1941},"        .mi",[91,60527,15551],{"class":101},[91,60529,60530,60533,60535,60537],{"class":93,"line":1705},[91,60531,60532],{"class":150},"            position",[91,60534,51412],{"class":101},[91,60536,54739],{"class":150},[91,60538,1268],{"class":101},[91,60540,60541,60543,60545,60548,60550],{"class":93,"line":1710},[91,60542,51459],{"class":150},[91,60544,51412],{"class":101},[91,60546,60547],{"class":150},"223",[91,60549,51467],{"class":97},[91,60551,1268],{"class":101},[91,60553,60554,60556,60558,60560,60562,60564],{"class":93,"line":1727},[91,60555,51409],{"class":150},[91,60557,51412],{"class":101},[91,60559,413],{"class":150},[91,60561,51467],{"class":97},[91,60563,51531],{"class":150},[91,60565,1268],{"class":101},[91,60567,60568],{"class":93,"line":1732},[91,60569,2507],{"class":101},[91,60571,60572],{"class":93,"line":1737},[91,60573,2378],{"emptyLinePlaceholder":17},[91,60575,60576,60578,60581],{"class":93,"line":1742},[91,60577,60525],{"class":1941},[91,60579,60580],{"class":51275}," input",[91,60582,15551],{"class":101},[91,60584,60585,60587,60589,60591,60593],{"class":93,"line":1756},[91,60586,51459],{"class":150},[91,60588,51412],{"class":101},[91,60590,60547],{"class":150},[91,60592,51467],{"class":97},[91,60594,1268],{"class":101},[91,60596,60597,60599,60601,60603,60605],{"class":93,"line":1761},[91,60598,51474],{"class":150},[91,60600,51412],{"class":101},[91,60602,709],{"class":150},[91,60604,51467],{"class":97},[91,60606,1268],{"class":101},[91,60608,60609,60611,60613,60615,60617,60619],{"class":93,"line":2555},[91,60610,51421],{"class":150},[91,60612,51412],{"class":101},[91,60614,293],{"class":150},[91,60616,2016],{"class":150},[91,60618,51467],{"class":97},[91,60620,1268],{"class":101},[91,60622,60623,60626,60628,60630,60632],{"class":93,"line":2569},[91,60624,60625],{"class":150},"            font-size",[91,60627,51412],{"class":101},[91,60629,651],{"class":150},[91,60631,51467],{"class":97},[91,60633,1268],{"class":101},[91,60635,60636,60639,60641,60643,60645],{"class":93,"line":2577},[91,60637,60638],{"class":150},"            line-height",[91,60640,51412],{"class":101},[91,60642,709],{"class":150},[91,60644,51467],{"class":97},[91,60646,1268],{"class":101},[91,60648,60649,60652,60654,60656,60658,60660,60663],{"class":93,"line":2582},[91,60650,60651],{"class":150},"            border",[91,60653,51412],{"class":101},[91,60655,319],{"class":150},[91,60657,51467],{"class":97},[91,60659,51496],{"class":150},[91,60661,60662],{"class":150}," #e0e0e0",[91,60664,1268],{"class":101},[91,60666,60667,60670,60672,60674],{"class":93,"line":2588},[91,60668,60669],{"class":150},"            outline",[91,60671,51412],{"class":101},[91,60673,54712],{"class":150},[91,60675,1268],{"class":101},[91,60677,60678],{"class":93,"line":2594},[91,60679,2507],{"class":101},[91,60681,60682],{"class":93,"line":2599},[91,60683,2378],{"emptyLinePlaceholder":17},[91,60685,60686,60688,60691],{"class":93,"line":7927},[91,60687,60525],{"class":1941},[91,60689,60690],{"class":1941}," .search",[91,60692,15551],{"class":101},[91,60694,60695,60697,60699,60701,60703,60705,60708],{"class":93,"line":7951},[91,60696,60651],{"class":150},[91,60698,51412],{"class":101},[91,60700,319],{"class":150},[91,60702,51467],{"class":97},[91,60704,51496],{"class":150},[91,60706,60707],{"class":150}," #ff6700",[91,60709,1268],{"class":101},[91,60711,60712],{"class":93,"line":7956},[91,60713,2507],{"class":101},[91,60715,60716],{"class":93,"line":7962},[91,60717,2378],{"emptyLinePlaceholder":17},[91,60719,60720,60723],{"class":93,"line":7989},[91,60721,60722],{"class":1941},"        .result-list",[91,60724,15551],{"class":101},[91,60726,60727,60729,60731,60733],{"class":93,"line":7994},[91,60728,51447],{"class":150},[91,60730,51412],{"class":101},[91,60732,54712],{"class":150},[91,60734,1268],{"class":101},[91,60736,60737,60739,60741,60743],{"class":93,"line":8000},[91,60738,60532],{"class":150},[91,60740,51412],{"class":101},[91,60742,54806],{"class":150},[91,60744,1268],{"class":101},[91,60746,60747,60750,60752,60754],{"class":93,"line":8012},[91,60748,60749],{"class":150},"            left",[91,60751,51412],{"class":101},[91,60753,293],{"class":150},[91,60755,1268],{"class":101},[91,60757,60758,60761,60763,60765,60767],{"class":93,"line":8024},[91,60759,60760],{"class":150},"            top",[91,60762,51412],{"class":101},[91,60764,709],{"class":150},[91,60766,51467],{"class":97},[91,60768,1268],{"class":101},[91,60770,60771,60773,60775,60777,60779],{"class":93,"line":8036},[91,60772,51459],{"class":150},[91,60774,51412],{"class":101},[91,60776,60547],{"class":150},[91,60778,51467],{"class":97},[91,60780,1268],{"class":101},[91,60782,60783,60785,60787,60789,60791,60793,60795],{"class":93,"line":9695},[91,60784,60651],{"class":150},[91,60786,51412],{"class":101},[91,60788,319],{"class":150},[91,60790,51467],{"class":97},[91,60792,51496],{"class":150},[91,60794,60707],{"class":150},[91,60796,1268],{"class":101},[91,60798,60799,60802,60804,60806],{"class":93,"line":9720},[91,60800,60801],{"class":150},"            border-top",[91,60803,51412],{"class":101},[91,60805,293],{"class":150},[91,60807,1268],{"class":101},[91,60809,60810,60813,60815,60818],{"class":93,"line":9743},[91,60811,60812],{"class":150},"            background",[91,60814,51412],{"class":101},[91,60816,60817],{"class":150},"#fff",[91,60819,1268],{"class":101},[91,60821,60822],{"class":93,"line":9767},[91,60823,2507],{"class":101},[91,60825,60826],{"class":93,"line":9772},[91,60827,2378],{"emptyLinePlaceholder":17},[91,60829,60830,60832,60834],{"class":93,"line":9777},[91,60831,60722],{"class":1941},[91,60833,1376],{"class":51275},[91,60835,15551],{"class":101},[91,60837,60838,60840,60842,60845],{"class":93,"line":9782},[91,60839,51447],{"class":150},[91,60841,51412],{"class":101},[91,60843,60844],{"class":150},"block",[91,60846,1268],{"class":101},[91,60848,60849,60851,60853,60855,60857,60860,60862],{"class":93,"line":9791},[91,60850,51421],{"class":150},[91,60852,51412],{"class":101},[91,60854,446],{"class":150},[91,60856,51467],{"class":97},[91,60858,60859],{"class":150}," 15",[91,60861,51467],{"class":97},[91,60863,1268],{"class":101},[91,60865,60866,60868,60870,60872,60874],{"class":93,"line":9796},[91,60867,60625],{"class":150},[91,60869,51412],{"class":101},[91,60871,600],{"class":150},[91,60873,51467],{"class":97},[91,60875,1268],{"class":101},[91,60877,60878,60881,60883,60886],{"class":93,"line":9802},[91,60879,60880],{"class":150},"            color",[91,60882,51412],{"class":101},[91,60884,60885],{"class":150},"#424242",[91,60887,1268],{"class":101},[91,60889,60890,60893,60895,60897],{"class":93,"line":9823},[91,60891,60892],{"class":150},"            text-decoration",[91,60894,51412],{"class":101},[91,60896,54712],{"class":150},[91,60898,1268],{"class":101},[91,60900,60901],{"class":93,"line":9829},[91,60902,2507],{"class":101},[91,60904,60905],{"class":93,"line":9843},[91,60906,2378],{"emptyLinePlaceholder":17},[91,60908,60909,60911,60913,60916],{"class":93,"line":9849},[91,60910,60722],{"class":1941},[91,60912,1376],{"class":51275},[91,60914,60915],{"class":1941},":hover",[91,60917,15551],{"class":101},[91,60919,60920,60922,60924,60927],{"class":93,"line":9876},[91,60921,51615],{"class":150},[91,60923,51412],{"class":101},[91,60925,60926],{"class":150},"#eee",[91,60928,1268],{"class":101},[91,60930,60931],{"class":93,"line":9885},[91,60932,2507],{"class":101},[91,60934,60935,60937,60939],{"class":93,"line":9891},[91,60936,51751],{"class":101},[91,60938,5105],{"class":51275},[91,60940,51282],{"class":101},[91,60942,60943],{"class":93,"line":9899},[91,60944,2378],{"emptyLinePlaceholder":17},[91,60946,60947,60949,60951],{"class":93,"line":9904},[91,60948,51760],{"class":101},[91,60950,51309],{"class":51275},[91,60952,51282],{"class":101},[91,60954,60955],{"class":93,"line":16583},[91,60956,2378],{"emptyLinePlaceholder":17},[91,60958,60959,60961,60963],{"class":93,"line":16589},[91,60960,1012],{"class":101},[91,60962,51775],{"class":51275},[91,60964,51282],{"class":101},[91,60966,60967,60969,60971,60973,60975,60978],{"class":93,"line":16612},[91,60968,51316],{"class":101},[91,60970,51586],{"class":51275},[91,60972,53461],{"class":1941},[91,60974,147],{"class":101},[91,60976,60977],{"class":206},"\"mi\"",[91,60979,51282],{"class":101},[91,60981,60982,60984,60986,60988,60990,60993,60996,60998,61001],{"class":93,"line":16618},[91,60983,55277],{"class":101},[91,60985,53796],{"class":51275},[91,60987,53799],{"class":1941},[91,60989,147],{"class":101},[91,60991,60992],{"class":206},"\"search\"",[91,60994,60995],{"class":1941}," placeholder",[91,60997,147],{"class":101},[91,60999,61000],{"class":206},"\"小米笔记本\"",[91,61002,51282],{"class":101},[91,61004,61005,61007,61009,61011,61013,61016],{"class":93,"line":16641},[91,61006,55277],{"class":101},[91,61008,1109],{"class":51275},[91,61010,53461],{"class":1941},[91,61012,147],{"class":101},[91,61014,61015],{"class":206},"\"result-list\"",[91,61017,51282],{"class":101},[91,61019,61020,61023,61025,61028,61030,61033,61035,61038,61041,61043,61045,61047],{"class":93,"line":16655},[91,61021,61022],{"class":101},"            \u003C",[91,61024,49],{"class":51275},[91,61026,61027],{"class":101},">\u003C",[91,61029,340],{"class":51275},[91,61031,61032],{"class":1941}," href",[91,61034,147],{"class":101},[91,61036,61037],{"class":206},"\"#\"",[91,61039,61040],{"class":101},">全部商品\u003C\u002F",[91,61042,340],{"class":51275},[91,61044,55289],{"class":101},[91,61046,49],{"class":51275},[91,61048,51282],{"class":101},[91,61050,61051,61053,61055,61057,61059,61061,61063,61065,61068,61070,61072,61074],{"class":93,"line":16675},[91,61052,61022],{"class":101},[91,61054,49],{"class":51275},[91,61056,61027],{"class":101},[91,61058,340],{"class":51275},[91,61060,61032],{"class":1941},[91,61062,147],{"class":101},[91,61064,61037],{"class":206},[91,61066,61067],{"class":101},">小米11\u003C\u002F",[91,61069,340],{"class":51275},[91,61071,55289],{"class":101},[91,61073,49],{"class":51275},[91,61075,51282],{"class":101},[91,61077,61078,61080,61082,61084,61086,61088,61090,61092,61095,61097,61099,61101],{"class":93,"line":16681},[91,61079,61022],{"class":101},[91,61081,49],{"class":51275},[91,61083,61027],{"class":101},[91,61085,340],{"class":51275},[91,61087,61032],{"class":1941},[91,61089,147],{"class":101},[91,61091,61037],{"class":206},[91,61093,61094],{"class":101},">小米10S\u003C\u002F",[91,61096,340],{"class":51275},[91,61098,55289],{"class":101},[91,61100,49],{"class":51275},[91,61102,51282],{"class":101},[91,61104,61105,61107,61109,61111,61113,61115,61117,61119,61122,61124,61126,61128],{"class":93,"line":16692},[91,61106,61022],{"class":101},[91,61108,49],{"class":51275},[91,61110,61027],{"class":101},[91,61112,340],{"class":51275},[91,61114,61032],{"class":1941},[91,61116,147],{"class":101},[91,61118,61037],{"class":206},[91,61120,61121],{"class":101},">小米笔记本\u003C\u002F",[91,61123,340],{"class":51275},[91,61125,55289],{"class":101},[91,61127,49],{"class":51275},[91,61129,51282],{"class":101},[91,61131,61132,61134,61136,61138,61140,61142,61144,61146,61149,61151,61153,61155],{"class":93,"line":16715},[91,61133,61022],{"class":101},[91,61135,49],{"class":51275},[91,61137,61027],{"class":101},[91,61139,340],{"class":51275},[91,61141,61032],{"class":1941},[91,61143,147],{"class":101},[91,61145,61037],{"class":206},[91,61147,61148],{"class":101},">小米手机\u003C\u002F",[91,61150,340],{"class":51275},[91,61152,55289],{"class":101},[91,61154,49],{"class":51275},[91,61156,51282],{"class":101},[91,61158,61159,61161,61163,61165,61167,61169,61171,61173,61176,61178,61180,61182],{"class":93,"line":16737},[91,61160,61022],{"class":101},[91,61162,49],{"class":51275},[91,61164,61027],{"class":101},[91,61166,340],{"class":51275},[91,61168,61032],{"class":1941},[91,61170,147],{"class":101},[91,61172,61037],{"class":206},[91,61174,61175],{"class":101},">黑鲨4\u003C\u002F",[91,61177,340],{"class":51275},[91,61179,55289],{"class":101},[91,61181,49],{"class":51275},[91,61183,51282],{"class":101},[91,61185,61186,61188,61190,61192,61194,61196,61198,61200,61203,61205,61207,61209],{"class":93,"line":16742},[91,61187,61022],{"class":101},[91,61189,49],{"class":51275},[91,61191,61027],{"class":101},[91,61193,340],{"class":51275},[91,61195,61032],{"class":1941},[91,61197,147],{"class":101},[91,61199,61037],{"class":206},[91,61201,61202],{"class":101},">空调\u003C\u002F",[91,61204,340],{"class":51275},[91,61206,55289],{"class":101},[91,61208,49],{"class":51275},[91,61210,51282],{"class":101},[91,61212,61213,61216,61218],{"class":93,"line":16748},[91,61214,61215],{"class":101},"        \u003C\u002F",[91,61217,1109],{"class":51275},[91,61219,51282],{"class":101},[91,61221,61222,61224,61226],{"class":93,"line":16762},[91,61223,51751],{"class":101},[91,61225,51586],{"class":51275},[91,61227,51282],{"class":101},[91,61229,61230,61232,61234],{"class":93,"line":16775},[91,61231,51316],{"class":101},[91,61233,51788],{"class":51275},[91,61235,51282],{"class":101},[91,61237,61238],{"class":93,"line":16780},[91,61239,61240],{"class":160},"        \u002F\u002F 1. 获取元素\n",[91,61242,61243,61246,61248,61250,61252,61254,61256,61259],{"class":93,"line":16794},[91,61244,61245],{"class":97},"        const",[91,61247,60580],{"class":150},[91,61249,13543],{"class":97},[91,61251,54371],{"class":101},[91,61253,54374],{"class":1941},[91,61255,102],{"class":101},[91,61257,61258],{"class":206},"'[type=search]'",[91,61260,108],{"class":101},[91,61262,61263,61265,61268,61270,61272,61274,61276,61279],{"class":93,"line":16799},[91,61264,61245],{"class":97},[91,61266,61267],{"class":150}," ul",[91,61269,13543],{"class":97},[91,61271,54371],{"class":101},[91,61273,54374],{"class":1941},[91,61275,102],{"class":101},[91,61277,61278],{"class":206},"'.result-list'",[91,61280,108],{"class":101},[91,61282,61283],{"class":93,"line":16805},[91,61284,61285],{"class":160},"        \u002F\u002F console.log(input)\n",[91,61287,61288],{"class":93,"line":16810},[91,61289,61290],{"class":160},"        \u002F\u002F 2. 监听事件 获得焦点\n",[91,61292,61293,61296,61298,61300,61303,61305,61307],{"class":93,"line":16824},[91,61294,61295],{"class":101},"        input.",[91,61297,57788],{"class":1941},[91,61299,102],{"class":101},[91,61301,61302],{"class":206},"'focus'",[91,61304,12414],{"class":101},[91,61306,54424],{"class":97},[91,61308,54427],{"class":101},[91,61310,61311],{"class":93,"line":16829},[91,61312,61313],{"class":160},"            \u002F\u002F ul显示\n",[91,61315,61316,61319,61321],{"class":93,"line":16834},[91,61317,61318],{"class":101},"            ul.style.display ",[91,61320,147],{"class":97},[91,61322,61323],{"class":206}," 'block'\n",[91,61325,61326],{"class":93,"line":16848},[91,61327,61328],{"class":160},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[91,61330,61331,61334,61336,61338,61341],{"class":93,"line":16860},[91,61332,61333],{"class":101},"            input.classList.",[91,61335,5313],{"class":1941},[91,61337,102],{"class":101},[91,61339,61340],{"class":206},"'search'",[91,61342,108],{"class":101},[91,61344,61345],{"class":93,"line":16865},[91,61346,61347],{"class":101},"        })\n",[91,61349,61350],{"class":93,"line":16878},[91,61351,61352],{"class":160},"        \u002F\u002F 3. 监听事件 失去焦点\n",[91,61354,61355,61357,61359,61361,61364,61366,61368],{"class":93,"line":16883},[91,61356,61295],{"class":101},[91,61358,57788],{"class":1941},[91,61360,102],{"class":101},[91,61362,61363],{"class":206},"'blur'",[91,61365,12414],{"class":101},[91,61367,54424],{"class":97},[91,61369,54427],{"class":101},[91,61371,61372,61374,61376],{"class":93,"line":16888},[91,61373,61318],{"class":101},[91,61375,147],{"class":97},[91,61377,61378],{"class":206}," 'none'\n",[91,61380,61381,61383,61385,61387,61389],{"class":93,"line":16893},[91,61382,61333],{"class":101},[91,61384,56981],{"class":1941},[91,61386,102],{"class":101},[91,61388,61340],{"class":206},[91,61390,108],{"class":101},[91,61392,61393],{"class":93,"line":16906},[91,61394,61347],{"class":101},[91,61396,61397,61399,61401],{"class":93,"line":16911},[91,61398,51751],{"class":101},[91,61400,51788],{"class":51275},[91,61402,51282],{"class":101},[91,61404,61405,61407,61409],{"class":93,"line":32608},[91,61406,51760],{"class":101},[91,61408,51775],{"class":51275},[91,61410,51282],{"class":101},[91,61412,61413],{"class":93,"line":32614},[91,61414,2378],{"emptyLinePlaceholder":17},[91,61416,61417,61419,61421],{"class":93,"line":32620},[91,61418,51760],{"class":101},[91,61420,50610],{"class":51275},[91,61422,51282],{"class":101},[21977,61424,61426],{"id":61425},"_3253-键盘事件","3.2.5.3 键盘事件",[38,61428,61429],{},"评论字数统计案例",[38,61431,61432],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[38,61434,61435],{},"牢记focus伪类选择器",[51319,61437],{"charSet":61438},"UTF-8",[51319,61440],{"name":61441,"content":61442},"viewport","width=device-width, initial-scale=1.0",[51382,61444,61445],{},"Document",[5105,61447,61448],{},"\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",[53796,61450],{"type":5166},[1109,61452,61453,61456],{},[49,61454,61455],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[49,61457,61458],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[83,61460,61462],{"className":50608,"code":61461,"language":50610,"meta":10,"style":10},"\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",[88,61463,61464,61474,61488,61492,61500,61514,61534,61554,61567,61575,61582,61595,61609,61619,61629,61633,61637,61644,61656,61668,61680,61692,61721,61734,61738,61742,61751,61762,61774,61785,61796,61808,61819,61831,61847,61859,61863,61867,61878,61889,61899,61911,61915,61919,61927,61938,61948,61959,61971,61984,61996,62008,62012,62016,62025,62037,62048,62061,62072,62086,62090,62094,62101,62113,62125,62135,62139,62143,62152,62164,62174,62178,62182,62193,62203,62222,62235,62239,62243,62253,62263,62267,62271,62282,62293,62305,62317,62321,62325,62336,62347,62361,62365,62369,62380,62390,62402,62406,62414,62422,62426,62434,62449,62468,62508,62521,62529,62543,62563,62571,62586,62609,62627,62642,62662,62682,62702,62710,62718,62726,62734,62754,62774,62779,62796,62805,62809,62814,62830,62838,62842,62847,62864,62869,62894,62898,62902,62907,62912,62920,62928,62932],{"__ignoreMap":10},[91,61465,61466,61468,61470,61472],{"class":93,"line":94},[91,61467,51272],{"class":101},[91,61469,51276],{"class":51275},[91,61471,51279],{"class":1941},[91,61473,51282],{"class":101},[91,61475,61476,61478,61480,61482,61484,61486],{"class":93,"line":11},[91,61477,1012],{"class":101},[91,61479,50610],{"class":51275},[91,61481,51291],{"class":1941},[91,61483,147],{"class":101},[91,61485,51296],{"class":206},[91,61487,51282],{"class":101},[91,61489,61490],{"class":93,"line":1157},[91,61491,2378],{"emptyLinePlaceholder":17},[91,61493,61494,61496,61498],{"class":93,"line":1172},[91,61495,1012],{"class":101},[91,61497,51309],{"class":51275},[91,61499,51282],{"class":101},[91,61501,61502,61504,61506,61508,61510,61512],{"class":93,"line":1178},[91,61503,52119],{"class":101},[91,61505,51319],{"class":51275},[91,61507,51322],{"class":1941},[91,61509,147],{"class":101},[91,61511,51327],{"class":206},[91,61513,51282],{"class":101},[91,61515,61516,61518,61520,61522,61524,61526,61528,61530,61532],{"class":93,"line":1192},[91,61517,52119],{"class":101},[91,61519,51319],{"class":51275},[91,61521,51338],{"class":1941},[91,61523,147],{"class":101},[91,61525,51343],{"class":206},[91,61527,51346],{"class":1941},[91,61529,147],{"class":101},[91,61531,51351],{"class":206},[91,61533,51282],{"class":101},[91,61535,61536,61538,61540,61542,61544,61546,61548,61550,61552],{"class":93,"line":1198},[91,61537,52119],{"class":101},[91,61539,51319],{"class":51275},[91,61541,14899],{"class":1941},[91,61543,147],{"class":101},[91,61545,51366],{"class":206},[91,61547,51346],{"class":1941},[91,61549,147],{"class":101},[91,61551,51373],{"class":206},[91,61553,51282],{"class":101},[91,61555,61556,61558,61560,61563,61565],{"class":93,"line":1289},[91,61557,52119],{"class":101},[91,61559,51382],{"class":51275},[91,61561,61562],{"class":101},">评论回车发布\u003C\u002F",[91,61564,51382],{"class":51275},[91,61566,51282],{"class":101},[91,61568,61569,61571,61573],{"class":93,"line":1295},[91,61570,52119],{"class":101},[91,61572,5105],{"class":51275},[91,61574,51282],{"class":101},[91,61576,61577,61580],{"class":93,"line":1307},[91,61578,61579],{"class":1941},"    .wrapper",[91,61581,15551],{"class":101},[91,61583,61584,61587,61589,61591,61593],{"class":93,"line":1590},[91,61585,61586],{"class":150},"      min-width",[91,61588,51412],{"class":101},[91,61590,3965],{"class":150},[91,61592,51467],{"class":97},[91,61594,1268],{"class":101},[91,61596,61597,61600,61602,61605,61607],{"class":93,"line":1595},[91,61598,61599],{"class":150},"      max-width",[91,61601,51412],{"class":101},[91,61603,61604],{"class":150},"800",[91,61606,51467],{"class":97},[91,61608,1268],{"class":101},[91,61610,61611,61613,61615,61617],{"class":93,"line":1601},[91,61612,54984],{"class":150},[91,61614,51412],{"class":101},[91,61616,51452],{"class":150},[91,61618,1268],{"class":101},[91,61620,61621,61623,61625,61627],{"class":93,"line":1606},[91,61622,54995],{"class":150},[91,61624,51412],{"class":101},[91,61626,51555],{"class":150},[91,61628,1268],{"class":101},[91,61630,61631],{"class":93,"line":1620},[91,61632,2165],{"class":101},[91,61634,61635],{"class":93,"line":1625},[91,61636,2378],{"emptyLinePlaceholder":17},[91,61638,61639,61642],{"class":93,"line":1631},[91,61640,61641],{"class":1941},"    .avatar",[91,61643,15551],{"class":101},[91,61645,61646,61648,61650,61652,61654],{"class":93,"line":1652},[91,61647,54746],{"class":150},[91,61649,51412],{"class":101},[91,61651,709],{"class":150},[91,61653,51467],{"class":97},[91,61655,1268],{"class":101},[91,61657,61658,61660,61662,61664,61666],{"class":93,"line":1657},[91,61659,54760],{"class":150},[91,61661,51412],{"class":101},[91,61663,709],{"class":150},[91,61665,51467],{"class":97},[91,61667,1268],{"class":101},[91,61669,61670,61672,61674,61676,61678],{"class":93,"line":1671},[91,61671,55109],{"class":150},[91,61673,51412],{"class":101},[91,61675,758],{"class":150},[91,61677,430],{"class":97},[91,61679,1268],{"class":101},[91,61681,61682,61685,61687,61690],{"class":93,"line":1676},[91,61683,61684],{"class":150},"      overflow",[91,61686,51412],{"class":101},[91,61688,61689],{"class":150},"hidden",[91,61691,1268],{"class":101},[91,61693,61694,61697,61699,61702,61704,61707,61709,61712,61714,61716,61719],{"class":93,"line":1705},[91,61695,61696],{"class":150},"      background",[91,61698,51412],{"class":101},[91,61700,61701],{"class":150},"url",[91,61703,102],{"class":101},[91,61705,61706],{"class":5195},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[91,61708,13693],{"class":101},[91,61710,61711],{"class":150},"no-repeat",[91,61713,17123],{"class":150},[91,61715,24953],{"class":101},[91,61717,61718],{"class":150},"cover",[91,61720,1268],{"class":101},[91,61722,61723,61726,61728,61730,61732],{"class":93,"line":1710},[91,61724,61725],{"class":150},"      margin-right",[91,61727,51412],{"class":101},[91,61729,802],{"class":150},[91,61731,51467],{"class":97},[91,61733,1268],{"class":101},[91,61735,61736],{"class":93,"line":1727},[91,61737,2165],{"class":101},[91,61739,61740],{"class":93,"line":1732},[91,61741,2378],{"emptyLinePlaceholder":17},[91,61743,61744,61746,61749],{"class":93,"line":1737},[91,61745,61579],{"class":1941},[91,61747,61748],{"class":51275}," textarea",[91,61750,15551],{"class":101},[91,61752,61753,61756,61758,61760],{"class":93,"line":1742},[91,61754,61755],{"class":150},"      outline",[91,61757,51412],{"class":101},[91,61759,54712],{"class":150},[91,61761,1268],{"class":101},[91,61763,61764,61767,61769,61772],{"class":93,"line":1756},[91,61765,61766],{"class":150},"      border-color",[91,61768,51412],{"class":101},[91,61770,61771],{"class":150},"transparent",[91,61773,1268],{"class":101},[91,61775,61776,61779,61781,61783],{"class":93,"line":1761},[91,61777,61778],{"class":150},"      resize",[91,61780,51412],{"class":101},[91,61782,54712],{"class":150},[91,61784,1268],{"class":101},[91,61786,61787,61789,61791,61794],{"class":93,"line":2555},[91,61788,61696],{"class":150},[91,61790,51412],{"class":101},[91,61792,61793],{"class":150},"#f5f5f5",[91,61795,1268],{"class":101},[91,61797,61798,61800,61802,61804,61806],{"class":93,"line":2569},[91,61799,55109],{"class":150},[91,61801,51412],{"class":101},[91,61803,395],{"class":150},[91,61805,51467],{"class":97},[91,61807,1268],{"class":101},[91,61809,61810,61813,61815,61817],{"class":93,"line":2577},[91,61811,61812],{"class":150},"      flex",[91,61814,51412],{"class":101},[91,61816,319],{"class":150},[91,61818,1268],{"class":101},[91,61820,61821,61823,61825,61827,61829],{"class":93,"line":2582},[91,61822,54670],{"class":150},[91,61824,51412],{"class":101},[91,61826,548],{"class":150},[91,61828,51467],{"class":97},[91,61830,1268],{"class":101},[91,61832,61833,61836,61838,61840,61843,61845],{"class":93,"line":2588},[91,61834,61835],{"class":150},"      transition",[91,61837,51412],{"class":101},[91,61839,28096],{"class":150},[91,61841,61842],{"class":150}," 0.5",[91,61844,797],{"class":97},[91,61846,1268],{"class":101},[91,61848,61849,61851,61853,61855,61857],{"class":93,"line":2594},[91,61850,54760],{"class":150},[91,61852,51412],{"class":101},[91,61854,1053],{"class":150},[91,61856,51467],{"class":97},[91,61858,1268],{"class":101},[91,61860,61861],{"class":93,"line":2599},[91,61862,2165],{"class":101},[91,61864,61865],{"class":93,"line":7927},[91,61866,2378],{"emptyLinePlaceholder":17},[91,61868,61869,61871,61873,61876],{"class":93,"line":7951},[91,61870,61579],{"class":1941},[91,61872,61748],{"class":51275},[91,61874,61875],{"class":1941},":focus",[91,61877,15551],{"class":101},[91,61879,61880,61882,61884,61887],{"class":93,"line":7956},[91,61881,61766],{"class":150},[91,61883,51412],{"class":101},[91,61885,61886],{"class":150},"#e4e4e4",[91,61888,1268],{"class":101},[91,61890,61891,61893,61895,61897],{"class":93,"line":7962},[91,61892,61696],{"class":150},[91,61894,51412],{"class":101},[91,61896,60817],{"class":150},[91,61898,1268],{"class":101},[91,61900,61901,61903,61905,61907,61909],{"class":93,"line":7989},[91,61902,54760],{"class":150},[91,61904,51412],{"class":101},[91,61906,758],{"class":150},[91,61908,51467],{"class":97},[91,61910,1268],{"class":101},[91,61912,61913],{"class":93,"line":7994},[91,61914,2165],{"class":101},[91,61916,61917],{"class":93,"line":8000},[91,61918,2378],{"emptyLinePlaceholder":17},[91,61920,61921,61923,61925],{"class":93,"line":8012},[91,61922,61579],{"class":1941},[91,61924,57442],{"class":51275},[91,61926,15551],{"class":101},[91,61928,61929,61931,61933,61936],{"class":93,"line":8024},[91,61930,61696],{"class":150},[91,61932,51412],{"class":101},[91,61934,61935],{"class":150},"#00aeec",[91,61937,1268],{"class":101},[91,61939,61940,61942,61944,61946],{"class":93,"line":8036},[91,61941,57391],{"class":150},[91,61943,51412],{"class":101},[91,61945,60817],{"class":150},[91,61947,1268],{"class":101},[91,61949,61950,61953,61955,61957],{"class":93,"line":9695},[91,61951,61952],{"class":150},"      border",[91,61954,51412],{"class":101},[91,61956,54712],{"class":150},[91,61958,1268],{"class":101},[91,61960,61961,61963,61965,61967,61969],{"class":93,"line":9720},[91,61962,55109],{"class":150},[91,61964,51412],{"class":101},[91,61966,395],{"class":150},[91,61968,51467],{"class":97},[91,61970,1268],{"class":101},[91,61972,61973,61976,61978,61980,61982],{"class":93,"line":9743},[91,61974,61975],{"class":150},"      margin-left",[91,61977,51412],{"class":101},[91,61979,548],{"class":150},[91,61981,51467],{"class":97},[91,61983,1268],{"class":101},[91,61985,61986,61988,61990,61992,61994],{"class":93,"line":9767},[91,61987,54746],{"class":150},[91,61989,51412],{"class":101},[91,61991,458],{"class":150},[91,61993,51467],{"class":97},[91,61995,1268],{"class":101},[91,61997,61998,62001,62003,62006],{"class":93,"line":9772},[91,61999,62000],{"class":150},"      cursor",[91,62002,51412],{"class":101},[91,62004,62005],{"class":150},"pointer",[91,62007,1268],{"class":101},[91,62009,62010],{"class":93,"line":9777},[91,62011,2165],{"class":101},[91,62013,62014],{"class":93,"line":9782},[91,62015,2378],{"emptyLinePlaceholder":17},[91,62017,62018,62020,62023],{"class":93,"line":9791},[91,62019,61579],{"class":1941},[91,62021,62022],{"class":1941}," .total",[91,62024,15551],{"class":101},[91,62026,62027,62029,62031,62033,62035],{"class":93,"line":9796},[91,62028,61725],{"class":150},[91,62030,51412],{"class":101},[91,62032,714],{"class":150},[91,62034,51467],{"class":97},[91,62036,1268],{"class":101},[91,62038,62039,62041,62043,62046],{"class":93,"line":9802},[91,62040,57391],{"class":150},[91,62042,51412],{"class":101},[91,62044,62045],{"class":150},"#999",[91,62047,1268],{"class":101},[91,62049,62050,62053,62055,62057,62059],{"class":93,"line":9823},[91,62051,62052],{"class":150},"      margin-top",[91,62054,51412],{"class":101},[91,62056,421],{"class":150},[91,62058,51467],{"class":97},[91,62060,1268],{"class":101},[91,62062,62063,62066,62068,62070],{"class":93,"line":9829},[91,62064,62065],{"class":150},"      opacity",[91,62067,51412],{"class":101},[91,62069,293],{"class":150},[91,62071,1268],{"class":101},[91,62073,62074,62076,62078,62080,62082,62084],{"class":93,"line":9843},[91,62075,61835],{"class":150},[91,62077,51412],{"class":101},[91,62079,28096],{"class":150},[91,62081,61842],{"class":150},[91,62083,797],{"class":97},[91,62085,1268],{"class":101},[91,62087,62088],{"class":93,"line":9849},[91,62089,2165],{"class":101},[91,62091,62092],{"class":93,"line":9876},[91,62093,2378],{"emptyLinePlaceholder":17},[91,62095,62096,62099],{"class":93,"line":9885},[91,62097,62098],{"class":1941},"    .list",[91,62100,15551],{"class":101},[91,62102,62103,62105,62107,62109,62111],{"class":93,"line":9891},[91,62104,61586],{"class":150},[91,62106,51412],{"class":101},[91,62108,3965],{"class":150},[91,62110,51467],{"class":97},[91,62112,1268],{"class":101},[91,62114,62115,62117,62119,62121,62123],{"class":93,"line":9899},[91,62116,61599],{"class":150},[91,62118,51412],{"class":101},[91,62120,61604],{"class":150},[91,62122,51467],{"class":97},[91,62124,1268],{"class":101},[91,62126,62127,62129,62131,62133],{"class":93,"line":9904},[91,62128,54984],{"class":150},[91,62130,51412],{"class":101},[91,62132,51452],{"class":150},[91,62134,1268],{"class":101},[91,62136,62137],{"class":93,"line":16583},[91,62138,2165],{"class":101},[91,62140,62141],{"class":93,"line":16589},[91,62142,2378],{"emptyLinePlaceholder":17},[91,62144,62145,62147,62150],{"class":93,"line":16612},[91,62146,62098],{"class":1941},[91,62148,62149],{"class":1941}," .item",[91,62151,15551],{"class":101},[91,62153,62154,62156,62158,62160,62162],{"class":93,"line":16618},[91,62155,54746],{"class":150},[91,62157,51412],{"class":101},[91,62159,413],{"class":150},[91,62161,430],{"class":97},[91,62163,1268],{"class":101},[91,62165,62166,62168,62170,62172],{"class":93,"line":16641},[91,62167,54984],{"class":150},[91,62169,51412],{"class":101},[91,62171,51452],{"class":150},[91,62173,1268],{"class":101},[91,62175,62176],{"class":93,"line":16655},[91,62177,2165],{"class":101},[91,62179,62180],{"class":93,"line":16675},[91,62181,2378],{"emptyLinePlaceholder":17},[91,62183,62184,62186,62188,62191],{"class":93,"line":16681},[91,62185,62098],{"class":1941},[91,62187,62149],{"class":1941},[91,62189,62190],{"class":1941}," .info",[91,62192,15551],{"class":101},[91,62194,62195,62197,62199,62201],{"class":93,"line":16692},[91,62196,61812],{"class":150},[91,62198,51412],{"class":101},[91,62200,319],{"class":150},[91,62202,1268],{"class":101},[91,62204,62205,62208,62210,62212,62214,62217,62220],{"class":93,"line":16715},[91,62206,62207],{"class":150},"      border-bottom",[91,62209,51412],{"class":101},[91,62211,319],{"class":150},[91,62213,51467],{"class":97},[91,62215,62216],{"class":150}," dashed",[91,62218,62219],{"class":150}," #e4e4e4",[91,62221,1268],{"class":101},[91,62223,62224,62227,62229,62231,62233],{"class":93,"line":16737},[91,62225,62226],{"class":150},"      padding-bottom",[91,62228,51412],{"class":101},[91,62230,548],{"class":150},[91,62232,51467],{"class":97},[91,62234,1268],{"class":101},[91,62236,62237],{"class":93,"line":16742},[91,62238,2165],{"class":101},[91,62240,62241],{"class":93,"line":16748},[91,62242,2378],{"emptyLinePlaceholder":17},[91,62244,62245,62247,62249,62251],{"class":93,"line":16762},[91,62246,62098],{"class":1941},[91,62248,62149],{"class":1941},[91,62250,6804],{"class":51275},[91,62252,15551],{"class":101},[91,62254,62255,62257,62259,62261],{"class":93,"line":16775},[91,62256,54681],{"class":150},[91,62258,51412],{"class":101},[91,62260,293],{"class":150},[91,62262,1268],{"class":101},[91,62264,62265],{"class":93,"line":16780},[91,62266,2165],{"class":101},[91,62268,62269],{"class":93,"line":16794},[91,62270,2378],{"emptyLinePlaceholder":17},[91,62272,62273,62275,62277,62280],{"class":93,"line":16799},[91,62274,62098],{"class":1941},[91,62276,62149],{"class":1941},[91,62278,62279],{"class":1941}," .name",[91,62281,15551],{"class":101},[91,62283,62284,62286,62288,62291],{"class":93,"line":16805},[91,62285,57391],{"class":150},[91,62287,51412],{"class":101},[91,62289,62290],{"class":150},"#FB7299",[91,62292,1268],{"class":101},[91,62294,62295,62297,62299,62301,62303],{"class":93,"line":16810},[91,62296,54897],{"class":150},[91,62298,51412],{"class":101},[91,62300,651],{"class":150},[91,62302,51467],{"class":97},[91,62304,1268],{"class":101},[91,62306,62307,62310,62312,62315],{"class":93,"line":16824},[91,62308,62309],{"class":150},"      font-weight",[91,62311,51412],{"class":101},[91,62313,62314],{"class":150},"bold",[91,62316,1268],{"class":101},[91,62318,62319],{"class":93,"line":16829},[91,62320,2165],{"class":101},[91,62322,62323],{"class":93,"line":16834},[91,62324,2378],{"emptyLinePlaceholder":17},[91,62326,62327,62329,62331,62334],{"class":93,"line":16848},[91,62328,62098],{"class":1941},[91,62330,62149],{"class":1941},[91,62332,62333],{"class":1941}," .text",[91,62335,15551],{"class":101},[91,62337,62338,62340,62342,62345],{"class":93,"line":16860},[91,62339,57391],{"class":150},[91,62341,51412],{"class":101},[91,62343,62344],{"class":150},"#333",[91,62346,1268],{"class":101},[91,62348,62349,62351,62353,62355,62357,62359],{"class":93,"line":16865},[91,62350,54670],{"class":150},[91,62352,51412],{"class":101},[91,62354,548],{"class":150},[91,62356,51467],{"class":97},[91,62358,4071],{"class":150},[91,62360,1268],{"class":101},[91,62362,62363],{"class":93,"line":16878},[91,62364,2165],{"class":101},[91,62366,62367],{"class":93,"line":16883},[91,62368,2378],{"emptyLinePlaceholder":17},[91,62370,62371,62373,62375,62378],{"class":93,"line":16888},[91,62372,62098],{"class":1941},[91,62374,62149],{"class":1941},[91,62376,62377],{"class":1941}," .time",[91,62379,15551],{"class":101},[91,62381,62382,62384,62386,62388],{"class":93,"line":16893},[91,62383,57391],{"class":150},[91,62385,51412],{"class":101},[91,62387,62045],{"class":150},[91,62389,1268],{"class":101},[91,62391,62392,62394,62396,62398,62400],{"class":93,"line":16906},[91,62393,54897],{"class":150},[91,62395,51412],{"class":101},[91,62397,600],{"class":150},[91,62399,51467],{"class":97},[91,62401,1268],{"class":101},[91,62403,62404],{"class":93,"line":16911},[91,62405,2165],{"class":101},[91,62407,62408,62410,62412],{"class":93,"line":32608},[91,62409,52392],{"class":101},[91,62411,5105],{"class":51275},[91,62413,51282],{"class":101},[91,62415,62416,62418,62420],{"class":93,"line":32614},[91,62417,51760],{"class":101},[91,62419,51309],{"class":51275},[91,62421,51282],{"class":101},[91,62423,62424],{"class":93,"line":32620},[91,62425,2378],{"emptyLinePlaceholder":17},[91,62427,62428,62430,62432],{"class":93,"line":32626},[91,62429,1012],{"class":101},[91,62431,51775],{"class":51275},[91,62433,51282],{"class":101},[91,62435,62436,62438,62440,62442,62444,62447],{"class":93,"line":32632},[91,62437,52119],{"class":101},[91,62439,51586],{"class":51275},[91,62441,53461],{"class":1941},[91,62443,147],{"class":101},[91,62445,62446],{"class":206},"\"wrapper\"",[91,62448,51282],{"class":101},[91,62450,62451,62453,62455,62457,62459,62462,62464,62466],{"class":93,"line":32643},[91,62452,51316],{"class":101},[91,62454,543],{"class":51275},[91,62456,53461],{"class":1941},[91,62458,147],{"class":101},[91,62460,62461],{"class":206},"\"avatar\"",[91,62463,55289],{"class":101},[91,62465,543],{"class":51275},[91,62467,51282],{"class":101},[91,62469,62470,62472,62474,62476,62478,62481,62483,62485,62488,62490,62492,62494,62497,62499,62502,62504,62506],{"class":93,"line":32649},[91,62471,51316],{"class":101},[91,62473,54263],{"class":51275},[91,62475,14938],{"class":1941},[91,62477,147],{"class":101},[91,62479,62480],{"class":206},"\"tx\"",[91,62482,60995],{"class":1941},[91,62484,147],{"class":101},[91,62486,62487],{"class":206},"\"发一条友善的评论\"",[91,62489,54286],{"class":1941},[91,62491,147],{"class":101},[91,62493,3679],{"class":206},[91,62495,62496],{"class":1941}," maxlength",[91,62498,147],{"class":101},[91,62500,62501],{"class":206},"\"200\"",[91,62503,55289],{"class":101},[91,62505,54263],{"class":51275},[91,62507,51282],{"class":101},[91,62509,62510,62512,62514,62517,62519],{"class":93,"line":32669},[91,62511,51316],{"class":101},[91,62513,53862],{"class":51275},[91,62515,62516],{"class":101},">发布\u003C\u002F",[91,62518,53862],{"class":51275},[91,62520,51282],{"class":101},[91,62522,62523,62525,62527],{"class":93,"line":32675},[91,62524,52392],{"class":101},[91,62526,51586],{"class":51275},[91,62528,51282],{"class":101},[91,62530,62531,62533,62535,62537,62539,62541],{"class":93,"line":32686},[91,62532,52119],{"class":101},[91,62534,51586],{"class":51275},[91,62536,53461],{"class":1941},[91,62538,147],{"class":101},[91,62540,62446],{"class":206},[91,62542,51282],{"class":101},[91,62544,62545,62547,62549,62551,62553,62556,62559,62561],{"class":93,"line":32692},[91,62546,51316],{"class":101},[91,62548,91],{"class":51275},[91,62550,53461],{"class":1941},[91,62552,147],{"class":101},[91,62554,62555],{"class":206},"\"total\"",[91,62557,62558],{"class":101},">0\u002F200字\u003C\u002F",[91,62560,91],{"class":51275},[91,62562,51282],{"class":101},[91,62564,62565,62567,62569],{"class":93,"line":32698},[91,62566,52392],{"class":101},[91,62568,51586],{"class":51275},[91,62570,51282],{"class":101},[91,62572,62573,62575,62577,62579,62581,62584],{"class":93,"line":32704},[91,62574,52119],{"class":101},[91,62576,51586],{"class":51275},[91,62578,53461],{"class":1941},[91,62580,147],{"class":101},[91,62582,62583],{"class":206},"\"list\"",[91,62585,51282],{"class":101},[91,62587,62588,62590,62592,62594,62596,62599,62602,62604,62607],{"class":93,"line":32710},[91,62589,51316],{"class":101},[91,62591,51586],{"class":51275},[91,62593,53461],{"class":1941},[91,62595,147],{"class":101},[91,62597,62598],{"class":206},"\"item\"",[91,62600,62601],{"class":1941}," style",[91,62603,147],{"class":101},[91,62605,62606],{"class":206},"\"display: none;\"",[91,62608,51282],{"class":101},[91,62610,62611,62613,62615,62617,62619,62621,62623,62625],{"class":93,"line":32716},[91,62612,55209],{"class":101},[91,62614,543],{"class":51275},[91,62616,53461],{"class":1941},[91,62618,147],{"class":101},[91,62620,62461],{"class":206},[91,62622,55289],{"class":101},[91,62624,543],{"class":51275},[91,62626,51282],{"class":101},[91,62628,62629,62631,62633,62635,62637,62640],{"class":93,"line":32722},[91,62630,55209],{"class":101},[91,62632,51586],{"class":51275},[91,62634,53461],{"class":1941},[91,62636,147],{"class":101},[91,62638,62639],{"class":206},"\"info\"",[91,62641,51282],{"class":101},[91,62643,62644,62646,62648,62650,62652,62655,62658,62660],{"class":93,"line":32728},[91,62645,55277],{"class":101},[91,62647,38],{"class":51275},[91,62649,53461],{"class":1941},[91,62651,147],{"class":101},[91,62653,62654],{"class":206},"\"name\"",[91,62656,62657],{"class":101},">清风徐来\u003C\u002F",[91,62659,38],{"class":51275},[91,62661,51282],{"class":101},[91,62663,62664,62666,62668,62670,62672,62675,62678,62680],{"class":93,"line":32748},[91,62665,55277],{"class":101},[91,62667,38],{"class":51275},[91,62669,53461],{"class":1941},[91,62671,147],{"class":101},[91,62673,62674],{"class":206},"\"text\"",[91,62676,62677],{"class":101},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[91,62679,38],{"class":51275},[91,62681,51282],{"class":101},[91,62683,62684,62686,62688,62690,62692,62695,62698,62700],{"class":93,"line":32754},[91,62685,55277],{"class":101},[91,62687,38],{"class":51275},[91,62689,53461],{"class":1941},[91,62691,147],{"class":101},[91,62693,62694],{"class":206},"\"time\"",[91,62696,62697],{"class":101},">2022-10-10 20:29:21\u003C\u002F",[91,62699,38],{"class":51275},[91,62701,51282],{"class":101},[91,62703,62704,62706,62708],{"class":93,"line":32770},[91,62705,55382],{"class":101},[91,62707,51586],{"class":51275},[91,62709,51282],{"class":101},[91,62711,62712,62714,62716],{"class":93,"line":32776},[91,62713,51751],{"class":101},[91,62715,51586],{"class":51275},[91,62717,51282],{"class":101},[91,62719,62720,62722,62724],{"class":93,"line":32790},[91,62721,52392],{"class":101},[91,62723,51586],{"class":51275},[91,62725,51282],{"class":101},[91,62727,62728,62730,62732],{"class":93,"line":32796},[91,62729,52119],{"class":101},[91,62731,51788],{"class":51275},[91,62733,51282],{"class":101},[91,62735,62736,62738,62741,62743,62745,62747,62749,62752],{"class":93,"line":32811},[91,62737,11200],{"class":97},[91,62739,62740],{"class":150}," tx",[91,62742,13543],{"class":97},[91,62744,54371],{"class":101},[91,62746,54374],{"class":1941},[91,62748,102],{"class":101},[91,62750,62751],{"class":206},"'#tx'",[91,62753,108],{"class":101},[91,62755,62756,62758,62761,62763,62765,62767,62769,62772],{"class":93,"line":32817},[91,62757,11200],{"class":97},[91,62759,62760],{"class":150}," total",[91,62762,13543],{"class":97},[91,62764,54371],{"class":101},[91,62766,54374],{"class":1941},[91,62768,102],{"class":101},[91,62770,62771],{"class":206},"'.total'",[91,62773,108],{"class":101},[91,62775,62776],{"class":93,"line":32826},[91,62777,62778],{"class":160},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[91,62780,62781,62784,62786,62788,62790,62792,62794],{"class":93,"line":32832},[91,62782,62783],{"class":101},"    tx.",[91,62785,57788],{"class":1941},[91,62787,102],{"class":101},[91,62789,61302],{"class":206},[91,62791,12414],{"class":101},[91,62793,54424],{"class":97},[91,62795,54427],{"class":101},[91,62797,62798,62801,62803],{"class":93,"line":32841},[91,62799,62800],{"class":101},"      total.style.opacity ",[91,62802,147],{"class":97},[91,62804,55674],{"class":150},[91,62806,62807],{"class":93,"line":32847},[91,62808,33436],{"class":101},[91,62810,62811],{"class":93,"line":32853},[91,62812,62813],{"class":160},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[91,62815,62816,62818,62820,62822,62824,62826,62828],{"class":93,"line":32862},[91,62817,62783],{"class":101},[91,62819,57788],{"class":1941},[91,62821,102],{"class":101},[91,62823,61363],{"class":206},[91,62825,12414],{"class":101},[91,62827,54424],{"class":97},[91,62829,54427],{"class":101},[91,62831,62832,62834,62836],{"class":93,"line":32868},[91,62833,62800],{"class":101},[91,62835,147],{"class":97},[91,62837,47308],{"class":150},[91,62839,62840],{"class":93,"line":32879},[91,62841,33436],{"class":101},[91,62843,62844],{"class":93,"line":32885},[91,62845,62846],{"class":160},"    \u002F\u002F 3. 检测用户输入\n",[91,62848,62849,62851,62853,62855,62858,62860,62862],{"class":93,"line":32904},[91,62850,62783],{"class":101},[91,62852,57788],{"class":1941},[91,62854,102],{"class":101},[91,62856,62857],{"class":206},"'input'",[91,62859,12414],{"class":101},[91,62861,54424],{"class":97},[91,62863,54427],{"class":101},[91,62865,62866],{"class":93,"line":32910},[91,62867,62868],{"class":160},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[91,62870,62871,62874,62876,62879,62882,62884,62887,62889,62891],{"class":93,"line":32921},[91,62872,62873],{"class":101},"      total.innerHTML ",[91,62875,147],{"class":97},[91,62877,62878],{"class":206}," `${",[91,62880,62881],{"class":101},"tx",[91,62883,660],{"class":206},[91,62885,62886],{"class":101},"value",[91,62888,660],{"class":206},[91,62890,51943],{"class":150},[91,62892,62893],{"class":206},"}\u002F200字`\n",[91,62895,62896],{"class":93,"line":32927},[91,62897,33436],{"class":101},[91,62899,62900],{"class":93,"line":32947},[91,62901,2378],{"emptyLinePlaceholder":17},[91,62903,62904],{"class":93,"line":32963},[91,62905,62906],{"class":160},"    \u002F\u002F const str = 'andy'\n",[91,62908,62909],{"class":93,"line":32969},[91,62910,62911],{"class":160},"    \u002F\u002F console.log(str.length)\n",[91,62913,62914,62916,62918],{"class":93,"line":32983},[91,62915,52392],{"class":101},[91,62917,51788],{"class":51275},[91,62919,51282],{"class":101},[91,62921,62922,62924,62926],{"class":93,"line":32989},[91,62923,51760],{"class":101},[91,62925,51775],{"class":51275},[91,62927,51282],{"class":101},[91,62929,62930],{"class":93,"line":32995},[91,62931,2378],{"emptyLinePlaceholder":17},[91,62933,62934,62936,62938],{"class":93,"line":33006},[91,62935,51760],{"class":101},[91,62937,50610],{"class":51275},[91,62939,51282],{"class":101},[21977,62941,62943],{"id":62942},"_3254-change事件","3.2.5.4 change事件",[38,62945,62946],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[38,62948,62949],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[38,62951,62952],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[83,62954,62956],{"className":50608,"code":62955,"language":50610,"meta":10,"style":10},"\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",[88,62957,62958,62968,62982,62986,62994,63008,63028,63040,63048,63052,63060,63074,63082,63100,63118,63130,63134,63142,63150,63154],{"__ignoreMap":10},[91,62959,62960,62962,62964,62966],{"class":93,"line":94},[91,62961,51272],{"class":101},[91,62963,51276],{"class":51275},[91,62965,51279],{"class":1941},[91,62967,51282],{"class":101},[91,62969,62970,62972,62974,62976,62978,62980],{"class":93,"line":11},[91,62971,1012],{"class":101},[91,62973,50610],{"class":51275},[91,62975,51291],{"class":1941},[91,62977,147],{"class":101},[91,62979,51296],{"class":206},[91,62981,51282],{"class":101},[91,62983,62984],{"class":93,"line":1157},[91,62985,2378],{"emptyLinePlaceholder":17},[91,62987,62988,62990,62992],{"class":93,"line":1172},[91,62989,1012],{"class":101},[91,62991,51309],{"class":51275},[91,62993,51282],{"class":101},[91,62995,62996,62998,63000,63002,63004,63006],{"class":93,"line":1178},[91,62997,52119],{"class":101},[91,62999,51319],{"class":51275},[91,63001,51322],{"class":1941},[91,63003,147],{"class":101},[91,63005,51327],{"class":206},[91,63007,51282],{"class":101},[91,63009,63010,63012,63014,63016,63018,63020,63022,63024,63026],{"class":93,"line":1192},[91,63011,52119],{"class":101},[91,63013,51319],{"class":51275},[91,63015,14899],{"class":1941},[91,63017,147],{"class":101},[91,63019,51366],{"class":206},[91,63021,51346],{"class":1941},[91,63023,147],{"class":101},[91,63025,51373],{"class":206},[91,63027,51282],{"class":101},[91,63029,63030,63032,63034,63036,63038],{"class":93,"line":1198},[91,63031,52119],{"class":101},[91,63033,51382],{"class":51275},[91,63035,51385],{"class":101},[91,63037,51382],{"class":51275},[91,63039,51282],{"class":101},[91,63041,63042,63044,63046],{"class":93,"line":1289},[91,63043,51760],{"class":101},[91,63045,51309],{"class":51275},[91,63047,51282],{"class":101},[91,63049,63050],{"class":93,"line":1295},[91,63051,2378],{"emptyLinePlaceholder":17},[91,63053,63054,63056,63058],{"class":93,"line":1307},[91,63055,1012],{"class":101},[91,63057,51775],{"class":51275},[91,63059,51282],{"class":101},[91,63061,63062,63064,63066,63068,63070,63072],{"class":93,"line":1590},[91,63063,52119],{"class":101},[91,63065,53796],{"class":51275},[91,63067,53799],{"class":1941},[91,63069,147],{"class":101},[91,63071,62674],{"class":206},[91,63073,51282],{"class":101},[91,63075,63076,63078,63080],{"class":93,"line":1595},[91,63077,52119],{"class":101},[91,63079,51788],{"class":51275},[91,63081,51282],{"class":101},[91,63083,63084,63086,63088,63090,63092,63094,63096,63098],{"class":93,"line":1601},[91,63085,11200],{"class":97},[91,63087,60580],{"class":150},[91,63089,13543],{"class":97},[91,63091,54371],{"class":101},[91,63093,54374],{"class":1941},[91,63095,102],{"class":101},[91,63097,62857],{"class":206},[91,63099,108],{"class":101},[91,63101,63102,63105,63107,63109,63112,63114,63116],{"class":93,"line":1606},[91,63103,63104],{"class":101},"    input.",[91,63106,57788],{"class":1941},[91,63108,102],{"class":101},[91,63110,63111],{"class":206},"'change'",[91,63113,12414],{"class":101},[91,63115,54424],{"class":97},[91,63117,54427],{"class":101},[91,63119,63120,63122,63124,63126,63128],{"class":93,"line":1620},[91,63121,58219],{"class":101},[91,63123,58222],{"class":1941},[91,63125,102],{"class":101},[91,63127,695],{"class":150},[91,63129,108],{"class":101},[91,63131,63132],{"class":93,"line":1625},[91,63133,33436],{"class":101},[91,63135,63136,63138,63140],{"class":93,"line":1631},[91,63137,52392],{"class":101},[91,63139,51788],{"class":51275},[91,63141,51282],{"class":101},[91,63143,63144,63146,63148],{"class":93,"line":1652},[91,63145,51760],{"class":101},[91,63147,51775],{"class":51275},[91,63149,51282],{"class":101},[91,63151,63152],{"class":93,"line":1657},[91,63153,2378],{"emptyLinePlaceholder":17},[91,63155,63156,63158,63160],{"class":93,"line":1671},[91,63157,51760],{"class":101},[91,63159,50610],{"class":51275},[91,63161,51282],{"class":101},[38,63163,63164],{},"总结：内容发生改变才回去触发",[63,63166,63168],{"id":63167},"_326-事件对象","3.2.6 事件对象",[21977,63170,63172],{"id":63171},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[38,63174,63175],{},[1440,63176],{"alt":10,"src":63177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[38,63179,63180],{},[1440,63181],{"alt":10,"src":63182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[38,63184,63185],{},"点击一次，就输出了事件对象，它是个对象",[38,63187,63188],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[38,63190,63191],{},[1440,63192],{"alt":10,"src":63193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21977,63195,63197],{"id":63196},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[38,63199,63200],{},[1440,63201],{"alt":10,"src":63202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[38,63204,63205],{},"实现按特殊字符才是实现打印输出效果：",[83,63207,63209],{"className":53042,"code":63208,"language":53044,"meta":10,"style":10},"\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",[88,63210,63211,63219,63224,63238,63246,63251,63256,63261,63266,63271,63276,63281,63286,63291,63295,63299,63307],{"__ignoreMap":10},[91,63212,63213,63215,63217],{"class":93,"line":94},[91,63214,1012],{"class":101},[91,63216,51775],{"class":51275},[91,63218,51282],{"class":101},[91,63220,63221],{"class":93,"line":11},[91,63222,63223],{"class":160},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[91,63225,63226,63228,63230,63232,63234,63236],{"class":93,"line":1157},[91,63227,52119],{"class":101},[91,63229,53796],{"class":51275},[91,63231,53799],{"class":1941},[91,63233,147],{"class":101},[91,63235,62674],{"class":206},[91,63237,51282],{"class":101},[91,63239,63240,63242,63244],{"class":93,"line":1172},[91,63241,52119],{"class":101},[91,63243,51788],{"class":51275},[91,63245,51282],{"class":101},[91,63247,63248],{"class":93,"line":1178},[91,63249,63250],{"class":101},"    \u002F\u002F const btn = document.querySelector('button')\n",[91,63252,63253],{"class":93,"line":1192},[91,63254,63255],{"class":101},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[91,63257,63258],{"class":93,"line":1198},[91,63259,63260],{"class":101},"    \u002F\u002F   console.log(e);\n",[91,63262,63263],{"class":93,"line":1289},[91,63264,63265],{"class":101},"    \u002F\u002F })\n",[91,63267,63268],{"class":93,"line":1295},[91,63269,63270],{"class":101},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[91,63272,63273],{"class":93,"line":1307},[91,63274,63275],{"class":101},"    const input = document.querySelector('input')\n",[91,63277,63278],{"class":93,"line":1590},[91,63279,63280],{"class":101},"    input.addEventListener('keyup', function (e) {\n",[91,63282,63283],{"class":93,"line":1595},[91,63284,63285],{"class":101},"      if (e.key === 'Enter') {\n",[91,63287,63288],{"class":93,"line":1601},[91,63289,63290],{"class":101},"        console.log('我按下了回车键')\n",[91,63292,63293],{"class":93,"line":1606},[91,63294,52373],{"class":101},[91,63296,63297],{"class":93,"line":1620},[91,63298,33436],{"class":101},[91,63300,63301,63303,63305],{"class":93,"line":1625},[91,63302,52392],{"class":101},[91,63304,51788],{"class":51275},[91,63306,51282],{"class":101},[91,63308,63309,63311,63313],{"class":93,"line":1631},[91,63310,51760],{"class":101},[91,63312,51775],{"class":51275},[91,63314,51282],{"class":101},[21977,63316,63318],{"id":63317},"_3263-trim方法","3.2.6.3 trim方法",[38,63320,63321],{},[1440,63322],{"alt":10,"src":63323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[38,63325,63326],{},[1440,63327],{"alt":10,"src":63328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[38,63330,63331],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[38,63333,63334],{},"str.trim()",[63,63336,63338],{"id":63337},"_327-环境对象","3.2.7 环境对象",[38,63340,63341],{},[1440,63342],{"alt":10,"src":63343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[38,63345,63346],{},[1440,63347],{"alt":10,"src":63348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[38,63350,63351],{},[1440,63352],{"alt":10,"src":63353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[38,63355,63356],{},"实际函数调用是window.fn()",[38,63358,63359],{},"普通函数里面this指向的是window",[1109,63361,63362,63365,63368],{},[49,63363,63364],{},"在普通函数下，this指向的是window",[49,63366,63367],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[49,63369,63370],{},"箭头函数没有this",[38,63372,63373],{},"粗略记法就是：谁调用，this就指向谁",[38,63375,63376],{},[1440,63377],{"alt":10,"src":63378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[38,63380,63381],{},[1440,63382],{"alt":10,"src":63383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[38,63385,63386],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[38,63388,63389],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[83,63391,63393],{"className":53042,"code":63392,"language":53044,"meta":10,"style":10},"\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",[88,63394,63395,63403,63415,63423,63428,63433,63438,63443,63447,63455],{"__ignoreMap":10},[91,63396,63397,63399,63401],{"class":93,"line":94},[91,63398,1012],{"class":101},[91,63400,51775],{"class":51275},[91,63402,51282],{"class":101},[91,63404,63405,63407,63409,63411,63413],{"class":93,"line":11},[91,63406,52119],{"class":101},[91,63408,53862],{"class":51275},[91,63410,53868],{"class":101},[91,63412,53862],{"class":51275},[91,63414,51282],{"class":101},[91,63416,63417,63419,63421],{"class":93,"line":1157},[91,63418,52119],{"class":101},[91,63420,51788],{"class":51275},[91,63422,51282],{"class":101},[91,63424,63425],{"class":93,"line":1172},[91,63426,63427],{"class":101},"    const button = document.querySelector('button')\n",[91,63429,63430],{"class":93,"line":1178},[91,63431,63432],{"class":101},"    button.addEventListener('click', function () {\n",[91,63434,63435],{"class":93,"line":1192},[91,63436,63437],{"class":101},"      \u002F\u002F console.log(this);\n",[91,63439,63440],{"class":93,"line":1198},[91,63441,63442],{"class":101},"      this.style.color = 'pink'\n",[91,63444,63445],{"class":93,"line":1289},[91,63446,33436],{"class":101},[91,63448,63449,63451,63453],{"class":93,"line":1295},[91,63450,52392],{"class":101},[91,63452,51788],{"class":51275},[91,63454,51282],{"class":101},[91,63456,63457,63459,63461],{"class":93,"line":1307},[91,63458,51760],{"class":101},[91,63460,51775],{"class":51275},[91,63462,51282],{"class":101},[63,63464,63466],{"id":63465},"_328-回调函数","3.2.8 回调函数",[38,63468,63469],{},[1440,63470],{"alt":10,"src":63471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[38,63473,63474],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[38,63476,11311],{},[1109,63478,63479,63482,63485],{},[49,63480,63481],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[49,63483,63484],{},"回调函数本质还是函数，只不过把它当成参数使用",[49,63486,63487],{},"使用匿名函数做为回调函数比较常见",[63,63489,63491],{"id":63490},"_329-tab栏切换","3.2.9 tab栏切换",[38,63493,63494],{},[1440,63495],{"alt":10,"src":63496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[83,63498,63500],{"className":50608,"code":63499,"language":50610,"meta":10,"style":10},"\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",[88,63501,63502,63512,63526,63530,63538,63552,63572,63592,63605,63613,63619,63629,63639,63643,63647,63654,63667,63680,63692,63708,63712,63716,63723,63735,63747,63759,63769,63779,63783,63787,63796,63808,63819,63831,63835,63839,63847,63857,63867,63877,63881,63885,63895,63909,63921,63925,63929,63941,63952,63969,63979,63983,63987,64002,64013,64023,64027,64031,64038,64053,64057,64061,64069,64079,64083,64087,64096,64106,64110,64118,64126,64130,64138,64153,64168,64181,64189,64223,64250,64277,64304,64331,64339,64347,64362,64399,64434,64469,64504,64539,64547,64555,64563,64568,64573,64593,64598,64627,64632,64637,64655,64660,64665,64670,64692,64697,64713,64717,64722,64727,64748,64753,64782,64786,64791,64795,64803,64811,64815],{"__ignoreMap":10},[91,63503,63504,63506,63508,63510],{"class":93,"line":94},[91,63505,51272],{"class":101},[91,63507,51276],{"class":51275},[91,63509,51279],{"class":1941},[91,63511,51282],{"class":101},[91,63513,63514,63516,63518,63520,63522,63524],{"class":93,"line":11},[91,63515,1012],{"class":101},[91,63517,50610],{"class":51275},[91,63519,51291],{"class":1941},[91,63521,147],{"class":101},[91,63523,51296],{"class":206},[91,63525,51282],{"class":101},[91,63527,63528],{"class":93,"line":1157},[91,63529,2378],{"emptyLinePlaceholder":17},[91,63531,63532,63534,63536],{"class":93,"line":1172},[91,63533,1012],{"class":101},[91,63535,51309],{"class":51275},[91,63537,51282],{"class":101},[91,63539,63540,63542,63544,63546,63548,63550],{"class":93,"line":1178},[91,63541,52119],{"class":101},[91,63543,51319],{"class":51275},[91,63545,51322],{"class":1941},[91,63547,147],{"class":101},[91,63549,51327],{"class":206},[91,63551,59102],{"class":101},[91,63553,63554,63556,63558,63560,63562,63564,63566,63568,63570],{"class":93,"line":1192},[91,63555,52119],{"class":101},[91,63557,51319],{"class":51275},[91,63559,51338],{"class":1941},[91,63561,147],{"class":101},[91,63563,51343],{"class":206},[91,63565,51346],{"class":1941},[91,63567,147],{"class":101},[91,63569,51351],{"class":206},[91,63571,59102],{"class":101},[91,63573,63574,63576,63578,63580,63582,63584,63586,63588,63590],{"class":93,"line":1198},[91,63575,52119],{"class":101},[91,63577,51319],{"class":51275},[91,63579,14899],{"class":1941},[91,63581,147],{"class":101},[91,63583,51366],{"class":206},[91,63585,51346],{"class":1941},[91,63587,147],{"class":101},[91,63589,51373],{"class":206},[91,63591,59102],{"class":101},[91,63593,63594,63596,63598,63601,63603],{"class":93,"line":1289},[91,63595,52119],{"class":101},[91,63597,51382],{"class":51275},[91,63599,63600],{"class":101},">tab栏切换\u003C\u002F",[91,63602,51382],{"class":51275},[91,63604,51282],{"class":101},[91,63606,63607,63609,63611],{"class":93,"line":1295},[91,63608,52119],{"class":101},[91,63610,5105],{"class":51275},[91,63612,51282],{"class":101},[91,63614,63615,63617],{"class":93,"line":1307},[91,63616,6382],{"class":51275},[91,63618,15551],{"class":101},[91,63620,63621,63623,63625,63627],{"class":93,"line":1590},[91,63622,54681],{"class":150},[91,63624,51412],{"class":101},[91,63626,293],{"class":150},[91,63628,1268],{"class":101},[91,63630,63631,63633,63635,63637],{"class":93,"line":1595},[91,63632,54670],{"class":150},[91,63634,51412],{"class":101},[91,63636,293],{"class":150},[91,63638,1268],{"class":101},[91,63640,63641],{"class":93,"line":1601},[91,63642,2165],{"class":101},[91,63644,63645],{"class":93,"line":1606},[91,63646,2378],{"emptyLinePlaceholder":17},[91,63648,63649,63652],{"class":93,"line":1620},[91,63650,63651],{"class":1941},"    .tab",[91,63653,15551],{"class":101},[91,63655,63656,63658,63660,63663,63665],{"class":93,"line":1625},[91,63657,54746],{"class":150},[91,63659,51412],{"class":101},[91,63661,63662],{"class":150},"590",[91,63664,51467],{"class":97},[91,63666,1268],{"class":101},[91,63668,63669,63671,63673,63676,63678],{"class":93,"line":1631},[91,63670,54760],{"class":150},[91,63672,51412],{"class":101},[91,63674,63675],{"class":150},"340",[91,63677,51467],{"class":97},[91,63679,1268],{"class":101},[91,63681,63682,63684,63686,63688,63690],{"class":93,"line":1652},[91,63683,54681],{"class":150},[91,63685,51412],{"class":101},[91,63687,802],{"class":150},[91,63689,51467],{"class":97},[91,63691,1268],{"class":101},[91,63693,63694,63696,63698,63700,63702,63704,63706],{"class":93,"line":1657},[91,63695,61952],{"class":150},[91,63697,51412],{"class":101},[91,63699,319],{"class":150},[91,63701,51467],{"class":97},[91,63703,51496],{"class":150},[91,63705,62219],{"class":150},[91,63707,1268],{"class":101},[91,63709,63710],{"class":93,"line":1671},[91,63711,2165],{"class":101},[91,63713,63714],{"class":93,"line":1676},[91,63715,2378],{"emptyLinePlaceholder":17},[91,63717,63718,63721],{"class":93,"line":1705},[91,63719,63720],{"class":1941},"    .tab-nav",[91,63722,15551],{"class":101},[91,63724,63725,63727,63729,63731,63733],{"class":93,"line":1710},[91,63726,54746],{"class":150},[91,63728,51412],{"class":101},[91,63730,413],{"class":150},[91,63732,430],{"class":97},[91,63734,1268],{"class":101},[91,63736,63737,63739,63741,63743,63745],{"class":93,"line":1727},[91,63738,54760],{"class":150},[91,63740,51412],{"class":101},[91,63742,1009],{"class":150},[91,63744,51467],{"class":97},[91,63746,1268],{"class":101},[91,63748,63749,63751,63753,63755,63757],{"class":93,"line":1732},[91,63750,57334],{"class":150},[91,63752,51412],{"class":101},[91,63754,1009],{"class":150},[91,63756,51467],{"class":97},[91,63758,1268],{"class":101},[91,63760,63761,63763,63765,63767],{"class":93,"line":1737},[91,63762,54984],{"class":150},[91,63764,51412],{"class":101},[91,63766,51452],{"class":150},[91,63768,1268],{"class":101},[91,63770,63771,63773,63775,63777],{"class":93,"line":1742},[91,63772,54995],{"class":150},[91,63774,51412],{"class":101},[91,63776,51643],{"class":150},[91,63778,1268],{"class":101},[91,63780,63781],{"class":93,"line":1756},[91,63782,2165],{"class":101},[91,63784,63785],{"class":93,"line":1761},[91,63786,2378],{"emptyLinePlaceholder":17},[91,63788,63789,63791,63794],{"class":93,"line":2555},[91,63790,63720],{"class":1941},[91,63792,63793],{"class":51275}," h3",[91,63795,15551],{"class":101},[91,63797,63798,63800,63802,63804,63806],{"class":93,"line":2569},[91,63799,54897],{"class":150},[91,63801,51412],{"class":101},[91,63803,902],{"class":150},[91,63805,51467],{"class":97},[91,63807,1268],{"class":101},[91,63809,63810,63812,63814,63817],{"class":93,"line":2577},[91,63811,62309],{"class":150},[91,63813,51412],{"class":101},[91,63815,63816],{"class":150},"normal",[91,63818,1268],{"class":101},[91,63820,63821,63823,63825,63827,63829],{"class":93,"line":2582},[91,63822,61975],{"class":150},[91,63824,51412],{"class":101},[91,63826,802],{"class":150},[91,63828,51467],{"class":97},[91,63830,1268],{"class":101},[91,63832,63833],{"class":93,"line":2588},[91,63834,2165],{"class":101},[91,63836,63837],{"class":93,"line":2594},[91,63838,2378],{"emptyLinePlaceholder":17},[91,63840,63841,63843,63845],{"class":93,"line":2599},[91,63842,63720],{"class":1941},[91,63844,61267],{"class":51275},[91,63846,15551],{"class":101},[91,63848,63849,63851,63853,63855],{"class":93,"line":7927},[91,63850,54707],{"class":150},[91,63852,51412],{"class":101},[91,63854,54712],{"class":150},[91,63856,1268],{"class":101},[91,63858,63859,63861,63863,63865],{"class":93,"line":7951},[91,63860,54984],{"class":150},[91,63862,51412],{"class":101},[91,63864,51452],{"class":150},[91,63866,1268],{"class":101},[91,63868,63869,63871,63873,63875],{"class":93,"line":7956},[91,63870,54995],{"class":150},[91,63872,51412],{"class":101},[91,63874,51555],{"class":150},[91,63876,1268],{"class":101},[91,63878,63879],{"class":93,"line":7962},[91,63880,2165],{"class":101},[91,63882,63883],{"class":93,"line":7989},[91,63884,2378],{"emptyLinePlaceholder":17},[91,63886,63887,63889,63891,63893],{"class":93,"line":7994},[91,63888,63720],{"class":1941},[91,63890,61267],{"class":51275},[91,63892,55050],{"class":51275},[91,63894,15551],{"class":101},[91,63896,63897,63899,63901,63903,63905,63907],{"class":93,"line":8000},[91,63898,54681],{"class":150},[91,63900,51412],{"class":101},[91,63902,293],{"class":150},[91,63904,8929],{"class":150},[91,63906,51467],{"class":97},[91,63908,1268],{"class":101},[91,63910,63911,63913,63915,63917,63919],{"class":93,"line":8012},[91,63912,54897],{"class":150},[91,63914,51412],{"class":101},[91,63916,651],{"class":150},[91,63918,51467],{"class":97},[91,63920,1268],{"class":101},[91,63922,63923],{"class":93,"line":8024},[91,63924,2165],{"class":101},[91,63926,63927],{"class":93,"line":8036},[91,63928,2378],{"emptyLinePlaceholder":17},[91,63930,63931,63933,63935,63937,63939],{"class":93,"line":9695},[91,63932,63720],{"class":1941},[91,63934,61267],{"class":51275},[91,63936,55050],{"class":51275},[91,63938,1376],{"class":51275},[91,63940,15551],{"class":101},[91,63942,63943,63946,63948,63950],{"class":93,"line":9720},[91,63944,63945],{"class":150},"      text-decoration",[91,63947,51412],{"class":101},[91,63949,54712],{"class":150},[91,63951,1268],{"class":101},[91,63953,63954,63956,63958,63960,63962,63964,63967],{"class":93,"line":9743},[91,63955,62207],{"class":150},[91,63957,51412],{"class":101},[91,63959,179],{"class":150},[91,63961,51467],{"class":97},[91,63963,51496],{"class":150},[91,63965,63966],{"class":150}," transparent",[91,63968,1268],{"class":101},[91,63970,63971,63973,63975,63977],{"class":93,"line":9767},[91,63972,57391],{"class":150},[91,63974,51412],{"class":101},[91,63976,62344],{"class":150},[91,63978,1268],{"class":101},[91,63980,63981],{"class":93,"line":9772},[91,63982,2165],{"class":101},[91,63984,63985],{"class":93,"line":9777},[91,63986,2378],{"emptyLinePlaceholder":17},[91,63988,63989,63991,63993,63995,63997,64000],{"class":93,"line":9782},[91,63990,63720],{"class":1941},[91,63992,61267],{"class":51275},[91,63994,55050],{"class":51275},[91,63996,1376],{"class":51275},[91,63998,63999],{"class":1941},".active",[91,64001,15551],{"class":101},[91,64003,64004,64006,64008,64011],{"class":93,"line":9791},[91,64005,61766],{"class":150},[91,64007,51412],{"class":101},[91,64009,64010],{"class":150},"#e1251b",[91,64012,1268],{"class":101},[91,64014,64015,64017,64019,64021],{"class":93,"line":9796},[91,64016,57391],{"class":150},[91,64018,51412],{"class":101},[91,64020,64010],{"class":150},[91,64022,1268],{"class":101},[91,64024,64025],{"class":93,"line":9802},[91,64026,2165],{"class":101},[91,64028,64029],{"class":93,"line":9823},[91,64030,2378],{"emptyLinePlaceholder":17},[91,64032,64033,64036],{"class":93,"line":9829},[91,64034,64035],{"class":1941},"    .tab-content",[91,64037,15551],{"class":101},[91,64039,64040,64042,64044,64046,64049,64051],{"class":93,"line":9843},[91,64041,54670],{"class":150},[91,64043,51412],{"class":101},[91,64045,293],{"class":150},[91,64047,64048],{"class":150}," 16",[91,64050,51467],{"class":97},[91,64052,1268],{"class":101},[91,64054,64055],{"class":93,"line":9849},[91,64056,2165],{"class":101},[91,64058,64059],{"class":93,"line":9876},[91,64060,2378],{"emptyLinePlaceholder":17},[91,64062,64063,64065,64067],{"class":93,"line":9885},[91,64064,64035],{"class":1941},[91,64066,62149],{"class":1941},[91,64068,15551],{"class":101},[91,64070,64071,64073,64075,64077],{"class":93,"line":9891},[91,64072,54984],{"class":150},[91,64074,51412],{"class":101},[91,64076,54712],{"class":150},[91,64078,1268],{"class":101},[91,64080,64081],{"class":93,"line":9899},[91,64082,2165],{"class":101},[91,64084,64085],{"class":93,"line":9904},[91,64086,2378],{"emptyLinePlaceholder":17},[91,64088,64089,64091,64094],{"class":93,"line":16583},[91,64090,64035],{"class":1941},[91,64092,64093],{"class":1941}," .item.active",[91,64095,15551],{"class":101},[91,64097,64098,64100,64102,64104],{"class":93,"line":16589},[91,64099,54984],{"class":150},[91,64101,51412],{"class":101},[91,64103,60844],{"class":150},[91,64105,1268],{"class":101},[91,64107,64108],{"class":93,"line":16612},[91,64109,2165],{"class":101},[91,64111,64112,64114,64116],{"class":93,"line":16618},[91,64113,52392],{"class":101},[91,64115,5105],{"class":51275},[91,64117,51282],{"class":101},[91,64119,64120,64122,64124],{"class":93,"line":16641},[91,64121,51760],{"class":101},[91,64123,51309],{"class":51275},[91,64125,51282],{"class":101},[91,64127,64128],{"class":93,"line":16655},[91,64129,2378],{"emptyLinePlaceholder":17},[91,64131,64132,64134,64136],{"class":93,"line":16675},[91,64133,1012],{"class":101},[91,64135,51775],{"class":51275},[91,64137,51282],{"class":101},[91,64139,64140,64142,64144,64146,64148,64151],{"class":93,"line":16681},[91,64141,52119],{"class":101},[91,64143,51586],{"class":51275},[91,64145,53461],{"class":1941},[91,64147,147],{"class":101},[91,64149,64150],{"class":206},"\"tab\"",[91,64152,51282],{"class":101},[91,64154,64155,64157,64159,64161,64163,64166],{"class":93,"line":16692},[91,64156,51316],{"class":101},[91,64158,51586],{"class":51275},[91,64160,53461],{"class":1941},[91,64162,147],{"class":101},[91,64164,64165],{"class":206},"\"tab-nav\"",[91,64167,51282],{"class":101},[91,64169,64170,64172,64174,64177,64179],{"class":93,"line":16715},[91,64171,55209],{"class":101},[91,64173,63],{"class":51275},[91,64175,64176],{"class":101},">每日特价\u003C\u002F",[91,64178,63],{"class":51275},[91,64180,51282],{"class":101},[91,64182,64183,64185,64187],{"class":93,"line":16737},[91,64184,55209],{"class":101},[91,64186,1109],{"class":51275},[91,64188,51282],{"class":101},[91,64190,64191,64193,64195,64197,64199,64201,64203,64205,64207,64209,64212,64215,64217,64219,64221],{"class":93,"line":16742},[91,64192,55277],{"class":101},[91,64194,49],{"class":51275},[91,64196,61027],{"class":101},[91,64198,340],{"class":51275},[91,64200,53461],{"class":1941},[91,64202,147],{"class":101},[91,64204,59681],{"class":206},[91,64206,61032],{"class":1941},[91,64208,147],{"class":101},[91,64210,64211],{"class":206},"\"javascript:;\"",[91,64213,64214],{"class":101},">精选\u003C\u002F",[91,64216,340],{"class":51275},[91,64218,55289],{"class":101},[91,64220,49],{"class":51275},[91,64222,51282],{"class":101},[91,64224,64225,64227,64229,64231,64233,64235,64237,64239,64242,64244,64246,64248],{"class":93,"line":16748},[91,64226,55277],{"class":101},[91,64228,49],{"class":51275},[91,64230,61027],{"class":101},[91,64232,340],{"class":51275},[91,64234,61032],{"class":1941},[91,64236,147],{"class":101},[91,64238,64211],{"class":206},[91,64240,64241],{"class":101},">美食\u003C\u002F",[91,64243,340],{"class":51275},[91,64245,55289],{"class":101},[91,64247,49],{"class":51275},[91,64249,51282],{"class":101},[91,64251,64252,64254,64256,64258,64260,64262,64264,64266,64269,64271,64273,64275],{"class":93,"line":16762},[91,64253,55277],{"class":101},[91,64255,49],{"class":51275},[91,64257,61027],{"class":101},[91,64259,340],{"class":51275},[91,64261,61032],{"class":1941},[91,64263,147],{"class":101},[91,64265,64211],{"class":206},[91,64267,64268],{"class":101},">百货\u003C\u002F",[91,64270,340],{"class":51275},[91,64272,55289],{"class":101},[91,64274,49],{"class":51275},[91,64276,51282],{"class":101},[91,64278,64279,64281,64283,64285,64287,64289,64291,64293,64296,64298,64300,64302],{"class":93,"line":16775},[91,64280,55277],{"class":101},[91,64282,49],{"class":51275},[91,64284,61027],{"class":101},[91,64286,340],{"class":51275},[91,64288,61032],{"class":1941},[91,64290,147],{"class":101},[91,64292,64211],{"class":206},[91,64294,64295],{"class":101},">个护\u003C\u002F",[91,64297,340],{"class":51275},[91,64299,55289],{"class":101},[91,64301,49],{"class":51275},[91,64303,51282],{"class":101},[91,64305,64306,64308,64310,64312,64314,64316,64318,64320,64323,64325,64327,64329],{"class":93,"line":16780},[91,64307,55277],{"class":101},[91,64309,49],{"class":51275},[91,64311,61027],{"class":101},[91,64313,340],{"class":51275},[91,64315,61032],{"class":1941},[91,64317,147],{"class":101},[91,64319,64211],{"class":206},[91,64321,64322],{"class":101},">预告\u003C\u002F",[91,64324,340],{"class":51275},[91,64326,55289],{"class":101},[91,64328,49],{"class":51275},[91,64330,51282],{"class":101},[91,64332,64333,64335,64337],{"class":93,"line":16794},[91,64334,55382],{"class":101},[91,64336,1109],{"class":51275},[91,64338,51282],{"class":101},[91,64340,64341,64343,64345],{"class":93,"line":16799},[91,64342,51751],{"class":101},[91,64344,51586],{"class":51275},[91,64346,51282],{"class":101},[91,64348,64349,64351,64353,64355,64357,64360],{"class":93,"line":16805},[91,64350,51316],{"class":101},[91,64352,51586],{"class":51275},[91,64354,53461],{"class":1941},[91,64356,147],{"class":101},[91,64358,64359],{"class":206},"\"tab-content\"",[91,64361,51282],{"class":101},[91,64363,64364,64366,64368,64370,64372,64375,64377,64379,64381,64383,64386,64388,64390,64392,64395,64397],{"class":93,"line":16810},[91,64365,55209],{"class":101},[91,64367,51586],{"class":51275},[91,64369,53461],{"class":1941},[91,64371,147],{"class":101},[91,64373,64374],{"class":206},"\"item active\"",[91,64376,61027],{"class":101},[91,64378,1440],{"class":51275},[91,64380,55214],{"class":1941},[91,64382,147],{"class":101},[91,64384,64385],{"class":206},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[91,64387,55222],{"class":1941},[91,64389,147],{"class":101},[91,64391,7631],{"class":206},[91,64393,64394],{"class":101}," \u002F>\u003C\u002F",[91,64396,51586],{"class":51275},[91,64398,51282],{"class":101},[91,64400,64401,64403,64405,64407,64409,64411,64413,64415,64417,64419,64422,64424,64426,64428,64430,64432],{"class":93,"line":16824},[91,64402,55209],{"class":101},[91,64404,51586],{"class":51275},[91,64406,53461],{"class":1941},[91,64408,147],{"class":101},[91,64410,62598],{"class":206},[91,64412,61027],{"class":101},[91,64414,1440],{"class":51275},[91,64416,55214],{"class":1941},[91,64418,147],{"class":101},[91,64420,64421],{"class":206},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[91,64423,55222],{"class":1941},[91,64425,147],{"class":101},[91,64427,7631],{"class":206},[91,64429,64394],{"class":101},[91,64431,51586],{"class":51275},[91,64433,51282],{"class":101},[91,64435,64436,64438,64440,64442,64444,64446,64448,64450,64452,64454,64457,64459,64461,64463,64465,64467],{"class":93,"line":16829},[91,64437,55209],{"class":101},[91,64439,51586],{"class":51275},[91,64441,53461],{"class":1941},[91,64443,147],{"class":101},[91,64445,62598],{"class":206},[91,64447,61027],{"class":101},[91,64449,1440],{"class":51275},[91,64451,55214],{"class":1941},[91,64453,147],{"class":101},[91,64455,64456],{"class":206},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[91,64458,55222],{"class":1941},[91,64460,147],{"class":101},[91,64462,7631],{"class":206},[91,64464,64394],{"class":101},[91,64466,51586],{"class":51275},[91,64468,51282],{"class":101},[91,64470,64471,64473,64475,64477,64479,64481,64483,64485,64487,64489,64492,64494,64496,64498,64500,64502],{"class":93,"line":16834},[91,64472,55209],{"class":101},[91,64474,51586],{"class":51275},[91,64476,53461],{"class":1941},[91,64478,147],{"class":101},[91,64480,62598],{"class":206},[91,64482,61027],{"class":101},[91,64484,1440],{"class":51275},[91,64486,55214],{"class":1941},[91,64488,147],{"class":101},[91,64490,64491],{"class":206},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[91,64493,55222],{"class":1941},[91,64495,147],{"class":101},[91,64497,7631],{"class":206},[91,64499,64394],{"class":101},[91,64501,51586],{"class":51275},[91,64503,51282],{"class":101},[91,64505,64506,64508,64510,64512,64514,64516,64518,64520,64522,64524,64527,64529,64531,64533,64535,64537],{"class":93,"line":16848},[91,64507,55209],{"class":101},[91,64509,51586],{"class":51275},[91,64511,53461],{"class":1941},[91,64513,147],{"class":101},[91,64515,62598],{"class":206},[91,64517,61027],{"class":101},[91,64519,1440],{"class":51275},[91,64521,55214],{"class":1941},[91,64523,147],{"class":101},[91,64525,64526],{"class":206},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[91,64528,55222],{"class":1941},[91,64530,147],{"class":101},[91,64532,7631],{"class":206},[91,64534,64394],{"class":101},[91,64536,51586],{"class":51275},[91,64538,51282],{"class":101},[91,64540,64541,64543,64545],{"class":93,"line":16860},[91,64542,51751],{"class":101},[91,64544,51586],{"class":51275},[91,64546,51282],{"class":101},[91,64548,64549,64551,64553],{"class":93,"line":16865},[91,64550,52392],{"class":101},[91,64552,51586],{"class":51275},[91,64554,51282],{"class":101},[91,64556,64557,64559,64561],{"class":93,"line":16878},[91,64558,52119],{"class":101},[91,64560,51788],{"class":51275},[91,64562,51282],{"class":101},[91,64564,64565],{"class":93,"line":16883},[91,64566,64567],{"class":160},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[91,64569,64570],{"class":93,"line":16888},[91,64571,64572],{"class":160},"    \u002F\u002F 1.1 获取 a 元素 \n",[91,64574,64575,64577,64580,64582,64584,64586,64588,64591],{"class":93,"line":16893},[91,64576,11200],{"class":97},[91,64578,64579],{"class":150}," as",[91,64581,13543],{"class":97},[91,64583,54371],{"class":101},[91,64585,55656],{"class":1941},[91,64587,102],{"class":101},[91,64589,64590],{"class":206},"'.tab-nav a'",[91,64592,108],{"class":101},[91,64594,64595],{"class":93,"line":16906},[91,64596,64597],{"class":160},"    \u002F\u002F console.log(as) \n",[91,64599,64600,64602,64604,64606,64608,64610,64612,64614,64616,64619,64621,64623,64625],{"class":93,"line":16911},[91,64601,3179],{"class":97},[91,64603,1636],{"class":101},[91,64605,51822],{"class":97},[91,64607,9417],{"class":101},[91,64609,147],{"class":97},[91,64611,4071],{"class":150},[91,64613,9424],{"class":101},[91,64615,1012],{"class":97},[91,64617,64618],{"class":101}," as.",[91,64620,51943],{"class":150},[91,64622,3192],{"class":101},[91,64624,2270],{"class":97},[91,64626,12421],{"class":101},[91,64628,64629],{"class":93,"line":32608},[91,64630,64631],{"class":160},"      \u002F\u002F console.log(as[i])\n",[91,64633,64634],{"class":93,"line":32614},[91,64635,64636],{"class":160},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[91,64638,64639,64642,64644,64646,64649,64651,64653],{"class":93,"line":32620},[91,64640,64641],{"class":101},"      as[i].",[91,64643,57788],{"class":1941},[91,64645,102],{"class":101},[91,64647,64648],{"class":206},"'mouseenter'",[91,64650,12414],{"class":101},[91,64652,54424],{"class":97},[91,64654,54427],{"class":101},[91,64656,64657],{"class":93,"line":32626},[91,64658,64659],{"class":160},"        \u002F\u002F console.log('鼠标经过')\n",[91,64661,64662],{"class":93,"line":32632},[91,64663,64664],{"class":160},"        \u002F\u002F 排他思想  \n",[91,64666,64667],{"class":93,"line":32643},[91,64668,64669],{"class":160},"        \u002F\u002F 干掉别人 移除类active\n",[91,64671,64672,64674,64676,64678,64681,64683,64685,64687,64690],{"class":93,"line":32649},[91,64673,51900],{"class":101},[91,64675,54374],{"class":1941},[91,64677,102],{"class":101},[91,64679,64680],{"class":206},"'.tab-nav .active'",[91,64682,56978],{"class":101},[91,64684,56981],{"class":1941},[91,64686,102],{"class":101},[91,64688,64689],{"class":206},"'active'",[91,64691,108],{"class":101},[91,64693,64694],{"class":93,"line":32669},[91,64695,64696],{"class":160},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[91,64698,64699,64702,64705,64707,64709,64711],{"class":93,"line":32675},[91,64700,64701],{"class":150},"        this",[91,64703,64704],{"class":101},".classList.",[91,64706,5313],{"class":1941},[91,64708,102],{"class":101},[91,64710,64689],{"class":206},[91,64712,108],{"class":101},[91,64714,64715],{"class":93,"line":32686},[91,64716,2378],{"emptyLinePlaceholder":17},[91,64718,64719],{"class":93,"line":32692},[91,64720,64721],{"class":160},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[91,64723,64724],{"class":93,"line":32698},[91,64725,64726],{"class":160},"        \u002F\u002F 干掉别人\n",[91,64728,64729,64731,64733,64735,64738,64740,64742,64744,64746],{"class":93,"line":32704},[91,64730,51900],{"class":101},[91,64732,54374],{"class":1941},[91,64734,102],{"class":101},[91,64736,64737],{"class":206},"'.tab-content .active'",[91,64739,56978],{"class":101},[91,64741,56981],{"class":1941},[91,64743,102],{"class":101},[91,64745,64689],{"class":206},[91,64747,108],{"class":101},[91,64749,64750],{"class":93,"line":32710},[91,64751,64752],{"class":160},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[91,64754,64755,64757,64759,64761,64764,64766,64768,64770,64772,64774,64776,64778,64780],{"class":93,"line":32716},[91,64756,51900],{"class":101},[91,64758,54374],{"class":1941},[91,64760,102],{"class":101},[91,64762,64763],{"class":206},"`.tab-content .item:nth-child(${",[91,64765,543],{"class":101},[91,64767,45541],{"class":97},[91,64769,25093],{"class":150},[91,64771,57007],{"class":206},[91,64773,56978],{"class":101},[91,64775,5313],{"class":1941},[91,64777,102],{"class":101},[91,64779,64689],{"class":206},[91,64781,108],{"class":101},[91,64783,64784],{"class":93,"line":32722},[91,64785,2378],{"emptyLinePlaceholder":17},[91,64787,64788],{"class":93,"line":32728},[91,64789,64790],{"class":101},"      })\n",[91,64792,64793],{"class":93,"line":32748},[91,64794,2165],{"class":101},[91,64796,64797,64799,64801],{"class":93,"line":32754},[91,64798,52392],{"class":101},[91,64800,51788],{"class":51275},[91,64802,51282],{"class":101},[91,64804,64805,64807,64809],{"class":93,"line":32770},[91,64806,51760],{"class":101},[91,64808,51775],{"class":51275},[91,64810,51282],{"class":101},[91,64812,64813],{"class":93,"line":32776},[91,64814,2378],{"emptyLinePlaceholder":17},[91,64816,64817,64819,64821],{"class":93,"line":32790},[91,64818,51760],{"class":101},[91,64820,50610],{"class":51275},[91,64822,51282],{"class":101},[38,64824,64825],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[38,64827,64828],{},"在监听事件中，this指向的就是他的调用者",[38,64830,64831],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[38,64833,53695],{},[38,64835,64836],{},"(function () {",[38,64838,64839],{},"const list = document.querySelector('.xtx-elevator-list')",[38,64841,64842],{},"list.addEventListener('click', function (e) {",[38,64844,64845],{},"if (e.target.tagName === 'A') {",[38,64847,64848],{},"\u002F\u002F 排他思想",[38,64850,64851],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[38,64853,64854],{},"const old = document.querySelector('.xtx-elevator-list .active')",[38,64856,64857],{},"\u002F\u002F console.log(old);",[38,64859,64860],{},"\u002F\u002F 判断",[38,64862,64863],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[38,64865,64866],{},"if (old) old.classList.remove('active')",[38,64868,64869],{},"e.target.classList.add('active')",[38,64871,1048],{},[38,64873,52439],{},[38,64875,64876],{},"})();",[63,64878,64880],{"id":64879},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[83,64882,64884],{"className":50608,"code":64883,"language":50610,"meta":10,"style":10},"\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",[88,64885,64886,64896,64900,64908,64912,64926,64940,64952,64960,64966,64976,64986,64990,64994,65001,65013,65024,65041,65054,65068,65078,65082,65086,65093,65104,65122,65132,65144,65148,65152,65159,65176,65187,65199,65203,65207,65214,65226,65230,65238,65246,65250,65258,65266,65274,65289,65333,65341,65354,65367,65380,65388,65396,65404,65432,65440,65452,65465,65478,65486,65494,65502,65528,65536,65549,65561,65574,65582,65590,65598,65624,65632,65645,65657,65670,65678,65686,65694,65699,65719,65724,65744,65749,65766,65771,65779,65784,65813,65826,65830,65834,65839,65843,65871,65876,65893,65898,65903,65908,65913,65939,65943,65947,65955,65963,65967],{"__ignoreMap":10},[91,64887,64888,64890,64892,64894],{"class":93,"line":94},[91,64889,51272],{"class":101},[91,64891,51276],{"class":51275},[91,64893,51279],{"class":1941},[91,64895,51282],{"class":101},[91,64897,64898],{"class":93,"line":11},[91,64899,2378],{"emptyLinePlaceholder":17},[91,64901,64902,64904,64906],{"class":93,"line":1157},[91,64903,1012],{"class":101},[91,64905,50610],{"class":51275},[91,64907,51282],{"class":101},[91,64909,64910],{"class":93,"line":1172},[91,64911,2378],{"emptyLinePlaceholder":17},[91,64913,64914,64916,64918,64920,64922,64924],{"class":93,"line":1178},[91,64915,1012],{"class":101},[91,64917,51309],{"class":51275},[91,64919,51291],{"class":1941},[91,64921,147],{"class":101},[91,64923,51296],{"class":206},[91,64925,51282],{"class":101},[91,64927,64928,64930,64932,64934,64936,64938],{"class":93,"line":1192},[91,64929,52119],{"class":101},[91,64931,51319],{"class":51275},[91,64933,51322],{"class":1941},[91,64935,147],{"class":101},[91,64937,51327],{"class":206},[91,64939,51282],{"class":101},[91,64941,64942,64944,64946,64948,64950],{"class":93,"line":1198},[91,64943,52119],{"class":101},[91,64945,51382],{"class":51275},[91,64947,55289],{"class":101},[91,64949,51382],{"class":51275},[91,64951,51282],{"class":101},[91,64953,64954,64956,64958],{"class":93,"line":1289},[91,64955,52119],{"class":101},[91,64957,5105],{"class":51275},[91,64959,51282],{"class":101},[91,64961,64962,64964],{"class":93,"line":1295},[91,64963,6382],{"class":51275},[91,64965,15551],{"class":101},[91,64967,64968,64970,64972,64974],{"class":93,"line":1307},[91,64969,54681],{"class":150},[91,64971,51412],{"class":101},[91,64973,293],{"class":150},[91,64975,1268],{"class":101},[91,64977,64978,64980,64982,64984],{"class":93,"line":1590},[91,64979,54670],{"class":150},[91,64981,51412],{"class":101},[91,64983,293],{"class":150},[91,64985,1268],{"class":101},[91,64987,64988],{"class":93,"line":1595},[91,64989,2165],{"class":101},[91,64991,64992],{"class":93,"line":1601},[91,64993,2378],{"emptyLinePlaceholder":17},[91,64995,64996,64999],{"class":93,"line":1606},[91,64997,64998],{"class":51275},"    table",[91,65000,15551],{"class":101},[91,65002,65003,65006,65008,65011],{"class":93,"line":1620},[91,65004,65005],{"class":150},"      border-collapse",[91,65007,51412],{"class":101},[91,65009,65010],{"class":150},"collapse",[91,65012,1268],{"class":101},[91,65014,65015,65018,65020,65022],{"class":93,"line":1625},[91,65016,65017],{"class":150},"      border-spacing",[91,65019,51412],{"class":101},[91,65021,293],{"class":150},[91,65023,1268],{"class":101},[91,65025,65026,65028,65030,65032,65034,65036,65039],{"class":93,"line":1631},[91,65027,61952],{"class":150},[91,65029,51412],{"class":101},[91,65031,319],{"class":150},[91,65033,51467],{"class":97},[91,65035,51496],{"class":150},[91,65037,65038],{"class":150}," #c0c0c0",[91,65040,1268],{"class":101},[91,65042,65043,65045,65047,65050,65052],{"class":93,"line":1652},[91,65044,54746],{"class":150},[91,65046,51412],{"class":101},[91,65048,65049],{"class":150},"500",[91,65051,51467],{"class":97},[91,65053,1268],{"class":101},[91,65055,65056,65058,65060,65062,65064,65066],{"class":93,"line":1657},[91,65057,54681],{"class":150},[91,65059,51412],{"class":101},[91,65061,413],{"class":150},[91,65063,51467],{"class":97},[91,65065,51531],{"class":150},[91,65067,1268],{"class":101},[91,65069,65070,65072,65074,65076],{"class":93,"line":1671},[91,65071,57261],{"class":150},[91,65073,51412],{"class":101},[91,65075,51567],{"class":150},[91,65077,1268],{"class":101},[91,65079,65080],{"class":93,"line":1676},[91,65081,2165],{"class":101},[91,65083,65084],{"class":93,"line":1705},[91,65085,2378],{"emptyLinePlaceholder":17},[91,65087,65088,65091],{"class":93,"line":1710},[91,65089,65090],{"class":51275},"    th",[91,65092,15551],{"class":101},[91,65094,65095,65097,65099,65102],{"class":93,"line":1727},[91,65096,54859],{"class":150},[91,65098,51412],{"class":101},[91,65100,65101],{"class":150},"#09c",[91,65103,1268],{"class":101},[91,65105,65106,65109,65111,65113,65115,65117,65120],{"class":93,"line":1732},[91,65107,65108],{"class":150},"      font",[91,65110,51412],{"class":101},[91,65112,62314],{"class":150},[91,65114,64048],{"class":150},[91,65116,51467],{"class":97},[91,65118,65119],{"class":206}," \"微软雅黑\"",[91,65121,1268],{"class":101},[91,65123,65124,65126,65128,65130],{"class":93,"line":1737},[91,65125,57391],{"class":150},[91,65127,51412],{"class":101},[91,65129,60817],{"class":150},[91,65131,1268],{"class":101},[91,65133,65134,65136,65138,65140,65142],{"class":93,"line":1742},[91,65135,54760],{"class":150},[91,65137,51412],{"class":101},[91,65139,902],{"class":150},[91,65141,51467],{"class":97},[91,65143,1268],{"class":101},[91,65145,65146],{"class":93,"line":1756},[91,65147,2165],{"class":101},[91,65149,65150],{"class":93,"line":1761},[91,65151,2378],{"emptyLinePlaceholder":17},[91,65153,65154,65157],{"class":93,"line":2555},[91,65155,65156],{"class":51275},"    td",[91,65158,15551],{"class":101},[91,65160,65161,65163,65165,65167,65169,65171,65174],{"class":93,"line":2569},[91,65162,61952],{"class":150},[91,65164,51412],{"class":101},[91,65166,319],{"class":150},[91,65168,51467],{"class":97},[91,65170,51496],{"class":150},[91,65172,65173],{"class":150}," #d0d0d0",[91,65175,1268],{"class":101},[91,65177,65178,65180,65182,65185],{"class":93,"line":2577},[91,65179,57391],{"class":150},[91,65181,51412],{"class":101},[91,65183,65184],{"class":150},"#404060",[91,65186,1268],{"class":101},[91,65188,65189,65191,65193,65195,65197],{"class":93,"line":2582},[91,65190,54670],{"class":150},[91,65192,51412],{"class":101},[91,65194,548],{"class":150},[91,65196,51467],{"class":97},[91,65198,1268],{"class":101},[91,65200,65201],{"class":93,"line":2588},[91,65202,2165],{"class":101},[91,65204,65205],{"class":93,"line":2594},[91,65206,2378],{"emptyLinePlaceholder":17},[91,65208,65209,65212],{"class":93,"line":2599},[91,65210,65211],{"class":1941},"    .allCheck",[91,65213,15551],{"class":101},[91,65215,65216,65218,65220,65222,65224],{"class":93,"line":7927},[91,65217,54746],{"class":150},[91,65219,51412],{"class":101},[91,65221,714],{"class":150},[91,65223,51467],{"class":97},[91,65225,1268],{"class":101},[91,65227,65228],{"class":93,"line":7951},[91,65229,2165],{"class":101},[91,65231,65232,65234,65236],{"class":93,"line":7956},[91,65233,52392],{"class":101},[91,65235,5105],{"class":51275},[91,65237,51282],{"class":101},[91,65239,65240,65242,65244],{"class":93,"line":7962},[91,65241,51760],{"class":101},[91,65243,51309],{"class":51275},[91,65245,51282],{"class":101},[91,65247,65248],{"class":93,"line":7989},[91,65249,2378],{"emptyLinePlaceholder":17},[91,65251,65252,65254,65256],{"class":93,"line":7994},[91,65253,1012],{"class":101},[91,65255,51775],{"class":51275},[91,65257,51282],{"class":101},[91,65259,65260,65262,65264],{"class":93,"line":8000},[91,65261,52119],{"class":101},[91,65263,239],{"class":51275},[91,65265,51282],{"class":101},[91,65267,65268,65270,65272],{"class":93,"line":8012},[91,65269,51316],{"class":101},[91,65271,245],{"class":51275},[91,65273,51282],{"class":101},[91,65275,65276,65278,65280,65282,65284,65287],{"class":93,"line":8024},[91,65277,55209],{"class":101},[91,65279,248],{"class":51275},[91,65281,53461],{"class":1941},[91,65283,147],{"class":101},[91,65285,65286],{"class":206},"\"allCheck\"",[91,65288,51282],{"class":101},[91,65290,65291,65293,65295,65297,65299,65301,65303,65305,65307,65309,65311,65314,65317,65319,65321,65323,65326,65329,65331],{"class":93,"line":8036},[91,65292,55277],{"class":101},[91,65294,53796],{"class":51275},[91,65296,53799],{"class":1941},[91,65298,147],{"class":101},[91,65300,53804],{"class":206},[91,65302,14899],{"class":1941},[91,65304,147],{"class":101},[91,65306,7631],{"class":206},[91,65308,14938],{"class":1941},[91,65310,147],{"class":101},[91,65312,65313],{"class":206},"\"checkAll\"",[91,65315,65316],{"class":101},"> \u003C",[91,65318,91],{"class":51275},[91,65320,53461],{"class":1941},[91,65322,147],{"class":101},[91,65324,65325],{"class":206},"\"all\"",[91,65327,65328],{"class":101},">全选\u003C\u002F",[91,65330,91],{"class":51275},[91,65332,51282],{"class":101},[91,65334,65335,65337,65339],{"class":93,"line":9695},[91,65336,55382],{"class":101},[91,65338,248],{"class":51275},[91,65340,51282],{"class":101},[91,65342,65343,65345,65347,65350,65352],{"class":93,"line":9720},[91,65344,55209],{"class":101},[91,65346,248],{"class":51275},[91,65348,65349],{"class":101},">商品\u003C\u002F",[91,65351,248],{"class":51275},[91,65353,51282],{"class":101},[91,65355,65356,65358,65360,65363,65365],{"class":93,"line":9743},[91,65357,55209],{"class":101},[91,65359,248],{"class":51275},[91,65361,65362],{"class":101},">商家\u003C\u002F",[91,65364,248],{"class":51275},[91,65366,51282],{"class":101},[91,65368,65369,65371,65373,65376,65378],{"class":93,"line":9767},[91,65370,55209],{"class":101},[91,65372,248],{"class":51275},[91,65374,65375],{"class":101},">价格\u003C\u002F",[91,65377,248],{"class":51275},[91,65379,51282],{"class":101},[91,65381,65382,65384,65386],{"class":93,"line":9772},[91,65383,51751],{"class":101},[91,65385,245],{"class":51275},[91,65387,51282],{"class":101},[91,65389,65390,65392,65394],{"class":93,"line":9777},[91,65391,51316],{"class":101},[91,65393,245],{"class":51275},[91,65395,51282],{"class":101},[91,65397,65398,65400,65402],{"class":93,"line":9782},[91,65399,55209],{"class":101},[91,65401,291],{"class":51275},[91,65403,51282],{"class":101},[91,65405,65406,65408,65410,65412,65414,65416,65418,65420,65423,65425,65427,65430],{"class":93,"line":9791},[91,65407,55277],{"class":101},[91,65409,53796],{"class":51275},[91,65411,53799],{"class":1941},[91,65413,147],{"class":101},[91,65415,53804],{"class":206},[91,65417,14899],{"class":1941},[91,65419,147],{"class":101},[91,65421,65422],{"class":206},"\"check\"",[91,65424,53461],{"class":1941},[91,65426,147],{"class":101},[91,65428,65429],{"class":206},"\"ck\"",[91,65431,51282],{"class":101},[91,65433,65434,65436,65438],{"class":93,"line":9796},[91,65435,55382],{"class":101},[91,65437,291],{"class":51275},[91,65439,51282],{"class":101},[91,65441,65442,65444,65446,65448,65450],{"class":93,"line":9802},[91,65443,55209],{"class":101},[91,65445,291],{"class":51275},[91,65447,61148],{"class":101},[91,65449,291],{"class":51275},[91,65451,51282],{"class":101},[91,65453,65454,65456,65458,65461,65463],{"class":93,"line":9823},[91,65455,55209],{"class":101},[91,65457,291],{"class":51275},[91,65459,65460],{"class":101},">小米\u003C\u002F",[91,65462,291],{"class":51275},[91,65464,51282],{"class":101},[91,65466,65467,65469,65471,65474,65476],{"class":93,"line":9829},[91,65468,55209],{"class":101},[91,65470,291],{"class":51275},[91,65472,65473],{"class":101},">￥1999\u003C\u002F",[91,65475,291],{"class":51275},[91,65477,51282],{"class":101},[91,65479,65480,65482,65484],{"class":93,"line":9843},[91,65481,51751],{"class":101},[91,65483,245],{"class":51275},[91,65485,51282],{"class":101},[91,65487,65488,65490,65492],{"class":93,"line":9849},[91,65489,51316],{"class":101},[91,65491,245],{"class":51275},[91,65493,51282],{"class":101},[91,65495,65496,65498,65500],{"class":93,"line":9876},[91,65497,55209],{"class":101},[91,65499,291],{"class":51275},[91,65501,51282],{"class":101},[91,65503,65504,65506,65508,65510,65512,65514,65516,65518,65520,65522,65524,65526],{"class":93,"line":9885},[91,65505,55277],{"class":101},[91,65507,53796],{"class":51275},[91,65509,53799],{"class":1941},[91,65511,147],{"class":101},[91,65513,53804],{"class":206},[91,65515,14899],{"class":1941},[91,65517,147],{"class":101},[91,65519,65422],{"class":206},[91,65521,53461],{"class":1941},[91,65523,147],{"class":101},[91,65525,65429],{"class":206},[91,65527,51282],{"class":101},[91,65529,65530,65532,65534],{"class":93,"line":9891},[91,65531,55382],{"class":101},[91,65533,291],{"class":51275},[91,65535,51282],{"class":101},[91,65537,65538,65540,65542,65545,65547],{"class":93,"line":9899},[91,65539,55209],{"class":101},[91,65541,291],{"class":51275},[91,65543,65544],{"class":101},">小米净水器\u003C\u002F",[91,65546,291],{"class":51275},[91,65548,51282],{"class":101},[91,65550,65551,65553,65555,65557,65559],{"class":93,"line":9904},[91,65552,55209],{"class":101},[91,65554,291],{"class":51275},[91,65556,65460],{"class":101},[91,65558,291],{"class":51275},[91,65560,51282],{"class":101},[91,65562,65563,65565,65567,65570,65572],{"class":93,"line":16583},[91,65564,55209],{"class":101},[91,65566,291],{"class":51275},[91,65568,65569],{"class":101},">￥4999\u003C\u002F",[91,65571,291],{"class":51275},[91,65573,51282],{"class":101},[91,65575,65576,65578,65580],{"class":93,"line":16589},[91,65577,51751],{"class":101},[91,65579,245],{"class":51275},[91,65581,51282],{"class":101},[91,65583,65584,65586,65588],{"class":93,"line":16612},[91,65585,51316],{"class":101},[91,65587,245],{"class":51275},[91,65589,51282],{"class":101},[91,65591,65592,65594,65596],{"class":93,"line":16618},[91,65593,55209],{"class":101},[91,65595,291],{"class":51275},[91,65597,51282],{"class":101},[91,65599,65600,65602,65604,65606,65608,65610,65612,65614,65616,65618,65620,65622],{"class":93,"line":16641},[91,65601,55277],{"class":101},[91,65603,53796],{"class":51275},[91,65605,53799],{"class":1941},[91,65607,147],{"class":101},[91,65609,53804],{"class":206},[91,65611,14899],{"class":1941},[91,65613,147],{"class":101},[91,65615,65422],{"class":206},[91,65617,53461],{"class":1941},[91,65619,147],{"class":101},[91,65621,65429],{"class":206},[91,65623,51282],{"class":101},[91,65625,65626,65628,65630],{"class":93,"line":16655},[91,65627,55382],{"class":101},[91,65629,291],{"class":51275},[91,65631,51282],{"class":101},[91,65633,65634,65636,65638,65641,65643],{"class":93,"line":16675},[91,65635,55209],{"class":101},[91,65637,291],{"class":51275},[91,65639,65640],{"class":101},">小米电视\u003C\u002F",[91,65642,291],{"class":51275},[91,65644,51282],{"class":101},[91,65646,65647,65649,65651,65653,65655],{"class":93,"line":16681},[91,65648,55209],{"class":101},[91,65650,291],{"class":51275},[91,65652,65460],{"class":101},[91,65654,291],{"class":51275},[91,65656,51282],{"class":101},[91,65658,65659,65661,65663,65666,65668],{"class":93,"line":16692},[91,65660,55209],{"class":101},[91,65662,291],{"class":51275},[91,65664,65665],{"class":101},">￥5999\u003C\u002F",[91,65667,291],{"class":51275},[91,65669,51282],{"class":101},[91,65671,65672,65674,65676],{"class":93,"line":16715},[91,65673,51751],{"class":101},[91,65675,245],{"class":51275},[91,65677,51282],{"class":101},[91,65679,65680,65682,65684],{"class":93,"line":16737},[91,65681,52392],{"class":101},[91,65683,239],{"class":51275},[91,65685,51282],{"class":101},[91,65687,65688,65690,65692],{"class":93,"line":16742},[91,65689,52119],{"class":101},[91,65691,51788],{"class":51275},[91,65693,51282],{"class":101},[91,65695,65696],{"class":93,"line":16748},[91,65697,65698],{"class":160},"    \u002F\u002F 1. 获取大复选框\n",[91,65700,65701,65703,65706,65708,65710,65712,65714,65717],{"class":93,"line":16762},[91,65702,11200],{"class":97},[91,65704,65705],{"class":150}," checkAll",[91,65707,13543],{"class":97},[91,65709,54371],{"class":101},[91,65711,54374],{"class":1941},[91,65713,102],{"class":101},[91,65715,65716],{"class":206},"'#checkAll'",[91,65718,108],{"class":101},[91,65720,65721],{"class":93,"line":16775},[91,65722,65723],{"class":160},"    \u002F\u002F 2. 获取所有的小复选框\n",[91,65725,65726,65728,65731,65733,65735,65737,65739,65742],{"class":93,"line":16780},[91,65727,11200],{"class":97},[91,65729,65730],{"class":150}," cks",[91,65732,13543],{"class":97},[91,65734,54371],{"class":101},[91,65736,55656],{"class":1941},[91,65738,102],{"class":101},[91,65740,65741],{"class":206},"'.ck'",[91,65743,108],{"class":101},[91,65745,65746],{"class":93,"line":16794},[91,65747,65748],{"class":160},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[91,65750,65751,65754,65756,65758,65760,65762,65764],{"class":93,"line":16799},[91,65752,65753],{"class":101},"    checkAll.",[91,65755,57788],{"class":1941},[91,65757,102],{"class":101},[91,65759,57793],{"class":206},[91,65761,12414],{"class":101},[91,65763,54424],{"class":97},[91,65765,54427],{"class":101},[91,65767,65768],{"class":93,"line":16805},[91,65769,65770],{"class":160},"      \u002F\u002F 得到当前大复选框的选中状态\n",[91,65772,65773,65776],{"class":93,"line":16810},[91,65774,65775],{"class":160},"      \u002F\u002F console.log(checkAll.checked)",[91,65777,65778],{"class":160},"  \u002F\u002F 得到 是 true 或者是 false\n",[91,65780,65781],{"class":93,"line":16824},[91,65782,65783],{"class":160},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[91,65785,65786,65788,65790,65792,65794,65796,65798,65800,65802,65805,65807,65809,65811],{"class":93,"line":16829},[91,65787,52259],{"class":97},[91,65789,1636],{"class":101},[91,65791,51822],{"class":97},[91,65793,9417],{"class":101},[91,65795,147],{"class":97},[91,65797,4071],{"class":150},[91,65799,9424],{"class":101},[91,65801,1012],{"class":97},[91,65803,65804],{"class":101}," cks.",[91,65806,51943],{"class":150},[91,65808,3192],{"class":101},[91,65810,2270],{"class":97},[91,65812,12421],{"class":101},[91,65814,65815,65818,65820,65823],{"class":93,"line":16834},[91,65816,65817],{"class":101},"        cks[i].checked ",[91,65819,147],{"class":97},[91,65821,65822],{"class":150}," this",[91,65824,65825],{"class":101},".checked\n",[91,65827,65828],{"class":93,"line":16848},[91,65829,52373],{"class":101},[91,65831,65832],{"class":93,"line":16860},[91,65833,33436],{"class":101},[91,65835,65836],{"class":93,"line":16865},[91,65837,65838],{"class":160},"    \u002F\u002F 5. 小复选框控制大复选框\n",[91,65840,65841],{"class":93,"line":16878},[91,65842,2378],{"emptyLinePlaceholder":17},[91,65844,65845,65847,65849,65851,65853,65855,65857,65859,65861,65863,65865,65867,65869],{"class":93,"line":16883},[91,65846,3179],{"class":97},[91,65848,1636],{"class":101},[91,65850,51822],{"class":97},[91,65852,9417],{"class":101},[91,65854,147],{"class":97},[91,65856,4071],{"class":150},[91,65858,9424],{"class":101},[91,65860,1012],{"class":97},[91,65862,65804],{"class":101},[91,65864,51943],{"class":150},[91,65866,3192],{"class":101},[91,65868,2270],{"class":97},[91,65870,12421],{"class":101},[91,65872,65873],{"class":93,"line":16888},[91,65874,65875],{"class":160},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[91,65877,65878,65881,65883,65885,65887,65889,65891],{"class":93,"line":16893},[91,65879,65880],{"class":101},"      cks[i].",[91,65882,57788],{"class":1941},[91,65884,102],{"class":101},[91,65886,57793],{"class":206},[91,65888,12414],{"class":101},[91,65890,54424],{"class":97},[91,65892,54427],{"class":101},[91,65894,65895],{"class":93,"line":16906},[91,65896,65897],{"class":160},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[91,65899,65900],{"class":93,"line":16911},[91,65901,65902],{"class":160},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[91,65904,65905],{"class":93,"line":32608},[91,65906,65907],{"class":160},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[91,65909,65910],{"class":93,"line":32614},[91,65911,65912],{"class":160},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[91,65914,65915,65918,65920,65922,65924,65926,65929,65931,65933,65935,65937],{"class":93,"line":32620},[91,65916,65917],{"class":101},"        checkAll.checked ",[91,65919,147],{"class":97},[91,65921,54371],{"class":101},[91,65923,55656],{"class":1941},[91,65925,102],{"class":101},[91,65927,65928],{"class":206},"'.ck:checked'",[91,65930,30801],{"class":101},[91,65932,51943],{"class":150},[91,65934,57881],{"class":97},[91,65936,65804],{"class":101},[91,65938,55806],{"class":150},[91,65940,65941],{"class":93,"line":32626},[91,65942,64790],{"class":101},[91,65944,65945],{"class":93,"line":32632},[91,65946,2165],{"class":101},[91,65948,65949,65951,65953],{"class":93,"line":32643},[91,65950,52392],{"class":101},[91,65952,51788],{"class":51275},[91,65954,51282],{"class":101},[91,65956,65957,65959,65961],{"class":93,"line":32649},[91,65958,51760],{"class":101},[91,65960,51775],{"class":51275},[91,65962,51282],{"class":101},[91,65964,65965],{"class":93,"line":32669},[91,65966,2378],{"emptyLinePlaceholder":17},[91,65968,65969,65971,65973],{"class":93,"line":32675},[91,65970,51760],{"class":101},[91,65972,50610],{"class":51275},[91,65974,51282],{"class":101},[38,65976,65977],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[38,65979,65980],{},"用好之间比较得到的布尔值！！！",[38,65982,65983,65984,65987,65988,1636,65991,686,65993,65996],{},"在 JS 里访问的时候，",[88,65985,65986],{},"checkbox.checked"," 是一个 ",[251,65989,65990],{},"布尔值",[88,65992,1340],{},[88,65994,65995],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[38,65998,65999,66000,66003,66004],{},"HTML 的 ",[88,66001,66002],{},"checked=\"checked\""," 只是 ",[251,66005,66006,66007,66010],{},"初始值；JS 的 ",[88,66008,66009],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[38,66012,66013],{},"：checked是一个伪类选择器",[38,66015,66016],{},[1440,66017],{"alt":10,"src":66018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[38,66020,66021,66024],{},[66022,66023],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[38,66026,66027],{},[1440,66028],{"alt":10,"src":66029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[33,66031,66033],{"id":66032},"_33-dom事件进阶","3.3 DOM事件进阶",[63,66035,66037],{"id":66036},"_331-事件流","3.3.1 事件流",[38,66039,66040],{},[1440,66041],{"alt":10,"src":66042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21977,66044,66046],{"id":66045},"_3311-事件捕获","3.3.1.1 事件捕获",[38,66048,66049],{},[1440,66050],{"alt":10,"src":66051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[83,66053,66055],{"className":50608,"code":66054,"language":50610,"meta":10,"style":10},"\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",[88,66056,66057,66067,66081,66085,66093,66107,66127,66139,66147,66154,66166,66178,66188,66192,66196,66203,66215,66227,66237,66241,66249,66257,66261,66269,66284,66303,66311,66319,66339,66359,66375,66386,66394,66411,66422,66430,66447,66458,66466,66474,66482,66486],{"__ignoreMap":10},[91,66058,66059,66061,66063,66065],{"class":93,"line":94},[91,66060,51272],{"class":101},[91,66062,51276],{"class":51275},[91,66064,51279],{"class":1941},[91,66066,51282],{"class":101},[91,66068,66069,66071,66073,66075,66077,66079],{"class":93,"line":11},[91,66070,1012],{"class":101},[91,66072,50610],{"class":51275},[91,66074,51291],{"class":1941},[91,66076,147],{"class":101},[91,66078,51296],{"class":206},[91,66080,51282],{"class":101},[91,66082,66083],{"class":93,"line":1157},[91,66084,2378],{"emptyLinePlaceholder":17},[91,66086,66087,66089,66091],{"class":93,"line":1172},[91,66088,1012],{"class":101},[91,66090,51309],{"class":51275},[91,66092,51282],{"class":101},[91,66094,66095,66097,66099,66101,66103,66105],{"class":93,"line":1178},[91,66096,52119],{"class":101},[91,66098,51319],{"class":51275},[91,66100,51322],{"class":1941},[91,66102,147],{"class":101},[91,66104,51327],{"class":206},[91,66106,51282],{"class":101},[91,66108,66109,66111,66113,66115,66117,66119,66121,66123,66125],{"class":93,"line":1192},[91,66110,52119],{"class":101},[91,66112,51319],{"class":51275},[91,66114,14899],{"class":1941},[91,66116,147],{"class":101},[91,66118,51366],{"class":206},[91,66120,51346],{"class":1941},[91,66122,147],{"class":101},[91,66124,51373],{"class":206},[91,66126,51282],{"class":101},[91,66128,66129,66131,66133,66135,66137],{"class":93,"line":1198},[91,66130,52119],{"class":101},[91,66132,51382],{"class":51275},[91,66134,51385],{"class":101},[91,66136,51382],{"class":51275},[91,66138,51282],{"class":101},[91,66140,66141,66143,66145],{"class":93,"line":1289},[91,66142,52119],{"class":101},[91,66144,5105],{"class":51275},[91,66146,51282],{"class":101},[91,66148,66149,66152],{"class":93,"line":1295},[91,66150,66151],{"class":1941},"    .father",[91,66153,15551],{"class":101},[91,66155,66156,66158,66160,66162,66164],{"class":93,"line":1307},[91,66157,54746],{"class":150},[91,66159,51412],{"class":101},[91,66161,65049],{"class":150},[91,66163,51467],{"class":97},[91,66165,1268],{"class":101},[91,66167,66168,66170,66172,66174,66176],{"class":93,"line":1590},[91,66169,54760],{"class":150},[91,66171,51412],{"class":101},[91,66173,65049],{"class":150},[91,66175,51467],{"class":97},[91,66177,1268],{"class":101},[91,66179,66180,66182,66184,66186],{"class":93,"line":1595},[91,66181,54859],{"class":150},[91,66183,51412],{"class":101},[91,66185,51620],{"class":150},[91,66187,1268],{"class":101},[91,66189,66190],{"class":93,"line":1601},[91,66191,2165],{"class":101},[91,66193,66194],{"class":93,"line":1606},[91,66195,2378],{"emptyLinePlaceholder":17},[91,66197,66198,66201],{"class":93,"line":1620},[91,66199,66200],{"class":1941},"    .son",[91,66202,15551],{"class":101},[91,66204,66205,66207,66209,66211,66213],{"class":93,"line":1625},[91,66206,54746],{"class":150},[91,66208,51412],{"class":101},[91,66210,1700],{"class":150},[91,66212,51467],{"class":97},[91,66214,1268],{"class":101},[91,66216,66217,66219,66221,66223,66225],{"class":93,"line":1631},[91,66218,54760],{"class":150},[91,66220,51412],{"class":101},[91,66222,1700],{"class":150},[91,66224,51467],{"class":97},[91,66226,1268],{"class":101},[91,66228,66229,66231,66233,66235],{"class":93,"line":1652},[91,66230,54859],{"class":150},[91,66232,51412],{"class":101},[91,66234,54864],{"class":150},[91,66236,1268],{"class":101},[91,66238,66239],{"class":93,"line":1657},[91,66240,2165],{"class":101},[91,66242,66243,66245,66247],{"class":93,"line":1671},[91,66244,52392],{"class":101},[91,66246,5105],{"class":51275},[91,66248,51282],{"class":101},[91,66250,66251,66253,66255],{"class":93,"line":1676},[91,66252,51760],{"class":101},[91,66254,51309],{"class":51275},[91,66256,51282],{"class":101},[91,66258,66259],{"class":93,"line":1705},[91,66260,2378],{"emptyLinePlaceholder":17},[91,66262,66263,66265,66267],{"class":93,"line":1710},[91,66264,1012],{"class":101},[91,66266,51775],{"class":51275},[91,66268,51282],{"class":101},[91,66270,66271,66273,66275,66277,66279,66282],{"class":93,"line":1727},[91,66272,52119],{"class":101},[91,66274,51586],{"class":51275},[91,66276,53461],{"class":1941},[91,66278,147],{"class":101},[91,66280,66281],{"class":206},"\"father\"",[91,66283,51282],{"class":101},[91,66285,66286,66288,66290,66292,66294,66297,66299,66301],{"class":93,"line":1732},[91,66287,51316],{"class":101},[91,66289,51586],{"class":51275},[91,66291,53461],{"class":1941},[91,66293,147],{"class":101},[91,66295,66296],{"class":206},"\"son\"",[91,66298,55289],{"class":101},[91,66300,51586],{"class":51275},[91,66302,51282],{"class":101},[91,66304,66305,66307,66309],{"class":93,"line":1737},[91,66306,52392],{"class":101},[91,66308,51586],{"class":51275},[91,66310,51282],{"class":101},[91,66312,66313,66315,66317],{"class":93,"line":1742},[91,66314,52119],{"class":101},[91,66316,51788],{"class":51275},[91,66318,51282],{"class":101},[91,66320,66321,66323,66326,66328,66330,66332,66334,66337],{"class":93,"line":1756},[91,66322,11200],{"class":97},[91,66324,66325],{"class":150}," fa",[91,66327,13543],{"class":97},[91,66329,54371],{"class":101},[91,66331,54374],{"class":1941},[91,66333,102],{"class":101},[91,66335,66336],{"class":206},"'.father'",[91,66338,108],{"class":101},[91,66340,66341,66343,66346,66348,66350,66352,66354,66357],{"class":93,"line":1761},[91,66342,11200],{"class":97},[91,66344,66345],{"class":150}," son",[91,66347,13543],{"class":97},[91,66349,54371],{"class":101},[91,66351,54374],{"class":1941},[91,66353,102],{"class":101},[91,66355,66356],{"class":206},"'.son'",[91,66358,108],{"class":101},[91,66360,66361,66363,66365,66367,66369,66371,66373],{"class":93,"line":2555},[91,66362,52382],{"class":101},[91,66364,57788],{"class":1941},[91,66366,102],{"class":101},[91,66368,57793],{"class":206},[91,66370,12414],{"class":101},[91,66372,54424],{"class":97},[91,66374,54427],{"class":101},[91,66376,66377,66379,66381,66384],{"class":93,"line":2569},[91,66378,58900],{"class":1941},[91,66380,102],{"class":101},[91,66382,66383],{"class":206},"'woshiu1'",[91,66385,108],{"class":101},[91,66387,66388,66390,66392],{"class":93,"line":2577},[91,66389,54510],{"class":101},[91,66391,1340],{"class":150},[91,66393,108],{"class":101},[91,66395,66396,66399,66401,66403,66405,66407,66409],{"class":93,"line":2582},[91,66397,66398],{"class":101},"    fa.",[91,66400,57788],{"class":1941},[91,66402,102],{"class":101},[91,66404,57793],{"class":206},[91,66406,12414],{"class":101},[91,66408,54424],{"class":97},[91,66410,54427],{"class":101},[91,66412,66413,66415,66417,66420],{"class":93,"line":2588},[91,66414,58900],{"class":1941},[91,66416,102],{"class":101},[91,66418,66419],{"class":206},"'1'",[91,66421,108],{"class":101},[91,66423,66424,66426,66428],{"class":93,"line":2594},[91,66425,54510],{"class":101},[91,66427,1340],{"class":150},[91,66429,108],{"class":101},[91,66431,66432,66435,66437,66439,66441,66443,66445],{"class":93,"line":2599},[91,66433,66434],{"class":101},"    son.",[91,66436,57788],{"class":1941},[91,66438,102],{"class":101},[91,66440,57793],{"class":206},[91,66442,12414],{"class":101},[91,66444,54424],{"class":97},[91,66446,54427],{"class":101},[91,66448,66449,66451,66453,66456],{"class":93,"line":7927},[91,66450,58900],{"class":1941},[91,66452,102],{"class":101},[91,66454,66455],{"class":206},"'2'",[91,66457,108],{"class":101},[91,66459,66460,66462,66464],{"class":93,"line":7951},[91,66461,54510],{"class":101},[91,66463,1340],{"class":150},[91,66465,108],{"class":101},[91,66467,66468,66470,66472],{"class":93,"line":7956},[91,66469,52392],{"class":101},[91,66471,51788],{"class":51275},[91,66473,51282],{"class":101},[91,66475,66476,66478,66480],{"class":93,"line":7962},[91,66477,51760],{"class":101},[91,66479,51775],{"class":51275},[91,66481,51282],{"class":101},[91,66483,66484],{"class":93,"line":7989},[91,66485,2378],{"emptyLinePlaceholder":17},[91,66487,66488,66490,66492],{"class":93,"line":7994},[91,66489,51760],{"class":101},[91,66491,50610],{"class":51275},[91,66493,51282],{"class":101},[38,66495,66496],{},[1440,66497],{"alt":10,"src":66498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[38,66500,66501],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21977,66503,66505],{"id":66504},"_3312-事件冒泡","3.3.1.2 事件冒泡",[38,66507,66508],{},[1440,66509],{"alt":10,"src":66510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[38,66512,66513],{},"反着来",[38,66515,66516],{},"注意是同名事件，比如都是‘click’",[21977,66518,66520],{"id":66519},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[38,66522,66523],{},[1440,66524],{"alt":10,"src":66525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21977,66527,66529],{"id":66528},"_3314-解绑事件","3.3.1.4 解绑事件",[38,66531,66532],{},[1440,66533],{"alt":10,"src":66534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[38,66536,66537],{},[1440,66538],{"alt":10,"src":66539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21977,66541,66543],{"id":66542},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[46,66545,66546],{},[49,66547,66548],{},"事件类型的区别",[38,66550,66551],{},[1440,66552],{"alt":10,"src":66553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[38,66555,66556],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[46,66558,66559],{"start":11},[49,66560,66561],{},"注册事件的区别",[38,66563,66564],{},[1440,66565],{"alt":10,"src":66566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21977,66568,66570],{"id":66569},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[38,66572,66573],{},[1440,66574],{"alt":10,"src":66575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[38,66577,66578],{},[1440,66579],{"alt":10,"src":66580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[83,66582,66584],{"className":53042,"code":66583,"language":53044,"meta":10,"style":10},"\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",[88,66585,66586,66594,66611,66634,66642,66647,66652,66657,66661,66669,66677],{"__ignoreMap":10},[91,66587,66588,66590,66592],{"class":93,"line":94},[91,66589,1012],{"class":101},[91,66591,51775],{"class":51275},[91,66593,51282],{"class":101},[91,66595,66596,66598,66601,66604,66606,66609],{"class":93,"line":11},[91,66597,52119],{"class":101},[91,66599,66600],{"class":51275},"form",[91,66602,66603],{"class":1941}," action",[91,66605,147],{"class":101},[91,66607,66608],{"class":206},"\"http:\u002F\u002Fwww.itcast.cn\"",[91,66610,51282],{"class":101},[91,66612,66613,66615,66617,66619,66621,66624,66627,66629,66632],{"class":93,"line":1157},[91,66614,51316],{"class":101},[91,66616,53796],{"class":51275},[91,66618,53799],{"class":1941},[91,66620,147],{"class":101},[91,66622,66623],{"class":206},"\"submit\"",[91,66625,66626],{"class":1941}," value",[91,66628,147],{"class":101},[91,66630,66631],{"class":206},"\"免费注册\"",[91,66633,51282],{"class":101},[91,66635,66636,66638,66640],{"class":93,"line":1172},[91,66637,51316],{"class":101},[91,66639,51788],{"class":51275},[91,66641,51282],{"class":101},[91,66643,66644],{"class":93,"line":1178},[91,66645,66646],{"class":101},"      const form = document.querySelector('form')\n",[91,66648,66649],{"class":93,"line":1192},[91,66650,66651],{"class":101},"      form.addEventListener('submit', function (e) {\n",[91,66653,66654],{"class":93,"line":1198},[91,66655,66656],{"class":101},"        e.preventDefault()\n",[91,66658,66659],{"class":93,"line":1289},[91,66660,64790],{"class":101},[91,66662,66663,66665,66667],{"class":93,"line":1295},[91,66664,51751],{"class":101},[91,66666,51788],{"class":51275},[91,66668,51282],{"class":101},[91,66670,66671,66673,66675],{"class":93,"line":1307},[91,66672,52392],{"class":101},[91,66674,66600],{"class":51275},[91,66676,51282],{"class":101},[91,66678,66679,66681,66683],{"class":93,"line":1590},[91,66680,51760],{"class":101},[91,66682,51775],{"class":51275},[91,66684,51282],{"class":101},[38,66686,66687],{},"点击不在跳转！！！",[63,66689,66691],{"id":66690},"_332-事件委托","3.3.2 事件委托",[38,66693,66694],{},[1440,66695],{"alt":10,"src":66696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[83,66698,66700],{"className":50608,"code":66699,"language":50610,"meta":10,"style":10},"\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",[88,66701,66702,66712,66726,66730,66738,66752,66772,66784,66792,66796,66804,66812,66824,66836,66848,66860,66872,66885,66893,66901,66906,66925,66946,66951,66956,66961,66966,66975,66979,66989,66993,66998,67003,67017,67027,67031,67035,67043,67051,67055],{"__ignoreMap":10},[91,66703,66704,66706,66708,66710],{"class":93,"line":94},[91,66705,51272],{"class":101},[91,66707,51276],{"class":51275},[91,66709,51279],{"class":1941},[91,66711,51282],{"class":101},[91,66713,66714,66716,66718,66720,66722,66724],{"class":93,"line":11},[91,66715,1012],{"class":101},[91,66717,50610],{"class":51275},[91,66719,51291],{"class":1941},[91,66721,147],{"class":101},[91,66723,51296],{"class":206},[91,66725,51282],{"class":101},[91,66727,66728],{"class":93,"line":1157},[91,66729,2378],{"emptyLinePlaceholder":17},[91,66731,66732,66734,66736],{"class":93,"line":1172},[91,66733,1012],{"class":101},[91,66735,51309],{"class":51275},[91,66737,51282],{"class":101},[91,66739,66740,66742,66744,66746,66748,66750],{"class":93,"line":1178},[91,66741,52119],{"class":101},[91,66743,51319],{"class":51275},[91,66745,51322],{"class":1941},[91,66747,147],{"class":101},[91,66749,51327],{"class":206},[91,66751,51282],{"class":101},[91,66753,66754,66756,66758,66760,66762,66764,66766,66768,66770],{"class":93,"line":1192},[91,66755,52119],{"class":101},[91,66757,51319],{"class":51275},[91,66759,14899],{"class":1941},[91,66761,147],{"class":101},[91,66763,51366],{"class":206},[91,66765,51346],{"class":1941},[91,66767,147],{"class":101},[91,66769,51373],{"class":206},[91,66771,51282],{"class":101},[91,66773,66774,66776,66778,66780,66782],{"class":93,"line":1198},[91,66775,52119],{"class":101},[91,66777,51382],{"class":51275},[91,66779,51385],{"class":101},[91,66781,51382],{"class":51275},[91,66783,51282],{"class":101},[91,66785,66786,66788,66790],{"class":93,"line":1289},[91,66787,51760],{"class":101},[91,66789,51309],{"class":51275},[91,66791,51282],{"class":101},[91,66793,66794],{"class":93,"line":1295},[91,66795,2378],{"emptyLinePlaceholder":17},[91,66797,66798,66800,66802],{"class":93,"line":1307},[91,66799,1012],{"class":101},[91,66801,51775],{"class":51275},[91,66803,51282],{"class":101},[91,66805,66806,66808,66810],{"class":93,"line":1590},[91,66807,52119],{"class":101},[91,66809,1109],{"class":51275},[91,66811,51282],{"class":101},[91,66813,66814,66816,66818,66820,66822],{"class":93,"line":1595},[91,66815,51316],{"class":101},[91,66817,49],{"class":51275},[91,66819,53941],{"class":101},[91,66821,49],{"class":51275},[91,66823,51282],{"class":101},[91,66825,66826,66828,66830,66832,66834],{"class":93,"line":1601},[91,66827,51316],{"class":101},[91,66829,49],{"class":51275},[91,66831,53960],{"class":101},[91,66833,49],{"class":51275},[91,66835,51282],{"class":101},[91,66837,66838,66840,66842,66844,66846],{"class":93,"line":1606},[91,66839,51316],{"class":101},[91,66841,49],{"class":51275},[91,66843,53979],{"class":101},[91,66845,49],{"class":51275},[91,66847,51282],{"class":101},[91,66849,66850,66852,66854,66856,66858],{"class":93,"line":1620},[91,66851,51316],{"class":101},[91,66853,49],{"class":51275},[91,66855,53998],{"class":101},[91,66857,49],{"class":51275},[91,66859,51282],{"class":101},[91,66861,66862,66864,66866,66868,66870],{"class":93,"line":1625},[91,66863,51316],{"class":101},[91,66865,49],{"class":51275},[91,66867,54017],{"class":101},[91,66869,49],{"class":51275},[91,66871,51282],{"class":101},[91,66873,66874,66876,66878,66881,66883],{"class":93,"line":1631},[91,66875,51316],{"class":101},[91,66877,38],{"class":51275},[91,66879,66880],{"class":101},">我不需要变色\u003C\u002F",[91,66882,38],{"class":51275},[91,66884,51282],{"class":101},[91,66886,66887,66889,66891],{"class":93,"line":1652},[91,66888,52392],{"class":101},[91,66890,1109],{"class":51275},[91,66892,51282],{"class":101},[91,66894,66895,66897,66899],{"class":93,"line":1657},[91,66896,52119],{"class":101},[91,66898,51788],{"class":51275},[91,66900,51282],{"class":101},[91,66902,66903],{"class":93,"line":1671},[91,66904,66905],{"class":160},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[91,66907,66908,66910,66912,66914,66916,66918,66920,66923],{"class":93,"line":1676},[91,66909,11200],{"class":97},[91,66911,61267],{"class":150},[91,66913,13543],{"class":97},[91,66915,54371],{"class":101},[91,66917,54374],{"class":1941},[91,66919,102],{"class":101},[91,66921,66922],{"class":206},"'ul'",[91,66924,108],{"class":101},[91,66926,66927,66930,66932,66934,66936,66938,66940,66942,66944],{"class":93,"line":1705},[91,66928,66929],{"class":101},"    ul.",[91,66931,57788],{"class":1941},[91,66933,102],{"class":101},[91,66935,57793],{"class":206},[91,66937,12414],{"class":101},[91,66939,54424],{"class":97},[91,66941,1636],{"class":101},[91,66943,176],{"class":5195},[91,66945,12421],{"class":101},[91,66947,66948],{"class":93,"line":1710},[91,66949,66950],{"class":160},"      \u002F\u002F alert(1)\n",[91,66952,66953],{"class":93,"line":1727},[91,66954,66955],{"class":160},"      \u002F\u002F e.target就是我们点击的对象\n",[91,66957,66958],{"class":93,"line":1732},[91,66959,66960],{"class":160},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[91,66962,66963],{"class":93,"line":1737},[91,66964,66965],{"class":160},"      \u002F\u002F e.target.style.color = 'red'\n",[91,66967,66968,66970,66972],{"class":93,"line":1742},[91,66969,58219],{"class":101},[91,66971,58222],{"class":1941},[91,66973,66974],{"class":101},"(e)\n",[91,66976,66977],{"class":93,"line":1756},[91,66978,2378],{"emptyLinePlaceholder":17},[91,66980,66981,66983,66986],{"class":93,"line":1761},[91,66982,58219],{"class":101},[91,66984,66985],{"class":1941},"dir",[91,66987,66988],{"class":101},"(e.target)\n",[91,66990,66991],{"class":93,"line":2555},[91,66992,2378],{"emptyLinePlaceholder":17},[91,66994,66995],{"class":93,"line":2569},[91,66996,66997],{"class":160},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[91,66999,67000],{"class":93,"line":2577},[91,67001,67002],{"class":160},"      \u002F\u002F 通过tagName来进行判断\n",[91,67004,67005,67007,67010,67012,67015],{"class":93,"line":2582},[91,67006,54455],{"class":97},[91,67008,67009],{"class":101}," (e.target.tagName ",[91,67011,54461],{"class":97},[91,67013,67014],{"class":206}," 'LI'",[91,67016,12421],{"class":101},[91,67018,67019,67022,67024],{"class":93,"line":2588},[91,67020,67021],{"class":101},"        e.target.style.color ",[91,67023,147],{"class":97},[91,67025,67026],{"class":206}," 'red'\n",[91,67028,67029],{"class":93,"line":2594},[91,67030,52373],{"class":101},[91,67032,67033],{"class":93,"line":2599},[91,67034,33436],{"class":101},[91,67036,67037,67039,67041],{"class":93,"line":7927},[91,67038,52392],{"class":101},[91,67040,51788],{"class":51275},[91,67042,51282],{"class":101},[91,67044,67045,67047,67049],{"class":93,"line":7951},[91,67046,51760],{"class":101},[91,67048,51775],{"class":51275},[91,67050,51282],{"class":101},[91,67052,67053],{"class":93,"line":7956},[91,67054,2378],{"emptyLinePlaceholder":17},[91,67056,67057,67059,67061],{"class":93,"line":7962},[91,67058,51760],{"class":101},[91,67060,50610],{"class":51275},[91,67062,51282],{"class":101},[38,67064,67065],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[38,67067,67068],{},"if(e.target.ragName==='P') {}",[38,67070,67071],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[38,67073,67074],{},"通过事件委托的方式实现tab栏切换改造：",[38,67076,67077],{},"一定要记住自定义属性！！！！！！",[38,67079,67080],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[38,67082,67083],{},"id是自定义的属性名",[38,67085,67086],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[83,67088,67090],{"className":50608,"code":67089,"language":50610,"meta":10,"style":10},"\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",[88,67091,67092,67102,67116,67120,67128,67142,67162,67182,67194,67202,67208,67218,67228,67232,67236,67242,67254,67266,67278,67294,67298,67302,67308,67320,67332,67344,67354,67364,67368,67372,67380,67392,67402,67414,67418,67422,67430,67440,67450,67460,67464,67468,67478,67492,67504,67508,67512,67524,67534,67550,67560,67564,67568,67582,67592,67602,67606,67610,67616,67630,67634,67638,67646,67656,67660,67664,67673,67683,67687,67695,67703,67707,67715,67729,67743,67755,67763,67802,67834,67866,67898,67930,67938,67946,67960,67994,68028,68062,68096,68130,68138,68146,68154,68159,68164,68183,68188,68208,68216,68221,68234,68255,68268,68272,68277,68282,68295,68315,68343,68347,68351,68355,68363,68371,68375],{"__ignoreMap":10},[91,67093,67094,67096,67098,67100],{"class":93,"line":94},[91,67095,51272],{"class":101},[91,67097,51276],{"class":51275},[91,67099,51279],{"class":1941},[91,67101,51282],{"class":101},[91,67103,67104,67106,67108,67110,67112,67114],{"class":93,"line":11},[91,67105,1012],{"class":101},[91,67107,50610],{"class":51275},[91,67109,51291],{"class":1941},[91,67111,147],{"class":101},[91,67113,51296],{"class":206},[91,67115,51282],{"class":101},[91,67117,67118],{"class":93,"line":1157},[91,67119,2378],{"emptyLinePlaceholder":17},[91,67121,67122,67124,67126],{"class":93,"line":1172},[91,67123,1012],{"class":101},[91,67125,51309],{"class":51275},[91,67127,51282],{"class":101},[91,67129,67130,67132,67134,67136,67138,67140],{"class":93,"line":1178},[91,67131,52119],{"class":101},[91,67133,51319],{"class":51275},[91,67135,51322],{"class":1941},[91,67137,147],{"class":101},[91,67139,51327],{"class":206},[91,67141,59102],{"class":101},[91,67143,67144,67146,67148,67150,67152,67154,67156,67158,67160],{"class":93,"line":1192},[91,67145,52119],{"class":101},[91,67147,51319],{"class":51275},[91,67149,51338],{"class":1941},[91,67151,147],{"class":101},[91,67153,51343],{"class":206},[91,67155,51346],{"class":1941},[91,67157,147],{"class":101},[91,67159,51351],{"class":206},[91,67161,59102],{"class":101},[91,67163,67164,67166,67168,67170,67172,67174,67176,67178,67180],{"class":93,"line":1198},[91,67165,52119],{"class":101},[91,67167,51319],{"class":51275},[91,67169,14899],{"class":1941},[91,67171,147],{"class":101},[91,67173,51366],{"class":206},[91,67175,51346],{"class":1941},[91,67177,147],{"class":101},[91,67179,51373],{"class":206},[91,67181,59102],{"class":101},[91,67183,67184,67186,67188,67190,67192],{"class":93,"line":1289},[91,67185,52119],{"class":101},[91,67187,51382],{"class":51275},[91,67189,63600],{"class":101},[91,67191,51382],{"class":51275},[91,67193,51282],{"class":101},[91,67195,67196,67198,67200],{"class":93,"line":1295},[91,67197,52119],{"class":101},[91,67199,5105],{"class":51275},[91,67201,51282],{"class":101},[91,67203,67204,67206],{"class":93,"line":1307},[91,67205,6382],{"class":51275},[91,67207,15551],{"class":101},[91,67209,67210,67212,67214,67216],{"class":93,"line":1590},[91,67211,54681],{"class":150},[91,67213,51412],{"class":101},[91,67215,293],{"class":150},[91,67217,1268],{"class":101},[91,67219,67220,67222,67224,67226],{"class":93,"line":1595},[91,67221,54670],{"class":150},[91,67223,51412],{"class":101},[91,67225,293],{"class":150},[91,67227,1268],{"class":101},[91,67229,67230],{"class":93,"line":1601},[91,67231,2165],{"class":101},[91,67233,67234],{"class":93,"line":1606},[91,67235,2378],{"emptyLinePlaceholder":17},[91,67237,67238,67240],{"class":93,"line":1620},[91,67239,63651],{"class":1941},[91,67241,15551],{"class":101},[91,67243,67244,67246,67248,67250,67252],{"class":93,"line":1625},[91,67245,54746],{"class":150},[91,67247,51412],{"class":101},[91,67249,63662],{"class":150},[91,67251,51467],{"class":97},[91,67253,1268],{"class":101},[91,67255,67256,67258,67260,67262,67264],{"class":93,"line":1631},[91,67257,54760],{"class":150},[91,67259,51412],{"class":101},[91,67261,63675],{"class":150},[91,67263,51467],{"class":97},[91,67265,1268],{"class":101},[91,67267,67268,67270,67272,67274,67276],{"class":93,"line":1652},[91,67269,54681],{"class":150},[91,67271,51412],{"class":101},[91,67273,802],{"class":150},[91,67275,51467],{"class":97},[91,67277,1268],{"class":101},[91,67279,67280,67282,67284,67286,67288,67290,67292],{"class":93,"line":1657},[91,67281,61952],{"class":150},[91,67283,51412],{"class":101},[91,67285,319],{"class":150},[91,67287,51467],{"class":97},[91,67289,51496],{"class":150},[91,67291,62219],{"class":150},[91,67293,1268],{"class":101},[91,67295,67296],{"class":93,"line":1671},[91,67297,2165],{"class":101},[91,67299,67300],{"class":93,"line":1676},[91,67301,2378],{"emptyLinePlaceholder":17},[91,67303,67304,67306],{"class":93,"line":1705},[91,67305,63720],{"class":1941},[91,67307,15551],{"class":101},[91,67309,67310,67312,67314,67316,67318],{"class":93,"line":1710},[91,67311,54746],{"class":150},[91,67313,51412],{"class":101},[91,67315,413],{"class":150},[91,67317,430],{"class":97},[91,67319,1268],{"class":101},[91,67321,67322,67324,67326,67328,67330],{"class":93,"line":1727},[91,67323,54760],{"class":150},[91,67325,51412],{"class":101},[91,67327,1009],{"class":150},[91,67329,51467],{"class":97},[91,67331,1268],{"class":101},[91,67333,67334,67336,67338,67340,67342],{"class":93,"line":1732},[91,67335,57334],{"class":150},[91,67337,51412],{"class":101},[91,67339,1009],{"class":150},[91,67341,51467],{"class":97},[91,67343,1268],{"class":101},[91,67345,67346,67348,67350,67352],{"class":93,"line":1737},[91,67347,54984],{"class":150},[91,67349,51412],{"class":101},[91,67351,51452],{"class":150},[91,67353,1268],{"class":101},[91,67355,67356,67358,67360,67362],{"class":93,"line":1742},[91,67357,54995],{"class":150},[91,67359,51412],{"class":101},[91,67361,51643],{"class":150},[91,67363,1268],{"class":101},[91,67365,67366],{"class":93,"line":1756},[91,67367,2165],{"class":101},[91,67369,67370],{"class":93,"line":1761},[91,67371,2378],{"emptyLinePlaceholder":17},[91,67373,67374,67376,67378],{"class":93,"line":2555},[91,67375,63720],{"class":1941},[91,67377,63793],{"class":51275},[91,67379,15551],{"class":101},[91,67381,67382,67384,67386,67388,67390],{"class":93,"line":2569},[91,67383,54897],{"class":150},[91,67385,51412],{"class":101},[91,67387,902],{"class":150},[91,67389,51467],{"class":97},[91,67391,1268],{"class":101},[91,67393,67394,67396,67398,67400],{"class":93,"line":2577},[91,67395,62309],{"class":150},[91,67397,51412],{"class":101},[91,67399,63816],{"class":150},[91,67401,1268],{"class":101},[91,67403,67404,67406,67408,67410,67412],{"class":93,"line":2582},[91,67405,61975],{"class":150},[91,67407,51412],{"class":101},[91,67409,802],{"class":150},[91,67411,51467],{"class":97},[91,67413,1268],{"class":101},[91,67415,67416],{"class":93,"line":2588},[91,67417,2165],{"class":101},[91,67419,67420],{"class":93,"line":2594},[91,67421,2378],{"emptyLinePlaceholder":17},[91,67423,67424,67426,67428],{"class":93,"line":2599},[91,67425,63720],{"class":1941},[91,67427,61267],{"class":51275},[91,67429,15551],{"class":101},[91,67431,67432,67434,67436,67438],{"class":93,"line":7927},[91,67433,54707],{"class":150},[91,67435,51412],{"class":101},[91,67437,54712],{"class":150},[91,67439,1268],{"class":101},[91,67441,67442,67444,67446,67448],{"class":93,"line":7951},[91,67443,54984],{"class":150},[91,67445,51412],{"class":101},[91,67447,51452],{"class":150},[91,67449,1268],{"class":101},[91,67451,67452,67454,67456,67458],{"class":93,"line":7956},[91,67453,54995],{"class":150},[91,67455,51412],{"class":101},[91,67457,51555],{"class":150},[91,67459,1268],{"class":101},[91,67461,67462],{"class":93,"line":7962},[91,67463,2165],{"class":101},[91,67465,67466],{"class":93,"line":7989},[91,67467,2378],{"emptyLinePlaceholder":17},[91,67469,67470,67472,67474,67476],{"class":93,"line":7994},[91,67471,63720],{"class":1941},[91,67473,61267],{"class":51275},[91,67475,55050],{"class":51275},[91,67477,15551],{"class":101},[91,67479,67480,67482,67484,67486,67488,67490],{"class":93,"line":8000},[91,67481,54681],{"class":150},[91,67483,51412],{"class":101},[91,67485,293],{"class":150},[91,67487,8929],{"class":150},[91,67489,51467],{"class":97},[91,67491,1268],{"class":101},[91,67493,67494,67496,67498,67500,67502],{"class":93,"line":8012},[91,67495,54897],{"class":150},[91,67497,51412],{"class":101},[91,67499,651],{"class":150},[91,67501,51467],{"class":97},[91,67503,1268],{"class":101},[91,67505,67506],{"class":93,"line":8024},[91,67507,2165],{"class":101},[91,67509,67510],{"class":93,"line":8036},[91,67511,2378],{"emptyLinePlaceholder":17},[91,67513,67514,67516,67518,67520,67522],{"class":93,"line":9695},[91,67515,63720],{"class":1941},[91,67517,61267],{"class":51275},[91,67519,55050],{"class":51275},[91,67521,1376],{"class":51275},[91,67523,15551],{"class":101},[91,67525,67526,67528,67530,67532],{"class":93,"line":9720},[91,67527,63945],{"class":150},[91,67529,51412],{"class":101},[91,67531,54712],{"class":150},[91,67533,1268],{"class":101},[91,67535,67536,67538,67540,67542,67544,67546,67548],{"class":93,"line":9743},[91,67537,62207],{"class":150},[91,67539,51412],{"class":101},[91,67541,179],{"class":150},[91,67543,51467],{"class":97},[91,67545,51496],{"class":150},[91,67547,63966],{"class":150},[91,67549,1268],{"class":101},[91,67551,67552,67554,67556,67558],{"class":93,"line":9767},[91,67553,57391],{"class":150},[91,67555,51412],{"class":101},[91,67557,62344],{"class":150},[91,67559,1268],{"class":101},[91,67561,67562],{"class":93,"line":9772},[91,67563,2165],{"class":101},[91,67565,67566],{"class":93,"line":9777},[91,67567,2378],{"emptyLinePlaceholder":17},[91,67569,67570,67572,67574,67576,67578,67580],{"class":93,"line":9782},[91,67571,63720],{"class":1941},[91,67573,61267],{"class":51275},[91,67575,55050],{"class":51275},[91,67577,1376],{"class":51275},[91,67579,63999],{"class":1941},[91,67581,15551],{"class":101},[91,67583,67584,67586,67588,67590],{"class":93,"line":9791},[91,67585,61766],{"class":150},[91,67587,51412],{"class":101},[91,67589,64010],{"class":150},[91,67591,1268],{"class":101},[91,67593,67594,67596,67598,67600],{"class":93,"line":9796},[91,67595,57391],{"class":150},[91,67597,51412],{"class":101},[91,67599,64010],{"class":150},[91,67601,1268],{"class":101},[91,67603,67604],{"class":93,"line":9802},[91,67605,2165],{"class":101},[91,67607,67608],{"class":93,"line":9823},[91,67609,2378],{"emptyLinePlaceholder":17},[91,67611,67612,67614],{"class":93,"line":9829},[91,67613,64035],{"class":1941},[91,67615,15551],{"class":101},[91,67617,67618,67620,67622,67624,67626,67628],{"class":93,"line":9843},[91,67619,54670],{"class":150},[91,67621,51412],{"class":101},[91,67623,293],{"class":150},[91,67625,64048],{"class":150},[91,67627,51467],{"class":97},[91,67629,1268],{"class":101},[91,67631,67632],{"class":93,"line":9849},[91,67633,2165],{"class":101},[91,67635,67636],{"class":93,"line":9876},[91,67637,2378],{"emptyLinePlaceholder":17},[91,67639,67640,67642,67644],{"class":93,"line":9885},[91,67641,64035],{"class":1941},[91,67643,62149],{"class":1941},[91,67645,15551],{"class":101},[91,67647,67648,67650,67652,67654],{"class":93,"line":9891},[91,67649,54984],{"class":150},[91,67651,51412],{"class":101},[91,67653,54712],{"class":150},[91,67655,1268],{"class":101},[91,67657,67658],{"class":93,"line":9899},[91,67659,2165],{"class":101},[91,67661,67662],{"class":93,"line":9904},[91,67663,2378],{"emptyLinePlaceholder":17},[91,67665,67666,67668,67671],{"class":93,"line":16583},[91,67667,64035],{"class":1941},[91,67669,67670],{"class":1941}," .active",[91,67672,15551],{"class":101},[91,67674,67675,67677,67679,67681],{"class":93,"line":16589},[91,67676,54984],{"class":150},[91,67678,51412],{"class":101},[91,67680,60844],{"class":150},[91,67682,1268],{"class":101},[91,67684,67685],{"class":93,"line":16612},[91,67686,2165],{"class":101},[91,67688,67689,67691,67693],{"class":93,"line":16618},[91,67690,52392],{"class":101},[91,67692,5105],{"class":51275},[91,67694,51282],{"class":101},[91,67696,67697,67699,67701],{"class":93,"line":16641},[91,67698,51760],{"class":101},[91,67700,51309],{"class":51275},[91,67702,51282],{"class":101},[91,67704,67705],{"class":93,"line":16655},[91,67706,2378],{"emptyLinePlaceholder":17},[91,67708,67709,67711,67713],{"class":93,"line":16675},[91,67710,1012],{"class":101},[91,67712,51775],{"class":51275},[91,67714,51282],{"class":101},[91,67716,67717,67719,67721,67723,67725,67727],{"class":93,"line":16681},[91,67718,52119],{"class":101},[91,67720,51586],{"class":51275},[91,67722,53461],{"class":1941},[91,67724,147],{"class":101},[91,67726,64150],{"class":206},[91,67728,51282],{"class":101},[91,67730,67731,67733,67735,67737,67739,67741],{"class":93,"line":16692},[91,67732,51316],{"class":101},[91,67734,51586],{"class":51275},[91,67736,53461],{"class":1941},[91,67738,147],{"class":101},[91,67740,64165],{"class":206},[91,67742,51282],{"class":101},[91,67744,67745,67747,67749,67751,67753],{"class":93,"line":16715},[91,67746,55209],{"class":101},[91,67748,63],{"class":51275},[91,67750,64176],{"class":101},[91,67752,63],{"class":51275},[91,67754,51282],{"class":101},[91,67756,67757,67759,67761],{"class":93,"line":16737},[91,67758,55209],{"class":101},[91,67760,1109],{"class":51275},[91,67762,51282],{"class":101},[91,67764,67765,67767,67769,67771,67773,67775,67777,67779,67781,67783,67785,67787,67789,67792,67794,67796,67798,67800],{"class":93,"line":16742},[91,67766,55277],{"class":101},[91,67768,49],{"class":51275},[91,67770,61027],{"class":101},[91,67772,340],{"class":51275},[91,67774,53461],{"class":1941},[91,67776,147],{"class":101},[91,67778,59681],{"class":206},[91,67780,61032],{"class":1941},[91,67782,147],{"class":101},[91,67784,64211],{"class":206},[91,67786,53926],{"class":1941},[91,67788,147],{"class":101},[91,67790,67791],{"class":206},"\"0\"",[91,67793,64214],{"class":101},[91,67795,340],{"class":51275},[91,67797,55289],{"class":101},[91,67799,49],{"class":51275},[91,67801,51282],{"class":101},[91,67803,67804,67806,67808,67810,67812,67814,67816,67818,67820,67822,67824,67826,67828,67830,67832],{"class":93,"line":16748},[91,67805,55277],{"class":101},[91,67807,49],{"class":51275},[91,67809,61027],{"class":101},[91,67811,340],{"class":51275},[91,67813,61032],{"class":1941},[91,67815,147],{"class":101},[91,67817,64211],{"class":206},[91,67819,53926],{"class":1941},[91,67821,147],{"class":101},[91,67823,3656],{"class":206},[91,67825,64241],{"class":101},[91,67827,340],{"class":51275},[91,67829,55289],{"class":101},[91,67831,49],{"class":51275},[91,67833,51282],{"class":101},[91,67835,67836,67838,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864],{"class":93,"line":16762},[91,67837,55277],{"class":101},[91,67839,49],{"class":51275},[91,67841,61027],{"class":101},[91,67843,340],{"class":51275},[91,67845,61032],{"class":1941},[91,67847,147],{"class":101},[91,67849,64211],{"class":206},[91,67851,53926],{"class":1941},[91,67853,147],{"class":101},[91,67855,3679],{"class":206},[91,67857,64268],{"class":101},[91,67859,340],{"class":51275},[91,67861,55289],{"class":101},[91,67863,49],{"class":51275},[91,67865,51282],{"class":101},[91,67867,67868,67870,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896],{"class":93,"line":16775},[91,67869,55277],{"class":101},[91,67871,49],{"class":51275},[91,67873,61027],{"class":101},[91,67875,340],{"class":51275},[91,67877,61032],{"class":1941},[91,67879,147],{"class":101},[91,67881,64211],{"class":206},[91,67883,53926],{"class":1941},[91,67885,147],{"class":101},[91,67887,3692],{"class":206},[91,67889,64295],{"class":101},[91,67891,340],{"class":51275},[91,67893,55289],{"class":101},[91,67895,49],{"class":51275},[91,67897,51282],{"class":101},[91,67899,67900,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928],{"class":93,"line":16780},[91,67901,55277],{"class":101},[91,67903,49],{"class":51275},[91,67905,61027],{"class":101},[91,67907,340],{"class":51275},[91,67909,61032],{"class":1941},[91,67911,147],{"class":101},[91,67913,64211],{"class":206},[91,67915,53926],{"class":1941},[91,67917,147],{"class":101},[91,67919,3705],{"class":206},[91,67921,64322],{"class":101},[91,67923,340],{"class":51275},[91,67925,55289],{"class":101},[91,67927,49],{"class":51275},[91,67929,51282],{"class":101},[91,67931,67932,67934,67936],{"class":93,"line":16794},[91,67933,55382],{"class":101},[91,67935,1109],{"class":51275},[91,67937,51282],{"class":101},[91,67939,67940,67942,67944],{"class":93,"line":16799},[91,67941,51751],{"class":101},[91,67943,51586],{"class":51275},[91,67945,51282],{"class":101},[91,67947,67948,67950,67952,67954,67956,67958],{"class":93,"line":16805},[91,67949,51316],{"class":101},[91,67951,51586],{"class":51275},[91,67953,53461],{"class":1941},[91,67955,147],{"class":101},[91,67957,64359],{"class":206},[91,67959,51282],{"class":101},[91,67961,67962,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992],{"class":93,"line":16810},[91,67963,55209],{"class":101},[91,67965,51586],{"class":51275},[91,67967,53461],{"class":1941},[91,67969,147],{"class":101},[91,67971,64374],{"class":206},[91,67973,61027],{"class":101},[91,67975,1440],{"class":51275},[91,67977,55214],{"class":1941},[91,67979,147],{"class":101},[91,67981,64385],{"class":206},[91,67983,55222],{"class":1941},[91,67985,147],{"class":101},[91,67987,7631],{"class":206},[91,67989,64394],{"class":101},[91,67991,51586],{"class":51275},[91,67993,51282],{"class":101},[91,67995,67996,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026],{"class":93,"line":16824},[91,67997,55209],{"class":101},[91,67999,51586],{"class":51275},[91,68001,53461],{"class":1941},[91,68003,147],{"class":101},[91,68005,62598],{"class":206},[91,68007,61027],{"class":101},[91,68009,1440],{"class":51275},[91,68011,55214],{"class":1941},[91,68013,147],{"class":101},[91,68015,64421],{"class":206},[91,68017,55222],{"class":1941},[91,68019,147],{"class":101},[91,68021,7631],{"class":206},[91,68023,64394],{"class":101},[91,68025,51586],{"class":51275},[91,68027,51282],{"class":101},[91,68029,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060],{"class":93,"line":16829},[91,68031,55209],{"class":101},[91,68033,51586],{"class":51275},[91,68035,53461],{"class":1941},[91,68037,147],{"class":101},[91,68039,62598],{"class":206},[91,68041,61027],{"class":101},[91,68043,1440],{"class":51275},[91,68045,55214],{"class":1941},[91,68047,147],{"class":101},[91,68049,64456],{"class":206},[91,68051,55222],{"class":1941},[91,68053,147],{"class":101},[91,68055,7631],{"class":206},[91,68057,64394],{"class":101},[91,68059,51586],{"class":51275},[91,68061,51282],{"class":101},[91,68063,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094],{"class":93,"line":16834},[91,68065,55209],{"class":101},[91,68067,51586],{"class":51275},[91,68069,53461],{"class":1941},[91,68071,147],{"class":101},[91,68073,62598],{"class":206},[91,68075,61027],{"class":101},[91,68077,1440],{"class":51275},[91,68079,55214],{"class":1941},[91,68081,147],{"class":101},[91,68083,64491],{"class":206},[91,68085,55222],{"class":1941},[91,68087,147],{"class":101},[91,68089,7631],{"class":206},[91,68091,64394],{"class":101},[91,68093,51586],{"class":51275},[91,68095,51282],{"class":101},[91,68097,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128],{"class":93,"line":16848},[91,68099,55209],{"class":101},[91,68101,51586],{"class":51275},[91,68103,53461],{"class":1941},[91,68105,147],{"class":101},[91,68107,62598],{"class":206},[91,68109,61027],{"class":101},[91,68111,1440],{"class":51275},[91,68113,55214],{"class":1941},[91,68115,147],{"class":101},[91,68117,64526],{"class":206},[91,68119,55222],{"class":1941},[91,68121,147],{"class":101},[91,68123,7631],{"class":206},[91,68125,64394],{"class":101},[91,68127,51586],{"class":51275},[91,68129,51282],{"class":101},[91,68131,68132,68134,68136],{"class":93,"line":16860},[91,68133,51751],{"class":101},[91,68135,51586],{"class":51275},[91,68137,51282],{"class":101},[91,68139,68140,68142,68144],{"class":93,"line":16865},[91,68141,52392],{"class":101},[91,68143,51586],{"class":51275},[91,68145,51282],{"class":101},[91,68147,68148,68150,68152],{"class":93,"line":16878},[91,68149,52119],{"class":101},[91,68151,51788],{"class":51275},[91,68153,51282],{"class":101},[91,68155,68156],{"class":93,"line":16883},[91,68157,68158],{"class":160},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[91,68160,68161],{"class":93,"line":16888},[91,68162,68163],{"class":160},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[91,68165,68166,68168,68170,68172,68174,68176,68178,68181],{"class":93,"line":16893},[91,68167,11200],{"class":97},[91,68169,61267],{"class":150},[91,68171,13543],{"class":97},[91,68173,54371],{"class":101},[91,68175,54374],{"class":1941},[91,68177,102],{"class":101},[91,68179,68180],{"class":206},"'.tab-nav ul'",[91,68182,108],{"class":101},[91,68184,68185],{"class":93,"line":16906},[91,68186,68187],{"class":160},"    \u002F\u002F 2.添加事件\n",[91,68189,68190,68192,68194,68196,68198,68200,68202,68204,68206],{"class":93,"line":16911},[91,68191,66929],{"class":101},[91,68193,57788],{"class":1941},[91,68195,102],{"class":101},[91,68197,57793],{"class":206},[91,68199,12414],{"class":101},[91,68201,54424],{"class":97},[91,68203,1636],{"class":101},[91,68205,176],{"class":5195},[91,68207,12421],{"class":101},[91,68209,68210,68212,68214],{"class":93,"line":32608},[91,68211,58219],{"class":101},[91,68213,66985],{"class":1941},[91,68215,66988],{"class":101},[91,68217,68218],{"class":93,"line":32614},[91,68219,68220],{"class":160},"      \u002F\u002Fe.targer是我们点击的对象\n",[91,68222,68223,68225,68227,68229,68232],{"class":93,"line":32620},[91,68224,54455],{"class":97},[91,68226,67009],{"class":101},[91,68228,54461],{"class":97},[91,68230,68231],{"class":206}," 'A'",[91,68233,12421],{"class":101},[91,68235,68236,68238,68240,68242,68245,68247,68249,68251,68253],{"class":93,"line":32626},[91,68237,51900],{"class":101},[91,68239,54374],{"class":1941},[91,68241,102],{"class":101},[91,68243,68244],{"class":206},"'.active'",[91,68246,56978],{"class":101},[91,68248,56981],{"class":1941},[91,68250,102],{"class":101},[91,68252,64689],{"class":206},[91,68254,108],{"class":101},[91,68256,68257,68260,68262,68264,68266],{"class":93,"line":32632},[91,68258,68259],{"class":101},"        e.target.classList.",[91,68261,5313],{"class":1941},[91,68263,102],{"class":101},[91,68265,64689],{"class":206},[91,68267,108],{"class":101},[91,68269,68270],{"class":93,"line":32643},[91,68271,2378],{"emptyLinePlaceholder":17},[91,68273,68274],{"class":93,"line":32649},[91,68275,68276],{"class":160},"        \u002F\u002F 下面大盒子模块\n",[91,68278,68279],{"class":93,"line":32669},[91,68280,68281],{"class":160},"        \u002F\u002F console.log(e.target.dataset.id)\n",[91,68283,68284,68286,68288,68290,68292],{"class":93,"line":32675},[91,68285,61245],{"class":97},[91,68287,3010],{"class":150},[91,68289,13543],{"class":97},[91,68291,45541],{"class":97},[91,68293,68294],{"class":101},"e.target.dataset.id\n",[91,68296,68297,68299,68301,68303,68305,68307,68309,68311,68313],{"class":93,"line":32686},[91,68298,51900],{"class":101},[91,68300,54374],{"class":1941},[91,68302,102],{"class":101},[91,68304,64737],{"class":206},[91,68306,56978],{"class":101},[91,68308,56981],{"class":1941},[91,68310,102],{"class":101},[91,68312,64689],{"class":206},[91,68314,108],{"class":101},[91,68316,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341],{"class":93,"line":32692},[91,68318,51900],{"class":101},[91,68320,54374],{"class":1941},[91,68322,102],{"class":101},[91,68324,64763],{"class":206},[91,68326,543],{"class":101},[91,68328,45541],{"class":97},[91,68330,25093],{"class":150},[91,68332,57007],{"class":206},[91,68334,56978],{"class":101},[91,68336,5313],{"class":1941},[91,68338,102],{"class":101},[91,68340,64689],{"class":206},[91,68342,108],{"class":101},[91,68344,68345],{"class":93,"line":32698},[91,68346,2378],{"emptyLinePlaceholder":17},[91,68348,68349],{"class":93,"line":32704},[91,68350,52373],{"class":101},[91,68352,68353],{"class":93,"line":32710},[91,68354,33436],{"class":101},[91,68356,68357,68359,68361],{"class":93,"line":32716},[91,68358,52392],{"class":101},[91,68360,51788],{"class":51275},[91,68362,51282],{"class":101},[91,68364,68365,68367,68369],{"class":93,"line":32722},[91,68366,51760],{"class":101},[91,68368,51775],{"class":51275},[91,68370,51282],{"class":101},[91,68372,68373],{"class":93,"line":32728},[91,68374,2378],{"emptyLinePlaceholder":17},[91,68376,68377,68379,68381],{"class":93,"line":32748},[91,68378,51760],{"class":101},[91,68380,50610],{"class":51275},[91,68382,51282],{"class":101},[63,68384,68386],{"id":68385},"_333-页面加载事件","3.3.3 页面加载事件",[46,68388,68389],{},[49,68390,68391],{},"load",[38,68393,68394],{},[1440,68395],{"alt":10,"src":68396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[38,68398,68399],{},"window代表整个窗口，比document还要大",[38,68401,68402],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[38,68404,68405],{},"img.addEventListener('load', function () {",[38,68407,68408],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[38,68410,52439],{},[46,68412,68413],{"start":11},[49,68414,68415],{},"DOMContentLoaded",[38,68417,68418],{},[1440,68419],{"alt":10,"src":68420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[38,68422,68423],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[63,68425,68427],{"id":68426},"_334-元素滚动事件","3.3.4 元素滚动事件",[38,68429,68430],{},[1440,68431],{"alt":10,"src":68432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[38,68434,68435],{},[1440,68436],{"alt":10,"src":68437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[38,68439,68440],{},[1440,68441],{"alt":10,"src":68442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[38,68444,68445],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[38,68447,68448],{},"获得的是数字型数据，不带单位",[38,68450,68451],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[38,68453,68454],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[38,68456,68457],{},"它是通过document.documentElement来获取",[38,68459,68460],{},[1440,68461],{"alt":10,"src":68462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[38,68464,68465],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[63,68467,68469],{"id":68468},"_335-页面缩放事件","3.3.5 页面缩放事件",[38,68471,68472],{},[1440,68473],{"alt":10,"src":68474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[38,68476,68477],{},[1440,68478],{"alt":10,"src":68479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[63,68481,68483],{"id":68482},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[38,68485,68486],{},[1440,68487],{"alt":10,"src":68488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[38,68490,68491],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[38,68493,68494],{},[1440,68495],{"alt":10,"src":68496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[38,68498,68499],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[38,68501,68502],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[38,68504,68505],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[38,68507,68508],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[38,68510,68511],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[38,68513,68514],{},[1440,68515],{"alt":10,"src":68516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[38,68518,68519],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[38,68521,68522],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[38,68524,68525],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[38,68527,68528],{},"e.pageX-box.getBoundingClientRect()",[63,68530,68532],{"id":68531},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[38,68534,68535],{},[1440,68536],{"alt":10,"src":68537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[38,68539,68540],{},"这个是相对于视口来说的，它是个方法，不是属性值",[63,68542,68544],{"id":68543},"_338-总结","3.3.8 总结",[38,68546,68547],{},[1440,68548],{"alt":10,"src":68549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[38,68551,68552],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[38,68554,68555],{},"修改盒子的宽高只能通过width和height来实现",[63,68557,68559],{"id":68558},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[83,68561,68563],{"className":50608,"code":68562,"language":50610,"meta":10,"style":10},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[88,68564,68565,68570,68575,68580,68585],{"__ignoreMap":10},[91,68566,68567],{"class":93,"line":94},[91,68568,68569],{"class":101},"\u002F* 页面滑动 *\u002F\n",[91,68571,68572],{"class":93,"line":11},[91,68573,68574],{"class":101},"html {\n",[91,68576,68577],{"class":93,"line":1157},[91,68578,68579],{"class":101},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[91,68581,68582],{"class":93,"line":1172},[91,68583,68584],{"class":101},"  scroll-behavior: smooth;\n",[91,68586,68587],{"class":93,"line":1178},[91,68588,1543],{"class":101},[38,68590,68591],{},"默认是auto",[63,68593,68595],{"id":68594},"_3310-日期对象","3.3.10 日期对象",[21977,68597,68599],{"id":68598},"_33101-实例化","3.3.10.1 实例化",[38,68601,68602],{},[1440,68603],{"alt":10,"src":68604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21977,68606,68608],{"id":68607},"_33102-时期对象方法","3.3.10.2 时期对象方法",[38,68610,68611],{},[1440,68612],{"alt":10,"src":68613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[38,68615,68616],{},"月份+1",[38,68618,68619],{},"老外认为第一天为0，星期天",[38,68621,68622],{},"方法使用的时候必须要跟括号",[38,68624,68625],{},"快速获得日期",[38,68627,68628],{},"\u002F\u002F 得到年月日",[38,68630,68631],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[38,68633,68634],{},"\u002F\u002F 得到当地日期",[38,68636,68637],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[38,68639,68640],{},"\u002F\u002F 得到当地时间",[38,68642,68643],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[38,68645,68646],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[38,68648,68649],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51788,68651,68652],{},"\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",[38,68654,68655],{},"学会去封装函数！",[21977,68657,68659],{"id":68658},"_33103-时间戳","3.3.10.3 时间戳",[38,68661,68662],{},[1440,68663],{"alt":10,"src":68664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[38,68666,68667],{},[1440,68668],{"alt":10,"src":68669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[38,68671,68672],{},"三种方法记住一个就可以",[63,68674,68676],{"id":68675},"_3311-节点操作","3.3.11 节点操作",[21977,68678,68680],{"id":68679},"_33111-dom节点","3.3.11.1 DOM节点",[38,68682,68683],{},[1440,68684],{"alt":10,"src":68685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[38,68687,68688],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21977,68690,68692],{"id":68691},"_33112-查找节点","3.3.11.2 查找节点",[38,68694,68695],{},"前边的document.querySelector()是获取的元素",[38,68697,68698],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[38,68700,68701],{},[1440,68702],{"alt":10,"src":68703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[46,68705,68706],{},[49,68707,68708],{},"父节点",[38,68710,68711],{},[1440,68712],{"alt":10,"src":68713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[46,68715,68716],{"start":11},[49,68717,68718],{},"子节点",[38,68720,68721],{},[1440,68722],{"alt":10,"src":68723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[38,68725,68726],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[38,68728,68729],{},"children获得的是伪数组，是亲儿子",[46,68731,68732],{"start":1157},[49,68733,68734],{},"兄弟节点",[38,68736,68737],{},[1440,68738],{"alt":10,"src":68739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21977,68741,68743],{"id":68742},"_33113-增加节点","3.3.11.3 增加节点",[38,68745,68746],{},[1440,68747],{"alt":10,"src":68748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[38,68750,68751],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[38,68753,68754],{},[1440,68755],{"alt":10,"src":68756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[38,68758,68759],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[38,68761,68762],{},"下面是写法的部分展示，就按照下边的格式来写",[38,68764,68765],{},"例：",[51788,68767,68768],{},"\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",[38,68770,68771],{},[1440,68772],{"alt":10,"src":68773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[38,68775,68776],{},"false只克隆标签，里边的内容不会克隆过来",[83,68778,68780],{"className":50608,"code":68779,"language":50610,"meta":10,"style":10},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[88,68781,68782],{"__ignoreMap":10},[91,68783,68784],{"class":93,"line":94},[91,68785,68779],{"class":101},[21977,68787,68789],{"id":68788},"_33114-删除节点","3.3.11.4 删除节点",[38,68791,68792],{},[1440,68793],{"alt":10,"src":68794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[38,68796,68797],{},"父亲删儿子",[38,68799,68800],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[63,68802,68804],{"id":68803},"_3312-m端事件","3.3.12 M端事件",[38,68806,68807],{},"M端就是移动端",[38,68809,68810],{},[1440,68811],{"alt":10,"src":68812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[63,68814,68816],{"id":68815},"_3313-插件","3.3.13 插件",[38,68818,68819],{},"要熟悉官网！！！",[38,68821,68822],{},[340,68823,68824],{"href":68824,"rel":68825},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23839],[38,68827,68828],{},[340,68829,68830],{"href":68830,"rel":68831},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23839],[63,68833,68835],{"id":68834},"_3314-学生信息表","3.3.14 学生信息表",[46,68837,68838,68841,68844,68847,68850,68853,68856,68859],{},[49,68839,68840],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[49,68842,68843],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[49,68845,68846],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[49,68848,68849],{},"用好表单元素自带的属性，value,name等",[49,68851,68852],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[49,68854,68855],{},"不要忘记事件对象",[49,68857,68858],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[49,68860,68861],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[38,68863,68864],{},"结构：",[83,68866,68868],{"className":50608,"code":68867,"language":50610,"meta":10,"style":10},"\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",[88,68869,68870,68880,68894,68898,68906,68920,68940,68961,68974,68998,69006,69010,69018,69031,69052,69080,69108,69113,69135,69155,69174,69182,69210,69232,69252,69272,69292,69312,69332,69340,69360,69368,69372,69385,69393,69401,69409,69422,69435,69448,69461,69474,69487,69500,69508,69516,69524,69529,69534,69539,69544,69549,69554,69559,69564,69569,69574,69579,69584,69589,69597,69605,69613,69617,69637,69656,69676,69696,69716,69736,69740,69745,69765,69770,69780,69785,69790,69810,69832,69837,69847,69851,69855,69860,69865,69894,69908,69923,69927,69931,69935,69940,69951,69964,69969,69974,69979,69984,69989,69993,69998,70003,70012,70017,70022,70034,70039,70046,70050,70055,70065,70070,70080,70085,70113,70134,70144,70164,70182,70199,70216,70233,70250,70254,70264,70269,70274,70279,70290,70294,70298,70302,70307,70312,70333,70345,70350,70355,70360,70374,70379,70386,70390,70394,70402,70406,70414,70418],{"__ignoreMap":10},[91,68871,68872,68874,68876,68878],{"class":93,"line":94},[91,68873,51272],{"class":101},[91,68875,51276],{"class":51275},[91,68877,51279],{"class":1941},[91,68879,51282],{"class":101},[91,68881,68882,68884,68886,68888,68890,68892],{"class":93,"line":11},[91,68883,1012],{"class":101},[91,68885,50610],{"class":51275},[91,68887,51291],{"class":1941},[91,68889,147],{"class":101},[91,68891,51296],{"class":206},[91,68893,51282],{"class":101},[91,68895,68896],{"class":93,"line":1157},[91,68897,2378],{"emptyLinePlaceholder":17},[91,68899,68900,68902,68904],{"class":93,"line":1172},[91,68901,1012],{"class":101},[91,68903,51309],{"class":51275},[91,68905,51282],{"class":101},[91,68907,68908,68910,68912,68914,68916,68918],{"class":93,"line":1178},[91,68909,52119],{"class":101},[91,68911,51319],{"class":51275},[91,68913,51322],{"class":1941},[91,68915,147],{"class":101},[91,68917,51327],{"class":206},[91,68919,59102],{"class":101},[91,68921,68922,68924,68926,68928,68930,68932,68934,68936,68938],{"class":93,"line":1192},[91,68923,52119],{"class":101},[91,68925,51319],{"class":51275},[91,68927,14899],{"class":1941},[91,68929,147],{"class":101},[91,68931,51366],{"class":206},[91,68933,51346],{"class":1941},[91,68935,147],{"class":101},[91,68937,51373],{"class":206},[91,68939,59102],{"class":101},[91,68941,68942,68944,68946,68948,68950,68952,68954,68956,68959],{"class":93,"line":1198},[91,68943,52119],{"class":101},[91,68945,51319],{"class":51275},[91,68947,51338],{"class":1941},[91,68949,147],{"class":101},[91,68951,51343],{"class":206},[91,68953,51346],{"class":1941},[91,68955,147],{"class":101},[91,68957,68958],{"class":206},"\"ie=edge\"",[91,68960,59102],{"class":101},[91,68962,68963,68965,68967,68970,68972],{"class":93,"line":1289},[91,68964,52119],{"class":101},[91,68966,51382],{"class":51275},[91,68968,68969],{"class":101},">学生信息管理\u003C\u002F",[91,68971,51382],{"class":51275},[91,68973,51282],{"class":101},[91,68975,68976,68978,68981,68984,68986,68989,68991,68993,68996],{"class":93,"line":1295},[91,68977,52119],{"class":101},[91,68979,68980],{"class":51275},"link",[91,68982,68983],{"class":1941}," rel",[91,68985,147],{"class":101},[91,68987,68988],{"class":206},"\"stylesheet\"",[91,68990,61032],{"class":1941},[91,68992,147],{"class":101},[91,68994,68995],{"class":206},"\"css\u002Findex.css\"",[91,68997,59102],{"class":101},[91,68999,69000,69002,69004],{"class":93,"line":1307},[91,69001,51760],{"class":101},[91,69003,51309],{"class":51275},[91,69005,51282],{"class":101},[91,69007,69008],{"class":93,"line":1590},[91,69009,2378],{"emptyLinePlaceholder":17},[91,69011,69012,69014,69016],{"class":93,"line":1595},[91,69013,1012],{"class":101},[91,69015,51775],{"class":51275},[91,69017,51282],{"class":101},[91,69019,69020,69022,69024,69027,69029],{"class":93,"line":1601},[91,69021,52119],{"class":101},[91,69023,29],{"class":51275},[91,69025,69026],{"class":101},">新增学员\u003C\u002F",[91,69028,29],{"class":51275},[91,69030,51282],{"class":101},[91,69032,69033,69035,69037,69039,69041,69043,69046,69048,69050],{"class":93,"line":1606},[91,69034,52119],{"class":101},[91,69036,66600],{"class":51275},[91,69038,53461],{"class":1941},[91,69040,147],{"class":101},[91,69042,62639],{"class":206},[91,69044,69045],{"class":1941}," autocomplete",[91,69047,147],{"class":101},[91,69049,31751],{"class":206},[91,69051,51282],{"class":101},[91,69053,69054,69057,69059,69061,69063,69065,69067,69069,69072,69074,69076,69078],{"class":93,"line":1620},[91,69055,69056],{"class":101},"    姓名：\u003C",[91,69058,53796],{"class":51275},[91,69060,53799],{"class":1941},[91,69062,147],{"class":101},[91,69064,62674],{"class":206},[91,69066,53461],{"class":1941},[91,69068,147],{"class":101},[91,69070,69071],{"class":206},"\"uname\"",[91,69073,14899],{"class":1941},[91,69075,147],{"class":101},[91,69077,69071],{"class":206},[91,69079,59102],{"class":101},[91,69081,69082,69085,69087,69089,69091,69093,69095,69097,69100,69102,69104,69106],{"class":93,"line":1625},[91,69083,69084],{"class":101},"    年龄：\u003C",[91,69086,53796],{"class":51275},[91,69088,53799],{"class":1941},[91,69090,147],{"class":101},[91,69092,62674],{"class":206},[91,69094,53461],{"class":1941},[91,69096,147],{"class":101},[91,69098,69099],{"class":206},"\"age\"",[91,69101,14899],{"class":1941},[91,69103,147],{"class":101},[91,69105,69099],{"class":206},[91,69107,59102],{"class":101},[91,69109,69110],{"class":93,"line":1631},[91,69111,69112],{"class":101},"    性别:\n",[91,69114,69115,69117,69120,69122,69124,69127,69129,69131,69133],{"class":93,"line":1652},[91,69116,51316],{"class":101},[91,69118,69119],{"class":51275},"select",[91,69121,14899],{"class":1941},[91,69123,147],{"class":101},[91,69125,69126],{"class":206},"\"gender\"",[91,69128,53461],{"class":1941},[91,69130,147],{"class":101},[91,69132,69126],{"class":206},[91,69134,51282],{"class":101},[91,69136,69137,69139,69142,69144,69146,69148,69151,69153],{"class":93,"line":1657},[91,69138,55209],{"class":101},[91,69140,69141],{"class":51275},"option",[91,69143,66626],{"class":1941},[91,69145,147],{"class":101},[91,69147,9940],{"class":206},[91,69149,69150],{"class":101},">男\u003C\u002F",[91,69152,69141],{"class":51275},[91,69154,51282],{"class":101},[91,69156,69157,69159,69161,69163,69165,69167,69170,69172],{"class":93,"line":1671},[91,69158,55209],{"class":101},[91,69160,69141],{"class":51275},[91,69162,66626],{"class":1941},[91,69164,147],{"class":101},[91,69166,10009],{"class":206},[91,69168,69169],{"class":101},">女\u003C\u002F",[91,69171,69141],{"class":51275},[91,69173,51282],{"class":101},[91,69175,69176,69178,69180],{"class":93,"line":1676},[91,69177,51751],{"class":101},[91,69179,69119],{"class":51275},[91,69181,51282],{"class":101},[91,69183,69184,69187,69189,69191,69193,69195,69197,69199,69202,69204,69206,69208],{"class":93,"line":1705},[91,69185,69186],{"class":101},"    薪资：\u003C",[91,69188,53796],{"class":51275},[91,69190,53799],{"class":1941},[91,69192,147],{"class":101},[91,69194,62674],{"class":206},[91,69196,53461],{"class":1941},[91,69198,147],{"class":101},[91,69200,69201],{"class":206},"\"salary\"",[91,69203,14899],{"class":1941},[91,69205,147],{"class":101},[91,69207,69201],{"class":206},[91,69209,59102],{"class":101},[91,69211,69212,69215,69217,69219,69221,69224,69226,69228,69230],{"class":93,"line":1710},[91,69213,69214],{"class":101},"    就业城市：\u003C",[91,69216,69119],{"class":51275},[91,69218,14899],{"class":1941},[91,69220,147],{"class":101},[91,69222,69223],{"class":206},"\"city\"",[91,69225,53461],{"class":1941},[91,69227,147],{"class":101},[91,69229,69223],{"class":206},[91,69231,51282],{"class":101},[91,69233,69234,69236,69238,69240,69242,69245,69248,69250],{"class":93,"line":1727},[91,69235,55209],{"class":101},[91,69237,69141],{"class":51275},[91,69239,66626],{"class":1941},[91,69241,147],{"class":101},[91,69243,69244],{"class":206},"\"北京\"",[91,69246,69247],{"class":101},">北京\u003C\u002F",[91,69249,69141],{"class":51275},[91,69251,51282],{"class":101},[91,69253,69254,69256,69258,69260,69262,69265,69268,69270],{"class":93,"line":1732},[91,69255,55209],{"class":101},[91,69257,69141],{"class":51275},[91,69259,66626],{"class":1941},[91,69261,147],{"class":101},[91,69263,69264],{"class":206},"\"上海\"",[91,69266,69267],{"class":101},">上海\u003C\u002F",[91,69269,69141],{"class":51275},[91,69271,51282],{"class":101},[91,69273,69274,69276,69278,69280,69282,69285,69288,69290],{"class":93,"line":1737},[91,69275,55209],{"class":101},[91,69277,69141],{"class":51275},[91,69279,66626],{"class":1941},[91,69281,147],{"class":101},[91,69283,69284],{"class":206},"\"广州\"",[91,69286,69287],{"class":101},">广州\u003C\u002F",[91,69289,69141],{"class":51275},[91,69291,51282],{"class":101},[91,69293,69294,69296,69298,69300,69302,69305,69308,69310],{"class":93,"line":1742},[91,69295,55209],{"class":101},[91,69297,69141],{"class":51275},[91,69299,66626],{"class":1941},[91,69301,147],{"class":101},[91,69303,69304],{"class":206},"\"深圳\"",[91,69306,69307],{"class":101},">深圳\u003C\u002F",[91,69309,69141],{"class":51275},[91,69311,51282],{"class":101},[91,69313,69314,69316,69318,69320,69322,69325,69328,69330],{"class":93,"line":1756},[91,69315,55209],{"class":101},[91,69317,69141],{"class":51275},[91,69319,66626],{"class":1941},[91,69321,147],{"class":101},[91,69323,69324],{"class":206},"\"曹县\"",[91,69326,69327],{"class":101},">曹县\u003C\u002F",[91,69329,69141],{"class":51275},[91,69331,51282],{"class":101},[91,69333,69334,69336,69338],{"class":93,"line":1761},[91,69335,51751],{"class":101},[91,69337,69119],{"class":51275},[91,69339,51282],{"class":101},[91,69341,69342,69344,69346,69348,69350,69353,69356,69358],{"class":93,"line":2555},[91,69343,51316],{"class":101},[91,69345,53862],{"class":51275},[91,69347,53461],{"class":1941},[91,69349,147],{"class":101},[91,69351,69352],{"class":206},"\"add\"",[91,69354,69355],{"class":101},">录入\u003C\u002F",[91,69357,53862],{"class":51275},[91,69359,51282],{"class":101},[91,69361,69362,69364,69366],{"class":93,"line":2569},[91,69363,52392],{"class":101},[91,69365,66600],{"class":51275},[91,69367,51282],{"class":101},[91,69369,69370],{"class":93,"line":2577},[91,69371,2378],{"emptyLinePlaceholder":17},[91,69373,69374,69376,69378,69381,69383],{"class":93,"line":2582},[91,69375,52119],{"class":101},[91,69377,29],{"class":51275},[91,69379,69380],{"class":101},">就业榜\u003C\u002F",[91,69382,29],{"class":51275},[91,69384,51282],{"class":101},[91,69386,69387,69389,69391],{"class":93,"line":2588},[91,69388,52119],{"class":101},[91,69390,239],{"class":51275},[91,69392,51282],{"class":101},[91,69394,69395,69397,69399],{"class":93,"line":2594},[91,69396,51316],{"class":101},[91,69398,242],{"class":51275},[91,69400,51282],{"class":101},[91,69402,69403,69405,69407],{"class":93,"line":2599},[91,69404,55209],{"class":101},[91,69406,245],{"class":51275},[91,69408,51282],{"class":101},[91,69410,69411,69413,69415,69418,69420],{"class":93,"line":7927},[91,69412,55277],{"class":101},[91,69414,248],{"class":51275},[91,69416,69417],{"class":101},">序号\u003C\u002F",[91,69419,248],{"class":51275},[91,69421,51282],{"class":101},[91,69423,69424,69426,69428,69431,69433],{"class":93,"line":7951},[91,69425,55277],{"class":101},[91,69427,248],{"class":51275},[91,69429,69430],{"class":101},">姓名\u003C\u002F",[91,69432,248],{"class":51275},[91,69434,51282],{"class":101},[91,69436,69437,69439,69441,69444,69446],{"class":93,"line":7956},[91,69438,55277],{"class":101},[91,69440,248],{"class":51275},[91,69442,69443],{"class":101},">年龄\u003C\u002F",[91,69445,248],{"class":51275},[91,69447,51282],{"class":101},[91,69449,69450,69452,69454,69457,69459],{"class":93,"line":7962},[91,69451,55277],{"class":101},[91,69453,248],{"class":51275},[91,69455,69456],{"class":101},">性别\u003C\u002F",[91,69458,248],{"class":51275},[91,69460,51282],{"class":101},[91,69462,69463,69465,69467,69470,69472],{"class":93,"line":7989},[91,69464,55277],{"class":101},[91,69466,248],{"class":51275},[91,69468,69469],{"class":101},">薪资\u003C\u002F",[91,69471,248],{"class":51275},[91,69473,51282],{"class":101},[91,69475,69476,69478,69480,69483,69485],{"class":93,"line":7994},[91,69477,55277],{"class":101},[91,69479,248],{"class":51275},[91,69481,69482],{"class":101},">就业城市\u003C\u002F",[91,69484,248],{"class":51275},[91,69486,51282],{"class":101},[91,69488,69489,69491,69493,69496,69498],{"class":93,"line":8000},[91,69490,55277],{"class":101},[91,69492,248],{"class":51275},[91,69494,69495],{"class":101},">操作\u003C\u002F",[91,69497,248],{"class":51275},[91,69499,51282],{"class":101},[91,69501,69502,69504,69506],{"class":93,"line":8012},[91,69503,55382],{"class":101},[91,69505,245],{"class":51275},[91,69507,51282],{"class":101},[91,69509,69510,69512,69514],{"class":93,"line":8024},[91,69511,51751],{"class":101},[91,69513,242],{"class":51275},[91,69515,51282],{"class":101},[91,69517,69518,69520,69522],{"class":93,"line":8036},[91,69519,51316],{"class":101},[91,69521,286],{"class":51275},[91,69523,51282],{"class":101},[91,69525,69526],{"class":93,"line":9695},[91,69527,69528],{"class":160},"      \u003C!-- \n",[91,69530,69531],{"class":93,"line":9720},[91,69532,69533],{"class":160},"        \u003Ctr>\n",[91,69535,69536],{"class":93,"line":9743},[91,69537,69538],{"class":160},"          \u003Ctd>1001\u003C\u002Ftd>\n",[91,69540,69541],{"class":93,"line":9767},[91,69542,69543],{"class":160},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[91,69545,69546],{"class":93,"line":9772},[91,69547,69548],{"class":160},"          \u003Ctd>19\u003C\u002Ftd>\n",[91,69550,69551],{"class":93,"line":9777},[91,69552,69553],{"class":160},"          \u003Ctd>男\u003C\u002Ftd>\n",[91,69555,69556],{"class":93,"line":9782},[91,69557,69558],{"class":160},"          \u003Ctd>15000\u003C\u002Ftd>\n",[91,69560,69561],{"class":93,"line":9791},[91,69562,69563],{"class":160},"          \u003Ctd>上海\u003C\u002Ftd>\n",[91,69565,69566],{"class":93,"line":9796},[91,69567,69568],{"class":160},"          \u003Ctd>\n",[91,69570,69571],{"class":93,"line":9802},[91,69572,69573],{"class":160},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[91,69575,69576],{"class":93,"line":9823},[91,69577,69578],{"class":160},"          \u003C\u002Ftd>\n",[91,69580,69581],{"class":93,"line":9829},[91,69582,69583],{"class":160},"        \u003C\u002Ftr> \n",[91,69585,69586],{"class":93,"line":9843},[91,69587,69588],{"class":160},"        -->\n",[91,69590,69591,69593,69595],{"class":93,"line":9849},[91,69592,51751],{"class":101},[91,69594,286],{"class":51275},[91,69596,51282],{"class":101},[91,69598,69599,69601,69603],{"class":93,"line":9876},[91,69600,52392],{"class":101},[91,69602,239],{"class":51275},[91,69604,51282],{"class":101},[91,69606,69607,69609,69611],{"class":93,"line":9885},[91,69608,52119],{"class":101},[91,69610,51788],{"class":51275},[91,69612,51282],{"class":101},[91,69614,69615],{"class":93,"line":9891},[91,69616,59933],{"class":160},[91,69618,69619,69621,69624,69626,69628,69630,69632,69635],{"class":93,"line":9899},[91,69620,11200],{"class":97},[91,69622,69623],{"class":150}," uname",[91,69625,13543],{"class":97},[91,69627,54371],{"class":101},[91,69629,54374],{"class":1941},[91,69631,102],{"class":101},[91,69633,69634],{"class":206},"'.uname'",[91,69636,108],{"class":101},[91,69638,69639,69641,69643,69645,69647,69649,69651,69654],{"class":93,"line":9904},[91,69640,11200],{"class":97},[91,69642,15668],{"class":150},[91,69644,13543],{"class":97},[91,69646,54371],{"class":101},[91,69648,54374],{"class":1941},[91,69650,102],{"class":101},[91,69652,69653],{"class":206},"'.age'",[91,69655,108],{"class":101},[91,69657,69658,69660,69663,69665,69667,69669,69671,69674],{"class":93,"line":16583},[91,69659,11200],{"class":97},[91,69661,69662],{"class":150}," gender",[91,69664,13543],{"class":97},[91,69666,54371],{"class":101},[91,69668,54374],{"class":1941},[91,69670,102],{"class":101},[91,69672,69673],{"class":206},"'.gender'",[91,69675,108],{"class":101},[91,69677,69678,69680,69683,69685,69687,69689,69691,69694],{"class":93,"line":16589},[91,69679,11200],{"class":97},[91,69681,69682],{"class":150}," salary",[91,69684,13543],{"class":97},[91,69686,54371],{"class":101},[91,69688,54374],{"class":1941},[91,69690,102],{"class":101},[91,69692,69693],{"class":206},"'.salary'",[91,69695,108],{"class":101},[91,69697,69698,69700,69703,69705,69707,69709,69711,69714],{"class":93,"line":16612},[91,69699,11200],{"class":97},[91,69701,69702],{"class":150}," city",[91,69704,13543],{"class":97},[91,69706,54371],{"class":101},[91,69708,54374],{"class":1941},[91,69710,102],{"class":101},[91,69712,69713],{"class":206},"'.city'",[91,69715,108],{"class":101},[91,69717,69718,69720,69723,69725,69727,69729,69731,69734],{"class":93,"line":16618},[91,69719,11200],{"class":97},[91,69721,69722],{"class":150}," tbody",[91,69724,13543],{"class":97},[91,69726,54371],{"class":101},[91,69728,54374],{"class":1941},[91,69730,102],{"class":101},[91,69732,69733],{"class":206},"'tbody'",[91,69735,108],{"class":101},[91,69737,69738],{"class":93,"line":16641},[91,69739,2378],{"emptyLinePlaceholder":17},[91,69741,69742],{"class":93,"line":16655},[91,69743,69744],{"class":160},"    \u002F\u002F 获取所有带有name属性的元素\n",[91,69746,69747,69749,69752,69754,69756,69758,69760,69763],{"class":93,"line":16675},[91,69748,11200],{"class":97},[91,69750,69751],{"class":150}," items",[91,69753,13543],{"class":97},[91,69755,54371],{"class":101},[91,69757,55656],{"class":1941},[91,69759,102],{"class":101},[91,69761,69762],{"class":206},"'[name]'",[91,69764,108],{"class":101},[91,69766,69767],{"class":93,"line":16681},[91,69768,69769],{"class":160},"    \u002F\u002F 声明一个空的数组\n",[91,69771,69772,69774,69776,69778],{"class":93,"line":16692},[91,69773,11200],{"class":97},[91,69775,57670],{"class":150},[91,69777,13543],{"class":97},[91,69779,51813],{"class":101},[91,69781,69782],{"class":93,"line":16715},[91,69783,69784],{"class":160},"    \u002F\u002F 1.录入模块\n",[91,69786,69787],{"class":93,"line":16737},[91,69788,69789],{"class":160},"    \u002F\u002F 1.1这是一个表单提交事件\n",[91,69791,69792,69794,69797,69799,69801,69803,69805,69808],{"class":93,"line":16742},[91,69793,11200],{"class":97},[91,69795,69796],{"class":150}," info",[91,69798,13543],{"class":97},[91,69800,54371],{"class":101},[91,69802,54374],{"class":1941},[91,69804,102],{"class":101},[91,69806,69807],{"class":206},"'.info'",[91,69809,108],{"class":101},[91,69811,69812,69815,69817,69819,69822,69824,69826,69828,69830],{"class":93,"line":16748},[91,69813,69814],{"class":101},"    info.",[91,69816,57788],{"class":1941},[91,69818,102],{"class":101},[91,69820,69821],{"class":206},"'submit'",[91,69823,12414],{"class":101},[91,69825,54424],{"class":97},[91,69827,1636],{"class":101},[91,69829,176],{"class":5195},[91,69831,12421],{"class":101},[91,69833,69834],{"class":93,"line":16762},[91,69835,69836],{"class":160},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[91,69838,69839,69842,69845],{"class":93,"line":16775},[91,69840,69841],{"class":101},"      e.",[91,69843,69844],{"class":1941},"preventDefault",[91,69846,1954],{"class":101},[91,69848,69849],{"class":93,"line":16780},[91,69850,59987],{"class":160},[91,69852,69853],{"class":93,"line":16794},[91,69854,2378],{"emptyLinePlaceholder":17},[91,69856,69857],{"class":93,"line":16799},[91,69858,69859],{"class":160},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[91,69861,69862],{"class":93,"line":16805},[91,69863,69864],{"class":160},"      \u002F\u002F 先遍历循环\n",[91,69866,69867,69869,69871,69873,69875,69877,69879,69881,69883,69886,69888,69890,69892],{"class":93,"line":16810},[91,69868,52259],{"class":97},[91,69870,1636],{"class":101},[91,69872,51822],{"class":97},[91,69874,9417],{"class":101},[91,69876,147],{"class":97},[91,69878,4071],{"class":150},[91,69880,9424],{"class":101},[91,69882,1012],{"class":97},[91,69884,69885],{"class":101}," items.",[91,69887,51943],{"class":150},[91,69889,3192],{"class":101},[91,69891,2270],{"class":97},[91,69893,12421],{"class":101},[91,69895,69896,69898,69901,69903,69906],{"class":93,"line":16824},[91,69897,2475],{"class":97},[91,69899,69900],{"class":101}," (items[i].value ",[91,69902,54461],{"class":97},[91,69904,69905],{"class":206}," ''",[91,69907,12421],{"class":101},[91,69909,69910,69913,69916,69918,69921],{"class":93,"line":16829},[91,69911,69912],{"class":97},"          return",[91,69914,69915],{"class":1941}," alert",[91,69917,102],{"class":101},[91,69919,69920],{"class":206},"'输入内容不能为空'",[91,69922,108],{"class":101},[91,69924,69925],{"class":93,"line":16834},[91,69926,2507],{"class":101},[91,69928,69929],{"class":93,"line":16848},[91,69930,52373],{"class":101},[91,69932,69933],{"class":93,"line":16860},[91,69934,2378],{"emptyLinePlaceholder":17},[91,69936,69937],{"class":93,"line":16865},[91,69938,69939],{"class":160},"      \u002F\u002F 创建新的对象\n",[91,69941,69942,69944,69947,69949],{"class":93,"line":16878},[91,69943,58203],{"class":97},[91,69945,69946],{"class":150}," obj",[91,69948,13543],{"class":97},[91,69950,15551],{"class":101},[91,69952,69953,69956,69958,69960,69962],{"class":93,"line":16883},[91,69954,69955],{"class":101},"        stuID: arr.",[91,69957,51943],{"class":150},[91,69959,45541],{"class":97},[91,69961,25093],{"class":150},[91,69963,31441],{"class":101},[91,69965,69966],{"class":93,"line":16888},[91,69967,69968],{"class":101},"        uname: uname.value,\n",[91,69970,69971],{"class":93,"line":16893},[91,69972,69973],{"class":101},"        age: age.value,\n",[91,69975,69976],{"class":93,"line":16906},[91,69977,69978],{"class":101},"        gender: gender.value,\n",[91,69980,69981],{"class":93,"line":16911},[91,69982,69983],{"class":101},"        salary: salary.value,\n",[91,69985,69986],{"class":93,"line":32608},[91,69987,69988],{"class":101},"        city: city.value\n",[91,69990,69991],{"class":93,"line":32614},[91,69992,52373],{"class":101},[91,69994,69995],{"class":93,"line":32620},[91,69996,69997],{"class":160},"      \u002F\u002F console.log(obj);\n",[91,69999,70000],{"class":93,"line":32626},[91,70001,70002],{"class":160},"      \u002F\u002F 追加到数组里面\n",[91,70004,70005,70007,70009],{"class":93,"line":32632},[91,70006,57982],{"class":101},[91,70008,51859],{"class":1941},[91,70010,70011],{"class":101},"(obj)\n",[91,70013,70014],{"class":93,"line":32643},[91,70015,70016],{"class":160},"      \u002F\u002F console.log(arr);\n",[91,70018,70019],{"class":93,"line":32649},[91,70020,70021],{"class":160},"      \u002F\u002F 清空表单  reset重置表单\n",[91,70023,70024,70027,70029,70032],{"class":93,"line":32669},[91,70025,70026],{"class":150},"      this",[91,70028,660],{"class":101},[91,70030,70031],{"class":1941},"reset",[91,70033,1954],{"class":101},[91,70035,70036],{"class":93,"line":32675},[91,70037,70038],{"class":160},"      \u002F\u002F 调用渲染函数\n",[91,70040,70041,70044],{"class":93,"line":32686},[91,70042,70043],{"class":1941},"      render",[91,70045,1954],{"class":101},[91,70047,70048],{"class":93,"line":32692},[91,70049,33436],{"class":101},[91,70051,70052],{"class":93,"line":32698},[91,70053,70054],{"class":160},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[91,70056,70057,70060,70063],{"class":93,"line":32704},[91,70058,70059],{"class":97},"    function",[91,70061,70062],{"class":1941}," render",[91,70064,10832],{"class":101},[91,70066,70067],{"class":93,"line":32710},[91,70068,70069],{"class":160},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[91,70071,70072,70075,70077],{"class":93,"line":32716},[91,70073,70074],{"class":101},"      tbody.innerHTML ",[91,70076,147],{"class":97},[91,70078,70079],{"class":206}," ''\n",[91,70081,70082],{"class":93,"line":32722},[91,70083,70084],{"class":160},"      \u002F\u002F 遍历数组\n",[91,70086,70087,70089,70091,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111],{"class":93,"line":32728},[91,70088,52259],{"class":97},[91,70090,1636],{"class":101},[91,70092,51822],{"class":97},[91,70094,9417],{"class":101},[91,70096,147],{"class":97},[91,70098,4071],{"class":150},[91,70100,9424],{"class":101},[91,70102,1012],{"class":97},[91,70104,51940],{"class":101},[91,70106,51943],{"class":150},[91,70108,3192],{"class":101},[91,70110,2270],{"class":97},[91,70112,12421],{"class":101},[91,70114,70115,70117,70120,70122,70124,70127,70129,70132],{"class":93,"line":32748},[91,70116,61245],{"class":97},[91,70118,70119],{"class":150}," tr",[91,70121,13543],{"class":97},[91,70123,54371],{"class":101},[91,70125,70126],{"class":1941},"createElement",[91,70128,102],{"class":101},[91,70130,70131],{"class":206},"'tr'",[91,70133,108],{"class":101},[91,70135,70136,70139,70141],{"class":93,"line":32754},[91,70137,70138],{"class":101},"        tr.innerHTML ",[91,70140,147],{"class":97},[91,70142,70143],{"class":206}," `\n",[91,70145,70146,70149,70151,70153,70155,70158,70161],{"class":93,"line":32770},[91,70147,70148],{"class":206},"        \u003Ctd>${",[91,70150,3858],{"class":101},[91,70152,992],{"class":206},[91,70154,543],{"class":101},[91,70156,70157],{"class":206},"].",[91,70159,70160],{"class":101},"stuID",[91,70162,70163],{"class":206},"}\u003C\u002Ftd>\n",[91,70165,70166,70169,70171,70173,70175,70177,70180],{"class":93,"line":32776},[91,70167,70168],{"class":206},"          \u003Ctd>${",[91,70170,3858],{"class":101},[91,70172,992],{"class":206},[91,70174,543],{"class":101},[91,70176,70157],{"class":206},[91,70178,70179],{"class":101},"uname",[91,70181,70163],{"class":206},[91,70183,70184,70186,70188,70190,70192,70194,70197],{"class":93,"line":32790},[91,70185,70168],{"class":206},[91,70187,3858],{"class":101},[91,70189,992],{"class":206},[91,70191,543],{"class":101},[91,70193,70157],{"class":206},[91,70195,70196],{"class":101},"age",[91,70198,70163],{"class":206},[91,70200,70201,70203,70205,70207,70209,70211,70214],{"class":93,"line":32796},[91,70202,70168],{"class":206},[91,70204,3858],{"class":101},[91,70206,992],{"class":206},[91,70208,543],{"class":101},[91,70210,70157],{"class":206},[91,70212,70213],{"class":101},"gender",[91,70215,70163],{"class":206},[91,70217,70218,70220,70222,70224,70226,70228,70231],{"class":93,"line":32811},[91,70219,70168],{"class":206},[91,70221,3858],{"class":101},[91,70223,992],{"class":206},[91,70225,543],{"class":101},[91,70227,70157],{"class":206},[91,70229,70230],{"class":101},"salary",[91,70232,70163],{"class":206},[91,70234,70235,70237,70239,70241,70243,70245,70248],{"class":93,"line":32817},[91,70236,70168],{"class":206},[91,70238,3858],{"class":101},[91,70240,992],{"class":206},[91,70242,543],{"class":101},[91,70244,70157],{"class":206},[91,70246,70247],{"class":101},"city",[91,70249,70163],{"class":206},[91,70251,70252],{"class":93,"line":32826},[91,70253,69568],{"class":206},[91,70255,70256,70259,70261],{"class":93,"line":32832},[91,70257,70258],{"class":206},"            \u003Ca href=\"javascript:\" data-id=${",[91,70260,543],{"class":101},[91,70262,70263],{"class":206},"}>删除\u003C\u002Fa>\n",[91,70265,70266],{"class":93,"line":32841},[91,70267,70268],{"class":206},"          \u003C\u002Ftd> \n",[91,70270,70271],{"class":93,"line":32847},[91,70272,70273],{"class":206},"          `\n",[91,70275,70276],{"class":93,"line":32853},[91,70277,70278],{"class":160},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[91,70280,70281,70284,70287],{"class":93,"line":32862},[91,70282,70283],{"class":101},"        tbody.",[91,70285,70286],{"class":1941},"appendChild",[91,70288,70289],{"class":101},"(tr)\n",[91,70291,70292],{"class":93,"line":32868},[91,70293,52373],{"class":101},[91,70295,70296],{"class":93,"line":32879},[91,70297,2165],{"class":101},[91,70299,70300],{"class":93,"line":32885},[91,70301,2378],{"emptyLinePlaceholder":17},[91,70303,70304],{"class":93,"line":32904},[91,70305,70306],{"class":160},"    \u002F\u002F 3.删除委托\n",[91,70308,70309],{"class":93,"line":32910},[91,70310,70311],{"class":160},"    \u002F\u002F 3.1 事件委托 tbody\n",[91,70313,70314,70317,70319,70321,70323,70325,70327,70329,70331],{"class":93,"line":32921},[91,70315,70316],{"class":101},"    tbody.",[91,70318,57788],{"class":1941},[91,70320,102],{"class":101},[91,70322,57793],{"class":206},[91,70324,12414],{"class":101},[91,70326,54424],{"class":97},[91,70328,1636],{"class":101},[91,70330,176],{"class":5195},[91,70332,12421],{"class":101},[91,70334,70335,70337,70339,70341,70343],{"class":93,"line":32927},[91,70336,54455],{"class":97},[91,70338,67009],{"class":101},[91,70340,54461],{"class":97},[91,70342,68231],{"class":206},[91,70344,12421],{"class":101},[91,70346,70347],{"class":93,"line":32947},[91,70348,70349],{"class":160},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[91,70351,70352],{"class":93,"line":32963},[91,70353,70354],{"class":160},"        \u002F\u002F console.log(e.target.dataset.id);\n",[91,70356,70357],{"class":93,"line":32969},[91,70358,70359],{"class":160},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[91,70361,70362,70365,70367,70370,70372],{"class":93,"line":32983},[91,70363,70364],{"class":101},"        arr.",[91,70366,57985],{"class":1941},[91,70368,70369],{"class":101},"(e.target.dataset.id, ",[91,70371,319],{"class":150},[91,70373,108],{"class":101},[91,70375,70376],{"class":93,"line":32989},[91,70377,70378],{"class":160},"        \u002F\u002F 重新渲染一次\n",[91,70380,70381,70384],{"class":93,"line":32995},[91,70382,70383],{"class":1941},"        render",[91,70385,1954],{"class":101},[91,70387,70388],{"class":93,"line":33006},[91,70389,52373],{"class":101},[91,70391,70392],{"class":93,"line":33012},[91,70393,33436],{"class":101},[91,70395,70396,70398,70400],{"class":93,"line":33018},[91,70397,52392],{"class":101},[91,70399,51788],{"class":51275},[91,70401,51282],{"class":101},[91,70403,70404],{"class":93,"line":33028},[91,70405,2378],{"emptyLinePlaceholder":17},[91,70407,70408,70410,70412],{"class":93,"line":33034},[91,70409,51760],{"class":101},[91,70411,51775],{"class":51275},[91,70413,51282],{"class":101},[91,70415,70416],{"class":93,"line":33045},[91,70417,2378],{"emptyLinePlaceholder":17},[91,70419,70420,70422,70424],{"class":93,"line":33051},[91,70421,51760],{"class":101},[91,70423,50610],{"class":51275},[91,70425,51282],{"class":101},[38,70427,70428],{},"样式：",[83,70430,70434],{"className":70431,"code":70432,"language":70433,"meta":10,"style":10},"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",[88,70435,70436,70441,70451,70460,70464,70468,70473,70483,70488,70492,70497,70507,70512,70521,70525,70529,70534,70539,70549,70559,70564,70568,70573,70582,70592,70597,70607,70617,70621,70626,70634,70638,70643,70648,70653,70661,70670,70674,70679,70688,70692,70697,70706,70710,70715,70724,70733,70741,70745,70750,70759,70769,70778,70788,70794,70803,70813,70823,70827,70832,70841,70849,70859,70867,70876,70885,70895,70903,70907,70912,70921],{"__ignoreMap":10},[91,70437,70438],{"class":93,"line":94},[91,70439,70440],{"class":101},"* {\n",[91,70442,70443,70446,70448],{"class":93,"line":11},[91,70444,70445],{"class":51275},"  margin",[91,70447,51412],{"class":101},[91,70449,70450],{"class":206},"0;\n",[91,70452,70453,70456,70458],{"class":93,"line":1157},[91,70454,70455],{"class":206},"  padding",[91,70457,51412],{"class":101},[91,70459,70450],{"class":206},[91,70461,70462],{"class":93,"line":1172},[91,70463,1543],{"class":101},[91,70465,70466],{"class":93,"line":1178},[91,70467,2378],{"emptyLinePlaceholder":17},[91,70469,70470],{"class":93,"line":1192},[91,70471,70472],{"class":206},"a {\n",[91,70474,70475,70478,70480],{"class":93,"line":1198},[91,70476,70477],{"class":51275},"  text-decoration",[91,70479,51412],{"class":101},[91,70481,70482],{"class":206},"none;\n",[91,70484,70485],{"class":93,"line":1289},[91,70486,70487],{"class":206},"  color:#721c24;\n",[91,70489,70490],{"class":93,"line":1295},[91,70491,1543],{"class":101},[91,70493,70494],{"class":93,"line":1307},[91,70495,70496],{"class":206},"h1 {\n",[91,70498,70499,70502,70504],{"class":93,"line":1590},[91,70500,70501],{"class":51275},"  text-align",[91,70503,51412],{"class":101},[91,70505,70506],{"class":206},"center;\n",[91,70508,70509],{"class":93,"line":1595},[91,70510,70511],{"class":206},"  color:#333;\n",[91,70513,70514,70516,70518],{"class":93,"line":1601},[91,70515,70445],{"class":51275},[91,70517,51412],{"class":101},[91,70519,70520],{"class":206},"20px 0;\n",[91,70522,70523],{"class":93,"line":1606},[91,70524,2652],{"class":101},[91,70526,70527],{"class":93,"line":1620},[91,70528,1543],{"class":101},[91,70530,70531],{"class":93,"line":1625},[91,70532,70533],{"class":206},"table {\n",[91,70535,70536],{"class":93,"line":1631},[91,70537,70538],{"class":206},"  margin:0 auto;\n",[91,70540,70541,70544,70546],{"class":93,"line":1652},[91,70542,70543],{"class":51275},"  width",[91,70545,51412],{"class":101},[91,70547,70548],{"class":206},"800px;\n",[91,70550,70551,70554,70556],{"class":93,"line":1657},[91,70552,70553],{"class":51275},"  border-collapse",[91,70555,51412],{"class":101},[91,70557,70558],{"class":206},"collapse;\n",[91,70560,70561],{"class":93,"line":1671},[91,70562,70563],{"class":206},"  color:#004085;\n",[91,70565,70566],{"class":93,"line":1676},[91,70567,1543],{"class":101},[91,70569,70570],{"class":93,"line":1705},[91,70571,70572],{"class":206},"th {\n",[91,70574,70575,70577,70579],{"class":93,"line":1710},[91,70576,70455],{"class":51275},[91,70578,51412],{"class":101},[91,70580,70581],{"class":206},"10px;\n",[91,70583,70584,70587,70589],{"class":93,"line":1727},[91,70585,70586],{"class":51275},"  background",[91,70588,51412],{"class":101},[91,70590,70591],{"class":160},"#cfe5ff;\n",[91,70593,70594],{"class":93,"line":1732},[91,70595,70596],{"class":101},"  \n",[91,70598,70599,70602,70604],{"class":93,"line":1737},[91,70600,70601],{"class":51275},"  font-size",[91,70603,51412],{"class":101},[91,70605,70606],{"class":206},"20px;\n",[91,70608,70609,70612,70614],{"class":93,"line":1742},[91,70610,70611],{"class":51275},"  font-weight",[91,70613,51412],{"class":101},[91,70615,70616],{"class":206},"400;\n",[91,70618,70619],{"class":93,"line":1756},[91,70620,1543],{"class":101},[91,70622,70623],{"class":93,"line":1761},[91,70624,70625],{"class":206},"td,th {\n",[91,70627,70628,70631],{"class":93,"line":2555},[91,70629,70630],{"class":206},"  border:1px solid",[91,70632,70633],{"class":160}," #b8daff;\n",[91,70635,70636],{"class":93,"line":2569},[91,70637,1543],{"class":101},[91,70639,70640],{"class":93,"line":2577},[91,70641,70642],{"class":206},"td {\n",[91,70644,70645],{"class":93,"line":2582},[91,70646,70647],{"class":206},"  padding:10px;\n",[91,70649,70650],{"class":93,"line":2588},[91,70651,70652],{"class":206},"  color:#666;\n",[91,70654,70655,70657,70659],{"class":93,"line":2594},[91,70656,70501],{"class":51275},[91,70658,51412],{"class":101},[91,70660,70506],{"class":206},[91,70662,70663,70665,70667],{"class":93,"line":2599},[91,70664,70601],{"class":51275},[91,70666,51412],{"class":101},[91,70668,70669],{"class":206},"16px;\n",[91,70671,70672],{"class":93,"line":7927},[91,70673,1543],{"class":101},[91,70675,70676],{"class":93,"line":7951},[91,70677,70678],{"class":206},"tbody tr {\n",[91,70680,70681,70683,70685],{"class":93,"line":7956},[91,70682,70586],{"class":51275},[91,70684,51412],{"class":101},[91,70686,70687],{"class":160},"#fff;\n",[91,70689,70690],{"class":93,"line":7962},[91,70691,1543],{"class":101},[91,70693,70694],{"class":93,"line":7989},[91,70695,70696],{"class":206},"tbody tr:hover {\n",[91,70698,70699,70701,70703],{"class":93,"line":7994},[91,70700,70586],{"class":51275},[91,70702,51412],{"class":101},[91,70704,70705],{"class":160},"#e1ecf8;\n",[91,70707,70708],{"class":93,"line":8000},[91,70709,1543],{"class":101},[91,70711,70712],{"class":93,"line":8012},[91,70713,70714],{"class":206},".info {\n",[91,70716,70717,70719,70721],{"class":93,"line":8024},[91,70718,70543],{"class":51275},[91,70720,51412],{"class":101},[91,70722,70723],{"class":206},"900px;\n",[91,70725,70726,70728,70730],{"class":93,"line":8036},[91,70727,70445],{"class":51275},[91,70729,51412],{"class":101},[91,70731,70732],{"class":206},"50px auto;\n",[91,70734,70735,70737,70739],{"class":93,"line":9695},[91,70736,70501],{"class":51275},[91,70738,51412],{"class":101},[91,70740,70506],{"class":206},[91,70742,70743],{"class":93,"line":9720},[91,70744,1543],{"class":101},[91,70746,70747],{"class":93,"line":9743},[91,70748,70749],{"class":206},".info  input, .info select {\n",[91,70751,70752,70754,70756],{"class":93,"line":9767},[91,70753,70543],{"class":51275},[91,70755,51412],{"class":101},[91,70757,70758],{"class":206},"80px;\n",[91,70760,70761,70764,70766],{"class":93,"line":9772},[91,70762,70763],{"class":51275},"  height",[91,70765,51412],{"class":101},[91,70767,70768],{"class":206},"27px;\n",[91,70770,70771,70774,70776],{"class":93,"line":9777},[91,70772,70773],{"class":51275},"  outline",[91,70775,51412],{"class":101},[91,70777,70482],{"class":206},[91,70779,70780,70783,70785],{"class":93,"line":9782},[91,70781,70782],{"class":51275},"  border-radius",[91,70784,51412],{"class":101},[91,70786,70787],{"class":206},"5px;\n",[91,70789,70790,70792],{"class":93,"line":9791},[91,70791,70630],{"class":206},[91,70793,70633],{"class":160},[91,70795,70796,70799,70801],{"class":93,"line":9796},[91,70797,70798],{"class":51275},"  padding-left",[91,70800,51412],{"class":101},[91,70802,70787],{"class":206},[91,70804,70805,70808,70810],{"class":93,"line":9802},[91,70806,70807],{"class":51275},"  box-sizing",[91,70809,51412],{"class":101},[91,70811,70812],{"class":206},"border-box;\n",[91,70814,70815,70818,70820],{"class":93,"line":9823},[91,70816,70817],{"class":51275},"  margin-right",[91,70819,51412],{"class":101},[91,70821,70822],{"class":206},"15px;\n",[91,70824,70825],{"class":93,"line":9829},[91,70826,1543],{"class":101},[91,70828,70829],{"class":93,"line":9843},[91,70830,70831],{"class":206},".info button {\n",[91,70833,70834,70836,70838],{"class":93,"line":9849},[91,70835,70543],{"class":51275},[91,70837,51412],{"class":101},[91,70839,70840],{"class":206},"60px;\n",[91,70842,70843,70845,70847],{"class":93,"line":9876},[91,70844,70763],{"class":51275},[91,70846,51412],{"class":101},[91,70848,70768],{"class":206},[91,70850,70851,70854,70856],{"class":93,"line":9885},[91,70852,70853],{"class":51275},"  background-color",[91,70855,51412],{"class":101},[91,70857,70858],{"class":160},"#004085;\n",[91,70860,70861,70863,70865],{"class":93,"line":9891},[91,70862,70773],{"class":51275},[91,70864,51412],{"class":101},[91,70866,70482],{"class":206},[91,70868,70869,70872,70874],{"class":93,"line":9899},[91,70870,70871],{"class":51275},"  border",[91,70873,51412],{"class":101},[91,70875,70450],{"class":206},[91,70877,70878,70881,70883],{"class":93,"line":9904},[91,70879,70880],{"class":51275},"  color",[91,70882,51412],{"class":101},[91,70884,70687],{"class":160},[91,70886,70887,70890,70892],{"class":93,"line":16583},[91,70888,70889],{"class":51275},"  cursor",[91,70891,51412],{"class":101},[91,70893,70894],{"class":206},"pointer;\n",[91,70896,70897,70899,70901],{"class":93,"line":16589},[91,70898,70782],{"class":51275},[91,70900,51412],{"class":101},[91,70902,70787],{"class":206},[91,70904,70905],{"class":93,"line":16612},[91,70906,1543],{"class":101},[91,70908,70909],{"class":93,"line":16618},[91,70910,70911],{"class":206},".info .age {\n",[91,70913,70914,70916,70918],{"class":93,"line":16641},[91,70915,70543],{"class":51275},[91,70917,51412],{"class":101},[91,70919,70920],{"class":206},"50px;\n",[91,70922,70923],{"class":93,"line":16655},[91,70924,1543],{"class":101},[38,70926,70927],{},"思路：",[38,70929,70930],{},[1440,70931],{"alt":10,"src":70932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[38,70934,70935],{},[1440,70936],{"alt":10,"src":70937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[38,70939,70940],{},[1440,70941],{"alt":10,"src":70942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[63,70944,70946],{"id":70945},"_3315-重绘回流","3.3.15 重绘回流",[38,70948,70949],{},[1440,70950],{"alt":10,"src":70951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[38,70953,70954],{},[1440,70955],{"alt":10,"src":70956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[38,70958,70959],{},[1440,70960],{"alt":10,"src":70961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[33,70963,70965],{"id":70964},"_34-bom","3.4 BOM",[38,70967,70968],{},[1440,70969],{"alt":10,"src":70970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[38,70972,70973],{},"平时写的document省略了window而已，实际上是window.document",[38,70975,70976],{},"函数也是这样，调用的时候实际为window.fn()",[38,70978,70979],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[38,70981,70982],{},"window大部分情况下可以省略",[63,70984,70986],{"id":70985},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[38,70988,70989],{},"只执行一次",[38,70991,70992],{},[1440,70993],{"alt":10,"src":70994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[38,70996,70997],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[38,70999,71000],{},[1440,71001],{"alt":10,"src":71002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[63,71004,71006],{"id":71005},"_342-js执行机制","3.4.2 JS执行机制",[38,71008,71009],{},[1440,71010],{"alt":10,"src":71011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[38,71013,71014],{},"两个的结果都是1111 3333 2222",[38,71016,71017],{},[1440,71018],{"alt":10,"src":71019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[38,71021,71022],{},[1440,71023],{"alt":10,"src":71024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[38,71026,71027],{},[1440,71028],{"alt":10,"src":71029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[38,71031,71032],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[38,71034,71035],{},"工作流程：",[38,71037,71038],{},[1440,71039],{"alt":10,"src":71040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[38,71042,71043],{},[1440,71044],{"alt":10,"src":71045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[38,71047,71048],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[38,71050,71051],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[63,71053,71055],{"id":71054},"_343-location对象","3.4.3 location对象",[38,71057,71058],{},"location对象属于window这个全局对象下的，可以 省略window",[38,71060,71061],{},[1440,71062],{"alt":10,"src":71063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[38,71065,71066],{},"href可以跳转页面",[46,71068,71069],{},[49,71070,71071],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[38,71073,71074],{},"search得到提交信息之后网站后边的地址",[38,71076,71077],{},[1440,71078],{"alt":10,"src":71079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[38,71081,71082],{},[1440,71083],{"alt":10,"src":71084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[46,71086,71087],{"start":11},[49,71088,71089],{},"hash:这个获取单页面应用#后边的地址",[38,71091,71092],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[38,71094,71095],{},[1440,71096],{"alt":10,"src":71097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[83,71099,71101],{"className":53042,"code":71100,"language":53044,"meta":10,"style":10},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[88,71102,71103,71123,71143],{"__ignoreMap":10},[91,71104,71105,71107,71109,71111,71113,71116,71119,71121],{"class":93,"line":94},[91,71106,52119],{"class":101},[91,71108,340],{"class":51275},[91,71110,61032],{"class":1941},[91,71112,147],{"class":101},[91,71114,71115],{"class":206},"\"#\u002Fmy\"",[91,71117,71118],{"class":101},">我的\u003C\u002F",[91,71120,340],{"class":51275},[91,71122,51282],{"class":101},[91,71124,71125,71127,71129,71131,71133,71136,71139,71141],{"class":93,"line":11},[91,71126,52119],{"class":101},[91,71128,340],{"class":51275},[91,71130,61032],{"class":1941},[91,71132,147],{"class":101},[91,71134,71135],{"class":206},"\"#\u002Ffriend\"",[91,71137,71138],{"class":101},">关注\u003C\u002F",[91,71140,340],{"class":51275},[91,71142,51282],{"class":101},[91,71144,71145,71147,71149,71151,71153,71156,71159,71161],{"class":93,"line":1157},[91,71146,52119],{"class":101},[91,71148,340],{"class":51275},[91,71150,61032],{"class":1941},[91,71152,147],{"class":101},[91,71154,71155],{"class":206},"\"#\u002Fdownload\"",[91,71157,71158],{"class":101},">下载\u003C\u002F",[91,71160,340],{"class":51275},[91,71162,51282],{"class":101},[38,71164,71165],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[46,71167,71168],{"start":1157},[49,71169,71170,71171,71173,71174,71176],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53691,71172],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53691,71175],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[63,71178,71180],{"id":71179},"_345-navigator对象","3.4.5 navigator对象",[38,71182,71183],{},[1440,71184],{"alt":10,"src":71185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[83,71187,71191],{"className":71188,"code":71189,"language":71190,"meta":10,"style":10},"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",[88,71192,71193,71198,71209,71221,71226,71277,71318,71323,71336,71348,71353],{"__ignoreMap":10},[91,71194,71195],{"class":93,"line":94},[91,71196,71197],{"class":160},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[91,71199,71200,71202,71204,71206],{"class":93,"line":11},[91,71201,328],{"class":97},[91,71203,102],{"class":101},[91,71205,54424],{"class":97},[91,71207,71208],{"class":101}," () { \n",[91,71210,71211,71213,71216,71218],{"class":93,"line":1157},[91,71212,6771],{"class":97},[91,71214,71215],{"class":150}," userAgent",[91,71217,13543],{"class":97},[91,71219,71220],{"class":101}," navigator.userAgent \n",[91,71222,71223],{"class":93,"line":1172},[91,71224,71225],{"class":160},"\u002F\u002F 验证是否为Android或iPhone \n",[91,71227,71228,71230,71233,71235,71238,71241,71243,71245,71248,71250,71253,71257,71259,71261,71263,71266,71268,71270,71272,71274],{"class":93,"line":1178},[91,71229,6771],{"class":97},[91,71231,71232],{"class":150}," android",[91,71234,13543],{"class":97},[91,71236,71237],{"class":101}," userAgent.",[91,71239,71240],{"class":1941},"match",[91,71242,102],{"class":101},[91,71244,686],{"class":206},[91,71246,71247],{"class":47952},"(Android);",[91,71249,1088],{"class":97},[91,71251,71252],{"class":150},"[\\s",[91,71254,71256],{"class":71255},"snhLl","\\\u002F",[91,71258,1042],{"class":150},[91,71260,583],{"class":97},[91,71262,102],{"class":47952},[91,71264,71265],{"class":150},"[\\d.]",[91,71267,583],{"class":97},[91,71269,531],{"class":47952},[91,71271,1088],{"class":97},[91,71273,686],{"class":206},[91,71275,71276],{"class":101},") \n",[91,71278,71279,71281,71284,71286,71288,71290,71292,71294,71297,71300,71303,71305,71307,71310,71312,71314,71316],{"class":93,"line":1192},[91,71280,6771],{"class":97},[91,71282,71283],{"class":150}," iphone",[91,71285,13543],{"class":97},[91,71287,71237],{"class":101},[91,71289,71240],{"class":1941},[91,71291,102],{"class":101},[91,71293,686],{"class":206},[91,71295,71296],{"class":47952},"(iPhone",[91,71298,71299],{"class":150},"\\s",[91,71301,71302],{"class":47952},"OS)",[91,71304,71299],{"class":150},[91,71306,102],{"class":47952},[91,71308,71309],{"class":150},"[\\d_]",[91,71311,583],{"class":97},[91,71313,531],{"class":47952},[91,71315,686],{"class":206},[91,71317,71276],{"class":101},[91,71319,71320],{"class":93,"line":1198},[91,71321,71322],{"class":160},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[91,71324,71325,71327,71330,71333],{"class":93,"line":1289},[91,71326,1509],{"class":97},[91,71328,71329],{"class":101}," (android ",[91,71331,71332],{"class":97},"||",[91,71334,71335],{"class":101}," iphone) { \n",[91,71337,71338,71341,71343,71346],{"class":93,"line":1295},[91,71339,71340],{"class":101},"location.href ",[91,71342,147],{"class":97},[91,71344,71345],{"class":206}," 'http:\u002F\u002Fm.itcast.cn'",[91,71347,2652],{"class":101},[91,71349,71350],{"class":93,"line":1307},[91,71351,71352],{"class":101},"} \n",[91,71354,71355],{"class":93,"line":1590},[91,71356,71357],{"class":101},"})()\n",[63,71359,71361],{"id":71360},"_346-histroy对象","3.4.6 histroy对象",[38,71363,71364],{},[1440,71365],{"alt":10,"src":71366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[38,71368,71369],{},"浏览器地址的前进与后退!!!",[38,71371,71372],{},"history.back() 等效于 history.go(-1)",[38,71374,71375],{},"history.forward() 等效于 history.go(1)",[33,71377,71379],{"id":71378},"_35-本地存储","3.5 本地存储",[46,71381,71382,71385,71388],{},[49,71383,71384],{},"数据存储在用户浏览器中",[49,71386,71387],{},"设置、读取方便、甚至页面刷新不丢失数据",[49,71389,71390],{},"容量较大，sessionStorage和localStorage约 5M 左右",[63,71392,71394],{"id":71393},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[38,71396,71397],{},"只能存储字符串",[38,71399,71400],{},[1440,71401],{"alt":10,"src":71402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[38,71404,71405],{},[1440,71406],{"alt":10,"src":71407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[38,71409,71410],{},"键值对要加引号,不然就会当变量来看了",[38,71412,71413],{},"localStorage.setItem('uname', 'pink')",[38,71415,71416],{},"刷新之后信息不再丢失",[38,71418,71419],{},"操作key,value会跟着变",[38,71421,71422],{},"删除只删除键就可以,即名字",[38,71424,71413],{},[38,71426,71427],{},"改:",[38,71429,71430],{},"localStorage.setItem('uname','red')",[38,71432,71433],{},"有这个键就是改,没有这个键就是改",[38,71435,71436],{},[1440,71437],{"alt":10,"src":71438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[38,71440,71441],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[38,71443,71444],{},[1440,71445],{"alt":10,"src":71446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[38,71448,71449],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[63,71451,71453],{"id":71452},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[38,71455,71456],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[38,71458,71459],{},"特性:",[46,71461,71462,71465,71468,71471],{},[49,71463,71464],{},"生命周期为关闭浏览器窗口",[49,71466,71467],{},"在同一个窗口(页面)下数据可以共享",[49,71469,71470],{},"以键值对的形式存储使用",[49,71472,71473],{},"用法跟localStorage 基本相同",[63,71475,71477],{"id":71476},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[38,71479,71480],{},"本地只能存储字符串,无法直接存储复杂数据类型",[83,71482,71484],{"className":53042,"code":71483,"language":53044,"meta":10,"style":10},"\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",[88,71485,71486,71494,71499,71504,71509,71514,71518,71523,71528],{"__ignoreMap":10},[91,71487,71488,71490,71492],{"class":93,"line":94},[91,71489,1012],{"class":101},[91,71491,51788],{"class":51275},[91,71493,51282],{"class":101},[91,71495,71496],{"class":93,"line":11},[91,71497,71498],{"class":101},"    const obj = {\n",[91,71500,71501],{"class":93,"line":1157},[91,71502,71503],{"class":101},"      uname: 'pink老师',\n",[91,71505,71506],{"class":93,"line":1172},[91,71507,71508],{"class":101},"      age: 18,\n",[91,71510,71511],{"class":93,"line":1178},[91,71512,71513],{"class":101},"      gender: '女'\n",[91,71515,71516],{"class":93,"line":1192},[91,71517,2165],{"class":101},[91,71519,71520],{"class":93,"line":1198},[91,71521,71522],{"class":101},"    \u002F\u002F 存储复杂数据类型\n",[91,71524,71525],{"class":93,"line":1289},[91,71526,71527],{"class":101},"    localStorage.setItem('obj', obj)\n",[91,71529,71530,71532,71534],{"class":93,"line":1295},[91,71531,52392],{"class":101},[91,71533,51788],{"class":51275},[91,71535,51282],{"class":101},[38,71537,71538],{},[1440,71539],{"alt":10,"src":71540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[38,71542,71543],{},"如果获取一下数据:",[38,71545,71546],{},"log(localStorage.getItem('obj'))",[38,71548,71549],{},[1440,71550],{"alt":10,"src":71551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[38,71553,71554],{},"发现直接存对象是使用不了的!!!",[21977,71556,71558],{"id":71557},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[38,71560,71561],{},[1440,71562],{"alt":10,"src":71563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[83,71565,71567],{"className":50608,"code":71566,"language":50610,"meta":10,"style":10},"\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",[88,71568,71569,71577,71587,71597,71606,71614,71618,71622,71648,71667,71675,71679,71684,71689],{"__ignoreMap":10},[91,71570,71571,71573,71575],{"class":93,"line":94},[91,71572,1012],{"class":101},[91,71574,51788],{"class":51275},[91,71576,51282],{"class":101},[91,71578,71579,71581,71583,71585],{"class":93,"line":11},[91,71580,11200],{"class":97},[91,71582,69946],{"class":150},[91,71584,13543],{"class":97},[91,71586,15551],{"class":101},[91,71588,71589,71592,71595],{"class":93,"line":1157},[91,71590,71591],{"class":101},"      uname: ",[91,71593,71594],{"class":206},"'pink老师'",[91,71596,31441],{"class":101},[91,71598,71599,71602,71604],{"class":93,"line":1172},[91,71600,71601],{"class":101},"      age: ",[91,71603,752],{"class":150},[91,71605,31441],{"class":101},[91,71607,71608,71611],{"class":93,"line":1178},[91,71609,71610],{"class":101},"      gender: ",[91,71612,71613],{"class":206},"'女'\n",[91,71615,71616],{"class":93,"line":1192},[91,71617,2165],{"class":101},[91,71619,71620],{"class":93,"line":1198},[91,71621,71522],{"class":160},[91,71623,71624,71627,71630,71632,71635,71637,71640,71642,71645],{"class":93,"line":1289},[91,71625,71626],{"class":101},"  localStorage.",[91,71628,71629],{"class":1941},"setItem",[91,71631,102],{"class":101},[91,71633,71634],{"class":206},"'obj'",[91,71636,12414],{"class":101},[91,71638,71639],{"class":150},"JSON",[91,71641,660],{"class":101},[91,71643,71644],{"class":1941},"stringify",[91,71646,71647],{"class":101},"(obj))\n",[91,71649,71650,71653,71655,71658,71661,71663,71665],{"class":93,"line":1295},[91,71651,71652],{"class":101},"  console.",[91,71654,58222],{"class":1941},[91,71656,71657],{"class":101},"(localStorage.",[91,71659,71660],{"class":1941},"getItem",[91,71662,102],{"class":101},[91,71664,71634],{"class":206},[91,71666,30472],{"class":101},[91,71668,71669,71671,71673],{"class":93,"line":1307},[91,71670,52392],{"class":101},[91,71672,51788],{"class":51275},[91,71674,51282],{"class":101},[91,71676,71677],{"class":93,"line":1590},[91,71678,70596],{"class":101},[91,71680,71681],{"class":93,"line":1595},[91,71682,71683],{"class":101},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[91,71685,71686],{"class":93,"line":1601},[91,71687,71688],{"class":101},"  类型是字符串的\n",[91,71690,71691],{"class":93,"line":1606},[91,71692,71693],{"class":101},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21977,71695,71697],{"id":71696},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[38,71699,71700],{},[1440,71701],{"alt":10,"src":71702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[38,71704,71705],{},[1440,71706],{"alt":10,"src":71707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[83,71709,71711],{"className":53042,"code":71710,"language":53044,"meta":10,"style":10},"  \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",[88,71712,71713,71721,71725,71729,71733,71737,71741,71746,71751,71756,71761,71766,71771,71776,71781],{"__ignoreMap":10},[91,71714,71715,71717,71719],{"class":93,"line":94},[91,71716,52119],{"class":101},[91,71718,51788],{"class":51275},[91,71720,51282],{"class":101},[91,71722,71723],{"class":93,"line":11},[91,71724,71498],{"class":101},[91,71726,71727],{"class":93,"line":1157},[91,71728,71503],{"class":101},[91,71730,71731],{"class":93,"line":1172},[91,71732,71508],{"class":101},[91,71734,71735],{"class":93,"line":1178},[91,71736,71513],{"class":101},[91,71738,71739],{"class":93,"line":1192},[91,71740,2165],{"class":101},[91,71742,71743],{"class":93,"line":1198},[91,71744,71745],{"class":101},"    \u002F\u002F 1.存储复杂数据类型\n",[91,71747,71748],{"class":93,"line":1289},[91,71749,71750],{"class":101},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[91,71752,71753],{"class":93,"line":1295},[91,71754,71755],{"class":101},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[91,71757,71758],{"class":93,"line":1307},[91,71759,71760],{"class":101},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[91,71762,71763],{"class":93,"line":1590},[91,71764,71765],{"class":101},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[91,71767,71768],{"class":93,"line":1595},[91,71769,71770],{"class":101},"    \u002F\u002F 取\n",[91,71772,71773],{"class":93,"line":1601},[91,71774,71775],{"class":101},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[91,71777,71778],{"class":93,"line":1606},[91,71779,71780],{"class":101},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[91,71782,71783,71785,71787],{"class":93,"line":1620},[91,71784,52392],{"class":101},[91,71786,51788],{"class":51275},[91,71788,51282],{"class":101},[38,71790,71791],{},[1440,71792],{"alt":10,"src":71793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[63,71795,71797],{"id":71796},"_356-数组map方法","3.5.6 数组map方法",[38,71799,71800],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[38,71802,71803],{},[1440,71804],{"alt":10,"src":71805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[38,71807,71808],{},[1440,71809],{"alt":10,"src":71810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[38,71812,71813,71816],{},[251,71814,71815],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[38,71818,71819],{},"map有返回值，但是forEach没有返回值",[38,71821,71822],{},"map是个方法。用的时候要加 ()",[38,71824,71825],{},"map返回的是一个数组",[63,71827,71829],{"id":71828},"_357-数组中join方法","3.5.7 数组中join方法",[38,71831,71832],{},[1440,71833],{"alt":10,"src":71834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[38,71836,71837],{},"类似于python中拼接字符串一样！",[46,71839,71840,71843,71846],{},[49,71841,71842],{},"小括号为空则逗号分开",[49,71844,71845],{},"小括号为空字符串 ''，则元素之间没有分隔符",[49,71847,71848],{},"小括号用啥符号就用进行分割",[63,71850,71852],{"id":71851},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[46,71854,71855,71858,71861,71864,71867],{},[49,71856,71857],{},"记住本地时间获取快速方式：new Date().toDateString()",[49,71859,71860],{},"尽量减少DOM操作，用好map+join的渲染方式",[49,71862,71863],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[49,71865,71866],{},"return可以实现函数的结束",[49,71868,71869],{},"禁止跳转是 preventDefault() 不要忘记",[83,71871,71873],{"className":50608,"code":71872,"language":50610,"meta":10,"style":10},"\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",[88,71874,71875,71885,71899,71903,71911,71925,71945,71957,71965,71971,71981,71991,71995,71999,72005,72015,72027,72031,72035,72042,72054,72068,72078,72082,72086,72093,72100,72107,72119,72131,72141,72153,72157,72161,72168,72175,72187,72199,72209,72221,72251,72255,72259,72266,72278,72290,72314,72324,72334,72338,72342,72350,72361,72373,72385,72397,72414,72426,72438,72442,72446,72453,72465,72477,72489,72500,72518,72531,72543,72567,72578,72582,72586,72594,72604,72608,72612,72618,72630,72641,72651,72655,72659,72665,72687,72691,72695,72701,72707,72719,72729,72741,72771,72784,72801,72805,72809,72820,72842,72852,72856,72860,72873,72883,72895,72907,72919,72931,72941,72951,72961,72972,72985,72989,72997,73005,73009,73017,73030,73050,73083,73116,73149,73175,73193,73211,73219,73245,73263,73281,73299,73317,73335,73343,73351,73369,73377,73406,73414,73422,73430,73443,73455,73467,73479,73491,73503,73516,73528,73536,73544,73552,73557,73562,73566,73570,73574,73578,73582,73586,73591,73596,73601,73606,73614,73622,73630,73635,73640,73645,73650,73655,73660,73665,73670,73675,73680,73685,73690,73695,73700,73704,73709,73714,73724,73733,73737,73742,73751,73767,73809,73849,73888,73953,73961,73965,73970,73988,73996,74001,74006,74036,74042,74047,74060,74072,74084,74096,74108,74120,74132,74136,74146,74150,74155,74160,74164,74173,74177,74182,74187,74206,74211,74231,74235,74240,74244,74249,74267,74285,74303,74322,74341,74360,74365,74371,74392,74398,74407,74413,74419,74425,74452,74465,74470,74480,74486,74492,74498,74504,74509,74515,74521,74527,74533,74566,74571,74576,74581,74586,74592,74598,74604,74615,74620,74626,74633,74647,74653,74677,74682,74687,74693,74699,74720,74726,74739,74745,74751,74757,74763,74768,74774,74780,74786,74804,74818,74824,74832,74838,74860,74865,74870,74875,74880,74885,74894,74903,74908],{"__ignoreMap":10},[91,71876,71877,71879,71881,71883],{"class":93,"line":94},[91,71878,51272],{"class":101},[91,71880,51276],{"class":51275},[91,71882,51279],{"class":1941},[91,71884,51282],{"class":101},[91,71886,71887,71889,71891,71893,71895,71897],{"class":93,"line":11},[91,71888,1012],{"class":101},[91,71890,50610],{"class":51275},[91,71892,51291],{"class":1941},[91,71894,147],{"class":101},[91,71896,51296],{"class":206},[91,71898,51282],{"class":101},[91,71900,71901],{"class":93,"line":1157},[91,71902,2378],{"emptyLinePlaceholder":17},[91,71904,71905,71907,71909],{"class":93,"line":1172},[91,71906,1012],{"class":101},[91,71908,51309],{"class":51275},[91,71910,51282],{"class":101},[91,71912,71913,71915,71917,71919,71921,71923],{"class":93,"line":1178},[91,71914,52119],{"class":101},[91,71916,51319],{"class":51275},[91,71918,51322],{"class":1941},[91,71920,147],{"class":101},[91,71922,51327],{"class":206},[91,71924,51282],{"class":101},[91,71926,71927,71929,71931,71933,71935,71937,71939,71941,71943],{"class":93,"line":1192},[91,71928,52119],{"class":101},[91,71930,51319],{"class":51275},[91,71932,14899],{"class":1941},[91,71934,147],{"class":101},[91,71936,51366],{"class":206},[91,71938,51346],{"class":1941},[91,71940,147],{"class":101},[91,71942,51373],{"class":206},[91,71944,51282],{"class":101},[91,71946,71947,71949,71951,71953,71955],{"class":93,"line":1198},[91,71948,52119],{"class":101},[91,71950,51382],{"class":51275},[91,71952,51385],{"class":101},[91,71954,51382],{"class":51275},[91,71956,51282],{"class":101},[91,71958,71959,71961,71963],{"class":93,"line":1289},[91,71960,52119],{"class":101},[91,71962,5105],{"class":51275},[91,71964,51282],{"class":101},[91,71966,71967,71969],{"class":93,"line":1295},[91,71968,6382],{"class":51275},[91,71970,15551],{"class":101},[91,71972,71973,71975,71977,71979],{"class":93,"line":1307},[91,71974,54670],{"class":150},[91,71976,51412],{"class":101},[91,71978,293],{"class":150},[91,71980,1268],{"class":101},[91,71982,71983,71985,71987,71989],{"class":93,"line":1590},[91,71984,54681],{"class":150},[91,71986,51412],{"class":101},[91,71988,293],{"class":150},[91,71990,1268],{"class":101},[91,71992,71993],{"class":93,"line":1595},[91,71994,2165],{"class":101},[91,71996,71997],{"class":93,"line":1601},[91,71998,2378],{"emptyLinePlaceholder":17},[91,72000,72001,72003],{"class":93,"line":1606},[91,72002,57254],{"class":51275},[91,72004,15551],{"class":101},[91,72006,72007,72009,72011,72013],{"class":93,"line":1620},[91,72008,57261],{"class":150},[91,72010,51412],{"class":101},[91,72012,51567],{"class":150},[91,72014,1268],{"class":101},[91,72016,72017,72019,72021,72023,72025],{"class":93,"line":1625},[91,72018,62052],{"class":150},[91,72020,51412],{"class":101},[91,72022,802],{"class":150},[91,72024,51467],{"class":97},[91,72026,1268],{"class":101},[91,72028,72029],{"class":93,"line":1631},[91,72030,2165],{"class":101},[91,72032,72033],{"class":93,"line":1652},[91,72034,2378],{"emptyLinePlaceholder":17},[91,72036,72037,72040],{"class":93,"line":1657},[91,72038,72039],{"class":1941},"    .info",[91,72041,15551],{"class":101},[91,72043,72044,72046,72048,72050,72052],{"class":93,"line":1671},[91,72045,54746],{"class":150},[91,72047,51412],{"class":101},[91,72049,51464],{"class":150},[91,72051,51467],{"class":97},[91,72053,1268],{"class":101},[91,72055,72056,72058,72060,72062,72064,72066],{"class":93,"line":1676},[91,72057,54681],{"class":150},[91,72059,51412],{"class":101},[91,72061,548],{"class":150},[91,72063,51467],{"class":97},[91,72065,51531],{"class":150},[91,72067,1268],{"class":101},[91,72069,72070,72072,72074,72076],{"class":93,"line":1705},[91,72071,57261],{"class":150},[91,72073,51412],{"class":101},[91,72075,51567],{"class":150},[91,72077,1268],{"class":101},[91,72079,72080],{"class":93,"line":1710},[91,72081,2165],{"class":101},[91,72083,72084],{"class":93,"line":1727},[91,72085,2378],{"emptyLinePlaceholder":17},[91,72087,72088,72091],{"class":93,"line":1732},[91,72089,72090],{"class":1941},"    .uname",[91,72092,31441],{"class":101},[91,72094,72095,72098],{"class":93,"line":1737},[91,72096,72097],{"class":1941},"    .age",[91,72099,31441],{"class":101},[91,72101,72102,72105],{"class":93,"line":1742},[91,72103,72104],{"class":1941},"    .salary",[91,72106,15551],{"class":101},[91,72108,72109,72111,72113,72115,72117],{"class":93,"line":1756},[91,72110,54746],{"class":150},[91,72112,51412],{"class":101},[91,72114,413],{"class":150},[91,72116,51467],{"class":97},[91,72118,1268],{"class":101},[91,72120,72121,72123,72125,72127,72129],{"class":93,"line":1761},[91,72122,54760],{"class":150},[91,72124,51412],{"class":101},[91,72126,802],{"class":150},[91,72128,51467],{"class":97},[91,72130,1268],{"class":101},[91,72132,72133,72135,72137,72139],{"class":93,"line":2555},[91,72134,61755],{"class":150},[91,72136,51412],{"class":101},[91,72138,54712],{"class":150},[91,72140,1268],{"class":101},[91,72142,72143,72145,72147,72149,72151],{"class":93,"line":2569},[91,72144,61725],{"class":150},[91,72146,51412],{"class":101},[91,72148,677],{"class":150},[91,72150,51467],{"class":97},[91,72152,1268],{"class":101},[91,72154,72155],{"class":93,"line":2577},[91,72156,2165],{"class":101},[91,72158,72159],{"class":93,"line":2582},[91,72160,2378],{"emptyLinePlaceholder":17},[91,72162,72163,72166],{"class":93,"line":2588},[91,72164,72165],{"class":1941},"    .gender",[91,72167,31441],{"class":101},[91,72169,72170,72173],{"class":93,"line":2594},[91,72171,72172],{"class":1941},"    .city",[91,72174,15551],{"class":101},[91,72176,72177,72179,72181,72183,72185],{"class":93,"line":2599},[91,72178,54746],{"class":150},[91,72180,51412],{"class":101},[91,72182,413],{"class":150},[91,72184,51467],{"class":97},[91,72186,1268],{"class":101},[91,72188,72189,72191,72193,72195,72197],{"class":93,"line":7927},[91,72190,54760],{"class":150},[91,72192,51412],{"class":101},[91,72194,927],{"class":150},[91,72196,51467],{"class":97},[91,72198,1268],{"class":101},[91,72200,72201,72203,72205,72207],{"class":93,"line":7951},[91,72202,61755],{"class":150},[91,72204,51412],{"class":101},[91,72206,54712],{"class":150},[91,72208,1268],{"class":101},[91,72210,72211,72213,72215,72217,72219],{"class":93,"line":7956},[91,72212,61725],{"class":150},[91,72214,51412],{"class":101},[91,72216,677],{"class":150},[91,72218,51467],{"class":97},[91,72220,1268],{"class":101},[91,72222,72223,72225,72227,72229,72231,72233,72236,72238,72240,72242,72245,72247,72249],{"class":93,"line":7962},[91,72224,61952],{"class":150},[91,72226,51412],{"class":101},[91,72228,319],{"class":150},[91,72230,51467],{"class":97},[91,72232,51496],{"class":150},[91,72234,72235],{"class":150}," rgb",[91,72237,102],{"class":101},[91,72239,1700],{"class":150},[91,72241,12414],{"class":101},[91,72243,72244],{"class":150},"197",[91,72246,12414],{"class":101},[91,72248,72244],{"class":150},[91,72250,2697],{"class":101},[91,72252,72253],{"class":93,"line":7989},[91,72254,2165],{"class":101},[91,72256,72257],{"class":93,"line":7994},[91,72258,2378],{"emptyLinePlaceholder":17},[91,72260,72261,72264],{"class":93,"line":8000},[91,72262,72263],{"class":51275},"    button",[91,72265,15551],{"class":101},[91,72267,72268,72270,72272,72274,72276],{"class":93,"line":8012},[91,72269,54760],{"class":150},[91,72271,51412],{"class":101},[91,72273,927],{"class":150},[91,72275,51467],{"class":97},[91,72277,1268],{"class":101},[91,72279,72280,72282,72284,72286,72288],{"class":93,"line":8024},[91,72281,54746],{"class":150},[91,72283,51412],{"class":101},[91,72285,586],{"class":150},[91,72287,51467],{"class":97},[91,72289,1268],{"class":101},[91,72291,72292,72294,72296,72299,72301,72303,72305,72308,72310,72312],{"class":93,"line":8036},[91,72293,54859],{"class":150},[91,72295,51412],{"class":101},[91,72297,72298],{"class":150},"rgb",[91,72300,102],{"class":101},[91,72302,1071],{"class":150},[91,72304,12414],{"class":101},[91,72306,72307],{"class":150},"187",[91,72309,12414],{"class":101},[91,72311,401],{"class":150},[91,72313,2697],{"class":101},[91,72315,72316,72318,72320,72322],{"class":93,"line":9695},[91,72317,57391],{"class":150},[91,72319,51412],{"class":101},[91,72321,60817],{"class":150},[91,72323,1268],{"class":101},[91,72325,72326,72328,72330,72332],{"class":93,"line":9720},[91,72327,61952],{"class":150},[91,72329,51412],{"class":101},[91,72331,293],{"class":150},[91,72333,1268],{"class":101},[91,72335,72336],{"class":93,"line":9743},[91,72337,2165],{"class":101},[91,72339,72340],{"class":93,"line":9767},[91,72341,2378],{"emptyLinePlaceholder":17},[91,72343,72344,72346,72348],{"class":93,"line":9772},[91,72345,72263],{"class":51275},[91,72347,51663],{"class":51275},[91,72349,15551],{"class":101},[91,72351,72352,72354,72356,72359],{"class":93,"line":9777},[91,72353,54984],{"class":150},[91,72355,51412],{"class":101},[91,72357,72358],{"class":150},"inline-block",[91,72360,1268],{"class":101},[91,72362,72363,72365,72367,72369,72371],{"class":93,"line":9782},[91,72364,54746],{"class":150},[91,72366,51412],{"class":101},[91,72368,548],{"class":150},[91,72370,51467],{"class":97},[91,72372,1268],{"class":101},[91,72374,72375,72377,72379,72381,72383],{"class":93,"line":9791},[91,72376,54760],{"class":150},[91,72378,51412],{"class":101},[91,72380,548],{"class":150},[91,72382,51467],{"class":97},[91,72384,1268],{"class":101},[91,72386,72387,72389,72391,72393,72395],{"class":93,"line":9796},[91,72388,57334],{"class":150},[91,72390,51412],{"class":101},[91,72392,574],{"class":150},[91,72394,51467],{"class":97},[91,72396,1268],{"class":101},[91,72398,72399,72401,72403,72405,72407,72409,72412],{"class":93,"line":9802},[91,72400,61952],{"class":150},[91,72402,51412],{"class":101},[91,72404,319],{"class":150},[91,72406,51467],{"class":97},[91,72408,51496],{"class":150},[91,72410,72411],{"class":150}," #fff",[91,72413,1268],{"class":101},[91,72415,72416,72418,72420,72422,72424],{"class":93,"line":9823},[91,72417,55109],{"class":150},[91,72419,51412],{"class":101},[91,72421,421],{"class":150},[91,72423,51467],{"class":97},[91,72425,1268],{"class":101},[91,72427,72428,72430,72432,72434,72436],{"class":93,"line":9829},[91,72429,61725],{"class":150},[91,72431,51412],{"class":101},[91,72433,319],{"class":150},[91,72435,51467],{"class":97},[91,72437,1268],{"class":101},[91,72439,72440],{"class":93,"line":9843},[91,72441,2165],{"class":101},[91,72443,72444],{"class":93,"line":9849},[91,72445,2378],{"emptyLinePlaceholder":17},[91,72447,72448,72451],{"class":93,"line":9876},[91,72449,72450],{"class":1941},"    .total",[91,72452,15551],{"class":101},[91,72454,72455,72457,72459,72461,72463],{"class":93,"line":9885},[91,72456,54746],{"class":150},[91,72458,51412],{"class":101},[91,72460,61604],{"class":150},[91,72462,51467],{"class":97},[91,72464,1268],{"class":101},[91,72466,72467,72469,72471,72473,72475],{"class":93,"line":9891},[91,72468,54760],{"class":150},[91,72470,51412],{"class":101},[91,72472,503],{"class":150},[91,72474,51467],{"class":97},[91,72476,1268],{"class":101},[91,72478,72479,72481,72483,72485,72487],{"class":93,"line":9899},[91,72480,57334],{"class":150},[91,72482,51412],{"class":101},[91,72484,503],{"class":150},[91,72486,51467],{"class":97},[91,72488,1268],{"class":101},[91,72490,72491,72493,72495,72498],{"class":93,"line":9904},[91,72492,57261],{"class":150},[91,72494,51412],{"class":101},[91,72496,72497],{"class":150},"right",[91,72499,1268],{"class":101},[91,72501,72502,72504,72506,72508,72510,72512,72514,72516],{"class":93,"line":16583},[91,72503,54681],{"class":150},[91,72505,51412],{"class":101},[91,72507,503],{"class":150},[91,72509,51467],{"class":97},[91,72511,51531],{"class":150},[91,72513,2016],{"class":150},[91,72515,51467],{"class":97},[91,72517,1268],{"class":101},[91,72519,72520,72523,72525,72527,72529],{"class":93,"line":16589},[91,72521,72522],{"class":150},"      padding-right",[91,72524,51412],{"class":101},[91,72526,548],{"class":150},[91,72528,51467],{"class":97},[91,72530,1268],{"class":101},[91,72532,72533,72535,72537,72539,72541],{"class":93,"line":16612},[91,72534,54897],{"class":150},[91,72536,51412],{"class":101},[91,72538,625],{"class":150},[91,72540,51467],{"class":97},[91,72542,1268],{"class":101},[91,72544,72545,72547,72549,72551,72553,72556,72558,72561,72563,72565],{"class":93,"line":16618},[91,72546,54859],{"class":150},[91,72548,51412],{"class":101},[91,72550,72298],{"class":150},[91,72552,102],{"class":101},[91,72554,72555],{"class":150},"237",[91,72557,12414],{"class":101},[91,72559,72560],{"class":150},"235",[91,72562,12414],{"class":101},[91,72564,72560],{"class":150},[91,72566,2697],{"class":101},[91,72568,72569,72572,72574,72576],{"class":93,"line":16641},[91,72570,72571],{"class":150},"      box-sizing",[91,72573,51412],{"class":101},[91,72575,60480],{"class":150},[91,72577,1268],{"class":101},[91,72579,72580],{"class":93,"line":16655},[91,72581,2165],{"class":101},[91,72583,72584],{"class":93,"line":16675},[91,72585,2378],{"emptyLinePlaceholder":17},[91,72587,72588,72590,72592],{"class":93,"line":16681},[91,72589,72450],{"class":1941},[91,72591,51663],{"class":51275},[91,72593,15551],{"class":101},[91,72595,72596,72598,72600,72602],{"class":93,"line":16692},[91,72597,57391],{"class":150},[91,72599,51412],{"class":101},[91,72601,57396],{"class":150},[91,72603,1268],{"class":101},[91,72605,72606],{"class":93,"line":16715},[91,72607,2165],{"class":101},[91,72609,72610],{"class":93,"line":16737},[91,72611,2378],{"emptyLinePlaceholder":17},[91,72613,72614,72616],{"class":93,"line":16742},[91,72615,64998],{"class":51275},[91,72617,15551],{"class":101},[91,72619,72620,72622,72624,72626,72628],{"class":93,"line":16748},[91,72621,54746],{"class":150},[91,72623,51412],{"class":101},[91,72625,61604],{"class":150},[91,72627,51467],{"class":97},[91,72629,1268],{"class":101},[91,72631,72632,72634,72636,72639],{"class":93,"line":16762},[91,72633,54681],{"class":150},[91,72635,51412],{"class":101},[91,72637,72638],{"class":150},"auto",[91,72640,1268],{"class":101},[91,72642,72643,72645,72647,72649],{"class":93,"line":16775},[91,72644,65005],{"class":150},[91,72646,51412],{"class":101},[91,72648,65010],{"class":150},[91,72650,1268],{"class":101},[91,72652,72653],{"class":93,"line":16780},[91,72654,2165],{"class":101},[91,72656,72657],{"class":93,"line":16794},[91,72658,2378],{"emptyLinePlaceholder":17},[91,72660,72661,72663],{"class":93,"line":16799},[91,72662,65090],{"class":51275},[91,72664,15551],{"class":101},[91,72666,72667,72669,72671,72673,72675,72677,72679,72681,72683,72685],{"class":93,"line":16805},[91,72668,54859],{"class":150},[91,72670,51412],{"class":101},[91,72672,72298],{"class":150},[91,72674,102],{"class":101},[91,72676,72555],{"class":150},[91,72678,12414],{"class":101},[91,72680,72560],{"class":150},[91,72682,12414],{"class":101},[91,72684,72560],{"class":150},[91,72686,2697],{"class":101},[91,72688,72689],{"class":93,"line":16810},[91,72690,2165],{"class":101},[91,72692,72693],{"class":93,"line":16824},[91,72694,2378],{"emptyLinePlaceholder":17},[91,72696,72697,72699],{"class":93,"line":16829},[91,72698,65090],{"class":51275},[91,72700,31441],{"class":101},[91,72702,72703,72705],{"class":93,"line":16834},[91,72704,65156],{"class":51275},[91,72706,15551],{"class":101},[91,72708,72709,72711,72713,72715,72717],{"class":93,"line":16848},[91,72710,54760],{"class":150},[91,72712,51412],{"class":101},[91,72714,375],{"class":150},[91,72716,51467],{"class":97},[91,72718,1268],{"class":101},[91,72720,72721,72723,72725,72727],{"class":93,"line":16860},[91,72722,57261],{"class":150},[91,72724,51412],{"class":101},[91,72726,23710],{"class":150},[91,72728,1268],{"class":101},[91,72730,72731,72733,72735,72737,72739],{"class":93,"line":16865},[91,72732,54897],{"class":150},[91,72734,51412],{"class":101},[91,72736,651],{"class":150},[91,72738,51467],{"class":97},[91,72740,1268],{"class":101},[91,72742,72743,72745,72747,72749,72751,72753,72755,72757,72760,72762,72765,72767,72769],{"class":93,"line":16878},[91,72744,61952],{"class":150},[91,72746,51412],{"class":101},[91,72748,319],{"class":150},[91,72750,51467],{"class":97},[91,72752,51496],{"class":150},[91,72754,72235],{"class":150},[91,72756,102],{"class":101},[91,72758,72759],{"class":150},"228",[91,72761,12414],{"class":101},[91,72763,72764],{"class":150},"225",[91,72766,12414],{"class":101},[91,72768,72764],{"class":150},[91,72770,2697],{"class":101},[91,72772,72773,72776,72778,72780,72782],{"class":93,"line":16883},[91,72774,72775],{"class":150},"      padding-left",[91,72777,51412],{"class":101},[91,72779,421],{"class":150},[91,72781,51467],{"class":97},[91,72783,1268],{"class":101},[91,72785,72786,72788,72790,72792,72795,72797,72799],{"class":93,"line":16888},[91,72787,61835],{"class":150},[91,72789,51412],{"class":101},[91,72791,28096],{"class":150},[91,72793,72794],{"class":150}," linear",[91,72796,61842],{"class":150},[91,72798,797],{"class":97},[91,72800,1268],{"class":101},[91,72802,72803],{"class":93,"line":16893},[91,72804,2165],{"class":101},[91,72806,72807],{"class":93,"line":16906},[91,72808,2378],{"emptyLinePlaceholder":17},[91,72810,72811,72814,72816,72818],{"class":93,"line":16911},[91,72812,72813],{"class":51275},"    tbody",[91,72815,70119],{"class":51275},[91,72817,60915],{"class":1941},[91,72819,15551],{"class":101},[91,72821,72822,72824,72826,72828,72830,72832,72834,72836,72838,72840],{"class":93,"line":32608},[91,72823,54859],{"class":150},[91,72825,51412],{"class":101},[91,72827,72298],{"class":150},[91,72829,102],{"class":101},[91,72831,72555],{"class":150},[91,72833,12414],{"class":101},[91,72835,72560],{"class":150},[91,72837,12414],{"class":101},[91,72839,72560],{"class":150},[91,72841,2697],{"class":101},[91,72843,72844,72846,72848,72850],{"class":93,"line":32614},[91,72845,62000],{"class":150},[91,72847,51412],{"class":101},[91,72849,62005],{"class":150},[91,72851,1268],{"class":101},[91,72853,72854],{"class":93,"line":32620},[91,72855,2165],{"class":101},[91,72857,72858],{"class":93,"line":32626},[91,72859,2378],{"emptyLinePlaceholder":17},[91,72861,72862,72864,72866,72869,72871],{"class":93,"line":32632},[91,72863,72813],{"class":51275},[91,72865,70119],{"class":51275},[91,72867,72868],{"class":51275}," td",[91,72870,1376],{"class":51275},[91,72872,15551],{"class":101},[91,72874,72875,72877,72879,72881],{"class":93,"line":32643},[91,72876,54984],{"class":150},[91,72878,51412],{"class":101},[91,72880,60844],{"class":150},[91,72882,1268],{"class":101},[91,72884,72885,72887,72889,72891,72893],{"class":93,"line":32649},[91,72886,54746],{"class":150},[91,72888,51412],{"class":101},[91,72890,1009],{"class":150},[91,72892,51467],{"class":97},[91,72894,1268],{"class":101},[91,72896,72897,72899,72901,72903,72905],{"class":93,"line":32669},[91,72898,54760],{"class":150},[91,72900,51412],{"class":101},[91,72902,927],{"class":150},[91,72904,51467],{"class":97},[91,72906,1268],{"class":101},[91,72908,72909,72911,72913,72915,72917],{"class":93,"line":32675},[91,72910,57334],{"class":150},[91,72912,51412],{"class":101},[91,72914,927],{"class":150},[91,72916,51467],{"class":97},[91,72918,1268],{"class":101},[91,72920,72921,72923,72925,72927,72929],{"class":93,"line":32686},[91,72922,62052],{"class":150},[91,72924,51412],{"class":101},[91,72926,179],{"class":150},[91,72928,51467],{"class":97},[91,72930,1268],{"class":101},[91,72932,72933,72935,72937,72939],{"class":93,"line":32692},[91,72934,57391],{"class":150},[91,72936,51412],{"class":101},[91,72938,60817],{"class":150},[91,72940,1268],{"class":101},[91,72942,72943,72945,72947,72949],{"class":93,"line":32698},[91,72944,57261],{"class":150},[91,72946,51412],{"class":101},[91,72948,51567],{"class":150},[91,72950,1268],{"class":101},[91,72952,72953,72955,72957,72959],{"class":93,"line":32704},[91,72954,63945],{"class":150},[91,72956,51412],{"class":101},[91,72958,54712],{"class":150},[91,72960,1268],{"class":101},[91,72962,72963,72965,72967,72970],{"class":93,"line":32710},[91,72964,54859],{"class":150},[91,72966,51412],{"class":101},[91,72968,72969],{"class":150},"orange",[91,72971,1268],{"class":101},[91,72973,72974,72976,72978,72981,72983],{"class":93,"line":32716},[91,72975,55109],{"class":150},[91,72977,51412],{"class":101},[91,72979,72980],{"class":150},"12.5",[91,72982,51467],{"class":97},[91,72984,1268],{"class":101},[91,72986,72987],{"class":93,"line":32722},[91,72988,2165],{"class":101},[91,72990,72991,72993,72995],{"class":93,"line":32728},[91,72992,52392],{"class":101},[91,72994,5105],{"class":51275},[91,72996,51282],{"class":101},[91,72998,72999,73001,73003],{"class":93,"line":32748},[91,73000,51760],{"class":101},[91,73002,51309],{"class":51275},[91,73004,51282],{"class":101},[91,73006,73007],{"class":93,"line":32754},[91,73008,2378],{"emptyLinePlaceholder":17},[91,73010,73011,73013,73015],{"class":93,"line":32770},[91,73012,1012],{"class":101},[91,73014,51775],{"class":51275},[91,73016,51282],{"class":101},[91,73018,73019,73021,73023,73026,73028],{"class":93,"line":32776},[91,73020,52119],{"class":101},[91,73022,33],{"class":51275},[91,73024,73025],{"class":101},">学生就业统计表\u003C\u002F",[91,73027,33],{"class":51275},[91,73029,51282],{"class":101},[91,73031,73032,73034,73036,73038,73040,73042,73044,73046,73048],{"class":93,"line":32790},[91,73033,52119],{"class":101},[91,73035,66600],{"class":51275},[91,73037,53461],{"class":1941},[91,73039,147],{"class":101},[91,73041,62639],{"class":206},[91,73043,69045],{"class":1941},[91,73045,147],{"class":101},[91,73047,31751],{"class":206},[91,73049,51282],{"class":101},[91,73051,73052,73054,73056,73058,73060,73062,73064,73066,73068,73070,73072,73075,73077,73079,73081],{"class":93,"line":32796},[91,73053,51316],{"class":101},[91,73055,53796],{"class":51275},[91,73057,53799],{"class":1941},[91,73059,147],{"class":101},[91,73061,62674],{"class":206},[91,73063,14899],{"class":1941},[91,73065,147],{"class":101},[91,73067,69071],{"class":206},[91,73069,60995],{"class":1941},[91,73071,147],{"class":101},[91,73073,73074],{"class":206},"\"姓名\"",[91,73076,53461],{"class":1941},[91,73078,147],{"class":101},[91,73080,69071],{"class":206},[91,73082,51282],{"class":101},[91,73084,73085,73087,73089,73091,73093,73095,73097,73099,73101,73103,73105,73108,73110,73112,73114],{"class":93,"line":32811},[91,73086,51316],{"class":101},[91,73088,53796],{"class":51275},[91,73090,53799],{"class":1941},[91,73092,147],{"class":101},[91,73094,62674],{"class":206},[91,73096,14899],{"class":1941},[91,73098,147],{"class":101},[91,73100,69099],{"class":206},[91,73102,60995],{"class":1941},[91,73104,147],{"class":101},[91,73106,73107],{"class":206},"\"年龄\"",[91,73109,53461],{"class":1941},[91,73111,147],{"class":101},[91,73113,69099],{"class":206},[91,73115,51282],{"class":101},[91,73117,73118,73120,73122,73124,73126,73128,73130,73132,73134,73136,73138,73141,73143,73145,73147],{"class":93,"line":32817},[91,73119,51316],{"class":101},[91,73121,53796],{"class":51275},[91,73123,53799],{"class":1941},[91,73125,147],{"class":101},[91,73127,62674],{"class":206},[91,73129,14899],{"class":1941},[91,73131,147],{"class":101},[91,73133,69201],{"class":206},[91,73135,60995],{"class":1941},[91,73137,147],{"class":101},[91,73139,73140],{"class":206},"\"薪资\"",[91,73142,53461],{"class":1941},[91,73144,147],{"class":101},[91,73146,69201],{"class":206},[91,73148,51282],{"class":101},[91,73150,73151,73153,73155,73157,73159,73161,73163,73165,73167,73169,73171,73173],{"class":93,"line":32826},[91,73152,51316],{"class":101},[91,73154,69119],{"class":51275},[91,73156,14899],{"class":1941},[91,73158,147],{"class":101},[91,73160,69126],{"class":206},[91,73162,14938],{"class":1941},[91,73164,147],{"class":101},[91,73166,7631],{"class":206},[91,73168,53461],{"class":1941},[91,73170,147],{"class":101},[91,73172,69126],{"class":206},[91,73174,51282],{"class":101},[91,73176,73177,73179,73181,73183,73185,73187,73189,73191],{"class":93,"line":32832},[91,73178,55209],{"class":101},[91,73180,69141],{"class":51275},[91,73182,66626],{"class":1941},[91,73184,147],{"class":101},[91,73186,9940],{"class":206},[91,73188,69150],{"class":101},[91,73190,69141],{"class":51275},[91,73192,51282],{"class":101},[91,73194,73195,73197,73199,73201,73203,73205,73207,73209],{"class":93,"line":32841},[91,73196,55209],{"class":101},[91,73198,69141],{"class":51275},[91,73200,66626],{"class":1941},[91,73202,147],{"class":101},[91,73204,10009],{"class":206},[91,73206,69169],{"class":101},[91,73208,69141],{"class":51275},[91,73210,51282],{"class":101},[91,73212,73213,73215,73217],{"class":93,"line":32847},[91,73214,51751],{"class":101},[91,73216,69119],{"class":51275},[91,73218,51282],{"class":101},[91,73220,73221,73223,73225,73227,73229,73231,73233,73235,73237,73239,73241,73243],{"class":93,"line":32853},[91,73222,51316],{"class":101},[91,73224,69119],{"class":51275},[91,73226,14899],{"class":1941},[91,73228,147],{"class":101},[91,73230,69223],{"class":206},[91,73232,14938],{"class":1941},[91,73234,147],{"class":101},[91,73236,7631],{"class":206},[91,73238,53461],{"class":1941},[91,73240,147],{"class":101},[91,73242,69223],{"class":206},[91,73244,51282],{"class":101},[91,73246,73247,73249,73251,73253,73255,73257,73259,73261],{"class":93,"line":32862},[91,73248,55209],{"class":101},[91,73250,69141],{"class":51275},[91,73252,66626],{"class":1941},[91,73254,147],{"class":101},[91,73256,69244],{"class":206},[91,73258,69247],{"class":101},[91,73260,69141],{"class":51275},[91,73262,51282],{"class":101},[91,73264,73265,73267,73269,73271,73273,73275,73277,73279],{"class":93,"line":32868},[91,73266,55209],{"class":101},[91,73268,69141],{"class":51275},[91,73270,66626],{"class":1941},[91,73272,147],{"class":101},[91,73274,69264],{"class":206},[91,73276,69267],{"class":101},[91,73278,69141],{"class":51275},[91,73280,51282],{"class":101},[91,73282,73283,73285,73287,73289,73291,73293,73295,73297],{"class":93,"line":32879},[91,73284,55209],{"class":101},[91,73286,69141],{"class":51275},[91,73288,66626],{"class":1941},[91,73290,147],{"class":101},[91,73292,69284],{"class":206},[91,73294,69287],{"class":101},[91,73296,69141],{"class":51275},[91,73298,51282],{"class":101},[91,73300,73301,73303,73305,73307,73309,73311,73313,73315],{"class":93,"line":32885},[91,73302,55209],{"class":101},[91,73304,69141],{"class":51275},[91,73306,66626],{"class":1941},[91,73308,147],{"class":101},[91,73310,69304],{"class":206},[91,73312,69307],{"class":101},[91,73314,69141],{"class":51275},[91,73316,51282],{"class":101},[91,73318,73319,73321,73323,73325,73327,73329,73331,73333],{"class":93,"line":32904},[91,73320,55209],{"class":101},[91,73322,69141],{"class":51275},[91,73324,66626],{"class":1941},[91,73326,147],{"class":101},[91,73328,69324],{"class":206},[91,73330,69327],{"class":101},[91,73332,69141],{"class":51275},[91,73334,51282],{"class":101},[91,73336,73337,73339,73341],{"class":93,"line":32910},[91,73338,51751],{"class":101},[91,73340,69119],{"class":51275},[91,73342,51282],{"class":101},[91,73344,73345,73347,73349],{"class":93,"line":32921},[91,73346,51316],{"class":101},[91,73348,53862],{"class":51275},[91,73350,51282],{"class":101},[91,73352,73353,73355,73357,73360,73362,73365,73367],{"class":93,"line":32927},[91,73354,55209],{"class":101},[91,73356,91],{"class":51275},[91,73358,73359],{"class":101},">+\u003C\u002F",[91,73361,91],{"class":51275},[91,73363,73364],{"class":101},">添加\u003C\u002F",[91,73366,53862],{"class":51275},[91,73368,51282],{"class":101},[91,73370,73371,73373,73375],{"class":93,"line":32947},[91,73372,52392],{"class":101},[91,73374,66600],{"class":51275},[91,73376,51282],{"class":101},[91,73378,73379,73381,73383,73385,73387,73389,73392,73394,73397,73399,73402,73404],{"class":93,"line":32963},[91,73380,52119],{"class":101},[91,73382,51586],{"class":51275},[91,73384,53461],{"class":1941},[91,73386,147],{"class":101},[91,73388,62555],{"class":206},[91,73390,73391],{"class":101},">共有数据 \u003C",[91,73393,91],{"class":51275},[91,73395,73396],{"class":101},">0\u003C\u002F",[91,73398,91],{"class":51275},[91,73400,73401],{"class":101},"> 条\u003C\u002F",[91,73403,51586],{"class":51275},[91,73405,51282],{"class":101},[91,73407,73408,73410,73412],{"class":93,"line":32969},[91,73409,52119],{"class":101},[91,73411,239],{"class":51275},[91,73413,51282],{"class":101},[91,73415,73416,73418,73420],{"class":93,"line":32983},[91,73417,51316],{"class":101},[91,73419,242],{"class":51275},[91,73421,51282],{"class":101},[91,73423,73424,73426,73428],{"class":93,"line":32989},[91,73425,55209],{"class":101},[91,73427,245],{"class":51275},[91,73429,51282],{"class":101},[91,73431,73432,73434,73436,73439,73441],{"class":93,"line":32995},[91,73433,55277],{"class":101},[91,73435,248],{"class":51275},[91,73437,73438],{"class":101},">ID\u003C\u002F",[91,73440,248],{"class":51275},[91,73442,51282],{"class":101},[91,73444,73445,73447,73449,73451,73453],{"class":93,"line":33006},[91,73446,55277],{"class":101},[91,73448,248],{"class":51275},[91,73450,69430],{"class":101},[91,73452,248],{"class":51275},[91,73454,51282],{"class":101},[91,73456,73457,73459,73461,73463,73465],{"class":93,"line":33012},[91,73458,55277],{"class":101},[91,73460,248],{"class":51275},[91,73462,69443],{"class":101},[91,73464,248],{"class":51275},[91,73466,51282],{"class":101},[91,73468,73469,73471,73473,73475,73477],{"class":93,"line":33018},[91,73470,55277],{"class":101},[91,73472,248],{"class":51275},[91,73474,69456],{"class":101},[91,73476,248],{"class":51275},[91,73478,51282],{"class":101},[91,73480,73481,73483,73485,73487,73489],{"class":93,"line":33028},[91,73482,55277],{"class":101},[91,73484,248],{"class":51275},[91,73486,69469],{"class":101},[91,73488,248],{"class":51275},[91,73490,51282],{"class":101},[91,73492,73493,73495,73497,73499,73501],{"class":93,"line":33034},[91,73494,55277],{"class":101},[91,73496,248],{"class":51275},[91,73498,69482],{"class":101},[91,73500,248],{"class":51275},[91,73502,51282],{"class":101},[91,73504,73505,73507,73509,73512,73514],{"class":93,"line":33045},[91,73506,55277],{"class":101},[91,73508,248],{"class":51275},[91,73510,73511],{"class":101},">录入时间\u003C\u002F",[91,73513,248],{"class":51275},[91,73515,51282],{"class":101},[91,73517,73518,73520,73522,73524,73526],{"class":93,"line":33051},[91,73519,55277],{"class":101},[91,73521,248],{"class":51275},[91,73523,69495],{"class":101},[91,73525,248],{"class":51275},[91,73527,51282],{"class":101},[91,73529,73530,73532,73534],{"class":93,"line":33061},[91,73531,55382],{"class":101},[91,73533,245],{"class":51275},[91,73535,51282],{"class":101},[91,73537,73538,73540,73542],{"class":93,"line":33066},[91,73539,51751],{"class":101},[91,73541,242],{"class":51275},[91,73543,51282],{"class":101},[91,73545,73546,73548,73550],{"class":93,"line":33072},[91,73547,51316],{"class":101},[91,73549,286],{"class":51275},[91,73551,51282],{"class":101},[91,73553,73554],{"class":93,"line":33121},[91,73555,73556],{"class":160},"      \u003C!-- \u003Ctr>\n",[91,73558,73559],{"class":93,"line":33168},[91,73560,73561],{"class":160},"        \u003Ctd>1\u003C\u002Ftd>\n",[91,73563,73564],{"class":93,"line":33173},[91,73565,73561],{"class":160},[91,73567,73568],{"class":93,"line":33179},[91,73569,73561],{"class":160},[91,73571,73572],{"class":93,"line":33198},[91,73573,73561],{"class":160},[91,73575,73576],{"class":93,"line":33204},[91,73577,73561],{"class":160},[91,73579,73580],{"class":93,"line":33224},[91,73581,73561],{"class":160},[91,73583,73584],{"class":93,"line":33230},[91,73585,73561],{"class":160},[91,73587,73588],{"class":93,"line":33236},[91,73589,73590],{"class":160},"        \u003Ctd>\n",[91,73592,73593],{"class":93,"line":33246},[91,73594,73595],{"class":160},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[91,73597,73598],{"class":93,"line":33251},[91,73599,73600],{"class":160},"        \u003C\u002Ftd>\n",[91,73602,73603],{"class":93,"line":33257},[91,73604,73605],{"class":160},"      \u003C\u002Ftr> -->\n",[91,73607,73608,73610,73612],{"class":93,"line":33273},[91,73609,51751],{"class":101},[91,73611,286],{"class":51275},[91,73613,51282],{"class":101},[91,73615,73616,73618,73620],{"class":93,"line":33318},[91,73617,52392],{"class":101},[91,73619,239],{"class":51275},[91,73621,51282],{"class":101},[91,73623,73624,73626,73628],{"class":93,"line":33324},[91,73625,52119],{"class":101},[91,73627,51788],{"class":51275},[91,73629,51282],{"class":101},[91,73631,73632],{"class":93,"line":33330},[91,73633,73634],{"class":160},"    \u002F\u002F const initData = [{\n",[91,73636,73637],{"class":93,"line":33336},[91,73638,73639],{"class":160},"    \u002F\u002F   unameId: 1,\n",[91,73641,73642],{"class":93,"line":33347},[91,73643,73644],{"class":160},"    \u002F\u002F   uname: '华晨宇',\n",[91,73646,73647],{"class":93,"line":33353},[91,73648,73649],{"class":160},"    \u002F\u002F   age: 22,\n",[91,73651,73652],{"class":93,"line":33359},[91,73653,73654],{"class":160},"    \u002F\u002F   salary: 12000,\n",[91,73656,73657],{"class":93,"line":33365},[91,73658,73659],{"class":160},"    \u002F\u002F   gender: '男',\n",[91,73661,73662],{"class":93,"line":33383},[91,73663,73664],{"class":160},"    \u002F\u002F   city: '北京',\n",[91,73666,73667],{"class":93,"line":33397},[91,73668,73669],{"class":160},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[91,73671,73672],{"class":93,"line":33406},[91,73673,73674],{"class":160},"    \u002F\u002F }]\n",[91,73676,73677],{"class":93,"line":33415},[91,73678,73679],{"class":160},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[91,73681,73682],{"class":93,"line":33424},[91,73683,73684],{"class":160},"    \u002F\u002F 1.渲染业务\n",[91,73686,73687],{"class":93,"line":33433},[91,73688,73689],{"class":160},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[91,73691,73692],{"class":93,"line":33439},[91,73693,73694],{"class":160},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[91,73696,73697],{"class":93,"line":33445},[91,73698,73699],{"class":160},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[91,73701,73702],{"class":93,"line":33453},[91,73703,2378],{"emptyLinePlaceholder":17},[91,73705,73706],{"class":93,"line":33458},[91,73707,73708],{"class":160},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[91,73710,73711],{"class":93,"line":33464},[91,73712,73713],{"class":160},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[91,73715,73716,73718,73720,73722],{"class":93,"line":33475},[91,73717,11200],{"class":97},[91,73719,57670],{"class":150},[91,73721,13543],{"class":97},[91,73723,51813],{"class":101},[91,73725,73726,73729,73731],{"class":93,"line":33481},[91,73727,73728],{"class":101},"    console.",[91,73730,58222],{"class":1941},[91,73732,52387],{"class":101},[91,73734,73735],{"class":93,"line":33501},[91,73736,2378],{"emptyLinePlaceholder":17},[91,73738,73739],{"class":93,"line":33507},[91,73740,73741],{"class":160},"    \u002F\u002F 时间函数\n",[91,73743,73744,73746,73749],{"class":93,"line":33513},[91,73745,70059],{"class":97},[91,73747,73748],{"class":1941}," getTime",[91,73750,10832],{"class":101},[91,73752,73753,73755,73758,73760,73762,73765],{"class":93,"line":33519},[91,73754,58203],{"class":97},[91,73756,73757],{"class":150}," date",[91,73759,13543],{"class":97},[91,73761,11557],{"class":97},[91,73763,73764],{"class":1941}," Date",[91,73766,1954],{"class":101},[91,73768,73769,73771,73773,73775,73778,73781,73783,73785,73787,73790,73793,73795,73797,73799,73801,73803,73805,73807],{"class":93,"line":33536},[91,73770,58203],{"class":97},[91,73772,16070],{"class":150},[91,73774,13543],{"class":97},[91,73776,73777],{"class":101}," date.",[91,73779,73780],{"class":1941},"getHours",[91,73782,13029],{"class":101},[91,73784,1012],{"class":97},[91,73786,2016],{"class":150},[91,73788,73789],{"class":97}," ?",[91,73791,73792],{"class":206}," '0'",[91,73794,45541],{"class":97},[91,73796,73777],{"class":101},[91,73798,73780],{"class":1941},[91,73800,13029],{"class":101},[91,73802,961],{"class":97},[91,73804,73777],{"class":101},[91,73806,73780],{"class":1941},[91,73808,1954],{"class":101},[91,73810,73811,73813,73816,73818,73820,73823,73825,73827,73829,73831,73833,73835,73837,73839,73841,73843,73845,73847],{"class":93,"line":33542},[91,73812,58203],{"class":97},[91,73814,73815],{"class":150}," m",[91,73817,13543],{"class":97},[91,73819,73777],{"class":101},[91,73821,73822],{"class":1941},"getMinutes",[91,73824,13029],{"class":101},[91,73826,1012],{"class":97},[91,73828,2016],{"class":150},[91,73830,73789],{"class":97},[91,73832,73792],{"class":206},[91,73834,45541],{"class":97},[91,73836,73777],{"class":101},[91,73838,73822],{"class":1941},[91,73840,13029],{"class":101},[91,73842,961],{"class":97},[91,73844,73777],{"class":101},[91,73846,73822],{"class":1941},[91,73848,1954],{"class":101},[91,73850,73851,73853,73855,73857,73859,73862,73864,73866,73868,73870,73872,73874,73876,73878,73880,73882,73884,73886],{"class":93,"line":33548},[91,73852,58203],{"class":97},[91,73854,8407],{"class":150},[91,73856,13543],{"class":97},[91,73858,73777],{"class":101},[91,73860,73861],{"class":1941},"getSeconds",[91,73863,13029],{"class":101},[91,73865,1012],{"class":97},[91,73867,2016],{"class":150},[91,73869,73789],{"class":97},[91,73871,73792],{"class":206},[91,73873,45541],{"class":97},[91,73875,73777],{"class":101},[91,73877,73861],{"class":1941},[91,73879,13029],{"class":101},[91,73881,961],{"class":97},[91,73883,73777],{"class":101},[91,73885,73861],{"class":1941},[91,73887,1954],{"class":101},[91,73889,73890,73892,73895,73897,73899,73902,73904,73907,73909,73912,73914,73916,73919,73921,73923,73925,73927,73929,73931,73934,73936,73939,73941,73944,73946,73948,73950],{"class":93,"line":33554},[91,73891,58203],{"class":97},[91,73893,73894],{"class":150}," str",[91,73896,13543],{"class":97},[91,73898,62878],{"class":206},[91,73900,73901],{"class":101},"date",[91,73903,660],{"class":206},[91,73905,73906],{"class":1941},"getFullYear",[91,73908,2405],{"class":206},[91,73910,73911],{"class":206},"}\u002F${",[91,73913,73901],{"class":101},[91,73915,660],{"class":206},[91,73917,73918],{"class":1941},"getMonth",[91,73920,13029],{"class":206},[91,73922,583],{"class":97},[91,73924,25093],{"class":150},[91,73926,73911],{"class":206},[91,73928,73901],{"class":101},[91,73930,660],{"class":206},[91,73932,73933],{"class":1941},"getDate",[91,73935,2405],{"class":206},[91,73937,73938],{"class":206},"} ${",[91,73940,517],{"class":101},[91,73942,73943],{"class":206},"}:${",[91,73945,646],{"class":101},[91,73947,73943],{"class":206},[91,73949,797],{"class":101},[91,73951,73952],{"class":206},"}`\n",[91,73954,73955,73958],{"class":93,"line":33560},[91,73956,73957],{"class":97},"      return",[91,73959,73960],{"class":101}," str\n",[91,73962,73963],{"class":93,"line":33566},[91,73964,2165],{"class":101},[91,73966,73967],{"class":93,"line":33593},[91,73968,73969],{"class":160},"    \u002F\u002F 渲染函数\n",[91,73971,73972,73974,73976,73978,73980,73982,73984,73986],{"class":93,"line":33617},[91,73973,11200],{"class":97},[91,73975,69722],{"class":150},[91,73977,13543],{"class":97},[91,73979,54371],{"class":101},[91,73981,54374],{"class":1941},[91,73983,102],{"class":101},[91,73985,69733],{"class":206},[91,73987,108],{"class":101},[91,73989,73990,73992,73994],{"class":93,"line":33623},[91,73991,70059],{"class":97},[91,73993,70062],{"class":1941},[91,73995,10832],{"class":101},[91,73997,73998],{"class":93,"line":33629},[91,73999,74000],{"class":160},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[91,74002,74003],{"class":93,"line":33635},[91,74004,74005],{"class":160},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[91,74007,74008,74010,74013,74015,74017,74020,74022,74024,74026,74029,74031,74034],{"class":93,"line":33646},[91,74009,58203],{"class":97},[91,74011,74012],{"class":150}," trArr",[91,74014,13543],{"class":97},[91,74016,51940],{"class":101},[91,74018,74019],{"class":1941},"map",[91,74021,102],{"class":101},[91,74023,54424],{"class":97},[91,74025,1636],{"class":101},[91,74027,74028],{"class":5195},"ele",[91,74030,12414],{"class":101},[91,74032,74033],{"class":5195},"index",[91,74035,12421],{"class":101},[91,74037,74038,74040],{"class":93,"line":33657},[91,74039,14731],{"class":97},[91,74041,70143],{"class":206},[91,74043,74044],{"class":93,"line":33663},[91,74045,74046],{"class":206},"      \u003Ctr>\n",[91,74048,74049,74051,74053,74055,74058],{"class":93,"line":33680},[91,74050,70148],{"class":206},[91,74052,74028],{"class":101},[91,74054,660],{"class":206},[91,74056,74057],{"class":101},"unameId",[91,74059,70163],{"class":206},[91,74061,74062,74064,74066,74068,74070],{"class":93,"line":33703},[91,74063,70148],{"class":206},[91,74065,74028],{"class":101},[91,74067,660],{"class":206},[91,74069,70179],{"class":101},[91,74071,70163],{"class":206},[91,74073,74074,74076,74078,74080,74082],{"class":93,"line":33726},[91,74075,70148],{"class":206},[91,74077,74028],{"class":101},[91,74079,660],{"class":206},[91,74081,70196],{"class":101},[91,74083,70163],{"class":206},[91,74085,74086,74088,74090,74092,74094],{"class":93,"line":33732},[91,74087,70148],{"class":206},[91,74089,74028],{"class":101},[91,74091,660],{"class":206},[91,74093,70213],{"class":101},[91,74095,70163],{"class":206},[91,74097,74098,74100,74102,74104,74106],{"class":93,"line":33737},[91,74099,70148],{"class":206},[91,74101,74028],{"class":101},[91,74103,660],{"class":206},[91,74105,70230],{"class":101},[91,74107,70163],{"class":206},[91,74109,74110,74112,74114,74116,74118],{"class":93,"line":33746},[91,74111,70148],{"class":206},[91,74113,74028],{"class":101},[91,74115,660],{"class":206},[91,74117,70247],{"class":101},[91,74119,70163],{"class":206},[91,74121,74122,74124,74126,74128,74130],{"class":93,"line":33756},[91,74123,70148],{"class":206},[91,74125,74028],{"class":101},[91,74127,660],{"class":206},[91,74129,2365],{"class":101},[91,74131,70163],{"class":206},[91,74133,74134],{"class":93,"line":33762},[91,74135,73590],{"class":206},[91,74137,74138,74141,74143],{"class":93,"line":33767},[91,74139,74140],{"class":206},"          \u003Ca href=\"#\" data-id=\"${",[91,74142,74033],{"class":101},[91,74144,74145],{"class":206},"}\">删除\u003C\u002Fa>\n",[91,74147,74148],{"class":93,"line":33773},[91,74149,73600],{"class":206},[91,74151,74152],{"class":93,"line":33786},[91,74153,74154],{"class":206},"      \u003C\u002Ftr>\n",[91,74156,74157],{"class":93,"line":33792},[91,74158,74159],{"class":206},"  `\n",[91,74161,74162],{"class":93,"line":33803},[91,74163,64790],{"class":101},[91,74165,74166,74168,74170],{"class":93,"line":33814},[91,74167,58219],{"class":101},[91,74169,58222],{"class":1941},[91,74171,74172],{"class":101},"(trArr)\n",[91,74174,74175],{"class":93,"line":33833},[91,74176,2378],{"emptyLinePlaceholder":17},[91,74178,74179],{"class":93,"line":49493},[91,74180,74181],{"class":160},"      \u002F\u002F (2) 把数组转换为字符串join\n",[91,74183,74184],{"class":93,"line":49498},[91,74185,74186],{"class":160},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[91,74188,74189,74191,74193,74196,74199,74201,74204],{"class":93,"line":49507},[91,74190,70074],{"class":101},[91,74192,147],{"class":97},[91,74194,74195],{"class":101}," trArr.",[91,74197,74198],{"class":1941},"join",[91,74200,102],{"class":101},[91,74202,74203],{"class":206},"''",[91,74205,108],{"class":101},[91,74207,74208],{"class":93,"line":49516},[91,74209,74210],{"class":160},"      \u002F\u002F 显示共有几条\n",[91,74212,74213,74215,74217,74219,74222,74225,74227,74229],{"class":93,"line":49521},[91,74214,55746],{"class":101},[91,74216,54374],{"class":1941},[91,74218,102],{"class":101},[91,74220,74221],{"class":206},"'.total span'",[91,74223,74224],{"class":101},").innerHTML ",[91,74226,147],{"class":97},[91,74228,51940],{"class":101},[91,74230,55806],{"class":150},[91,74232,74233],{"class":93,"line":49526},[91,74234,2165],{"class":101},[91,74236,74237],{"class":93,"line":49531},[91,74238,74239],{"class":160},"    \u002F\u002F render()\n",[91,74241,74242],{"class":93,"line":49544},[91,74243,2378],{"emptyLinePlaceholder":17},[91,74245,74246],{"class":93,"line":49549},[91,74247,74248],{"class":160},"    \u002F\u002F 获取DOM对象\n",[91,74250,74251,74253,74255,74257,74259,74261,74263,74265],{"class":93,"line":49558},[91,74252,11200],{"class":97},[91,74254,69796],{"class":150},[91,74256,13543],{"class":97},[91,74258,54371],{"class":101},[91,74260,54374],{"class":1941},[91,74262,102],{"class":101},[91,74264,69807],{"class":206},[91,74266,108],{"class":101},[91,74268,74269,74271,74273,74275,74277,74279,74281,74283],{"class":93,"line":49567},[91,74270,11200],{"class":97},[91,74272,69623],{"class":150},[91,74274,13543],{"class":97},[91,74276,54371],{"class":101},[91,74278,54374],{"class":1941},[91,74280,102],{"class":101},[91,74282,69634],{"class":206},[91,74284,108],{"class":101},[91,74286,74287,74289,74291,74293,74295,74297,74299,74301],{"class":93,"line":49584},[91,74288,11200],{"class":97},[91,74290,15668],{"class":150},[91,74292,13543],{"class":97},[91,74294,54371],{"class":101},[91,74296,54374],{"class":1941},[91,74298,102],{"class":101},[91,74300,69653],{"class":206},[91,74302,108],{"class":101},[91,74304,74306,74308,74310,74312,74314,74316,74318,74320],{"class":93,"line":74305},231,[91,74307,11200],{"class":97},[91,74309,69682],{"class":150},[91,74311,13543],{"class":97},[91,74313,54371],{"class":101},[91,74315,54374],{"class":1941},[91,74317,102],{"class":101},[91,74319,69693],{"class":206},[91,74321,108],{"class":101},[91,74323,74325,74327,74329,74331,74333,74335,74337,74339],{"class":93,"line":74324},232,[91,74326,11200],{"class":97},[91,74328,69662],{"class":150},[91,74330,13543],{"class":97},[91,74332,54371],{"class":101},[91,74334,54374],{"class":1941},[91,74336,102],{"class":101},[91,74338,69673],{"class":206},[91,74340,108],{"class":101},[91,74342,74344,74346,74348,74350,74352,74354,74356,74358],{"class":93,"line":74343},233,[91,74345,11200],{"class":97},[91,74347,69702],{"class":150},[91,74349,13543],{"class":97},[91,74351,54371],{"class":101},[91,74353,54374],{"class":1941},[91,74355,102],{"class":101},[91,74357,69713],{"class":206},[91,74359,108],{"class":101},[91,74361,74363],{"class":93,"line":74362},234,[91,74364,2378],{"emptyLinePlaceholder":17},[91,74366,74368],{"class":93,"line":74367},235,[91,74369,74370],{"class":160},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[91,74372,74374,74376,74378,74380,74382,74384,74386,74388,74390],{"class":93,"line":74373},236,[91,74375,69814],{"class":101},[91,74377,57788],{"class":1941},[91,74379,102],{"class":101},[91,74381,69821],{"class":206},[91,74383,12414],{"class":101},[91,74385,54424],{"class":97},[91,74387,1636],{"class":101},[91,74389,176],{"class":5195},[91,74391,12421],{"class":101},[91,74393,74395],{"class":93,"line":74394},237,[91,74396,74397],{"class":160},"      \u002F\u002F 禁止浏览器跳转\n",[91,74399,74401,74403,74405],{"class":93,"line":74400},238,[91,74402,69841],{"class":101},[91,74404,69844],{"class":1941},[91,74406,1954],{"class":101},[91,74408,74410],{"class":93,"line":74409},239,[91,74411,74412],{"class":160},"      \u002F\u002F 非空判断\n",[91,74414,74416],{"class":93,"line":74415},240,[91,74417,74418],{"class":160},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[91,74420,74422],{"class":93,"line":74421},241,[91,74423,74424],{"class":160},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[91,74426,74428,74430,74432,74434,74437,74439,74442,74445,74447,74449],{"class":93,"line":74427},242,[91,74429,54455],{"class":97},[91,74431,1636],{"class":101},[91,74433,328],{"class":97},[91,74435,74436],{"class":101},"uname.value ",[91,74438,71332],{"class":97},[91,74440,74441],{"class":97}," !",[91,74443,74444],{"class":101},"age.value ",[91,74446,71332],{"class":97},[91,74448,74441],{"class":97},[91,74450,74451],{"class":101},"salary.value) {\n",[91,74453,74455,74457,74459,74461,74463],{"class":93,"line":74454},243,[91,74456,14731],{"class":97},[91,74458,69915],{"class":1941},[91,74460,102],{"class":101},[91,74462,69920],{"class":206},[91,74464,108],{"class":101},[91,74466,74468],{"class":93,"line":74467},244,[91,74469,52373],{"class":101},[91,74471,74473,74475,74477],{"class":93,"line":74472},245,[91,74474,57982],{"class":101},[91,74476,51859],{"class":1941},[91,74478,74479],{"class":101},"({\n",[91,74481,74483],{"class":93,"line":74482},246,[91,74484,74485],{"class":160},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[91,74487,74489],{"class":93,"line":74488},247,[91,74490,74491],{"class":160},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[91,74493,74495],{"class":93,"line":74494},248,[91,74496,74497],{"class":160},"        \u002F\u002F 对象的序号应为数组长度+1\n",[91,74499,74501],{"class":93,"line":74500},249,[91,74502,74503],{"class":160},"        \u002F\u002F unameId: arr.length + 1,\n",[91,74505,74507],{"class":93,"line":74506},250,[91,74508,2378],{"emptyLinePlaceholder":17},[91,74510,74512],{"class":93,"line":74511},251,[91,74513,74514],{"class":160},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[91,74516,74518],{"class":93,"line":74517},252,[91,74519,74520],{"class":160},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[91,74522,74524],{"class":93,"line":74523},253,[91,74525,74526],{"class":160},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[91,74528,74530],{"class":93,"line":74529},254,[91,74531,74532],{"class":160},"        \u002F\u002F 0当假看\n",[91,74534,74536,74539,74541,74543,74546,74548,74550,74552,74555,74557,74559,74562,74564],{"class":93,"line":74535},255,[91,74537,74538],{"class":101},"        unameId: arr.",[91,74540,51943],{"class":150},[91,74542,73789],{"class":97},[91,74544,74545],{"class":101}," arr[arr.",[91,74547,51943],{"class":150},[91,74549,52246],{"class":97},[91,74551,25093],{"class":150},[91,74553,74554],{"class":101},"].unameId ",[91,74556,583],{"class":97},[91,74558,25093],{"class":150},[91,74560,74561],{"class":97}," :",[91,74563,25093],{"class":150},[91,74565,31441],{"class":101},[91,74567,74569],{"class":93,"line":74568},256,[91,74570,69968],{"class":101},[91,74572,74574],{"class":93,"line":74573},257,[91,74575,69973],{"class":101},[91,74577,74579],{"class":93,"line":74578},258,[91,74580,69983],{"class":101},[91,74582,74584],{"class":93,"line":74583},259,[91,74585,69978],{"class":101},[91,74587,74589],{"class":93,"line":74588},260,[91,74590,74591],{"class":101},"        city: city.value,\n",[91,74593,74595],{"class":93,"line":74594},261,[91,74596,74597],{"class":160},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[91,74599,74601],{"class":93,"line":74600},262,[91,74602,74603],{"class":160},"        \u002F\u002F time: new Date().toDateString()\n",[91,74605,74607,74610,74613],{"class":93,"line":74606},263,[91,74608,74609],{"class":101},"        time: ",[91,74611,74612],{"class":1941},"getTime",[91,74614,1954],{"class":101},[91,74616,74618],{"class":93,"line":74617},264,[91,74619,64790],{"class":101},[91,74621,74623],{"class":93,"line":74622},265,[91,74624,74625],{"class":160},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[91,74627,74629,74631],{"class":93,"line":74628},266,[91,74630,70043],{"class":1941},[91,74632,1954],{"class":101},[91,74634,74636,74638,74640,74642,74644],{"class":93,"line":74635},267,[91,74637,70026],{"class":150},[91,74639,660],{"class":101},[91,74641,70031],{"class":1941},[91,74643,13029],{"class":101},[91,74645,74646],{"class":160},"\u002F\u002F重置表单\n",[91,74648,74650],{"class":93,"line":74649},268,[91,74651,74652],{"class":160},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[91,74654,74656,74659,74661,74663,74666,74668,74670,74672,74674],{"class":93,"line":74655},269,[91,74657,74658],{"class":101},"      localStorage.",[91,74660,71629],{"class":1941},[91,74662,102],{"class":101},[91,74664,74665],{"class":206},"'data'",[91,74667,12414],{"class":101},[91,74669,71639],{"class":150},[91,74671,660],{"class":101},[91,74673,71644],{"class":1941},[91,74675,74676],{"class":101},"(arr))\n",[91,74678,74680],{"class":93,"line":74679},270,[91,74681,33436],{"class":101},[91,74683,74685],{"class":93,"line":74684},271,[91,74686,2378],{"emptyLinePlaceholder":17},[91,74688,74690],{"class":93,"line":74689},272,[91,74691,74692],{"class":160},"    \u002F\u002F 3.删除业务\n",[91,74694,74696],{"class":93,"line":74695},273,[91,74697,74698],{"class":160},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[91,74700,74702,74704,74706,74708,74710,74712,74714,74716,74718],{"class":93,"line":74701},274,[91,74703,70316],{"class":101},[91,74705,57788],{"class":1941},[91,74707,102],{"class":101},[91,74709,57793],{"class":206},[91,74711,12414],{"class":101},[91,74713,54424],{"class":97},[91,74715,1636],{"class":101},[91,74717,176],{"class":5195},[91,74719,12421],{"class":101},[91,74721,74723],{"class":93,"line":74722},275,[91,74724,74725],{"class":160},"      \u002F\u002F 判断是否点击的是删除按钮\n",[91,74727,74729,74731,74733,74735,74737],{"class":93,"line":74728},276,[91,74730,54455],{"class":97},[91,74732,67009],{"class":101},[91,74734,54461],{"class":97},[91,74736,68231],{"class":206},[91,74738,12421],{"class":101},[91,74740,74742],{"class":93,"line":74741},277,[91,74743,74744],{"class":160},"        \u002F\u002F alert(1)\n",[91,74746,74748],{"class":93,"line":74747},278,[91,74749,74750],{"class":160},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[91,74752,74754],{"class":93,"line":74753},279,[91,74755,74756],{"class":160},"        \u002F\u002F console.log(e.target)\n",[91,74758,74760],{"class":93,"line":74759},280,[91,74761,74762],{"class":160},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[91,74764,74766],{"class":93,"line":74765},281,[91,74767,2378],{"emptyLinePlaceholder":17},[91,74769,74771],{"class":93,"line":74770},282,[91,74772,74773],{"class":160},"        \u002F\u002F 确认框，确然是否真的要删除\n",[91,74775,74777],{"class":93,"line":74776},283,[91,74778,74779],{"class":160},"        \u002F\u002F confirm()为确认框\n",[91,74781,74783],{"class":93,"line":74782},284,[91,74784,74785],{"class":160},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[91,74787,74789,74791,74793,74796,74798,74801],{"class":93,"line":74788},285,[91,74790,2475],{"class":97},[91,74792,1636],{"class":101},[91,74794,74795],{"class":1941},"confirm",[91,74797,102],{"class":101},[91,74799,74800],{"class":206},"'您确定要删除这条数据吗？'",[91,74802,74803],{"class":101},")) {\n",[91,74805,74807,74810,74812,74814,74816],{"class":93,"line":74806},286,[91,74808,74809],{"class":101},"          arr.",[91,74811,57985],{"class":1941},[91,74813,70369],{"class":101},[91,74815,319],{"class":150},[91,74817,108],{"class":101},[91,74819,74821],{"class":93,"line":74820},287,[91,74822,74823],{"class":160},"          \u002F\u002F 3.4 重新渲染页面\n",[91,74825,74827,74830],{"class":93,"line":74826},288,[91,74828,74829],{"class":1941},"          render",[91,74831,1954],{"class":101},[91,74833,74835],{"class":93,"line":74834},289,[91,74836,74837],{"class":160},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[91,74839,74841,74844,74846,74848,74850,74852,74854,74856,74858],{"class":93,"line":74840},290,[91,74842,74843],{"class":101},"          localStorage.",[91,74845,71629],{"class":1941},[91,74847,102],{"class":101},[91,74849,74665],{"class":206},[91,74851,12414],{"class":101},[91,74853,71639],{"class":150},[91,74855,660],{"class":101},[91,74857,71644],{"class":1941},[91,74859,74676],{"class":101},[91,74861,74863],{"class":93,"line":74862},291,[91,74864,2507],{"class":101},[91,74866,74868],{"class":93,"line":74867},292,[91,74869,52373],{"class":101},[91,74871,74873],{"class":93,"line":74872},293,[91,74874,2378],{"emptyLinePlaceholder":17},[91,74876,74878],{"class":93,"line":74877},294,[91,74879,33436],{"class":101},[91,74881,74883],{"class":93,"line":74882},295,[91,74884,2378],{"emptyLinePlaceholder":17},[91,74886,74888,74890,74892],{"class":93,"line":74887},296,[91,74889,52392],{"class":101},[91,74891,51788],{"class":51275},[91,74893,51282],{"class":101},[91,74895,74897,74899,74901],{"class":93,"line":74896},297,[91,74898,51760],{"class":101},[91,74900,51775],{"class":51275},[91,74902,51282],{"class":101},[91,74904,74906],{"class":93,"line":74905},298,[91,74907,2378],{"emptyLinePlaceholder":17},[91,74909,74911,74913,74915],{"class":93,"line":74910},299,[91,74912,51760],{"class":101},[91,74914,50610],{"class":51275},[91,74916,51282],{"class":101},[33,74918,74920],{"id":74919},"_36-正则表达式","3.6 正则表达式",[38,74922,74923],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[38,74925,74926],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[38,74928,74929],{},"正则表达式的作用：",[1109,74931,74932,74939,74945],{},[49,74933,74934,74935,74938],{},"表单验证（ ",[251,74936,74937],{},"匹配"," ）",[49,74940,74941,74942,74938],{},"过滤敏感词（ ",[251,74943,74944],{},"替换",[49,74946,74947,74948,74938],{},"字符串中提取我们想要的部分（ ",[251,74949,74950],{},"提取",[63,74952,74954],{"id":74953},"_361-语法","3.6.1 语法",[38,74956,74957],{},"正则表达式使用步骤：",[46,74959,74960,74963],{},[49,74961,74962],{},"定义规则",[49,74964,74965],{},"查找是否匹配",[38,74967,74968],{},"正则表达式里边不需要写引号",[38,74970,74971],{},[1440,74972],{"alt":10,"src":74973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[38,74975,74976],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[38,74978,74979],{},"reg.test(str)",[38,74981,74982],{},[1440,74983],{"alt":10,"src":74984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[38,74986,74987],{},[1440,74988],{"alt":10,"src":74989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[63,74991,74993],{"id":74992},"_362-元字符","3.6.2 元字符",[46,74995,74996,74999,75002,75005,75012],{},[49,74997,74998],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[49,75000,75001],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[49,75003,75004],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[49,75006,75007,75008],{},"正则验证工具：",[340,75009,75010],{"href":75010,"rel":75011},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23839],[49,75013,75014],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21977,75016,75018],{"id":75017},"_3621-边界符","3.6.2.1 边界符",[38,75020,75021],{},[1440,75022],{"alt":10,"src":75023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[38,75025,75026],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[38,75028,75029],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[38,75031,75032],{},"只匹配一次",[38,75034,75035],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21977,75037,75039],{"id":75038},"_3622-量词","3.6.2.2 量词",[38,75041,75042],{},[1440,75043],{"alt":10,"src":75044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[38,75046,75047],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21977,75049,75051],{"id":75050},"_3623-元字符","3.6.2.3 元字符",[38,75053,75054],{},[1440,75055],{"alt":10,"src":75056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[38,75058,75059],{},"匹配的是a或b或c []只选一个",[38,75061,75062],{},[1440,75063],{"alt":10,"src":75064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[38,75066,75067],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[38,75069,75070],{},[1440,75071],{"alt":10,"src":75072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[38,75074,75075],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[38,75077,75078],{},[1440,75079],{"alt":10,"src":75080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[83,75082,75084],{"className":50608,"code":75083,"language":50610,"meta":10,"style":10},"\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",[88,75085,75086,75096,75110,75114,75122,75136,75156,75168,75176,75180,75188,75196,75201,75232,75259,75287,75291,75296,75324,75355,75360,75365,75396,75428,75460,75464,75469,75500,75530,75560,75564,75569,75600,75631,75661,75691,75695,75700,75733,75737,75742,75773,75804,75808,75813,75844,75874,75905,75909,75914,75946,75977,76008,76035,76066,76098,76131,76162,76193,76225,76256,76264,76272,76276],{"__ignoreMap":10},[91,75087,75088,75090,75092,75094],{"class":93,"line":94},[91,75089,51272],{"class":101},[91,75091,51276],{"class":51275},[91,75093,51279],{"class":1941},[91,75095,51282],{"class":101},[91,75097,75098,75100,75102,75104,75106,75108],{"class":93,"line":11},[91,75099,1012],{"class":101},[91,75101,50610],{"class":51275},[91,75103,51291],{"class":1941},[91,75105,147],{"class":101},[91,75107,51296],{"class":206},[91,75109,51282],{"class":101},[91,75111,75112],{"class":93,"line":1157},[91,75113,2378],{"emptyLinePlaceholder":17},[91,75115,75116,75118,75120],{"class":93,"line":1172},[91,75117,1012],{"class":101},[91,75119,51309],{"class":51275},[91,75121,51282],{"class":101},[91,75123,75124,75126,75128,75130,75132,75134],{"class":93,"line":1178},[91,75125,52119],{"class":101},[91,75127,51319],{"class":51275},[91,75129,51322],{"class":1941},[91,75131,147],{"class":101},[91,75133,51327],{"class":206},[91,75135,51282],{"class":101},[91,75137,75138,75140,75142,75144,75146,75148,75150,75152,75154],{"class":93,"line":1192},[91,75139,52119],{"class":101},[91,75141,51319],{"class":51275},[91,75143,14899],{"class":1941},[91,75145,147],{"class":101},[91,75147,51366],{"class":206},[91,75149,51346],{"class":1941},[91,75151,147],{"class":101},[91,75153,51373],{"class":206},[91,75155,51282],{"class":101},[91,75157,75158,75160,75162,75164,75166],{"class":93,"line":1198},[91,75159,52119],{"class":101},[91,75161,51382],{"class":51275},[91,75163,51385],{"class":101},[91,75165,51382],{"class":51275},[91,75167,51282],{"class":101},[91,75169,75170,75172,75174],{"class":93,"line":1289},[91,75171,51760],{"class":101},[91,75173,51309],{"class":51275},[91,75175,51282],{"class":101},[91,75177,75178],{"class":93,"line":1295},[91,75179,2378],{"emptyLinePlaceholder":17},[91,75181,75182,75184,75186],{"class":93,"line":1307},[91,75183,1012],{"class":101},[91,75185,51775],{"class":51275},[91,75187,51282],{"class":101},[91,75189,75190,75192,75194],{"class":93,"line":1590},[91,75191,52119],{"class":101},[91,75193,51788],{"class":51275},[91,75195,51282],{"class":101},[91,75197,75198],{"class":93,"line":1595},[91,75199,75200],{"class":160},"    \u002F\u002F 元字符中\n",[91,75202,75203,75205,75207,75209,75211,75214,75216,75218,75221,75223,75226,75229],{"class":93,"line":1601},[91,75204,73728],{"class":101},[91,75206,58222],{"class":1941},[91,75208,102],{"class":101},[91,75210,686],{"class":206},[91,75212,75213],{"class":47952},"哈",[91,75215,686],{"class":206},[91,75217,660],{"class":101},[91,75219,75220],{"class":1941},"test",[91,75222,102],{"class":101},[91,75224,75225],{"class":206},"'哈'",[91,75227,75228],{"class":101},"))  ",[91,75230,75231],{"class":160},"\u002F\u002Ftrue\n",[91,75233,75234,75236,75238,75240,75242,75244,75246,75248,75250,75252,75255,75257],{"class":93,"line":1606},[91,75235,73728],{"class":101},[91,75237,58222],{"class":1941},[91,75239,102],{"class":101},[91,75241,686],{"class":206},[91,75243,75213],{"class":47952},[91,75245,686],{"class":206},[91,75247,660],{"class":101},[91,75249,75220],{"class":1941},[91,75251,102],{"class":101},[91,75253,75254],{"class":206},"'哈哈'",[91,75256,75228],{"class":101},[91,75258,75231],{"class":160},[91,75260,75261,75263,75265,75267,75269,75271,75273,75275,75277,75279,75282,75285],{"class":93,"line":1620},[91,75262,73728],{"class":101},[91,75264,58222],{"class":1941},[91,75266,102],{"class":101},[91,75268,686],{"class":206},[91,75270,75213],{"class":47952},[91,75272,686],{"class":206},[91,75274,660],{"class":101},[91,75276,75220],{"class":1941},[91,75278,102],{"class":101},[91,75280,75281],{"class":206},"'二哈'",[91,75283,75284],{"class":101},"))   ",[91,75286,75231],{"class":160},[91,75288,75289],{"class":93,"line":1625},[91,75290,2378],{"emptyLinePlaceholder":17},[91,75292,75293],{"class":93,"line":1631},[91,75294,75295],{"class":160},"    \u002F\u002F 1.边界符\n",[91,75297,75298,75300,75302,75304,75306,75308,75310,75312,75314,75316,75318,75320,75322],{"class":93,"line":1652},[91,75299,73728],{"class":101},[91,75301,58222],{"class":1941},[91,75303,102],{"class":101},[91,75305,686],{"class":206},[91,75307,1068],{"class":97},[91,75309,75213],{"class":47952},[91,75311,686],{"class":206},[91,75313,660],{"class":101},[91,75315,75220],{"class":1941},[91,75317,102],{"class":101},[91,75319,75225],{"class":206},[91,75321,75228],{"class":101},[91,75323,75231],{"class":160},[91,75325,75326,75328,75330,75332,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352],{"class":93,"line":1657},[91,75327,73728],{"class":101},[91,75329,58222],{"class":1941},[91,75331,102],{"class":101},[91,75333,686],{"class":206},[91,75335,1068],{"class":97},[91,75337,75213],{"class":47952},[91,75339,404],{"class":97},[91,75341,686],{"class":206},[91,75343,660],{"class":101},[91,75345,75220],{"class":1941},[91,75347,102],{"class":101},[91,75349,75254],{"class":206},[91,75351,75228],{"class":101},[91,75353,75354],{"class":160},"\u002F\u002Ffalse\n",[91,75356,75357],{"class":93,"line":1671},[91,75358,75359],{"class":160},"    \u002F\u002F 2.量词\n",[91,75361,75362],{"class":93,"line":1676},[91,75363,75364],{"class":160},"    \u002F\u002F 量词 * 类似于 >= 0\n",[91,75366,75367,75369,75371,75373,75375,75377,75379,75382,75384,75386,75388,75390,75392,75394],{"class":93,"line":1705},[91,75368,73728],{"class":101},[91,75370,58222],{"class":1941},[91,75372,102],{"class":101},[91,75374,686],{"class":206},[91,75376,1068],{"class":97},[91,75378,75213],{"class":47952},[91,75380,75381],{"class":97},"*$",[91,75383,686],{"class":206},[91,75385,660],{"class":101},[91,75387,75220],{"class":1941},[91,75389,102],{"class":101},[91,75391,75254],{"class":206},[91,75393,75228],{"class":101},[91,75395,75231],{"class":160},[91,75397,75398,75400,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75423,75425],{"class":93,"line":1710},[91,75399,73728],{"class":101},[91,75401,58222],{"class":1941},[91,75403,102],{"class":101},[91,75405,686],{"class":206},[91,75407,1068],{"class":97},[91,75409,75213],{"class":47952},[91,75411,75381],{"class":97},[91,75413,686],{"class":206},[91,75415,660],{"class":101},[91,75417,75220],{"class":1941},[91,75419,102],{"class":101},[91,75421,75422],{"class":206},"'二哈好傻'",[91,75424,75228],{"class":101},[91,75426,75427],{"class":160},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[91,75429,75430,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75455,75457],{"class":93,"line":1727},[91,75431,73728],{"class":101},[91,75433,58222],{"class":1941},[91,75435,102],{"class":101},[91,75437,686],{"class":206},[91,75439,1068],{"class":97},[91,75441,75213],{"class":47952},[91,75443,75381],{"class":97},[91,75445,686],{"class":206},[91,75447,660],{"class":101},[91,75449,75220],{"class":1941},[91,75451,102],{"class":101},[91,75453,75454],{"class":206},"'哈好哈'",[91,75456,75284],{"class":101},[91,75458,75459],{"class":160},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[91,75461,75462],{"class":93,"line":1732},[91,75463,2378],{"emptyLinePlaceholder":17},[91,75465,75466],{"class":93,"line":1737},[91,75467,75468],{"class":160},"    \u002F\u002F +类似于>=1\n",[91,75470,75471,75473,75475,75477,75479,75481,75483,75486,75488,75490,75492,75494,75496,75498],{"class":93,"line":1742},[91,75472,73728],{"class":101},[91,75474,58222],{"class":1941},[91,75476,102],{"class":101},[91,75478,686],{"class":206},[91,75480,1068],{"class":97},[91,75482,75213],{"class":47952},[91,75484,75485],{"class":97},"+$",[91,75487,686],{"class":206},[91,75489,660],{"class":101},[91,75491,75220],{"class":1941},[91,75493,102],{"class":101},[91,75495,75254],{"class":206},[91,75497,75228],{"class":101},[91,75499,75231],{"class":160},[91,75501,75502,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528],{"class":93,"line":1756},[91,75503,73728],{"class":101},[91,75505,58222],{"class":1941},[91,75507,102],{"class":101},[91,75509,686],{"class":206},[91,75511,1068],{"class":97},[91,75513,75213],{"class":47952},[91,75515,75485],{"class":97},[91,75517,686],{"class":206},[91,75519,660],{"class":101},[91,75521,75220],{"class":1941},[91,75523,102],{"class":101},[91,75525,75422],{"class":206},[91,75527,75228],{"class":101},[91,75529,75427],{"class":160},[91,75531,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558],{"class":93,"line":1761},[91,75533,73728],{"class":101},[91,75535,58222],{"class":1941},[91,75537,102],{"class":101},[91,75539,686],{"class":206},[91,75541,1068],{"class":97},[91,75543,75213],{"class":47952},[91,75545,75485],{"class":97},[91,75547,686],{"class":206},[91,75549,660],{"class":101},[91,75551,75220],{"class":1941},[91,75553,102],{"class":101},[91,75555,75454],{"class":206},[91,75557,75284],{"class":101},[91,75559,75354],{"class":160},[91,75561,75562],{"class":93,"line":2555},[91,75563,2378],{"emptyLinePlaceholder":17},[91,75565,75566],{"class":93,"line":2569},[91,75567,75568],{"class":160},"    \u002F\u002F ?类似于0次或一次\n",[91,75570,75571,75573,75575,75577,75579,75581,75584,75586,75588,75590,75592,75594,75596,75598],{"class":93,"line":2577},[91,75572,73728],{"class":101},[91,75574,58222],{"class":1941},[91,75576,102],{"class":101},[91,75578,686],{"class":206},[91,75580,1068],{"class":97},[91,75582,75583],{"class":47952},"哈？",[91,75585,404],{"class":97},[91,75587,686],{"class":206},[91,75589,660],{"class":101},[91,75591,75220],{"class":1941},[91,75593,102],{"class":101},[91,75595,74203],{"class":206},[91,75597,75284],{"class":101},[91,75599,75231],{"class":160},[91,75601,75602,75604,75606,75608,75610,75612,75614,75617,75619,75621,75623,75625,75627,75629],{"class":93,"line":2582},[91,75603,73728],{"class":101},[91,75605,58222],{"class":1941},[91,75607,102],{"class":101},[91,75609,686],{"class":206},[91,75611,1068],{"class":97},[91,75613,75213],{"class":47952},[91,75615,75616],{"class":97},"?$",[91,75618,686],{"class":206},[91,75620,660],{"class":101},[91,75622,75220],{"class":1941},[91,75624,102],{"class":101},[91,75626,75254],{"class":206},[91,75628,75228],{"class":101},[91,75630,75354],{"class":160},[91,75632,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659],{"class":93,"line":2588},[91,75634,73728],{"class":101},[91,75636,58222],{"class":1941},[91,75638,102],{"class":101},[91,75640,686],{"class":206},[91,75642,1068],{"class":97},[91,75644,75213],{"class":47952},[91,75646,75616],{"class":97},[91,75648,686],{"class":206},[91,75650,660],{"class":101},[91,75652,75220],{"class":1941},[91,75654,102],{"class":101},[91,75656,75422],{"class":206},[91,75658,75228],{"class":101},[91,75660,75427],{"class":160},[91,75662,75663,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689],{"class":93,"line":2594},[91,75664,73728],{"class":101},[91,75666,58222],{"class":1941},[91,75668,102],{"class":101},[91,75670,686],{"class":206},[91,75672,1068],{"class":97},[91,75674,75213],{"class":47952},[91,75676,75616],{"class":97},[91,75678,686],{"class":206},[91,75680,660],{"class":101},[91,75682,75220],{"class":1941},[91,75684,102],{"class":101},[91,75686,75454],{"class":206},[91,75688,75228],{"class":101},[91,75690,75354],{"class":160},[91,75692,75693],{"class":93,"line":2599},[91,75694,2378],{"emptyLinePlaceholder":17},[91,75696,75697],{"class":93,"line":7927},[91,75698,75699],{"class":160},"    \u002F\u002F {n}写几，就必须出现几次\n",[91,75701,75702,75704,75706,75708,75710,75712,75714,75717,75719,75721,75723,75725,75728,75731],{"class":93,"line":7951},[91,75703,73728],{"class":101},[91,75705,58222],{"class":1941},[91,75707,102],{"class":101},[91,75709,686],{"class":206},[91,75711,1068],{"class":97},[91,75713,75213],{"class":47952},[91,75715,75716],{"class":97},"{4}$",[91,75718,686],{"class":206},[91,75720,660],{"class":101},[91,75722,75220],{"class":1941},[91,75724,102],{"class":101},[91,75726,75727],{"class":206},"'哈哈哈哈'",[91,75729,75730],{"class":101},")) ",[91,75732,75231],{"class":160},[91,75734,75735],{"class":93,"line":7956},[91,75736,2378],{"emptyLinePlaceholder":17},[91,75738,75739],{"class":93,"line":7962},[91,75740,75741],{"class":160},"    \u002F\u002F {n,}大于等于n次\n",[91,75743,75744,75746,75748,75750,75752,75754,75756,75759,75761,75763,75765,75767,75769,75771],{"class":93,"line":7989},[91,75745,73728],{"class":101},[91,75747,58222],{"class":1941},[91,75749,102],{"class":101},[91,75751,686],{"class":206},[91,75753,1068],{"class":97},[91,75755,75213],{"class":47952},[91,75757,75758],{"class":97},"{4,}$",[91,75760,686],{"class":206},[91,75762,660],{"class":101},[91,75764,75220],{"class":1941},[91,75766,102],{"class":101},[91,75768,75727],{"class":206},[91,75770,75730],{"class":101},[91,75772,75231],{"class":160},[91,75774,75775,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797,75800,75802],{"class":93,"line":7994},[91,75776,73728],{"class":101},[91,75778,58222],{"class":1941},[91,75780,102],{"class":101},[91,75782,686],{"class":206},[91,75784,1068],{"class":97},[91,75786,75213],{"class":47952},[91,75788,75758],{"class":97},[91,75790,686],{"class":206},[91,75792,660],{"class":101},[91,75794,75220],{"class":1941},[91,75796,102],{"class":101},[91,75798,75799],{"class":206},"'哈哈哈哈哈'",[91,75801,75730],{"class":101},[91,75803,75231],{"class":160},[91,75805,75806],{"class":93,"line":8000},[91,75807,2378],{"emptyLinePlaceholder":17},[91,75809,75810],{"class":93,"line":8012},[91,75811,75812],{"class":160},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[91,75814,75815,75817,75819,75821,75823,75825,75827,75830,75832,75834,75836,75838,75840,75842],{"class":93,"line":8024},[91,75816,73728],{"class":101},[91,75818,58222],{"class":1941},[91,75820,102],{"class":101},[91,75822,686],{"class":206},[91,75824,1068],{"class":97},[91,75826,75213],{"class":47952},[91,75828,75829],{"class":97},"{4,6}$",[91,75831,686],{"class":206},[91,75833,660],{"class":101},[91,75835,75220],{"class":1941},[91,75837,102],{"class":101},[91,75839,75727],{"class":206},[91,75841,75730],{"class":101},[91,75843,75231],{"class":160},[91,75845,75846,75848,75850,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872],{"class":93,"line":8036},[91,75847,73728],{"class":101},[91,75849,58222],{"class":1941},[91,75851,102],{"class":101},[91,75853,686],{"class":206},[91,75855,1068],{"class":97},[91,75857,75213],{"class":47952},[91,75859,75829],{"class":97},[91,75861,686],{"class":206},[91,75863,660],{"class":101},[91,75865,75220],{"class":1941},[91,75867,102],{"class":101},[91,75869,75799],{"class":206},[91,75871,75730],{"class":101},[91,75873,75231],{"class":160},[91,75875,75876,75878,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898,75901,75903],{"class":93,"line":9695},[91,75877,73728],{"class":101},[91,75879,58222],{"class":1941},[91,75881,102],{"class":101},[91,75883,686],{"class":206},[91,75885,1068],{"class":97},[91,75887,75213],{"class":47952},[91,75889,75829],{"class":97},[91,75891,686],{"class":206},[91,75893,660],{"class":101},[91,75895,75220],{"class":1941},[91,75897,102],{"class":101},[91,75899,75900],{"class":206},"'哈哈哈哈哈哈哈'",[91,75902,75730],{"class":101},[91,75904,75354],{"class":160},[91,75906,75907],{"class":93,"line":9720},[91,75908,2378],{"emptyLinePlaceholder":17},[91,75910,75911],{"class":93,"line":9743},[91,75912,75913],{"class":160},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[91,75915,75916,75918,75920,75922,75924,75926,75929,75931,75933,75935,75937,75939,75942,75944],{"class":93,"line":9767},[91,75917,73728],{"class":101},[91,75919,58222],{"class":1941},[91,75921,102],{"class":101},[91,75923,686],{"class":206},[91,75925,1068],{"class":97},[91,75927,75928],{"class":150},"[abc]",[91,75930,404],{"class":97},[91,75932,686],{"class":206},[91,75934,660],{"class":101},[91,75936,75220],{"class":1941},[91,75938,102],{"class":101},[91,75940,75941],{"class":206},"'a'",[91,75943,75228],{"class":101},[91,75945,75231],{"class":160},[91,75947,75948,75950,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75973,75975],{"class":93,"line":9772},[91,75949,73728],{"class":101},[91,75951,58222],{"class":1941},[91,75953,102],{"class":101},[91,75955,686],{"class":206},[91,75957,1068],{"class":97},[91,75959,75928],{"class":150},[91,75961,404],{"class":97},[91,75963,686],{"class":206},[91,75965,660],{"class":101},[91,75967,75220],{"class":1941},[91,75969,102],{"class":101},[91,75971,75972],{"class":206},"'b'",[91,75974,75228],{"class":101},[91,75976,75231],{"class":160},[91,75978,75979,75981,75983,75985,75987,75989,75991,75993,75995,75997,75999,76001,76004,76006],{"class":93,"line":9777},[91,75980,73728],{"class":101},[91,75982,58222],{"class":1941},[91,75984,102],{"class":101},[91,75986,686],{"class":206},[91,75988,1068],{"class":97},[91,75990,75928],{"class":150},[91,75992,404],{"class":97},[91,75994,686],{"class":206},[91,75996,660],{"class":101},[91,75998,75220],{"class":1941},[91,76000,102],{"class":101},[91,76002,76003],{"class":206},"'c'",[91,76005,75228],{"class":101},[91,76007,75231],{"class":160},[91,76009,76010,76012,76014,76016,76018,76020,76022,76024,76026,76028,76031,76033],{"class":93,"line":9782},[91,76011,73728],{"class":101},[91,76013,58222],{"class":1941},[91,76015,102],{"class":101},[91,76017,686],{"class":206},[91,76019,75928],{"class":150},[91,76021,686],{"class":206},[91,76023,660],{"class":101},[91,76025,75220],{"class":1941},[91,76027,102],{"class":101},[91,76029,76030],{"class":206},"'ab'",[91,76032,75228],{"class":101},[91,76034,75231],{"class":160},[91,76036,76037,76039,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063],{"class":93,"line":9791},[91,76038,73728],{"class":101},[91,76040,58222],{"class":1941},[91,76042,102],{"class":101},[91,76044,686],{"class":206},[91,76046,1068],{"class":97},[91,76048,75928],{"class":150},[91,76050,404],{"class":97},[91,76052,686],{"class":206},[91,76054,660],{"class":101},[91,76056,75220],{"class":1941},[91,76058,102],{"class":101},[91,76060,76030],{"class":206},[91,76062,75228],{"class":101},[91,76064,76065],{"class":160},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[91,76067,76068,76070,76072,76074,76076,76078,76080,76083,76085,76087,76089,76091,76093,76095],{"class":93,"line":9796},[91,76069,73728],{"class":101},[91,76071,58222],{"class":1941},[91,76073,102],{"class":101},[91,76075,686],{"class":206},[91,76077,1068],{"class":97},[91,76079,75928],{"class":150},[91,76081,76082],{"class":97},"{2}$",[91,76084,686],{"class":206},[91,76086,660],{"class":101},[91,76088,75220],{"class":1941},[91,76090,102],{"class":101},[91,76092,76030],{"class":206},[91,76094,75228],{"class":101},[91,76096,76097],{"class":160},"\u002F\u002Ftrue   可以选两个\n",[91,76099,76100,76102,76104,76106,76108,76110,76113,76115,76117,76119,76121,76123,76126,76128],{"class":93,"line":9802},[91,76101,73728],{"class":101},[91,76103,58222],{"class":1941},[91,76105,102],{"class":101},[91,76107,686],{"class":206},[91,76109,1068],{"class":97},[91,76111,76112],{"class":150},"[a-z]",[91,76114,404],{"class":97},[91,76116,686],{"class":206},[91,76118,660],{"class":101},[91,76120,75220],{"class":1941},[91,76122,102],{"class":101},[91,76124,76125],{"class":206},"'p'",[91,76127,75284],{"class":101},[91,76129,76130],{"class":160},"\u002F\u002Ftrue   依然只能选一个\n",[91,76132,76133,76135,76137,76139,76141,76143,76146,76148,76150,76152,76154,76156,76158,76160],{"class":93,"line":9823},[91,76134,73728],{"class":101},[91,76136,58222],{"class":1941},[91,76138,102],{"class":101},[91,76140,686],{"class":206},[91,76142,1068],{"class":97},[91,76144,76145],{"class":150},"[A-Z]",[91,76147,404],{"class":97},[91,76149,686],{"class":206},[91,76151,660],{"class":101},[91,76153,75220],{"class":1941},[91,76155,102],{"class":101},[91,76157,76125],{"class":206},[91,76159,75284],{"class":101},[91,76161,75354],{"class":160},[91,76163,76164,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184,76186,76189,76191],{"class":93,"line":9829},[91,76165,73728],{"class":101},[91,76167,58222],{"class":1941},[91,76169,102],{"class":101},[91,76171,686],{"class":206},[91,76173,1068],{"class":97},[91,76175,76145],{"class":150},[91,76177,404],{"class":97},[91,76179,686],{"class":206},[91,76181,660],{"class":101},[91,76183,75220],{"class":1941},[91,76185,102],{"class":101},[91,76187,76188],{"class":206},"'P'",[91,76190,75284],{"class":101},[91,76192,75231],{"class":160},[91,76194,76195,76197,76199,76201,76203,76205,76208,76210,76212,76214,76216,76218,76221,76223],{"class":93,"line":9843},[91,76196,73728],{"class":101},[91,76198,58222],{"class":1941},[91,76200,102],{"class":101},[91,76202,686],{"class":206},[91,76204,1068],{"class":97},[91,76206,76207],{"class":150},"[0-9]",[91,76209,404],{"class":97},[91,76211,686],{"class":206},[91,76213,660],{"class":101},[91,76215,75220],{"class":1941},[91,76217,102],{"class":101},[91,76219,76220],{"class":206},"'0'",[91,76222,75284],{"class":101},[91,76224,75231],{"class":160},[91,76226,76227,76229,76231,76233,76235,76237,76240,76242,76244,76246,76248,76250,76252,76254],{"class":93,"line":9849},[91,76228,73728],{"class":101},[91,76230,58222],{"class":1941},[91,76232,102],{"class":101},[91,76234,686],{"class":206},[91,76236,1068],{"class":97},[91,76238,76239],{"class":150},"[a-zA-Z0-9]",[91,76241,404],{"class":97},[91,76243,686],{"class":206},[91,76245,660],{"class":101},[91,76247,75220],{"class":1941},[91,76249,102],{"class":101},[91,76251,76125],{"class":206},[91,76253,75228],{"class":101},[91,76255,75231],{"class":160},[91,76257,76258,76260,76262],{"class":93,"line":9876},[91,76259,52392],{"class":101},[91,76261,51788],{"class":51275},[91,76263,51282],{"class":101},[91,76265,76266,76268,76270],{"class":93,"line":9885},[91,76267,51760],{"class":101},[91,76269,51775],{"class":51275},[91,76271,51282],{"class":101},[91,76273,76274],{"class":93,"line":9891},[91,76275,2378],{"emptyLinePlaceholder":17},[91,76277,76278,76280,76282],{"class":93,"line":9899},[91,76279,51760],{"class":101},[91,76281,50610],{"class":51275},[91,76283,51282],{"class":101},[21977,76285,76287],{"id":76286},"_3624-修饰符","3.6.2.4 修饰符",[38,76289,76290],{},[1440,76291],{"alt":10,"src":76292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[38,76294,76295],{},"replace是个方法，使用的时候一定不要忘记括号()",[38,76297,76298],{},[1440,76299],{"alt":10,"src":76300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[83,76302,76304],{"className":50608,"code":76303,"language":50610,"meta":10,"style":10},"\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",[88,76305,76306,76316,76330,76338,76352,76372,76384,76392,76400,76408,76440,76471,76476,76508,76519,76552,76561,76569,76577],{"__ignoreMap":10},[91,76307,76308,76310,76312,76314],{"class":93,"line":94},[91,76309,51272],{"class":101},[91,76311,51276],{"class":51275},[91,76313,51279],{"class":1941},[91,76315,51282],{"class":101},[91,76317,76318,76320,76322,76324,76326,76328],{"class":93,"line":11},[91,76319,1012],{"class":101},[91,76321,50610],{"class":51275},[91,76323,51291],{"class":1941},[91,76325,147],{"class":101},[91,76327,51296],{"class":206},[91,76329,51282],{"class":101},[91,76331,76332,76334,76336],{"class":93,"line":1157},[91,76333,1012],{"class":101},[91,76335,51309],{"class":51275},[91,76337,51282],{"class":101},[91,76339,76340,76342,76344,76346,76348,76350],{"class":93,"line":1172},[91,76341,52119],{"class":101},[91,76343,51319],{"class":51275},[91,76345,51322],{"class":1941},[91,76347,147],{"class":101},[91,76349,51327],{"class":206},[91,76351,51282],{"class":101},[91,76353,76354,76356,76358,76360,76362,76364,76366,76368,76370],{"class":93,"line":1178},[91,76355,52119],{"class":101},[91,76357,51319],{"class":51275},[91,76359,14899],{"class":1941},[91,76361,147],{"class":101},[91,76363,51366],{"class":206},[91,76365,51346],{"class":1941},[91,76367,147],{"class":101},[91,76369,51373],{"class":206},[91,76371,51282],{"class":101},[91,76373,76374,76376,76378,76380,76382],{"class":93,"line":1192},[91,76375,52119],{"class":101},[91,76377,51382],{"class":51275},[91,76379,51385],{"class":101},[91,76381,51382],{"class":51275},[91,76383,51282],{"class":101},[91,76385,76386,76388,76390],{"class":93,"line":1198},[91,76387,51760],{"class":101},[91,76389,51309],{"class":51275},[91,76391,51282],{"class":101},[91,76393,76394,76396,76398],{"class":93,"line":1289},[91,76395,1012],{"class":101},[91,76397,51775],{"class":51275},[91,76399,51282],{"class":101},[91,76401,76402,76404,76406],{"class":93,"line":1295},[91,76403,52119],{"class":101},[91,76405,51788],{"class":51275},[91,76407,51282],{"class":101},[91,76409,76410,76412,76414,76416,76418,76420,76423,76425,76427,76429,76431,76433,76436,76438],{"class":93,"line":1307},[91,76411,73728],{"class":101},[91,76413,58222],{"class":1941},[91,76415,102],{"class":101},[91,76417,686],{"class":206},[91,76419,1068],{"class":97},[91,76421,76422],{"class":47952},"java",[91,76424,404],{"class":97},[91,76426,686],{"class":206},[91,76428,660],{"class":101},[91,76430,75220],{"class":1941},[91,76432,102],{"class":101},[91,76434,76435],{"class":206},"'java'",[91,76437,75730],{"class":101},[91,76439,75231],{"class":160},[91,76441,76442,76444,76446,76448,76450,76452,76454,76456,76458,76460,76462,76464,76467,76469],{"class":93,"line":1590},[91,76443,73728],{"class":101},[91,76445,58222],{"class":1941},[91,76447,102],{"class":101},[91,76449,686],{"class":206},[91,76451,1068],{"class":97},[91,76453,76422],{"class":47952},[91,76455,404],{"class":97},[91,76457,686],{"class":206},[91,76459,660],{"class":101},[91,76461,75220],{"class":1941},[91,76463,102],{"class":101},[91,76465,76466],{"class":206},"'Java'",[91,76468,75730],{"class":101},[91,76470,75354],{"class":160},[91,76472,76473],{"class":93,"line":1595},[91,76474,76475],{"class":160},"    \u002F\u002F 不区分大小写、\n",[91,76477,76478,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506],{"class":93,"line":1601},[91,76479,73728],{"class":101},[91,76481,58222],{"class":1941},[91,76483,102],{"class":101},[91,76485,686],{"class":206},[91,76487,1068],{"class":97},[91,76489,76422],{"class":47952},[91,76491,404],{"class":97},[91,76493,686],{"class":206},[91,76495,543],{"class":97},[91,76497,660],{"class":101},[91,76499,75220],{"class":1941},[91,76501,102],{"class":101},[91,76503,76466],{"class":206},[91,76505,75730],{"class":101},[91,76507,75231],{"class":160},[91,76509,76510,76512,76514,76516],{"class":93,"line":1606},[91,76511,11200],{"class":97},[91,76513,73894],{"class":150},[91,76515,13543],{"class":97},[91,76517,76518],{"class":206}," 'java是一门编程语言，学完java工资很高'\n",[91,76520,76521,76523,76526,76528,76531,76534,76536,76538,76540,76542,76545,76547,76550],{"class":93,"line":1620},[91,76522,11200],{"class":97},[91,76524,76525],{"class":150}," result",[91,76527,13543],{"class":97},[91,76529,76530],{"class":101}," str.",[91,76532,76533],{"class":1941},"replace",[91,76535,102],{"class":101},[91,76537,686],{"class":206},[91,76539,76422],{"class":47952},[91,76541,686],{"class":206},[91,76543,76544],{"class":97},"ig",[91,76546,12414],{"class":101},[91,76548,76549],{"class":206},"'前端'",[91,76551,108],{"class":101},[91,76553,76554,76556,76558],{"class":93,"line":1625},[91,76555,73728],{"class":101},[91,76557,58222],{"class":1941},[91,76559,76560],{"class":101},"(result)\n",[91,76562,76563,76565,76567],{"class":93,"line":1631},[91,76564,52392],{"class":101},[91,76566,51788],{"class":51275},[91,76568,51282],{"class":101},[91,76570,76571,76573,76575],{"class":93,"line":1652},[91,76572,51760],{"class":101},[91,76574,51775],{"class":51275},[91,76576,51282],{"class":101},[91,76578,76579,76581,76583],{"class":93,"line":1657},[91,76580,51760],{"class":101},[91,76582,50610],{"class":51275},[91,76584,51282],{"class":101},[5105,76586,76587],{},"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":10,"searchDepth":11,"depth":11,"links":76589},[76590,76600,76612,76629,76636,76644],{"id":53335,"depth":11,"text":53336,"children":76591},[76592,76593,76594,76595,76596,76597,76598,76599],{"id":53339,"depth":1157,"text":53340},{"id":53372,"depth":1157,"text":53373},{"id":53411,"depth":1157,"text":53412},{"id":53569,"depth":1157,"text":53570},{"id":53617,"depth":1157,"text":53618},{"id":53754,"depth":1157,"text":53755},{"id":54076,"depth":1157,"text":54077},{"id":57064,"depth":1157,"text":57065},{"id":57092,"depth":11,"text":57093,"children":76601},[76602,76603,76604,76605,76606,76607,76608,76609,76610,76611],{"id":57096,"depth":1157,"text":57097},{"id":57119,"depth":1157,"text":57120},{"id":58034,"depth":1157,"text":58035},{"id":58724,"depth":1157,"text":58725},{"id":59006,"depth":1157,"text":59007},{"id":63167,"depth":1157,"text":63168},{"id":63337,"depth":1157,"text":63338},{"id":63465,"depth":1157,"text":63466},{"id":63490,"depth":1157,"text":63491},{"id":64879,"depth":1157,"text":64880},{"id":66032,"depth":11,"text":66033,"children":76613},[76614,76615,76616,76617,76618,76619,76620,76621,76622,76623,76624,76625,76626,76627,76628],{"id":66036,"depth":1157,"text":66037},{"id":66690,"depth":1157,"text":66691},{"id":68385,"depth":1157,"text":68386},{"id":68426,"depth":1157,"text":68427},{"id":68468,"depth":1157,"text":68469},{"id":68482,"depth":1157,"text":68483},{"id":68531,"depth":1157,"text":68532},{"id":68543,"depth":1157,"text":68544},{"id":68558,"depth":1157,"text":68559},{"id":68594,"depth":1157,"text":68595},{"id":68675,"depth":1157,"text":68676},{"id":68803,"depth":1157,"text":68804},{"id":68815,"depth":1157,"text":68816},{"id":68834,"depth":1157,"text":68835},{"id":70945,"depth":1157,"text":70946},{"id":70964,"depth":11,"text":70965,"children":76630},[76631,76632,76633,76634,76635],{"id":70985,"depth":1157,"text":70986},{"id":71005,"depth":1157,"text":71006},{"id":71054,"depth":1157,"text":71055},{"id":71179,"depth":1157,"text":71180},{"id":71360,"depth":1157,"text":71361},{"id":71378,"depth":11,"text":71379,"children":76637},[76638,76639,76640,76641,76642,76643],{"id":71393,"depth":1157,"text":71394},{"id":71452,"depth":1157,"text":71453},{"id":71476,"depth":1157,"text":71477},{"id":71796,"depth":1157,"text":71797},{"id":71828,"depth":1157,"text":71829},{"id":71851,"depth":1157,"text":71852},{"id":74919,"depth":11,"text":74920,"children":76645},[76646,76647],{"id":74953,"depth":1157,"text":74954},{"id":74992,"depth":1157,"text":74993},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53307,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76654,"title":76655,"body":76656,"description":13,"extension":14,"meta":92793,"navigation":17,"path":92794,"seo":92795,"stem":92796,"__hash__":92797},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76657,"toc":92729},[76658,76661,76664,76668,76672,76677,76682,76693,76697,76702,76705,76709,76712,76717,76721,76725,76728,76733,76736,76740,76743,76751,76754,76758,76763,76768,76771,76775,76780,76785,76788,76792,76797,76800,76805,76808,76813,76816,76821,76826,76829,76832,76836,76841,76846,76849,76853,76857,76860,76863,76866,76870,76874,76879,76884,76887,76891,76896,76901,76904,76907,76910,76913,76916,76919,76922,76925,76928,76933,76937,76942,76947,76950,76953,76956,76959,76962,76965,76968,76971,76975,76979,76982,76985,76988,76993,76995,76998,77001,77004,77007,77010,77013,77016,77019,77022,77025,77028,77031,77034,77039,77044,77049,77052,77056,77059,77064,77068,77070,77081,77086,77187,77190,77193,77196,77199,77202,77205,77208,77211,77213,77216,77219,77222,77225,77228,77230,77233,77236,77239,77242,77245,77248,77250,77253,77255,77257,77260,77264,77268,77271,77274,77277,77280,77283,77286,77289,77292,77295,77300,77420,77423,77426,77431,77434,77437,77440,77443,77448,77451,77454,77457,77460,77465,77468,77568,77633,77707,77711,77714,77717,77721,77724,77738,77767,77770,77773,77776,77779,77782,77785,77788,77790,77793,77796,77799,77802,77806,77811,77815,77820,77895,77898,78081,78084,78087,78090,78093,78096,78098,78101,78104,78107,78110,78113,78116,78118,78122,78125,78130,78133,78136,78139,78142,78144,78149,78152,78155,78158,78161,78163,78168,78171,78174,78176,78178,78181,78185,78188,78191,78196,78199,78202,78205,78255,78260,78264,78269,78272,78341,78344,78353,78357,78362,78365,78368,78376,78379,78396,80198,80202,80206,80211,80214,80218,80224,80230,80382,80387,80392,80395,80398,80401,80404,80407,80410,80413,80416,80419,80422,80425,80428,80433,80437,80440,80451,80455,80460,80463,80466,80469,80472,80475,80477,80480,80483,80486,80489,80491,80508,80511,80515,80518,80523,80528,80531,80534,80538,80541,80544,80553,80556,80560,80563,80568,80573,80640,80644,80647,80650,80655,80660,80746,80751,80755,80758,80761,80776,80779,80784,80788,80793,80902,80905,80916,81066,81070,81075,81184,81188,81193,81198,81203,81206,81213,81233,81269,81433,81438,81441,81446,81453,81456,81459,81462,81521,81577,81633,81637,81642,81957,81960,81964,81967,81972,82081,82086,82090,82095,82099,82170,82174,82176,82179,82182,82220,82496,82500,82517,82583,82617,82621,82624,82629,82658,82665,82674,82679,82694,82699,82708,82711,82848,82852,82914,82918,82923,83168,83172,83177,83180,83183,83186,83189,83193,83198,84779,84783,84787,84793,84796,84801,84805,84808,84813,84816,84827,84831,84836,84840,84845,84850,84853,84858,84862,84866,84869,84874,84879,84882,84885,84888,85010,85015,85117,85120,85123,85127,85132,85304,85309,85313,85316,85321,85387,85392,85395,85526,85529,85534,85537,85540,85631,85636,85639,85642,85645,85648,85653,85658,85661,85666,85671,85676,85680,85683,85686,85691,85696,85701,85706,85760,85763,85766,85771,85774,85777,85782,85787,85792,85796,85801,85815,85820,85823,85828,85832,85837,85842,85847,85852,85857,85862,85867,85872,85875,85879,85884,85887,85890,85893,85898,85903,85906,85909,85913,85916,85919,85924,85929,85934,85939,85942,85947,85952,86013,86018,86021,86026,87267,87272,87276,87280,87285,87288,87293,87298,87301,87306,87308,87313,87317,87320,87323,87334,87338,87343,87348,87403,87408,87413,87418,87629,87634,87638,87643,87646,87648,87651,87654,88101,88106,88113,88119,88122,88125,88389,88394,88398,88663,88668,88672,88677,88682,88687,88692,89023,89026,89031,89036,89039,89043,89047,89052,89057,89062,89067,89072,89077,89081,89084,89089,89094,89097,89171,89176,89181,89186,89188,89191,89561,89566,89571,89576,89579,89582,89684,89689,89694,89797,89801,89806,89810,89814,89819,89824,89827,89832,89835,89838,90231,90236,90239,90242,90245,90248,90768,90772,90777,90782,90787,90790,90795,90798,90801,91183,91188,91190,91192,91195,91198,91710,91714,91775,91778,91781,91784,91788,91791,91796,91801,92726],[29,76659,76655],{"id":76660},"_4js进阶",[38,76662,76663],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[33,76665,76667],{"id":76666},"_41-作用域","4.1 作用域",[63,76669,76671],{"id":76670},"_411-局部作用域","4.1.1 局部作用域",[38,76673,76674],{},[1440,76675],{"alt":10,"src":76676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[38,76678,76679],{},[1440,76680],{"alt":10,"src":76681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1109,76683,76684,76687,76690],{},[49,76685,76686],{},"函数作用域在函数内部",[49,76688,76689],{},"块级作用域在{}",[49,76691,76692],{},"对象的那个{}不是作用域，不是块作用域",[63,76694,76696],{"id":76695},"_412-全局作用域","4.1.2 全局作用域",[38,76698,76699],{},[1440,76700],{"alt":10,"src":76701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[38,76703,76704],{},"window.a=10不要这样写",[63,76706,76708],{"id":76707},"_413-作用域链","4.1.3 作用域链",[38,76710,76711],{},"变量查找机制",[38,76713,76714],{},[1440,76715],{"alt":10,"src":76716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[33,76718,76720],{"id":76719},"_42-垃圾回收机制","4.2 垃圾回收机制",[63,76722,76724],{"id":76723},"_421-大体介绍","4.2.1 大体介绍",[38,76726,76727],{},"垃圾回收机制(Garbage Collection) 简称 GC",[38,76729,76730],{},[1440,76731],{"alt":10,"src":76732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[38,76734,76735],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[63,76737,76739],{"id":76738},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[38,76741,76742],{},"堆栈空间分配区别：",[46,76744,76745,76748],{},[49,76746,76747],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[49,76749,76750],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[38,76752,76753],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21977,76755,76757],{"id":76756},"_4221-引用计数","4.2.2.1 引用计数",[38,76759,76760],{},[1440,76761],{"alt":10,"src":76762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[38,76764,76765],{},[1440,76766],{"alt":10,"src":76767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[38,76769,76770],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21977,76772,76774],{"id":76773},"_4222-标记清除法","4.2.2.2 标记清除法",[38,76776,76777],{},[1440,76778],{"alt":10,"src":76779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[38,76781,76782],{},[1440,76783],{"alt":10,"src":76784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[38,76786,76787],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[33,76789,76791],{"id":76790},"_43-闭包","4.3 闭包",[38,76793,76794],{},[1440,76795],{"alt":10,"src":76796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[38,76798,76799],{},"闭包：内层函数+外层函数的变量",[38,76801,76802],{},[1440,76803],{"alt":10,"src":76804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[38,76806,76807],{},"closure就是闭包",[38,76809,76810],{},[1440,76811],{"alt":10,"src":76812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[38,76814,76815],{},"内层函数必须包含外层函数的变量才是闭包",[38,76817,76818],{},[1440,76819],{"alt":10,"src":76820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[38,76822,76823],{},[1440,76824],{"alt":10,"src":76825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[38,76827,76828],{},"闭包可能会引起内存泄漏",[38,76830,76831],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[33,76833,76835],{"id":76834},"_44-变量提升","4.4 变量提升",[38,76837,76838],{},[1440,76839],{"alt":10,"src":76840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[38,76842,76843],{},[1440,76844],{"alt":10,"src":76845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[38,76847,76848],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[33,76850,76852],{"id":76851},"_45-函数进阶","4.5 函数进阶",[63,76854,76856],{"id":76855},"_451-函数提升","4.5.1 函数提升",[38,76858,76859],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[38,76861,76862],{},"只提升函数声明，不提升函数调用",[51788,76864,76865],{},"\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",[63,76867,76869],{"id":76868},"_452-函数参数","4.5.2 函数参数",[21977,76871,76873],{"id":76872},"_4521-动态参数","4.5.2.1 动态参数",[38,76875,76876],{},[1440,76877],{"alt":10,"src":76878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[38,76880,76881],{},[1440,76882],{"alt":10,"src":76883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[38,76885,76886],{},"箭头函数里边没有arguments",[21977,76888,76890],{"id":76889},"_4522-剩余参数","4.5.2.2 剩余参数",[38,76892,76893],{},[1440,76894],{"alt":10,"src":76895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[38,76897,76898],{},[1440,76899],{"alt":10,"src":76900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[38,76902,76903],{},"剩余参数使用的时候不需要写...",[38,76905,76906],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[38,76908,76909],{},"  function getSum(a,b,...arr) {",[38,76911,76912],{},"  console.log(11)",[38,76914,76915],{},"  }",[38,76917,76918],{},"  getSum(1,2,3,4)",[38,76920,76921],{},"  将1传给a，2传给b，剩下的传给剩余参数",[38,76923,76924],{},"  getSum(1,2)",[38,76926,76927],{},"  将1传给a，2传给b，剩余参数为一个空数组",[38,76929,76930],{},[1440,76931],{"alt":10,"src":76932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21977,76934,76936],{"id":76935},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[38,76938,76939],{},[1440,76940],{"alt":10,"src":76941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[38,76943,76944],{},[1440,76945],{"alt":10,"src":76946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[38,76948,76949],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[38,76951,76952],{},"展开运算符可以用于数组之间的合并：",[38,76954,76955],{},"const arr1 = [1, 2, 3]",[38,76957,76958],{},"const arr2 = [3, 4, 5]",[38,76960,76961],{},"const arr = [...arr1, ...arr2]",[38,76963,76964],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[38,76966,76967],{},"剩余参数：函数参数使用，得到真数组",[38,76969,76970],{},"展开运算符：数组中使用，数组展开",[63,76972,76974],{"id":76973},"_453-箭头函数","4.5.3 箭头函数",[21977,76976,76978],{"id":76977},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[38,76980,76981],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[38,76983,76984],{},"它不是万能的！！！",[38,76986,76987],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[38,76989,76990],{},[1440,76991],{"alt":10,"src":76992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[38,76994,131],{},[38,76996,76997],{},"① 只有一个形参的时候，可以省略小括号：",[38,76999,77000],{},"const fn=x=>{console.log(x)}",[38,77002,77003],{},"② 只有一行代码时可以省略大括号：",[38,77005,77006],{},"const fn=x=>console.log(11)",[38,77008,77009],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[38,77011,77012],{},"const fn=x=>x+x",[38,77014,77015],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[38,77017,77018],{},"⑤ 阻止表单默认提交：",[38,77020,77021],{},"const form = document.querySelector('form')",[38,77023,77024],{},"form.addEventListener('click', ev => ev.preventDefault())",[38,77026,77027],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[38,77029,77030],{},"const fn=uname=>({uname:uname})",[38,77032,77033],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[38,77035,77036],{},[1440,77037],{"alt":10,"src":77038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[38,77040,77041],{},[1440,77042],{"alt":10,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[38,77045,77046],{},[1440,77047],{"alt":10,"src":77048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[38,77050,77051],{},"一定不要忘记用()，有()就理解为自带return",[21977,77053,77055],{"id":77054},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[38,77057,77058],{},"箭头函数是没有动态参数的arguments",[38,77060,77061],{},[1440,77062],{"alt":10,"src":77063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21977,77065,77067],{"id":77066},"_4533-箭头函数this","4.5.3.3 箭头函数this",[38,77069,11311],{},[46,77071,77072,77075,77078],{},[49,77073,77074],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[49,77076,77077],{},"事件回调函数使用箭头函数时，this 为全局的 window",[49,77079,77080],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[38,77082,77083],{},[1440,77084],{"alt":10,"src":77085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[83,77087,77089],{"className":53042,"code":77088,"language":53044,"meta":10,"style":10},"  \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",[88,77090,77091,77099,77104,77109,77114,77119,77124,77128,77133,77137,77141,77146,77151,77156,77160,77164,77169,77174,77179],{"__ignoreMap":10},[91,77092,77093,77095,77097],{"class":93,"line":94},[91,77094,52119],{"class":101},[91,77096,51788],{"class":51275},[91,77098,51282],{"class":101},[91,77100,77101],{"class":93,"line":11},[91,77102,77103],{"class":101},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[91,77105,77106],{"class":93,"line":1157},[91,77107,77108],{"class":101},"    console.log(this) \u002F\u002F指向window\n",[91,77110,77111],{"class":93,"line":1172},[91,77112,77113],{"class":101},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[91,77115,77116],{"class":93,"line":1178},[91,77117,77118],{"class":101},"    function fn() {\n",[91,77120,77121],{"class":93,"line":1192},[91,77122,77123],{"class":101},"      console.log(this)  \u002F\u002F指向window\n",[91,77125,77126],{"class":93,"line":1198},[91,77127,2165],{"class":101},[91,77129,77130],{"class":93,"line":1289},[91,77131,77132],{"class":101},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[91,77134,77135],{"class":93,"line":1295},[91,77136,2378],{"emptyLinePlaceholder":17},[91,77138,77139],{"class":93,"line":1307},[91,77140,71498],{"class":101},[91,77142,77143],{"class":93,"line":1590},[91,77144,77145],{"class":101},"      name: 'andy',\n",[91,77147,77148],{"class":93,"line":1595},[91,77149,77150],{"class":101},"      sayHai: function () {\n",[91,77152,77153],{"class":93,"line":1601},[91,77154,77155],{"class":101},"        console.log(this)\n",[91,77157,77158],{"class":93,"line":1606},[91,77159,52373],{"class":101},[91,77161,77162],{"class":93,"line":1620},[91,77163,2165],{"class":101},[91,77165,77166],{"class":93,"line":1625},[91,77167,77168],{"class":101},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[91,77170,77171],{"class":93,"line":1631},[91,77172,77173],{"class":101},"    \u002F\u002F 2.箭头函数的this\n",[91,77175,77176],{"class":93,"line":1652},[91,77177,77178],{"class":101},"    const fn = () => console.log(this)\n",[91,77180,77181,77183,77185],{"class":93,"line":1657},[91,77182,52392],{"class":101},[91,77184,51788],{"class":51275},[91,77186,51282],{"class":101},[38,77188,77189],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[38,77191,77192],{},"const fn = () => console.log(this)",[38,77194,77195],{},"fn() \u002F\u002F指向window",[38,77197,77198],{},"\u002F\u002F 3.对象方法箭头函数 this",[38,77200,77201],{},"①",[38,77203,77204],{},"const obj = {",[38,77206,77207],{},"uname: 'pink老师',",[38,77209,77210],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[38,77212,1048],{},[38,77214,77215],{},"调用对象里边的函数",[38,77217,77218],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[38,77220,77221],{},"obj.sayHai()",[38,77223,77224],{},"②",[38,77226,77227],{},"const obj1 = {",[38,77229,77207],{},[38,77231,77232],{},"sayHai: function () {",[38,77234,77235],{},"let i = 10",[38,77237,77238],{},"const count = () => {",[38,77240,77241],{},"console.log(this)",[38,77243,77244],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[38,77246,77247],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[38,77249,1048],{},[38,77251,77252],{},"count()",[38,77254,1048],{},[38,77256,1048],{},[38,77258,77259],{},"obj1.sayHai()",[33,77261,77263],{"id":77262},"_46-解构赋值","4.6 解构赋值",[63,77265,77267],{"id":77266},"_461-数组解构","4.6.1 数组解构",[38,77269,77270],{},"以前要是使用数组中的值的话：",[38,77272,77273],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[38,77275,77276],{},"const arr=[100,60,80]",[38,77278,77279],{},"const max=arr[0]",[38,77281,77282],{},"const min=arr[1]",[38,77284,77285],{},"const avg=arr[2]",[38,77287,77288],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[38,77290,77291],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[38,77293,77294],{},"这个写法就类似于上边的那种用很多const的方法",[38,77296,77297],{},[1440,77298],{"alt":10,"src":77299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[83,77301,77303],{"className":50608,"code":77302,"language":50610,"meta":10,"style":10},"①变量之间交换值:\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",[88,77304,77305,77310,77315,77320,77325,77330,77334,77338,77343,77347,77352,77357,77361,77366,77371,77382,77392,77397,77402,77407,77411,77415],{"__ignoreMap":10},[91,77306,77307],{"class":93,"line":94},[91,77308,77309],{"class":101},"①变量之间交换值:\n",[91,77311,77312],{"class":93,"line":11},[91,77313,77314],{"class":101},"let a=1\n",[91,77316,77317],{"class":93,"line":1157},[91,77318,77319],{"class":101},"let b=2;\n",[91,77321,77322],{"class":93,"line":1172},[91,77323,77324],{"class":101},"必须加这行代码，不然就会报错\n",[91,77326,77327],{"class":93,"line":1178},[91,77328,77329],{"class":101},"[b,a]=[a,b]\n",[91,77331,77332],{"class":93,"line":1192},[91,77333,2378],{"emptyLinePlaceholder":17},[91,77335,77336],{"class":93,"line":1198},[91,77337,2378],{"emptyLinePlaceholder":17},[91,77339,77340],{"class":93,"line":1289},[91,77341,77342],{"class":101},"可以写成下面的方式：\n",[91,77344,77345],{"class":93,"line":1295},[91,77346,77314],{"class":101},[91,77348,77349],{"class":93,"line":1307},[91,77350,77351],{"class":101},"let b=2\n",[91,77353,77354],{"class":93,"line":1590},[91,77355,77356],{"class":101},";[b,a]=[a,b]\n",[91,77358,77359],{"class":93,"line":1595},[91,77360,2378],{"emptyLinePlaceholder":17},[91,77362,77363],{"class":93,"line":1601},[91,77364,77365],{"class":101},"②排序\n",[91,77367,77368],{"class":93,"line":1606},[91,77369,77370],{"class":101},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[91,77372,77373,77376,77379],{"class":93,"line":1620},[91,77374,77375],{"class":101},"for (let i = 0; i ",[91,77377,1012],{"class":77378},"s7hpK",[91,77380,77381],{"class":101}," arr1.length; i++) {\n",[91,77383,77384,77387,77389],{"class":93,"line":1625},[91,77385,77386],{"class":101},"   for (let j = 0; j ",[91,77388,1012],{"class":77378},[91,77390,77391],{"class":101}," arr1.length - 1; j++) {\n",[91,77393,77394],{"class":93,"line":1631},[91,77395,77396],{"class":101},"      if (arr1[j] > arr1[j + 1]) {\n",[91,77398,77399],{"class":93,"line":1652},[91,77400,77401],{"class":101},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[91,77403,77404],{"class":93,"line":1657},[91,77405,77406],{"class":101},"       }\n",[91,77408,77409],{"class":93,"line":1671},[91,77410,4287],{"class":101},[91,77412,77413],{"class":93,"line":1676},[91,77414,1543],{"class":101},[91,77416,77417],{"class":93,"line":1705},[91,77418,77419],{"class":101},"console.log(arr1)\n",[38,77421,77422],{},"数组解构的细节：",[38,77424,77425],{},"①变量多，单元值少",[38,77427,77428],{},[1440,77429],{"alt":10,"src":77430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[38,77432,77433],{},"防止出现undefined的方法：",[38,77435,77436],{},"const [a=0,b=0] =[1]",[38,77438,77439],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[38,77441,77442],{},"②变量少，单元值多",[38,77444,77445],{},[1440,77446],{"alt":10,"src":77447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[38,77449,77450],{},"此时可以使用剩余参数来接收多余的值",[38,77452,77453],{},"const [a,b,...c]=[1,2,3,4]",[38,77455,77456],{},"console.log(c) 输出[3,4]",[38,77458,77459],{},"③可以按需导入，忽略某些返回值",[38,77461,77462],{},[1440,77463],{"alt":10,"src":77464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[38,77466,77467],{},"④支持多维数组的结构",[83,77469,77473],{"className":77470,"code":77471,"language":77472,"meta":10,"style":10},"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",[88,77474,77475,77503,77519,77534,77549],{"__ignoreMap":10},[91,77476,77477,77479,77481,77483,77485,77487,77489,77491,77494,77496,77498,77500],{"class":93,"line":94},[91,77478,6771],{"class":97},[91,77480,51808],{"class":101},[91,77482,147],{"class":97},[91,77484,52201],{"class":101},[91,77486,319],{"class":150},[91,77488,12414],{"class":101},[91,77490,179],{"class":150},[91,77492,77493],{"class":101},", [",[91,77495,173],{"class":150},[91,77497,12414],{"class":101},[91,77499,395],{"class":150},[91,77501,77502],{"class":101},"]]\n",[91,77504,77505,77508,77510,77512,77514,77516],{"class":93,"line":11},[91,77506,77507],{"class":101},"console.",[91,77509,58222],{"class":1941},[91,77511,3829],{"class":101},[91,77513,293],{"class":150},[91,77515,4194],{"class":101},[91,77517,77518],{"class":160},"  \u002F\u002F1\n",[91,77520,77521,77523,77525,77527,77529,77531],{"class":93,"line":1157},[91,77522,77507],{"class":101},[91,77524,58222],{"class":1941},[91,77526,3829],{"class":101},[91,77528,319],{"class":150},[91,77530,4194],{"class":101},[91,77532,77533],{"class":160},"  \u002F\u002F2\n",[91,77535,77536,77538,77540,77542,77544,77546],{"class":93,"line":1172},[91,77537,77507],{"class":101},[91,77539,58222],{"class":1941},[91,77541,3829],{"class":101},[91,77543,179],{"class":150},[91,77545,4194],{"class":101},[91,77547,77548],{"class":160},"  \u002F\u002F[3,4]\n",[91,77550,77551,77553,77555,77557,77559,77561,77563,77565],{"class":93,"line":1178},[91,77552,77507],{"class":101},[91,77554,58222],{"class":1941},[91,77556,3829],{"class":101},[91,77558,179],{"class":150},[91,77560,4879],{"class":101},[91,77562,293],{"class":150},[91,77564,4194],{"class":101},[91,77566,77567],{"class":160},"  \u002F\u002F3\n",[83,77569,77571],{"className":77470,"code":77570,"language":77472,"meta":10,"style":10},"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",[88,77572,77573,77600,77611,77622],{"__ignoreMap":10},[91,77574,77575,77577,77580,77582,77584,77586,77588,77590,77592,77594,77596,77598],{"class":93,"line":94},[91,77576,6771],{"class":97},[91,77578,77579],{"class":101}," [a, b, c] ",[91,77581,147],{"class":97},[91,77583,52201],{"class":101},[91,77585,319],{"class":150},[91,77587,12414],{"class":101},[91,77589,179],{"class":150},[91,77591,77493],{"class":101},[91,77593,173],{"class":150},[91,77595,12414],{"class":101},[91,77597,395],{"class":150},[91,77599,77502],{"class":101},[91,77601,77602,77604,77606,77609],{"class":93,"line":11},[91,77603,77507],{"class":101},[91,77605,58222],{"class":1941},[91,77607,77608],{"class":101},"(a)",[91,77610,77518],{"class":160},[91,77612,77613,77615,77617,77620],{"class":93,"line":1157},[91,77614,77507],{"class":101},[91,77616,58222],{"class":1941},[91,77618,77619],{"class":101},"(b)",[91,77621,77533],{"class":160},[91,77623,77624,77626,77628,77631],{"class":93,"line":1172},[91,77625,77507],{"class":101},[91,77627,58222],{"class":1941},[91,77629,77630],{"class":101},"(c)",[91,77632,77548],{"class":160},[83,77634,77636],{"className":77470,"code":77635,"language":77472,"meta":10,"style":10},"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",[88,77637,77638,77665,77675,77685,77695],{"__ignoreMap":10},[91,77639,77640,77642,77645,77647,77649,77651,77653,77655,77657,77659,77661,77663],{"class":93,"line":94},[91,77641,6771],{"class":97},[91,77643,77644],{"class":101}," [a, b, [c, d]] ",[91,77646,147],{"class":97},[91,77648,52201],{"class":101},[91,77650,319],{"class":150},[91,77652,12414],{"class":101},[91,77654,179],{"class":150},[91,77656,77493],{"class":101},[91,77658,173],{"class":150},[91,77660,12414],{"class":101},[91,77662,395],{"class":150},[91,77664,77502],{"class":101},[91,77666,77667,77669,77671,77673],{"class":93,"line":11},[91,77668,77507],{"class":101},[91,77670,58222],{"class":1941},[91,77672,77608],{"class":101},[91,77674,77518],{"class":160},[91,77676,77677,77679,77681,77683],{"class":93,"line":1157},[91,77678,77507],{"class":101},[91,77680,58222],{"class":1941},[91,77682,77619],{"class":101},[91,77684,77533],{"class":160},[91,77686,77687,77689,77691,77693],{"class":93,"line":1172},[91,77688,77507],{"class":101},[91,77690,58222],{"class":1941},[91,77692,77630],{"class":101},[91,77694,77567],{"class":160},[91,77696,77697,77699,77701,77704],{"class":93,"line":1178},[91,77698,77507],{"class":101},[91,77700,58222],{"class":1941},[91,77702,77703],{"class":101},"(d)",[91,77705,77706],{"class":160},"  \u002F\u002F4\n",[63,77708,77710],{"id":77709},"_462-对象解构","4.6.2 对象解构",[38,77712,77713],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[38,77715,77716],{},"用的非常非常多！！！！！！",[21977,77718,77720],{"id":77719},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[38,77722,77723],{},"基本语法：",[46,77725,77726,77729,77732,77735],{},[49,77727,77728],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[49,77730,77731],{},"对象属性的值将被赋值给与属性名相同的变量",[49,77733,77734],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[49,77736,77737],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[83,77739,77741],{"className":50608,"code":77740,"language":50610,"meta":10,"style":10},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[88,77742,77743,77748,77753,77758,77762],{"__ignoreMap":10},[91,77744,77745],{"class":93,"line":94},[91,77746,77747],{"class":101},"const obj = {\n",[91,77749,77750],{"class":93,"line":11},[91,77751,77752],{"class":101},"   uname: 'pink老师',\n",[91,77754,77755],{"class":93,"line":1157},[91,77756,77757],{"class":101},"   age: 18,\n",[91,77759,77760],{"class":93,"line":1172},[91,77761,1543],{"class":101},[91,77763,77764],{"class":93,"line":1178},[91,77765,77766],{"class":101},"const { uname, age } = obj\n",[38,77768,77769],{},"上方代码这样写等价于：",[38,77771,77772],{},"const uname等价于obj.uname",[38,77774,77775],{},"变量名可以重新改名：",[38,77777,77778],{},"const uname='red老师'",[38,77780,77781],{},"const user={",[38,77783,77784],{},"  uname:'pink老师',",[38,77786,77787],{},"  age:18",[38,77789,1048],{},[38,77791,77792],{},"const {uname,age}=user",[38,77794,77795],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[38,77797,77798],{},"const {旧变量名：新变量名}=对象",[38,77800,77801],{},"const {uname:username,age}=user",[21977,77803,77805],{"id":77804},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[38,77807,77808],{},[1440,77809],{"alt":10,"src":77810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21977,77812,77814],{"id":77813},"_4623-多级对象解构","4.6.2.3 多级对象解构",[38,77816,77817],{},[1440,77818],{"alt":10,"src":77819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[83,77821,77823],{"className":53042,"code":77822,"language":53044,"meta":10,"style":10},"  \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",[88,77824,77825,77833,77838,77843,77848,77853,77858,77863,77868,77873,77877,77882,77887],{"__ignoreMap":10},[91,77826,77827,77829,77831],{"class":93,"line":94},[91,77828,52119],{"class":101},[91,77830,51788],{"class":51275},[91,77832,51282],{"class":101},[91,77834,77835],{"class":93,"line":11},[91,77836,77837],{"class":101},"    const pig = {\n",[91,77839,77840],{"class":93,"line":1157},[91,77841,77842],{"class":101},"      name: '佩奇',\n",[91,77844,77845],{"class":93,"line":1172},[91,77846,77847],{"class":101},"      family: {\n",[91,77849,77850],{"class":93,"line":1178},[91,77851,77852],{"class":101},"        mother: '猪妈妈',\n",[91,77854,77855],{"class":93,"line":1192},[91,77856,77857],{"class":101},"        father: '猪爸爸',\n",[91,77859,77860],{"class":93,"line":1198},[91,77861,77862],{"class":101},"        sister: '乔治'\n",[91,77864,77865],{"class":93,"line":1289},[91,77866,77867],{"class":101},"      },\n",[91,77869,77870],{"class":93,"line":1295},[91,77871,77872],{"class":101},"      age: 6\n",[91,77874,77875],{"class":93,"line":1307},[91,77876,2165],{"class":101},[91,77878,77879],{"class":93,"line":1590},[91,77880,77881],{"class":101},"    \u002F\u002F 多级对象解构\n",[91,77883,77884],{"class":93,"line":1595},[91,77885,77886],{"class":101},"    const { name, family: { mother, father, sister }, age } = pig\n",[91,77888,77889,77891,77893],{"class":93,"line":1601},[91,77890,52392],{"class":101},[91,77892,51788],{"class":51275},[91,77894,51282],{"class":101},[38,77896,77897],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[83,77899,77902],{"className":77900,"code":77901,"language":76422,"meta":10,"style":10},"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",[88,77903,77904,77909,77920,77932,77944,77953,77957,77968,77980,77990,77995,77999,78009,78020,78029,78033,78037,78048,78059,78068,78072,78077],{"__ignoreMap":10},[91,77905,77906],{"class":93,"line":94},[91,77907,77908],{"class":160},"    \u002F\u002F 这是后台传递过来的数据\n",[91,77910,77911,77913,77916,77918],{"class":93,"line":11},[91,77912,11200],{"class":97},[91,77914,77915],{"class":101}," msg ",[91,77917,147],{"class":97},[91,77919,15551],{"class":101},[91,77921,77922,77925,77927,77930],{"class":93,"line":1157},[91,77923,77924],{"class":206},"      \"code\"",[91,77926,961],{"class":97},[91,77928,77929],{"class":150}," 200",[91,77931,31441],{"class":101},[91,77933,77934,77937,77939,77942],{"class":93,"line":1172},[91,77935,77936],{"class":206},"      \"msg\"",[91,77938,961],{"class":97},[91,77940,77941],{"class":206}," \"获取新闻列表成功\"",[91,77943,31441],{"class":101},[91,77945,77946,77949,77951],{"class":93,"line":1178},[91,77947,77948],{"class":206},"      \"data\"",[91,77950,961],{"class":97},[91,77952,55422],{"class":101},[91,77954,77955],{"class":93,"line":1192},[91,77956,2488],{"class":101},[91,77958,77959,77962,77964,77966],{"class":93,"line":1198},[91,77960,77961],{"class":206},"          \"id\"",[91,77963,961],{"class":97},[91,77965,25093],{"class":150},[91,77967,31441],{"class":101},[91,77969,77970,77973,77975,77978],{"class":93,"line":1289},[91,77971,77972],{"class":206},"          \"title\"",[91,77974,961],{"class":97},[91,77976,77977],{"class":206}," \"5G商用自己，三大运用商收入下降\"",[91,77979,31441],{"class":101},[91,77981,77982,77985,77987],{"class":93,"line":1295},[91,77983,77984],{"class":206},"          \"count\"",[91,77986,961],{"class":97},[91,77988,77989],{"class":150}," 58\n",[91,77991,77992],{"class":93,"line":1307},[91,77993,77994],{"class":101},"        },\n",[91,77996,77997],{"class":93,"line":1590},[91,77998,2488],{"class":101},[91,78000,78001,78003,78005,78007],{"class":93,"line":1595},[91,78002,77961],{"class":206},[91,78004,961],{"class":97},[91,78006,14734],{"class":150},[91,78008,31441],{"class":101},[91,78010,78011,78013,78015,78018],{"class":93,"line":1601},[91,78012,77972],{"class":206},[91,78014,961],{"class":97},[91,78016,78017],{"class":206}," \"国际媒体头条速览\"",[91,78019,31441],{"class":101},[91,78021,78022,78024,78026],{"class":93,"line":1606},[91,78023,77984],{"class":206},[91,78025,961],{"class":97},[91,78027,78028],{"class":150}," 56\n",[91,78030,78031],{"class":93,"line":1620},[91,78032,77994],{"class":101},[91,78034,78035],{"class":93,"line":1625},[91,78036,2488],{"class":101},[91,78038,78039,78041,78043,78046],{"class":93,"line":1631},[91,78040,77961],{"class":206},[91,78042,961],{"class":97},[91,78044,78045],{"class":150}," 3",[91,78047,31441],{"class":101},[91,78049,78050,78052,78054,78057],{"class":93,"line":1652},[91,78051,77972],{"class":206},[91,78053,961],{"class":97},[91,78055,78056],{"class":206}," \"乌克兰和俄罗斯持续冲突\"",[91,78058,31441],{"class":101},[91,78060,78061,78063,78065],{"class":93,"line":1657},[91,78062,77984],{"class":206},[91,78064,961],{"class":97},[91,78066,78067],{"class":150}," 1669\n",[91,78069,78070],{"class":93,"line":1671},[91,78071,77994],{"class":101},[91,78073,78074],{"class":93,"line":1676},[91,78075,78076],{"class":101},"      ]\n",[91,78078,78079],{"class":93,"line":1705},[91,78080,2165],{"class":101},[38,78082,78083],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[38,78085,78086],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[38,78088,78089],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[38,78091,78092],{},"function({data}) {",[38,78094,78095],{},"console.log(data)",[38,78097,1048],{},[38,78099,78100],{},"render(msg)",[38,78102,78103],{},"实参传递给形参的时候解构了",[38,78105,78106],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[38,78108,78109],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[38,78111,78112],{},"function render({data:mydata}) {",[38,78114,78115],{},"  console.log(data)",[38,78117,1048],{},[63,78119,78121],{"id":78120},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[38,78123,78124],{},"有两种情况：一个是数组结构，一个是立即执行函数",[46,78126,78127],{},[49,78128,78129],{},"如果对一个数组进行遍历，有两种方式：",[38,78131,78132],{},"①法1",[38,78134,78135],{},"const arr=[1,2,3]",[38,78137,78138],{},"arr.map(function(item,index) {",[38,78140,78141],{},"  console.log(item)",[38,78143,52439],{},[38,78145,78146],{},[1440,78147],{"alt":10,"src":78148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[38,78150,78151],{},"②法2",[38,78153,78154],{},"const str='pink'",[38,78156,78157],{},"[1,2,3].map(function(item,index) {",[38,78159,78160],{},"console.log(item)",[38,78162,52439],{},[38,78164,78165],{},[1440,78166],{"alt":10,"src":78167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[38,78169,78170],{},"此时会报错",[38,78172,78173],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[38,78175,78160],{},[38,78177,52439],{},[38,78179,78180],{},"内部会当成这样处理，所以我们用分号进行隔开",[33,78182,78184],{"id":78183},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[38,78186,78187],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[38,78189,78190],{},"可以理解为加强版的for循环",[38,78192,78193],{},[1440,78194],{"alt":10,"src":78195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[38,78197,78198],{},"里边不写return，不返回数组，只遍历不返回",[38,78200,78201],{},"map是返回数组",[38,78203,78204],{},"forEach主要用于遍历数组对象",[83,78206,78208],{"className":53042,"code":78207,"language":53044,"meta":10,"style":10},"  \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",[88,78209,78210,78218,78223,78228,78233,78238,78242,78247],{"__ignoreMap":10},[91,78211,78212,78214,78216],{"class":93,"line":94},[91,78213,52119],{"class":101},[91,78215,51788],{"class":51275},[91,78217,51282],{"class":101},[91,78219,78220],{"class":93,"line":11},[91,78221,78222],{"class":101},"    const arr = ['red', 'green', 'pink']\n",[91,78224,78225],{"class":93,"line":1157},[91,78226,78227],{"class":101},"    const result = arr.forEach(function (item, index) {\n",[91,78229,78230],{"class":93,"line":1172},[91,78231,78232],{"class":101},"      console.log(item)\n",[91,78234,78235],{"class":93,"line":1178},[91,78236,78237],{"class":101},"      console.log(index)\n",[91,78239,78240],{"class":93,"line":1192},[91,78241,33436],{"class":101},[91,78243,78244],{"class":93,"line":1198},[91,78245,78246],{"class":101},"    console.log(result)\n",[91,78248,78249,78251,78253],{"class":93,"line":1289},[91,78250,52392],{"class":101},[91,78252,51788],{"class":51275},[91,78254,51282],{"class":101},[38,78256,78257],{},[1440,78258],{"alt":10,"src":78259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[33,78261,78263],{"id":78262},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[38,78265,78266],{},[1440,78267],{"alt":10,"src":78268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[38,78270,78271],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[83,78273,78275],{"className":53042,"code":78274,"language":53044,"meta":10,"style":10},"\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",[88,78276,78277,78285,78293,78298,78303,78307,78311,78316,78320,78325,78333],{"__ignoreMap":10},[91,78278,78279,78281,78283],{"class":93,"line":94},[91,78280,1012],{"class":101},[91,78282,51775],{"class":51275},[91,78284,51282],{"class":101},[91,78286,78287,78289,78291],{"class":93,"line":11},[91,78288,52119],{"class":101},[91,78290,51788],{"class":51275},[91,78292,51282],{"class":101},[91,78294,78295],{"class":93,"line":1157},[91,78296,78297],{"class":101},"    const arr = [10, 20, 30]\n",[91,78299,78300],{"class":93,"line":1172},[91,78301,78302],{"class":101},"    const newArr = arr.filter(function (item, index) {\n",[91,78304,78305],{"class":93,"line":1178},[91,78306,78232],{"class":101},[91,78308,78309],{"class":93,"line":1192},[91,78310,78237],{"class":101},[91,78312,78313],{"class":93,"line":1198},[91,78314,78315],{"class":101},"      return item >= 20\n",[91,78317,78318],{"class":93,"line":1289},[91,78319,33436],{"class":101},[91,78321,78322],{"class":93,"line":1295},[91,78323,78324],{"class":101},"    console.log(newArr)\n",[91,78326,78327,78329,78331],{"class":93,"line":1307},[91,78328,52392],{"class":101},[91,78330,51788],{"class":51275},[91,78332,51282],{"class":101},[91,78334,78335,78337,78339],{"class":93,"line":1590},[91,78336,51760],{"class":101},[91,78338,51775],{"class":51275},[91,78340,51282],{"class":101},[38,78342,78343],{},"这个也可以写成箭头函数：",[83,78345,78347],{"className":50608,"code":78346,"language":50610,"meta":10,"style":10},"const newArr = arr.filter(item => item >= 20)\n",[88,78348,78349],{"__ignoreMap":10},[91,78350,78351],{"class":93,"line":94},[91,78352,78346],{"class":101},[33,78354,78356],{"id":78355},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[38,78358,78359],{},[1440,78360],{"alt":10,"src":78361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[38,78363,78364],{},"步骤：",[38,78366,78367],{},"①：渲染页面模块",[1109,78369,78370,78373],{},[49,78371,78372],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[49,78374,78375],{},"用forEach+字符串的形式",[38,78377,78378],{},"②：点击不同需求，显示不同页面内容",[1109,78380,78381,78384,78387,78390,78393],{},[49,78382,78383],{},"点击采取事件委托方式 .filter",[49,78385,78386],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[49,78388,78389],{},"筛选条件是根据点击的 data-index 来判断",[49,78391,78392],{},"可以使用对象解构，把事件对象解构",[49,78394,78395],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[83,78397,78399],{"className":50608,"code":78398,"language":50610,"meta":10,"style":10},"\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",[88,78400,78401,78411,78425,78429,78437,78451,78471,78483,78491,78497,78507,78517,78527,78531,78535,78541,78554,78566,78576,78588,78592,78596,78603,78616,78628,78645,78663,78676,78680,78684,78696,78706,78710,78714,78721,78762,78789,78799,78803,78807,78815,78827,78831,78835,78843,78855,78867,78878,78882,78886,78895,78907,78918,78922,78926,78935,78947,78959,78963,78967,78974,78984,78996,79008,79023,79027,79031,79039,79055,79065,79075,79085,79097,79101,79105,79115,79126,79136,79140,79148,79156,79160,79168,79183,79209,79234,79259,79278,79286,79300,79305,79310,79315,79320,79325,79333,79341,79346,79357,79362,79372,79382,79392,79402,79406,79410,79419,79428,79437,79446,79450,79454,79463,79472,79481,79490,79494,79498,79507,79516,79525,79534,79538,79542,79551,79560,79569,79578,79582,79586,79595,79604,79613,79622,79626,79630,79639,79648,79657,79666,79670,79674,79683,79692,79700,79709,79713,79717,79721,79726,79738,79743,79755,79759,79776,79804,79813,79818,79828,79838,79847,79852,79857,79861,79866,79883,79887,79892,79900,79905,79932,79937,79957,79962,79974,79979,79984,79989,80000,80014,80051,80069,80102,80119,80143,80147,80152,80158,80162,80166,80170,80178,80186,80190],{"__ignoreMap":10},[91,78402,78403,78405,78407,78409],{"class":93,"line":94},[91,78404,51272],{"class":101},[91,78406,51276],{"class":51275},[91,78408,51279],{"class":1941},[91,78410,51282],{"class":101},[91,78412,78413,78415,78417,78419,78421,78423],{"class":93,"line":11},[91,78414,1012],{"class":101},[91,78416,50610],{"class":51275},[91,78418,51291],{"class":1941},[91,78420,147],{"class":101},[91,78422,51296],{"class":206},[91,78424,51282],{"class":101},[91,78426,78427],{"class":93,"line":1157},[91,78428,2378],{"emptyLinePlaceholder":17},[91,78430,78431,78433,78435],{"class":93,"line":1172},[91,78432,1012],{"class":101},[91,78434,51309],{"class":51275},[91,78436,51282],{"class":101},[91,78438,78439,78441,78443,78445,78447,78449],{"class":93,"line":1178},[91,78440,52119],{"class":101},[91,78442,51319],{"class":51275},[91,78444,51322],{"class":1941},[91,78446,147],{"class":101},[91,78448,51327],{"class":206},[91,78450,51282],{"class":101},[91,78452,78453,78455,78457,78459,78461,78463,78465,78467,78469],{"class":93,"line":1192},[91,78454,52119],{"class":101},[91,78456,51319],{"class":51275},[91,78458,14899],{"class":1941},[91,78460,147],{"class":101},[91,78462,51366],{"class":206},[91,78464,51346],{"class":1941},[91,78466,147],{"class":101},[91,78468,51373],{"class":206},[91,78470,51282],{"class":101},[91,78472,78473,78475,78477,78479,78481],{"class":93,"line":1198},[91,78474,52119],{"class":101},[91,78476,51382],{"class":51275},[91,78478,51385],{"class":101},[91,78480,51382],{"class":51275},[91,78482,51282],{"class":101},[91,78484,78485,78487,78489],{"class":93,"line":1289},[91,78486,52119],{"class":101},[91,78488,5105],{"class":51275},[91,78490,51282],{"class":101},[91,78492,78493,78495],{"class":93,"line":1295},[91,78494,6382],{"class":51275},[91,78496,15551],{"class":101},[91,78498,78499,78501,78503,78505],{"class":93,"line":1307},[91,78500,54670],{"class":150},[91,78502,51412],{"class":101},[91,78504,293],{"class":150},[91,78506,1268],{"class":101},[91,78508,78509,78511,78513,78515],{"class":93,"line":1590},[91,78510,54681],{"class":150},[91,78512,51412],{"class":101},[91,78514,293],{"class":150},[91,78516,1268],{"class":101},[91,78518,78519,78521,78523,78525],{"class":93,"line":1595},[91,78520,72571],{"class":150},[91,78522,51412],{"class":101},[91,78524,60480],{"class":150},[91,78526,1268],{"class":101},[91,78528,78529],{"class":93,"line":1601},[91,78530,2165],{"class":101},[91,78532,78533],{"class":93,"line":1606},[91,78534,2378],{"emptyLinePlaceholder":17},[91,78536,78537,78539],{"class":93,"line":1620},[91,78538,62098],{"class":1941},[91,78540,15551],{"class":101},[91,78542,78543,78545,78547,78550,78552],{"class":93,"line":1625},[91,78544,54746],{"class":150},[91,78546,51412],{"class":101},[91,78548,78549],{"class":150},"990",[91,78551,51467],{"class":97},[91,78553,1268],{"class":101},[91,78555,78556,78558,78560,78562,78564],{"class":93,"line":1631},[91,78557,54681],{"class":150},[91,78559,51412],{"class":101},[91,78561,293],{"class":150},[91,78563,51531],{"class":150},[91,78565,1268],{"class":101},[91,78567,78568,78570,78572,78574],{"class":93,"line":1652},[91,78569,54984],{"class":150},[91,78571,51412],{"class":101},[91,78573,51452],{"class":150},[91,78575,1268],{"class":101},[91,78577,78578,78581,78583,78586],{"class":93,"line":1657},[91,78579,78580],{"class":150},"      flex-wrap",[91,78582,51412],{"class":101},[91,78584,78585],{"class":150},"wrap",[91,78587,1268],{"class":101},[91,78589,78590],{"class":93,"line":1671},[91,78591,2165],{"class":101},[91,78593,78594],{"class":93,"line":1676},[91,78595,2378],{"emptyLinePlaceholder":17},[91,78597,78598,78601],{"class":93,"line":1705},[91,78599,78600],{"class":1941},"    .item",[91,78602,15551],{"class":101},[91,78604,78605,78607,78609,78612,78614],{"class":93,"line":1710},[91,78606,54746],{"class":150},[91,78608,51412],{"class":101},[91,78610,78611],{"class":150},"240",[91,78613,51467],{"class":97},[91,78615,1268],{"class":101},[91,78617,78618,78620,78622,78624,78626],{"class":93,"line":1727},[91,78619,61975],{"class":150},[91,78621,51412],{"class":101},[91,78623,548],{"class":150},[91,78625,51467],{"class":97},[91,78627,1268],{"class":101},[91,78629,78630,78632,78634,78636,78638,78641,78643],{"class":93,"line":1732},[91,78631,54670],{"class":150},[91,78633,51412],{"class":101},[91,78635,802],{"class":150},[91,78637,51467],{"class":97},[91,78639,78640],{"class":150}," 30",[91,78642,51467],{"class":97},[91,78644,1268],{"class":101},[91,78646,78647,78649,78651,78653,78656,78659,78661],{"class":93,"line":1737},[91,78648,61835],{"class":150},[91,78650,51412],{"class":101},[91,78652,28096],{"class":150},[91,78654,78655],{"class":150}," ease",[91,78657,78658],{"class":150}," .5",[91,78660,797],{"class":97},[91,78662,1268],{"class":101},[91,78664,78665,78668,78670,78672,78674],{"class":93,"line":1742},[91,78666,78667],{"class":150},"      margin-bottom",[91,78669,51412],{"class":101},[91,78671,802],{"class":150},[91,78673,51467],{"class":97},[91,78675,1268],{"class":101},[91,78677,78678],{"class":93,"line":1756},[91,78679,2165],{"class":101},[91,78681,78682],{"class":93,"line":1761},[91,78683,2378],{"emptyLinePlaceholder":17},[91,78685,78686,78689,78691,78694],{"class":93,"line":2555},[91,78687,78688],{"class":1941},"    .item:nth-child",[91,78690,102],{"class":101},[91,78692,78693],{"class":150},"4n",[91,78695,12421],{"class":101},[91,78697,78698,78700,78702,78704],{"class":93,"line":2569},[91,78699,61975],{"class":150},[91,78701,51412],{"class":101},[91,78703,293],{"class":150},[91,78705,1268],{"class":101},[91,78707,78708],{"class":93,"line":2577},[91,78709,2165],{"class":101},[91,78711,78712],{"class":93,"line":2582},[91,78713,2378],{"emptyLinePlaceholder":17},[91,78715,78716,78719],{"class":93,"line":2588},[91,78717,78718],{"class":1941},"    .item:hover",[91,78720,15551],{"class":101},[91,78722,78723,78726,78728,78730,78732,78734,78736,78738,78740,78743,78745,78747,78749,78751,78753,78755,78757,78760],{"class":93,"line":2594},[91,78724,78725],{"class":150},"      box-shadow",[91,78727,51412],{"class":101},[91,78729,293],{"class":150},[91,78731,51467],{"class":97},[91,78733,4071],{"class":150},[91,78735,51467],{"class":97},[91,78737,2126],{"class":150},[91,78739,51467],{"class":97},[91,78741,78742],{"class":150}," rgba",[91,78744,102],{"class":101},[91,78746,293],{"class":150},[91,78748,12414],{"class":101},[91,78750,293],{"class":150},[91,78752,12414],{"class":101},[91,78754,293],{"class":150},[91,78756,12414],{"class":101},[91,78758,78759],{"class":150},".2",[91,78761,2697],{"class":101},[91,78763,78764,78767,78769,78772,78774,78776,78778,78781,78783,78785,78787],{"class":93,"line":2599},[91,78765,78766],{"class":150},"      transform",[91,78768,51412],{"class":101},[91,78770,78771],{"class":150},"translate3d",[91,78773,102],{"class":101},[91,78775,293],{"class":150},[91,78777,12414],{"class":101},[91,78779,78780],{"class":150},"-4",[91,78782,51467],{"class":97},[91,78784,12414],{"class":101},[91,78786,293],{"class":150},[91,78788,2697],{"class":101},[91,78790,78791,78793,78795,78797],{"class":93,"line":7927},[91,78792,62000],{"class":150},[91,78794,51412],{"class":101},[91,78796,62005],{"class":150},[91,78798,1268],{"class":101},[91,78800,78801],{"class":93,"line":7951},[91,78802,2165],{"class":101},[91,78804,78805],{"class":93,"line":7956},[91,78806,2378],{"emptyLinePlaceholder":17},[91,78808,78809,78811,78813],{"class":93,"line":7962},[91,78810,78600],{"class":1941},[91,78812,55590],{"class":51275},[91,78814,15551],{"class":101},[91,78816,78817,78819,78821,78823,78825],{"class":93,"line":7989},[91,78818,54746],{"class":150},[91,78820,51412],{"class":101},[91,78822,413],{"class":150},[91,78824,430],{"class":97},[91,78826,1268],{"class":101},[91,78828,78829],{"class":93,"line":7994},[91,78830,2165],{"class":101},[91,78832,78833],{"class":93,"line":8000},[91,78834,2378],{"emptyLinePlaceholder":17},[91,78836,78837,78839,78841],{"class":93,"line":8012},[91,78838,78600],{"class":1941},[91,78840,62279],{"class":1941},[91,78842,15551],{"class":101},[91,78844,78845,78847,78849,78851,78853],{"class":93,"line":8024},[91,78846,54897],{"class":150},[91,78848,51412],{"class":101},[91,78850,752],{"class":150},[91,78852,51467],{"class":97},[91,78854,1268],{"class":101},[91,78856,78857,78859,78861,78863,78865],{"class":93,"line":8036},[91,78858,78667],{"class":150},[91,78860,51412],{"class":101},[91,78862,548],{"class":150},[91,78864,51467],{"class":97},[91,78866,1268],{"class":101},[91,78868,78869,78871,78873,78876],{"class":93,"line":9695},[91,78870,57391],{"class":150},[91,78872,51412],{"class":101},[91,78874,78875],{"class":150},"#666",[91,78877,1268],{"class":101},[91,78879,78880],{"class":93,"line":9720},[91,78881,2165],{"class":101},[91,78883,78884],{"class":93,"line":9743},[91,78885,2378],{"emptyLinePlaceholder":17},[91,78887,78888,78890,78893],{"class":93,"line":9767},[91,78889,78600],{"class":1941},[91,78891,78892],{"class":1941}," .price",[91,78894,15551],{"class":101},[91,78896,78897,78899,78901,78903,78905],{"class":93,"line":9772},[91,78898,54897],{"class":150},[91,78900,51412],{"class":101},[91,78902,852],{"class":150},[91,78904,51467],{"class":97},[91,78906,1268],{"class":101},[91,78908,78909,78911,78913,78916],{"class":93,"line":9777},[91,78910,57391],{"class":150},[91,78912,51412],{"class":101},[91,78914,78915],{"class":150},"firebrick",[91,78917,1268],{"class":101},[91,78919,78920],{"class":93,"line":9782},[91,78921,2165],{"class":101},[91,78923,78924],{"class":93,"line":9791},[91,78925,2378],{"emptyLinePlaceholder":17},[91,78927,78928,78930,78933],{"class":93,"line":9796},[91,78929,78600],{"class":1941},[91,78931,78932],{"class":1941}," .price::before",[91,78934,15551],{"class":101},[91,78936,78937,78940,78942,78945],{"class":93,"line":9802},[91,78938,78939],{"class":150},"      content",[91,78941,51412],{"class":101},[91,78943,78944],{"class":206},"'￥'",[91,78946,1268],{"class":101},[91,78948,78949,78951,78953,78955,78957],{"class":93,"line":9823},[91,78950,54897],{"class":150},[91,78952,51412],{"class":101},[91,78954,651],{"class":150},[91,78956,51467],{"class":97},[91,78958,1268],{"class":101},[91,78960,78961],{"class":93,"line":9829},[91,78962,2165],{"class":101},[91,78964,78965],{"class":93,"line":9843},[91,78966,2378],{"emptyLinePlaceholder":17},[91,78968,78969,78972],{"class":93,"line":9849},[91,78970,78971],{"class":1941},"    .filter",[91,78973,15551],{"class":101},[91,78975,78976,78978,78980,78982],{"class":93,"line":9876},[91,78977,54984],{"class":150},[91,78979,51412],{"class":101},[91,78981,51452],{"class":150},[91,78983,1268],{"class":101},[91,78985,78986,78988,78990,78992,78994],{"class":93,"line":9885},[91,78987,54746],{"class":150},[91,78989,51412],{"class":101},[91,78991,78549],{"class":150},[91,78993,51467],{"class":97},[91,78995,1268],{"class":101},[91,78997,78998,79000,79002,79004,79006],{"class":93,"line":9891},[91,78999,54681],{"class":150},[91,79001,51412],{"class":101},[91,79003,293],{"class":150},[91,79005,51531],{"class":150},[91,79007,1268],{"class":101},[91,79009,79010,79012,79014,79016,79018,79020],{"class":93,"line":9899},[91,79011,54670],{"class":150},[91,79013,51412],{"class":101},[91,79015,758],{"class":150},[91,79017,51467],{"class":97},[91,79019,78640],{"class":150},[91,79021,79022],{"class":97},"px\n",[91,79024,79025],{"class":93,"line":9904},[91,79026,2165],{"class":101},[91,79028,79029],{"class":93,"line":16583},[91,79030,2378],{"emptyLinePlaceholder":17},[91,79032,79033,79035,79037],{"class":93,"line":16589},[91,79034,78971],{"class":1941},[91,79036,1376],{"class":51275},[91,79038,15551],{"class":101},[91,79040,79041,79043,79045,79047,79049,79051,79053],{"class":93,"line":16612},[91,79042,54670],{"class":150},[91,79044,51412],{"class":101},[91,79046,548],{"class":150},[91,79048,51467],{"class":97},[91,79050,8929],{"class":150},[91,79052,51467],{"class":97},[91,79054,1268],{"class":101},[91,79056,79057,79059,79061,79063],{"class":93,"line":16618},[91,79058,61696],{"class":150},[91,79060,51412],{"class":101},[91,79062,61793],{"class":150},[91,79064,1268],{"class":101},[91,79066,79067,79069,79071,79073],{"class":93,"line":16641},[91,79068,57391],{"class":150},[91,79070,51412],{"class":101},[91,79072,78875],{"class":150},[91,79074,1268],{"class":101},[91,79076,79077,79079,79081,79083],{"class":93,"line":16655},[91,79078,63945],{"class":150},[91,79080,51412],{"class":101},[91,79082,54712],{"class":150},[91,79084,1268],{"class":101},[91,79086,79087,79089,79091,79093,79095],{"class":93,"line":16675},[91,79088,61725],{"class":150},[91,79090,51412],{"class":101},[91,79092,802],{"class":150},[91,79094,51467],{"class":97},[91,79096,1268],{"class":101},[91,79098,79099],{"class":93,"line":16681},[91,79100,2165],{"class":101},[91,79102,79103],{"class":93,"line":16692},[91,79104,2378],{"emptyLinePlaceholder":17},[91,79106,79107,79109,79111,79113],{"class":93,"line":16715},[91,79108,78971],{"class":1941},[91,79110,1376],{"class":51275},[91,79112,61875],{"class":1941},[91,79114,15551],{"class":101},[91,79116,79117,79119,79121,79124],{"class":93,"line":16737},[91,79118,54859],{"class":150},[91,79120,51412],{"class":101},[91,79122,79123],{"class":150},"#05943c",[91,79125,1268],{"class":101},[91,79127,79128,79130,79132,79134],{"class":93,"line":16742},[91,79129,57391],{"class":150},[91,79131,51412],{"class":101},[91,79133,60817],{"class":150},[91,79135,1268],{"class":101},[91,79137,79138],{"class":93,"line":16748},[91,79139,2165],{"class":101},[91,79141,79142,79144,79146],{"class":93,"line":16762},[91,79143,52392],{"class":101},[91,79145,5105],{"class":51275},[91,79147,51282],{"class":101},[91,79149,79150,79152,79154],{"class":93,"line":16775},[91,79151,51760],{"class":101},[91,79153,51309],{"class":51275},[91,79155,51282],{"class":101},[91,79157,79158],{"class":93,"line":16780},[91,79159,2378],{"emptyLinePlaceholder":17},[91,79161,79162,79164,79166],{"class":93,"line":16794},[91,79163,1012],{"class":101},[91,79165,51775],{"class":51275},[91,79167,51282],{"class":101},[91,79169,79170,79172,79174,79176,79178,79181],{"class":93,"line":16799},[91,79171,52119],{"class":101},[91,79173,51586],{"class":51275},[91,79175,53461],{"class":1941},[91,79177,147],{"class":101},[91,79179,79180],{"class":206},"\"filter\"",[91,79182,51282],{"class":101},[91,79184,79185,79187,79189,79191,79193,79195,79198,79200,79202,79205,79207],{"class":93,"line":16805},[91,79186,51316],{"class":101},[91,79188,340],{"class":51275},[91,79190,61032],{"class":1941},[91,79192,147],{"class":101},[91,79194,61037],{"class":206},[91,79196,79197],{"class":1941}," data-index",[91,79199,147],{"class":101},[91,79201,3656],{"class":206},[91,79203,79204],{"class":101},">0-100元\u003C\u002F",[91,79206,340],{"class":51275},[91,79208,51282],{"class":101},[91,79210,79211,79213,79215,79217,79219,79221,79223,79225,79227,79230,79232],{"class":93,"line":16810},[91,79212,51316],{"class":101},[91,79214,340],{"class":51275},[91,79216,61032],{"class":1941},[91,79218,147],{"class":101},[91,79220,61037],{"class":206},[91,79222,79197],{"class":1941},[91,79224,147],{"class":101},[91,79226,3679],{"class":206},[91,79228,79229],{"class":101},">100-300元\u003C\u002F",[91,79231,340],{"class":51275},[91,79233,51282],{"class":101},[91,79235,79236,79238,79240,79242,79244,79246,79248,79250,79252,79255,79257],{"class":93,"line":16824},[91,79237,51316],{"class":101},[91,79239,340],{"class":51275},[91,79241,61032],{"class":1941},[91,79243,147],{"class":101},[91,79245,61037],{"class":206},[91,79247,79197],{"class":1941},[91,79249,147],{"class":101},[91,79251,3692],{"class":206},[91,79253,79254],{"class":101},">300元以上\u003C\u002F",[91,79256,340],{"class":51275},[91,79258,51282],{"class":101},[91,79260,79261,79263,79265,79267,79269,79271,79274,79276],{"class":93,"line":16829},[91,79262,51316],{"class":101},[91,79264,340],{"class":51275},[91,79266,61032],{"class":1941},[91,79268,147],{"class":101},[91,79270,61037],{"class":206},[91,79272,79273],{"class":101},">全部区间\u003C\u002F",[91,79275,340],{"class":51275},[91,79277,51282],{"class":101},[91,79279,79280,79282,79284],{"class":93,"line":16834},[91,79281,52392],{"class":101},[91,79283,51586],{"class":51275},[91,79285,51282],{"class":101},[91,79287,79288,79290,79292,79294,79296,79298],{"class":93,"line":16848},[91,79289,52119],{"class":101},[91,79291,51586],{"class":51275},[91,79293,53461],{"class":1941},[91,79295,147],{"class":101},[91,79297,62583],{"class":206},[91,79299,51282],{"class":101},[91,79301,79302],{"class":93,"line":16860},[91,79303,79304],{"class":160},"    \u003C!-- \u003Cdiv class=\"item\">\n",[91,79306,79307],{"class":93,"line":16865},[91,79308,79309],{"class":160},"      \u003Cimg src=\"\" alt=\"\">\n",[91,79311,79312],{"class":93,"line":16878},[91,79313,79314],{"class":160},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[91,79316,79317],{"class":93,"line":16883},[91,79318,79319],{"class":160},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[91,79321,79322],{"class":93,"line":16888},[91,79323,79324],{"class":160},"    \u003C\u002Fdiv> -->\n",[91,79326,79327,79329,79331],{"class":93,"line":16893},[91,79328,52392],{"class":101},[91,79330,51586],{"class":51275},[91,79332,51282],{"class":101},[91,79334,79335,79337,79339],{"class":93,"line":16906},[91,79336,52119],{"class":101},[91,79338,51788],{"class":51275},[91,79340,51282],{"class":101},[91,79342,79343],{"class":93,"line":16911},[91,79344,79345],{"class":160},"    \u002F\u002F 2. 初始化数据\n",[91,79347,79348,79350,79353,79355],{"class":93,"line":32608},[91,79349,11200],{"class":97},[91,79351,79352],{"class":150}," goodsList",[91,79354,13543],{"class":97},[91,79356,55422],{"class":101},[91,79358,79359],{"class":93,"line":32614},[91,79360,79361],{"class":101},"      {\n",[91,79363,79364,79367,79370],{"class":93,"line":32620},[91,79365,79366],{"class":101},"        id: ",[91,79368,79369],{"class":206},"'4001172'",[91,79371,31441],{"class":101},[91,79373,79374,79377,79380],{"class":93,"line":32626},[91,79375,79376],{"class":101},"        name: ",[91,79378,79379],{"class":206},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[91,79381,31441],{"class":101},[91,79383,79384,79387,79390],{"class":93,"line":32632},[91,79385,79386],{"class":101},"        price: ",[91,79388,79389],{"class":206},"'289.00'",[91,79391,31441],{"class":101},[91,79393,79394,79397,79400],{"class":93,"line":32643},[91,79395,79396],{"class":101},"        picture: ",[91,79398,79399],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[91,79401,31441],{"class":101},[91,79403,79404],{"class":93,"line":32649},[91,79405,77867],{"class":101},[91,79407,79408],{"class":93,"line":32669},[91,79409,79361],{"class":101},[91,79411,79412,79414,79417],{"class":93,"line":32675},[91,79413,79366],{"class":101},[91,79415,79416],{"class":206},"'4001594'",[91,79418,31441],{"class":101},[91,79420,79421,79423,79426],{"class":93,"line":32686},[91,79422,79376],{"class":101},[91,79424,79425],{"class":206},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[91,79427,31441],{"class":101},[91,79429,79430,79432,79435],{"class":93,"line":32692},[91,79431,79386],{"class":101},[91,79433,79434],{"class":206},"'288.00'",[91,79436,31441],{"class":101},[91,79438,79439,79441,79444],{"class":93,"line":32698},[91,79440,79396],{"class":101},[91,79442,79443],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[91,79445,31441],{"class":101},[91,79447,79448],{"class":93,"line":32704},[91,79449,77867],{"class":101},[91,79451,79452],{"class":93,"line":32710},[91,79453,79361],{"class":101},[91,79455,79456,79458,79461],{"class":93,"line":32716},[91,79457,79366],{"class":101},[91,79459,79460],{"class":206},"'4001009'",[91,79462,31441],{"class":101},[91,79464,79465,79467,79470],{"class":93,"line":32722},[91,79466,79376],{"class":101},[91,79468,79469],{"class":206},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[91,79471,31441],{"class":101},[91,79473,79474,79476,79479],{"class":93,"line":32728},[91,79475,79386],{"class":101},[91,79477,79478],{"class":206},"'109.00'",[91,79480,31441],{"class":101},[91,79482,79483,79485,79488],{"class":93,"line":32748},[91,79484,79396],{"class":101},[91,79486,79487],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[91,79489,31441],{"class":101},[91,79491,79492],{"class":93,"line":32754},[91,79493,77867],{"class":101},[91,79495,79496],{"class":93,"line":32770},[91,79497,79361],{"class":101},[91,79499,79500,79502,79505],{"class":93,"line":32776},[91,79501,79366],{"class":101},[91,79503,79504],{"class":206},"'4001874'",[91,79506,31441],{"class":101},[91,79508,79509,79511,79514],{"class":93,"line":32790},[91,79510,79376],{"class":101},[91,79512,79513],{"class":206},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[91,79515,31441],{"class":101},[91,79517,79518,79520,79523],{"class":93,"line":32796},[91,79519,79386],{"class":101},[91,79521,79522],{"class":206},"'488.00'",[91,79524,31441],{"class":101},[91,79526,79527,79529,79532],{"class":93,"line":32811},[91,79528,79396],{"class":101},[91,79530,79531],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[91,79533,31441],{"class":101},[91,79535,79536],{"class":93,"line":32817},[91,79537,77867],{"class":101},[91,79539,79540],{"class":93,"line":32826},[91,79541,79361],{"class":101},[91,79543,79544,79546,79549],{"class":93,"line":32832},[91,79545,79366],{"class":101},[91,79547,79548],{"class":206},"'4001649'",[91,79550,31441],{"class":101},[91,79552,79553,79555,79558],{"class":93,"line":32841},[91,79554,79376],{"class":101},[91,79556,79557],{"class":206},"'大师监制龙泉青瓷茶叶罐'",[91,79559,31441],{"class":101},[91,79561,79562,79564,79567],{"class":93,"line":32847},[91,79563,79386],{"class":101},[91,79565,79566],{"class":206},"'139.00'",[91,79568,31441],{"class":101},[91,79570,79571,79573,79576],{"class":93,"line":32853},[91,79572,79396],{"class":101},[91,79574,79575],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[91,79577,31441],{"class":101},[91,79579,79580],{"class":93,"line":32862},[91,79581,77867],{"class":101},[91,79583,79584],{"class":93,"line":32868},[91,79585,79361],{"class":101},[91,79587,79588,79590,79593],{"class":93,"line":32879},[91,79589,79366],{"class":101},[91,79591,79592],{"class":206},"'3997185'",[91,79594,31441],{"class":101},[91,79596,79597,79599,79602],{"class":93,"line":32885},[91,79598,79376],{"class":101},[91,79600,79601],{"class":206},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[91,79603,31441],{"class":101},[91,79605,79606,79608,79611],{"class":93,"line":32904},[91,79607,79386],{"class":101},[91,79609,79610],{"class":206},"'108.00'",[91,79612,31441],{"class":101},[91,79614,79615,79617,79620],{"class":93,"line":32910},[91,79616,79396],{"class":101},[91,79618,79619],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[91,79621,31441],{"class":101},[91,79623,79624],{"class":93,"line":32921},[91,79625,77867],{"class":101},[91,79627,79628],{"class":93,"line":32927},[91,79629,79361],{"class":101},[91,79631,79632,79634,79637],{"class":93,"line":32947},[91,79633,79366],{"class":101},[91,79635,79636],{"class":206},"'3997403'",[91,79638,31441],{"class":101},[91,79640,79641,79643,79646],{"class":93,"line":32963},[91,79642,79376],{"class":101},[91,79644,79645],{"class":206},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[91,79647,31441],{"class":101},[91,79649,79650,79652,79655],{"class":93,"line":32969},[91,79651,79386],{"class":101},[91,79653,79654],{"class":206},"'100.00'",[91,79656,31441],{"class":101},[91,79658,79659,79661,79664],{"class":93,"line":32983},[91,79660,79396],{"class":101},[91,79662,79663],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[91,79665,31441],{"class":101},[91,79667,79668],{"class":93,"line":32989},[91,79669,77867],{"class":101},[91,79671,79672],{"class":93,"line":32995},[91,79673,79361],{"class":101},[91,79675,79676,79678,79681],{"class":93,"line":33006},[91,79677,79366],{"class":101},[91,79679,79680],{"class":206},"'3998274'",[91,79682,31441],{"class":101},[91,79684,79685,79687,79690],{"class":93,"line":33012},[91,79686,79376],{"class":101},[91,79688,79689],{"class":206},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[91,79691,31441],{"class":101},[91,79693,79694,79696,79698],{"class":93,"line":33018},[91,79695,79386],{"class":101},[91,79697,79566],{"class":206},[91,79699,31441],{"class":101},[91,79701,79702,79704,79707],{"class":93,"line":33028},[91,79703,79396],{"class":101},[91,79705,79706],{"class":206},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[91,79708,31441],{"class":101},[91,79710,79711],{"class":93,"line":33034},[91,79712,77867],{"class":101},[91,79714,79715],{"class":93,"line":33045},[91,79716,53084],{"class":101},[91,79718,79719],{"class":93,"line":33051},[91,79720,2378],{"emptyLinePlaceholder":17},[91,79722,79723],{"class":93,"line":33061},[91,79724,79725],{"class":160},"    \u002F\u002F 1.渲染函数\n",[91,79727,79728,79730,79732,79734,79736],{"class":93,"line":33066},[91,79729,70059],{"class":97},[91,79731,70062],{"class":1941},[91,79733,102],{"class":101},[91,79735,3858],{"class":5195},[91,79737,12421],{"class":101},[91,79739,79740],{"class":93,"line":33072},[91,79741,79742],{"class":160},"      \u002F\u002F 声明空字符串\n",[91,79744,79745,79748,79751,79753],{"class":93,"line":33121},[91,79746,79747],{"class":97},"      let",[91,79749,79750],{"class":101}," str ",[91,79752,147],{"class":97},[91,79754,70079],{"class":206},[91,79756,79757],{"class":93,"line":33168},[91,79758,70084],{"class":160},[91,79760,79761,79763,79766,79768,79771,79774],{"class":93,"line":33173},[91,79762,57982],{"class":101},[91,79764,79765],{"class":1941},"forEach",[91,79767,102],{"class":101},[91,79769,79770],{"class":5195},"item",[91,79772,79773],{"class":97}," =>",[91,79775,15551],{"class":101},[91,79777,79778,79780,79783,79786,79788,79791,79793,79796,79799,79801],{"class":93,"line":33179},[91,79779,61245],{"class":97},[91,79781,79782],{"class":101}," { ",[91,79784,79785],{"class":150},"name",[91,79787,12414],{"class":101},[91,79789,79790],{"class":150},"price",[91,79792,12414],{"class":101},[91,79794,79795],{"class":150},"picture",[91,79797,79798],{"class":101}," } ",[91,79800,147],{"class":97},[91,79802,79803],{"class":101}," item\n",[91,79805,79806,79809,79811],{"class":93,"line":33198},[91,79807,79808],{"class":101},"        str ",[91,79810,9456],{"class":97},[91,79812,70143],{"class":206},[91,79814,79815],{"class":93,"line":33204},[91,79816,79817],{"class":206},"          \u003Cdiv class=\"item\">\n",[91,79819,79820,79823,79825],{"class":93,"line":33224},[91,79821,79822],{"class":206},"            \u003Cimg src=\"${",[91,79824,79795],{"class":101},[91,79826,79827],{"class":206},"}\" alt=\"\">\n",[91,79829,79830,79833,79835],{"class":93,"line":33230},[91,79831,79832],{"class":206},"            \u003Cp class=\"name\">${",[91,79834,79785],{"class":101},[91,79836,79837],{"class":206},"}\u003C\u002Fp>\n",[91,79839,79840,79843,79845],{"class":93,"line":33236},[91,79841,79842],{"class":206},"            \u003Cp class=\"price\">${",[91,79844,79790],{"class":101},[91,79846,79837],{"class":206},[91,79848,79849],{"class":93,"line":33246},[91,79850,79851],{"class":206},"          \u003C\u002Fdiv>\n",[91,79853,79854],{"class":93,"line":33251},[91,79855,79856],{"class":206},"        `\n",[91,79858,79859],{"class":93,"line":33257},[91,79860,64790],{"class":101},[91,79862,79863],{"class":93,"line":33273},[91,79864,79865],{"class":160},"      \u002F\u002F 追加给List\n",[91,79867,79868,79870,79872,79874,79877,79879,79881],{"class":93,"line":33318},[91,79869,55746],{"class":101},[91,79871,54374],{"class":1941},[91,79873,102],{"class":101},[91,79875,79876],{"class":206},"'.list'",[91,79878,74224],{"class":101},[91,79880,147],{"class":97},[91,79882,73960],{"class":101},[91,79884,79885],{"class":93,"line":33324},[91,79886,2165],{"class":101},[91,79888,79889],{"class":93,"line":33330},[91,79890,79891],{"class":160},"    \u002F\u002F 页面一打开就需要渲染\n",[91,79893,79894,79897],{"class":93,"line":33336},[91,79895,79896],{"class":1941},"    render",[91,79898,79899],{"class":101},"(goodsList)\n",[91,79901,79902],{"class":93,"line":33347},[91,79903,79904],{"class":160},"    \u002F\u002F 2.过滤筛选\n",[91,79906,79907,79909,79911,79913,79916,79918,79920,79922,79924,79926,79928,79930],{"class":93,"line":33353},[91,79908,52382],{"class":101},[91,79910,54374],{"class":1941},[91,79912,102],{"class":101},[91,79914,79915],{"class":206},"'.filter'",[91,79917,30801],{"class":101},[91,79919,57788],{"class":1941},[91,79921,102],{"class":101},[91,79923,57793],{"class":206},[91,79925,12414],{"class":101},[91,79927,176],{"class":5195},[91,79929,79773],{"class":97},[91,79931,15551],{"class":101},[91,79933,79934],{"class":93,"line":33359},[91,79935,79936],{"class":160},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[91,79938,79939,79941,79943,79946,79948,79950,79952,79954],{"class":93,"line":33365},[91,79940,58203],{"class":97},[91,79942,79782],{"class":101},[91,79944,79945],{"class":150},"tagName",[91,79947,12414],{"class":101},[91,79949,31512],{"class":150},[91,79951,79798],{"class":101},[91,79953,147],{"class":97},[91,79955,79956],{"class":101}," e.target\n",[91,79958,79959],{"class":93,"line":33383},[91,79960,79961],{"class":160},"      \u002F\u002F 判断\n",[91,79963,79964,79966,79968,79970,79972],{"class":93,"line":33397},[91,79965,54455],{"class":97},[91,79967,67009],{"class":101},[91,79969,54461],{"class":97},[91,79971,68231],{"class":206},[91,79973,12421],{"class":101},[91,79975,79976],{"class":93,"line":33406},[91,79977,79978],{"class":160},"        \u002F\u002F console.log(11)\n",[91,79980,79981],{"class":93,"line":33415},[91,79982,79983],{"class":160},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[91,79985,79986],{"class":93,"line":33424},[91,79987,79988],{"class":160},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[91,79990,79991,79993,79995,79997],{"class":93,"line":33433},[91,79992,51805],{"class":97},[91,79994,51808],{"class":101},[91,79996,147],{"class":97},[91,79998,79999],{"class":101}," goodsList\n",[91,80001,80002,80004,80007,80009,80012],{"class":93,"line":33439},[91,80003,2475],{"class":97},[91,80005,80006],{"class":101}," (dataset.index ",[91,80008,54461],{"class":97},[91,80010,80011],{"class":206}," '1'",[91,80013,12421],{"class":101},[91,80015,80016,80019,80021,80024,80027,80029,80031,80033,80036,80038,80040,80043,80045,80047,80049],{"class":93,"line":33445},[91,80017,80018],{"class":101},"          arr ",[91,80020,147],{"class":97},[91,80022,80023],{"class":101}," goodsList.",[91,80025,80026],{"class":1941},"filter",[91,80028,102],{"class":101},[91,80030,79770],{"class":5195},[91,80032,79773],{"class":97},[91,80034,80035],{"class":101}," item.price ",[91,80037,1688],{"class":97},[91,80039,4071],{"class":150},[91,80041,80042],{"class":97}," &&",[91,80044,80035],{"class":101},[91,80046,1566],{"class":97},[91,80048,5733],{"class":150},[91,80050,108],{"class":101},[91,80052,80053,80056,80058,80060,80062,80064,80067],{"class":93,"line":33453},[91,80054,80055],{"class":101},"        } ",[91,80057,1679],{"class":97},[91,80059,1682],{"class":97},[91,80061,80006],{"class":101},[91,80063,54461],{"class":97},[91,80065,80066],{"class":206}," '2'",[91,80068,12421],{"class":101},[91,80070,80071,80073,80075,80077,80079,80081,80083,80085,80087,80089,80091,80093,80095,80097,80100],{"class":93,"line":33458},[91,80072,80018],{"class":101},[91,80074,147],{"class":97},[91,80076,80023],{"class":101},[91,80078,80026],{"class":1941},[91,80080,102],{"class":101},[91,80082,79770],{"class":5195},[91,80084,79773],{"class":97},[91,80086,80035],{"class":101},[91,80088,1688],{"class":97},[91,80090,5733],{"class":150},[91,80092,80042],{"class":97},[91,80094,80035],{"class":101},[91,80096,1566],{"class":97},[91,80098,80099],{"class":150}," 300",[91,80101,108],{"class":101},[91,80103,80104,80106,80108,80110,80112,80114,80117],{"class":93,"line":33464},[91,80105,80055],{"class":101},[91,80107,1679],{"class":97},[91,80109,1682],{"class":97},[91,80111,80006],{"class":101},[91,80113,54461],{"class":97},[91,80115,80116],{"class":206}," '3'",[91,80118,12421],{"class":101},[91,80120,80121,80123,80125,80127,80129,80131,80133,80135,80137,80139,80141],{"class":93,"line":33475},[91,80122,80018],{"class":101},[91,80124,147],{"class":97},[91,80126,80023],{"class":101},[91,80128,80026],{"class":1941},[91,80130,102],{"class":101},[91,80132,79770],{"class":5195},[91,80134,79773],{"class":97},[91,80136,80035],{"class":101},[91,80138,1688],{"class":97},[91,80140,80099],{"class":150},[91,80142,108],{"class":101},[91,80144,80145],{"class":93,"line":33481},[91,80146,2507],{"class":101},[91,80148,80149],{"class":93,"line":33501},[91,80150,80151],{"class":160},"        \u002F\u002F 渲染函数\n",[91,80153,80154,80156],{"class":93,"line":33507},[91,80155,70383],{"class":1941},[91,80157,52387],{"class":101},[91,80159,80160],{"class":93,"line":33513},[91,80161,52373],{"class":101},[91,80163,80164],{"class":93,"line":33519},[91,80165,2378],{"emptyLinePlaceholder":17},[91,80167,80168],{"class":93,"line":33536},[91,80169,33436],{"class":101},[91,80171,80172,80174,80176],{"class":93,"line":33542},[91,80173,52392],{"class":101},[91,80175,51788],{"class":51275},[91,80177,51282],{"class":101},[91,80179,80180,80182,80184],{"class":93,"line":33548},[91,80181,51760],{"class":101},[91,80183,51775],{"class":51275},[91,80185,51282],{"class":101},[91,80187,80188],{"class":93,"line":33554},[91,80189,2378],{"emptyLinePlaceholder":17},[91,80191,80192,80194,80196],{"class":93,"line":33560},[91,80193,51760],{"class":101},[91,80195,50610],{"class":51275},[91,80197,51282],{"class":101},[33,80199,80201],{"id":80200},"_410-深入了解对象","4.10 深入了解对象",[63,80203,80205],{"id":80204},"_4101-创建对象","4.10.1 创建对象",[38,80207,80208],{},[1440,80209],{"alt":10,"src":80210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[38,80212,80213],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[63,80215,80217],{"id":80216},"_4102-构造函数","4.10.2 构造函数",[38,80219,80220,80223],{},[251,80221,80222],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[38,80225,80226,80229],{},[251,80227,80228],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[83,80231,80233],{"className":50608,"code":80232,"language":50610,"meta":10,"style":10},"\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",[88,80234,80235,80243,80248,80269,80282,80294,80306,80310,80315,80342,80347,80374],{"__ignoreMap":10},[91,80236,80237,80239,80241],{"class":93,"line":94},[91,80238,1012],{"class":101},[91,80240,51788],{"class":51275},[91,80242,51282],{"class":101},[91,80244,80245],{"class":93,"line":11},[91,80246,80247],{"class":160},"\u002F\u002F例：\n",[91,80249,80250,80252,80255,80257,80259,80261,80263,80265,80267],{"class":93,"line":1157},[91,80251,54424],{"class":97},[91,80253,80254],{"class":1941}," Pig",[91,80256,102],{"class":101},[91,80258,79785],{"class":5195},[91,80260,480],{"class":101},[91,80262,70196],{"class":5195},[91,80264,480],{"class":101},[91,80266,70213],{"class":5195},[91,80268,12421],{"class":101},[91,80270,80271,80274,80277,80279],{"class":93,"line":1172},[91,80272,80273],{"class":150},"    this",[91,80275,80276],{"class":101},".name",[91,80278,147],{"class":97},[91,80280,80281],{"class":101},"name\n",[91,80283,80284,80286,80289,80291],{"class":93,"line":1178},[91,80285,80273],{"class":150},[91,80287,80288],{"class":101},".age",[91,80290,147],{"class":97},[91,80292,80293],{"class":101},"age\n",[91,80295,80296,80298,80301,80303],{"class":93,"line":1192},[91,80297,80273],{"class":150},[91,80299,80300],{"class":101},".gender",[91,80302,147],{"class":97},[91,80304,80305],{"class":101},"gender    \n",[91,80307,80308],{"class":93,"line":1198},[91,80309,1543],{"class":101},[91,80311,80312],{"class":93,"line":1289},[91,80313,80314],{"class":160},"\u002F\u002F创建佩奇对象\n",[91,80316,80317,80319,80322,80324,80326,80328,80331,80333,80335,80337,80340],{"class":93,"line":1295},[91,80318,6771],{"class":97},[91,80320,80321],{"class":150}," Peppa",[91,80323,11696],{"class":97},[91,80325,80254],{"class":1941},[91,80327,102],{"class":101},[91,80329,80330],{"class":206},"'佩奇'",[91,80332,480],{"class":101},[91,80334,446],{"class":150},[91,80336,480],{"class":101},[91,80338,80339],{"class":206},"'女'",[91,80341,108],{"class":101},[91,80343,80344],{"class":93,"line":1307},[91,80345,80346],{"class":160},"\u002F\u002F创建乔治对象\n",[91,80348,80349,80351,80354,80356,80358,80360,80363,80365,80367,80369,80372],{"class":93,"line":1590},[91,80350,6771],{"class":97},[91,80352,80353],{"class":150}," George",[91,80355,11696],{"class":97},[91,80357,80254],{"class":1941},[91,80359,102],{"class":101},[91,80361,80362],{"class":206},"'乔治'",[91,80364,480],{"class":101},[91,80366,173],{"class":150},[91,80368,480],{"class":101},[91,80370,80371],{"class":206},"'男'",[91,80373,108],{"class":101},[91,80375,80376,80378,80380],{"class":93,"line":1595},[91,80377,51760],{"class":101},[91,80379,51788],{"class":51275},[91,80381,51282],{"class":101},[38,80383,80384],{},[1440,80385],{"alt":10,"src":80386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[38,80388,80389],{},[1440,80390],{"alt":10,"src":80391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[38,80393,80394],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[38,80396,80397],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[38,80399,80400],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[38,80402,80403],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[38,80405,80406],{},"这里用等号是因为：对象.属性=值",[38,80408,80409],{},"①利用对象字面量创建对象",[38,80411,80412],{},"const o={",[38,80414,80415],{},"name:'pink'",[38,80417,80418],{},"} ②利用new Object创建对象",[38,80420,80421],{},"const o=new Object({name:'pink'})",[38,80423,80424],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[38,80426,80427],{},"构造函数创建对象的执行过程：",[38,80429,80430],{},[1440,80431],{"alt":10,"src":80432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[63,80434,80436],{"id":80435},"_4103-实例成员","4.10.3 实例成员",[38,80438,80439],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[46,80441,80442,80445,80448],{},[49,80443,80444],{},"实例对象的属性和方法即为实例成员",[49,80446,80447],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[49,80449,80450],{},"构造函数创建的实例对象彼此独立互不影响",[63,80452,80454],{"id":80453},"_4104-静态成员","4.10.4 静态成员",[38,80456,80457],{},[1440,80458],{"alt":10,"src":80459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[38,80461,80462],{},"静态成员有Date.now() Math.PI Math.random()",[38,80464,80465],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[38,80467,80468],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[38,80470,80471],{},"function Pig(name) n {",[38,80473,80474],{},"this.name=name",[38,80476,1048],{},[38,80478,80479],{},"Pig.eyes=2",[38,80481,80482],{},"Pig.sayHai=function () { console.log(this) }",[38,80484,80485],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[38,80487,80488],{},"console.log(Pig.eyes) \u002F\u002F2",[38,80490,11311],{},[46,80492,80493,80496,80499,80502,80505],{},[49,80494,80495],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[49,80497,80498],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[49,80500,80501],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[49,80503,80504],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[49,80506,80507],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[38,80509,80510],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[63,80512,80514],{"id":80513},"_4105-内置构造函数","4.10.5 内置构造函数",[38,80516,80517],{},"内置构造函数包含：",[38,80519,80520],{},[1440,80521],{"alt":10,"src":80522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[38,80524,80525],{},[1440,80526],{"alt":10,"src":80527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[38,80529,80530],{},"这些基本数据类型，js对他们进行了包装",[51788,80532,80533],{},"\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",[21977,80535,80537],{"id":80536},"_41051-object","4.10.5.1 Object",[38,80539,80540],{},"Object 是内置的构造函数，用于创建普通对象",[38,80542,80543],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[83,80545,80547],{"className":50608,"code":80546,"language":50610,"meta":10,"style":10},"const user=new Object({name:'小明',age:15})\n",[88,80548,80549],{"__ignoreMap":10},[91,80550,80551],{"class":93,"line":94},[91,80552,80546],{"class":101},[38,80554,80555],{},"三个常用的静态方法：",[22889,80557,80559],{"id":80558},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[38,80561,80562],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[38,80564,80565],{},[1440,80566],{"alt":10,"src":80567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[38,80569,80570],{},[1440,80571],{"alt":10,"src":80572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[83,80574,80576],{"className":53042,"code":80575,"language":53044,"meta":10,"style":10},"\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",[88,80577,80578,80586,80594,80599,80604,80609,80614,80619,80624,80632],{"__ignoreMap":10},[91,80579,80580,80582,80584],{"class":93,"line":94},[91,80581,1012],{"class":101},[91,80583,51775],{"class":51275},[91,80585,51282],{"class":101},[91,80587,80588,80590,80592],{"class":93,"line":11},[91,80589,52119],{"class":101},[91,80591,51788],{"class":51275},[91,80593,51282],{"class":101},[91,80595,80596],{"class":93,"line":1157},[91,80597,80598],{"class":101},"    const o = { name: 'pink', age: 6 }\n",[91,80600,80601],{"class":93,"line":1172},[91,80602,80603],{"class":101},"    \u002F\u002F 获得所有属性名\n",[91,80605,80606],{"class":93,"line":1178},[91,80607,80608],{"class":101},"    const arr = Object.keys(o)\n",[91,80610,80611],{"class":93,"line":1192},[91,80612,80613],{"class":101},"    console.log(arr)\n",[91,80615,80616],{"class":93,"line":1198},[91,80617,80618],{"class":101},"    \u002F\u002F 获得所有属性值\n",[91,80620,80621],{"class":93,"line":1289},[91,80622,80623],{"class":101},"    console.log(Object.values(o))\n",[91,80625,80626,80628,80630],{"class":93,"line":1295},[91,80627,52392],{"class":101},[91,80629,51788],{"class":51275},[91,80631,51282],{"class":101},[91,80633,80634,80636,80638],{"class":93,"line":1307},[91,80635,51760],{"class":101},[91,80637,51775],{"class":51275},[91,80639,51282],{"class":101},[22889,80641,80643],{"id":80642},"_410512-object-assign","4.10.5.1.2 Object. assign",[38,80645,80646],{},"Object.assign(oo,o)",[38,80648,80649],{},"后的东西添加给前 是追加",[38,80651,80652],{},[1440,80653],{"alt":10,"src":80654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[38,80656,80657],{},[1440,80658],{"alt":10,"src":80659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[83,80661,80663],{"className":53042,"code":80662,"language":53044,"meta":10,"style":10},"\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",[88,80664,80665,80673,80681,80685,80689,80693,80697,80701,80705,80710,80715,80720,80725,80730,80738],{"__ignoreMap":10},[91,80666,80667,80669,80671],{"class":93,"line":94},[91,80668,1012],{"class":101},[91,80670,51775],{"class":51275},[91,80672,51282],{"class":101},[91,80674,80675,80677,80679],{"class":93,"line":11},[91,80676,52119],{"class":101},[91,80678,51788],{"class":51275},[91,80680,51282],{"class":101},[91,80682,80683],{"class":93,"line":1157},[91,80684,80598],{"class":101},[91,80686,80687],{"class":93,"line":1172},[91,80688,80603],{"class":101},[91,80690,80691],{"class":93,"line":1178},[91,80692,80608],{"class":101},[91,80694,80695],{"class":93,"line":1192},[91,80696,80613],{"class":101},[91,80698,80699],{"class":93,"line":1198},[91,80700,80618],{"class":101},[91,80702,80703],{"class":93,"line":1289},[91,80704,80623],{"class":101},[91,80706,80707],{"class":93,"line":1295},[91,80708,80709],{"class":101},"    const oo = {}\n",[91,80711,80712],{"class":93,"line":1307},[91,80713,80714],{"class":101},"    Object.assign(oo, o)\n",[91,80716,80717],{"class":93,"line":1590},[91,80718,80719],{"class":101},"    console.log(oo)\n",[91,80721,80722],{"class":93,"line":1595},[91,80723,80724],{"class":101},"    Object.assign(o, { gender: '女' })\n",[91,80726,80727],{"class":93,"line":1601},[91,80728,80729],{"class":101},"    console.log(o)\n",[91,80731,80732,80734,80736],{"class":93,"line":1606},[91,80733,52392],{"class":101},[91,80735,51788],{"class":51275},[91,80737,51282],{"class":101},[91,80739,80740,80742,80744],{"class":93,"line":1620},[91,80741,51760],{"class":101},[91,80743,51775],{"class":51275},[91,80745,51282],{"class":101},[38,80747,80748],{},[1440,80749],{"alt":10,"src":80750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21977,80752,80754],{"id":80753},"_41052-array","4.10.5.2 Array",[38,80756,80757],{},"Array 是内置的构造函数，用于创建数组",[38,80759,80760],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[83,80762,80764],{"className":50608,"code":80763,"language":50610,"meta":10,"style":10},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[88,80765,80766,80771],{"__ignoreMap":10},[91,80767,80768],{"class":93,"line":94},[91,80769,80770],{"class":101},"const arr=new Array(3,5)\n",[91,80772,80773],{"class":93,"line":11},[91,80774,80775],{"class":101},"console.log(arr)  \u002F\u002F[3,5]\n",[38,80777,80778],{},"Array的实例方法，这个方法是实例成员",[38,80780,80781],{},[1440,80782],{"alt":10,"src":80783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22889,80785,80787],{"id":80786},"_410521-reduce","4.10.5.2.1 reduce",[38,80789,80790],{},[1440,80791],{"alt":10,"src":80792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[83,80794,80796],{"className":53042,"code":80795,"language":53044,"meta":10,"style":10},"\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",[88,80797,80798,80806,80814,80819,80824,80829,80834,80838,80843,80848,80853,80857,80862,80867,80871,80876,80881,80886,80894],{"__ignoreMap":10},[91,80799,80800,80802,80804],{"class":93,"line":94},[91,80801,1012],{"class":101},[91,80803,51775],{"class":51275},[91,80805,51282],{"class":101},[91,80807,80808,80810,80812],{"class":93,"line":11},[91,80809,52119],{"class":101},[91,80811,51788],{"class":51275},[91,80813,51282],{"class":101},[91,80815,80816],{"class":93,"line":1157},[91,80817,80818],{"class":101},"    const arr = [1, 5, 8]\n",[91,80820,80821],{"class":93,"line":1172},[91,80822,80823],{"class":101},"    \u002F\u002F 1.没有初始值\n",[91,80825,80826],{"class":93,"line":1178},[91,80827,80828],{"class":101},"    const total = arr.reduce(function (prev, current) {\n",[91,80830,80831],{"class":93,"line":1192},[91,80832,80833],{"class":101},"      return prev + current\n",[91,80835,80836],{"class":93,"line":1198},[91,80837,33436],{"class":101},[91,80839,80840],{"class":93,"line":1289},[91,80841,80842],{"class":101},"    console.log(total)   \u002F\u002F14\n",[91,80844,80845],{"class":93,"line":1295},[91,80846,80847],{"class":101},"    \u002F\u002F 2.有初始值\n",[91,80849,80850],{"class":93,"line":1307},[91,80851,80852],{"class":101},"    const total1 = arr.reduce(function (prev, current) {\n",[91,80854,80855],{"class":93,"line":1590},[91,80856,80833],{"class":101},[91,80858,80859],{"class":93,"line":1595},[91,80860,80861],{"class":101},"    }, 10)\n",[91,80863,80864],{"class":93,"line":1601},[91,80865,80866],{"class":101},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[91,80868,80869],{"class":93,"line":1606},[91,80870,2378],{"emptyLinePlaceholder":17},[91,80872,80873],{"class":93,"line":1620},[91,80874,80875],{"class":101},"    \u002F\u002F 3.箭头函数写法\n",[91,80877,80878],{"class":93,"line":1625},[91,80879,80880],{"class":101},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[91,80882,80883],{"class":93,"line":1631},[91,80884,80885],{"class":101},"    console.log(total2)   \u002F\u002F24\n",[91,80887,80888,80890,80892],{"class":93,"line":1652},[91,80889,52392],{"class":101},[91,80891,51788],{"class":51275},[91,80893,51282],{"class":101},[91,80895,80896,80898,80900],{"class":93,"line":1657},[91,80897,51760],{"class":101},[91,80899,51775],{"class":51275},[91,80901,51282],{"class":101},[38,80903,80904],{},"执行过程：",[46,80906,80907,80910,80913],{},[49,80908,80909],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[49,80911,80912],{},"每一次循环，把返回值给作为下一次循环的上一次值",[49,80914,80915],{},"如果有起始值，则起始值作为上一次值",[83,80917,80919],{"className":53042,"code":80918,"language":53044,"meta":10,"style":10},"\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",[88,80920,80921,80929,80937,80941,80945,80949,80953,80957,80961,80966,80971,80976,80981,80986,80990,80994,80998,81002,81006,81010,81015,81019,81024,81028,81033,81038,81042,81046,81050,81058],{"__ignoreMap":10},[91,80922,80923,80925,80927],{"class":93,"line":94},[91,80924,1012],{"class":101},[91,80926,51775],{"class":51275},[91,80928,51282],{"class":101},[91,80930,80931,80933,80935],{"class":93,"line":11},[91,80932,52119],{"class":101},[91,80934,51788],{"class":51275},[91,80936,51282],{"class":101},[91,80938,80939],{"class":93,"line":1157},[91,80940,80818],{"class":101},[91,80942,80943],{"class":93,"line":1172},[91,80944,80823],{"class":101},[91,80946,80947],{"class":93,"line":1178},[91,80948,80828],{"class":101},[91,80950,80951],{"class":93,"line":1192},[91,80952,80833],{"class":101},[91,80954,80955],{"class":93,"line":1198},[91,80956,33436],{"class":101},[91,80958,80959],{"class":93,"line":1289},[91,80960,80842],{"class":101},[91,80962,80963],{"class":93,"line":1295},[91,80964,80965],{"class":101},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[91,80967,80968],{"class":93,"line":1307},[91,80969,80970],{"class":101},"    \u002F\u002F     1              5                    6\n",[91,80972,80973],{"class":93,"line":1590},[91,80974,80975],{"class":101},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[91,80977,80978],{"class":93,"line":1595},[91,80979,80980],{"class":101},"    \u002F\u002F     6              8                    14\n",[91,80982,80983],{"class":93,"line":1601},[91,80984,80985],{"class":101},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[91,80987,80988],{"class":93,"line":1606},[91,80989,80847],{"class":101},[91,80991,80992],{"class":93,"line":1620},[91,80993,80852],{"class":101},[91,80995,80996],{"class":93,"line":1625},[91,80997,80833],{"class":101},[91,80999,81000],{"class":93,"line":1631},[91,81001,80861],{"class":101},[91,81003,81004],{"class":93,"line":1652},[91,81005,80866],{"class":101},[91,81007,81008],{"class":93,"line":1657},[91,81009,80965],{"class":101},[91,81011,81012],{"class":93,"line":1671},[91,81013,81014],{"class":101},"    \u002F\u002F     10             1                     11\n",[91,81016,81017],{"class":93,"line":1676},[91,81018,80975],{"class":101},[91,81020,81021],{"class":93,"line":1705},[91,81022,81023],{"class":101},"    \u002F\u002F     11             5                    16\n",[91,81025,81026],{"class":93,"line":1710},[91,81027,80975],{"class":101},[91,81029,81030],{"class":93,"line":1727},[91,81031,81032],{"class":101},"    \u002F\u002F     16             8                    24\n",[91,81034,81035],{"class":93,"line":1732},[91,81036,81037],{"class":101},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[91,81039,81040],{"class":93,"line":1737},[91,81041,80875],{"class":101},[91,81043,81044],{"class":93,"line":1742},[91,81045,80880],{"class":101},[91,81047,81048],{"class":93,"line":1756},[91,81049,80885],{"class":101},[91,81051,81052,81054,81056],{"class":93,"line":1761},[91,81053,52392],{"class":101},[91,81055,51788],{"class":51275},[91,81057,51282],{"class":101},[91,81059,81060,81062,81064],{"class":93,"line":2555},[91,81061,51760],{"class":101},[91,81063,51775],{"class":51275},[91,81065,51282],{"class":101},[22889,81067,81069],{"id":81068},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[38,81071,81072],{},[1440,81073],{"alt":10,"src":81074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[83,81076,81078],{"className":53042,"code":81077,"language":53044,"meta":10,"style":10},"\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",[88,81079,81080,81088,81096,81101,81106,81111,81116,81120,81125,81130,81135,81140,81145,81150,81154,81159,81163,81168,81176],{"__ignoreMap":10},[91,81081,81082,81084,81086],{"class":93,"line":94},[91,81083,1012],{"class":101},[91,81085,51775],{"class":51275},[91,81087,51282],{"class":101},[91,81089,81090,81092,81094],{"class":93,"line":11},[91,81091,52119],{"class":101},[91,81093,51788],{"class":51275},[91,81095,51282],{"class":101},[91,81097,81098],{"class":93,"line":1157},[91,81099,81100],{"class":101},"    const arr = [\n",[91,81102,81103],{"class":93,"line":1172},[91,81104,81105],{"class":101},"      { name: '张三', salary: 10000 },\n",[91,81107,81108],{"class":93,"line":1178},[91,81109,81110],{"class":101},"      { name: '李四', salary: 10000 },\n",[91,81112,81113],{"class":93,"line":1192},[91,81114,81115],{"class":101},"      { name: '王五', salary: 10000 }\n",[91,81117,81118],{"class":93,"line":1198},[91,81119,53084],{"class":101},[91,81121,81122],{"class":93,"line":1289},[91,81123,81124],{"class":101},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[91,81126,81127],{"class":93,"line":1295},[91,81128,81129],{"class":101},"    \u002F\u002F prev是累计值\n",[91,81131,81132],{"class":93,"line":1307},[91,81133,81134],{"class":101},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[91,81136,81137],{"class":93,"line":1590},[91,81138,81139],{"class":101},"    console.log(total)\n",[91,81141,81142],{"class":93,"line":1595},[91,81143,81144],{"class":101},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[91,81146,81147],{"class":93,"line":1601},[91,81148,81149],{"class":101},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[91,81151,81152],{"class":93,"line":1606},[91,81153,81144],{"class":101},[91,81155,81156],{"class":93,"line":1620},[91,81157,81158],{"class":101},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[91,81160,81161],{"class":93,"line":1625},[91,81162,81144],{"class":101},[91,81164,81165],{"class":93,"line":1631},[91,81166,81167],{"class":101},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[91,81169,81170,81172,81174],{"class":93,"line":1652},[91,81171,52392],{"class":101},[91,81173,51788],{"class":51275},[91,81175,51282],{"class":101},[91,81177,81178,81180,81182],{"class":93,"line":1657},[91,81179,51760],{"class":101},[91,81181,51775],{"class":51275},[91,81183,51282],{"class":101},[22889,81185,81187],{"id":81186},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[38,81189,81190],{},[1440,81191],{"alt":10,"src":81192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[38,81194,81195],{},[1440,81196],{"alt":10,"src":81197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[46,81199,81200],{},[49,81201,81202],{},"find()",[38,81204,81205],{},"循环查找，找到第一个就ok",[38,81207,81208],{},[340,81209,81212],{"href":81210,"rel":81211},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[83,81214,81216],{"className":50608,"code":81215,"language":50610,"meta":10,"style":10},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[88,81217,81218,81223,81228],{"__ignoreMap":10},[91,81219,81220],{"class":93,"line":94},[91,81221,81222],{"class":101},"const array1 = [5, 12, 8, 130, 44]\n",[91,81224,81225],{"class":93,"line":11},[91,81226,81227],{"class":101},"const found = array1.find((element) => element > 10)\n",[91,81229,81230],{"class":93,"line":1157},[91,81231,81232],{"class":101},"console.log(found)  \u002F\u002F12\n",[38,81234,81235,81237,81238,81243,81244,81247,81248,81250,81251,81256,81257,81259,81260,81262,81263,81265,81266],{},[88,81236,81202],{}," 方法是一个",[340,81239,81242],{"href":81240,"rel":81241},"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",[23839],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[88,81245,81246],{},"callbackFn"," 函数，直到 ",[88,81249,81246],{}," 返回一个",[340,81252,81255],{"href":81253,"rel":81254},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23839],"真值","。然后 ",[88,81258,81202],{}," 返回该元素并停止迭代数组。如果 ",[88,81261,81246],{}," 从未返回真值，则 ",[88,81264,81202],{}," 返回 ",[88,81267,81268],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[83,81270,81272],{"className":53042,"code":81271,"language":53044,"meta":10,"style":10},"\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",[88,81273,81274,81282,81290,81295,81300,81305,81309,81314,81319,81323,81328,81333,81337,81341,81346,81351,81355,81359,81364,81369,81374,81379,81384,81388,81393,81398,81403,81408,81412,81417,81425],{"__ignoreMap":10},[91,81275,81276,81278,81280],{"class":93,"line":94},[91,81277,1012],{"class":101},[91,81279,51775],{"class":51275},[91,81281,51282],{"class":101},[91,81283,81284,81286,81288],{"class":93,"line":11},[91,81285,52119],{"class":101},[91,81287,51788],{"class":51275},[91,81289,51282],{"class":101},[91,81291,81292],{"class":93,"line":1157},[91,81293,81294],{"class":101},"    const arr = ['red', 'blue', 'green']\n",[91,81296,81297],{"class":93,"line":1172},[91,81298,81299],{"class":101},"    const found = arr.find(item => item === 'pink')\n",[91,81301,81302],{"class":93,"line":1178},[91,81303,81304],{"class":101},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[91,81306,81307],{"class":93,"line":1192},[91,81308,2378],{"emptyLinePlaceholder":17},[91,81310,81311],{"class":93,"line":1198},[91,81312,81313],{"class":101},"    \u002F\u002F 使用场景，用于查找数据\n",[91,81315,81316],{"class":93,"line":1289},[91,81317,81318],{"class":101},"    const arr1 = [\n",[91,81320,81321],{"class":93,"line":1295},[91,81322,79361],{"class":101},[91,81324,81325],{"class":93,"line":1307},[91,81326,81327],{"class":101},"        name: '小米',\n",[91,81329,81330],{"class":93,"line":1590},[91,81331,81332],{"class":101},"        price: 1999\n",[91,81334,81335],{"class":93,"line":1595},[91,81336,77867],{"class":101},[91,81338,81339],{"class":93,"line":1601},[91,81340,79361],{"class":101},[91,81342,81343],{"class":93,"line":1606},[91,81344,81345],{"class":101},"        name: '华为',\n",[91,81347,81348],{"class":93,"line":1620},[91,81349,81350],{"class":101},"        price: 3999\n",[91,81352,81353],{"class":93,"line":1625},[91,81354,52373],{"class":101},[91,81356,81357],{"class":93,"line":1631},[91,81358,53084],{"class":101},[91,81360,81361],{"class":93,"line":1652},[91,81362,81363],{"class":101},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[91,81365,81366],{"class":93,"line":1657},[91,81367,81368],{"class":101},"    \u002F\u002F const found1 = arr1.find(item => {\n",[91,81370,81371],{"class":93,"line":1671},[91,81372,81373],{"class":101},"    \u002F\u002F   if (item.name === '小米') {\n",[91,81375,81376],{"class":93,"line":1676},[91,81377,81378],{"class":101},"    \u002F\u002F     return item\n",[91,81380,81381],{"class":93,"line":1705},[91,81382,81383],{"class":101},"    \u002F\u002F   }\n",[91,81385,81386],{"class":93,"line":1710},[91,81387,63265],{"class":101},[91,81389,81390],{"class":93,"line":1727},[91,81391,81392],{"class":101},"    \u002F\u002F 另一种写法\n",[91,81394,81395],{"class":93,"line":1732},[91,81396,81397],{"class":101},"    const found1 = arr1.find(item => {\n",[91,81399,81400],{"class":93,"line":1737},[91,81401,81402],{"class":101},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[91,81404,81405],{"class":93,"line":1742},[91,81406,81407],{"class":101},"      return item.name = '小米'\n",[91,81409,81410],{"class":93,"line":1756},[91,81411,33436],{"class":101},[91,81413,81414],{"class":93,"line":1761},[91,81415,81416],{"class":101},"    console.log(found1)\n",[91,81418,81419,81421,81423],{"class":93,"line":2555},[91,81420,52392],{"class":101},[91,81422,51788],{"class":51275},[91,81424,51282],{"class":101},[91,81426,81427,81429,81431],{"class":93,"line":2569},[91,81428,51760],{"class":101},[91,81430,51775],{"class":51275},[91,81432,51282],{"class":101},[38,81434,81435],{},[1440,81436],{"alt":10,"src":81437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[38,81439,81440],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[46,81442,81443],{"start":11},[49,81444,81445],{},"every()返回的是布尔值",[38,81447,81448],{},[340,81449,81452],{"href":81450,"rel":81451},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23839],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[38,81454,81455],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[38,81457,81458],{},"some是只有有一个就没问题",[38,81460,81461],{},"every是必须全是才行",[83,81463,81467],{"className":81464,"code":81465,"language":81466,"meta":10,"style":10},"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",[88,81468,81469,81485,81499,81503,81512],{"__ignoreMap":10},[91,81470,81471,81473,81476,81478,81480,81483],{"class":93,"line":94},[91,81472,54424],{"class":97},[91,81474,81475],{"class":101}," isBigEnough(element, ",[91,81477,74033],{"class":97},[91,81479,12414],{"class":101},[91,81481,81482],{"class":97},"array",[91,81484,12421],{"class":101},[91,81486,81487,81490,81493,81495,81497],{"class":93,"line":11},[91,81488,81489],{"class":97},"  return",[91,81491,81492],{"class":101}," element ",[91,81494,1688],{"class":97},[91,81496,2016],{"class":150},[91,81498,1268],{"class":101},[91,81500,81501],{"class":93,"line":1157},[91,81502,1543],{"class":101},[91,81504,81505,81508,81510],{"class":93,"line":1172},[91,81506,81507],{"class":101},"[12, 5, 8, 130, 44].every(isBigEnough); ",[91,81509,33304],{"class":97},[91,81511,54491],{"class":101},[91,81513,81514,81517,81519],{"class":93,"line":1178},[91,81515,81516],{"class":101},"[12, 54, 18, 130, 44].every(isBigEnough); ",[91,81518,33304],{"class":97},[91,81520,57915],{"class":101},[83,81522,81524],{"className":53042,"code":81523,"language":53044,"meta":10,"style":10},"\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",[88,81525,81526,81534,81542,81547,81551,81556,81561,81569],{"__ignoreMap":10},[91,81527,81528,81530,81532],{"class":93,"line":94},[91,81529,1012],{"class":101},[91,81531,51775],{"class":51275},[91,81533,51282],{"class":101},[91,81535,81536,81538,81540],{"class":93,"line":11},[91,81537,52119],{"class":101},[91,81539,51788],{"class":51275},[91,81541,51282],{"class":101},[91,81543,81544],{"class":93,"line":1157},[91,81545,81546],{"class":101},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[91,81548,81549],{"class":93,"line":1172},[91,81550,78297],{"class":101},[91,81552,81553],{"class":93,"line":1178},[91,81554,81555],{"class":101},"    const flag = arr.every(item => item >= 10)\n",[91,81557,81558],{"class":93,"line":1192},[91,81559,81560],{"class":101},"    console.log(flag)    \u002F\u002Ftrue\n",[91,81562,81563,81565,81567],{"class":93,"line":1198},[91,81564,52392],{"class":101},[91,81566,51788],{"class":51275},[91,81568,51282],{"class":101},[91,81570,81571,81573,81575],{"class":93,"line":1289},[91,81572,51760],{"class":101},[91,81574,51775],{"class":51275},[91,81576,51282],{"class":101},[83,81578,81580],{"className":53042,"code":81579,"language":53044,"meta":10,"style":10},"\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",[88,81581,81582,81590,81598,81602,81607,81612,81617,81625],{"__ignoreMap":10},[91,81583,81584,81586,81588],{"class":93,"line":94},[91,81585,1012],{"class":101},[91,81587,51775],{"class":51275},[91,81589,51282],{"class":101},[91,81591,81592,81594,81596],{"class":93,"line":11},[91,81593,52119],{"class":101},[91,81595,51788],{"class":51275},[91,81597,51282],{"class":101},[91,81599,81600],{"class":93,"line":1157},[91,81601,81546],{"class":101},[91,81603,81604],{"class":93,"line":1172},[91,81605,81606],{"class":101},"    const arr = [10, 0, 5]\n",[91,81608,81609],{"class":93,"line":1178},[91,81610,81611],{"class":101},"    const flag = arr.some(item => item >= 10)\n",[91,81613,81614],{"class":93,"line":1192},[91,81615,81616],{"class":101},"    console.log(flag)   \u002F\u002Ftrue\n",[91,81618,81619,81621,81623],{"class":93,"line":1198},[91,81620,52392],{"class":101},[91,81622,51788],{"class":51275},[91,81624,51282],{"class":101},[91,81626,81627,81629,81631],{"class":93,"line":1289},[91,81628,51760],{"class":101},[91,81630,51775],{"class":51275},[91,81632,51282],{"class":101},[22889,81634,81636],{"id":81635},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[38,81638,81639],{},[1440,81640],{"alt":10,"src":81641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[83,81643,81645],{"className":50608,"code":81644,"language":50610,"meta":10,"style":10},"\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",[88,81646,81647,81657,81671,81675,81683,81697,81717,81729,81737,81744,81756,81768,81780,81792,81802,81812,81816,81824,81832,81836,81844,81856,81864,81886,81891,81896,81929,81937,81945,81949],{"__ignoreMap":10},[91,81648,81649,81651,81653,81655],{"class":93,"line":94},[91,81650,51272],{"class":101},[91,81652,51276],{"class":51275},[91,81654,51279],{"class":1941},[91,81656,51282],{"class":101},[91,81658,81659,81661,81663,81665,81667,81669],{"class":93,"line":11},[91,81660,1012],{"class":101},[91,81662,50610],{"class":51275},[91,81664,51291],{"class":1941},[91,81666,147],{"class":101},[91,81668,51296],{"class":206},[91,81670,51282],{"class":101},[91,81672,81673],{"class":93,"line":1157},[91,81674,2378],{"emptyLinePlaceholder":17},[91,81676,81677,81679,81681],{"class":93,"line":1172},[91,81678,1012],{"class":101},[91,81680,51309],{"class":51275},[91,81682,51282],{"class":101},[91,81684,81685,81687,81689,81691,81693,81695],{"class":93,"line":1178},[91,81686,52119],{"class":101},[91,81688,51319],{"class":51275},[91,81690,51322],{"class":1941},[91,81692,147],{"class":101},[91,81694,51327],{"class":206},[91,81696,51282],{"class":101},[91,81698,81699,81701,81703,81705,81707,81709,81711,81713,81715],{"class":93,"line":1192},[91,81700,52119],{"class":101},[91,81702,51319],{"class":51275},[91,81704,14899],{"class":1941},[91,81706,147],{"class":101},[91,81708,51366],{"class":206},[91,81710,51346],{"class":1941},[91,81712,147],{"class":101},[91,81714,51373],{"class":206},[91,81716,51282],{"class":101},[91,81718,81719,81721,81723,81725,81727],{"class":93,"line":1198},[91,81720,52119],{"class":101},[91,81722,51382],{"class":51275},[91,81724,51385],{"class":101},[91,81726,51382],{"class":51275},[91,81728,51282],{"class":101},[91,81730,81731,81733,81735],{"class":93,"line":1289},[91,81732,52119],{"class":101},[91,81734,5105],{"class":51275},[91,81736,51282],{"class":101},[91,81738,81739,81742],{"class":93,"line":1295},[91,81740,81741],{"class":51275},"    div",[91,81743,15551],{"class":101},[91,81745,81746,81748,81750,81752,81754],{"class":93,"line":1307},[91,81747,54746],{"class":150},[91,81749,51412],{"class":101},[91,81751,1700],{"class":150},[91,81753,51467],{"class":97},[91,81755,1268],{"class":101},[91,81757,81758,81760,81762,81764,81766],{"class":93,"line":1590},[91,81759,54760],{"class":150},[91,81761,51412],{"class":101},[91,81763,503],{"class":150},[91,81765,51467],{"class":97},[91,81767,1268],{"class":101},[91,81769,81770,81772,81774,81776,81778],{"class":93,"line":1595},[91,81771,57334],{"class":150},[91,81773,51412],{"class":101},[91,81775,503],{"class":150},[91,81777,51467],{"class":97},[91,81779,1268],{"class":101},[91,81781,81782,81784,81786,81788,81790],{"class":93,"line":1601},[91,81783,65108],{"class":150},[91,81785,51412],{"class":101},[91,81787,600],{"class":150},[91,81789,51467],{"class":97},[91,81791,1268],{"class":101},[91,81793,81794,81796,81798,81800],{"class":93,"line":1606},[91,81795,57261],{"class":150},[91,81797,51412],{"class":101},[91,81799,51567],{"class":150},[91,81801,1268],{"class":101},[91,81803,81804,81806,81808,81810],{"class":93,"line":1620},[91,81805,54859],{"class":150},[91,81807,51412],{"class":101},[91,81809,51620],{"class":150},[91,81811,1268],{"class":101},[91,81813,81814],{"class":93,"line":1625},[91,81815,2165],{"class":101},[91,81817,81818,81820,81822],{"class":93,"line":1631},[91,81819,52392],{"class":101},[91,81821,5105],{"class":51275},[91,81823,51282],{"class":101},[91,81825,81826,81828,81830],{"class":93,"line":1652},[91,81827,51760],{"class":101},[91,81829,51309],{"class":51275},[91,81831,51282],{"class":101},[91,81833,81834],{"class":93,"line":1657},[91,81835,2378],{"emptyLinePlaceholder":17},[91,81837,81838,81840,81842],{"class":93,"line":1671},[91,81839,1012],{"class":101},[91,81841,51775],{"class":51275},[91,81843,51282],{"class":101},[91,81845,81846,81848,81850,81852,81854],{"class":93,"line":1676},[91,81847,52119],{"class":101},[91,81849,51586],{"class":51275},[91,81851,55289],{"class":101},[91,81853,51586],{"class":51275},[91,81855,51282],{"class":101},[91,81857,81858,81860,81862],{"class":93,"line":1705},[91,81859,52119],{"class":101},[91,81861,51788],{"class":51275},[91,81863,51282],{"class":101},[91,81865,81866,81868,81871,81873,81876,81879,81881,81884],{"class":93,"line":1710},[91,81867,11200],{"class":97},[91,81869,81870],{"class":150}," spec",[91,81872,13543],{"class":97},[91,81874,81875],{"class":101}," { size: ",[91,81877,81878],{"class":206},"'40cm*40cm'",[91,81880,55439],{"class":101},[91,81882,81883],{"class":206},"'黑色'",[91,81885,55579],{"class":101},[91,81887,81888],{"class":93,"line":1727},[91,81889,81890],{"class":160},"    \u002F\u002F const arr = Object.values(spec)\n",[91,81892,81893],{"class":93,"line":1732},[91,81894,81895],{"class":160},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[91,81897,81898,81900,81902,81904,81907,81909,81911,81914,81917,81920,81922,81924,81927],{"class":93,"line":1737},[91,81899,52382],{"class":101},[91,81901,54374],{"class":1941},[91,81903,102],{"class":101},[91,81905,81906],{"class":206},"'div'",[91,81908,74224],{"class":101},[91,81910,147],{"class":97},[91,81912,81913],{"class":101}," Object.",[91,81915,81916],{"class":1941},"values",[91,81918,81919],{"class":101},"(spec).",[91,81921,74198],{"class":1941},[91,81923,102],{"class":101},[91,81925,81926],{"class":206},"'\u002F'",[91,81928,108],{"class":101},[91,81930,81931,81933,81935],{"class":93,"line":1742},[91,81932,52392],{"class":101},[91,81934,51788],{"class":51275},[91,81936,51282],{"class":101},[91,81938,81939,81941,81943],{"class":93,"line":1756},[91,81940,51760],{"class":101},[91,81942,51775],{"class":51275},[91,81944,51282],{"class":101},[91,81946,81947],{"class":93,"line":1761},[91,81948,2378],{"emptyLinePlaceholder":17},[91,81950,81951,81953,81955],{"class":93,"line":2555},[91,81952,51760],{"class":101},[91,81954,50610],{"class":51275},[91,81956,51282],{"class":101},[38,81958,81959],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22889,81961,81963],{"id":81962},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[38,81965,81966],{},"静态方法，将伪数组转换为真数组",[38,81968,81969],{},[1440,81970],{"alt":10,"src":81971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[83,81973,81975],{"className":53042,"code":81974,"language":53044,"meta":10,"style":10},"\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",[88,81976,81977,81985,81993,82005,82017,82029,82037,82045,82050,82055,82060,82065,82073],{"__ignoreMap":10},[91,81978,81979,81981,81983],{"class":93,"line":94},[91,81980,1012],{"class":101},[91,81982,51775],{"class":51275},[91,81984,51282],{"class":101},[91,81986,81987,81989,81991],{"class":93,"line":11},[91,81988,52119],{"class":101},[91,81990,1109],{"class":51275},[91,81992,51282],{"class":101},[91,81994,81995,81997,81999,82001,82003],{"class":93,"line":1157},[91,81996,51316],{"class":101},[91,81998,49],{"class":51275},[91,82000,55289],{"class":101},[91,82002,49],{"class":51275},[91,82004,51282],{"class":101},[91,82006,82007,82009,82011,82013,82015],{"class":93,"line":1172},[91,82008,51316],{"class":101},[91,82010,49],{"class":51275},[91,82012,55289],{"class":101},[91,82014,49],{"class":51275},[91,82016,51282],{"class":101},[91,82018,82019,82021,82023,82025,82027],{"class":93,"line":1178},[91,82020,51316],{"class":101},[91,82022,49],{"class":51275},[91,82024,55289],{"class":101},[91,82026,49],{"class":51275},[91,82028,51282],{"class":101},[91,82030,82031,82033,82035],{"class":93,"line":1192},[91,82032,52392],{"class":101},[91,82034,1109],{"class":51275},[91,82036,51282],{"class":101},[91,82038,82039,82041,82043],{"class":93,"line":1198},[91,82040,52119],{"class":101},[91,82042,51788],{"class":51275},[91,82044,51282],{"class":101},[91,82046,82047],{"class":93,"line":1289},[91,82048,82049],{"class":101},"    const lis = document.querySelectorAll('li')\n",[91,82051,82052],{"class":93,"line":1295},[91,82053,82054],{"class":101},"    const liss = Array.from(lis)\n",[91,82056,82057],{"class":93,"line":1307},[91,82058,82059],{"class":101},"    liss.pop()\n",[91,82061,82062],{"class":93,"line":1590},[91,82063,82064],{"class":101},"    console.log(liss)\n",[91,82066,82067,82069,82071],{"class":93,"line":1595},[91,82068,52392],{"class":101},[91,82070,51788],{"class":51275},[91,82072,51282],{"class":101},[91,82074,82075,82077,82079],{"class":93,"line":1601},[91,82076,51760],{"class":101},[91,82078,51775],{"class":51275},[91,82080,51282],{"class":101},[38,82082,82083],{},[1440,82084],{"alt":10,"src":82085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21977,82087,82089],{"id":82088},"_41053-string","4.10.5.3 String",[38,82091,82092],{},[1440,82093],{"alt":10,"src":82094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22889,82096,82098],{"id":82097},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[83,82100,82102],{"className":53042,"code":82101,"language":53044,"meta":10,"style":10},"\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",[88,82103,82104,82112,82120,82125,82130,82135,82139,82144,82149,82154,82162],{"__ignoreMap":10},[91,82105,82106,82108,82110],{"class":93,"line":94},[91,82107,1012],{"class":101},[91,82109,51775],{"class":51275},[91,82111,51282],{"class":101},[91,82113,82114,82116,82118],{"class":93,"line":11},[91,82115,52119],{"class":101},[91,82117,51788],{"class":51275},[91,82119,51282],{"class":101},[91,82121,82122],{"class":93,"line":1157},[91,82123,82124],{"class":101},"    \u002F\u002F 把字符串转化为数组\n",[91,82126,82127],{"class":93,"line":1172},[91,82128,82129],{"class":101},"    const str = 'pink,red'\n",[91,82131,82132],{"class":93,"line":1178},[91,82133,82134],{"class":101},"    const arr = str.split(',')\n",[91,82136,82137],{"class":93,"line":1192},[91,82138,80613],{"class":101},[91,82140,82141],{"class":93,"line":1198},[91,82142,82143],{"class":101},"    const str1 = '2025-8-25'\n",[91,82145,82146],{"class":93,"line":1289},[91,82147,82148],{"class":101},"    const arr1 = str1.split('-')\n",[91,82150,82151],{"class":93,"line":1295},[91,82152,82153],{"class":101},"    console.log(arr1)\n",[91,82155,82156,82158,82160],{"class":93,"line":1307},[91,82157,52392],{"class":101},[91,82159,51788],{"class":51275},[91,82161,51282],{"class":101},[91,82163,82164,82166,82168],{"class":93,"line":1590},[91,82165,51760],{"class":101},[91,82167,51775],{"class":51275},[91,82169,51282],{"class":101},[22889,82171,82173],{"id":82172},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[38,82175,5160],{},[38,82177,82178],{},"substring(indexStart)",[38,82180,82181],{},"substring(indexStart, indexEnd)",[1109,82183,82184,82195,82207,82217],{},[49,82185,82186,82187,82190,82191,82194],{},"如果省略了 ",[88,82188,82189],{},"indexEnd","，则 ",[88,82192,82193],{},"substring()"," 提取字符直到字符串的末尾",[49,82196,82197,82198,82201,82202,82190,82204,82206],{},"如果 ",[88,82199,82200],{},"indexStart"," 等于 ",[88,82203,82189],{},[88,82205,82193],{}," 返回一个空字符串",[49,82208,82197,82209,82211,82212,82190,82214,82216],{},[88,82210,82200],{}," 大于 ",[88,82213,82189],{},[88,82215,82193],{}," 的效果就像交换了这两个参数一样",[49,82218,82219],{},"结束的索引号不包含想要截取的部分",[83,82221,82223],{"className":81464,"code":82222,"language":81466,"meta":10,"style":10},"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",[88,82224,82225,82237,82241,82275,82305,82309,82340,82344,82371,82401,82431,82435,82466],{"__ignoreMap":10},[91,82226,82227,82230,82232,82235],{"class":93,"line":94},[91,82228,82229],{"class":101},"const anyString ",[91,82231,147],{"class":97},[91,82233,82234],{"class":206}," \"Mozilla\"",[91,82236,1268],{"class":101},[91,82238,82239],{"class":93,"line":11},[91,82240,2378],{"emptyLinePlaceholder":17},[91,82242,82243,82246,82248,82250,82252,82255,82257,82260,82262,82264,82266,82268,82270,82272],{"class":93,"line":1157},[91,82244,82245],{"class":150},"console",[91,82247,660],{"class":101},[91,82249,58222],{"class":150},[91,82251,102],{"class":101},[91,82253,82254],{"class":150},"anyString",[91,82256,660],{"class":101},[91,82258,82259],{"class":150},"substring",[91,82261,102],{"class":101},[91,82263,293],{"class":150},[91,82265,12414],{"class":101},[91,82267,319],{"class":150},[91,82269,75228],{"class":101},[91,82271,33304],{"class":97},[91,82273,82274],{"class":206}," 'M'\n",[91,82276,82277,82279,82281,82283,82285,82287,82289,82291,82293,82295,82297,82299,82301,82303],{"class":93,"line":1172},[91,82278,82245],{"class":150},[91,82280,660],{"class":101},[91,82282,58222],{"class":150},[91,82284,102],{"class":101},[91,82286,82254],{"class":150},[91,82288,660],{"class":101},[91,82290,82259],{"class":150},[91,82292,102],{"class":101},[91,82294,319],{"class":150},[91,82296,12414],{"class":101},[91,82298,293],{"class":150},[91,82300,75228],{"class":101},[91,82302,33304],{"class":97},[91,82304,82274],{"class":206},[91,82306,82307],{"class":93,"line":1178},[91,82308,2378],{"emptyLinePlaceholder":17},[91,82310,82311,82313,82315,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337],{"class":93,"line":1192},[91,82312,82245],{"class":150},[91,82314,660],{"class":101},[91,82316,58222],{"class":150},[91,82318,102],{"class":101},[91,82320,82254],{"class":150},[91,82322,660],{"class":101},[91,82324,82259],{"class":150},[91,82326,102],{"class":101},[91,82328,293],{"class":150},[91,82330,12414],{"class":101},[91,82332,446],{"class":150},[91,82334,75228],{"class":101},[91,82336,33304],{"class":97},[91,82338,82339],{"class":206}," 'Mozill'\n",[91,82341,82342],{"class":93,"line":1198},[91,82343,2378],{"emptyLinePlaceholder":17},[91,82345,82346,82348,82350,82352,82354,82356,82358,82360,82362,82364,82366,82368],{"class":93,"line":1289},[91,82347,82245],{"class":150},[91,82349,660],{"class":101},[91,82351,58222],{"class":150},[91,82353,102],{"class":101},[91,82355,82254],{"class":150},[91,82357,660],{"class":101},[91,82359,82259],{"class":150},[91,82361,102],{"class":101},[91,82363,395],{"class":150},[91,82365,75228],{"class":101},[91,82367,33304],{"class":97},[91,82369,82370],{"class":206}," 'lla'\n",[91,82372,82373,82375,82377,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399],{"class":93,"line":1295},[91,82374,82245],{"class":150},[91,82376,660],{"class":101},[91,82378,58222],{"class":150},[91,82380,102],{"class":101},[91,82382,82254],{"class":150},[91,82384,660],{"class":101},[91,82386,82259],{"class":150},[91,82388,102],{"class":101},[91,82390,395],{"class":150},[91,82392,12414],{"class":101},[91,82394,471],{"class":150},[91,82396,75284],{"class":101},[91,82398,33304],{"class":97},[91,82400,82370],{"class":206},[91,82402,82403,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429],{"class":93,"line":1307},[91,82404,82245],{"class":150},[91,82406,660],{"class":101},[91,82408,58222],{"class":150},[91,82410,102],{"class":101},[91,82412,82254],{"class":150},[91,82414,660],{"class":101},[91,82416,82259],{"class":150},[91,82418,102],{"class":101},[91,82420,471],{"class":150},[91,82422,12414],{"class":101},[91,82424,395],{"class":150},[91,82426,75228],{"class":101},[91,82428,33304],{"class":97},[91,82430,82370],{"class":206},[91,82432,82433],{"class":93,"line":1590},[91,82434,2378],{"emptyLinePlaceholder":17},[91,82436,82437,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463],{"class":93,"line":1595},[91,82438,82245],{"class":150},[91,82440,660],{"class":101},[91,82442,58222],{"class":150},[91,82444,102],{"class":101},[91,82446,82254],{"class":150},[91,82448,660],{"class":101},[91,82450,82259],{"class":150},[91,82452,102],{"class":101},[91,82454,293],{"class":150},[91,82456,12414],{"class":101},[91,82458,471],{"class":150},[91,82460,75228],{"class":101},[91,82462,33304],{"class":97},[91,82464,82465],{"class":206}," 'Mozilla'\n",[91,82467,82468,82470,82472,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494],{"class":93,"line":1601},[91,82469,82245],{"class":150},[91,82471,660],{"class":101},[91,82473,58222],{"class":150},[91,82475,102],{"class":101},[91,82477,82254],{"class":150},[91,82479,660],{"class":101},[91,82481,82259],{"class":150},[91,82483,102],{"class":101},[91,82485,293],{"class":150},[91,82487,12414],{"class":101},[91,82489,548],{"class":150},[91,82491,75228],{"class":101},[91,82493,33304],{"class":97},[91,82495,82465],{"class":206},[22889,82497,82499],{"id":82498},"_410533-startswith","4.10.5.3.3 startsWith",[38,82501,82502,82505,82506,82511,82512,82514,82515],{},[88,82503,82504],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[251,82507,82508],{},[88,82509,82510],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[88,82513,1340],{}," 或 ",[88,82516,65995],{},[83,82518,82520],{"className":77470,"code":82519,"language":77472,"meta":10,"style":10},"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",[88,82521,82522,82534,82553,82558,82578],{"__ignoreMap":10},[91,82523,82524,82526,82529,82531],{"class":93,"line":94},[91,82525,6771],{"class":97},[91,82527,82528],{"class":101}," str1 ",[91,82530,147],{"class":97},[91,82532,82533],{"class":206}," \"Saturday night plans\"\n",[91,82535,82536,82538,82540,82543,82546,82548,82551],{"class":93,"line":11},[91,82537,77507],{"class":101},[91,82539,58222],{"class":1941},[91,82541,82542],{"class":101},"(str1.",[91,82544,82545],{"class":1941},"startsWith",[91,82547,102],{"class":101},[91,82549,82550],{"class":206},"\"Sat\"",[91,82552,30472],{"class":101},[91,82554,82555],{"class":93,"line":1157},[91,82556,82557],{"class":160},"\u002F\u002F Expected output: true\n",[91,82559,82560,82562,82564,82566,82568,82570,82572,82574,82576],{"class":93,"line":1172},[91,82561,77507],{"class":101},[91,82563,58222],{"class":1941},[91,82565,82542],{"class":101},[91,82567,82545],{"class":1941},[91,82569,102],{"class":101},[91,82571,82550],{"class":206},[91,82573,12414],{"class":101},[91,82575,173],{"class":150},[91,82577,30472],{"class":101},[91,82579,82580],{"class":93,"line":1178},[91,82581,82582],{"class":160},"\u002F\u002F Expected output: false\n",[83,82584,82586],{"className":50608,"code":82585,"language":50610,"meta":10,"style":10},"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",[88,82587,82588,82593,82598,82602,82607,82612],{"__ignoreMap":10},[91,82589,82590],{"class":93,"line":94},[91,82591,82592],{"class":101},"startsWith(searchString)\n",[91,82594,82595],{"class":93,"line":11},[91,82596,82597],{"class":101},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[91,82599,82600],{"class":93,"line":1157},[91,82601,2378],{"emptyLinePlaceholder":17},[91,82603,82604],{"class":93,"line":1172},[91,82605,82606],{"class":101},"const str3 = 'pink老师上课中'\n",[91,82608,82609],{"class":93,"line":1178},[91,82610,82611],{"class":101},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[91,82613,82614],{"class":93,"line":1192},[91,82615,82616],{"class":101},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22889,82618,82620],{"id":82619},"_410534-includes","4.10.5.3.4 includes",[38,82622,82623],{},"includes(searchString) includes(searchString, position)",[46,82625,82626],{},[49,82627,82628],{},"searchString:",[38,82630,82631,82632,82634,82635,82640,82641,82646,82647,21479,82650,82653,82654,82657],{},"一个要在 ",[88,82633,1277],{}," 中查找的字符串。",[340,82636,82639],{"href":82637,"rel":82638},"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",[23839],"不能是正则表达式","。所有非正则表达式的值都会被",[340,82642,82645],{"href":82643,"rel":82644},"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",[23839],"强制转换为字符串","，因此如果该参数被省略或传入 ",[88,82648,82649],{},"undefined",[88,82651,82652],{},"includes()"," 方法会在字符串中搜索 ",[88,82655,82656],{},"\"undefined\"","，这通常不是你想要的",[46,82659,82660],{"start":11},[49,82661,82662,961],{},[88,82663,82664],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[38,82666,82667,82668,82671,82672],{},"在字符串中开始搜索 ",[88,82669,82670],{},"searchString"," 的位置。默认值为 ",[88,82673,293],{},[46,82675,82676],{"start":1157},[49,82677,82678],{},"返回值：",[38,82680,82681,82682,82684,82685,82689,82690],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[88,82683,82670],{}," 为空字符串的情况），则返回 ",[251,82686,82687],{},[88,82688,1340],{}," ，否则返回 ",[251,82691,82692],{},[88,82693,65995],{},[46,82695,82696],{"start":1172},[49,82697,82698],{},"异常：",[38,82700,82197,82701,13774,82703,82707],{},[88,82702,82670],{},[340,82704,82706],{"href":82637,"rel":82705},[23839],"是一个正则表达式","，则会抛出",[38,82709,82710],{},"只要是有就是true，不需要非得以谁开头结尾",[83,82712,82714],{"className":77470,"code":82713,"language":77472,"meta":10,"style":10},"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",[88,82715,82716,82727,82750,82769,82789,82811,82830],{"__ignoreMap":10},[91,82717,82718,82720,82722,82724],{"class":93,"line":94},[91,82719,6771],{"class":97},[91,82721,79750],{"class":101},[91,82723,147],{"class":97},[91,82725,82726],{"class":206}," \"To be, or not to be, that is the question.\"\n",[91,82728,82729,82731,82733,82736,82739,82741,82744,82747],{"class":93,"line":11},[91,82730,77507],{"class":101},[91,82732,58222],{"class":1941},[91,82734,82735],{"class":101},"(str.",[91,82737,82738],{"class":1941},"includes",[91,82740,102],{"class":101},[91,82742,82743],{"class":206},"\"To be\"",[91,82745,82746],{"class":101},"))",[91,82748,82749],{"class":160},"  \u002F\u002F true\n",[91,82751,82752,82754,82756,82758,82760,82762,82765,82767],{"class":93,"line":1157},[91,82753,77507],{"class":101},[91,82755,58222],{"class":1941},[91,82757,82735],{"class":101},[91,82759,82738],{"class":1941},[91,82761,102],{"class":101},[91,82763,82764],{"class":206},"\"question\"",[91,82766,82746],{"class":101},[91,82768,82749],{"class":160},[91,82770,82771,82773,82775,82777,82779,82781,82784,82786],{"class":93,"line":1172},[91,82772,77507],{"class":101},[91,82774,58222],{"class":1941},[91,82776,82735],{"class":101},[91,82778,82738],{"class":1941},[91,82780,102],{"class":101},[91,82782,82783],{"class":206},"\"nonexistent\"",[91,82785,82746],{"class":101},[91,82787,82788],{"class":160},"  \u002F\u002F false\n",[91,82790,82791,82793,82795,82797,82799,82801,82803,82805,82807,82809],{"class":93,"line":1178},[91,82792,77507],{"class":101},[91,82794,58222],{"class":1941},[91,82796,82735],{"class":101},[91,82798,82738],{"class":1941},[91,82800,102],{"class":101},[91,82802,82743],{"class":206},[91,82804,12414],{"class":101},[91,82806,319],{"class":150},[91,82808,82746],{"class":101},[91,82810,82788],{"class":160},[91,82812,82813,82815,82817,82819,82821,82823,82826,82828],{"class":93,"line":1192},[91,82814,77507],{"class":101},[91,82816,58222],{"class":1941},[91,82818,82735],{"class":101},[91,82820,82738],{"class":1941},[91,82822,102],{"class":101},[91,82824,82825],{"class":206},"\"TO BE\"",[91,82827,82746],{"class":101},[91,82829,82788],{"class":160},[91,82831,82832,82834,82836,82838,82840,82842,82844,82846],{"class":93,"line":1198},[91,82833,77507],{"class":101},[91,82835,58222],{"class":1941},[91,82837,82735],{"class":101},[91,82839,82738],{"class":1941},[91,82841,102],{"class":101},[91,82843,7631],{"class":206},[91,82845,82746],{"class":101},[91,82847,82749],{"class":160},[22889,82849,82851],{"id":82850},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[83,82853,82855],{"className":53042,"code":82854,"language":53044,"meta":10,"style":10},"\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",[88,82856,82857,82865,82873,82878,82883,82888,82893,82898,82906],{"__ignoreMap":10},[91,82858,82859,82861,82863],{"class":93,"line":94},[91,82860,1012],{"class":101},[91,82862,51775],{"class":51275},[91,82864,51282],{"class":101},[91,82866,82867,82869,82871],{"class":93,"line":11},[91,82868,52119],{"class":101},[91,82870,51788],{"class":51275},[91,82872,51282],{"class":101},[91,82874,82875],{"class":93,"line":1157},[91,82876,82877],{"class":101},"    const num = 10\n",[91,82879,82880],{"class":93,"line":1172},[91,82881,82882],{"class":101},"    \u002F\u002F 强制转换\n",[91,82884,82885],{"class":93,"line":1178},[91,82886,82887],{"class":101},"    console.log(String(num))\n",[91,82889,82890],{"class":93,"line":1192},[91,82891,82892],{"class":101},"    \u002F\u002F toString()方法转换\n",[91,82894,82895],{"class":93,"line":1198},[91,82896,82897],{"class":101},"    console.log(num.toString())\n",[91,82899,82900,82902,82904],{"class":93,"line":1289},[91,82901,52392],{"class":101},[91,82903,51788],{"class":51275},[91,82905,51282],{"class":101},[91,82907,82908,82910,82912],{"class":93,"line":1295},[91,82909,51760],{"class":101},[91,82911,51775],{"class":51275},[91,82913,51282],{"class":101},[22889,82915,82917],{"id":82916},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[38,82919,82920],{},[1440,82921],{"alt":10,"src":82922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[83,82924,82926],{"className":50608,"code":82925,"language":50610,"meta":10,"style":10},"\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",[88,82927,82928,82938,82952,82956,82964,82978,82998,83010,83018,83022,83030,83042,83050,83062,83067,83072,83077,83124,83140,83148,83156,83160],{"__ignoreMap":10},[91,82929,82930,82932,82934,82936],{"class":93,"line":94},[91,82931,51272],{"class":101},[91,82933,51276],{"class":51275},[91,82935,51279],{"class":1941},[91,82937,51282],{"class":101},[91,82939,82940,82942,82944,82946,82948,82950],{"class":93,"line":11},[91,82941,1012],{"class":101},[91,82943,50610],{"class":51275},[91,82945,51291],{"class":1941},[91,82947,147],{"class":101},[91,82949,51296],{"class":206},[91,82951,51282],{"class":101},[91,82953,82954],{"class":93,"line":1157},[91,82955,2378],{"emptyLinePlaceholder":17},[91,82957,82958,82960,82962],{"class":93,"line":1172},[91,82959,1012],{"class":101},[91,82961,51309],{"class":51275},[91,82963,51282],{"class":101},[91,82965,82966,82968,82970,82972,82974,82976],{"class":93,"line":1178},[91,82967,52119],{"class":101},[91,82969,51319],{"class":51275},[91,82971,51322],{"class":1941},[91,82973,147],{"class":101},[91,82975,51327],{"class":206},[91,82977,51282],{"class":101},[91,82979,82980,82982,82984,82986,82988,82990,82992,82994,82996],{"class":93,"line":1192},[91,82981,52119],{"class":101},[91,82983,51319],{"class":51275},[91,82985,14899],{"class":1941},[91,82987,147],{"class":101},[91,82989,51366],{"class":206},[91,82991,51346],{"class":1941},[91,82993,147],{"class":101},[91,82995,51373],{"class":206},[91,82997,51282],{"class":101},[91,82999,83000,83002,83004,83006,83008],{"class":93,"line":1198},[91,83001,52119],{"class":101},[91,83003,51382],{"class":51275},[91,83005,51385],{"class":101},[91,83007,51382],{"class":51275},[91,83009,51282],{"class":101},[91,83011,83012,83014,83016],{"class":93,"line":1289},[91,83013,51760],{"class":101},[91,83015,51309],{"class":51275},[91,83017,51282],{"class":101},[91,83019,83020],{"class":93,"line":1295},[91,83021,2378],{"emptyLinePlaceholder":17},[91,83023,83024,83026,83028],{"class":93,"line":1307},[91,83025,1012],{"class":101},[91,83027,51775],{"class":51275},[91,83029,51282],{"class":101},[91,83031,83032,83034,83036,83038,83040],{"class":93,"line":1590},[91,83033,52119],{"class":101},[91,83035,51586],{"class":51275},[91,83037,55289],{"class":101},[91,83039,51586],{"class":51275},[91,83041,51282],{"class":101},[91,83043,83044,83046,83048],{"class":93,"line":1595},[91,83045,52119],{"class":101},[91,83047,51788],{"class":51275},[91,83049,51282],{"class":101},[91,83051,83052,83054,83057,83059],{"class":93,"line":1601},[91,83053,11200],{"class":97},[91,83055,83056],{"class":150}," gift",[91,83058,13543],{"class":97},[91,83060,83061],{"class":206}," '50g的茶叶，清洗球'\n",[91,83063,83064],{"class":93,"line":1606},[91,83065,83066],{"class":160},"    \u002F\u002F 1.把字符串拆分为数组\n",[91,83068,83069],{"class":93,"line":1620},[91,83070,83071],{"class":160},"    \u002F\u002F console.log(gift.split(','))\n",[91,83073,83074],{"class":93,"line":1625},[91,83075,83076],{"class":160},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[91,83078,83079,83081,83083,83085,83088,83091,83093,83096,83098,83100,83102,83104,83106,83109,83111,83114,83116,83118,83120,83122],{"class":93,"line":1631},[91,83080,11200],{"class":97},[91,83082,73894],{"class":150},[91,83084,13543],{"class":97},[91,83086,83087],{"class":101}," gift.",[91,83089,83090],{"class":1941},"split",[91,83092,102],{"class":101},[91,83094,83095],{"class":206},"'，'",[91,83097,30801],{"class":101},[91,83099,74019],{"class":1941},[91,83101,102],{"class":101},[91,83103,79770],{"class":5195},[91,83105,79773],{"class":97},[91,83107,83108],{"class":206}," `\u003Cspan>【赠品】${",[91,83110,79770],{"class":101},[91,83112,83113],{"class":206},"}\u003C\u002Fspan>\u003Cbr>`",[91,83115,30801],{"class":101},[91,83117,74198],{"class":1941},[91,83119,102],{"class":101},[91,83121,74203],{"class":206},[91,83123,108],{"class":101},[91,83125,83126,83128,83130,83132,83134,83136,83138],{"class":93,"line":1652},[91,83127,52382],{"class":101},[91,83129,54374],{"class":1941},[91,83131,102],{"class":101},[91,83133,81906],{"class":206},[91,83135,74224],{"class":101},[91,83137,147],{"class":97},[91,83139,73960],{"class":101},[91,83141,83142,83144,83146],{"class":93,"line":1657},[91,83143,52392],{"class":101},[91,83145,51788],{"class":51275},[91,83147,51282],{"class":101},[91,83149,83150,83152,83154],{"class":93,"line":1671},[91,83151,51760],{"class":101},[91,83153,51775],{"class":51275},[91,83155,51282],{"class":101},[91,83157,83158],{"class":93,"line":1676},[91,83159,2378],{"emptyLinePlaceholder":17},[91,83161,83162,83164,83166],{"class":93,"line":1705},[91,83163,51760],{"class":101},[91,83165,50610],{"class":51275},[91,83167,51282],{"class":101},[21977,83169,83171],{"id":83170},"_41054-number","4.10.5.4 Number",[38,83173,83174],{},[1440,83175],{"alt":10,"src":83176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[38,83178,83179],{},"整数也可以进行toFixed来保留小数",[38,83181,83182],{},"比如：",[38,83184,83185],{},"const price=10",[38,83187,83188],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21977,83190,83192],{"id":83191},"_41055-购物车展示","4.10.5.5 购物车展示",[38,83194,83195],{},[1440,83196],{"alt":10,"src":83197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[83,83199,83201],{"className":50608,"code":83200,"language":50610,"meta":10,"style":10},"\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",[88,83202,83203,83213,83227,83231,83239,83253,83273,83285,83293,83299,83309,83319,83329,83333,83337,83343,83355,83369,83373,83377,83383,83395,83411,83421,83437,83441,83445,83451,83461,83471,83475,83479,83487,83499,83511,83523,83527,83531,83539,83551,83555,83559,83570,83580,83592,83604,83614,83618,83622,83630,83639,83651,83661,83671,83675,83679,83687,83696,83703,83713,83725,83729,83733,83742,83752,83763,83775,83787,83791,83795,83804,83814,83825,83829,83833,83839,83851,83863,83873,83883,83901,83913,83917,83921,83930,83942,83952,83962,83974,83978,83986,83994,83998,84006,84020,84028,84042,84070,84078,84086,84096,84100,84108,84116,84125,84133,84142,84152,84156,84160,84168,84176,84185,84193,84201,84214,84218,84222,84230,84238,84247,84255,84263,84278,84282,84286,84294,84302,84311,84319,84327,84341,84349,84353,84357,84362,84388,84393,84430,84435,84458,84463,84517,84522,84558,84562,84568,84573,84582,84596,84605,84624,84633,84643,84648,84653,84666,84671,84725,84751,84759,84767,84771],{"__ignoreMap":10},[91,83204,83205,83207,83209,83211],{"class":93,"line":94},[91,83206,51272],{"class":101},[91,83208,51276],{"class":51275},[91,83210,51279],{"class":1941},[91,83212,51282],{"class":101},[91,83214,83215,83217,83219,83221,83223,83225],{"class":93,"line":11},[91,83216,1012],{"class":101},[91,83218,50610],{"class":51275},[91,83220,51291],{"class":1941},[91,83222,147],{"class":101},[91,83224,51296],{"class":206},[91,83226,51282],{"class":101},[91,83228,83229],{"class":93,"line":1157},[91,83230,2378],{"emptyLinePlaceholder":17},[91,83232,83233,83235,83237],{"class":93,"line":1172},[91,83234,1012],{"class":101},[91,83236,51309],{"class":51275},[91,83238,51282],{"class":101},[91,83240,83241,83243,83245,83247,83249,83251],{"class":93,"line":1178},[91,83242,52119],{"class":101},[91,83244,51319],{"class":51275},[91,83246,51322],{"class":1941},[91,83248,147],{"class":101},[91,83250,51327],{"class":206},[91,83252,51282],{"class":101},[91,83254,83255,83257,83259,83261,83263,83265,83267,83269,83271],{"class":93,"line":1192},[91,83256,52119],{"class":101},[91,83258,51319],{"class":51275},[91,83260,14899],{"class":1941},[91,83262,147],{"class":101},[91,83264,51366],{"class":206},[91,83266,51346],{"class":1941},[91,83268,147],{"class":101},[91,83270,51373],{"class":206},[91,83272,51282],{"class":101},[91,83274,83275,83277,83279,83281,83283],{"class":93,"line":1198},[91,83276,52119],{"class":101},[91,83278,51382],{"class":51275},[91,83280,51385],{"class":101},[91,83282,51382],{"class":51275},[91,83284,51282],{"class":101},[91,83286,83287,83289,83291],{"class":93,"line":1289},[91,83288,52119],{"class":101},[91,83290,5105],{"class":51275},[91,83292,51282],{"class":101},[91,83294,83295,83297],{"class":93,"line":1295},[91,83296,6382],{"class":51275},[91,83298,15551],{"class":101},[91,83300,83301,83303,83305,83307],{"class":93,"line":1307},[91,83302,54670],{"class":150},[91,83304,51412],{"class":101},[91,83306,293],{"class":150},[91,83308,1268],{"class":101},[91,83310,83311,83313,83315,83317],{"class":93,"line":1590},[91,83312,54681],{"class":150},[91,83314,51412],{"class":101},[91,83316,293],{"class":150},[91,83318,1268],{"class":101},[91,83320,83321,83323,83325,83327],{"class":93,"line":1595},[91,83322,72571],{"class":150},[91,83324,51412],{"class":101},[91,83326,60480],{"class":150},[91,83328,1268],{"class":101},[91,83330,83331],{"class":93,"line":1601},[91,83332,2165],{"class":101},[91,83334,83335],{"class":93,"line":1606},[91,83336,2378],{"emptyLinePlaceholder":17},[91,83338,83339,83341],{"class":93,"line":1620},[91,83340,62098],{"class":1941},[91,83342,15551],{"class":101},[91,83344,83345,83347,83349,83351,83353],{"class":93,"line":1625},[91,83346,54746],{"class":150},[91,83348,51412],{"class":101},[91,83350,78549],{"class":150},[91,83352,51467],{"class":97},[91,83354,1268],{"class":101},[91,83356,83357,83359,83361,83363,83365,83367],{"class":93,"line":1631},[91,83358,54681],{"class":150},[91,83360,51412],{"class":101},[91,83362,413],{"class":150},[91,83364,51467],{"class":97},[91,83366,51531],{"class":150},[91,83368,1268],{"class":101},[91,83370,83371],{"class":93,"line":1652},[91,83372,2165],{"class":101},[91,83374,83375],{"class":93,"line":1657},[91,83376,2378],{"emptyLinePlaceholder":17},[91,83378,83379,83381],{"class":93,"line":1671},[91,83380,78600],{"class":1941},[91,83382,15551],{"class":101},[91,83384,83385,83387,83389,83391,83393],{"class":93,"line":1676},[91,83386,54670],{"class":150},[91,83388,51412],{"class":101},[91,83390,677],{"class":150},[91,83392,51467],{"class":97},[91,83394,1268],{"class":101},[91,83396,83397,83399,83401,83403,83405,83407,83409],{"class":93,"line":1705},[91,83398,61835],{"class":150},[91,83400,51412],{"class":101},[91,83402,28096],{"class":150},[91,83404,78655],{"class":150},[91,83406,78658],{"class":150},[91,83408,797],{"class":97},[91,83410,1268],{"class":101},[91,83412,83413,83415,83417,83419],{"class":93,"line":1710},[91,83414,54984],{"class":150},[91,83416,51412],{"class":101},[91,83418,51452],{"class":150},[91,83420,1268],{"class":101},[91,83422,83423,83425,83427,83429,83431,83433,83435],{"class":93,"line":1727},[91,83424,61952],{"class":150},[91,83426,51412],{"class":101},[91,83428,319],{"class":150},[91,83430,51467],{"class":97},[91,83432,51496],{"class":150},[91,83434,62219],{"class":150},[91,83436,1268],{"class":101},[91,83438,83439],{"class":93,"line":1732},[91,83440,2165],{"class":101},[91,83442,83443],{"class":93,"line":1737},[91,83444,2378],{"emptyLinePlaceholder":17},[91,83446,83447,83449],{"class":93,"line":1742},[91,83448,78718],{"class":1941},[91,83450,15551],{"class":101},[91,83452,83453,83455,83457,83459],{"class":93,"line":1756},[91,83454,62000],{"class":150},[91,83456,51412],{"class":101},[91,83458,62005],{"class":150},[91,83460,1268],{"class":101},[91,83462,83463,83465,83467,83469],{"class":93,"line":1761},[91,83464,54859],{"class":150},[91,83466,51412],{"class":101},[91,83468,61793],{"class":150},[91,83470,1268],{"class":101},[91,83472,83473],{"class":93,"line":2555},[91,83474,2165],{"class":101},[91,83476,83477],{"class":93,"line":2569},[91,83478,2378],{"emptyLinePlaceholder":17},[91,83480,83481,83483,83485],{"class":93,"line":2577},[91,83482,78600],{"class":1941},[91,83484,55590],{"class":51275},[91,83486,15551],{"class":101},[91,83488,83489,83491,83493,83495,83497],{"class":93,"line":2582},[91,83490,54746],{"class":150},[91,83492,51412],{"class":101},[91,83494,714],{"class":150},[91,83496,51467],{"class":97},[91,83498,1268],{"class":101},[91,83500,83501,83503,83505,83507,83509],{"class":93,"line":2588},[91,83502,54760],{"class":150},[91,83504,51412],{"class":101},[91,83506,714],{"class":150},[91,83508,51467],{"class":97},[91,83510,1268],{"class":101},[91,83512,83513,83515,83517,83519,83521],{"class":93,"line":2594},[91,83514,61725],{"class":150},[91,83516,51412],{"class":101},[91,83518,421],{"class":150},[91,83520,51467],{"class":97},[91,83522,1268],{"class":101},[91,83524,83525],{"class":93,"line":2599},[91,83526,2165],{"class":101},[91,83528,83529],{"class":93,"line":7927},[91,83530,2378],{"emptyLinePlaceholder":17},[91,83532,83533,83535,83537],{"class":93,"line":7951},[91,83534,78600],{"class":1941},[91,83536,62279],{"class":1941},[91,83538,15551],{"class":101},[91,83540,83541,83543,83545,83547,83549],{"class":93,"line":7956},[91,83542,54746],{"class":150},[91,83544,51412],{"class":101},[91,83546,1700],{"class":150},[91,83548,51467],{"class":97},[91,83550,1268],{"class":101},[91,83552,83553],{"class":93,"line":7962},[91,83554,2165],{"class":101},[91,83556,83557],{"class":93,"line":7989},[91,83558,2378],{"emptyLinePlaceholder":17},[91,83560,83561,83563,83565,83568],{"class":93,"line":7994},[91,83562,78600],{"class":1941},[91,83564,62279],{"class":1941},[91,83566,83567],{"class":1941}," .tag",[91,83569,15551],{"class":101},[91,83571,83572,83574,83576,83578],{"class":93,"line":8000},[91,83573,54984],{"class":150},[91,83575,51412],{"class":101},[91,83577,60844],{"class":150},[91,83579,1268],{"class":101},[91,83581,83582,83584,83586,83588,83590],{"class":93,"line":8012},[91,83583,54670],{"class":150},[91,83585,51412],{"class":101},[91,83587,179],{"class":150},[91,83589,51467],{"class":97},[91,83591,1268],{"class":101},[91,83593,83594,83596,83598,83600,83602],{"class":93,"line":8024},[91,83595,54897],{"class":150},[91,83597,51412],{"class":101},[91,83599,600],{"class":150},[91,83601,51467],{"class":97},[91,83603,1268],{"class":101},[91,83605,83606,83608,83610,83612],{"class":93,"line":8036},[91,83607,57391],{"class":150},[91,83609,51412],{"class":101},[91,83611,62045],{"class":150},[91,83613,1268],{"class":101},[91,83615,83616],{"class":93,"line":9695},[91,83617,2165],{"class":101},[91,83619,83620],{"class":93,"line":9720},[91,83621,2378],{"emptyLinePlaceholder":17},[91,83623,83624,83626,83628],{"class":93,"line":9743},[91,83625,78600],{"class":1941},[91,83627,78892],{"class":1941},[91,83629,31441],{"class":101},[91,83631,83632,83634,83637],{"class":93,"line":9767},[91,83633,78600],{"class":1941},[91,83635,83636],{"class":1941}," .sub-total",[91,83638,15551],{"class":101},[91,83640,83641,83643,83645,83647,83649],{"class":93,"line":9772},[91,83642,54897],{"class":150},[91,83644,51412],{"class":101},[91,83646,752],{"class":150},[91,83648,51467],{"class":97},[91,83650,1268],{"class":101},[91,83652,83653,83655,83657,83659],{"class":93,"line":9777},[91,83654,57391],{"class":150},[91,83656,51412],{"class":101},[91,83658,78915],{"class":150},[91,83660,1268],{"class":101},[91,83662,83663,83665,83667,83669],{"class":93,"line":9782},[91,83664,61812],{"class":150},[91,83666,51412],{"class":101},[91,83668,319],{"class":150},[91,83670,1268],{"class":101},[91,83672,83673],{"class":93,"line":9791},[91,83674,2165],{"class":101},[91,83676,83677],{"class":93,"line":9796},[91,83678,2378],{"emptyLinePlaceholder":17},[91,83680,83681,83683,83685],{"class":93,"line":9802},[91,83682,78600],{"class":1941},[91,83684,78932],{"class":1941},[91,83686,31441],{"class":101},[91,83688,83689,83691,83694],{"class":93,"line":9823},[91,83690,78600],{"class":1941},[91,83692,83693],{"class":1941}," .sub-total::before",[91,83695,31441],{"class":101},[91,83697,83698,83701],{"class":93,"line":9829},[91,83699,83700],{"class":1941},"    .amount::before",[91,83702,15551],{"class":101},[91,83704,83705,83707,83709,83711],{"class":93,"line":9843},[91,83706,78939],{"class":150},[91,83708,51412],{"class":101},[91,83710,78944],{"class":206},[91,83712,1268],{"class":101},[91,83714,83715,83717,83719,83721,83723],{"class":93,"line":9849},[91,83716,54897],{"class":150},[91,83718,51412],{"class":101},[91,83720,600],{"class":150},[91,83722,51467],{"class":97},[91,83724,1268],{"class":101},[91,83726,83727],{"class":93,"line":9876},[91,83728,2165],{"class":101},[91,83730,83731],{"class":93,"line":9885},[91,83732,2378],{"emptyLinePlaceholder":17},[91,83734,83735,83737,83740],{"class":93,"line":9891},[91,83736,78600],{"class":1941},[91,83738,83739],{"class":1941}," .spec",[91,83741,15551],{"class":101},[91,83743,83744,83746,83748,83750],{"class":93,"line":9899},[91,83745,61812],{"class":150},[91,83747,51412],{"class":101},[91,83749,179],{"class":150},[91,83751,1268],{"class":101},[91,83753,83754,83756,83758,83761],{"class":93,"line":9904},[91,83755,57391],{"class":150},[91,83757,51412],{"class":101},[91,83759,83760],{"class":150},"#888",[91,83762,1268],{"class":101},[91,83764,83765,83767,83769,83771,83773],{"class":93,"line":16583},[91,83766,54897],{"class":150},[91,83768,51412],{"class":101},[91,83770,651],{"class":150},[91,83772,51467],{"class":97},[91,83774,1268],{"class":101},[91,83776,83777,83779,83781,83783,83785],{"class":93,"line":16589},[91,83778,61975],{"class":150},[91,83780,51412],{"class":101},[91,83782,802],{"class":150},[91,83784,51467],{"class":97},[91,83786,1268],{"class":101},[91,83788,83789],{"class":93,"line":16612},[91,83790,2165],{"class":101},[91,83792,83793],{"class":93,"line":16618},[91,83794,2378],{"emptyLinePlaceholder":17},[91,83796,83797,83799,83802],{"class":93,"line":16641},[91,83798,78600],{"class":1941},[91,83800,83801],{"class":1941}," .count",[91,83803,15551],{"class":101},[91,83805,83806,83808,83810,83812],{"class":93,"line":16655},[91,83807,61812],{"class":150},[91,83809,51412],{"class":101},[91,83811,319],{"class":150},[91,83813,1268],{"class":101},[91,83815,83816,83818,83820,83823],{"class":93,"line":16675},[91,83817,57391],{"class":150},[91,83819,51412],{"class":101},[91,83821,83822],{"class":150},"#aaa",[91,83824,1268],{"class":101},[91,83826,83827],{"class":93,"line":16681},[91,83828,2165],{"class":101},[91,83830,83831],{"class":93,"line":16692},[91,83832,2378],{"emptyLinePlaceholder":17},[91,83834,83835,83837],{"class":93,"line":16715},[91,83836,72450],{"class":1941},[91,83838,15551],{"class":101},[91,83840,83841,83843,83845,83847,83849],{"class":93,"line":16737},[91,83842,54746],{"class":150},[91,83844,51412],{"class":101},[91,83846,78549],{"class":150},[91,83848,51467],{"class":97},[91,83850,1268],{"class":101},[91,83852,83853,83855,83857,83859,83861],{"class":93,"line":16742},[91,83854,54681],{"class":150},[91,83856,51412],{"class":101},[91,83858,293],{"class":150},[91,83860,51531],{"class":150},[91,83862,1268],{"class":101},[91,83864,83865,83867,83869,83871],{"class":93,"line":16748},[91,83866,54984],{"class":150},[91,83868,51412],{"class":101},[91,83870,51452],{"class":150},[91,83872,1268],{"class":101},[91,83874,83875,83877,83879,83881],{"class":93,"line":16762},[91,83876,54995],{"class":150},[91,83878,51412],{"class":101},[91,83880,51555],{"class":150},[91,83882,1268],{"class":101},[91,83884,83885,83888,83890,83892,83894,83896,83899],{"class":93,"line":16775},[91,83886,83887],{"class":150},"      border-top",[91,83889,51412],{"class":101},[91,83891,319],{"class":150},[91,83893,51467],{"class":97},[91,83895,51496],{"class":150},[91,83897,83898],{"class":150}," #4e4e4e",[91,83900,1268],{"class":101},[91,83902,83903,83905,83907,83909,83911],{"class":93,"line":16780},[91,83904,54670],{"class":150},[91,83906,51412],{"class":101},[91,83908,802],{"class":150},[91,83910,51467],{"class":97},[91,83912,1268],{"class":101},[91,83914,83915],{"class":93,"line":16794},[91,83916,2165],{"class":101},[91,83918,83919],{"class":93,"line":16799},[91,83920,2378],{"emptyLinePlaceholder":17},[91,83922,83923,83925,83928],{"class":93,"line":16805},[91,83924,72450],{"class":1941},[91,83926,83927],{"class":1941}," .amount",[91,83929,15551],{"class":101},[91,83931,83932,83934,83936,83938,83940],{"class":93,"line":16810},[91,83933,54897],{"class":150},[91,83935,51412],{"class":101},[91,83937,752],{"class":150},[91,83939,51467],{"class":97},[91,83941,1268],{"class":101},[91,83943,83944,83946,83948,83950],{"class":93,"line":16824},[91,83945,57391],{"class":150},[91,83947,51412],{"class":101},[91,83949,78915],{"class":150},[91,83951,1268],{"class":101},[91,83953,83954,83956,83958,83960],{"class":93,"line":16829},[91,83955,62309],{"class":150},[91,83957,51412],{"class":101},[91,83959,51464],{"class":150},[91,83961,1268],{"class":101},[91,83963,83964,83966,83968,83970,83972],{"class":93,"line":16834},[91,83965,61725],{"class":150},[91,83967,51412],{"class":101},[91,83969,758],{"class":150},[91,83971,51467],{"class":97},[91,83973,1268],{"class":101},[91,83975,83976],{"class":93,"line":16848},[91,83977,2165],{"class":101},[91,83979,83980,83982,83984],{"class":93,"line":16860},[91,83981,52392],{"class":101},[91,83983,5105],{"class":51275},[91,83985,51282],{"class":101},[91,83987,83988,83990,83992],{"class":93,"line":16865},[91,83989,51760],{"class":101},[91,83991,51309],{"class":51275},[91,83993,51282],{"class":101},[91,83995,83996],{"class":93,"line":16878},[91,83997,2378],{"emptyLinePlaceholder":17},[91,83999,84000,84002,84004],{"class":93,"line":16883},[91,84001,1012],{"class":101},[91,84003,51775],{"class":51275},[91,84005,51282],{"class":101},[91,84007,84008,84010,84012,84014,84016,84018],{"class":93,"line":16888},[91,84009,52119],{"class":101},[91,84011,51586],{"class":51275},[91,84013,53461],{"class":1941},[91,84015,147],{"class":101},[91,84017,62583],{"class":206},[91,84019,51282],{"class":101},[91,84021,84022,84024,84026],{"class":93,"line":16893},[91,84023,52392],{"class":101},[91,84025,51586],{"class":51275},[91,84027,51282],{"class":101},[91,84029,84030,84032,84034,84036,84038,84040],{"class":93,"line":16906},[91,84031,52119],{"class":101},[91,84033,51586],{"class":51275},[91,84035,53461],{"class":1941},[91,84037,147],{"class":101},[91,84039,62555],{"class":206},[91,84041,51282],{"class":101},[91,84043,84044,84046,84048,84051,84053,84055,84057,84060,84062,84064,84066,84068],{"class":93,"line":16911},[91,84045,51316],{"class":101},[91,84047,51586],{"class":51275},[91,84049,84050],{"class":101},">合计：\u003C",[91,84052,91],{"class":51275},[91,84054,53461],{"class":1941},[91,84056,147],{"class":101},[91,84058,84059],{"class":206},"\"amount\"",[91,84061,55289],{"class":101},[91,84063,91],{"class":51275},[91,84065,55289],{"class":101},[91,84067,51586],{"class":51275},[91,84069,51282],{"class":101},[91,84071,84072,84074,84076],{"class":93,"line":32608},[91,84073,52392],{"class":101},[91,84075,51586],{"class":51275},[91,84077,51282],{"class":101},[91,84079,84080,84082,84084],{"class":93,"line":32614},[91,84081,52119],{"class":101},[91,84083,51788],{"class":51275},[91,84085,51282],{"class":101},[91,84087,84088,84090,84092,84094],{"class":93,"line":32620},[91,84089,11200],{"class":97},[91,84091,79352],{"class":150},[91,84093,13543],{"class":97},[91,84095,55422],{"class":101},[91,84097,84098],{"class":93,"line":32626},[91,84099,79361],{"class":101},[91,84101,84102,84104,84106],{"class":93,"line":32632},[91,84103,79366],{"class":101},[91,84105,79369],{"class":206},[91,84107,31441],{"class":101},[91,84109,84110,84112,84114],{"class":93,"line":32643},[91,84111,79376],{"class":101},[91,84113,79379],{"class":206},[91,84115,31441],{"class":101},[91,84117,84118,84120,84123],{"class":93,"line":32649},[91,84119,79386],{"class":101},[91,84121,84122],{"class":150},"289.9",[91,84124,31441],{"class":101},[91,84126,84127,84129,84131],{"class":93,"line":32669},[91,84128,79396],{"class":101},[91,84130,79399],{"class":206},[91,84132,31441],{"class":101},[91,84134,84135,84138,84140],{"class":93,"line":32675},[91,84136,84137],{"class":101},"        count: ",[91,84139,179],{"class":150},[91,84141,31441],{"class":101},[91,84143,84144,84147,84150],{"class":93,"line":32686},[91,84145,84146],{"class":101},"        spec: { color: ",[91,84148,84149],{"class":206},"'白色'",[91,84151,55579],{"class":101},[91,84153,84154],{"class":93,"line":32692},[91,84155,77867],{"class":101},[91,84157,84158],{"class":93,"line":32698},[91,84159,79361],{"class":101},[91,84161,84162,84164,84166],{"class":93,"line":32704},[91,84163,79366],{"class":101},[91,84165,79460],{"class":206},[91,84167,31441],{"class":101},[91,84169,84170,84172,84174],{"class":93,"line":32710},[91,84171,79376],{"class":101},[91,84173,79469],{"class":206},[91,84175,31441],{"class":101},[91,84177,84178,84180,84183],{"class":93,"line":32716},[91,84179,79386],{"class":101},[91,84181,84182],{"class":150},"109.8",[91,84184,31441],{"class":101},[91,84186,84187,84189,84191],{"class":93,"line":32722},[91,84188,79396],{"class":101},[91,84190,79487],{"class":206},[91,84192,31441],{"class":101},[91,84194,84195,84197,84199],{"class":93,"line":32728},[91,84196,84137],{"class":101},[91,84198,173],{"class":150},[91,84200,31441],{"class":101},[91,84202,84203,84206,84208,84210,84212],{"class":93,"line":32748},[91,84204,84205],{"class":101},"        spec: { size: ",[91,84207,81878],{"class":206},[91,84209,55439],{"class":101},[91,84211,81883],{"class":206},[91,84213,55579],{"class":101},[91,84215,84216],{"class":93,"line":32754},[91,84217,77867],{"class":101},[91,84219,84220],{"class":93,"line":32770},[91,84221,79361],{"class":101},[91,84223,84224,84226,84228],{"class":93,"line":32776},[91,84225,79366],{"class":101},[91,84227,79504],{"class":206},[91,84229,31441],{"class":101},[91,84231,84232,84234,84236],{"class":93,"line":32790},[91,84233,79376],{"class":101},[91,84235,79513],{"class":206},[91,84237,31441],{"class":101},[91,84239,84240,84242,84245],{"class":93,"line":32796},[91,84241,79386],{"class":101},[91,84243,84244],{"class":150},"488",[91,84246,31441],{"class":101},[91,84248,84249,84251,84253],{"class":93,"line":32811},[91,84250,79396],{"class":101},[91,84252,79531],{"class":206},[91,84254,31441],{"class":101},[91,84256,84257,84259,84261],{"class":93,"line":32817},[91,84258,84137],{"class":101},[91,84260,319],{"class":150},[91,84262,31441],{"class":101},[91,84264,84265,84267,84270,84273,84276],{"class":93,"line":32826},[91,84266,84146],{"class":101},[91,84268,84269],{"class":206},"'青色'",[91,84271,84272],{"class":101},", sum: ",[91,84274,84275],{"class":206},"'一大四小'",[91,84277,55579],{"class":101},[91,84279,84280],{"class":93,"line":32832},[91,84281,77867],{"class":101},[91,84283,84284],{"class":93,"line":32841},[91,84285,79361],{"class":101},[91,84287,84288,84290,84292],{"class":93,"line":32847},[91,84289,79366],{"class":101},[91,84291,79548],{"class":206},[91,84293,31441],{"class":101},[91,84295,84296,84298,84300],{"class":93,"line":32853},[91,84297,79376],{"class":101},[91,84299,79557],{"class":206},[91,84301,31441],{"class":101},[91,84303,84304,84306,84309],{"class":93,"line":32862},[91,84305,79386],{"class":101},[91,84307,84308],{"class":150},"139",[91,84310,31441],{"class":101},[91,84312,84313,84315,84317],{"class":93,"line":32868},[91,84314,79396],{"class":101},[91,84316,79575],{"class":206},[91,84318,31441],{"class":101},[91,84320,84321,84323,84325],{"class":93,"line":32879},[91,84322,84137],{"class":101},[91,84324,319],{"class":150},[91,84326,31441],{"class":101},[91,84328,84329,84331,84334,84336,84339],{"class":93,"line":32885},[91,84330,84205],{"class":101},[91,84332,84333],{"class":206},"'小号'",[91,84335,55439],{"class":101},[91,84337,84338],{"class":206},"'紫色'",[91,84340,55445],{"class":101},[91,84342,84343,84346],{"class":93,"line":32904},[91,84344,84345],{"class":101},"        gift: ",[91,84347,84348],{"class":206},"'50g茶叶,清洗球'\n",[91,84350,84351],{"class":93,"line":32910},[91,84352,52373],{"class":101},[91,84354,84355],{"class":93,"line":32921},[91,84356,53084],{"class":101},[91,84358,84359],{"class":93,"line":32927},[91,84360,84361],{"class":160},"    \u002F\u002F  1.根据数据渲染页面\n",[91,84363,84364,84366,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386],{"class":93,"line":32947},[91,84365,52382],{"class":101},[91,84367,54374],{"class":1941},[91,84369,102],{"class":101},[91,84371,79876],{"class":206},[91,84373,74224],{"class":101},[91,84375,147],{"class":97},[91,84377,80023],{"class":101},[91,84379,74019],{"class":1941},[91,84381,102],{"class":101},[91,84383,79770],{"class":5195},[91,84385,79773],{"class":97},[91,84387,15551],{"class":101},[91,84389,84390],{"class":93,"line":32963},[91,84391,84392],{"class":160},"      \u002F\u002F 对象解构\n",[91,84394,84395,84397,84399,84401,84403,84405,84407,84410,84412,84414,84416,84419,84421,84424,84426,84428],{"class":93,"line":32969},[91,84396,58203],{"class":97},[91,84398,79782],{"class":101},[91,84400,79795],{"class":150},[91,84402,12414],{"class":101},[91,84404,79785],{"class":150},[91,84406,12414],{"class":101},[91,84408,84409],{"class":150},"count",[91,84411,12414],{"class":101},[91,84413,79790],{"class":150},[91,84415,12414],{"class":101},[91,84417,84418],{"class":150},"spec",[91,84420,12414],{"class":101},[91,84422,84423],{"class":150},"gift",[91,84425,79798],{"class":101},[91,84427,147],{"class":97},[91,84429,79803],{"class":101},[91,84431,84432],{"class":93,"line":32983},[91,84433,84434],{"class":160},"      \u002F\u002F 规格文字模块处理\n",[91,84436,84437,84439,84442,84444,84446,84448,84450,84452,84454,84456],{"class":93,"line":32989},[91,84438,58203],{"class":97},[91,84440,84441],{"class":150}," text",[91,84443,13543],{"class":97},[91,84445,81913],{"class":101},[91,84447,81916],{"class":1941},[91,84449,81919],{"class":101},[91,84451,74198],{"class":1941},[91,84453,102],{"class":101},[91,84455,81926],{"class":206},[91,84457,108],{"class":101},[91,84459,84460],{"class":93,"line":32995},[91,84461,84462],{"class":160},"      \u002F\u002F 处理赠品模块\n",[91,84464,84465,84467,84469,84471,84474,84476,84478,84480,84482,84485,84487,84489,84491,84493,84495,84498,84500,84503,84505,84507,84509,84511,84513,84515],{"class":93,"line":33006},[91,84466,58203],{"class":97},[91,84468,73894],{"class":150},[91,84470,13543],{"class":97},[91,84472,84473],{"class":101}," gift ",[91,84475,1088],{"class":97},[91,84477,83087],{"class":101},[91,84479,83090],{"class":1941},[91,84481,102],{"class":101},[91,84483,84484],{"class":206},"','",[91,84486,30801],{"class":101},[91,84488,74019],{"class":1941},[91,84490,102],{"class":101},[91,84492,79770],{"class":5195},[91,84494,79773],{"class":97},[91,84496,84497],{"class":206}," `\u003Cspan class=\"tag\">【赠品】${",[91,84499,79770],{"class":101},[91,84501,84502],{"class":206},"}\u003C\u002Fspan>`",[91,84504,30801],{"class":101},[91,84506,74198],{"class":1941},[91,84508,102],{"class":101},[91,84510,74203],{"class":206},[91,84512,13693],{"class":101},[91,84514,961],{"class":97},[91,84516,70079],{"class":206},[91,84518,84519],{"class":93,"line":33012},[91,84520,84521],{"class":160},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[91,84523,84524,84526,84529,84531,84534,84536,84538,84540,84543,84545,84547,84549,84552,84554,84556],{"class":93,"line":33018},[91,84525,58203],{"class":97},[91,84527,84528],{"class":150}," subtotal",[91,84530,13543],{"class":97},[91,84532,84533],{"class":101}," ((price ",[91,84535,557],{"class":97},[91,84537,5733],{"class":150},[91,84539,6497],{"class":97},[91,84541,84542],{"class":101}," count) ",[91,84544,686],{"class":97},[91,84546,5733],{"class":150},[91,84548,30801],{"class":101},[91,84550,84551],{"class":1941},"toFixed",[91,84553,102],{"class":101},[91,84555,179],{"class":150},[91,84557,108],{"class":101},[91,84559,84560],{"class":93,"line":33028},[91,84561,2378],{"emptyLinePlaceholder":17},[91,84563,84564,84566],{"class":93,"line":33034},[91,84565,73957],{"class":97},[91,84567,70143],{"class":206},[91,84569,84570],{"class":93,"line":33045},[91,84571,84572],{"class":206},"        \u003Cdiv class=\"item\">\n",[91,84574,84575,84578,84580],{"class":93,"line":33051},[91,84576,84577],{"class":206},"          \u003Cimg src=\"${",[91,84579,79795],{"class":101},[91,84581,79827],{"class":206},[91,84583,84584,84587,84589,84592,84594],{"class":93,"line":33061},[91,84585,84586],{"class":206},"          \u003Cp class=\"name\">${",[91,84588,79785],{"class":101},[91,84590,84591],{"class":206},"}${",[91,84593,1277],{"class":101},[91,84595,79837],{"class":206},[91,84597,84598,84601,84603],{"class":93,"line":33066},[91,84599,84600],{"class":206},"          \u003Cp class=\"spec\">${",[91,84602,5166],{"class":101},[91,84604,79837],{"class":206},[91,84606,84607,84610,84612,84614,84616,84618,84620,84622],{"class":93,"line":33072},[91,84608,84609],{"class":206},"          \u003Cp class=\"price\">${",[91,84611,79790],{"class":101},[91,84613,660],{"class":206},[91,84615,84551],{"class":1941},[91,84617,102],{"class":206},[91,84619,179],{"class":150},[91,84621,531],{"class":206},[91,84623,79837],{"class":206},[91,84625,84626,84629,84631],{"class":93,"line":33121},[91,84627,84628],{"class":206},"          \u003Cp class=\"count\">x${",[91,84630,84409],{"class":101},[91,84632,79837],{"class":206},[91,84634,84635,84638,84641],{"class":93,"line":33168},[91,84636,84637],{"class":206},"          \u003Cp class=\"sub-total\">${",[91,84639,84640],{"class":101},"subtotal",[91,84642,79837],{"class":206},[91,84644,84645],{"class":93,"line":33173},[91,84646,84647],{"class":206},"        \u003C\u002Fdiv> \n",[91,84649,84650],{"class":93,"line":33179},[91,84651,84652],{"class":206},"             `\n",[91,84654,84655,84658,84660,84662,84664],{"class":93,"line":33198},[91,84656,84657],{"class":101},"    }).",[91,84659,74198],{"class":1941},[91,84661,102],{"class":101},[91,84663,74203],{"class":206},[91,84665,108],{"class":101},[91,84667,84668],{"class":93,"line":33204},[91,84669,84670],{"class":160},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[91,84672,84673,84675,84677,84679,84681,84684,84686,84689,84691,84693,84695,84698,84701,84703,84706,84708,84710,84712,84715,84717,84719,84721,84723],{"class":93,"line":33224},[91,84674,11200],{"class":97},[91,84676,62760],{"class":150},[91,84678,13543],{"class":97},[91,84680,80023],{"class":101},[91,84682,84683],{"class":1941},"reduce",[91,84685,2354],{"class":101},[91,84687,84688],{"class":5195},"prev",[91,84690,12414],{"class":101},[91,84692,79770],{"class":5195},[91,84694,13693],{"class":101},[91,84696,84697],{"class":97},"=>",[91,84699,84700],{"class":101}," prev ",[91,84702,583],{"class":97},[91,84704,84705],{"class":101}," (item.price ",[91,84707,557],{"class":97},[91,84709,5733],{"class":150},[91,84711,6497],{"class":97},[91,84713,84714],{"class":101}," item.count) ",[91,84716,686],{"class":97},[91,84718,5733],{"class":150},[91,84720,12414],{"class":101},[91,84722,293],{"class":150},[91,84724,108],{"class":101},[91,84726,84727,84729,84731,84733,84736,84738,84740,84743,84745,84747,84749],{"class":93,"line":33230},[91,84728,52382],{"class":101},[91,84730,54374],{"class":1941},[91,84732,102],{"class":101},[91,84734,84735],{"class":206},"'.amount'",[91,84737,74224],{"class":101},[91,84739,147],{"class":97},[91,84741,84742],{"class":101}," total.",[91,84744,84551],{"class":1941},[91,84746,102],{"class":101},[91,84748,179],{"class":150},[91,84750,108],{"class":101},[91,84752,84753,84755,84757],{"class":93,"line":33236},[91,84754,52392],{"class":101},[91,84756,51788],{"class":51275},[91,84758,51282],{"class":101},[91,84760,84761,84763,84765],{"class":93,"line":33246},[91,84762,51760],{"class":101},[91,84764,51775],{"class":51275},[91,84766,51282],{"class":101},[91,84768,84769],{"class":93,"line":33251},[91,84770,2378],{"emptyLinePlaceholder":17},[91,84772,84773,84775,84777],{"class":93,"line":33257},[91,84774,51760],{"class":101},[91,84776,50610],{"class":51275},[91,84778,51282],{"class":101},[33,84780,84782],{"id":84781},"_411-编程思想","4.11 编程思想",[63,84784,84786],{"id":84785},"_4111-面向过程介绍","4.11.1 面向过程介绍",[38,84788,84789,84792],{},[251,84790,84791],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[38,84794,84795],{},"调用就可以了",[38,84797,84798],{},[1440,84799],{"alt":10,"src":84800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[63,84802,84804],{"id":84803},"_4112-面向对象","4.11.2 面向对象",[38,84806,84807],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[38,84809,84810],{},[1440,84811],{"alt":10,"src":84812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[38,84814,84815],{},"面向对象的特性：",[1109,84817,84818,84821,84824],{},[49,84819,84820],{},"封装性",[49,84822,84823],{},"继承性",[49,84825,84826],{},"多态性",[63,84828,84830],{"id":84829},"_4113-两者比较","4.11.3 两者比较",[38,84832,84833],{},[1440,84834],{"alt":10,"src":84835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[33,84837,84839],{"id":84838},"_412-构造函数回顾","4.12 构造函数回顾",[38,84841,84842],{},[1440,84843],{"alt":10,"src":84844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[38,84846,84847],{},[1440,84848],{"alt":10,"src":84849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[38,84851,84852],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[38,84854,84855],{},[1440,84856],{"alt":10,"src":84857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[33,84859,84861],{"id":84860},"_413-原型","4.13 原型",[63,84863,84865],{"id":84864},"_4131-原型对象的认识","4.13.1 原型对象的认识",[38,84867,84868],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[38,84870,84871],{},[1440,84872],{"alt":10,"src":84873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[38,84875,84876],{},[1440,84877],{"alt":10,"src":84878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[38,84880,84881],{},"原型是构造函数的属性，它也是一个对象",[38,84883,84884],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[38,84886,84887],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[83,84889,84891],{"className":53042,"code":84890,"language":53044,"meta":10,"style":10},"\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",[88,84892,84893,84901,84906,84914,84919,84924,84929,84934,84939,84943,84947,84951,84956,84961,84965,84970,84975,84980,84985,84990,84994,85002],{"__ignoreMap":10},[91,84894,84895,84897,84899],{"class":93,"line":94},[91,84896,1012],{"class":101},[91,84898,51775],{"class":51275},[91,84900,51282],{"class":101},[91,84902,84903],{"class":93,"line":11},[91,84904,84905],{"class":160},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[91,84907,84908,84910,84912],{"class":93,"line":1157},[91,84909,52119],{"class":101},[91,84911,51788],{"class":51275},[91,84913,51282],{"class":101},[91,84915,84916],{"class":93,"line":1172},[91,84917,84918],{"class":101},"    function Star(uname, age) {\n",[91,84920,84921],{"class":93,"line":1178},[91,84922,84923],{"class":101},"      this.uname = uname,\n",[91,84925,84926],{"class":93,"line":1192},[91,84927,84928],{"class":101},"        this.age = age\n",[91,84930,84931],{"class":93,"line":1198},[91,84932,84933],{"class":101},"      \u002F\u002F this.sing = function () {\n",[91,84935,84936],{"class":93,"line":1289},[91,84937,84938],{"class":101},"      \u002F\u002F   console.log('唱歌')\n",[91,84940,84941],{"class":93,"line":1295},[91,84942,2378],{"emptyLinePlaceholder":17},[91,84944,84945],{"class":93,"line":1307},[91,84946,60012],{"class":101},[91,84948,84949],{"class":93,"line":1590},[91,84950,2165],{"class":101},[91,84952,84953],{"class":93,"line":1595},[91,84954,84955],{"class":101},"    Star.prototype.sing = function () {\n",[91,84957,84958],{"class":93,"line":1601},[91,84959,84960],{"class":101},"      console.log('唱歌')\n",[91,84962,84963],{"class":93,"line":1606},[91,84964,2165],{"class":101},[91,84966,84967],{"class":93,"line":1620},[91,84968,84969],{"class":101},"    \u002F\u002F console.dir(Star.prototype)\n",[91,84971,84972],{"class":93,"line":1625},[91,84973,84974],{"class":101},"    const pink = new Star('pink', 18)\n",[91,84976,84977],{"class":93,"line":1631},[91,84978,84979],{"class":101},"    const red = new Star('red', 20)\n",[91,84981,84982],{"class":93,"line":1652},[91,84983,84984],{"class":101},"    pink.sing()\n",[91,84986,84987],{"class":93,"line":1657},[91,84988,84989],{"class":101},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[91,84991,84992],{"class":93,"line":1671},[91,84993,2378],{"emptyLinePlaceholder":17},[91,84995,84996,84998,85000],{"class":93,"line":1676},[91,84997,52392],{"class":101},[91,84999,51788],{"class":51275},[91,85001,51282],{"class":101},[91,85003,85004,85006,85008],{"class":93,"line":1705},[91,85005,51760],{"class":101},[91,85007,51775],{"class":51275},[91,85009,51282],{"class":101},[38,85011,85012],{},[1440,85013],{"alt":10,"src":85014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[83,85016,85018],{"className":53042,"code":85017,"language":53044,"meta":10,"style":10},"\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",[88,85019,85020,85028,85036,85041,85046,85051,85056,85060,85065,85070,85075,85079,85084,85088,85092,85097,85101,85109],{"__ignoreMap":10},[91,85021,85022,85024,85026],{"class":93,"line":94},[91,85023,1012],{"class":101},[91,85025,51775],{"class":51275},[91,85027,51282],{"class":101},[91,85029,85030,85032,85034],{"class":93,"line":11},[91,85031,52119],{"class":101},[91,85033,51788],{"class":51275},[91,85035,51282],{"class":101},[91,85037,85038],{"class":93,"line":1157},[91,85039,85040],{"class":101},"    let that\n",[91,85042,85043],{"class":93,"line":1172},[91,85044,85045],{"class":101},"    function Star(uname) {\n",[91,85047,85048],{"class":93,"line":1178},[91,85049,85050],{"class":101},"      this.uname = uname\n",[91,85052,85053],{"class":93,"line":1192},[91,85054,85055],{"class":101},"      that = this\n",[91,85057,85058],{"class":93,"line":1198},[91,85059,2165],{"class":101},[91,85061,85062],{"class":93,"line":1289},[91,85063,85064],{"class":101},"    \u002F\u002F 实例对象是 ldh\n",[91,85066,85067],{"class":93,"line":1295},[91,85068,85069],{"class":101},"    const ldh = new Star('刘德华')\n",[91,85071,85072],{"class":93,"line":1307},[91,85073,85074],{"class":101},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[91,85076,85077],{"class":93,"line":1590},[91,85078,2378],{"emptyLinePlaceholder":17},[91,85080,85081],{"class":93,"line":1595},[91,85082,85083],{"class":101},"    Star.sing = function () {\n",[91,85085,85086],{"class":93,"line":1601},[91,85087,84960],{"class":101},[91,85089,85090],{"class":93,"line":1606},[91,85091,2165],{"class":101},[91,85093,85094],{"class":93,"line":1620},[91,85095,85096],{"class":101},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[91,85098,85099],{"class":93,"line":1625},[91,85100,2378],{"emptyLinePlaceholder":17},[91,85102,85103,85105,85107],{"class":93,"line":1631},[91,85104,52392],{"class":101},[91,85106,51788],{"class":51275},[91,85108,51282],{"class":101},[91,85110,85111,85113,85115],{"class":93,"line":1652},[91,85112,51760],{"class":101},[91,85114,51775],{"class":51275},[91,85116,51282],{"class":101},[38,85118,85119],{},"构造函数的this指向的是实例对象；",[38,85121,85122],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[63,85124,85126],{"id":85125},"_4132-数组扩展方法","4.13.2 数组扩展方法",[38,85128,85129],{},[1440,85130],{"alt":10,"src":85131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[83,85133,85135],{"className":53042,"code":85134,"language":53044,"meta":10,"style":10},"\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",[88,85136,85137,85145,85153,85158,85163,85168,85173,85178,85183,85188,85193,85198,85203,85207,85212,85217,85222,85227,85231,85236,85241,85246,85251,85255,85260,85265,85270,85275,85279,85284,85288,85296],{"__ignoreMap":10},[91,85138,85139,85141,85143],{"class":93,"line":94},[91,85140,1012],{"class":101},[91,85142,51775],{"class":51275},[91,85144,51282],{"class":101},[91,85146,85147,85149,85151],{"class":93,"line":11},[91,85148,52119],{"class":101},[91,85150,51788],{"class":51275},[91,85152,51282],{"class":101},[91,85154,85155],{"class":93,"line":1157},[91,85156,85157],{"class":101},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[91,85159,85160],{"class":93,"line":1172},[91,85161,85162],{"class":101},"    const arr = [1, 2, 3]\n",[91,85164,85165],{"class":93,"line":1178},[91,85166,85167],{"class":101},"    \u002F\u002F 自己定义数组的扩展方法\n",[91,85169,85170],{"class":93,"line":1192},[91,85171,85172],{"class":101},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[91,85174,85175],{"class":93,"line":1198},[91,85176,85177],{"class":101},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[91,85179,85180],{"class":93,"line":1289},[91,85181,85182],{"class":101},"    \u002F\u002F ①.最大值\n",[91,85184,85185],{"class":93,"line":1295},[91,85186,85187],{"class":101},"    Array.prototype.max = function () {\n",[91,85189,85190],{"class":93,"line":1307},[91,85191,85192],{"class":101},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[91,85194,85195],{"class":93,"line":1590},[91,85196,85197],{"class":101},"      return Math.max(...this)\n",[91,85199,85200],{"class":93,"line":1595},[91,85201,85202],{"class":101},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[91,85204,85205],{"class":93,"line":1601},[91,85206,2165],{"class":101},[91,85208,85209],{"class":93,"line":1606},[91,85210,85211],{"class":101},"    console.log(arr.max())\n",[91,85213,85214],{"class":93,"line":1620},[91,85215,85216],{"class":101},"    \u002F\u002F ②最小值\n",[91,85218,85219],{"class":93,"line":1625},[91,85220,85221],{"class":101},"    Array.prototype.min = function () {\n",[91,85223,85224],{"class":93,"line":1631},[91,85225,85226],{"class":101},"      return Math.min(...this)\n",[91,85228,85229],{"class":93,"line":1652},[91,85230,2165],{"class":101},[91,85232,85233],{"class":93,"line":1657},[91,85234,85235],{"class":101},"    console.log(arr.min())\n",[91,85237,85238],{"class":93,"line":1671},[91,85239,85240],{"class":101},"    \u002F\u002F③求和\n",[91,85242,85243],{"class":93,"line":1676},[91,85244,85245],{"class":101},"    Array.prototype.sum = function () {\n",[91,85247,85248],{"class":93,"line":1705},[91,85249,85250],{"class":101},"      return this.reduce((prev, current) => prev + current, 0)\n",[91,85252,85253],{"class":93,"line":1710},[91,85254,2165],{"class":101},[91,85256,85257],{"class":93,"line":1727},[91,85258,85259],{"class":101},"    console.log(arr.sum())\n",[91,85261,85262],{"class":93,"line":1732},[91,85263,85264],{"class":101},"    \u002F\u002F ③排序\n",[91,85266,85267],{"class":93,"line":1737},[91,85268,85269],{"class":101},"    Array.prototype.rever = function () {\n",[91,85271,85272],{"class":93,"line":1742},[91,85273,85274],{"class":101},"      return this.reverse()\n",[91,85276,85277],{"class":93,"line":1756},[91,85278,2165],{"class":101},[91,85280,85281],{"class":93,"line":1761},[91,85282,85283],{"class":101},"    console.log(arr.rever())\n",[91,85285,85286],{"class":93,"line":2555},[91,85287,2378],{"emptyLinePlaceholder":17},[91,85289,85290,85292,85294],{"class":93,"line":2569},[91,85291,52392],{"class":101},[91,85293,51788],{"class":51275},[91,85295,51282],{"class":101},[91,85297,85298,85300,85302],{"class":93,"line":2577},[91,85299,51760],{"class":101},[91,85301,51775],{"class":51275},[91,85303,51282],{"class":101},[38,85305,85306],{},[1440,85307],{"alt":10,"src":85308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[63,85310,85312],{"id":85311},"_4133-constructor-属性","4.13.3 constructor 属性",[38,85314,85315],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[38,85317,85318],{},[1440,85319],{"alt":10,"src":85320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[83,85322,85324],{"className":53042,"code":85323,"language":53044,"meta":10,"style":10},"\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",[88,85325,85326,85334,85342,85347,85352,85356,85361,85366,85371,85379],{"__ignoreMap":10},[91,85327,85328,85330,85332],{"class":93,"line":94},[91,85329,1012],{"class":101},[91,85331,51775],{"class":51275},[91,85333,51282],{"class":101},[91,85335,85336,85338,85340],{"class":93,"line":11},[91,85337,52119],{"class":101},[91,85339,51788],{"class":51275},[91,85341,51282],{"class":101},[91,85343,85344],{"class":93,"line":1157},[91,85345,85346],{"class":101},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[91,85348,85349],{"class":93,"line":1172},[91,85350,85351],{"class":101},"    function Star() {\n",[91,85353,85354],{"class":93,"line":1178},[91,85355,2165],{"class":101},[91,85357,85358],{"class":93,"line":1192},[91,85359,85360],{"class":101},"    const ldh = new Star()\n",[91,85362,85363],{"class":93,"line":1198},[91,85364,85365],{"class":101},"    console.log(Star.prototype)\n",[91,85367,85368],{"class":93,"line":1289},[91,85369,85370],{"class":101},"    console.log(Star.prototype.constructor === Star)\n",[91,85372,85373,85375,85377],{"class":93,"line":1295},[91,85374,52392],{"class":101},[91,85376,51788],{"class":51275},[91,85378,51282],{"class":101},[91,85380,85381,85383,85385],{"class":93,"line":1307},[91,85382,51760],{"class":101},[91,85384,51775],{"class":51275},[91,85386,51282],{"class":101},[38,85388,85389],{},[1440,85390],{"alt":10,"src":85391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[38,85393,85394],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[83,85396,85398],{"className":53042,"code":85397,"language":53044,"meta":10,"style":10},"  \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",[88,85399,85400,85408,85412,85416,85420,85425,85430,85435,85439,85444,85449,85454,85459,85464,85469,85473,85477,85482,85487,85492,85496,85501,85506,85510,85514,85518],{"__ignoreMap":10},[91,85401,85402,85404,85406],{"class":93,"line":94},[91,85403,52119],{"class":101},[91,85405,51788],{"class":51275},[91,85407,51282],{"class":101},[91,85409,85410],{"class":93,"line":11},[91,85411,85346],{"class":101},[91,85413,85414],{"class":93,"line":1157},[91,85415,85351],{"class":101},[91,85417,85418],{"class":93,"line":1172},[91,85419,2165],{"class":101},[91,85421,85422],{"class":93,"line":1178},[91,85423,85424],{"class":101},"    \u002F\u002F const ldh = new Star()\n",[91,85426,85427],{"class":93,"line":1192},[91,85428,85429],{"class":101},"    \u002F\u002F console.log(Star.prototype)\n",[91,85431,85432],{"class":93,"line":1198},[91,85433,85434],{"class":101},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[91,85436,85437],{"class":93,"line":1289},[91,85438,2378],{"emptyLinePlaceholder":17},[91,85440,85441],{"class":93,"line":1295},[91,85442,85443],{"class":101},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[91,85445,85446],{"class":93,"line":1307},[91,85447,85448],{"class":101},"    \u002F\u002F Star.prototype.sing = function () {\n",[91,85450,85451],{"class":93,"line":1590},[91,85452,85453],{"class":101},"    \u002F\u002F   console.log('唱歌')\n",[91,85455,85456],{"class":93,"line":1595},[91,85457,85458],{"class":101},"    \u002F\u002F }\n",[91,85460,85461],{"class":93,"line":1601},[91,85462,85463],{"class":101},"    \u002F\u002F Star.prototype.dance = function () {\n",[91,85465,85466],{"class":93,"line":1606},[91,85467,85468],{"class":101},"    \u002F\u002F   console.log('跳舞')\n",[91,85470,85471],{"class":93,"line":1620},[91,85472,85458],{"class":101},[91,85474,85475],{"class":93,"line":1625},[91,85476,85365],{"class":101},[91,85478,85479],{"class":93,"line":1631},[91,85480,85481],{"class":101},"    Star.prototype = {\n",[91,85483,85484],{"class":93,"line":1652},[91,85485,85486],{"class":101},"      sing: function () {\n",[91,85488,85489],{"class":93,"line":1657},[91,85490,85491],{"class":101},"        console.log('唱歌')\n",[91,85493,85494],{"class":93,"line":1671},[91,85495,77867],{"class":101},[91,85497,85498],{"class":93,"line":1676},[91,85499,85500],{"class":101},"      dance: function () {\n",[91,85502,85503],{"class":93,"line":1705},[91,85504,85505],{"class":101},"        console.log('跳舞')\n",[91,85507,85508],{"class":93,"line":1710},[91,85509,52373],{"class":101},[91,85511,85512],{"class":93,"line":1727},[91,85513,2165],{"class":101},[91,85515,85516],{"class":93,"line":1732},[91,85517,85365],{"class":101},[91,85519,85520,85522,85524],{"class":93,"line":1737},[91,85521,52392],{"class":101},[91,85523,51788],{"class":51275},[91,85525,51282],{"class":101},[38,85527,85528],{},"进行输出结果后会发现：",[38,85530,85531],{},[1440,85532],{"alt":10,"src":85533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[38,85535,85536],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[38,85538,85539],{},"所以，要重新指回创造这个原型对象的构造函数",[83,85541,85543],{"className":71188,"code":85542,"language":71190,"meta":10,"style":10},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[88,85544,85545,85559,85564,85569,85580,85593,85598,85609,85623,85627],{"__ignoreMap":10},[91,85546,85547,85550,85552,85555,85557],{"class":93,"line":94},[91,85548,85549],{"class":150},"Star",[91,85551,660],{"class":101},[91,85553,85554],{"class":150},"prototype",[91,85556,13543],{"class":97},[91,85558,15551],{"class":101},[91,85560,85561],{"class":93,"line":11},[91,85562,85563],{"class":160},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[91,85565,85566],{"class":93,"line":1157},[91,85567,85568],{"class":101},"  constructor: Star,\n",[91,85570,85571,85574,85576,85578],{"class":93,"line":1172},[91,85572,85573],{"class":1941},"  sing",[91,85575,51412],{"class":101},[91,85577,54424],{"class":97},[91,85579,54427],{"class":101},[91,85581,85582,85584,85586,85588,85591],{"class":93,"line":1178},[91,85583,73728],{"class":101},[91,85585,58222],{"class":1941},[91,85587,102],{"class":101},[91,85589,85590],{"class":206},"'唱歌'",[91,85592,108],{"class":101},[91,85594,85595],{"class":93,"line":1192},[91,85596,85597],{"class":101},"   },\n",[91,85599,85600,85603,85605,85607],{"class":93,"line":1198},[91,85601,85602],{"class":1941},"   dance",[91,85604,51412],{"class":101},[91,85606,54424],{"class":97},[91,85608,54427],{"class":101},[91,85610,85611,85614,85616,85618,85621],{"class":93,"line":1289},[91,85612,85613],{"class":101},"     console.",[91,85615,58222],{"class":1941},[91,85617,102],{"class":101},[91,85619,85620],{"class":206},"'跳舞'",[91,85622,108],{"class":101},[91,85624,85625],{"class":93,"line":1295},[91,85626,4287],{"class":101},[91,85628,85629],{"class":93,"line":1307},[91,85630,1543],{"class":101},[38,85632,85633],{},[1440,85634],{"alt":10,"src":85635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[38,85637,85638],{},"总结1：",[38,85640,85641],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[38,85643,85644],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[38,85646,85647],{},"constructor指的是他的来源",[38,85649,85650],{},[1440,85651],{"alt":10,"src":85652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[38,85654,85655],{},[1440,85656],{"alt":10,"src":85657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[38,85659,85660],{},"总结2：",[38,85662,85663],{},[1440,85664],{"alt":10,"src":85665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[38,85667,85668],{},[1440,85669],{"alt":10,"src":85670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[38,85672,85673],{},[1440,85674],{"alt":10,"src":85675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[63,85677,85679],{"id":85678},"_4134-对象原型","4.13.4 对象原型",[38,85681,85682],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[38,85684,85685],{},"对象原型就是__proto__这个属性",[38,85687,85688],{},[1440,85689],{"alt":10,"src":85690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[38,85692,85693],{},[1440,85694],{"alt":10,"src":85695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[38,85697,85698],{},[1440,85699],{"alt":10,"src":85700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[38,85702,85703],{},[1440,85704],{"alt":10,"src":85705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[83,85707,85709],{"className":53042,"code":85708,"language":53044,"meta":10,"style":10},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[88,85710,85711,85719,85727,85731,85735,85739,85744,85752],{"__ignoreMap":10},[91,85712,85713,85715,85717],{"class":93,"line":94},[91,85714,1012],{"class":101},[91,85716,51775],{"class":51275},[91,85718,51282],{"class":101},[91,85720,85721,85723,85725],{"class":93,"line":11},[91,85722,52119],{"class":101},[91,85724,51788],{"class":51275},[91,85726,51282],{"class":101},[91,85728,85729],{"class":93,"line":1157},[91,85730,85351],{"class":101},[91,85732,85733],{"class":93,"line":1172},[91,85734,2165],{"class":101},[91,85736,85737],{"class":93,"line":1178},[91,85738,85360],{"class":101},[91,85740,85741],{"class":93,"line":1192},[91,85742,85743],{"class":101},"    console.log(ldh)\n",[91,85745,85746,85748,85750],{"class":93,"line":1198},[91,85747,52392],{"class":101},[91,85749,51788],{"class":51275},[91,85751,51282],{"class":101},[91,85753,85754,85756,85758],{"class":93,"line":1289},[91,85755,51760],{"class":101},[91,85757,51775],{"class":51275},[91,85759,51282],{"class":101},[38,85761,85762],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[38,85764,85765],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[38,85767,85768],{},[1440,85769],{"alt":10,"src":85770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[38,85772,85773],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[38,85775,85776],{},"对象原型指向原型对象",[38,85778,85779],{},[1440,85780],{"alt":10,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[38,85783,85784],{},[1440,85785],{"alt":10,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[38,85788,85789],{},[1440,85790],{"alt":10,"src":85791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[63,85793,85795],{"id":85794},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[38,85797,85798],{},[1440,85799],{"alt":10,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[46,85802,85803,85806,85809,85812],{},[49,85804,85805],{},"构造函数通过new的形式实例化得到实例对象",[49,85807,85808],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[49,85810,85811],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[49,85813,85814],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[38,85816,85817],{},[1440,85818],{"alt":10,"src":85819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[38,85821,85822],{},"题目梳理：",[38,85824,85825],{},[1440,85826],{"alt":10,"src":85827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[63,85829,85831],{"id":85830},"_4136-原型继承","4.13.6 原型继承",[38,85833,85834],{},[1440,85835],{"alt":10,"src":85836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[38,85838,85839],{},[1440,85840],{"alt":10,"src":85841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[38,85843,85844],{},[1440,85845],{"alt":10,"src":85846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[38,85848,85849],{},[1440,85850],{"alt":10,"src":85851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[38,85853,85854],{},[1440,85855],{"alt":10,"src":85856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[38,85858,85859],{},[1440,85860],{"alt":10,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[38,85863,85864],{},[1440,85865],{"alt":10,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[38,85868,85869],{},[1440,85870],{"alt":10,"src":85871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[38,85873,85874],{},"回顾：构造函数每次new得到对象都是不同的",[63,85876,85878],{"id":85877},"_4137-原型链","4.13.7 原型链",[38,85880,85881],{},[1440,85882],{"alt":10,"src":85883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[38,85885,85886],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[38,85888,85889],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[38,85891,85892],{},"大哥是Object",[38,85894,85895],{},[1440,85896],{"alt":10,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[38,85899,85900],{},[1440,85901],{"alt":10,"src":85902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[38,85904,85905],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[38,85907,85908],{},"万物皆对象",[63,85910,85912],{"id":85911},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[38,85914,85915],{},"模态框",[38,85917,85918],{},"以后遇见这个效果直接使用这个就行",[38,85920,85921],{},[1440,85922],{"alt":10,"src":85923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[38,85925,85926],{},[1440,85927],{"alt":10,"src":85928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[38,85930,85931],{},[1440,85932],{"alt":10,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[38,85935,85936],{},[1440,85937],{"alt":10,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[38,85940,85941],{},"补充知识点：",[46,85943,85944],{},[49,85945,85946],{},"append()",[38,85948,85949],{},[1440,85950],{"alt":10,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[83,85953,85955],{"className":50608,"code":85954,"language":50610,"meta":10,"style":10},"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",[88,85956,85957,85962,85967,85972,85976,85980,85984,85989,85994,85999,86003],{"__ignoreMap":10},[91,85958,85959],{"class":93,"line":94},[91,85960,85961],{"class":101},"append(param1)\n",[91,85963,85964],{"class":93,"line":11},[91,85965,85966],{"class":101},"append(param1, param2)\n",[91,85968,85969],{"class":93,"line":1157},[91,85970,85971],{"class":101},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[91,85973,85974],{"class":93,"line":1172},[91,85975,2378],{"emptyLinePlaceholder":17},[91,85977,85978],{"class":93,"line":1178},[91,85979,2378],{"emptyLinePlaceholder":17},[91,85981,85982],{"class":93,"line":1192},[91,85983,2378],{"emptyLinePlaceholder":17},[91,85985,85986],{"class":93,"line":1198},[91,85987,85988],{"class":101},"let div = document.createElement(\"div\");\n",[91,85990,85991],{"class":93,"line":1289},[91,85992,85993],{"class":101},"let p = document.createElement(\"p\");\n",[91,85995,85996],{"class":93,"line":1295},[91,85997,85998],{"class":101},"div.append(p);\n",[91,86000,86001],{"class":93,"line":1307},[91,86002,2378],{"emptyLinePlaceholder":17},[91,86004,86005,86008,86010],{"class":93,"line":1590},[91,86006,86007],{"class":101},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[91,86009,38],{"class":51275},[91,86011,86012],{"class":101},"> ]\n",[46,86014,86015],{"start":11},[49,86016,86017],{},"remove()",[38,86019,86020],{},"自己删自己",[38,86022,86023],{},[1440,86024],{"alt":10,"src":86025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[83,86027,86029],{"className":50608,"code":86028,"language":50610,"meta":10,"style":10},"\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",[88,86030,86031,86041,86055,86059,86067,86081,86101,86113,86121,86128,86140,86153,86188,86200,86211,86223,86235,86247,86274,86284,86288,86292,86301,86313,86327,86337,86349,86353,86357,86367,86378,86388,86398,86411,86424,86434,86438,86442,86451,86461,86473,86477,86481,86490,86500,86510,86522,86526,86530,86540,86556,86567,86577,86587,86599,86611,86623,86627,86631,86644,86655,86659,86667,86675,86679,86687,86707,86727,86735,86740,86766,86771,86776,86795,86800,86812,86817,86828,86838,86848,86853,86858,86862,86867,86872,86877,86897,86902,86922,86927,86941,86946,86951,86956,86972,86976,86981,87010,87015,87020,87025,87036,87040,87044,87048,87053,87078,87083,87108,87113,87122,87126,87131,87156,87160,87185,87189,87198,87202,87207,87225,87235,87239,87247,87255,87259],{"__ignoreMap":10},[91,86032,86033,86035,86037,86039],{"class":93,"line":94},[91,86034,51272],{"class":101},[91,86036,51276],{"class":51275},[91,86038,51279],{"class":1941},[91,86040,51282],{"class":101},[91,86042,86043,86045,86047,86049,86051,86053],{"class":93,"line":11},[91,86044,1012],{"class":101},[91,86046,50610],{"class":51275},[91,86048,51291],{"class":1941},[91,86050,147],{"class":101},[91,86052,51296],{"class":206},[91,86054,51282],{"class":101},[91,86056,86057],{"class":93,"line":1157},[91,86058,2378],{"emptyLinePlaceholder":17},[91,86060,86061,86063,86065],{"class":93,"line":1172},[91,86062,1012],{"class":101},[91,86064,51309],{"class":51275},[91,86066,51282],{"class":101},[91,86068,86069,86071,86073,86075,86077,86079],{"class":93,"line":1178},[91,86070,52119],{"class":101},[91,86072,51319],{"class":51275},[91,86074,51322],{"class":1941},[91,86076,147],{"class":101},[91,86078,51327],{"class":206},[91,86080,51282],{"class":101},[91,86082,86083,86085,86087,86089,86091,86093,86095,86097,86099],{"class":93,"line":1192},[91,86084,52119],{"class":101},[91,86086,51319],{"class":51275},[91,86088,14899],{"class":1941},[91,86090,147],{"class":101},[91,86092,51366],{"class":206},[91,86094,51346],{"class":1941},[91,86096,147],{"class":101},[91,86098,51373],{"class":206},[91,86100,51282],{"class":101},[91,86102,86103,86105,86107,86109,86111],{"class":93,"line":1198},[91,86104,52119],{"class":101},[91,86106,51382],{"class":51275},[91,86108,51385],{"class":101},[91,86110,51382],{"class":51275},[91,86112,51282],{"class":101},[91,86114,86115,86117,86119],{"class":93,"line":1289},[91,86116,52119],{"class":101},[91,86118,5105],{"class":51275},[91,86120,51282],{"class":101},[91,86122,86123,86126],{"class":93,"line":1295},[91,86124,86125],{"class":1941},"    .modal",[91,86127,15551],{"class":101},[91,86129,86130,86132,86134,86136,86138],{"class":93,"line":1307},[91,86131,54746],{"class":150},[91,86133,51412],{"class":101},[91,86135,3951],{"class":150},[91,86137,51467],{"class":97},[91,86139,1268],{"class":101},[91,86141,86142,86145,86147,86149,86151],{"class":93,"line":1590},[91,86143,86144],{"class":150},"      min-height",[91,86146,51412],{"class":101},[91,86148,413],{"class":150},[91,86150,51467],{"class":97},[91,86152,1268],{"class":101},[91,86154,86155,86157,86159,86161,86163,86165,86167,86169,86171,86173,86175,86177,86179,86181,86183,86186],{"class":93,"line":1595},[91,86156,78725],{"class":150},[91,86158,51412],{"class":101},[91,86160,293],{"class":150},[91,86162,4071],{"class":150},[91,86164,2016],{"class":150},[91,86166,51467],{"class":97},[91,86168,78742],{"class":150},[91,86170,102],{"class":101},[91,86172,293],{"class":150},[91,86174,12414],{"class":101},[91,86176,293],{"class":150},[91,86178,12414],{"class":101},[91,86180,293],{"class":150},[91,86182,12414],{"class":101},[91,86184,86185],{"class":150},"0.1",[91,86187,2697],{"class":101},[91,86189,86190,86192,86194,86196,86198],{"class":93,"line":1601},[91,86191,55109],{"class":150},[91,86193,51412],{"class":101},[91,86195,395],{"class":150},[91,86197,51467],{"class":97},[91,86199,1268],{"class":101},[91,86201,86202,86204,86206,86209],{"class":93,"line":1606},[91,86203,54734],{"class":150},[91,86205,51412],{"class":101},[91,86207,86208],{"class":150},"fixed",[91,86210,1268],{"class":101},[91,86212,86213,86216,86218,86221],{"class":93,"line":1620},[91,86214,86215],{"class":150},"      z-index",[91,86217,51412],{"class":101},[91,86219,86220],{"class":150},"999",[91,86222,1268],{"class":101},[91,86224,86225,86227,86229,86231,86233],{"class":93,"line":1625},[91,86226,54813],{"class":150},[91,86228,51412],{"class":101},[91,86230,758],{"class":150},[91,86232,430],{"class":97},[91,86234,1268],{"class":101},[91,86236,86237,86239,86241,86243,86245],{"class":93,"line":1631},[91,86238,54922],{"class":150},[91,86240,51412],{"class":101},[91,86242,758],{"class":150},[91,86244,430],{"class":97},[91,86246,1268],{"class":101},[91,86248,86249,86251,86253,86255,86257,86260,86262,86264,86266,86268,86270,86272],{"class":93,"line":1652},[91,86250,78766],{"class":150},[91,86252,51412],{"class":101},[91,86254,78771],{"class":150},[91,86256,102],{"class":101},[91,86258,86259],{"class":150},"-50",[91,86261,430],{"class":97},[91,86263,12414],{"class":101},[91,86265,86259],{"class":150},[91,86267,430],{"class":97},[91,86269,12414],{"class":101},[91,86271,293],{"class":150},[91,86273,2697],{"class":101},[91,86275,86276,86278,86280,86282],{"class":93,"line":1657},[91,86277,54859],{"class":150},[91,86279,51412],{"class":101},[91,86281,60817],{"class":150},[91,86283,1268],{"class":101},[91,86285,86286],{"class":93,"line":1671},[91,86287,2165],{"class":101},[91,86289,86290],{"class":93,"line":1676},[91,86291,2378],{"emptyLinePlaceholder":17},[91,86293,86294,86296,86299],{"class":93,"line":1705},[91,86295,86125],{"class":1941},[91,86297,86298],{"class":1941}," .header",[91,86300,15551],{"class":101},[91,86302,86303,86305,86307,86309,86311],{"class":93,"line":1710},[91,86304,57334],{"class":150},[91,86306,51412],{"class":101},[91,86308,503],{"class":150},[91,86310,51467],{"class":97},[91,86312,1268],{"class":101},[91,86314,86315,86317,86319,86321,86323,86325],{"class":93,"line":1727},[91,86316,54670],{"class":150},[91,86318,51412],{"class":101},[91,86320,293],{"class":150},[91,86322,2016],{"class":150},[91,86324,51467],{"class":97},[91,86326,1268],{"class":101},[91,86328,86329,86331,86333,86335],{"class":93,"line":1732},[91,86330,54734],{"class":150},[91,86332,51412],{"class":101},[91,86334,54739],{"class":150},[91,86336,1268],{"class":101},[91,86338,86339,86341,86343,86345,86347],{"class":93,"line":1737},[91,86340,54897],{"class":150},[91,86342,51412],{"class":101},[91,86344,802],{"class":150},[91,86346,51467],{"class":97},[91,86348,1268],{"class":101},[91,86350,86351],{"class":93,"line":1742},[91,86352,2165],{"class":101},[91,86354,86355],{"class":93,"line":1756},[91,86356,2378],{"emptyLinePlaceholder":17},[91,86358,86359,86361,86363,86365],{"class":93,"line":1761},[91,86360,86125],{"class":1941},[91,86362,86298],{"class":1941},[91,86364,3010],{"class":51275},[91,86366,15551],{"class":101},[91,86368,86369,86372,86374,86376],{"class":93,"line":2555},[91,86370,86371],{"class":150},"      font-style",[91,86373,51412],{"class":101},[91,86375,63816],{"class":150},[91,86377,1268],{"class":101},[91,86379,86380,86382,86384,86386],{"class":93,"line":2569},[91,86381,57391],{"class":150},[91,86383,51412],{"class":101},[91,86385,62045],{"class":150},[91,86387,1268],{"class":101},[91,86389,86390,86392,86394,86396],{"class":93,"line":2577},[91,86391,54734],{"class":150},[91,86393,51412],{"class":101},[91,86395,54806],{"class":150},[91,86397,1268],{"class":101},[91,86399,86400,86403,86405,86407,86409],{"class":93,"line":2582},[91,86401,86402],{"class":150},"      right",[91,86404,51412],{"class":101},[91,86406,677],{"class":150},[91,86408,51467],{"class":97},[91,86410,1268],{"class":101},[91,86412,86413,86415,86417,86420,86422],{"class":93,"line":2588},[91,86414,54922],{"class":150},[91,86416,51412],{"class":101},[91,86418,86419],{"class":150},"-2",[91,86421,51467],{"class":97},[91,86423,1268],{"class":101},[91,86425,86426,86428,86430,86432],{"class":93,"line":2594},[91,86427,62000],{"class":150},[91,86429,51412],{"class":101},[91,86431,62005],{"class":150},[91,86433,1268],{"class":101},[91,86435,86436],{"class":93,"line":2599},[91,86437,2165],{"class":101},[91,86439,86440],{"class":93,"line":7927},[91,86441,2378],{"emptyLinePlaceholder":17},[91,86443,86444,86446,86449],{"class":93,"line":7951},[91,86445,86125],{"class":1941},[91,86447,86448],{"class":1941}," .body",[91,86450,15551],{"class":101},[91,86452,86453,86455,86457,86459],{"class":93,"line":7956},[91,86454,57261],{"class":150},[91,86456,51412],{"class":101},[91,86458,51567],{"class":150},[91,86460,1268],{"class":101},[91,86462,86463,86465,86467,86469,86471],{"class":93,"line":7962},[91,86464,54670],{"class":150},[91,86466,51412],{"class":101},[91,86468,548],{"class":150},[91,86470,51467],{"class":97},[91,86472,1268],{"class":101},[91,86474,86475],{"class":93,"line":7989},[91,86476,2165],{"class":101},[91,86478,86479],{"class":93,"line":7994},[91,86480,2378],{"emptyLinePlaceholder":17},[91,86482,86483,86485,86488],{"class":93,"line":8000},[91,86484,86125],{"class":1941},[91,86486,86487],{"class":1941}," .footer",[91,86489,15551],{"class":101},[91,86491,86492,86494,86496,86498],{"class":93,"line":8012},[91,86493,54984],{"class":150},[91,86495,51412],{"class":101},[91,86497,51452],{"class":150},[91,86499,1268],{"class":101},[91,86501,86502,86504,86506,86508],{"class":93,"line":8024},[91,86503,54995],{"class":150},[91,86505,51412],{"class":101},[91,86507,51555],{"class":150},[91,86509,1268],{"class":101},[91,86511,86512,86514,86516,86518,86520],{"class":93,"line":8036},[91,86513,54670],{"class":150},[91,86515,51412],{"class":101},[91,86517,548],{"class":150},[91,86519,51467],{"class":97},[91,86521,1268],{"class":101},[91,86523,86524],{"class":93,"line":9695},[91,86525,2165],{"class":101},[91,86527,86528],{"class":93,"line":9720},[91,86529,2378],{"emptyLinePlaceholder":17},[91,86531,86532,86534,86536,86538],{"class":93,"line":9743},[91,86533,86125],{"class":1941},[91,86535,86487],{"class":1941},[91,86537,1376],{"class":51275},[91,86539,15551],{"class":101},[91,86541,86542,86544,86546,86548,86550,86552,86554],{"class":93,"line":9767},[91,86543,54670],{"class":150},[91,86545,51412],{"class":101},[91,86547,173],{"class":150},[91,86549,51467],{"class":97},[91,86551,2061],{"class":150},[91,86553,51467],{"class":97},[91,86555,1268],{"class":101},[91,86557,86558,86560,86562,86565],{"class":93,"line":9772},[91,86559,61696],{"class":150},[91,86561,51412],{"class":101},[91,86563,86564],{"class":150},"#ccc",[91,86566,1268],{"class":101},[91,86568,86569,86571,86573,86575],{"class":93,"line":9777},[91,86570,63945],{"class":150},[91,86572,51412],{"class":101},[91,86574,54712],{"class":150},[91,86576,1268],{"class":101},[91,86578,86579,86581,86583,86585],{"class":93,"line":9782},[91,86580,57391],{"class":150},[91,86582,51412],{"class":101},[91,86584,60817],{"class":150},[91,86586,1268],{"class":101},[91,86588,86589,86591,86593,86595,86597],{"class":93,"line":9791},[91,86590,55109],{"class":150},[91,86592,51412],{"class":101},[91,86594,179],{"class":150},[91,86596,51467],{"class":97},[91,86598,1268],{"class":101},[91,86600,86601,86603,86605,86607,86609],{"class":93,"line":9796},[91,86602,61725],{"class":150},[91,86604,51412],{"class":101},[91,86606,548],{"class":150},[91,86608,51467],{"class":97},[91,86610,1268],{"class":101},[91,86612,86613,86615,86617,86619,86621],{"class":93,"line":9802},[91,86614,54897],{"class":150},[91,86616,51412],{"class":101},[91,86618,651],{"class":150},[91,86620,51467],{"class":97},[91,86622,1268],{"class":101},[91,86624,86625],{"class":93,"line":9823},[91,86626,2165],{"class":101},[91,86628,86629],{"class":93,"line":9829},[91,86630,2378],{"emptyLinePlaceholder":17},[91,86632,86633,86635,86637,86639,86642],{"class":93,"line":9843},[91,86634,86125],{"class":1941},[91,86636,86487],{"class":1941},[91,86638,1376],{"class":51275},[91,86640,86641],{"class":1941},".submit",[91,86643,15551],{"class":101},[91,86645,86646,86648,86650,86653],{"class":93,"line":9849},[91,86647,54859],{"class":150},[91,86649,51412],{"class":101},[91,86651,86652],{"class":150},"#369",[91,86654,1268],{"class":101},[91,86656,86657],{"class":93,"line":9876},[91,86658,2165],{"class":101},[91,86660,86661,86663,86665],{"class":93,"line":9885},[91,86662,52392],{"class":101},[91,86664,5105],{"class":51275},[91,86666,51282],{"class":101},[91,86668,86669,86671,86673],{"class":93,"line":9891},[91,86670,51760],{"class":101},[91,86672,51309],{"class":51275},[91,86674,51282],{"class":101},[91,86676,86677],{"class":93,"line":9899},[91,86678,2378],{"emptyLinePlaceholder":17},[91,86680,86681,86683,86685],{"class":93,"line":9904},[91,86682,1012],{"class":101},[91,86684,51775],{"class":51275},[91,86686,51282],{"class":101},[91,86688,86689,86691,86693,86695,86697,86700,86703,86705],{"class":93,"line":16583},[91,86690,52119],{"class":101},[91,86692,53862],{"class":51275},[91,86694,14938],{"class":1941},[91,86696,147],{"class":101},[91,86698,86699],{"class":206},"\"delete\"",[91,86701,86702],{"class":101},">删除\u003C\u002F",[91,86704,53862],{"class":51275},[91,86706,51282],{"class":101},[91,86708,86709,86711,86713,86715,86717,86720,86723,86725],{"class":93,"line":16589},[91,86710,52119],{"class":101},[91,86712,53862],{"class":51275},[91,86714,14938],{"class":1941},[91,86716,147],{"class":101},[91,86718,86719],{"class":206},"\"login\"",[91,86721,86722],{"class":101},">登录\u003C\u002F",[91,86724,53862],{"class":51275},[91,86726,51282],{"class":101},[91,86728,86729,86731,86733],{"class":93,"line":16612},[91,86730,52119],{"class":101},[91,86732,51788],{"class":51275},[91,86734,51282],{"class":101},[91,86736,86737],{"class":93,"line":16618},[91,86738,86739],{"class":160},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[91,86741,86742,86744,86747,86749,86751,86753,86755,86757,86760,86762,86764],{"class":93,"line":16641},[91,86743,70059],{"class":97},[91,86745,86746],{"class":1941}," Modal",[91,86748,102],{"class":101},[91,86750,51382],{"class":5195},[91,86752,13543],{"class":97},[91,86754,69905],{"class":206},[91,86756,12414],{"class":101},[91,86758,86759],{"class":5195},"message",[91,86761,13543],{"class":97},[91,86763,69905],{"class":206},[91,86765,12421],{"class":101},[91,86767,86768],{"class":93,"line":16655},[91,86769,86770],{"class":160},"      \u002F\u002F 创建Model 模态框盒子\n",[91,86772,86773],{"class":93,"line":16675},[91,86774,86775],{"class":160},"      \u002F\u002F 1.1 创建div标签\n",[91,86777,86778,86780,86783,86785,86787,86789,86791,86793],{"class":93,"line":16681},[91,86779,70026],{"class":150},[91,86781,86782],{"class":101},".modalBox ",[91,86784,147],{"class":97},[91,86786,54371],{"class":101},[91,86788,70126],{"class":1941},[91,86790,102],{"class":101},[91,86792,81906],{"class":206},[91,86794,108],{"class":101},[91,86796,86797],{"class":93,"line":16692},[91,86798,86799],{"class":160},"      \u002F\u002F 1.2 给div 添加类名为model\n",[91,86801,86802,86804,86807,86809],{"class":93,"line":16715},[91,86803,70026],{"class":150},[91,86805,86806],{"class":101},".modalBox.className ",[91,86808,147],{"class":97},[91,86810,86811],{"class":206}," 'modal'\n",[91,86813,86814],{"class":93,"line":16737},[91,86815,86816],{"class":160},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[91,86818,86819,86821,86824,86826],{"class":93,"line":16742},[91,86820,70026],{"class":150},[91,86822,86823],{"class":101},".modalBox.innerHTML ",[91,86825,147],{"class":97},[91,86827,70143],{"class":206},[91,86829,86830,86833,86835],{"class":93,"line":16748},[91,86831,86832],{"class":206},"        \u003Cdiv class=\"header\">${",[91,86834,51382],{"class":101},[91,86836,86837],{"class":206},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[91,86839,86840,86843,86845],{"class":93,"line":16762},[91,86841,86842],{"class":206},"        \u003Cdiv class=\"body\">${",[91,86844,86759],{"class":101},[91,86846,86847],{"class":206},"}\u003C\u002Fdiv>\n",[91,86849,86850],{"class":93,"line":16775},[91,86851,86852],{"class":206},"      `\n",[91,86854,86855],{"class":93,"line":16780},[91,86856,86857],{"class":160},"      \u002F\u002F console.log(this.modalBox)\n",[91,86859,86860],{"class":93,"line":16794},[91,86861,2165],{"class":101},[91,86863,86864],{"class":93,"line":16799},[91,86865,86866],{"class":160},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[91,86868,86869],{"class":93,"line":16805},[91,86870,86871],{"class":160},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[91,86873,86874],{"class":93,"line":16810},[91,86875,86876],{"class":160},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[91,86878,86879,86882,86884,86886,86888,86891,86893,86895],{"class":93,"line":16824},[91,86880,86881],{"class":150},"    Modal",[91,86883,660],{"class":101},[91,86885,85554],{"class":150},[91,86887,660],{"class":101},[91,86889,86890],{"class":1941},"open",[91,86892,13543],{"class":97},[91,86894,58893],{"class":97},[91,86896,54427],{"class":101},[91,86898,86899],{"class":93,"line":16829},[91,86900,86901],{"class":160},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[91,86903,86904,86906,86909,86911,86913,86915,86917,86920],{"class":93,"line":16834},[91,86905,58203],{"class":97},[91,86907,86908],{"class":150}," box",[91,86910,13543],{"class":97},[91,86912,54371],{"class":101},[91,86914,54374],{"class":1941},[91,86916,102],{"class":101},[91,86918,86919],{"class":206},"'.modal'",[91,86921,108],{"class":101},[91,86923,86924],{"class":93,"line":16848},[91,86925,86926],{"class":160},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[91,86928,86929,86932,86934,86937,86939],{"class":93,"line":16860},[91,86930,86931],{"class":101},"      box ",[91,86933,1693],{"class":97},[91,86935,86936],{"class":101}," box.",[91,86938,56981],{"class":1941},[91,86940,1954],{"class":101},[91,86942,86943],{"class":93,"line":16865},[91,86944,86945],{"class":160},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[91,86947,86948],{"class":93,"line":16878},[91,86949,86950],{"class":160},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[91,86952,86953],{"class":93,"line":16883},[91,86954,86955],{"class":160},"      \u002F\u002F append可以增加对象\n",[91,86957,86958,86961,86964,86966,86969],{"class":93,"line":16888},[91,86959,86960],{"class":101},"      document.body.",[91,86962,86963],{"class":1941},"append",[91,86965,102],{"class":101},[91,86967,86968],{"class":150},"this",[91,86970,86971],{"class":101},".modalBox)\n",[91,86973,86974],{"class":93,"line":16893},[91,86975,2378],{"emptyLinePlaceholder":17},[91,86977,86978],{"class":93,"line":16906},[91,86979,86980],{"class":160},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[91,86982,86983,86985,86988,86990,86992,86995,86997,86999,87001,87003,87006,87008],{"class":93,"line":16911},[91,86984,70026],{"class":150},[91,86986,86987],{"class":101},".modalBox.",[91,86989,54374],{"class":1941},[91,86991,102],{"class":101},[91,86993,86994],{"class":206},"'i'",[91,86996,30801],{"class":101},[91,86998,57788],{"class":1941},[91,87000,102],{"class":101},[91,87002,57793],{"class":206},[91,87004,87005],{"class":101},", () ",[91,87007,84697],{"class":97},[91,87009,15551],{"class":101},[91,87011,87012],{"class":93,"line":32608},[91,87013,87014],{"class":160},"        \u002F\u002F 这个地方需要用到箭头函数\n",[91,87016,87017],{"class":93,"line":32614},[91,87018,87019],{"class":160},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[91,87021,87022],{"class":93,"line":32620},[91,87023,87024],{"class":160},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[91,87026,87027,87029,87031,87034],{"class":93,"line":32626},[91,87028,64701],{"class":150},[91,87030,660],{"class":101},[91,87032,87033],{"class":1941},"close",[91,87035,1954],{"class":101},[91,87037,87038],{"class":93,"line":32632},[91,87039,64790],{"class":101},[91,87041,87042],{"class":93,"line":32643},[91,87043,2165],{"class":101},[91,87045,87046],{"class":93,"line":32649},[91,87047,2378],{"emptyLinePlaceholder":17},[91,87049,87050],{"class":93,"line":32669},[91,87051,87052],{"class":160},"    \u002F\u002F 测试一下 点击 删除按钮\n",[91,87054,87055,87057,87059,87061,87064,87066,87068,87070,87072,87074,87076],{"class":93,"line":32675},[91,87056,52382],{"class":101},[91,87058,54374],{"class":1941},[91,87060,102],{"class":101},[91,87062,87063],{"class":206},"'#delete'",[91,87065,30801],{"class":101},[91,87067,57788],{"class":1941},[91,87069,102],{"class":101},[91,87071,57793],{"class":206},[91,87073,87005],{"class":101},[91,87075,84697],{"class":97},[91,87077,15551],{"class":101},[91,87079,87080],{"class":93,"line":32686},[91,87081,87082],{"class":160},"      \u002F\u002F 先调用Model构造函数\n",[91,87084,87085,87087,87090,87092,87094,87096,87098,87101,87103,87106],{"class":93,"line":32692},[91,87086,58203],{"class":97},[91,87088,87089],{"class":150}," del",[91,87091,13543],{"class":97},[91,87093,11557],{"class":97},[91,87095,86746],{"class":1941},[91,87097,102],{"class":101},[91,87099,87100],{"class":206},"'温馨的提示'",[91,87102,12414],{"class":101},[91,87104,87105],{"class":206},"'您没有删除权限操作'",[91,87107,108],{"class":101},[91,87109,87110],{"class":93,"line":32698},[91,87111,87112],{"class":160},"      \u002F\u002F 实例对象调用open方法\n",[91,87114,87115,87118,87120],{"class":93,"line":32704},[91,87116,87117],{"class":101},"      del.",[91,87119,86890],{"class":1941},[91,87121,1954],{"class":101},[91,87123,87124],{"class":93,"line":32710},[91,87125,33436],{"class":101},[91,87127,87128],{"class":93,"line":32716},[91,87129,87130],{"class":160},"    \u002F\u002F 测试一下 点击 登录按钮\n",[91,87132,87133,87135,87137,87139,87142,87144,87146,87148,87150,87152,87154],{"class":93,"line":32722},[91,87134,52382],{"class":101},[91,87136,54374],{"class":1941},[91,87138,102],{"class":101},[91,87140,87141],{"class":206},"'#login'",[91,87143,30801],{"class":101},[91,87145,57788],{"class":1941},[91,87147,102],{"class":101},[91,87149,57793],{"class":206},[91,87151,87005],{"class":101},[91,87153,84697],{"class":97},[91,87155,15551],{"class":101},[91,87157,87158],{"class":93,"line":32728},[91,87159,87082],{"class":160},[91,87161,87162,87164,87167,87169,87171,87173,87175,87178,87180,87183],{"class":93,"line":32748},[91,87163,58203],{"class":97},[91,87165,87166],{"class":150}," log",[91,87168,13543],{"class":97},[91,87170,11557],{"class":97},[91,87172,86746],{"class":1941},[91,87174,102],{"class":101},[91,87176,87177],{"class":206},"'友情提示'",[91,87179,12414],{"class":101},[91,87181,87182],{"class":206},"'您还没有登录呢'",[91,87184,108],{"class":101},[91,87186,87187],{"class":93,"line":32754},[91,87188,87112],{"class":160},[91,87190,87191,87194,87196],{"class":93,"line":32770},[91,87192,87193],{"class":101},"      log.",[91,87195,86890],{"class":1941},[91,87197,1954],{"class":101},[91,87199,87200],{"class":93,"line":32776},[91,87201,33436],{"class":101},[91,87203,87204],{"class":93,"line":32790},[91,87205,87206],{"class":160},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[91,87208,87209,87211,87213,87215,87217,87219,87221,87223],{"class":93,"line":32796},[91,87210,86881],{"class":150},[91,87212,660],{"class":101},[91,87214,85554],{"class":150},[91,87216,660],{"class":101},[91,87218,87033],{"class":1941},[91,87220,13543],{"class":97},[91,87222,58893],{"class":97},[91,87224,54427],{"class":101},[91,87226,87227,87229,87231,87233],{"class":93,"line":32811},[91,87228,70026],{"class":150},[91,87230,86987],{"class":101},[91,87232,56981],{"class":1941},[91,87234,1954],{"class":101},[91,87236,87237],{"class":93,"line":32817},[91,87238,2165],{"class":101},[91,87240,87241,87243,87245],{"class":93,"line":32826},[91,87242,52392],{"class":101},[91,87244,51788],{"class":51275},[91,87246,51282],{"class":101},[91,87248,87249,87251,87253],{"class":93,"line":32832},[91,87250,51760],{"class":101},[91,87252,51775],{"class":51275},[91,87254,51282],{"class":101},[91,87256,87257],{"class":93,"line":32841},[91,87258,2378],{"emptyLinePlaceholder":17},[91,87260,87261,87263,87265],{"class":93,"line":32847},[91,87262,51760],{"class":101},[91,87264,50610],{"class":51275},[91,87266,51282],{"class":101},[38,87268,87269],{},[1440,87270],{"alt":10,"src":87271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[33,87273,87275],{"id":87274},"_414-深浅拷贝","4.14 深浅拷贝",[63,87277,87279],{"id":87278},"_4141-浅拷贝","4.14.1 浅拷贝",[38,87281,87282],{},[1440,87283],{"alt":10,"src":87284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[38,87286,87287],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[38,87289,87290],{},[1440,87291],{"alt":10,"src":87292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[38,87294,87295],{},[1440,87296],{"alt":10,"src":87297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[38,87299,87300],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[38,87302,87303],{},[1440,87304],{"alt":10,"src":87305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[38,87307,11311],{},[38,87309,87310],{},[1440,87311],{"alt":10,"src":87312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[63,87314,87316],{"id":87315},"_4142-深拷贝","4.14.2 深拷贝",[38,87318,87319],{},"深拷贝：拷贝的是对象，不是地址",[38,87321,87322],{},"常用的三种方法：",[46,87324,87325,87328,87331],{},[49,87326,87327],{},"通过递归实现深拷贝",[49,87329,87330],{},"lodash\u002FcloneDeep",[49,87332,87333],{},"通过JSON.stringify()实现",[21977,87335,87337],{"id":87336},"_41421-递归函数","4.14.2.1 递归函数",[38,87339,87340],{},[1440,87341],{"alt":10,"src":87342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[46,87344,87345],{},[49,87346,87347],{},"死递归占溢出：",[83,87349,87351],{"className":53042,"code":87350,"language":53044,"meta":10,"style":10},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[88,87352,87353,87361,87369,87373,87378,87382,87387,87395],{"__ignoreMap":10},[91,87354,87355,87357,87359],{"class":93,"line":94},[91,87356,1012],{"class":101},[91,87358,51775],{"class":51275},[91,87360,51282],{"class":101},[91,87362,87363,87365,87367],{"class":93,"line":11},[91,87364,52119],{"class":101},[91,87366,51788],{"class":51275},[91,87368,51282],{"class":101},[91,87370,87371],{"class":93,"line":1157},[91,87372,77118],{"class":101},[91,87374,87375],{"class":93,"line":1172},[91,87376,87377],{"class":101},"      fn()\n",[91,87379,87380],{"class":93,"line":1178},[91,87381,2165],{"class":101},[91,87383,87384],{"class":93,"line":1192},[91,87385,87386],{"class":101},"    fn()\n",[91,87388,87389,87391,87393],{"class":93,"line":1198},[91,87390,52392],{"class":101},[91,87392,51788],{"class":51275},[91,87394,51282],{"class":101},[91,87396,87397,87399,87401],{"class":93,"line":1289},[91,87398,51760],{"class":101},[91,87400,51775],{"class":51275},[91,87402,51282],{"class":101},[46,87404,87405],{"start":11},[49,87406,87407],{},"递归函数要加判断条件：",[38,87409,87410],{},[1440,87411],{"alt":10,"src":87412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[46,87414,87415],{"start":1157},[49,87416,87417],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[83,87419,87421],{"className":50608,"code":87420,"language":50610,"meta":10,"style":10},"\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",[88,87422,87423,87433,87447,87451,87459,87473,87493,87505,87513,87517,87525,87537,87545,87553,87578,87590,87594,87601,87609,87617,87621],{"__ignoreMap":10},[91,87424,87425,87427,87429,87431],{"class":93,"line":94},[91,87426,51272],{"class":101},[91,87428,51276],{"class":51275},[91,87430,51279],{"class":1941},[91,87432,51282],{"class":101},[91,87434,87435,87437,87439,87441,87443,87445],{"class":93,"line":11},[91,87436,1012],{"class":101},[91,87438,50610],{"class":51275},[91,87440,51291],{"class":1941},[91,87442,147],{"class":101},[91,87444,51296],{"class":206},[91,87446,51282],{"class":101},[91,87448,87449],{"class":93,"line":1157},[91,87450,2378],{"emptyLinePlaceholder":17},[91,87452,87453,87455,87457],{"class":93,"line":1172},[91,87454,1012],{"class":101},[91,87456,51309],{"class":51275},[91,87458,51282],{"class":101},[91,87460,87461,87463,87465,87467,87469,87471],{"class":93,"line":1178},[91,87462,52119],{"class":101},[91,87464,51319],{"class":51275},[91,87466,51322],{"class":1941},[91,87468,147],{"class":101},[91,87470,51327],{"class":206},[91,87472,51282],{"class":101},[91,87474,87475,87477,87479,87481,87483,87485,87487,87489,87491],{"class":93,"line":1192},[91,87476,52119],{"class":101},[91,87478,51319],{"class":51275},[91,87480,14899],{"class":1941},[91,87482,147],{"class":101},[91,87484,51366],{"class":206},[91,87486,51346],{"class":1941},[91,87488,147],{"class":101},[91,87490,51373],{"class":206},[91,87492,51282],{"class":101},[91,87494,87495,87497,87499,87501,87503],{"class":93,"line":1198},[91,87496,52119],{"class":101},[91,87498,51382],{"class":51275},[91,87500,51385],{"class":101},[91,87502,51382],{"class":51275},[91,87504,51282],{"class":101},[91,87506,87507,87509,87511],{"class":93,"line":1289},[91,87508,51760],{"class":101},[91,87510,51309],{"class":51275},[91,87512,51282],{"class":101},[91,87514,87515],{"class":93,"line":1295},[91,87516,2378],{"emptyLinePlaceholder":17},[91,87518,87519,87521,87523],{"class":93,"line":1307},[91,87520,1012],{"class":101},[91,87522,51775],{"class":51275},[91,87524,51282],{"class":101},[91,87526,87527,87529,87531,87533,87535],{"class":93,"line":1590},[91,87528,52119],{"class":101},[91,87530,51586],{"class":51275},[91,87532,55289],{"class":101},[91,87534,51586],{"class":51275},[91,87536,51282],{"class":101},[91,87538,87539,87541,87543],{"class":93,"line":1595},[91,87540,52119],{"class":101},[91,87542,51788],{"class":51275},[91,87544,51282],{"class":101},[91,87546,87547,87549,87551],{"class":93,"line":1601},[91,87548,70059],{"class":97},[91,87550,73748],{"class":1941},[91,87552,10832],{"class":101},[91,87554,87555,87557,87559,87561,87563,87565,87567,87569,87571,87573,87576],{"class":93,"line":1606},[91,87556,55746],{"class":101},[91,87558,54374],{"class":1941},[91,87560,102],{"class":101},[91,87562,81906],{"class":206},[91,87564,74224],{"class":101},[91,87566,147],{"class":97},[91,87568,11557],{"class":97},[91,87570,73764],{"class":1941},[91,87572,17240],{"class":101},[91,87574,87575],{"class":1941},"toLocaleString",[91,87577,1954],{"class":101},[91,87579,87580,87583,87586,87588],{"class":93,"line":1620},[91,87581,87582],{"class":1941},"      setTimeout",[91,87584,87585],{"class":101},"(getTime, ",[91,87587,6389],{"class":150},[91,87589,108],{"class":101},[91,87591,87592],{"class":93,"line":1625},[91,87593,2165],{"class":101},[91,87595,87596,87599],{"class":93,"line":1631},[91,87597,87598],{"class":1941},"    getTime",[91,87600,1954],{"class":101},[91,87602,87603,87605,87607],{"class":93,"line":1652},[91,87604,52392],{"class":101},[91,87606,51788],{"class":51275},[91,87608,51282],{"class":101},[91,87610,87611,87613,87615],{"class":93,"line":1657},[91,87612,51760],{"class":101},[91,87614,51775],{"class":51275},[91,87616,51282],{"class":101},[91,87618,87619],{"class":93,"line":1671},[91,87620,2378],{"emptyLinePlaceholder":17},[91,87622,87623,87625,87627],{"class":93,"line":1676},[91,87624,51760],{"class":101},[91,87626,50610],{"class":51275},[91,87628,51282],{"class":101},[38,87630,87631],{},[1440,87632],{"alt":10,"src":87633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[46,87635,87636],{"start":1172},[49,87637,87327],{},[38,87639,87640],{},[1440,87641],{"alt":10,"src":87642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[38,87644,87645],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[38,87647,39164],{},[38,87649,87650],{},"这个是简易版的递归函数深拷贝",[38,87652,87653],{},"一定要注意先数组再对象，因为万物皆可对象",[83,87655,87657],{"className":50608,"code":87656,"language":50610,"meta":10,"style":10},"\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",[88,87658,87659,87669,87683,87687,87695,87709,87729,87741,87749,87753,87761,87769,87779,87788,87796,87812,87816,87824,87828,87832,87844,87849,87868,87884,87889,87894,87899,87914,87919,87924,87933,87941,87958,87966,87972,87980,87985,87990,87999,88003,88007,88011,88022,88031,88041,88055,88065,88073,88081,88089,88093],{"__ignoreMap":10},[91,87660,87661,87663,87665,87667],{"class":93,"line":94},[91,87662,51272],{"class":101},[91,87664,51276],{"class":51275},[91,87666,51279],{"class":1941},[91,87668,51282],{"class":101},[91,87670,87671,87673,87675,87677,87679,87681],{"class":93,"line":11},[91,87672,1012],{"class":101},[91,87674,50610],{"class":51275},[91,87676,51291],{"class":1941},[91,87678,147],{"class":101},[91,87680,51296],{"class":206},[91,87682,51282],{"class":101},[91,87684,87685],{"class":93,"line":1157},[91,87686,2378],{"emptyLinePlaceholder":17},[91,87688,87689,87691,87693],{"class":93,"line":1172},[91,87690,1012],{"class":101},[91,87692,51309],{"class":51275},[91,87694,51282],{"class":101},[91,87696,87697,87699,87701,87703,87705,87707],{"class":93,"line":1178},[91,87698,52119],{"class":101},[91,87700,51319],{"class":51275},[91,87702,51322],{"class":1941},[91,87704,147],{"class":101},[91,87706,51327],{"class":206},[91,87708,51282],{"class":101},[91,87710,87711,87713,87715,87717,87719,87721,87723,87725,87727],{"class":93,"line":1192},[91,87712,52119],{"class":101},[91,87714,51319],{"class":51275},[91,87716,14899],{"class":1941},[91,87718,147],{"class":101},[91,87720,51366],{"class":206},[91,87722,51346],{"class":1941},[91,87724,147],{"class":101},[91,87726,51373],{"class":206},[91,87728,51282],{"class":101},[91,87730,87731,87733,87735,87737,87739],{"class":93,"line":1198},[91,87732,52119],{"class":101},[91,87734,51382],{"class":51275},[91,87736,51385],{"class":101},[91,87738,51382],{"class":51275},[91,87740,51282],{"class":101},[91,87742,87743,87745,87747],{"class":93,"line":1289},[91,87744,51760],{"class":101},[91,87746,51309],{"class":51275},[91,87748,51282],{"class":101},[91,87750,87751],{"class":93,"line":1295},[91,87752,2378],{"emptyLinePlaceholder":17},[91,87754,87755,87757,87759],{"class":93,"line":1307},[91,87756,1012],{"class":101},[91,87758,51775],{"class":51275},[91,87760,51282],{"class":101},[91,87762,87763,87765,87767],{"class":93,"line":1590},[91,87764,52119],{"class":101},[91,87766,51788],{"class":51275},[91,87768,51282],{"class":101},[91,87770,87771,87773,87775,87777],{"class":93,"line":1595},[91,87772,11200],{"class":97},[91,87774,69946],{"class":150},[91,87776,13543],{"class":97},[91,87778,15551],{"class":101},[91,87780,87781,87783,87786],{"class":93,"line":1601},[91,87782,71591],{"class":101},[91,87784,87785],{"class":206},"'pink'",[91,87787,31441],{"class":101},[91,87789,87790,87792,87794],{"class":93,"line":1606},[91,87791,71601],{"class":101},[91,87793,752],{"class":150},[91,87795,31441],{"class":101},[91,87797,87798,87801,87804,87806,87809],{"class":93,"line":1620},[91,87799,87800],{"class":101},"      hobby: [",[91,87802,87803],{"class":206},"'乒乓球'",[91,87805,12414],{"class":101},[91,87807,87808],{"class":206},"'足球'",[91,87810,87811],{"class":101},"],\n",[91,87813,87814],{"class":93,"line":1625},[91,87815,77847],{"class":101},[91,87817,87818,87821],{"class":93,"line":1631},[91,87819,87820],{"class":101},"        baby: ",[91,87822,87823],{"class":206},"'小pink'\n",[91,87825,87826],{"class":93,"line":1652},[91,87827,52373],{"class":101},[91,87829,87830],{"class":93,"line":1657},[91,87831,2165],{"class":101},[91,87833,87834,87836,87839,87841],{"class":93,"line":1671},[91,87835,11200],{"class":97},[91,87837,87838],{"class":150}," o",[91,87840,13543],{"class":97},[91,87842,87843],{"class":101}," {}\n",[91,87845,87846],{"class":93,"line":1676},[91,87847,87848],{"class":160},"    \u002F\u002F 拷贝函数\n",[91,87850,87851,87853,87856,87858,87861,87863,87866],{"class":93,"line":1705},[91,87852,70059],{"class":97},[91,87854,87855],{"class":1941}," deepCopy",[91,87857,102],{"class":101},[91,87859,87860],{"class":5195},"newObj",[91,87862,12414],{"class":101},[91,87864,87865],{"class":5195},"oldObj",[91,87867,12421],{"class":101},[91,87869,87870,87872,87874,87876,87879,87881],{"class":93,"line":1710},[91,87871,52259],{"class":97},[91,87873,1636],{"class":101},[91,87875,51822],{"class":97},[91,87877,87878],{"class":101}," k ",[91,87880,26018],{"class":97},[91,87882,87883],{"class":101}," oldObj) {\n",[91,87885,87886],{"class":93,"line":1727},[91,87887,87888],{"class":160},"        \u002F\u002F 处理数组的问题\n",[91,87890,87891],{"class":93,"line":1732},[91,87892,87893],{"class":160},"        \u002F\u002F 判断是否属于数组\n",[91,87895,87896],{"class":93,"line":1737},[91,87897,87898],{"class":160},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[91,87900,87901,87903,87906,87909,87912],{"class":93,"line":1742},[91,87902,2475],{"class":97},[91,87904,87905],{"class":101}," (oldObj[k] ",[91,87907,87908],{"class":97},"instanceof",[91,87910,87911],{"class":1941}," Array",[91,87913,12421],{"class":101},[91,87915,87916],{"class":93,"line":1756},[91,87917,87918],{"class":160},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[91,87920,87921],{"class":93,"line":1761},[91,87922,87923],{"class":160},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[91,87925,87926,87929,87931],{"class":93,"line":2555},[91,87927,87928],{"class":101},"          newObj[k] ",[91,87930,147],{"class":97},[91,87932,51813],{"class":101},[91,87934,87935,87938],{"class":93,"line":2569},[91,87936,87937],{"class":1941},"          deepCopy",[91,87939,87940],{"class":101},"(newObj[k], oldObj[k])\n",[91,87942,87943,87945,87947,87949,87951,87953,87956],{"class":93,"line":2577},[91,87944,80055],{"class":101},[91,87946,1679],{"class":97},[91,87948,1682],{"class":97},[91,87950,87905],{"class":101},[91,87952,87908],{"class":97},[91,87954,87955],{"class":1941}," Object",[91,87957,12421],{"class":101},[91,87959,87960,87962,87964],{"class":93,"line":2582},[91,87961,87928],{"class":101},[91,87963,147],{"class":97},[91,87965,87843],{"class":101},[91,87967,87968,87970],{"class":93,"line":2588},[91,87969,87937],{"class":1941},[91,87971,87940],{"class":101},[91,87973,87974,87976,87978],{"class":93,"line":2594},[91,87975,80055],{"class":101},[91,87977,1679],{"class":97},[91,87979,15551],{"class":101},[91,87981,87982],{"class":93,"line":2599},[91,87983,87984],{"class":160},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[91,87986,87987],{"class":93,"line":7927},[91,87988,87989],{"class":160},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[91,87991,87992,87994,87996],{"class":93,"line":7951},[91,87993,87928],{"class":101},[91,87995,147],{"class":97},[91,87997,87998],{"class":101}," oldObj[k]\n",[91,88000,88001],{"class":93,"line":7956},[91,88002,2507],{"class":101},[91,88004,88005],{"class":93,"line":7962},[91,88006,52373],{"class":101},[91,88008,88009],{"class":93,"line":7989},[91,88010,2165],{"class":101},[91,88012,88013,88016,88019],{"class":93,"line":7994},[91,88014,88015],{"class":1941},"    deepCopy",[91,88017,88018],{"class":101},"(o, obj) ",[91,88020,88021],{"class":160},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[91,88023,88024,88026,88028],{"class":93,"line":8000},[91,88025,73728],{"class":101},[91,88027,58222],{"class":1941},[91,88029,88030],{"class":101},"(o)\n",[91,88032,88033,88036,88038],{"class":93,"line":8012},[91,88034,88035],{"class":101},"    o.age ",[91,88037,147],{"class":97},[91,88039,88040],{"class":150}," 20\n",[91,88042,88043,88046,88048,88050,88052],{"class":93,"line":8024},[91,88044,88045],{"class":101},"    o.hobby[",[91,88047,293],{"class":150},[91,88049,4421],{"class":101},[91,88051,147],{"class":97},[91,88053,88054],{"class":206}," '篮球'\n",[91,88056,88057,88060,88062],{"class":93,"line":8036},[91,88058,88059],{"class":101},"    o.family ",[91,88061,147],{"class":97},[91,88063,88064],{"class":206}," '老pink'\n",[91,88066,88067,88069,88071],{"class":93,"line":9695},[91,88068,73728],{"class":101},[91,88070,58222],{"class":1941},[91,88072,70011],{"class":101},[91,88074,88075,88077,88079],{"class":93,"line":9720},[91,88076,52392],{"class":101},[91,88078,51788],{"class":51275},[91,88080,51282],{"class":101},[91,88082,88083,88085,88087],{"class":93,"line":9743},[91,88084,51760],{"class":101},[91,88086,51775],{"class":51275},[91,88088,51282],{"class":101},[91,88090,88091],{"class":93,"line":9767},[91,88092,2378],{"emptyLinePlaceholder":17},[91,88094,88095,88097,88099],{"class":93,"line":9772},[91,88096,51760],{"class":101},[91,88098,50610],{"class":51275},[91,88100,51282],{"class":101},[38,88102,88103],{},[1440,88104],{"alt":10,"src":88105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21977,88107,88109,88110],{"id":88108},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[251,88111,88112],{},"js库lodash里面cloneDeep内部实现了深拷贝",[38,88114,88115],{},[340,88116,88117],{"href":88117,"rel":88118},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23839],[38,88120,88121],{},"lodash里边的方法都要加上一个下划线_",[38,88123,88124],{},"_.cloneDeep()",[83,88126,88128],{"className":50608,"code":88127,"language":50610,"meta":10,"style":10},"\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",[88,88129,88130,88140,88154,88158,88166,88180,88200,88212,88220,88224,88232,88237,88256,88264,88274,88282,88290,88302,88306,88312,88316,88320,88336,88344,88353,88361,88369,88377,88381],{"__ignoreMap":10},[91,88131,88132,88134,88136,88138],{"class":93,"line":94},[91,88133,51272],{"class":101},[91,88135,51276],{"class":51275},[91,88137,51279],{"class":1941},[91,88139,51282],{"class":101},[91,88141,88142,88144,88146,88148,88150,88152],{"class":93,"line":11},[91,88143,1012],{"class":101},[91,88145,50610],{"class":51275},[91,88147,51291],{"class":1941},[91,88149,147],{"class":101},[91,88151,51296],{"class":206},[91,88153,51282],{"class":101},[91,88155,88156],{"class":93,"line":1157},[91,88157,2378],{"emptyLinePlaceholder":17},[91,88159,88160,88162,88164],{"class":93,"line":1172},[91,88161,1012],{"class":101},[91,88163,51309],{"class":51275},[91,88165,51282],{"class":101},[91,88167,88168,88170,88172,88174,88176,88178],{"class":93,"line":1178},[91,88169,52119],{"class":101},[91,88171,51319],{"class":51275},[91,88173,51322],{"class":1941},[91,88175,147],{"class":101},[91,88177,51327],{"class":206},[91,88179,51282],{"class":101},[91,88181,88182,88184,88186,88188,88190,88192,88194,88196,88198],{"class":93,"line":1192},[91,88183,52119],{"class":101},[91,88185,51319],{"class":51275},[91,88187,14899],{"class":1941},[91,88189,147],{"class":101},[91,88191,51366],{"class":206},[91,88193,51346],{"class":1941},[91,88195,147],{"class":101},[91,88197,51373],{"class":206},[91,88199,51282],{"class":101},[91,88201,88202,88204,88206,88208,88210],{"class":93,"line":1198},[91,88203,52119],{"class":101},[91,88205,51382],{"class":51275},[91,88207,51385],{"class":101},[91,88209,51382],{"class":51275},[91,88211,51282],{"class":101},[91,88213,88214,88216,88218],{"class":93,"line":1289},[91,88215,51760],{"class":101},[91,88217,51309],{"class":51275},[91,88219,51282],{"class":101},[91,88221,88222],{"class":93,"line":1295},[91,88223,2378],{"emptyLinePlaceholder":17},[91,88225,88226,88228,88230],{"class":93,"line":1307},[91,88227,1012],{"class":101},[91,88229,51775],{"class":51275},[91,88231,51282],{"class":101},[91,88233,88234],{"class":93,"line":1590},[91,88235,88236],{"class":160},"  \u003C!-- 先引用这个库 -->\n",[91,88238,88239,88241,88243,88245,88247,88250,88252,88254],{"class":93,"line":1595},[91,88240,52119],{"class":101},[91,88242,51788],{"class":51275},[91,88244,55214],{"class":1941},[91,88246,147],{"class":101},[91,88248,88249],{"class":206},"\"lodash.min.js\"",[91,88251,55289],{"class":101},[91,88253,51788],{"class":51275},[91,88255,51282],{"class":101},[91,88257,88258,88260,88262],{"class":93,"line":1601},[91,88259,52119],{"class":101},[91,88261,51788],{"class":51275},[91,88263,51282],{"class":101},[91,88265,88266,88268,88270,88272],{"class":93,"line":1606},[91,88267,11200],{"class":97},[91,88269,69946],{"class":150},[91,88271,13543],{"class":97},[91,88273,15551],{"class":101},[91,88275,88276,88278,88280],{"class":93,"line":1620},[91,88277,71591],{"class":101},[91,88279,87785],{"class":206},[91,88281,31441],{"class":101},[91,88283,88284,88286,88288],{"class":93,"line":1625},[91,88285,71601],{"class":101},[91,88287,752],{"class":150},[91,88289,31441],{"class":101},[91,88291,88292,88294,88296,88298,88300],{"class":93,"line":1631},[91,88293,87800],{"class":101},[91,88295,87803],{"class":206},[91,88297,12414],{"class":101},[91,88299,87808],{"class":206},[91,88301,87811],{"class":101},[91,88303,88304],{"class":93,"line":1652},[91,88305,77847],{"class":101},[91,88307,88308,88310],{"class":93,"line":1657},[91,88309,87820],{"class":101},[91,88311,87823],{"class":206},[91,88313,88314],{"class":93,"line":1671},[91,88315,52373],{"class":101},[91,88317,88318],{"class":93,"line":1676},[91,88319,2165],{"class":101},[91,88321,88322,88324,88326,88328,88331,88334],{"class":93,"line":1705},[91,88323,11200],{"class":97},[91,88325,87838],{"class":150},[91,88327,13543],{"class":97},[91,88329,88330],{"class":101}," _.",[91,88332,88333],{"class":1941},"cloneDeep",[91,88335,70011],{"class":101},[91,88337,88338,88340,88342],{"class":93,"line":1710},[91,88339,73728],{"class":101},[91,88341,58222],{"class":1941},[91,88343,88030],{"class":101},[91,88345,88346,88349,88351],{"class":93,"line":1727},[91,88347,88348],{"class":101},"    o.family.baby ",[91,88350,147],{"class":97},[91,88352,88064],{"class":206},[91,88354,88355,88357,88359],{"class":93,"line":1732},[91,88356,73728],{"class":101},[91,88358,58222],{"class":1941},[91,88360,70011],{"class":101},[91,88362,88363,88365,88367],{"class":93,"line":1737},[91,88364,52392],{"class":101},[91,88366,51788],{"class":51275},[91,88368,51282],{"class":101},[91,88370,88371,88373,88375],{"class":93,"line":1742},[91,88372,51760],{"class":101},[91,88374,51775],{"class":51275},[91,88376,51282],{"class":101},[91,88378,88379],{"class":93,"line":1756},[91,88380,2378],{"emptyLinePlaceholder":17},[91,88382,88383,88385,88387],{"class":93,"line":1761},[91,88384,51760],{"class":101},[91,88386,50610],{"class":51275},[91,88388,51282],{"class":101},[38,88390,88391],{},[1440,88392],{"alt":10,"src":88393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21977,88395,88397],{"id":88396},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[83,88399,88401],{"className":50608,"code":88400,"language":50610,"meta":10,"style":10},"\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",[88,88402,88403,88413,88427,88431,88439,88453,88473,88485,88493,88497,88505,88513,88523,88531,88539,88551,88555,88561,88565,88569,88574,88579,88584,88610,88618,88627,88635,88643,88651,88655],{"__ignoreMap":10},[91,88404,88405,88407,88409,88411],{"class":93,"line":94},[91,88406,51272],{"class":101},[91,88408,51276],{"class":51275},[91,88410,51279],{"class":1941},[91,88412,51282],{"class":101},[91,88414,88415,88417,88419,88421,88423,88425],{"class":93,"line":11},[91,88416,1012],{"class":101},[91,88418,50610],{"class":51275},[91,88420,51291],{"class":1941},[91,88422,147],{"class":101},[91,88424,51296],{"class":206},[91,88426,51282],{"class":101},[91,88428,88429],{"class":93,"line":1157},[91,88430,2378],{"emptyLinePlaceholder":17},[91,88432,88433,88435,88437],{"class":93,"line":1172},[91,88434,1012],{"class":101},[91,88436,51309],{"class":51275},[91,88438,51282],{"class":101},[91,88440,88441,88443,88445,88447,88449,88451],{"class":93,"line":1178},[91,88442,52119],{"class":101},[91,88444,51319],{"class":51275},[91,88446,51322],{"class":1941},[91,88448,147],{"class":101},[91,88450,51327],{"class":206},[91,88452,51282],{"class":101},[91,88454,88455,88457,88459,88461,88463,88465,88467,88469,88471],{"class":93,"line":1192},[91,88456,52119],{"class":101},[91,88458,51319],{"class":51275},[91,88460,14899],{"class":1941},[91,88462,147],{"class":101},[91,88464,51366],{"class":206},[91,88466,51346],{"class":1941},[91,88468,147],{"class":101},[91,88470,51373],{"class":206},[91,88472,51282],{"class":101},[91,88474,88475,88477,88479,88481,88483],{"class":93,"line":1198},[91,88476,52119],{"class":101},[91,88478,51382],{"class":51275},[91,88480,51385],{"class":101},[91,88482,51382],{"class":51275},[91,88484,51282],{"class":101},[91,88486,88487,88489,88491],{"class":93,"line":1289},[91,88488,51760],{"class":101},[91,88490,51309],{"class":51275},[91,88492,51282],{"class":101},[91,88494,88495],{"class":93,"line":1295},[91,88496,2378],{"emptyLinePlaceholder":17},[91,88498,88499,88501,88503],{"class":93,"line":1307},[91,88500,1012],{"class":101},[91,88502,51775],{"class":51275},[91,88504,51282],{"class":101},[91,88506,88507,88509,88511],{"class":93,"line":1590},[91,88508,52119],{"class":101},[91,88510,51788],{"class":51275},[91,88512,51282],{"class":101},[91,88514,88515,88517,88519,88521],{"class":93,"line":1595},[91,88516,11200],{"class":97},[91,88518,69946],{"class":150},[91,88520,13543],{"class":97},[91,88522,15551],{"class":101},[91,88524,88525,88527,88529],{"class":93,"line":1601},[91,88526,71591],{"class":101},[91,88528,87785],{"class":206},[91,88530,31441],{"class":101},[91,88532,88533,88535,88537],{"class":93,"line":1606},[91,88534,71601],{"class":101},[91,88536,752],{"class":150},[91,88538,31441],{"class":101},[91,88540,88541,88543,88545,88547,88549],{"class":93,"line":1620},[91,88542,87800],{"class":101},[91,88544,87803],{"class":206},[91,88546,12414],{"class":101},[91,88548,87808],{"class":206},[91,88550,87811],{"class":101},[91,88552,88553],{"class":93,"line":1625},[91,88554,77847],{"class":101},[91,88556,88557,88559],{"class":93,"line":1631},[91,88558,87820],{"class":101},[91,88560,87823],{"class":206},[91,88562,88563],{"class":93,"line":1652},[91,88564,52373],{"class":101},[91,88566,88567],{"class":93,"line":1657},[91,88568,2165],{"class":101},[91,88570,88571],{"class":93,"line":1671},[91,88572,88573],{"class":160},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[91,88575,88576],{"class":93,"line":1676},[91,88577,88578],{"class":160},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[91,88580,88581],{"class":93,"line":1705},[91,88582,88583],{"class":160},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[91,88585,88586,88588,88590,88592,88595,88597,88600,88602,88604,88606,88608],{"class":93,"line":1710},[91,88587,11200],{"class":97},[91,88589,87838],{"class":150},[91,88591,13543],{"class":97},[91,88593,88594],{"class":150}," JSON",[91,88596,660],{"class":101},[91,88598,88599],{"class":1941},"parse",[91,88601,102],{"class":101},[91,88603,71639],{"class":150},[91,88605,660],{"class":101},[91,88607,71644],{"class":1941},[91,88609,71647],{"class":101},[91,88611,88612,88614,88616],{"class":93,"line":1727},[91,88613,73728],{"class":101},[91,88615,58222],{"class":1941},[91,88617,88030],{"class":101},[91,88619,88620,88622,88624],{"class":93,"line":1732},[91,88621,88348],{"class":101},[91,88623,147],{"class":97},[91,88625,88626],{"class":206}," '123'\n",[91,88628,88629,88631,88633],{"class":93,"line":1737},[91,88630,73728],{"class":101},[91,88632,58222],{"class":1941},[91,88634,70011],{"class":101},[91,88636,88637,88639,88641],{"class":93,"line":1742},[91,88638,52392],{"class":101},[91,88640,51788],{"class":51275},[91,88642,51282],{"class":101},[91,88644,88645,88647,88649],{"class":93,"line":1756},[91,88646,51760],{"class":101},[91,88648,51775],{"class":51275},[91,88650,51282],{"class":101},[91,88652,88653],{"class":93,"line":1761},[91,88654,2378],{"emptyLinePlaceholder":17},[91,88656,88657,88659,88661],{"class":93,"line":2555},[91,88658,51760],{"class":101},[91,88660,50610],{"class":51275},[91,88662,51282],{"class":101},[38,88664,88665],{},[1440,88666],{"alt":10,"src":88667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[33,88669,88671],{"id":88670},"_415-异常处理","4.15 异常处理",[46,88673,88674],{},[49,88675,88676],{},"throw抛异常",[38,88678,88679],{},[1440,88680],{"alt":10,"src":88681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[46,88683,88684],{"start":11},[49,88685,88686],{},"try\u002Fcatch 捕获错误信息",[38,88688,88689],{},[1440,88690],{"alt":10,"src":88691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[83,88693,88695],{"className":50608,"code":88694,"language":50610,"meta":10,"style":10},"\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",[88,88696,88697,88707,88721,88725,88733,88747,88767,88779,88787,88791,88799,88811,88819,88828,88835,88840,88859,88868,88879,88884,88894,88899,88904,88909,88926,88930,88935,88942,88954,88958,88970,88974,88978,88983,88988,88995,89003,89011,89015],{"__ignoreMap":10},[91,88698,88699,88701,88703,88705],{"class":93,"line":94},[91,88700,51272],{"class":101},[91,88702,51276],{"class":51275},[91,88704,51279],{"class":1941},[91,88706,51282],{"class":101},[91,88708,88709,88711,88713,88715,88717,88719],{"class":93,"line":11},[91,88710,1012],{"class":101},[91,88712,50610],{"class":51275},[91,88714,51291],{"class":1941},[91,88716,147],{"class":101},[91,88718,51296],{"class":206},[91,88720,51282],{"class":101},[91,88722,88723],{"class":93,"line":1157},[91,88724,2378],{"emptyLinePlaceholder":17},[91,88726,88727,88729,88731],{"class":93,"line":1172},[91,88728,1012],{"class":101},[91,88730,51309],{"class":51275},[91,88732,51282],{"class":101},[91,88734,88735,88737,88739,88741,88743,88745],{"class":93,"line":1178},[91,88736,52119],{"class":101},[91,88738,51319],{"class":51275},[91,88740,51322],{"class":1941},[91,88742,147],{"class":101},[91,88744,51327],{"class":206},[91,88746,51282],{"class":101},[91,88748,88749,88751,88753,88755,88757,88759,88761,88763,88765],{"class":93,"line":1192},[91,88750,52119],{"class":101},[91,88752,51319],{"class":51275},[91,88754,14899],{"class":1941},[91,88756,147],{"class":101},[91,88758,51366],{"class":206},[91,88760,51346],{"class":1941},[91,88762,147],{"class":101},[91,88764,51373],{"class":206},[91,88766,51282],{"class":101},[91,88768,88769,88771,88773,88775,88777],{"class":93,"line":1198},[91,88770,52119],{"class":101},[91,88772,51382],{"class":51275},[91,88774,51385],{"class":101},[91,88776,51382],{"class":51275},[91,88778,51282],{"class":101},[91,88780,88781,88783,88785],{"class":93,"line":1289},[91,88782,51760],{"class":101},[91,88784,51309],{"class":51275},[91,88786,51282],{"class":101},[91,88788,88789],{"class":93,"line":1295},[91,88790,2378],{"emptyLinePlaceholder":17},[91,88792,88793,88795,88797],{"class":93,"line":1307},[91,88794,1012],{"class":101},[91,88796,51775],{"class":51275},[91,88798,51282],{"class":101},[91,88800,88801,88803,88805,88807,88809],{"class":93,"line":1590},[91,88802,52119],{"class":101},[91,88804,38],{"class":51275},[91,88806,53469],{"class":101},[91,88808,38],{"class":51275},[91,88810,51282],{"class":101},[91,88812,88813,88815,88817],{"class":93,"line":1595},[91,88814,52119],{"class":101},[91,88816,51788],{"class":51275},[91,88818,51282],{"class":101},[91,88820,88821,88823,88826],{"class":93,"line":1601},[91,88822,70059],{"class":97},[91,88824,88825],{"class":1941}," fn",[91,88827,10832],{"class":101},[91,88829,88830,88833],{"class":93,"line":1606},[91,88831,88832],{"class":97},"      try",[91,88834,15551],{"class":101},[91,88836,88837],{"class":93,"line":1620},[91,88838,88839],{"class":160},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[91,88841,88842,88844,88846,88848,88850,88852,88854,88857],{"class":93,"line":1625},[91,88843,61245],{"class":97},[91,88845,6804],{"class":150},[91,88847,13543],{"class":97},[91,88849,54371],{"class":101},[91,88851,54374],{"class":1941},[91,88853,102],{"class":101},[91,88855,88856],{"class":206},"'.p'",[91,88858,108],{"class":101},[91,88860,88861,88864,88866],{"class":93,"line":1631},[91,88862,88863],{"class":101},"        p.style.color ",[91,88865,147],{"class":97},[91,88867,67026],{"class":206},[91,88869,88870,88873,88876],{"class":93,"line":1652},[91,88871,88872],{"class":101},"      } ",[91,88874,88875],{"class":97},"catch",[91,88877,88878],{"class":101}," (err) {\n",[91,88880,88881],{"class":93,"line":1657},[91,88882,88883],{"class":160},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[91,88885,88886,88889,88891],{"class":93,"line":1671},[91,88887,88888],{"class":101},"        console.",[91,88890,58222],{"class":1941},[91,88892,88893],{"class":101},"(err.message)\n",[91,88895,88896],{"class":93,"line":1676},[91,88897,88898],{"class":160},"        \u002F\u002F 想要中断程序，需要加return\n",[91,88900,88901],{"class":93,"line":1705},[91,88902,88903],{"class":160},"        \u002F\u002F return\n",[91,88905,88906],{"class":93,"line":1710},[91,88907,88908],{"class":160},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[91,88910,88911,88914,88916,88919,88921,88924],{"class":93,"line":1727},[91,88912,88913],{"class":97},"        throw",[91,88915,11557],{"class":97},[91,88917,88918],{"class":1941}," Error",[91,88920,102],{"class":101},[91,88922,88923],{"class":206},"'你看看，选择器错误了吧'",[91,88925,108],{"class":101},[91,88927,88928],{"class":93,"line":1732},[91,88929,52373],{"class":101},[91,88931,88932],{"class":93,"line":1737},[91,88933,88934],{"class":160},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[91,88936,88937,88940],{"class":93,"line":1742},[91,88938,88939],{"class":97},"      finally",[91,88941,15551],{"class":101},[91,88943,88944,88947,88949,88952],{"class":93,"line":1756},[91,88945,88946],{"class":1941},"        alert",[91,88948,102],{"class":101},[91,88950,88951],{"class":206},"'弹出对话框'",[91,88953,108],{"class":101},[91,88955,88956],{"class":93,"line":1761},[91,88957,52373],{"class":101},[91,88959,88960,88962,88964,88966,88968],{"class":93,"line":2555},[91,88961,58219],{"class":101},[91,88963,58222],{"class":1941},[91,88965,102],{"class":101},[91,88967,574],{"class":150},[91,88969,108],{"class":101},[91,88971,88972],{"class":93,"line":2569},[91,88973,2378],{"emptyLinePlaceholder":17},[91,88975,88976],{"class":93,"line":2577},[91,88977,2165],{"class":101},[91,88979,88980],{"class":93,"line":2582},[91,88981,88982],{"class":160},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[91,88984,88985],{"class":93,"line":2588},[91,88986,88987],{"class":160},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[91,88989,88990,88993],{"class":93,"line":2594},[91,88991,88992],{"class":1941},"    fn",[91,88994,1954],{"class":101},[91,88996,88997,88999,89001],{"class":93,"line":2599},[91,88998,52392],{"class":101},[91,89000,51788],{"class":51275},[91,89002,51282],{"class":101},[91,89004,89005,89007,89009],{"class":93,"line":7927},[91,89006,51760],{"class":101},[91,89008,51775],{"class":51275},[91,89010,51282],{"class":101},[91,89012,89013],{"class":93,"line":7951},[91,89014,2378],{"emptyLinePlaceholder":17},[91,89016,89017,89019,89021],{"class":93,"line":7956},[91,89018,51760],{"class":101},[91,89020,50610],{"class":51275},[91,89022,51282],{"class":101},[38,89024,89025],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[46,89027,89028],{"start":1157},[49,89029,89030],{},"debugger",[38,89032,89033],{},[1440,89034],{"alt":10,"src":89035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[38,89037,89038],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[33,89040,89042],{"id":89041},"_416-处理this","4.16 处理this",[63,89044,89046],{"id":89045},"_4161-this的指向","4.16.1 this的指向",[46,89048,89049],{},[49,89050,89051],{},"普通函数的this",[38,89053,89054],{},[1440,89055],{"alt":10,"src":89056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[46,89058,89059],{"start":11},[49,89060,89061],{},"箭头函数的this",[38,89063,89064],{},[1440,89065],{"alt":10,"src":89066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[38,89068,89069],{},[1440,89070],{"alt":10,"src":89071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[38,89073,89074],{},[1440,89075],{"alt":10,"src":89076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[63,89078,89080],{"id":89079},"_4162-this的改变","4.16.2 this的改变",[38,89082,89083],{},"call() apply() bind()",[46,89085,89086],{},[49,89087,89088],{},"call()",[38,89090,89091],{},[1440,89092],{"alt":10,"src":89093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[38,89095,89096],{},"两个作用：①调用函数；②改变this指向",[83,89098,89100],{"className":53042,"code":89099,"language":53044,"meta":10,"style":10},"\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",[88,89101,89102,89110,89118,89122,89127,89131,89136,89141,89146,89150,89155,89163],{"__ignoreMap":10},[91,89103,89104,89106,89108],{"class":93,"line":94},[91,89105,1012],{"class":101},[91,89107,51775],{"class":51275},[91,89109,51282],{"class":101},[91,89111,89112,89114,89116],{"class":93,"line":11},[91,89113,52119],{"class":101},[91,89115,51788],{"class":51275},[91,89117,51282],{"class":101},[91,89119,89120],{"class":93,"line":1157},[91,89121,71498],{"class":101},[91,89123,89124],{"class":93,"line":1172},[91,89125,89126],{"class":101},"      uname: 'pink'\n",[91,89128,89129],{"class":93,"line":1178},[91,89130,2165],{"class":101},[91,89132,89133],{"class":93,"line":1192},[91,89134,89135],{"class":101},"    function fn(x, y) {\n",[91,89137,89138],{"class":93,"line":1198},[91,89139,89140],{"class":101},"      console.log(this)  \u002F\u002Fwindow\n",[91,89142,89143],{"class":93,"line":1289},[91,89144,89145],{"class":101},"      console.log(x + y)\n",[91,89147,89148],{"class":93,"line":1295},[91,89149,2165],{"class":101},[91,89151,89152],{"class":93,"line":1307},[91,89153,89154],{"class":101},"    fn.call(obj, 1, 2)\n",[91,89156,89157,89159,89161],{"class":93,"line":1590},[91,89158,52392],{"class":101},[91,89160,51788],{"class":51275},[91,89162,51282],{"class":101},[91,89164,89165,89167,89169],{"class":93,"line":1595},[91,89166,51760],{"class":101},[91,89168,51775],{"class":51275},[91,89170,51282],{"class":101},[38,89172,89173],{},[1440,89174],{"alt":10,"src":89175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[46,89177,89178],{"start":11},[49,89179,89180],{},"apply()",[38,89182,89183],{},[1440,89184],{"alt":10,"src":89185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[38,89187,89096],{},[38,89189,89190],{},"call传递的是普通参数，而apply必须传递的是数组",[83,89192,89194],{"className":50608,"code":89193,"language":50610,"meta":10,"style":10},"\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",[88,89195,89196,89206,89220,89224,89232,89246,89266,89278,89286,89290,89298,89306,89316,89323,89327,89332,89348,89360,89374,89378,89383,89402,89407,89411,89416,89421,89429,89434,89456,89461,89477,89493,89505,89509,89514,89533,89541,89549,89553],{"__ignoreMap":10},[91,89197,89198,89200,89202,89204],{"class":93,"line":94},[91,89199,51272],{"class":101},[91,89201,51276],{"class":51275},[91,89203,51279],{"class":1941},[91,89205,51282],{"class":101},[91,89207,89208,89210,89212,89214,89216,89218],{"class":93,"line":11},[91,89209,1012],{"class":101},[91,89211,50610],{"class":51275},[91,89213,51291],{"class":1941},[91,89215,147],{"class":101},[91,89217,51296],{"class":206},[91,89219,51282],{"class":101},[91,89221,89222],{"class":93,"line":1157},[91,89223,2378],{"emptyLinePlaceholder":17},[91,89225,89226,89228,89230],{"class":93,"line":1172},[91,89227,1012],{"class":101},[91,89229,51309],{"class":51275},[91,89231,51282],{"class":101},[91,89233,89234,89236,89238,89240,89242,89244],{"class":93,"line":1178},[91,89235,52119],{"class":101},[91,89237,51319],{"class":51275},[91,89239,51322],{"class":1941},[91,89241,147],{"class":101},[91,89243,51327],{"class":206},[91,89245,51282],{"class":101},[91,89247,89248,89250,89252,89254,89256,89258,89260,89262,89264],{"class":93,"line":1192},[91,89249,52119],{"class":101},[91,89251,51319],{"class":51275},[91,89253,14899],{"class":1941},[91,89255,147],{"class":101},[91,89257,51366],{"class":206},[91,89259,51346],{"class":1941},[91,89261,147],{"class":101},[91,89263,51373],{"class":206},[91,89265,51282],{"class":101},[91,89267,89268,89270,89272,89274,89276],{"class":93,"line":1198},[91,89269,52119],{"class":101},[91,89271,51382],{"class":51275},[91,89273,51385],{"class":101},[91,89275,51382],{"class":51275},[91,89277,51282],{"class":101},[91,89279,89280,89282,89284],{"class":93,"line":1289},[91,89281,51760],{"class":101},[91,89283,51309],{"class":51275},[91,89285,51282],{"class":101},[91,89287,89288],{"class":93,"line":1295},[91,89289,2378],{"emptyLinePlaceholder":17},[91,89291,89292,89294,89296],{"class":93,"line":1307},[91,89293,1012],{"class":101},[91,89295,51775],{"class":51275},[91,89297,51282],{"class":101},[91,89299,89300,89302,89304],{"class":93,"line":1590},[91,89301,52119],{"class":101},[91,89303,51788],{"class":51275},[91,89305,51282],{"class":101},[91,89307,89308,89310,89312,89314],{"class":93,"line":1595},[91,89309,11200],{"class":97},[91,89311,69946],{"class":150},[91,89313,13543],{"class":97},[91,89315,15551],{"class":101},[91,89317,89318,89320],{"class":93,"line":1601},[91,89319,71601],{"class":101},[91,89321,89322],{"class":150},"18\n",[91,89324,89325],{"class":93,"line":1606},[91,89326,2165],{"class":101},[91,89328,89329],{"class":93,"line":1620},[91,89330,89331],{"class":160},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[91,89333,89334,89336,89338,89340,89342,89344,89346],{"class":93,"line":1625},[91,89335,70059],{"class":97},[91,89337,88825],{"class":1941},[91,89339,102],{"class":101},[91,89341,922],{"class":5195},[91,89343,12414],{"class":101},[91,89345,947],{"class":5195},[91,89347,12421],{"class":101},[91,89349,89350,89352,89354,89356,89358],{"class":93,"line":1631},[91,89351,58219],{"class":101},[91,89353,58222],{"class":1941},[91,89355,102],{"class":101},[91,89357,86968],{"class":150},[91,89359,108],{"class":101},[91,89361,89362,89364,89366,89369,89371],{"class":93,"line":1652},[91,89363,58219],{"class":101},[91,89365,58222],{"class":1941},[91,89367,89368],{"class":101},"(x ",[91,89370,583],{"class":97},[91,89372,89373],{"class":101}," y)\n",[91,89375,89376],{"class":93,"line":1657},[91,89377,2165],{"class":101},[91,89379,89380],{"class":93,"line":1671},[91,89381,89382],{"class":160},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[91,89384,89385,89388,89391,89394,89396,89398,89400],{"class":93,"line":1676},[91,89386,89387],{"class":101},"    fn.",[91,89389,89390],{"class":1941},"apply",[91,89392,89393],{"class":101},"(obj, [",[91,89395,319],{"class":150},[91,89397,12414],{"class":101},[91,89399,179],{"class":150},[91,89401,4635],{"class":101},[91,89403,89404],{"class":93,"line":1705},[91,89405,89406],{"class":160},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[91,89408,89409],{"class":93,"line":1710},[91,89410,2378],{"emptyLinePlaceholder":17},[91,89412,89413],{"class":93,"line":1727},[91,89414,89415],{"class":160},"    \u002F\u002F 使用场景：求数组最大值\n",[91,89417,89418],{"class":93,"line":1732},[91,89419,89420],{"class":160},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[91,89422,89423,89426],{"class":93,"line":1737},[91,89424,89425],{"class":160},"    \u002F\u002F console.log(max)",[91,89427,89428],{"class":160},"   \u002F\u002F3\n",[91,89430,89431],{"class":93,"line":1742},[91,89432,89433],{"class":160},"    \u002F\u002F 指向空或者Math都是可以的\n",[91,89435,89436,89438,89440,89442,89444,89446,89448,89450,89452,89454],{"class":93,"line":1756},[91,89437,11200],{"class":97},[91,89439,57670],{"class":150},[91,89441,13543],{"class":97},[91,89443,52201],{"class":101},[91,89445,413],{"class":150},[91,89447,12414],{"class":101},[91,89449,606],{"class":150},[91,89451,12414],{"class":101},[91,89453,637],{"class":150},[91,89455,33221],{"class":101},[91,89457,89458],{"class":93,"line":1761},[91,89459,89460],{"class":160},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[91,89462,89463,89465,89467,89469,89472,89474],{"class":93,"line":2555},[91,89464,11200],{"class":97},[91,89466,5930],{"class":150},[91,89468,13543],{"class":97},[91,89470,89471],{"class":101}," Math.max.",[91,89473,89390],{"class":1941},[91,89475,89476],{"class":101},"(Math, arr)\n",[91,89478,89479,89481,89484,89486,89489,89491],{"class":93,"line":2569},[91,89480,11200],{"class":97},[91,89482,89483],{"class":150}," min",[91,89485,13543],{"class":97},[91,89487,89488],{"class":101}," Math.min.",[91,89490,89390],{"class":1941},[91,89492,89476],{"class":101},[91,89494,89495,89497,89499,89502],{"class":93,"line":2577},[91,89496,73728],{"class":101},[91,89498,58222],{"class":1941},[91,89500,89501],{"class":101},"(max, min)     ",[91,89503,89504],{"class":160},"\u002F\u002F100,4\n",[91,89506,89507],{"class":93,"line":2582},[91,89508,2378],{"emptyLinePlaceholder":17},[91,89510,89511],{"class":93,"line":2588},[91,89512,89513],{"class":160},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[91,89515,89516,89518,89520,89523,89525,89527,89530],{"class":93,"line":2594},[91,89517,73728],{"class":101},[91,89519,58222],{"class":1941},[91,89521,89522],{"class":101},"(Max.",[91,89524,5994],{"class":1941},[91,89526,102],{"class":101},[91,89528,89529],{"class":97},"...",[91,89531,89532],{"class":101},"arr))\n",[91,89534,89535,89537,89539],{"class":93,"line":2599},[91,89536,52392],{"class":101},[91,89538,51788],{"class":51275},[91,89540,51282],{"class":101},[91,89542,89543,89545,89547],{"class":93,"line":7927},[91,89544,51760],{"class":101},[91,89546,51775],{"class":51275},[91,89548,51282],{"class":101},[91,89550,89551],{"class":93,"line":7951},[91,89552,2378],{"emptyLinePlaceholder":17},[91,89554,89555,89557,89559],{"class":93,"line":7956},[91,89556,51760],{"class":101},[91,89558,50610],{"class":51275},[91,89560,51282],{"class":101},[38,89562,89563],{},[1440,89564],{"alt":10,"src":89565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[46,89567,89568],{"start":1157},[49,89569,89570],{},"bind()",[38,89572,89573],{},[1440,89574],{"alt":10,"src":89575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[38,89577,89578],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[38,89580,89581],{},"bind的语法跟call很相似",[83,89583,89585],{"className":53042,"code":89584,"language":53044,"meta":10,"style":10},"\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",[88,89586,89587,89595,89603,89607,89612,89616,89620,89625,89629,89634,89639,89644,89649,89654,89659,89664,89668,89676],{"__ignoreMap":10},[91,89588,89589,89591,89593],{"class":93,"line":94},[91,89590,1012],{"class":101},[91,89592,51775],{"class":51275},[91,89594,51282],{"class":101},[91,89596,89597,89599,89601],{"class":93,"line":11},[91,89598,52119],{"class":101},[91,89600,51788],{"class":51275},[91,89602,51282],{"class":101},[91,89604,89605],{"class":93,"line":1157},[91,89606,71498],{"class":101},[91,89608,89609],{"class":93,"line":1172},[91,89610,89611],{"class":101},"      age: 18\n",[91,89613,89614],{"class":93,"line":1178},[91,89615,2165],{"class":101},[91,89617,89618],{"class":93,"line":1192},[91,89619,77118],{"class":101},[91,89621,89622],{"class":93,"line":1198},[91,89623,89624],{"class":101},"      console.log(this)\n",[91,89626,89627],{"class":93,"line":1289},[91,89628,2165],{"class":101},[91,89630,89631],{"class":93,"line":1295},[91,89632,89633],{"class":101},"    \u002F\u002F 1.bind 不会调用函数\n",[91,89635,89636],{"class":93,"line":1307},[91,89637,89638],{"class":101},"    \u002F\u002F 2.bind能改变this的指向\n",[91,89640,89641],{"class":93,"line":1590},[91,89642,89643],{"class":101},"    fn.bind()\n",[91,89645,89646],{"class":93,"line":1595},[91,89647,89648],{"class":101},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[91,89650,89651],{"class":93,"line":1601},[91,89652,89653],{"class":101},"    const fun = fn.bind(obj)\n",[91,89655,89656],{"class":93,"line":1606},[91,89657,89658],{"class":101},"    \u002F\u002F console.log(fun)\n",[91,89660,89661],{"class":93,"line":1620},[91,89662,89663],{"class":101},"    \u002F\u002F 调用,查看this的指向\n",[91,89665,89666],{"class":93,"line":1625},[91,89667,52626],{"class":101},[91,89669,89670,89672,89674],{"class":93,"line":1631},[91,89671,52392],{"class":101},[91,89673,51788],{"class":51275},[91,89675,51282],{"class":101},[91,89677,89678,89680,89682],{"class":93,"line":1652},[91,89679,51760],{"class":101},[91,89681,51775],{"class":51275},[91,89683,51282],{"class":101},[38,89685,89686],{},[1440,89687],{"alt":10,"src":89688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[46,89690,89691],{"start":1172},[49,89692,89693],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[83,89695,89697],{"className":53042,"code":89696,"language":53044,"meta":10,"style":10},"\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",[88,89698,89699,89707,89720,89728,89733,89737,89742,89747,89752,89757,89762,89767,89772,89777,89781,89789],{"__ignoreMap":10},[91,89700,89701,89703,89705],{"class":93,"line":94},[91,89702,1012],{"class":101},[91,89704,51775],{"class":51275},[91,89706,51282],{"class":101},[91,89708,89709,89711,89713,89716,89718],{"class":93,"line":11},[91,89710,52119],{"class":101},[91,89712,53862],{"class":51275},[91,89714,89715],{"class":101},">禁用\u003C\u002F",[91,89717,53862],{"class":51275},[91,89719,51282],{"class":101},[91,89721,89722,89724,89726],{"class":93,"line":1157},[91,89723,52119],{"class":101},[91,89725,51788],{"class":51275},[91,89727,51282],{"class":101},[91,89729,89730],{"class":93,"line":1172},[91,89731,89732],{"class":101},"    const btn = document.querySelector('button')\n",[91,89734,89735],{"class":93,"line":1178},[91,89736,58991],{"class":101},[91,89738,89739],{"class":93,"line":1192},[91,89740,89741],{"class":101},"      this.disabled = true\n",[91,89743,89744],{"class":93,"line":1198},[91,89745,89746],{"class":101},"      \u002F\u002F 定时器是window进行调用的\n",[91,89748,89749],{"class":93,"line":1289},[91,89750,89751],{"class":101},"      setTimeout(function () {\n",[91,89753,89754],{"class":93,"line":1295},[91,89755,89756],{"class":101},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[91,89758,89759],{"class":93,"line":1307},[91,89760,89761],{"class":101},"        this.disabled = false\n",[91,89763,89764],{"class":93,"line":1590},[91,89765,89766],{"class":101},"      }.bind(this), 2000)\n",[91,89768,89769],{"class":93,"line":1595},[91,89770,89771],{"class":101},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[91,89773,89774],{"class":93,"line":1601},[91,89775,89776],{"class":101},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[91,89778,89779],{"class":93,"line":1606},[91,89780,33436],{"class":101},[91,89782,89783,89785,89787],{"class":93,"line":1620},[91,89784,52392],{"class":101},[91,89786,51788],{"class":51275},[91,89788,51282],{"class":101},[91,89790,89791,89793,89795],{"class":93,"line":1625},[91,89792,51760],{"class":101},[91,89794,51775],{"class":51275},[91,89796,51282],{"class":101},[46,89798,89799],{"start":1178},[49,89800,21932],{},[38,89802,89803],{},[1440,89804],{"alt":10,"src":89805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[33,89807,89809],{"id":89808},"_417-性能优化","4.17 性能优化",[63,89811,89813],{"id":89812},"_4171-防抖","4.17.1 防抖",[38,89815,89816],{},[1440,89817],{"alt":10,"src":89818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[38,89820,89821],{},[251,89822,89823],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[38,89825,89826],{},"防抖实现方式：",[1109,89828,89829],{},[49,89830,89831],{},"lodash 提供了防抖处理",[38,89833,89834],{},"_.debounce(func,[wait=0],[options={}])",[38,89836,89837],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[83,89839,89841],{"className":50608,"code":89840,"language":50610,"meta":10,"style":10},"\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",[88,89842,89843,89853,89867,89871,89879,89893,89913,89925,89933,89939,89949,89961,89973,89984,89996,90006,90016,90029,90033,90041,90049,90053,90061,90079,90097,90105,90124,90134,90143,90154,90159,90163,90168,90173,90178,90203,90211,90219,90223],{"__ignoreMap":10},[91,89844,89845,89847,89849,89851],{"class":93,"line":94},[91,89846,51272],{"class":101},[91,89848,51276],{"class":51275},[91,89850,51279],{"class":1941},[91,89852,51282],{"class":101},[91,89854,89855,89857,89859,89861,89863,89865],{"class":93,"line":11},[91,89856,1012],{"class":101},[91,89858,50610],{"class":51275},[91,89860,51291],{"class":1941},[91,89862,147],{"class":101},[91,89864,51296],{"class":206},[91,89866,51282],{"class":101},[91,89868,89869],{"class":93,"line":1157},[91,89870,2378],{"emptyLinePlaceholder":17},[91,89872,89873,89875,89877],{"class":93,"line":1172},[91,89874,1012],{"class":101},[91,89876,51309],{"class":51275},[91,89878,51282],{"class":101},[91,89880,89881,89883,89885,89887,89889,89891],{"class":93,"line":1178},[91,89882,52119],{"class":101},[91,89884,51319],{"class":51275},[91,89886,51322],{"class":1941},[91,89888,147],{"class":101},[91,89890,51327],{"class":206},[91,89892,51282],{"class":101},[91,89894,89895,89897,89899,89901,89903,89905,89907,89909,89911],{"class":93,"line":1192},[91,89896,52119],{"class":101},[91,89898,51319],{"class":51275},[91,89900,14899],{"class":1941},[91,89902,147],{"class":101},[91,89904,51366],{"class":206},[91,89906,51346],{"class":1941},[91,89908,147],{"class":101},[91,89910,51373],{"class":206},[91,89912,51282],{"class":101},[91,89914,89915,89917,89919,89921,89923],{"class":93,"line":1198},[91,89916,52119],{"class":101},[91,89918,51382],{"class":51275},[91,89920,51385],{"class":101},[91,89922,51382],{"class":51275},[91,89924,51282],{"class":101},[91,89926,89927,89929,89931],{"class":93,"line":1289},[91,89928,52119],{"class":101},[91,89930,5105],{"class":51275},[91,89932,51282],{"class":101},[91,89934,89935,89937],{"class":93,"line":1295},[91,89936,54727],{"class":1941},[91,89938,15551],{"class":101},[91,89940,89941,89943,89945,89947],{"class":93,"line":1307},[91,89942,72571],{"class":150},[91,89944,51412],{"class":101},[91,89946,60480],{"class":150},[91,89948,1268],{"class":101},[91,89950,89951,89953,89955,89957,89959],{"class":93,"line":1590},[91,89952,54746],{"class":150},[91,89954,51412],{"class":101},[91,89956,1700],{"class":150},[91,89958,51467],{"class":97},[91,89960,1268],{"class":101},[91,89962,89963,89965,89967,89969,89971],{"class":93,"line":1595},[91,89964,54760],{"class":150},[91,89966,51412],{"class":101},[91,89968,1700],{"class":150},[91,89970,51467],{"class":97},[91,89972,1268],{"class":101},[91,89974,89975,89977,89979,89982],{"class":93,"line":1601},[91,89976,54859],{"class":150},[91,89978,51412],{"class":101},[91,89980,89981],{"class":150},"gray",[91,89983,1268],{"class":101},[91,89985,89986,89988,89990,89992,89994],{"class":93,"line":1606},[91,89987,54897],{"class":150},[91,89989,51412],{"class":101},[91,89991,927],{"class":150},[91,89993,51467],{"class":97},[91,89995,1268],{"class":101},[91,89997,89998,90000,90002,90004],{"class":93,"line":1620},[91,89999,57391],{"class":150},[91,90001,51412],{"class":101},[91,90003,60817],{"class":150},[91,90005,1268],{"class":101},[91,90007,90008,90010,90012,90014],{"class":93,"line":1625},[91,90009,57261],{"class":150},[91,90011,51412],{"class":101},[91,90013,51567],{"class":150},[91,90015,1268],{"class":101},[91,90017,90018,90021,90023,90025,90027],{"class":93,"line":1631},[91,90019,90020],{"class":150},"      padding-top",[91,90022,51412],{"class":101},[91,90024,421],{"class":150},[91,90026,51467],{"class":97},[91,90028,1268],{"class":101},[91,90030,90031],{"class":93,"line":1652},[91,90032,2165],{"class":101},[91,90034,90035,90037,90039],{"class":93,"line":1657},[91,90036,52392],{"class":101},[91,90038,5105],{"class":51275},[91,90040,51282],{"class":101},[91,90042,90043,90045,90047],{"class":93,"line":1671},[91,90044,51760],{"class":101},[91,90046,51309],{"class":51275},[91,90048,51282],{"class":101},[91,90050,90051],{"class":93,"line":1676},[91,90052,2378],{"emptyLinePlaceholder":17},[91,90054,90055,90057,90059],{"class":93,"line":1705},[91,90056,1012],{"class":101},[91,90058,51775],{"class":51275},[91,90060,51282],{"class":101},[91,90062,90063,90065,90067,90069,90071,90073,90075,90077],{"class":93,"line":1710},[91,90064,52119],{"class":101},[91,90066,51586],{"class":51275},[91,90068,53461],{"class":1941},[91,90070,147],{"class":101},[91,90072,53466],{"class":206},[91,90074,55289],{"class":101},[91,90076,51586],{"class":51275},[91,90078,51282],{"class":101},[91,90080,90081,90083,90085,90087,90089,90091,90093,90095],{"class":93,"line":1727},[91,90082,52119],{"class":101},[91,90084,51788],{"class":51275},[91,90086,55214],{"class":1941},[91,90088,147],{"class":101},[91,90090,88249],{"class":206},[91,90092,55289],{"class":101},[91,90094,51788],{"class":51275},[91,90096,51282],{"class":101},[91,90098,90099,90101,90103],{"class":93,"line":1732},[91,90100,52119],{"class":101},[91,90102,51788],{"class":51275},[91,90104,51282],{"class":101},[91,90106,90107,90109,90111,90113,90115,90117,90119,90122],{"class":93,"line":1737},[91,90108,11200],{"class":97},[91,90110,86908],{"class":150},[91,90112,13543],{"class":97},[91,90114,54371],{"class":101},[91,90116,54374],{"class":1941},[91,90118,102],{"class":101},[91,90120,90121],{"class":206},"'.box'",[91,90123,108],{"class":101},[91,90125,90126,90128,90130,90132],{"class":93,"line":1742},[91,90127,52194],{"class":97},[91,90129,9417],{"class":101},[91,90131,147],{"class":97},[91,90133,47308],{"class":150},[91,90135,90136,90138,90141],{"class":93,"line":1756},[91,90137,70059],{"class":97},[91,90139,90140],{"class":1941}," mouseMove",[91,90142,10832],{"class":101},[91,90144,90145,90148,90150,90152],{"class":93,"line":1761},[91,90146,90147],{"class":101},"      box.innerHTML ",[91,90149,147],{"class":97},[91,90151,3010],{"class":101},[91,90153,2680],{"class":97},[91,90155,90156],{"class":93,"line":2555},[91,90157,90158],{"class":160},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[91,90160,90161],{"class":93,"line":2569},[91,90162,2165],{"class":101},[91,90164,90165],{"class":93,"line":2577},[91,90166,90167],{"class":160},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[91,90169,90170],{"class":93,"line":2582},[91,90171,90172],{"class":160},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[91,90174,90175],{"class":93,"line":2588},[91,90176,90177],{"class":160},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[91,90179,90180,90183,90185,90187,90190,90193,90196,90199,90201],{"class":93,"line":2594},[91,90181,90182],{"class":101},"    box.",[91,90184,57788],{"class":1941},[91,90186,102],{"class":101},[91,90188,90189],{"class":206},"'mousemove'",[91,90191,90192],{"class":101},", _.",[91,90194,90195],{"class":1941},"debounce",[91,90197,90198],{"class":101},"(mouseMove, ",[91,90200,65049],{"class":150},[91,90202,30472],{"class":101},[91,90204,90205,90207,90209],{"class":93,"line":2599},[91,90206,52392],{"class":101},[91,90208,51788],{"class":51275},[91,90210,51282],{"class":101},[91,90212,90213,90215,90217],{"class":93,"line":7927},[91,90214,51760],{"class":101},[91,90216,51775],{"class":51275},[91,90218,51282],{"class":101},[91,90220,90221],{"class":93,"line":7951},[91,90222,2378],{"emptyLinePlaceholder":17},[91,90224,90225,90227,90229],{"class":93,"line":7956},[91,90226,51760],{"class":101},[91,90228,50610],{"class":51275},[91,90230,51282],{"class":101},[1109,90232,90233],{},[49,90234,90235],{},"手写一个防抖函数来处理",[38,90237,90238],{},"防抖的核心就是利用定时器来实现的：",[38,90240,90241],{},"①声明一个定时器变量",[38,90243,90244],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[38,90246,90247],{},"③如果没有定时器则开启定时器，记得存到变量里面",[83,90249,90251],{"className":50608,"code":90250,"language":50610,"meta":10,"style":10},"\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",[88,90252,90253,90263,90277,90281,90289,90303,90323,90335,90343,90349,90359,90371,90383,90393,90405,90415,90425,90437,90441,90449,90457,90461,90469,90487,90505,90513,90531,90541,90549,90559,90563,90567,90571,90576,90581,90586,90591,90596,90601,90619,90626,90631,90639,90644,90657,90673,90683,90688,90692,90696,90716,90720,90725,90730,90735,90740,90748,90756,90760],{"__ignoreMap":10},[91,90254,90255,90257,90259,90261],{"class":93,"line":94},[91,90256,51272],{"class":101},[91,90258,51276],{"class":51275},[91,90260,51279],{"class":1941},[91,90262,51282],{"class":101},[91,90264,90265,90267,90269,90271,90273,90275],{"class":93,"line":11},[91,90266,1012],{"class":101},[91,90268,50610],{"class":51275},[91,90270,51291],{"class":1941},[91,90272,147],{"class":101},[91,90274,51296],{"class":206},[91,90276,51282],{"class":101},[91,90278,90279],{"class":93,"line":1157},[91,90280,2378],{"emptyLinePlaceholder":17},[91,90282,90283,90285,90287],{"class":93,"line":1172},[91,90284,1012],{"class":101},[91,90286,51309],{"class":51275},[91,90288,51282],{"class":101},[91,90290,90291,90293,90295,90297,90299,90301],{"class":93,"line":1178},[91,90292,52119],{"class":101},[91,90294,51319],{"class":51275},[91,90296,51322],{"class":1941},[91,90298,147],{"class":101},[91,90300,51327],{"class":206},[91,90302,51282],{"class":101},[91,90304,90305,90307,90309,90311,90313,90315,90317,90319,90321],{"class":93,"line":1192},[91,90306,52119],{"class":101},[91,90308,51319],{"class":51275},[91,90310,14899],{"class":1941},[91,90312,147],{"class":101},[91,90314,51366],{"class":206},[91,90316,51346],{"class":1941},[91,90318,147],{"class":101},[91,90320,51373],{"class":206},[91,90322,51282],{"class":101},[91,90324,90325,90327,90329,90331,90333],{"class":93,"line":1198},[91,90326,52119],{"class":101},[91,90328,51382],{"class":51275},[91,90330,51385],{"class":101},[91,90332,51382],{"class":51275},[91,90334,51282],{"class":101},[91,90336,90337,90339,90341],{"class":93,"line":1289},[91,90338,52119],{"class":101},[91,90340,5105],{"class":51275},[91,90342,51282],{"class":101},[91,90344,90345,90347],{"class":93,"line":1295},[91,90346,54727],{"class":1941},[91,90348,15551],{"class":101},[91,90350,90351,90353,90355,90357],{"class":93,"line":1307},[91,90352,72571],{"class":150},[91,90354,51412],{"class":101},[91,90356,60480],{"class":150},[91,90358,1268],{"class":101},[91,90360,90361,90363,90365,90367,90369],{"class":93,"line":1590},[91,90362,54746],{"class":150},[91,90364,51412],{"class":101},[91,90366,1700],{"class":150},[91,90368,51467],{"class":97},[91,90370,1268],{"class":101},[91,90372,90373,90375,90377,90379,90381],{"class":93,"line":1595},[91,90374,54760],{"class":150},[91,90376,51412],{"class":101},[91,90378,1700],{"class":150},[91,90380,51467],{"class":97},[91,90382,1268],{"class":101},[91,90384,90385,90387,90389,90391],{"class":93,"line":1601},[91,90386,54859],{"class":150},[91,90388,51412],{"class":101},[91,90390,89981],{"class":150},[91,90392,1268],{"class":101},[91,90394,90395,90397,90399,90401,90403],{"class":93,"line":1606},[91,90396,54897],{"class":150},[91,90398,51412],{"class":101},[91,90400,927],{"class":150},[91,90402,51467],{"class":97},[91,90404,1268],{"class":101},[91,90406,90407,90409,90411,90413],{"class":93,"line":1620},[91,90408,57391],{"class":150},[91,90410,51412],{"class":101},[91,90412,60817],{"class":150},[91,90414,1268],{"class":101},[91,90416,90417,90419,90421,90423],{"class":93,"line":1625},[91,90418,57261],{"class":150},[91,90420,51412],{"class":101},[91,90422,51567],{"class":150},[91,90424,1268],{"class":101},[91,90426,90427,90429,90431,90433,90435],{"class":93,"line":1631},[91,90428,90020],{"class":150},[91,90430,51412],{"class":101},[91,90432,421],{"class":150},[91,90434,51467],{"class":97},[91,90436,1268],{"class":101},[91,90438,90439],{"class":93,"line":1652},[91,90440,2165],{"class":101},[91,90442,90443,90445,90447],{"class":93,"line":1657},[91,90444,52392],{"class":101},[91,90446,5105],{"class":51275},[91,90448,51282],{"class":101},[91,90450,90451,90453,90455],{"class":93,"line":1671},[91,90452,51760],{"class":101},[91,90454,51309],{"class":51275},[91,90456,51282],{"class":101},[91,90458,90459],{"class":93,"line":1676},[91,90460,2378],{"emptyLinePlaceholder":17},[91,90462,90463,90465,90467],{"class":93,"line":1705},[91,90464,1012],{"class":101},[91,90466,51775],{"class":51275},[91,90468,51282],{"class":101},[91,90470,90471,90473,90475,90477,90479,90481,90483,90485],{"class":93,"line":1710},[91,90472,52119],{"class":101},[91,90474,51586],{"class":51275},[91,90476,53461],{"class":1941},[91,90478,147],{"class":101},[91,90480,53466],{"class":206},[91,90482,55289],{"class":101},[91,90484,51586],{"class":51275},[91,90486,51282],{"class":101},[91,90488,90489,90491,90493,90495,90497,90499,90501,90503],{"class":93,"line":1727},[91,90490,52119],{"class":101},[91,90492,51788],{"class":51275},[91,90494,55214],{"class":1941},[91,90496,147],{"class":101},[91,90498,88249],{"class":206},[91,90500,55289],{"class":101},[91,90502,51788],{"class":51275},[91,90504,51282],{"class":101},[91,90506,90507,90509,90511],{"class":93,"line":1732},[91,90508,52119],{"class":101},[91,90510,51788],{"class":51275},[91,90512,51282],{"class":101},[91,90514,90515,90517,90519,90521,90523,90525,90527,90529],{"class":93,"line":1737},[91,90516,11200],{"class":97},[91,90518,86908],{"class":150},[91,90520,13543],{"class":97},[91,90522,54371],{"class":101},[91,90524,54374],{"class":1941},[91,90526,102],{"class":101},[91,90528,90121],{"class":206},[91,90530,108],{"class":101},[91,90532,90533,90535,90537,90539],{"class":93,"line":1742},[91,90534,52194],{"class":97},[91,90536,9417],{"class":101},[91,90538,147],{"class":97},[91,90540,47308],{"class":150},[91,90542,90543,90545,90547],{"class":93,"line":1756},[91,90544,70059],{"class":97},[91,90546,90140],{"class":1941},[91,90548,10832],{"class":101},[91,90550,90551,90553,90555,90557],{"class":93,"line":1761},[91,90552,90147],{"class":101},[91,90554,147],{"class":97},[91,90556,3010],{"class":101},[91,90558,2680],{"class":97},[91,90560,90561],{"class":93,"line":2555},[91,90562,90158],{"class":160},[91,90564,90565],{"class":93,"line":2569},[91,90566,2165],{"class":101},[91,90568,90569],{"class":93,"line":2577},[91,90570,90167],{"class":160},[91,90572,90573],{"class":93,"line":2582},[91,90574,90575],{"class":160},"    \u002F\u002F 手写防抖函数\n",[91,90577,90578],{"class":93,"line":2588},[91,90579,90580],{"class":160},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[91,90582,90583],{"class":93,"line":2594},[91,90584,90585],{"class":160},"    \u002F\u002F 1.声明定时器变量\n",[91,90587,90588],{"class":93,"line":2599},[91,90589,90590],{"class":160},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[91,90592,90593],{"class":93,"line":7927},[91,90594,90595],{"class":160},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[91,90597,90598],{"class":93,"line":7951},[91,90599,90600],{"class":160},"    \u002F\u002F 4.定时器里面写函数调用\n",[91,90602,90603,90605,90608,90610,90613,90615,90617],{"class":93,"line":7956},[91,90604,70059],{"class":97},[91,90606,90607],{"class":1941}," debounce",[91,90609,102],{"class":101},[91,90611,90612],{"class":5195},"fn",[91,90614,12414],{"class":101},[91,90616,822],{"class":5195},[91,90618,12421],{"class":101},[91,90620,90621,90623],{"class":93,"line":7962},[91,90622,79747],{"class":97},[91,90624,90625],{"class":101}," timer\n",[91,90627,90628],{"class":93,"line":7989},[91,90629,90630],{"class":160},"      \u002F\u002F return 返回一个匿名函数\n",[91,90632,90633,90635,90637],{"class":93,"line":7994},[91,90634,73957],{"class":97},[91,90636,58893],{"class":97},[91,90638,54427],{"class":101},[91,90640,90641],{"class":93,"line":8000},[91,90642,90643],{"class":160},"        \u002F\u002F 这里边写第二三四步\n",[91,90645,90646,90648,90651,90654],{"class":93,"line":8012},[91,90647,2475],{"class":97},[91,90649,90650],{"class":101}," (timer) ",[91,90652,90653],{"class":1941},"clearTimeout",[91,90655,90656],{"class":101},"(timer)\n",[91,90658,90659,90662,90664,90667,90669,90671],{"class":93,"line":8024},[91,90660,90661],{"class":101},"        timer ",[91,90663,147],{"class":97},[91,90665,90666],{"class":1941}," setTimeout",[91,90668,102],{"class":101},[91,90670,54424],{"class":97},[91,90672,54427],{"class":101},[91,90674,90675,90678,90680],{"class":93,"line":8036},[91,90676,90677],{"class":1941},"          fn",[91,90679,13029],{"class":101},[91,90681,90682],{"class":160},"\u002F\u002F加小括号调用fn }, t)\n",[91,90684,90685],{"class":93,"line":9695},[91,90686,90687],{"class":101},"        }, t)\n",[91,90689,90690],{"class":93,"line":9720},[91,90691,52373],{"class":101},[91,90693,90694],{"class":93,"line":9743},[91,90695,2165],{"class":101},[91,90697,90698,90700,90702,90704,90706,90708,90710,90712,90714],{"class":93,"line":9767},[91,90699,90182],{"class":101},[91,90701,57788],{"class":1941},[91,90703,102],{"class":101},[91,90705,90189],{"class":206},[91,90707,12414],{"class":101},[91,90709,90195],{"class":1941},[91,90711,90198],{"class":101},[91,90713,65049],{"class":150},[91,90715,30472],{"class":101},[91,90717,90718],{"class":93,"line":9772},[91,90719,2378],{"emptyLinePlaceholder":17},[91,90721,90722],{"class":93,"line":9777},[91,90723,90724],{"class":160},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[91,90726,90727],{"class":93,"line":9782},[91,90728,90729],{"class":160},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[91,90731,90732],{"class":93,"line":9791},[91,90733,90734],{"class":160},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[91,90736,90737],{"class":93,"line":9796},[91,90738,90739],{"class":160},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[91,90741,90742,90744,90746],{"class":93,"line":9802},[91,90743,52392],{"class":101},[91,90745,51788],{"class":51275},[91,90747,51282],{"class":101},[91,90749,90750,90752,90754],{"class":93,"line":9823},[91,90751,51760],{"class":101},[91,90753,51775],{"class":51275},[91,90755,51282],{"class":101},[91,90757,90758],{"class":93,"line":9829},[91,90759,2378],{"emptyLinePlaceholder":17},[91,90761,90762,90764,90766],{"class":93,"line":9843},[91,90763,51760],{"class":101},[91,90765,50610],{"class":51275},[91,90767,51282],{"class":101},[63,90769,90771],{"id":90770},"_4172-节流","4.17.2 节流",[38,90773,90774],{},[1440,90775],{"alt":10,"src":90776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[38,90778,90779],{},[1440,90780],{"alt":10,"src":90781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[38,90783,90784],{},[251,90785,90786],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[38,90788,90789],{},"实现方式：",[1109,90791,90792],{},[49,90793,90794],{},"lodash 提供的节流函数来处理",[38,90796,90797],{},"_.throttle(func,[wait=0],[options=])",[38,90799,90800],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[83,90802,90804],{"className":50608,"code":90803,"language":50610,"meta":10,"style":10},"\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",[88,90805,90806,90816,90830,90834,90842,90856,90876,90888,90896,90902,90912,90924,90936,90946,90958,90968,90978,90990,90994,91002,91010,91014,91022,91040,91058,91066,91084,91094,91102,91112,91116,91120,91124,91129,91134,91155,91163,91171,91175],{"__ignoreMap":10},[91,90807,90808,90810,90812,90814],{"class":93,"line":94},[91,90809,51272],{"class":101},[91,90811,51276],{"class":51275},[91,90813,51279],{"class":1941},[91,90815,51282],{"class":101},[91,90817,90818,90820,90822,90824,90826,90828],{"class":93,"line":11},[91,90819,1012],{"class":101},[91,90821,50610],{"class":51275},[91,90823,51291],{"class":1941},[91,90825,147],{"class":101},[91,90827,51296],{"class":206},[91,90829,51282],{"class":101},[91,90831,90832],{"class":93,"line":1157},[91,90833,2378],{"emptyLinePlaceholder":17},[91,90835,90836,90838,90840],{"class":93,"line":1172},[91,90837,1012],{"class":101},[91,90839,51309],{"class":51275},[91,90841,51282],{"class":101},[91,90843,90844,90846,90848,90850,90852,90854],{"class":93,"line":1178},[91,90845,52119],{"class":101},[91,90847,51319],{"class":51275},[91,90849,51322],{"class":1941},[91,90851,147],{"class":101},[91,90853,51327],{"class":206},[91,90855,51282],{"class":101},[91,90857,90858,90860,90862,90864,90866,90868,90870,90872,90874],{"class":93,"line":1192},[91,90859,52119],{"class":101},[91,90861,51319],{"class":51275},[91,90863,14899],{"class":1941},[91,90865,147],{"class":101},[91,90867,51366],{"class":206},[91,90869,51346],{"class":1941},[91,90871,147],{"class":101},[91,90873,51373],{"class":206},[91,90875,51282],{"class":101},[91,90877,90878,90880,90882,90884,90886],{"class":93,"line":1198},[91,90879,52119],{"class":101},[91,90881,51382],{"class":51275},[91,90883,51385],{"class":101},[91,90885,51382],{"class":51275},[91,90887,51282],{"class":101},[91,90889,90890,90892,90894],{"class":93,"line":1289},[91,90891,52119],{"class":101},[91,90893,5105],{"class":51275},[91,90895,51282],{"class":101},[91,90897,90898,90900],{"class":93,"line":1295},[91,90899,54727],{"class":1941},[91,90901,15551],{"class":101},[91,90903,90904,90906,90908,90910],{"class":93,"line":1307},[91,90905,72571],{"class":150},[91,90907,51412],{"class":101},[91,90909,60480],{"class":150},[91,90911,1268],{"class":101},[91,90913,90914,90916,90918,90920,90922],{"class":93,"line":1590},[91,90915,54746],{"class":150},[91,90917,51412],{"class":101},[91,90919,1700],{"class":150},[91,90921,51467],{"class":97},[91,90923,1268],{"class":101},[91,90925,90926,90928,90930,90932,90934],{"class":93,"line":1595},[91,90927,54760],{"class":150},[91,90929,51412],{"class":101},[91,90931,1700],{"class":150},[91,90933,51467],{"class":97},[91,90935,1268],{"class":101},[91,90937,90938,90940,90942,90944],{"class":93,"line":1601},[91,90939,54859],{"class":150},[91,90941,51412],{"class":101},[91,90943,89981],{"class":150},[91,90945,1268],{"class":101},[91,90947,90948,90950,90952,90954,90956],{"class":93,"line":1606},[91,90949,54897],{"class":150},[91,90951,51412],{"class":101},[91,90953,927],{"class":150},[91,90955,51467],{"class":97},[91,90957,1268],{"class":101},[91,90959,90960,90962,90964,90966],{"class":93,"line":1620},[91,90961,57391],{"class":150},[91,90963,51412],{"class":101},[91,90965,60817],{"class":150},[91,90967,1268],{"class":101},[91,90969,90970,90972,90974,90976],{"class":93,"line":1625},[91,90971,57261],{"class":150},[91,90973,51412],{"class":101},[91,90975,51567],{"class":150},[91,90977,1268],{"class":101},[91,90979,90980,90982,90984,90986,90988],{"class":93,"line":1631},[91,90981,90020],{"class":150},[91,90983,51412],{"class":101},[91,90985,421],{"class":150},[91,90987,51467],{"class":97},[91,90989,1268],{"class":101},[91,90991,90992],{"class":93,"line":1652},[91,90993,2165],{"class":101},[91,90995,90996,90998,91000],{"class":93,"line":1657},[91,90997,52392],{"class":101},[91,90999,5105],{"class":51275},[91,91001,51282],{"class":101},[91,91003,91004,91006,91008],{"class":93,"line":1671},[91,91005,51760],{"class":101},[91,91007,51309],{"class":51275},[91,91009,51282],{"class":101},[91,91011,91012],{"class":93,"line":1676},[91,91013,2378],{"emptyLinePlaceholder":17},[91,91015,91016,91018,91020],{"class":93,"line":1705},[91,91017,1012],{"class":101},[91,91019,51775],{"class":51275},[91,91021,51282],{"class":101},[91,91023,91024,91026,91028,91030,91032,91034,91036,91038],{"class":93,"line":1710},[91,91025,52119],{"class":101},[91,91027,51586],{"class":51275},[91,91029,53461],{"class":1941},[91,91031,147],{"class":101},[91,91033,53466],{"class":206},[91,91035,55289],{"class":101},[91,91037,51586],{"class":51275},[91,91039,51282],{"class":101},[91,91041,91042,91044,91046,91048,91050,91052,91054,91056],{"class":93,"line":1727},[91,91043,52119],{"class":101},[91,91045,51788],{"class":51275},[91,91047,55214],{"class":1941},[91,91049,147],{"class":101},[91,91051,88249],{"class":206},[91,91053,55289],{"class":101},[91,91055,51788],{"class":51275},[91,91057,51282],{"class":101},[91,91059,91060,91062,91064],{"class":93,"line":1732},[91,91061,52119],{"class":101},[91,91063,51788],{"class":51275},[91,91065,51282],{"class":101},[91,91067,91068,91070,91072,91074,91076,91078,91080,91082],{"class":93,"line":1737},[91,91069,11200],{"class":97},[91,91071,86908],{"class":150},[91,91073,13543],{"class":97},[91,91075,54371],{"class":101},[91,91077,54374],{"class":1941},[91,91079,102],{"class":101},[91,91081,90121],{"class":206},[91,91083,108],{"class":101},[91,91085,91086,91088,91090,91092],{"class":93,"line":1742},[91,91087,52194],{"class":97},[91,91089,9417],{"class":101},[91,91091,147],{"class":97},[91,91093,47308],{"class":150},[91,91095,91096,91098,91100],{"class":93,"line":1756},[91,91097,70059],{"class":97},[91,91099,90140],{"class":1941},[91,91101,10832],{"class":101},[91,91103,91104,91106,91108,91110],{"class":93,"line":1761},[91,91105,90147],{"class":101},[91,91107,147],{"class":97},[91,91109,3010],{"class":101},[91,91111,2680],{"class":97},[91,91113,91114],{"class":93,"line":2555},[91,91115,90158],{"class":160},[91,91117,91118],{"class":93,"line":2569},[91,91119,2165],{"class":101},[91,91121,91122],{"class":93,"line":2577},[91,91123,90167],{"class":160},[91,91125,91126],{"class":93,"line":2582},[91,91127,91128],{"class":160},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[91,91130,91131],{"class":93,"line":2588},[91,91132,91133],{"class":160},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[91,91135,91136,91138,91140,91142,91144,91146,91149,91151,91153],{"class":93,"line":2594},[91,91137,90182],{"class":101},[91,91139,57788],{"class":1941},[91,91141,102],{"class":101},[91,91143,90189],{"class":206},[91,91145,90192],{"class":101},[91,91147,91148],{"class":1941},"throttle",[91,91150,90198],{"class":101},[91,91152,65049],{"class":150},[91,91154,30472],{"class":101},[91,91156,91157,91159,91161],{"class":93,"line":2599},[91,91158,52392],{"class":101},[91,91160,51788],{"class":51275},[91,91162,51282],{"class":101},[91,91164,91165,91167,91169],{"class":93,"line":7927},[91,91166,51760],{"class":101},[91,91168,51775],{"class":51275},[91,91170,51282],{"class":101},[91,91172,91173],{"class":93,"line":7951},[91,91174,2378],{"emptyLinePlaceholder":17},[91,91176,91177,91179,91181],{"class":93,"line":7956},[91,91178,51760],{"class":101},[91,91180,50610],{"class":51275},[91,91182,51282],{"class":101},[1109,91184,91185],{},[49,91186,91187],{},"手写一个节流函数来处理",[38,91189,70927],{},[38,91191,90241],{},[38,91193,91194],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[38,91196,91197],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[83,91199,91201],{"className":50608,"code":91200,"language":50610,"meta":10,"style":10},"\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",[88,91202,91203,91213,91227,91231,91239,91253,91273,91285,91293,91299,91309,91321,91333,91343,91355,91365,91375,91387,91391,91399,91407,91411,91419,91437,91455,91463,91481,91491,91499,91509,91513,91517,91521,91526,91531,91536,91541,91546,91551,91568,91574,91582,91593,91608,91615,91620,91625,91635,91640,91645,91650,91654,91658,91662,91682,91690,91698,91702],{"__ignoreMap":10},[91,91204,91205,91207,91209,91211],{"class":93,"line":94},[91,91206,51272],{"class":101},[91,91208,51276],{"class":51275},[91,91210,51279],{"class":1941},[91,91212,51282],{"class":101},[91,91214,91215,91217,91219,91221,91223,91225],{"class":93,"line":11},[91,91216,1012],{"class":101},[91,91218,50610],{"class":51275},[91,91220,51291],{"class":1941},[91,91222,147],{"class":101},[91,91224,51296],{"class":206},[91,91226,51282],{"class":101},[91,91228,91229],{"class":93,"line":1157},[91,91230,2378],{"emptyLinePlaceholder":17},[91,91232,91233,91235,91237],{"class":93,"line":1172},[91,91234,1012],{"class":101},[91,91236,51309],{"class":51275},[91,91238,51282],{"class":101},[91,91240,91241,91243,91245,91247,91249,91251],{"class":93,"line":1178},[91,91242,52119],{"class":101},[91,91244,51319],{"class":51275},[91,91246,51322],{"class":1941},[91,91248,147],{"class":101},[91,91250,51327],{"class":206},[91,91252,51282],{"class":101},[91,91254,91255,91257,91259,91261,91263,91265,91267,91269,91271],{"class":93,"line":1192},[91,91256,52119],{"class":101},[91,91258,51319],{"class":51275},[91,91260,14899],{"class":1941},[91,91262,147],{"class":101},[91,91264,51366],{"class":206},[91,91266,51346],{"class":1941},[91,91268,147],{"class":101},[91,91270,51373],{"class":206},[91,91272,51282],{"class":101},[91,91274,91275,91277,91279,91281,91283],{"class":93,"line":1198},[91,91276,52119],{"class":101},[91,91278,51382],{"class":51275},[91,91280,51385],{"class":101},[91,91282,51382],{"class":51275},[91,91284,51282],{"class":101},[91,91286,91287,91289,91291],{"class":93,"line":1289},[91,91288,52119],{"class":101},[91,91290,5105],{"class":51275},[91,91292,51282],{"class":101},[91,91294,91295,91297],{"class":93,"line":1295},[91,91296,54727],{"class":1941},[91,91298,15551],{"class":101},[91,91300,91301,91303,91305,91307],{"class":93,"line":1307},[91,91302,72571],{"class":150},[91,91304,51412],{"class":101},[91,91306,60480],{"class":150},[91,91308,1268],{"class":101},[91,91310,91311,91313,91315,91317,91319],{"class":93,"line":1590},[91,91312,54746],{"class":150},[91,91314,51412],{"class":101},[91,91316,1700],{"class":150},[91,91318,51467],{"class":97},[91,91320,1268],{"class":101},[91,91322,91323,91325,91327,91329,91331],{"class":93,"line":1595},[91,91324,54760],{"class":150},[91,91326,51412],{"class":101},[91,91328,1700],{"class":150},[91,91330,51467],{"class":97},[91,91332,1268],{"class":101},[91,91334,91335,91337,91339,91341],{"class":93,"line":1601},[91,91336,54859],{"class":150},[91,91338,51412],{"class":101},[91,91340,89981],{"class":150},[91,91342,1268],{"class":101},[91,91344,91345,91347,91349,91351,91353],{"class":93,"line":1606},[91,91346,54897],{"class":150},[91,91348,51412],{"class":101},[91,91350,927],{"class":150},[91,91352,51467],{"class":97},[91,91354,1268],{"class":101},[91,91356,91357,91359,91361,91363],{"class":93,"line":1620},[91,91358,57391],{"class":150},[91,91360,51412],{"class":101},[91,91362,60817],{"class":150},[91,91364,1268],{"class":101},[91,91366,91367,91369,91371,91373],{"class":93,"line":1625},[91,91368,57261],{"class":150},[91,91370,51412],{"class":101},[91,91372,51567],{"class":150},[91,91374,1268],{"class":101},[91,91376,91377,91379,91381,91383,91385],{"class":93,"line":1631},[91,91378,90020],{"class":150},[91,91380,51412],{"class":101},[91,91382,421],{"class":150},[91,91384,51467],{"class":97},[91,91386,1268],{"class":101},[91,91388,91389],{"class":93,"line":1652},[91,91390,2165],{"class":101},[91,91392,91393,91395,91397],{"class":93,"line":1657},[91,91394,52392],{"class":101},[91,91396,5105],{"class":51275},[91,91398,51282],{"class":101},[91,91400,91401,91403,91405],{"class":93,"line":1671},[91,91402,51760],{"class":101},[91,91404,51309],{"class":51275},[91,91406,51282],{"class":101},[91,91408,91409],{"class":93,"line":1676},[91,91410,2378],{"emptyLinePlaceholder":17},[91,91412,91413,91415,91417],{"class":93,"line":1705},[91,91414,1012],{"class":101},[91,91416,51775],{"class":51275},[91,91418,51282],{"class":101},[91,91420,91421,91423,91425,91427,91429,91431,91433,91435],{"class":93,"line":1710},[91,91422,52119],{"class":101},[91,91424,51586],{"class":51275},[91,91426,53461],{"class":1941},[91,91428,147],{"class":101},[91,91430,53466],{"class":206},[91,91432,55289],{"class":101},[91,91434,51586],{"class":51275},[91,91436,51282],{"class":101},[91,91438,91439,91441,91443,91445,91447,91449,91451,91453],{"class":93,"line":1727},[91,91440,52119],{"class":101},[91,91442,51788],{"class":51275},[91,91444,55214],{"class":1941},[91,91446,147],{"class":101},[91,91448,88249],{"class":206},[91,91450,55289],{"class":101},[91,91452,51788],{"class":51275},[91,91454,51282],{"class":101},[91,91456,91457,91459,91461],{"class":93,"line":1732},[91,91458,52119],{"class":101},[91,91460,51788],{"class":51275},[91,91462,51282],{"class":101},[91,91464,91465,91467,91469,91471,91473,91475,91477,91479],{"class":93,"line":1737},[91,91466,11200],{"class":97},[91,91468,86908],{"class":150},[91,91470,13543],{"class":97},[91,91472,54371],{"class":101},[91,91474,54374],{"class":1941},[91,91476,102],{"class":101},[91,91478,90121],{"class":206},[91,91480,108],{"class":101},[91,91482,91483,91485,91487,91489],{"class":93,"line":1742},[91,91484,52194],{"class":97},[91,91486,9417],{"class":101},[91,91488,147],{"class":97},[91,91490,47308],{"class":150},[91,91492,91493,91495,91497],{"class":93,"line":1756},[91,91494,70059],{"class":97},[91,91496,90140],{"class":1941},[91,91498,10832],{"class":101},[91,91500,91501,91503,91505,91507],{"class":93,"line":1761},[91,91502,90147],{"class":101},[91,91504,147],{"class":97},[91,91506,3010],{"class":101},[91,91508,2680],{"class":97},[91,91510,91511],{"class":93,"line":2555},[91,91512,90158],{"class":160},[91,91514,91515],{"class":93,"line":2569},[91,91516,2165],{"class":101},[91,91518,91519],{"class":93,"line":2577},[91,91520,90167],{"class":160},[91,91522,91523],{"class":93,"line":2582},[91,91524,91525],{"class":160},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[91,91527,91528],{"class":93,"line":2588},[91,91529,91530],{"class":160},"    \u002F\u002F 1.声明一个定时器变量\n",[91,91532,91533],{"class":93,"line":2594},[91,91534,91535],{"class":160},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[91,91537,91538],{"class":93,"line":2599},[91,91539,91540],{"class":160},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[91,91542,91543],{"class":93,"line":7927},[91,91544,91545],{"class":160},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[91,91547,91548],{"class":93,"line":7951},[91,91549,91550],{"class":160},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[91,91552,91553,91555,91558,91560,91562,91564,91566],{"class":93,"line":7956},[91,91554,70059],{"class":97},[91,91556,91557],{"class":1941}," throttle",[91,91559,102],{"class":101},[91,91561,90612],{"class":5195},[91,91563,12414],{"class":101},[91,91565,822],{"class":5195},[91,91567,12421],{"class":101},[91,91569,91570,91572],{"class":93,"line":7962},[91,91571,79747],{"class":97},[91,91573,90625],{"class":101},[91,91575,91576,91578,91580],{"class":93,"line":7989},[91,91577,73957],{"class":97},[91,91579,58893],{"class":97},[91,91581,54427],{"class":101},[91,91583,91584,91586,91588,91590],{"class":93,"line":7994},[91,91585,2475],{"class":97},[91,91587,1636],{"class":101},[91,91589,328],{"class":97},[91,91591,91592],{"class":101},"timer) {\n",[91,91594,91595,91598,91600,91602,91604,91606],{"class":93,"line":8000},[91,91596,91597],{"class":101},"          timer ",[91,91599,147],{"class":97},[91,91601,90666],{"class":1941},[91,91603,102],{"class":101},[91,91605,54424],{"class":97},[91,91607,54427],{"class":101},[91,91609,91610,91613],{"class":93,"line":8012},[91,91611,91612],{"class":1941},"            fn",[91,91614,1954],{"class":101},[91,91616,91617],{"class":93,"line":8024},[91,91618,91619],{"class":160},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[91,91621,91622],{"class":93,"line":8036},[91,91623,91624],{"class":160},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[91,91626,91627,91630,91632],{"class":93,"line":9695},[91,91628,91629],{"class":101},"            timer ",[91,91631,147],{"class":97},[91,91633,91634],{"class":150}," null\n",[91,91636,91637],{"class":93,"line":9720},[91,91638,91639],{"class":160},"            \u002F\u002F 不能用clearTimeout(timer)\n",[91,91641,91642],{"class":93,"line":9743},[91,91643,91644],{"class":160},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[91,91646,91647],{"class":93,"line":9767},[91,91648,91649],{"class":101},"          }, t)\n",[91,91651,91652],{"class":93,"line":9772},[91,91653,2507],{"class":101},[91,91655,91656],{"class":93,"line":9777},[91,91657,52373],{"class":101},[91,91659,91660],{"class":93,"line":9782},[91,91661,2165],{"class":101},[91,91663,91664,91666,91668,91670,91672,91674,91676,91678,91680],{"class":93,"line":9791},[91,91665,90182],{"class":101},[91,91667,57788],{"class":1941},[91,91669,102],{"class":101},[91,91671,90189],{"class":206},[91,91673,12414],{"class":101},[91,91675,91148],{"class":1941},[91,91677,90198],{"class":101},[91,91679,65049],{"class":150},[91,91681,30472],{"class":101},[91,91683,91684,91686,91688],{"class":93,"line":9796},[91,91685,52392],{"class":101},[91,91687,51788],{"class":51275},[91,91689,51282],{"class":101},[91,91691,91692,91694,91696],{"class":93,"line":9802},[91,91693,51760],{"class":101},[91,91695,51775],{"class":51275},[91,91697,51282],{"class":101},[91,91699,91700],{"class":93,"line":9823},[91,91701,2378],{"emptyLinePlaceholder":17},[91,91703,91704,91706,91708],{"class":93,"line":9829},[91,91705,51760],{"class":101},[91,91707,50610],{"class":51275},[91,91709,51282],{"class":101},[63,91711,91713],{"id":91712},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[83,91715,91717],{"className":53042,"code":91716,"language":53044,"meta":10,"style":10},"\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",[88,91718,91719,91727,91735,91740,91745,91750,91755,91759,91767],{"__ignoreMap":10},[91,91720,91721,91723,91725],{"class":93,"line":94},[91,91722,1012],{"class":101},[91,91724,51775],{"class":51275},[91,91726,51282],{"class":101},[91,91728,91729,91731,91733],{"class":93,"line":11},[91,91730,52119],{"class":101},[91,91732,51788],{"class":51275},[91,91734,51282],{"class":101},[91,91736,91737],{"class":93,"line":1157},[91,91738,91739],{"class":101},"    let timer = null\n",[91,91741,91742],{"class":93,"line":1172},[91,91743,91744],{"class":101},"    timer = setTimeout(() => {\n",[91,91746,91747],{"class":93,"line":1178},[91,91748,91749],{"class":101},"      clearTimeout(timer)\n",[91,91751,91752],{"class":93,"line":1192},[91,91753,91754],{"class":101},"      console.log(timer)\n",[91,91756,91757],{"class":93,"line":1198},[91,91758,60200],{"class":101},[91,91760,91761,91763,91765],{"class":93,"line":1289},[91,91762,52392],{"class":101},[91,91764,51788],{"class":51275},[91,91766,51282],{"class":101},[91,91768,91769,91771,91773],{"class":93,"line":1295},[91,91770,51760],{"class":101},[91,91772,51775],{"class":51275},[91,91774,51282],{"class":101},[38,91776,91777],{},"输出为1",[38,91779,91780],{},"在开启的定时器里边写清除定时器",[38,91782,91783],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[63,91785,91787],{"id":91786},"_4174-节流综合案例","4.17.4 节流综合案例",[38,91789,91790],{},"页面打开，可以记录上一次的视频播放位置",[38,91792,91793],{},[1440,91794],{"alt":10,"src":91795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[38,91797,91798],{},[1440,91799],{"alt":10,"src":91800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[83,91802,91804],{"className":50608,"code":91803,"language":50610,"meta":10,"style":10},"\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",[88,91805,91806,91816,91830,91834,91842,91856,91876,91896,91918,91931,91939,91945,91955,91965,91975,91979,91983,91990,92003,92015,92019,92023,92033,92045,92059,92063,92067,92074,92084,92097,92109,92119,92129,92145,92157,92161,92165,92173,92183,92195,92205,92215,92225,92229,92233,92243,92254,92258,92266,92274,92278,92286,92301,92316,92331,92352,92360,92368,92383,92405,92413,92428,92454,92480,92506,92514,92522,92541,92549,92554,92573,92578,92596,92601,92606,92614,92619,92633,92641,92646,92663,92667,92672,92694,92698,92706,92714,92718],{"__ignoreMap":10},[91,91807,91808,91810,91812,91814],{"class":93,"line":94},[91,91809,51272],{"class":101},[91,91811,51276],{"class":51275},[91,91813,51279],{"class":1941},[91,91815,51282],{"class":101},[91,91817,91818,91820,91822,91824,91826,91828],{"class":93,"line":11},[91,91819,1012],{"class":101},[91,91821,50610],{"class":51275},[91,91823,51291],{"class":1941},[91,91825,147],{"class":101},[91,91827,51296],{"class":206},[91,91829,51282],{"class":101},[91,91831,91832],{"class":93,"line":1157},[91,91833,2378],{"emptyLinePlaceholder":17},[91,91835,91836,91838,91840],{"class":93,"line":1172},[91,91837,1012],{"class":101},[91,91839,51309],{"class":51275},[91,91841,51282],{"class":101},[91,91843,91844,91846,91848,91850,91852,91854],{"class":93,"line":1178},[91,91845,52119],{"class":101},[91,91847,51319],{"class":51275},[91,91849,51322],{"class":1941},[91,91851,147],{"class":101},[91,91853,51327],{"class":206},[91,91855,59102],{"class":101},[91,91857,91858,91860,91862,91864,91866,91868,91870,91872,91874],{"class":93,"line":1192},[91,91859,52119],{"class":101},[91,91861,51319],{"class":51275},[91,91863,51338],{"class":1941},[91,91865,147],{"class":101},[91,91867,51343],{"class":206},[91,91869,51346],{"class":1941},[91,91871,147],{"class":101},[91,91873,51351],{"class":206},[91,91875,59102],{"class":101},[91,91877,91878,91880,91882,91884,91886,91888,91890,91892,91894],{"class":93,"line":1198},[91,91879,52119],{"class":101},[91,91881,51319],{"class":51275},[91,91883,14899],{"class":1941},[91,91885,147],{"class":101},[91,91887,51366],{"class":206},[91,91889,51346],{"class":1941},[91,91891,147],{"class":101},[91,91893,51373],{"class":206},[91,91895,59102],{"class":101},[91,91897,91898,91900,91902,91904,91906,91909,91911,91913,91916],{"class":93,"line":1289},[91,91899,52119],{"class":101},[91,91901,51319],{"class":51275},[91,91903,14899],{"class":1941},[91,91905,147],{"class":101},[91,91907,91908],{"class":206},"\"referrer\"",[91,91910,51346],{"class":1941},[91,91912,147],{"class":101},[91,91914,91915],{"class":206},"\"never\"",[91,91917,59102],{"class":101},[91,91919,91920,91922,91924,91927,91929],{"class":93,"line":1295},[91,91921,52119],{"class":101},[91,91923,51382],{"class":51275},[91,91925,91926],{"class":101},">综合案例\u003C\u002F",[91,91928,51382],{"class":51275},[91,91930,51282],{"class":101},[91,91932,91933,91935,91937],{"class":93,"line":1307},[91,91934,52119],{"class":101},[91,91936,5105],{"class":51275},[91,91938,51282],{"class":101},[91,91940,91941,91943],{"class":93,"line":1590},[91,91942,6382],{"class":51275},[91,91944,15551],{"class":101},[91,91946,91947,91949,91951,91953],{"class":93,"line":1595},[91,91948,54670],{"class":150},[91,91950,51412],{"class":101},[91,91952,293],{"class":150},[91,91954,1268],{"class":101},[91,91956,91957,91959,91961,91963],{"class":93,"line":1601},[91,91958,54681],{"class":150},[91,91960,51412],{"class":101},[91,91962,293],{"class":150},[91,91964,1268],{"class":101},[91,91966,91967,91969,91971,91973],{"class":93,"line":1606},[91,91968,72571],{"class":150},[91,91970,51412],{"class":101},[91,91972,60480],{"class":150},[91,91974,1268],{"class":101},[91,91976,91977],{"class":93,"line":1620},[91,91978,2165],{"class":101},[91,91980,91981],{"class":93,"line":1625},[91,91982,2378],{"emptyLinePlaceholder":17},[91,91984,91985,91988],{"class":93,"line":1631},[91,91986,91987],{"class":1941},"    .container",[91,91989,15551],{"class":101},[91,91991,91992,91994,91996,91999,92001],{"class":93,"line":1652},[91,91993,54746],{"class":150},[91,91995,51412],{"class":101},[91,91997,91998],{"class":150},"1200",[91,92000,51467],{"class":97},[91,92002,1268],{"class":101},[91,92004,92005,92007,92009,92011,92013],{"class":93,"line":1657},[91,92006,54681],{"class":150},[91,92008,51412],{"class":101},[91,92010,293],{"class":150},[91,92012,51531],{"class":150},[91,92014,1268],{"class":101},[91,92016,92017],{"class":93,"line":1671},[91,92018,2165],{"class":101},[91,92020,92021],{"class":93,"line":1676},[91,92022,2378],{"emptyLinePlaceholder":17},[91,92024,92025,92028,92031],{"class":93,"line":1705},[91,92026,92027],{"class":1941},"    .video",[91,92029,92030],{"class":51275}," video",[91,92032,15551],{"class":101},[91,92034,92035,92037,92039,92041,92043],{"class":93,"line":1710},[91,92036,54746],{"class":150},[91,92038,51412],{"class":101},[91,92040,413],{"class":150},[91,92042,430],{"class":97},[91,92044,1268],{"class":101},[91,92046,92047,92049,92051,92053,92055,92057],{"class":93,"line":1727},[91,92048,54670],{"class":150},[91,92050,51412],{"class":101},[91,92052,802],{"class":150},[91,92054,51467],{"class":97},[91,92056,4071],{"class":150},[91,92058,1268],{"class":101},[91,92060,92061],{"class":93,"line":1732},[91,92062,2165],{"class":101},[91,92064,92065],{"class":93,"line":1737},[91,92066,2378],{"emptyLinePlaceholder":17},[91,92068,92069,92072],{"class":93,"line":1742},[91,92070,92071],{"class":1941},"    .elevator",[91,92073,15551],{"class":101},[91,92075,92076,92078,92080,92082],{"class":93,"line":1756},[91,92077,54734],{"class":150},[91,92079,51412],{"class":101},[91,92081,86208],{"class":150},[91,92083,1268],{"class":101},[91,92085,92086,92088,92090,92093,92095],{"class":93,"line":1761},[91,92087,54922],{"class":150},[91,92089,51412],{"class":101},[91,92091,92092],{"class":150},"280",[91,92094,51467],{"class":97},[91,92096,1268],{"class":101},[91,92098,92099,92101,92103,92105,92107],{"class":93,"line":2555},[91,92100,86402],{"class":150},[91,92102,51412],{"class":101},[91,92104,802],{"class":150},[91,92106,51467],{"class":97},[91,92108,1268],{"class":101},[91,92110,92111,92113,92115,92117],{"class":93,"line":2569},[91,92112,86215],{"class":150},[91,92114,51412],{"class":101},[91,92116,86220],{"class":150},[91,92118,1268],{"class":101},[91,92120,92121,92123,92125,92127],{"class":93,"line":2577},[91,92122,61696],{"class":150},[91,92124,51412],{"class":101},[91,92126,60817],{"class":150},[91,92128,1268],{"class":101},[91,92130,92131,92133,92135,92137,92139,92141,92143],{"class":93,"line":2582},[91,92132,61952],{"class":150},[91,92134,51412],{"class":101},[91,92136,319],{"class":150},[91,92138,51467],{"class":97},[91,92140,51496],{"class":150},[91,92142,62219],{"class":150},[91,92144,1268],{"class":101},[91,92146,92147,92149,92151,92153,92155],{"class":93,"line":2588},[91,92148,54746],{"class":150},[91,92150,51412],{"class":101},[91,92152,1009],{"class":150},[91,92154,51467],{"class":97},[91,92156,1268],{"class":101},[91,92158,92159],{"class":93,"line":2594},[91,92160,2165],{"class":101},[91,92162,92163],{"class":93,"line":2599},[91,92164,2378],{"emptyLinePlaceholder":17},[91,92166,92167,92169,92171],{"class":93,"line":7927},[91,92168,92071],{"class":1941},[91,92170,1376],{"class":51275},[91,92172,15551],{"class":101},[91,92174,92175,92177,92179,92181],{"class":93,"line":7951},[91,92176,54984],{"class":150},[91,92178,51412],{"class":101},[91,92180,60844],{"class":150},[91,92182,1268],{"class":101},[91,92184,92185,92187,92189,92191,92193],{"class":93,"line":7956},[91,92186,54670],{"class":150},[91,92188,51412],{"class":101},[91,92190,548],{"class":150},[91,92192,51467],{"class":97},[91,92194,1268],{"class":101},[91,92196,92197,92199,92201,92203],{"class":93,"line":7962},[91,92198,63945],{"class":150},[91,92200,51412],{"class":101},[91,92202,54712],{"class":150},[91,92204,1268],{"class":101},[91,92206,92207,92209,92211,92213],{"class":93,"line":7989},[91,92208,57261],{"class":150},[91,92210,51412],{"class":101},[91,92212,51567],{"class":150},[91,92214,1268],{"class":101},[91,92216,92217,92219,92221,92223],{"class":93,"line":7994},[91,92218,57391],{"class":150},[91,92220,51412],{"class":101},[91,92222,62045],{"class":150},[91,92224,1268],{"class":101},[91,92226,92227],{"class":93,"line":8000},[91,92228,2165],{"class":101},[91,92230,92231],{"class":93,"line":8012},[91,92232,2378],{"emptyLinePlaceholder":17},[91,92234,92235,92237,92239,92241],{"class":93,"line":8024},[91,92236,92071],{"class":1941},[91,92238,1376],{"class":51275},[91,92240,63999],{"class":1941},[91,92242,15551],{"class":101},[91,92244,92245,92247,92249,92252],{"class":93,"line":8036},[91,92246,57391],{"class":150},[91,92248,51412],{"class":101},[91,92250,92251],{"class":150},"#1286ff",[91,92253,1268],{"class":101},[91,92255,92256],{"class":93,"line":9695},[91,92257,2165],{"class":101},[91,92259,92260,92262,92264],{"class":93,"line":9720},[91,92261,52392],{"class":101},[91,92263,5105],{"class":51275},[91,92265,51282],{"class":101},[91,92267,92268,92270,92272],{"class":93,"line":9743},[91,92269,51760],{"class":101},[91,92271,51309],{"class":51275},[91,92273,51282],{"class":101},[91,92275,92276],{"class":93,"line":9767},[91,92277,2378],{"emptyLinePlaceholder":17},[91,92279,92280,92282,92284],{"class":93,"line":9772},[91,92281,1012],{"class":101},[91,92283,51775],{"class":51275},[91,92285,51282],{"class":101},[91,92287,92288,92290,92292,92294,92296,92299],{"class":93,"line":9777},[91,92289,52119],{"class":101},[91,92291,51586],{"class":51275},[91,92293,53461],{"class":1941},[91,92295,147],{"class":101},[91,92297,92298],{"class":206},"\"container\"",[91,92300,51282],{"class":101},[91,92302,92303,92305,92307,92309,92311,92314],{"class":93,"line":9782},[91,92304,51316],{"class":101},[91,92306,51586],{"class":51275},[91,92308,53461],{"class":1941},[91,92310,147],{"class":101},[91,92312,92313],{"class":206},"\"header\"",[91,92315,51282],{"class":101},[91,92317,92318,92320,92322,92324,92326,92329],{"class":93,"line":9791},[91,92319,55209],{"class":101},[91,92321,340],{"class":51275},[91,92323,61032],{"class":1941},[91,92325,147],{"class":101},[91,92327,92328],{"class":206},"\"http:\u002F\u002Fpip.itcast.cn\"",[91,92330,51282],{"class":101},[91,92332,92333,92335,92337,92339,92341,92344,92346,92348,92350],{"class":93,"line":9796},[91,92334,55277],{"class":101},[91,92336,1440],{"class":51275},[91,92338,55214],{"class":1941},[91,92340,147],{"class":101},[91,92342,92343],{"class":206},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[91,92345,55222],{"class":1941},[91,92347,147],{"class":101},[91,92349,7631],{"class":206},[91,92351,59102],{"class":101},[91,92353,92354,92356,92358],{"class":93,"line":9802},[91,92355,55382],{"class":101},[91,92357,340],{"class":51275},[91,92359,51282],{"class":101},[91,92361,92362,92364,92366],{"class":93,"line":9823},[91,92363,51751],{"class":101},[91,92365,51586],{"class":51275},[91,92367,51282],{"class":101},[91,92369,92370,92372,92374,92376,92378,92381],{"class":93,"line":9829},[91,92371,51316],{"class":101},[91,92373,51586],{"class":51275},[91,92375,53461],{"class":1941},[91,92377,147],{"class":101},[91,92379,92380],{"class":206},"\"video\"",[91,92382,51282],{"class":101},[91,92384,92385,92387,92389,92391,92393,92396,92399,92401,92403],{"class":93,"line":9843},[91,92386,55209],{"class":101},[91,92388,28158],{"class":51275},[91,92390,55214],{"class":1941},[91,92392,147],{"class":101},[91,92394,92395],{"class":206},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[91,92397,92398],{"class":1941}," controls",[91,92400,55289],{"class":101},[91,92402,28158],{"class":51275},[91,92404,51282],{"class":101},[91,92406,92407,92409,92411],{"class":93,"line":9849},[91,92408,51751],{"class":101},[91,92410,51586],{"class":51275},[91,92412,51282],{"class":101},[91,92414,92415,92417,92419,92421,92423,92426],{"class":93,"line":9876},[91,92416,51316],{"class":101},[91,92418,51586],{"class":51275},[91,92420,53461],{"class":1941},[91,92422,147],{"class":101},[91,92424,92425],{"class":206},"\"elevator\"",[91,92427,51282],{"class":101},[91,92429,92430,92432,92434,92436,92438,92440,92443,92445,92447,92450,92452],{"class":93,"line":9885},[91,92431,55209],{"class":101},[91,92433,340],{"class":51275},[91,92435,61032],{"class":1941},[91,92437,147],{"class":101},[91,92439,64211],{"class":206},[91,92441,92442],{"class":1941}," data-ref",[91,92444,147],{"class":101},[91,92446,92380],{"class":206},[91,92448,92449],{"class":101},">视频介绍\u003C\u002F",[91,92451,340],{"class":51275},[91,92453,51282],{"class":101},[91,92455,92456,92458,92460,92462,92464,92466,92468,92470,92473,92476,92478],{"class":93,"line":9891},[91,92457,55209],{"class":101},[91,92459,340],{"class":51275},[91,92461,61032],{"class":1941},[91,92463,147],{"class":101},[91,92465,64211],{"class":206},[91,92467,92442],{"class":1941},[91,92469,147],{"class":101},[91,92471,92472],{"class":206},"\"intro\"",[91,92474,92475],{"class":101},">课程简介\u003C\u002F",[91,92477,340],{"class":51275},[91,92479,51282],{"class":101},[91,92481,92482,92484,92486,92488,92490,92492,92494,92496,92499,92502,92504],{"class":93,"line":9899},[91,92483,55209],{"class":101},[91,92485,340],{"class":51275},[91,92487,61032],{"class":1941},[91,92489,147],{"class":101},[91,92491,64211],{"class":206},[91,92493,92442],{"class":1941},[91,92495,147],{"class":101},[91,92497,92498],{"class":206},"\"outline\"",[91,92500,92501],{"class":101},">评论列表\u003C\u002F",[91,92503,340],{"class":51275},[91,92505,51282],{"class":101},[91,92507,92508,92510,92512],{"class":93,"line":9904},[91,92509,51751],{"class":101},[91,92511,51586],{"class":51275},[91,92513,51282],{"class":101},[91,92515,92516,92518,92520],{"class":93,"line":16583},[91,92517,52392],{"class":101},[91,92519,51586],{"class":51275},[91,92521,51282],{"class":101},[91,92523,92524,92526,92528,92530,92532,92535,92537,92539],{"class":93,"line":16589},[91,92525,52119],{"class":101},[91,92527,51788],{"class":51275},[91,92529,55214],{"class":1941},[91,92531,147],{"class":101},[91,92533,92534],{"class":206},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[91,92536,55289],{"class":101},[91,92538,51788],{"class":51275},[91,92540,51282],{"class":101},[91,92542,92543,92545,92547],{"class":93,"line":16612},[91,92544,52119],{"class":101},[91,92546,51788],{"class":51275},[91,92548,51282],{"class":101},[91,92550,92551],{"class":93,"line":16618},[91,92552,92553],{"class":160},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[91,92555,92556,92558,92560,92562,92564,92566,92568,92571],{"class":93,"line":16641},[91,92557,11200],{"class":97},[91,92559,92030],{"class":150},[91,92561,13543],{"class":97},[91,92563,54371],{"class":101},[91,92565,54374],{"class":1941},[91,92567,102],{"class":101},[91,92569,92570],{"class":206},"'video'",[91,92572,108],{"class":101},[91,92574,92575],{"class":93,"line":16655},[91,92576,92577],{"class":160},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[91,92579,92580,92583,92585,92587,92589,92592,92594],{"class":93,"line":16675},[91,92581,92582],{"class":101},"    video.ontimeupdate ",[91,92584,147],{"class":97},[91,92586,88330],{"class":101},[91,92588,91148],{"class":1941},[91,92590,92591],{"class":101},"(() ",[91,92593,84697],{"class":97},[91,92595,15551],{"class":101},[91,92597,92598],{"class":93,"line":16681},[91,92599,92600],{"class":160},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[91,92602,92603],{"class":93,"line":16692},[91,92604,92605],{"class":160},"      \u002F\u002F 控制台输出当前的时间\n",[91,92607,92608,92611],{"class":93,"line":16715},[91,92609,92610],{"class":160},"      \u002F\u002F console.log(video.currentTime)",[91,92612,92613],{"class":160},"  \u002F\u002F获得当前的视频时间\n",[91,92615,92616],{"class":93,"line":16737},[91,92617,92618],{"class":160},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[91,92620,92621,92623,92625,92627,92630],{"class":93,"line":16742},[91,92622,74658],{"class":101},[91,92624,71629],{"class":1941},[91,92626,102],{"class":101},[91,92628,92629],{"class":206},"'currentTime'",[91,92631,92632],{"class":101},", video.currentTime)\n",[91,92634,92635,92637,92639],{"class":93,"line":16748},[91,92636,54510],{"class":101},[91,92638,6389],{"class":150},[91,92640,108],{"class":101},[91,92642,92643],{"class":93,"line":16762},[91,92644,92645],{"class":160},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[91,92647,92648,92651,92654,92656,92659,92661],{"class":93,"line":16775},[91,92649,92650],{"class":101},"    video.",[91,92652,92653],{"class":1941},"onloadeddata",[91,92655,13543],{"class":97},[91,92657,92658],{"class":101}," () ",[91,92660,84697],{"class":97},[91,92662,15551],{"class":101},[91,92664,92665],{"class":93,"line":16780},[91,92666,59987],{"class":160},[91,92668,92669],{"class":93,"line":16794},[91,92670,92671],{"class":160},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[91,92673,92674,92677,92679,92682,92684,92686,92688,92690,92692],{"class":93,"line":16799},[91,92675,92676],{"class":101},"      video.currentTime ",[91,92678,147],{"class":97},[91,92680,92681],{"class":101}," localStorage.",[91,92683,71660],{"class":1941},[91,92685,102],{"class":101},[91,92687,92629],{"class":206},[91,92689,13693],{"class":101},[91,92691,71332],{"class":97},[91,92693,47308],{"class":150},[91,92695,92696],{"class":93,"line":16805},[91,92697,2165],{"class":101},[91,92699,92700,92702,92704],{"class":93,"line":16810},[91,92701,52392],{"class":101},[91,92703,51788],{"class":51275},[91,92705,51282],{"class":101},[91,92707,92708,92710,92712],{"class":93,"line":16824},[91,92709,51760],{"class":101},[91,92711,51775],{"class":51275},[91,92713,51282],{"class":101},[91,92715,92716],{"class":93,"line":16829},[91,92717,2378],{"emptyLinePlaceholder":17},[91,92719,92720,92722,92724],{"class":93,"line":16834},[91,92721,51760],{"class":101},[91,92723,50610],{"class":51275},[91,92725,51282],{"class":101},[5105,92727,92728],{},"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":10,"searchDepth":11,"depth":11,"links":92730},[92731,92736,92740,92741,92742,92747,92752,92753,92754,92755,92762,92767,92768,92778,92782,92783,92787],{"id":76666,"depth":11,"text":76667,"children":92732},[92733,92734,92735],{"id":76670,"depth":1157,"text":76671},{"id":76695,"depth":1157,"text":76696},{"id":76707,"depth":1157,"text":76708},{"id":76719,"depth":11,"text":76720,"children":92737},[92738,92739],{"id":76723,"depth":1157,"text":76724},{"id":76738,"depth":1157,"text":76739},{"id":76790,"depth":11,"text":76791},{"id":76834,"depth":11,"text":76835},{"id":76851,"depth":11,"text":76852,"children":92743},[92744,92745,92746],{"id":76855,"depth":1157,"text":76856},{"id":76868,"depth":1157,"text":76869},{"id":76973,"depth":1157,"text":76974},{"id":77262,"depth":11,"text":77263,"children":92748},[92749,92750,92751],{"id":77266,"depth":1157,"text":77267},{"id":77709,"depth":1157,"text":77710},{"id":78120,"depth":1157,"text":78121},{"id":78183,"depth":11,"text":78184},{"id":78262,"depth":11,"text":78263},{"id":78355,"depth":11,"text":78356},{"id":80200,"depth":11,"text":80201,"children":92756},[92757,92758,92759,92760,92761],{"id":80204,"depth":1157,"text":80205},{"id":80216,"depth":1157,"text":80217},{"id":80435,"depth":1157,"text":80436},{"id":80453,"depth":1157,"text":80454},{"id":80513,"depth":1157,"text":80514},{"id":84781,"depth":11,"text":84782,"children":92763},[92764,92765,92766],{"id":84785,"depth":1157,"text":84786},{"id":84803,"depth":1157,"text":84804},{"id":84829,"depth":1157,"text":84830},{"id":84838,"depth":11,"text":84839},{"id":84860,"depth":11,"text":84861,"children":92769},[92770,92771,92772,92773,92774,92775,92776,92777],{"id":84864,"depth":1157,"text":84865},{"id":85125,"depth":1157,"text":85126},{"id":85311,"depth":1157,"text":85312},{"id":85678,"depth":1157,"text":85679},{"id":85794,"depth":1157,"text":85795},{"id":85830,"depth":1157,"text":85831},{"id":85877,"depth":1157,"text":85878},{"id":85911,"depth":1157,"text":85912},{"id":87274,"depth":11,"text":87275,"children":92779},[92780,92781],{"id":87278,"depth":1157,"text":87279},{"id":87315,"depth":1157,"text":87316},{"id":88670,"depth":11,"text":88671},{"id":89041,"depth":11,"text":89042,"children":92784},[92785,92786],{"id":89045,"depth":1157,"text":89046},{"id":89079,"depth":1157,"text":89080},{"id":89808,"depth":11,"text":89809,"children":92788},[92789,92790,92791,92792],{"id":89812,"depth":1157,"text":89813},{"id":90770,"depth":1157,"text":90771},{"id":91712,"depth":1157,"text":91713},{"id":91786,"depth":1157,"text":91787},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76655,"description":13},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92799,"title":92800,"body":92801,"description":92812,"extension":14,"meta":92813,"navigation":17,"path":92815,"seo":92816,"stem":92817,"__hash__":92818},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92802,"toc":92810},[92803],[38,92804,92805,92806],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[340,92807,92808],{"href":92808,"rel":92809},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23839],{"title":10,"searchDepth":11,"depth":11,"links":92811},[],"三件套第三套学习",{"category":92814},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92800,"description":92812},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92820,"title":92821,"body":92822,"description":13,"extension":14,"meta":92927,"navigation":17,"path":92928,"seo":92929,"stem":92930,"__hash__":92931},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92823,"toc":92922},[92824,92831,92834,92837,92840,92844,92853,92856,92859,92863,92872,92875,92879,92882,92902,92905,92919],[38,92825,92826],{},[340,92827,92830],{"href":92828,"rel":92829},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23839],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[29,92832,92821],{"id":92833},"_1安装",[38,92835,92836],{},"numpy是科学计算基础库,底层是C语言",[38,92838,92839],{},"三种方式：",[33,92841,92843],{"id":92842},"_11-通过pip安装","1.1 通过pip安装",[83,92845,92847],{"className":30353,"code":92846,"language":30355,"meta":10,"style":10},"pip install numpy\n",[88,92848,92849],{"__ignoreMap":10},[91,92850,92851],{"class":93,"line":94},[91,92852,92846],{"class":101},[38,92854,92855],{},"首选方式，自动处理依赖项",[38,92857,92858],{},"在提示系统命令符中使用cmd",[33,92860,92862],{"id":92861},"_12-通过anaconda安装","1.2 通过Anaconda安装",[83,92864,92866],{"className":30353,"code":92865,"language":30355,"meta":10,"style":10},"conda install numpy\n",[88,92867,92868],{"__ignoreMap":10},[91,92869,92870],{"class":93,"line":94},[91,92871,92865],{"class":101},[38,92873,92874],{},"自动解决环境依赖",[33,92876,92878],{"id":92877},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[38,92880,92881],{},"对于Debian\u002FUbuntu",[83,92883,92885],{"className":30353,"code":92884,"language":30355,"meta":10,"style":10},"sudo apt-get install python3-numpy\n",[88,92886,92887],{"__ignoreMap":10},[91,92888,92889,92892,92894,92897,92899],{"class":93,"line":94},[91,92890,92891],{"class":101},"sudo apt",[91,92893,634],{"class":97},[91,92895,92896],{"class":101},"get install python3",[91,92898,634],{"class":97},[91,92900,92901],{"class":101},"numpy\n",[38,92903,92904],{},"对于Fedora:",[83,92906,92908],{"className":30353,"code":92907,"language":30355,"meta":10,"style":10},"sudo dnf install python3-numpy\n",[88,92909,92910],{"__ignoreMap":10},[91,92911,92912,92915,92917],{"class":93,"line":94},[91,92913,92914],{"class":101},"sudo dnf install python3",[91,92916,634],{"class":97},[91,92918,92901],{"class":101},[5105,92920,92921],{},"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":10,"searchDepth":11,"depth":11,"links":92923},[92924,92925,92926],{"id":92842,"depth":11,"text":92843},{"id":92861,"depth":11,"text":92862},{"id":92877,"depth":11,"text":92878},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92821,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92933,"title":92934,"body":92935,"description":13,"extension":14,"meta":93048,"navigation":17,"path":93049,"seo":93050,"stem":93051,"__hash__":93052},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92936,"toc":93046},[92937,92940,92943,92946,92949,92952,92955,92958,92961,92964,93040,93043],[29,92938,92934],{"id":92939},"_10算数函数",[38,92941,92942],{},"加减乘除运算跟python基础语法没区别",[38,92944,92945],{},"除了python那种方法外还可以使用函数",[38,92947,92948],{},"加：np.add(a,b)",[38,92950,92951],{},"减：np.subtract(a,b)",[38,92953,92954],{},"乘：np.multiply(a,b)",[38,92956,92957],{},"除：np.divide(a,b) == a\u002Fb",[38,92959,92960],{},"取余：np.mod(a,b) == a%b",[38,92962,92963],{},"必须会的用法：",[83,92965,92967],{"className":30353,"code":92966,"language":30355,"meta":10,"style":10},"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",[88,92968,92969,92991,93012,93022,93035],{"__ignoreMap":10},[91,92970,92971,92973,92975,92978,92980,92983,92985,92987,92989],{"class":93,"line":94},[91,92972,340],{"class":101},[91,92974,147],{"class":97},[91,92976,92977],{"class":101},"np.arange(",[91,92979,522],{"class":150},[91,92981,92982],{"class":101},").reshape(",[91,92984,173],{"class":150},[91,92986,480],{"class":101},[91,92988,173],{"class":150},[91,92990,108],{"class":101},[91,92992,92993,92995,92997,93000,93002,93004,93006,93008,93010],{"class":93,"line":11},[91,92994,365],{"class":101},[91,92996,147],{"class":97},[91,92998,92999],{"class":101},"np.array([",[91,93001,548],{"class":150},[91,93003,480],{"class":101},[91,93005,548],{"class":150},[91,93007,480],{"class":101},[91,93009,548],{"class":150},[91,93011,4635],{"class":101},[91,93013,93014,93017,93019],{"class":93,"line":1157},[91,93015,93016],{"class":101},"result",[91,93018,147],{"class":97},[91,93020,93021],{"class":101},"np.empty_like(a)\n",[91,93023,93024,93027,93030,93032],{"class":93,"line":1172},[91,93025,93026],{"class":101},"np.add(a,b,",[91,93028,93029],{"class":5195},"out",[91,93031,147],{"class":97},[91,93033,93034],{"class":101},"result)\n",[91,93036,93037],{"class":93,"line":1178},[91,93038,93039],{"class":101},"result\n",[38,93041,93042],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5105,93044,93045],{},"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":10,"searchDepth":11,"depth":11,"links":93047},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92934,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93054,"title":93055,"body":93056,"description":13,"extension":14,"meta":93818,"navigation":17,"path":93819,"seo":93820,"stem":93821,"__hash__":93822},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93057,"toc":93805},[93058,93061,93064,93067,93071,93110,93114,93158,93218,93222,93225,93264,93267,93312,93316,93352,93356,93425,93429,93493,93497,93500,93503,93506,93509,93545,93549,93589,93593,93665,93668,93672,93735,93739,93802],[29,93059,93055],{"id":93060},"_11统计函数",[38,93062,93063],{},"sum max min mean",[38,93065,93066],{},"这些有axis参数，可以指定方向",[33,93068,93070],{"id":93069},"_111-sum求和函数","11.1 sum()求和函数",[83,93072,93074],{"className":30353,"code":93073,"language":30355,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[88,93075,93076,93081,93102],{"__ignoreMap":10},[91,93077,93078],{"class":93,"line":94},[91,93079,93080],{"class":160},"#创建一维数组\n",[91,93082,93083,93085,93087,93090,93092,93094,93096,93098,93100],{"class":93,"line":11},[91,93084,340],{"class":101},[91,93086,147],{"class":97},[91,93088,93089],{"class":101},"np.random.randint(",[91,93091,319],{"class":150},[91,93093,480],{"class":101},[91,93095,413],{"class":150},[91,93097,480],{"class":101},[91,93099,802],{"class":150},[91,93101,108],{"class":101},[91,93103,93104,93107],{"class":93,"line":1157},[91,93105,93106],{"class":101},"np.sum(a)",[91,93108,93109],{"class":160},"#求和\n",[33,93111,93113],{"id":93112},"_112-max求最大值函数","11.2 max()求最大值函数",[83,93115,93117],{"className":30353,"code":93116,"language":30355,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[88,93118,93119,93123,93143,93148,93153],{"__ignoreMap":10},[91,93120,93121],{"class":93,"line":94},[91,93122,93080],{"class":160},[91,93124,93125,93127,93129,93131,93133,93135,93137,93139,93141],{"class":93,"line":11},[91,93126,340],{"class":101},[91,93128,147],{"class":97},[91,93130,93089],{"class":101},[91,93132,319],{"class":150},[91,93134,480],{"class":101},[91,93136,413],{"class":150},[91,93138,480],{"class":101},[91,93140,802],{"class":150},[91,93142,108],{"class":101},[91,93144,93145],{"class":93,"line":1157},[91,93146,93147],{"class":101},"np.max(a)\n",[91,93149,93150],{"class":93,"line":1172},[91,93151,93152],{"class":160},"#最大索引(求最大元素的索引)arg\n",[91,93154,93155],{"class":93,"line":1178},[91,93156,93157],{"class":101},"np.argmax(a)\n",[83,93159,93161],{"className":30353,"code":93160,"language":30355,"meta":10,"style":10},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[88,93162,93163,93184,93204,93208],{"__ignoreMap":10},[91,93164,93165,93167,93169,93172,93174,93176,93178,93180,93182],{"class":93,"line":94},[91,93166,10898],{"class":101},[91,93168,147],{"class":97},[91,93170,93171],{"class":101}," np.array([",[91,93173,319],{"class":150},[91,93175,12414],{"class":101},[91,93177,421],{"class":150},[91,93179,12414],{"class":101},[91,93181,173],{"class":150},[91,93183,4635],{"class":101},[91,93185,93186,93188,93190,93192,93194,93196,93198,93200,93202],{"class":93,"line":11},[91,93187,10924],{"class":101},[91,93189,147],{"class":97},[91,93191,93171],{"class":101},[91,93193,173],{"class":150},[91,93195,12414],{"class":101},[91,93197,179],{"class":150},[91,93199,12414],{"class":101},[91,93201,395],{"class":150},[91,93203,4635],{"class":101},[91,93205,93206],{"class":93,"line":1157},[91,93207,2378],{"emptyLinePlaceholder":17},[91,93209,93210,93212,93215],{"class":93,"line":1172},[91,93211,30390],{"class":150},[91,93213,93214],{"class":101},"(np.maximum(a, b))   ",[91,93216,93217],{"class":160},"# [3 5 4]，每个位置上取较大值\n",[33,93219,93221],{"id":93220},"_113-mean求平均值函数","11.3 mean()求平均值函数",[38,93223,93224],{},"①一维数组：",[83,93226,93228],{"className":30353,"code":93227,"language":30355,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[88,93229,93230,93234,93254,93259],{"__ignoreMap":10},[91,93231,93232],{"class":93,"line":94},[91,93233,93080],{"class":160},[91,93235,93236,93238,93240,93242,93244,93246,93248,93250,93252],{"class":93,"line":11},[91,93237,340],{"class":101},[91,93239,147],{"class":97},[91,93241,93089],{"class":101},[91,93243,319],{"class":150},[91,93245,480],{"class":101},[91,93247,413],{"class":150},[91,93249,480],{"class":101},[91,93251,802],{"class":150},[91,93253,108],{"class":101},[91,93255,93256],{"class":93,"line":1157},[91,93257,93258],{"class":160},"#求平均值\n",[91,93260,93261],{"class":93,"line":1172},[91,93262,93263],{"class":101},"np.mean(a)\n",[38,93265,93266],{},"②二维数组",[83,93268,93270],{"className":30353,"code":93269,"language":30355,"meta":10,"style":10},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[88,93271,93272,93277,93302,93307],{"__ignoreMap":10},[91,93273,93274],{"class":93,"line":94},[91,93275,93276],{"class":160},"#二维数组\n",[91,93278,93279,93282,93284,93286,93288,93290,93292,93294,93296,93298,93300],{"class":93,"line":11},[91,93280,93281],{"class":101},"aa",[91,93283,147],{"class":97},[91,93285,92977],{"class":101},[91,93287,319],{"class":150},[91,93289,480],{"class":101},[91,93291,625],{"class":150},[91,93293,92982],{"class":101},[91,93295,173],{"class":150},[91,93297,480],{"class":101},[91,93299,395],{"class":150},[91,93301,108],{"class":101},[91,93303,93304],{"class":93,"line":1157},[91,93305,93306],{"class":160},"#对数组中的所有数求平均\n",[91,93308,93309],{"class":93,"line":1172},[91,93310,93311],{"class":101},"np.mean(aa)\n",[33,93313,93315],{"id":93314},"_114-median求中位数函数","11.4 median()求中位数函数",[83,93317,93319],{"className":30353,"code":93318,"language":30355,"meta":10,"style":10},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[88,93320,93321,93326,93342,93347],{"__ignoreMap":10},[91,93322,93323],{"class":93,"line":94},[91,93324,93325],{"class":160},"#求中位数\n",[91,93327,93328,93330,93332,93334,93336,93338,93340],{"class":93,"line":11},[91,93329,365],{"class":101},[91,93331,147],{"class":97},[91,93333,92977],{"class":101},[91,93335,319],{"class":150},[91,93337,480],{"class":101},[91,93339,548],{"class":150},[91,93341,108],{"class":101},[91,93343,93344],{"class":93,"line":1157},[91,93345,93346],{"class":101},"np.median(b)\n",[91,93348,93349],{"class":93,"line":1172},[91,93350,93351],{"class":160},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,93353,93355],{"id":93354},"_115-power求幂运算函数","11.5 power()求幂运算函数",[83,93357,93359],{"className":30353,"code":93358,"language":30355,"meta":10,"style":10},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[88,93360,93361,93377,93382,93387,93396,93401,93410],{"__ignoreMap":10},[91,93362,93363,93365,93367,93369,93371,93373,93375],{"class":93,"line":94},[91,93364,365],{"class":101},[91,93366,147],{"class":97},[91,93368,92977],{"class":101},[91,93370,319],{"class":150},[91,93372,480],{"class":101},[91,93374,548],{"class":150},[91,93376,108],{"class":101},[91,93378,93379],{"class":93,"line":11},[91,93380,93381],{"class":160},"#幂运算\n",[91,93383,93384],{"class":93,"line":1157},[91,93385,93386],{"class":160},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[91,93388,93389,93392,93394],{"class":93,"line":1172},[91,93390,93391],{"class":101},"np.power(b,",[91,93393,179],{"class":150},[91,93395,108],{"class":101},[91,93397,93398],{"class":93,"line":1178},[91,93399,93400],{"class":160},"#或者以下代码，将数据存储起来\n",[91,93402,93403,93405,93407],{"class":93,"line":1192},[91,93404,947],{"class":101},[91,93406,147],{"class":97},[91,93408,93409],{"class":101},"np.empty_like(b)\n",[91,93411,93412,93414,93416,93418,93420,93422],{"class":93,"line":1198},[91,93413,93391],{"class":101},[91,93415,179],{"class":150},[91,93417,480],{"class":101},[91,93419,93029],{"class":5195},[91,93421,147],{"class":97},[91,93423,93424],{"class":101},"y)\n",[33,93426,93428],{"id":93427},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[83,93430,93432],{"className":30353,"code":93431,"language":30355,"meta":10,"style":10},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[88,93433,93434,93450,93455,93460,93464,93482],{"__ignoreMap":10},[91,93435,93436,93438,93440,93442,93444,93446,93448],{"class":93,"line":94},[91,93437,365],{"class":101},[91,93439,147],{"class":97},[91,93441,92977],{"class":101},[91,93443,319],{"class":150},[91,93445,480],{"class":101},[91,93447,548],{"class":150},[91,93449,108],{"class":101},[91,93451,93452],{"class":93,"line":11},[91,93453,93454],{"class":160},"#开方\n",[91,93456,93457],{"class":93,"line":1157},[91,93458,93459],{"class":101},"np.sqrt(b)\n",[91,93461,93462],{"class":93,"line":1172},[91,93463,93400],{"class":160},[91,93465,93466,93468,93470,93473,93476,93478,93480],{"class":93,"line":1178},[91,93467,947],{"class":101},[91,93469,147],{"class":97},[91,93471,93472],{"class":101},"np.empty_like(b,",[91,93474,93475],{"class":5195},"dtype",[91,93477,147],{"class":97},[91,93479,141],{"class":150},[91,93481,108],{"class":101},[91,93483,93484,93487,93489,93491],{"class":93,"line":1192},[91,93485,93486],{"class":101},"np.sqrt(b,",[91,93488,93029],{"class":5195},[91,93490,147],{"class":97},[91,93492,93424],{"class":101},[33,93494,93496],{"id":93495},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[38,93498,93499],{},"对数组中的元素累计求和，可指定轴",[38,93501,93502],{},"#累计求和的意思是：",[38,93504,93505],{},"a = np.array([1, 2, 3, 4])",[38,93507,93508],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[83,93510,93512],{"className":30353,"code":93511,"language":30355,"meta":10,"style":10},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[88,93513,93514,93530,93535,93540],{"__ignoreMap":10},[91,93515,93516,93518,93520,93522,93524,93526,93528],{"class":93,"line":94},[91,93517,365],{"class":101},[91,93519,147],{"class":97},[91,93521,92977],{"class":101},[91,93523,319],{"class":150},[91,93525,480],{"class":101},[91,93527,548],{"class":150},[91,93529,108],{"class":101},[91,93531,93532],{"class":93,"line":11},[91,93533,93534],{"class":101},"np.cumsum(b)\n",[91,93536,93537],{"class":93,"line":1157},[91,93538,93539],{"class":160},"#结果：\n",[91,93541,93542],{"class":93,"line":1172},[91,93543,93544],{"class":160},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,93546,93548],{"id":93547},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[83,93550,93552],{"className":30353,"code":93551,"language":30355,"meta":10,"style":10},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[88,93553,93554,93570,93575,93580,93584],{"__ignoreMap":10},[91,93555,93556,93558,93560,93562,93564,93566,93568],{"class":93,"line":94},[91,93557,365],{"class":101},[91,93559,147],{"class":97},[91,93561,92977],{"class":101},[91,93563,319],{"class":150},[91,93565,480],{"class":101},[91,93567,548],{"class":150},[91,93569,108],{"class":101},[91,93571,93572],{"class":93,"line":11},[91,93573,93574],{"class":160},"#对数组中的元素累计求积，可指定轴\n",[91,93576,93577],{"class":93,"line":1157},[91,93578,93579],{"class":101},"np.cumprod(b)\n",[91,93581,93582],{"class":93,"line":1172},[91,93583,93539],{"class":160},[91,93585,93586],{"class":93,"line":1178},[91,93587,93588],{"class":160},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,93590,93592],{"id":93591},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[83,93594,93596],{"className":30353,"code":93595,"language":30355,"meta":10,"style":10},"#删除数组中的重复数据，并对数据进行排序\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",[88,93597,93598,93603,93651,93656,93660],{"__ignoreMap":10},[91,93599,93600],{"class":93,"line":94},[91,93601,93602],{"class":160},"#删除数组中的重复数据，并对数据进行排序\n",[91,93604,93605,93607,93609,93611,93613,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649],{"class":93,"line":11},[91,93606,340],{"class":101},[91,93608,147],{"class":97},[91,93610,92999],{"class":101},[91,93612,319],{"class":150},[91,93614,480],{"class":101},[91,93616,179],{"class":150},[91,93618,480],{"class":101},[91,93620,173],{"class":150},[91,93622,480],{"class":101},[91,93624,600],{"class":150},[91,93626,480],{"class":101},[91,93628,173],{"class":150},[91,93630,480],{"class":101},[91,93632,548],{"class":150},[91,93634,480],{"class":101},[91,93636,299],{"class":150},[91,93638,480],{"class":101},[91,93640,293],{"class":150},[91,93642,480],{"class":101},[91,93644,877],{"class":150},[91,93646,480],{"class":101},[91,93648,395],{"class":150},[91,93650,4635],{"class":101},[91,93652,93653],{"class":93,"line":1157},[91,93654,93655],{"class":101},"np.unique(a)\n",[91,93657,93658],{"class":93,"line":1172},[91,93659,93539],{"class":160},[91,93661,93662],{"class":93,"line":1178},[91,93663,93664],{"class":160},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[38,93666,93667],{},"升序形式排序",[33,93669,93671],{"id":93670},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[83,93673,93675],{"className":30353,"code":93674,"language":30355,"meta":10,"style":10},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[88,93676,93677,93725,93730],{"__ignoreMap":10},[91,93678,93679,93681,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723],{"class":93,"line":94},[91,93680,340],{"class":101},[91,93682,147],{"class":97},[91,93684,92999],{"class":101},[91,93686,319],{"class":150},[91,93688,480],{"class":101},[91,93690,179],{"class":150},[91,93692,480],{"class":101},[91,93694,173],{"class":150},[91,93696,480],{"class":101},[91,93698,600],{"class":150},[91,93700,480],{"class":101},[91,93702,173],{"class":150},[91,93704,480],{"class":101},[91,93706,548],{"class":150},[91,93708,480],{"class":101},[91,93710,299],{"class":150},[91,93712,480],{"class":101},[91,93714,293],{"class":150},[91,93716,480],{"class":101},[91,93718,877],{"class":150},[91,93720,480],{"class":101},[91,93722,395],{"class":150},[91,93724,4635],{"class":101},[91,93726,93727],{"class":93,"line":11},[91,93728,93729],{"class":160},"#返回数组中非零元素的索引\n",[91,93731,93732],{"class":93,"line":1157},[91,93733,93734],{"class":101},"np.nonzero(a)\n",[33,93736,93738],{"id":93737},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[83,93740,93742],{"className":30353,"code":93741,"language":30355,"meta":10,"style":10},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[88,93743,93744,93792,93797],{"__ignoreMap":10},[91,93745,93746,93748,93750,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790],{"class":93,"line":94},[91,93747,340],{"class":101},[91,93749,147],{"class":97},[91,93751,92999],{"class":101},[91,93753,319],{"class":150},[91,93755,480],{"class":101},[91,93757,179],{"class":150},[91,93759,480],{"class":101},[91,93761,173],{"class":150},[91,93763,480],{"class":101},[91,93765,600],{"class":150},[91,93767,480],{"class":101},[91,93769,173],{"class":150},[91,93771,480],{"class":101},[91,93773,548],{"class":150},[91,93775,480],{"class":101},[91,93777,299],{"class":150},[91,93779,480],{"class":101},[91,93781,293],{"class":150},[91,93783,480],{"class":101},[91,93785,877],{"class":150},[91,93787,480],{"class":101},[91,93789,395],{"class":150},[91,93791,4635],{"class":101},[91,93793,93794],{"class":93,"line":11},[91,93795,93796],{"class":160},"#计算一组数中最大值与最小值的差，可指定轴\n",[91,93798,93799],{"class":93,"line":1157},[91,93800,93801],{"class":101},"np.ptp(a)\n",[5105,93803,93804],{},"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":10,"searchDepth":11,"depth":11,"links":93806},[93807,93808,93809,93810,93811,93812,93813,93814,93815,93816,93817],{"id":93069,"depth":11,"text":93070},{"id":93112,"depth":11,"text":93113},{"id":93220,"depth":11,"text":93221},{"id":93314,"depth":11,"text":93315},{"id":93354,"depth":11,"text":93355},{"id":93427,"depth":11,"text":93428},{"id":93495,"depth":11,"text":93496},{"id":93547,"depth":11,"text":93548},{"id":93591,"depth":11,"text":93592},{"id":93670,"depth":11,"text":93671},{"id":93737,"depth":11,"text":93738},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93055,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93824,"title":93825,"body":93826,"description":13,"extension":14,"meta":94481,"navigation":17,"path":94482,"seo":94483,"stem":94484,"__hash__":94485},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93827,"toc":94469},[93828,93831,93835,93838,94054,94058,94061,94270,94274,94340,94345,94349,94352,94355,94393,94397,94400,94405,94409,94412,94415,94420,94424,94427,94431,94434,94437,94442,94446,94449,94452,94457,94461,94466],[29,93829,93825],{"id":93830},"_12其他常用函数",[33,93832,93834],{"id":93833},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[38,93836,93837],{},"将数组的数据按照行列复制扩展",[83,93839,93841],{"className":30353,"code":93840,"language":30355,"meta":10,"style":10},"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",[88,93842,93843,93859,93868,93872,93877,93882,93895,93899,93904,93909,93914,93918,93923,93947,93959,93963,93967,93972,93977,93982,93987,93991,94004,94008,94012,94017,94022,94027,94032,94037,94041,94045,94050],{"__ignoreMap":10},[91,93844,93845,93847,93849,93851,93853,93855,93857],{"class":93,"line":94},[91,93846,340],{"class":101},[91,93848,147],{"class":97},[91,93850,92977],{"class":101},[91,93852,319],{"class":150},[91,93854,480],{"class":101},[91,93856,421],{"class":150},[91,93858,108],{"class":101},[91,93860,93861,93864,93866],{"class":93,"line":11},[91,93862,93863],{"class":101},"np.tile(a,",[91,93865,179],{"class":150},[91,93867,108],{"class":101},[91,93869,93870],{"class":93,"line":1157},[91,93871,93539],{"class":160},[91,93873,93874],{"class":93,"line":1172},[91,93875,93876],{"class":160},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[91,93878,93879],{"class":93,"line":1178},[91,93880,93881],{"class":160},"#行复制两次，列复制三次\n",[91,93883,93884,93887,93889,93891,93893],{"class":93,"line":1192},[91,93885,93886],{"class":101},"np.tile(a,(",[91,93888,179],{"class":150},[91,93890,480],{"class":101},[91,93892,173],{"class":150},[91,93894,30472],{"class":101},[91,93896,93897],{"class":93,"line":1198},[91,93898,93539],{"class":160},[91,93900,93901],{"class":93,"line":1289},[91,93902,93903],{"class":206},"'''\n",[91,93905,93906],{"class":93,"line":1295},[91,93907,93908],{"class":206},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[91,93910,93911],{"class":93,"line":1307},[91,93912,93913],{"class":206},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[91,93915,93916],{"class":93,"line":1590},[91,93917,93903],{"class":206},[91,93919,93920],{"class":93,"line":1595},[91,93921,93922],{"class":160},"#创建二维数组\n",[91,93924,93925,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945],{"class":93,"line":1601},[91,93926,93281],{"class":101},[91,93928,147],{"class":97},[91,93930,92977],{"class":101},[91,93932,319],{"class":150},[91,93934,480],{"class":101},[91,93936,625],{"class":150},[91,93938,92982],{"class":101},[91,93940,395],{"class":150},[91,93942,480],{"class":101},[91,93944,173],{"class":150},[91,93946,108],{"class":101},[91,93948,93949,93952,93954,93956],{"class":93,"line":1606},[91,93950,93951],{"class":101},"np.tile(aa,",[91,93953,179],{"class":150},[91,93955,531],{"class":101},[91,93957,93958],{"class":160},"#一个数的时候就是行\n",[91,93960,93961],{"class":93,"line":1620},[91,93962,93539],{"class":160},[91,93964,93965],{"class":93,"line":1625},[91,93966,93903],{"class":206},[91,93968,93969],{"class":93,"line":1631},[91,93970,93971],{"class":206},"array([[ 1,  2,  3,  1,  2,  3],\n",[91,93973,93974],{"class":93,"line":1652},[91,93975,93976],{"class":206},"       [ 4,  5,  6,  4,  5,  6],\n",[91,93978,93979],{"class":93,"line":1657},[91,93980,93981],{"class":206},"       [ 7,  8,  9,  7,  8,  9],\n",[91,93983,93984],{"class":93,"line":1671},[91,93985,93986],{"class":206},"       [10, 11, 12, 10, 11, 12]])\n",[91,93988,93989],{"class":93,"line":1676},[91,93990,93903],{"class":206},[91,93992,93993,93996,93998,94000,94002],{"class":93,"line":1705},[91,93994,93995],{"class":101},"np.tile(aa,(",[91,93997,179],{"class":150},[91,93999,480],{"class":101},[91,94001,173],{"class":150},[91,94003,30472],{"class":101},[91,94005,94006],{"class":93,"line":1710},[91,94007,93539],{"class":160},[91,94009,94010],{"class":93,"line":1727},[91,94011,93903],{"class":206},[91,94013,94014],{"class":93,"line":1732},[91,94015,94016],{"class":206},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[91,94018,94019],{"class":93,"line":1737},[91,94020,94021],{"class":206},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[91,94023,94024],{"class":93,"line":1742},[91,94025,94026],{"class":206},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[91,94028,94029],{"class":93,"line":1756},[91,94030,94031],{"class":206},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[91,94033,94034],{"class":93,"line":1761},[91,94035,94036],{"class":206},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[91,94038,94039],{"class":93,"line":2555},[91,94040,94021],{"class":206},[91,94042,94043],{"class":93,"line":2569},[91,94044,94026],{"class":206},[91,94046,94047],{"class":93,"line":2577},[91,94048,94049],{"class":206},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[91,94051,94052],{"class":93,"line":2582},[91,94053,93903],{"class":206},[33,94055,94057],{"id":94056},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[38,94059,94060],{},"repeat()将数组中的每个元素重复若干次",[83,94062,94064],{"className":30353,"code":94063,"language":30355,"meta":10,"style":10},"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",[88,94065,94066,94082,94091,94095,94100,94124,94129,94138,94142,94147,94151,94156,94172,94176,94180,94185,94190,94195,94199,94204,94208,94213,94218,94222,94238,94242,94246,94251,94256,94261,94266],{"__ignoreMap":10},[91,94067,94068,94070,94072,94074,94076,94078,94080],{"class":93,"line":94},[91,94069,340],{"class":101},[91,94071,147],{"class":97},[91,94073,92977],{"class":101},[91,94075,319],{"class":150},[91,94077,480],{"class":101},[91,94079,421],{"class":150},[91,94081,108],{"class":101},[91,94083,94084,94087,94089],{"class":93,"line":11},[91,94085,94086],{"class":101},"np.repeat(a,",[91,94088,173],{"class":150},[91,94090,108],{"class":101},[91,94092,94093],{"class":93,"line":1157},[91,94094,93539],{"class":160},[91,94096,94097],{"class":93,"line":1172},[91,94098,94099],{"class":160},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[91,94101,94102,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122],{"class":93,"line":1178},[91,94103,93281],{"class":101},[91,94105,147],{"class":97},[91,94107,92977],{"class":101},[91,94109,319],{"class":150},[91,94111,480],{"class":101},[91,94113,625],{"class":150},[91,94115,92982],{"class":101},[91,94117,395],{"class":150},[91,94119,480],{"class":101},[91,94121,173],{"class":150},[91,94123,108],{"class":101},[91,94125,94126],{"class":93,"line":1192},[91,94127,94128],{"class":160},"#这个重复之后二维变成一维\n",[91,94130,94131,94134,94136],{"class":93,"line":1198},[91,94132,94133],{"class":101},"np.repeat(aa,",[91,94135,179],{"class":150},[91,94137,108],{"class":101},[91,94139,94140],{"class":93,"line":1289},[91,94141,93903],{"class":206},[91,94143,94144],{"class":93,"line":1295},[91,94145,94146],{"class":206},"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",[91,94148,94149],{"class":93,"line":1307},[91,94150,93903],{"class":206},[91,94152,94153],{"class":93,"line":1590},[91,94154,94155],{"class":160},"#指定axis\n",[91,94157,94158,94160,94162,94164,94166,94168,94170],{"class":93,"line":1595},[91,94159,94133],{"class":101},[91,94161,179],{"class":150},[91,94163,480],{"class":101},[91,94165,47489],{"class":5195},[91,94167,147],{"class":97},[91,94169,293],{"class":150},[91,94171,108],{"class":101},[91,94173,94174],{"class":93,"line":1601},[91,94175,93539],{"class":160},[91,94177,94178],{"class":93,"line":1606},[91,94179,93903],{"class":206},[91,94181,94182],{"class":93,"line":1620},[91,94183,94184],{"class":206},"array([[ 1,  2,  3],\n",[91,94186,94187],{"class":93,"line":1625},[91,94188,94189],{"class":206},"       [ 1,  2,  3],\n",[91,94191,94192],{"class":93,"line":1631},[91,94193,94194],{"class":206},"       [ 4,  5,  6],\n",[91,94196,94197],{"class":93,"line":1652},[91,94198,94194],{"class":206},[91,94200,94201],{"class":93,"line":1657},[91,94202,94203],{"class":206},"       [ 7,  8,  9],\n",[91,94205,94206],{"class":93,"line":1671},[91,94207,94203],{"class":206},[91,94209,94210],{"class":93,"line":1676},[91,94211,94212],{"class":206},"       [10, 11, 12],\n",[91,94214,94215],{"class":93,"line":1705},[91,94216,94217],{"class":206},"       [10, 11, 12]])\n",[91,94219,94220],{"class":93,"line":1710},[91,94221,93903],{"class":206},[91,94223,94224,94226,94228,94230,94232,94234,94236],{"class":93,"line":1727},[91,94225,94133],{"class":101},[91,94227,179],{"class":150},[91,94229,480],{"class":101},[91,94231,47489],{"class":5195},[91,94233,147],{"class":97},[91,94235,319],{"class":150},[91,94237,108],{"class":101},[91,94239,94240],{"class":93,"line":1732},[91,94241,93539],{"class":160},[91,94243,94244],{"class":93,"line":1737},[91,94245,93903],{"class":206},[91,94247,94248],{"class":93,"line":1742},[91,94249,94250],{"class":206},"array([[ 1,  1,  2,  2,  3,  3],\n",[91,94252,94253],{"class":93,"line":1756},[91,94254,94255],{"class":206},"       [ 4,  4,  5,  5,  6,  6],\n",[91,94257,94258],{"class":93,"line":1761},[91,94259,94260],{"class":206},"       [ 7,  7,  8,  8,  9,  9],\n",[91,94262,94263],{"class":93,"line":2555},[91,94264,94265],{"class":206},"       [10, 10, 11, 11, 12, 12]])\n",[91,94267,94268],{"class":93,"line":2569},[91,94269,93903],{"class":206},[33,94271,94273],{"id":94272},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[83,94275,94277],{"className":30353,"code":94276,"language":30355,"meta":10,"style":10},"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",[88,94278,94279,94295,94300,94312,94316,94321,94331,94335],{"__ignoreMap":10},[91,94280,94281,94283,94285,94287,94289,94291,94293],{"class":93,"line":94},[91,94282,340],{"class":101},[91,94284,147],{"class":97},[91,94286,92977],{"class":101},[91,94288,319],{"class":150},[91,94290,480],{"class":101},[91,94292,421],{"class":150},[91,94294,108],{"class":101},[91,94296,94297],{"class":93,"line":11},[91,94298,94299],{"class":160},"#array([，2，3，4])\n",[91,94301,94302,94305,94307,94309],{"class":93,"line":1157},[91,94303,94304],{"class":101},"np.roll(a,",[91,94306,179],{"class":150},[91,94308,531],{"class":101},[91,94310,94311],{"class":160},"#传正数向后调多少位，传负数向前调多少位\n",[91,94313,94314],{"class":93,"line":1172},[91,94315,93539],{"class":160},[91,94317,94318],{"class":93,"line":1178},[91,94319,94320],{"class":160},"#array([3, 4, 1, 2])\n",[91,94322,94323,94325,94327,94329],{"class":93,"line":1192},[91,94324,94304],{"class":101},[91,94326,634],{"class":97},[91,94328,319],{"class":150},[91,94330,108],{"class":101},[91,94332,94333],{"class":93,"line":1198},[91,94334,93539],{"class":160},[91,94336,94337],{"class":93,"line":1289},[91,94338,94339],{"class":160},"#array([2, 3, 4, 1])\n",[38,94341,94342],{},[1440,94343],{"alt":10,"src":94344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[33,94346,94348],{"id":94347},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[38,94350,94351],{},"resize()重新调整数组的大小",[38,94353,94354],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[83,94356,94358],{"className":30353,"code":94357,"language":30355,"meta":10,"style":10},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[88,94359,94360,94365,94378],{"__ignoreMap":10},[91,94361,94362],{"class":93,"line":94},[91,94363,94364],{"class":160},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[91,94366,94367,94370,94372,94374,94376],{"class":93,"line":11},[91,94368,94369],{"class":101},"np.resize(aa,(",[91,94371,179],{"class":150},[91,94373,480],{"class":101},[91,94375,446],{"class":150},[91,94377,30472],{"class":101},[91,94379,94380,94382,94384,94386,94388,94390],{"class":93,"line":1157},[91,94381,94369],{"class":101},[91,94383,179],{"class":150},[91,94385,480],{"class":101},[91,94387,522],{"class":150},[91,94389,82746],{"class":101},[91,94391,94392],{"class":160},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,94394,94396],{"id":94395},"_125-placeput函数","12.5 place()\u002Fput()函数",[38,94398,94399],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[38,94401,94402],{},[1440,94403],{"alt":10,"src":94404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[33,94406,94408],{"id":94407},"_126-保存加载文件","12.6 保存加载文件",[38,94410,94411],{},"savetxt():将数据保存到txt文件中",[38,94413,94414],{},"loadtxt():从文件加载数据",[38,94416,94417],{},[1440,94418],{"alt":10,"src":94419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[33,94421,94423],{"id":94422},"_127-genfromtxt函数","12.7 genfromtxt()函数",[38,94425,94426],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[33,94428,94430],{"id":94429},"_128-anyall函数","12.8 any()\u002Fall()函数",[38,94432,94433],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[38,94435,94436],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[38,94438,94439],{},[1440,94440],{"alt":10,"src":94441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[33,94443,94445],{"id":94444},"_129-where语句","12.9 where语句",[38,94447,94448],{},"np.where(条件,x,y)",[38,94450,94451],{},"如果条件为True,对应值为x,否则对应值为y",[38,94453,94454],{},[1440,94455],{"alt":10,"src":94456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[33,94458,94460],{"id":94459},"_1210-dot矩阵","12.10 dot()矩阵",[38,94462,94463],{},[1440,94464],{"alt":10,"src":94465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5105,94467,94468],{},"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":10,"searchDepth":11,"depth":11,"links":94470},[94471,94472,94473,94474,94475,94476,94477,94478,94479,94480],{"id":93833,"depth":11,"text":93834},{"id":94056,"depth":11,"text":94057},{"id":94272,"depth":11,"text":94273},{"id":94347,"depth":11,"text":94348},{"id":94395,"depth":11,"text":94396},{"id":94407,"depth":11,"text":94408},{"id":94422,"depth":11,"text":94423},{"id":94429,"depth":11,"text":94430},{"id":94444,"depth":11,"text":94445},{"id":94459,"depth":11,"text":94460},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93825,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94487,"title":94488,"body":94489,"description":13,"extension":14,"meta":94842,"navigation":17,"path":94843,"seo":94844,"stem":94845,"__hash__":94846},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94490,"toc":94840},[94491,94494,94497,94500,94503,94506,94571,94573,94837],[29,94492,94488],{"id":94493},"_13数组排序",[38,94495,94496],{},"排序主要用到的方法是np.sort和np.argsort",[38,94498,94499],{},"其中np.sort()对数组直接排序",[38,94501,94502],{},"而np.argsort()是返回排序后的原始索引",[38,94504,94505],{},"①一维数组",[83,94507,94509],{"className":30353,"code":94508,"language":30355,"meta":10,"style":10},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[88,94510,94511,94515,94555,94563],{"__ignoreMap":10},[91,94512,94513],{"class":93,"line":94},[91,94514,93080],{"class":160},[91,94516,94517,94519,94521,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553],{"class":93,"line":11},[91,94518,340],{"class":101},[91,94520,147],{"class":97},[91,94522,92999],{"class":101},[91,94524,173],{"class":150},[91,94526,480],{"class":101},[91,94528,600],{"class":150},[91,94530,480],{"class":101},[91,94532,497],{"class":150},[91,94534,480],{"class":101},[91,94536,877],{"class":150},[91,94538,480],{"class":101},[91,94540,381],{"class":150},[91,94542,480],{"class":101},[91,94544,995],{"class":150},[91,94546,480],{"class":101},[91,94548,446],{"class":150},[91,94550,480],{"class":101},[91,94552,548],{"class":150},[91,94554,4635],{"class":101},[91,94556,94557,94560],{"class":93,"line":1157},[91,94558,94559],{"class":101},"np.sort(a)",[91,94561,94562],{"class":160},"#升序排序\n",[91,94564,94565,94568],{"class":93,"line":1172},[91,94566,94567],{"class":101},"np.argsort(a)",[91,94569,94570],{"class":160},"#按照元素大小来索引排序\n",[38,94572,93266],{},[83,94574,94576],{"className":30353,"code":94575,"language":30355,"meta":10,"style":10},"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",[88,94577,94578,94590,94616,94621,94625,94630,94635,94640,94645,94649,94657,94661,94666,94671,94676,94681,94685,94690,94703,94707,94712,94717,94722,94727,94731,94736,94748,94752,94756,94760,94764,94768,94772,94777,94792,94797,94806,94811,94815,94819,94824,94828,94833],{"__ignoreMap":10},[91,94579,94580,94583,94585,94587],{"class":93,"line":94},[91,94581,94582],{"class":101},"np.random.seed(",[91,94584,293],{"class":150},[91,94586,531],{"class":101},[91,94588,94589],{"class":160},"#保证每次值一样\n",[91,94591,94592,94594,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614],{"class":93,"line":11},[91,94593,93281],{"class":101},[91,94595,147],{"class":97},[91,94597,93089],{"class":101},[91,94599,413],{"class":150},[91,94601,480],{"class":101},[91,94603,31471],{"class":5195},[91,94605,147],{"class":97},[91,94607,102],{"class":101},[91,94609,395],{"class":150},[91,94611,480],{"class":101},[91,94613,446],{"class":150},[91,94615,30472],{"class":101},[91,94617,94618],{"class":93,"line":1157},[91,94619,94620],{"class":160},"#原数组：\n",[91,94622,94623],{"class":93,"line":1172},[91,94624,93903],{"class":206},[91,94626,94627],{"class":93,"line":1178},[91,94628,94629],{"class":206},"array([[44, 47, 64, 67, 67,  9],\n",[91,94631,94632],{"class":93,"line":1192},[91,94633,94634],{"class":206},"       [83, 21, 36, 87, 70, 88],\n",[91,94636,94637],{"class":93,"line":1198},[91,94638,94639],{"class":206},"       [88, 12, 58, 65, 39, 87],\n",[91,94641,94642],{"class":93,"line":1289},[91,94643,94644],{"class":206},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[91,94646,94647],{"class":93,"line":1295},[91,94648,93903],{"class":206},[91,94650,94651,94654],{"class":93,"line":1307},[91,94652,94653],{"class":101},"np.sort(aa)",[91,94655,94656],{"class":160},"#每行进行了排序\n",[91,94658,94659],{"class":93,"line":1590},[91,94660,93903],{"class":206},[91,94662,94663],{"class":93,"line":1595},[91,94664,94665],{"class":206},"array([[ 9, 44, 47, 64, 67, 67],\n",[91,94667,94668],{"class":93,"line":1601},[91,94669,94670],{"class":206},"       [21, 36, 70, 83, 87, 88],\n",[91,94672,94673],{"class":93,"line":1606},[91,94674,94675],{"class":206},"       [12, 39, 58, 65, 87, 88],\n",[91,94677,94678],{"class":93,"line":1620},[91,94679,94680],{"class":206},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[91,94682,94683],{"class":93,"line":1625},[91,94684,93903],{"class":206},[91,94686,94687],{"class":93,"line":1631},[91,94688,94689],{"class":160},"#axis=0时\n",[91,94691,94692,94695,94697,94699,94701],{"class":93,"line":1652},[91,94693,94694],{"class":101},"np.sort(aa,",[91,94696,47489],{"class":5195},[91,94698,147],{"class":97},[91,94700,293],{"class":150},[91,94702,108],{"class":101},[91,94704,94705],{"class":93,"line":1657},[91,94706,93903],{"class":206},[91,94708,94709],{"class":93,"line":1671},[91,94710,94711],{"class":206},"array([[44, 12, 36, 37, 25,  9],\n",[91,94713,94714],{"class":93,"line":1676},[91,94715,94716],{"class":206},"       [46, 21, 58, 65, 39, 77],\n",[91,94718,94719],{"class":93,"line":1705},[91,94720,94721],{"class":206},"       [83, 47, 64, 67, 67, 87],\n",[91,94723,94724],{"class":93,"line":1710},[91,94725,94726],{"class":206},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[91,94728,94729],{"class":93,"line":1727},[91,94730,93903],{"class":206},[91,94732,94733],{"class":93,"line":1732},[91,94734,94735],{"class":160},"#axis=1时,为默认值\n",[91,94737,94738,94740,94742,94744,94746],{"class":93,"line":1737},[91,94739,94694],{"class":101},[91,94741,47489],{"class":5195},[91,94743,147],{"class":97},[91,94745,319],{"class":150},[91,94747,108],{"class":101},[91,94749,94750],{"class":93,"line":1742},[91,94751,93903],{"class":206},[91,94753,94754],{"class":93,"line":1756},[91,94755,94665],{"class":206},[91,94757,94758],{"class":93,"line":1761},[91,94759,94670],{"class":206},[91,94761,94762],{"class":93,"line":2555},[91,94763,94675],{"class":206},[91,94765,94766],{"class":93,"line":2569},[91,94767,94680],{"class":206},[91,94769,94770],{"class":93,"line":2577},[91,94771,93903],{"class":206},[91,94773,94774],{"class":93,"line":2582},[91,94775,94776],{"class":160},"#按最后一列排序\n",[91,94778,94779,94781,94783,94786,94788,94790],{"class":93,"line":2588},[91,94780,365],{"class":101},[91,94782,147],{"class":97},[91,94784,94785],{"class":101},"aa[:,",[91,94787,634],{"class":97},[91,94789,319],{"class":150},[91,94791,33221],{"class":101},[91,94793,94794],{"class":93,"line":2594},[91,94795,94796],{"class":160},"#获取最后一列排好序的索引\n",[91,94798,94799,94801,94803],{"class":93,"line":2599},[91,94800,74033],{"class":101},[91,94802,147],{"class":97},[91,94804,94805],{"class":101},"np.argsort(b)\n",[91,94807,94808],{"class":93,"line":7927},[91,94809,94810],{"class":101},"aa[index]\n",[91,94812,94813],{"class":93,"line":7951},[91,94814,93903],{"class":206},[91,94816,94817],{"class":93,"line":7956},[91,94818,94629],{"class":206},[91,94820,94821],{"class":93,"line":7962},[91,94822,94823],{"class":206},"       [46, 88, 81, 37, 25, 77],\n",[91,94825,94826],{"class":93,"line":7989},[91,94827,94639],{"class":206},[91,94829,94830],{"class":93,"line":7994},[91,94831,94832],{"class":206},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[91,94834,94835],{"class":93,"line":8000},[91,94836,93903],{"class":206},[5105,94838,94839],{},"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":10,"searchDepth":11,"depth":11,"links":94841},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94488,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94848,"title":94849,"body":94850,"description":13,"extension":14,"meta":94880,"navigation":17,"path":94881,"seo":94882,"stem":94883,"__hash__":94884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94851,"toc":94878},[94852,94855,94858,94861,94864,94867,94870,94873],[29,94853,94849],{"id":94854},"_14广播机制",[38,94856,94857],{},"广播的规则：",[38,94859,94860],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[38,94862,94863],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[38,94865,94866],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[38,94868,94869],{},"3.如果没有维度形状为1，则会引发异常",[38,94871,94872],{},"也就是只有维度或者个数为1才可以进行广播操作",[38,94874,94875],{},[1440,94876],{"alt":10,"src":94877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":10,"searchDepth":11,"depth":11,"links":94879},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94849,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94886,"title":94887,"body":94888,"description":13,"extension":14,"meta":94986,"navigation":17,"path":94987,"seo":94988,"stem":94989,"__hash__":94990},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94889,"toc":94984},[94890,94893,94896,94981],[29,94891,94887],{"id":94892},"_15比较掩码",[38,94894,94895],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[83,94897,94899],{"className":30353,"code":94898,"language":30355,"meta":10,"style":10},"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",[88,94900,94901,94947,94958,94972,94976],{"__ignoreMap":10},[91,94902,94903,94905,94907,94910,94912,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944],{"class":93,"line":94},[91,94904,340],{"class":101},[91,94906,147],{"class":97},[91,94908,94909],{"class":101},"np.array([[",[91,94911,319],{"class":150},[91,94913,480],{"class":101},[91,94915,179],{"class":150},[91,94917,480],{"class":101},[91,94919,173],{"class":150},[91,94921,48005],{"class":101},[91,94923,574],{"class":150},[91,94925,480],{"class":101},[91,94927,600],{"class":150},[91,94929,480],{"class":101},[91,94931,625],{"class":150},[91,94933,48005],{"class":101},[91,94935,827],{"class":150},[91,94937,480],{"class":101},[91,94939,852],{"class":150},[91,94941,480],{"class":101},[91,94943,877],{"class":150},[91,94945,94946],{"class":101},"]])\n",[91,94948,94949,94951,94953,94955],{"class":93,"line":11},[91,94950,340],{"class":101},[91,94952,1012],{"class":97},[91,94954,802],{"class":150},[91,94956,94957],{"class":160},"#结果是一个由True,False组成的数组\n",[91,94959,94960,94963,94965,94967,94969],{"class":93,"line":1157},[91,94961,94962],{"class":101},"a[a",[91,94964,1012],{"class":97},[91,94966,802],{"class":150},[91,94968,1042],{"class":101},[91,94970,94971],{"class":160},"#小于20的元素会存到这个数组中\n",[91,94973,94974],{"class":93,"line":1172},[91,94975,93539],{"class":160},[91,94977,94978],{"class":93,"line":1178},[91,94979,94980],{"class":160},"#array([ 1,  2,  3, 11, 12, 13])\n",[5105,94982,94983],{},"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":10,"searchDepth":11,"depth":11,"links":94985},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94887,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94992,"title":94993,"body":94994,"description":13,"extension":14,"meta":95086,"navigation":17,"path":95087,"seo":95088,"stem":95089,"__hash__":95090},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":94995,"toc":95084},[94996,94999,95002,95005,95008,95011,95076,95081],[29,94997,94993],{"id":94998},"_16魔法命令time",[38,95000,95001],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[38,95003,95004],{},"%:行模式",[38,95006,95007],{},"%%:单元格模式",[38,95009,95010],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[83,95012,95014],{"className":30353,"code":95013,"language":30355,"meta":10,"style":10},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[88,95015,95016,95021,95028,95033,95042,95055,95059,95067],{"__ignoreMap":10},[91,95017,95018],{"class":93,"line":94},[91,95019,95020],{"class":160},"#程序执行时间\n",[91,95022,95023,95025],{"class":93,"line":11},[91,95024,30367],{"class":97},[91,95026,95027],{"class":101}," time \n",[91,95029,95030],{"class":93,"line":1157},[91,95031,95032],{"class":160},"#获取时间\n",[91,95034,95035,95038,95040],{"class":93,"line":1172},[91,95036,95037],{"class":101},"start",[91,95039,147],{"class":97},[91,95041,32393],{"class":101},[91,95043,95044,95047,95050,95052],{"class":93,"line":1178},[91,95045,95046],{"class":101},"time.sleep(",[91,95048,95049],{"class":150},"0.4",[91,95051,531],{"class":101},[91,95053,95054],{"class":160},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[91,95056,95057],{"class":93,"line":1192},[91,95058,95032],{"class":160},[91,95060,95061,95063,95065],{"class":93,"line":1198},[91,95062,45776],{"class":101},[91,95064,147],{"class":97},[91,95066,32393],{"class":101},[91,95068,95069,95071,95073],{"class":93,"line":1289},[91,95070,45776],{"class":101},[91,95072,634],{"class":97},[91,95074,95075],{"class":101},"start\n",[38,95077,95078],{},[1440,95079],{"alt":10,"src":95080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5105,95082,95083],{},"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":10,"searchDepth":11,"depth":11,"links":95085},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94993,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95092,"title":95093,"body":95094,"description":13,"extension":14,"meta":95129,"navigation":17,"path":95130,"seo":95131,"stem":95132,"__hash__":95133},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95095,"toc":95127},[95096,95099,95102,95105,95108,95111,95114,95117,95122],[29,95097,95093],{"id":95098},"_17魔法命令timeit",[38,95100,95101],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[38,95103,95104],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[38,95106,95107],{},"单元格模式：",[38,95109,95110],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[38,95112,95113],{},"初始化语句执行次数由轮数来决定",[38,95115,95116],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[38,95118,95119],{},[1440,95120],{"alt":10,"src":95121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[38,95123,95124],{},[1440,95125],{"alt":10,"src":95126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":10,"searchDepth":11,"depth":11,"links":95128},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95093,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95135,"title":95136,"body":95137,"description":13,"extension":14,"meta":95155,"navigation":17,"path":95156,"seo":95157,"stem":95158,"__hash__":95159},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95138,"toc":95153},[95139,95142,95145,95148],[29,95140,95136],{"id":95141},"_18魔法命令writefile和run",[38,95143,95144],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[38,95146,95147],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[38,95149,95150],{},[1440,95151],{"alt":10,"src":95152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":10,"searchDepth":11,"depth":11,"links":95154},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95136,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95161,"title":95162,"body":95163,"description":13,"extension":14,"meta":95216,"navigation":17,"path":95217,"seo":95218,"stem":95219,"__hash__":95220},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95164,"toc":95214},[95165,95168,95171,95173,95176,95179,95184,95187,95190,95193,95196,95199,95202,95205,95208,95211],[29,95166,95162],{"id":95167},"_19魔法命令memit",[38,95169,95170],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[38,95172,24574],{},[38,95174,95175],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[38,95177,95178],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[38,95180,95181],{},[1440,95182],{"alt":10,"src":95183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[38,95185,95186],{},"补充：",[38,95188,95189],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[38,95191,95192],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[38,95194,95195],{},"解决方法：",[38,95197,95198],{},"1.cmd",[38,95200,95201],{},"2.依次输入以下代码：",[38,95203,95204],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[38,95206,95207],{},"pip install --upgrade ipython",[38,95209,95210],{},"#升级 memory_profiler 和 setuptools",[38,95212,95213],{},"pip install --upgrade memory_profiler setuptools",{"title":10,"searchDepth":11,"depth":11,"links":95215},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95162,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95222,"title":95223,"body":95224,"description":13,"extension":14,"meta":96870,"navigation":17,"path":96871,"seo":96872,"stem":96873,"__hash__":96874},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95225,"toc":96840},[95226,95229,95233,95237,95298,95301,95306,95310,95315,95320,95325,95330,95333,95338,95342,95346,95379,95382,95385,95388,95440,95443,95479,95482,95524,95528,95549,95551,95588,95590,95595,95597,95602,95606,95609,95637,95641,95645,95698,95702,95794,95798,95802,95805,95810,95814,95839,95844,95848,95851,95854,95857,95860,95863,95866,95869,95881,95885,95889,95892,95924,95927,95950,95953,95979,95982,96008,96011,96045,96048,96110,96114,96117,96121,96124,96150,96153,96156,96161,96164,96233,96235,96240,96301,96304,96315,96321,96326,96330,96333,96346,96350,96365,96367,96390,96392,96418,96421,96424,96427,96475,96477,96482,96486,96490,96517,96521,96548,96551,96556,96561,96651,96655,96713,96718,96721,96724,96766,96770,96826,96831,96834,96837],[29,95227,95223],{"id":95228},"_2创建数组",[33,95230,95232],{"id":95231},"_21-array函数创建数组","2.1 array()函数创建数组",[63,95234,95236],{"id":95235},"_221-函数语句","2.2.1 函数语句",[83,95238,95240],{"className":30353,"code":95239,"language":30355,"meta":10,"style":10},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[88,95241,95242],{"__ignoreMap":10},[91,95243,95244,95247,95250,95252,95254,95256,95258,95260,95263,95265,95268,95270,95273,95275,95277,95279,95282,95284,95287,95289,95292,95294,95296],{"class":93,"line":94},[91,95245,95246],{"class":101},"numpy.array(",[91,95248,95249],{"class":150},"object",[91,95251,12414],{"class":101},[91,95253,93475],{"class":5195},[91,95255,13543],{"class":97},[91,95257,38908],{"class":150},[91,95259,12414],{"class":101},[91,95261,95262],{"class":5195},"copy",[91,95264,13543],{"class":97},[91,95266,95267],{"class":150}," True",[91,95269,12414],{"class":101},[91,95271,95272],{"class":5195},"order",[91,95274,13543],{"class":97},[91,95276,38908],{"class":150},[91,95278,12414],{"class":101},[91,95280,95281],{"class":5195},"subok",[91,95283,13543],{"class":97},[91,95285,95286],{"class":150}," False",[91,95288,12414],{"class":101},[91,95290,95291],{"class":5195},"ndmin",[91,95293,13543],{"class":97},[91,95295,4071],{"class":150},[91,95297,108],{"class":101},[38,95299,95300],{},"参数：",[38,95302,95303],{},[1440,95304],{"alt":10,"src":95305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[63,95307,95309],{"id":95308},"_222-实例","2.2.2 实例",[38,95311,95312],{},[1440,95313],{"alt":10,"src":95314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[38,95316,95317],{},[1440,95318],{"alt":10,"src":95319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[38,95321,95322],{},[1440,95323],{"alt":10,"src":95324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[38,95326,95327],{},[1440,95328],{"alt":10,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[38,95331,95332],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[38,95334,95335],{},[1440,95336],{"alt":10,"src":95337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[33,95339,95341],{"id":95340},"_22-随机数创建数组","2.2 随机数创建数组",[63,95343,95345],{"id":95344},"_221-random语句","2.2.1 random语句",[83,95347,95349],{"className":30353,"code":95348,"language":30355,"meta":10,"style":10},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[88,95350,95351,95356,95361,95369,95374],{"__ignoreMap":10},[91,95352,95353],{"class":93,"line":94},[91,95354,95355],{"class":160},"#random.random()\n",[91,95357,95358],{"class":93,"line":11},[91,95359,95360],{"class":160},"#确定随机种子,就是每次运行结果是相同的\n",[91,95362,95363,95365,95367],{"class":93,"line":1157},[91,95364,94582],{"class":101},[91,95366,293],{"class":150},[91,95368,108],{"class":101},[91,95370,95371],{"class":93,"line":1172},[91,95372,95373],{"class":101},"np.random.random()\n",[91,95375,95376],{"class":93,"line":1178},[91,95377,95378],{"class":160},"#生成一个随机的数目\n",[38,95380,95381],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[38,95383,95384],{},"可以指定数组形状 size",[38,95386,95387],{},"①生成一维数组",[83,95389,95391],{"className":30353,"code":95390,"language":30355,"meta":10,"style":10},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[88,95392,95393,95398,95411,95416,95432],{"__ignoreMap":10},[91,95394,95395],{"class":93,"line":94},[91,95396,95397],{"class":160},"#random.random(size())\n",[91,95399,95400,95403,95405,95407,95409],{"class":93,"line":11},[91,95401,95402],{"class":101},"np.random.random(",[91,95404,31471],{"class":5195},[91,95406,147],{"class":97},[91,95408,421],{"class":150},[91,95410,108],{"class":101},[91,95412,95413],{"class":93,"line":1157},[91,95414,95415],{"class":160},"#生成一位的五个元素\n",[91,95417,95418,95420,95422,95424,95426,95428,95430],{"class":93,"line":1172},[91,95419,340],{"class":101},[91,95421,147],{"class":97},[91,95423,95402],{"class":101},[91,95425,31471],{"class":5195},[91,95427,147],{"class":97},[91,95429,395],{"class":150},[91,95431,108],{"class":101},[91,95433,95434,95437],{"class":93,"line":1178},[91,95435,95436],{"class":101},"a.shape ",[91,95438,95439],{"class":160},"#输出数组形状\n",[38,95441,95442],{},"②生成二维数组",[83,95444,95446],{"className":30353,"code":95445,"language":30355,"meta":10,"style":10},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[88,95447,95448,95452,95474],{"__ignoreMap":10},[91,95449,95450],{"class":93,"line":94},[91,95451,93276],{"class":160},[91,95453,95454,95456,95458,95460,95462,95464,95466,95468,95470,95472],{"class":93,"line":11},[91,95455,93281],{"class":101},[91,95457,147],{"class":97},[91,95459,95402],{"class":101},[91,95461,31471],{"class":5195},[91,95463,147],{"class":97},[91,95465,102],{"class":101},[91,95467,395],{"class":150},[91,95469,480],{"class":101},[91,95471,421],{"class":150},[91,95473,30472],{"class":101},[91,95475,95476],{"class":93,"line":1157},[91,95477,95478],{"class":160},"#生成四行五列的数组\n",[38,95480,95481],{},"③生成三维数组",[83,95483,95485],{"className":30353,"code":95484,"language":30355,"meta":10,"style":10},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[88,95486,95487,95492,95519],{"__ignoreMap":10},[91,95488,95489],{"class":93,"line":94},[91,95490,95491],{"class":160},"#三维数组\n",[91,95493,95494,95497,95499,95501,95503,95505,95507,95509,95511,95513,95515,95517],{"class":93,"line":11},[91,95495,95496],{"class":101},"aaa",[91,95498,147],{"class":97},[91,95500,95402],{"class":101},[91,95502,31471],{"class":5195},[91,95504,147],{"class":97},[91,95506,102],{"class":101},[91,95508,179],{"class":150},[91,95510,480],{"class":101},[91,95512,173],{"class":150},[91,95514,480],{"class":101},[91,95516,395],{"class":150},[91,95518,30472],{"class":101},[91,95520,95521],{"class":93,"line":1157},[91,95522,95523],{"class":101},"aaa.shape\n",[63,95525,95527],{"id":95526},"_222-randint语句","2.2.2 randint语句",[83,95529,95531],{"className":30353,"code":95530,"language":30355,"meta":10,"style":10},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[88,95532,95533,95538],{"__ignoreMap":10},[91,95534,95535],{"class":93,"line":94},[91,95536,95537],{"class":160},"#生成随机的整数 random.randint(low,high,size)\n",[91,95539,95540,95542,95544,95546],{"class":93,"line":11},[91,95541,93089],{"class":101},[91,95543,421],{"class":150},[91,95545,13693],{"class":101},[91,95547,95548],{"class":160},"#0~5中的随机一个数\n",[38,95550,95387],{},[83,95552,95554],{"className":30353,"code":95553,"language":30355,"meta":10,"style":10},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[88,95555,95556,95561,95583],{"__ignoreMap":10},[91,95557,95558],{"class":93,"line":94},[91,95559,95560],{"class":160},"#一维\n",[91,95562,95563,95565,95567,95569,95571,95573,95575,95577,95579,95581],{"class":93,"line":11},[91,95564,93089],{"class":101},[91,95566,319],{"class":150},[91,95568,480],{"class":101},[91,95570,574],{"class":150},[91,95572,480],{"class":101},[91,95574,31471],{"class":5195},[91,95576,147],{"class":97},[91,95578,102],{"class":101},[91,95580,548],{"class":150},[91,95582,30472],{"class":101},[91,95584,95585],{"class":93,"line":1157},[91,95586,95587],{"class":160},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[38,95589,95442],{},[38,95591,95592],{},[1440,95593],{"alt":10,"src":95594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[38,95596,95481],{},[38,95598,95599],{},[1440,95600],{"alt":10,"src":95601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[63,95603,95605],{"id":95604},"_222-rand语句","2.2.2 rand语句",[38,95607,95608],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[83,95610,95612],{"className":30353,"code":95611,"language":30355,"meta":10,"style":10},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[88,95613,95614,95627,95632],{"__ignoreMap":10},[91,95615,95616,95619,95621,95623,95625],{"class":93,"line":94},[91,95617,95618],{"class":101},"np.random.rand(",[91,95620,413],{"class":150},[91,95622,480],{"class":101},[91,95624,548],{"class":150},[91,95626,108],{"class":101},[91,95628,95629],{"class":93,"line":11},[91,95630,95631],{"class":160},"#第一个参数100：行数，表示有100个样本\n",[91,95633,95634],{"class":93,"line":1157},[91,95635,95636],{"class":160},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,95638,95640],{"id":95639},"_23-arange创建数组","2.3 arange()创建数组",[63,95642,95644],{"id":95643},"_231-函数语句","2.3.1 函数语句",[83,95646,95648],{"className":30353,"code":95647,"language":30355,"meta":10,"style":10},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[88,95649,95650,95664,95669,95674,95679,95684,95689,95694],{"__ignoreMap":10},[91,95651,95652,95655,95657,95659,95662],{"class":93,"line":94},[91,95653,95654],{"class":101},"numpy.arange([start,] stop[, step], ",[91,95656,93475],{"class":5195},[91,95658,147],{"class":97},[91,95660,95661],{"class":150},"None",[91,95663,108],{"class":101},[91,95665,95666],{"class":93,"line":11},[91,95667,95668],{"class":160},"#参数\n",[91,95670,95671],{"class":93,"line":1157},[91,95672,95673],{"class":206},"\"\"\"\n",[91,95675,95676],{"class":93,"line":1172},[91,95677,95678],{"class":206},"start:起始值，可选，默认从 0 开始。\n",[91,95680,95681],{"class":93,"line":1178},[91,95682,95683],{"class":206},"stop:结束值（不包含该值）。\n",[91,95685,95686],{"class":93,"line":1192},[91,95687,95688],{"class":206},"step:步长，可选，默认是 1。可以为浮点数。\n",[91,95690,95691],{"class":93,"line":1198},[91,95692,95693],{"class":206},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[91,95695,95696],{"class":93,"line":1289},[91,95697,95673],{"class":206},[63,95699,95701],{"id":95700},"_232-实例","2.3.2 实例",[83,95703,95705],{"className":30353,"code":95704,"language":30355,"meta":10,"style":10},"#创建一维数组\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",[88,95706,95707,95711,95735,95740,95745,95749,95772,95776,95780,95785,95790],{"__ignoreMap":10},[91,95708,95709],{"class":93,"line":94},[91,95710,93080],{"class":160},[91,95712,95713,95715,95717,95719,95721,95723,95725,95727,95729,95731,95733],{"class":93,"line":11},[91,95714,92977],{"class":101},[91,95716,319],{"class":150},[91,95718,480],{"class":101},[91,95720,827],{"class":150},[91,95722,480],{"class":101},[91,95724,319],{"class":150},[91,95726,480],{"class":101},[91,95728,93475],{"class":5195},[91,95730,147],{"class":97},[91,95732,105],{"class":150},[91,95734,108],{"class":101},[91,95736,95737],{"class":93,"line":1157},[91,95738,95739],{"class":160},"#输出结果：\n",[91,95741,95742],{"class":93,"line":1172},[91,95743,95744],{"class":160},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[91,95746,95747],{"class":93,"line":1178},[91,95748,93922],{"class":160},[91,95750,95751,95754,95756,95758,95760,95763,95765,95767,95769],{"class":93,"line":1192},[91,95752,95753],{"class":101},"np.array([np.arange(",[91,95755,319],{"class":150},[91,95757,480],{"class":101},[91,95759,395],{"class":150},[91,95761,95762],{"class":101},"),np.arange(",[91,95764,395],{"class":150},[91,95766,480],{"class":101},[91,95768,471],{"class":150},[91,95770,95771],{"class":101},")])\n",[91,95773,95774],{"class":93,"line":1198},[91,95775,93539],{"class":160},[91,95777,95778],{"class":93,"line":1289},[91,95779,95673],{"class":206},[91,95781,95782],{"class":93,"line":1295},[91,95783,95784],{"class":206},"array([[1, 2, 3],\n",[91,95786,95787],{"class":93,"line":1307},[91,95788,95789],{"class":206},"       [4, 5, 6]])\n",[91,95791,95792],{"class":93,"line":1590},[91,95793,95673],{"class":206},[33,95795,95797],{"id":95796},"_24-生态分布","2.4 生态分布",[63,95799,95801],{"id":95800},"_241-标准正态分布","2.4.1 标准正态分布",[38,95803,95804],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[38,95806,95807],{},[1440,95808],{"alt":10,"src":95809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[63,95811,95813],{"id":95812},"_242-常规正态分布","2.4.2 常规正态分布",[83,95815,95817],{"className":30353,"code":95816,"language":30355,"meta":10,"style":10},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[88,95818,95819,95824,95829,95834],{"__ignoreMap":10},[91,95820,95821],{"class":93,"line":94},[91,95822,95823],{"class":101},"random.normal(loc,scale,size)也可以生成正态分布\n",[91,95825,95826],{"class":93,"line":11},[91,95827,95828],{"class":160},"#loc:期望\n",[91,95830,95831],{"class":93,"line":1157},[91,95832,95833],{"class":160},"#scale:方差\n",[91,95835,95836],{"class":93,"line":1172},[91,95837,95838],{"class":160},"#size:用于确定是几维的数列\n",[38,95840,95841],{},[1440,95842],{"alt":10,"src":95843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[33,95845,95847],{"id":95846},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[38,95849,95850],{},"ndim:秩，维度个数",[38,95852,95853],{},"size:数组元素的个数",[38,95855,95856],{},"shape:数组的形状",[38,95858,95859],{},"dtype:数组元素的类型",[38,95861,95862],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[38,95864,95865],{},"他们都是属性，通过数组.属性的形式来确定",[38,95867,95868],{},"如果需要输出多个可以通过以下方式：",[83,95870,95872],{"className":30353,"code":95871,"language":30355,"meta":10,"style":10},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[88,95873,95874],{"__ignoreMap":10},[91,95875,95876,95878],{"class":93,"line":94},[91,95877,30390],{"class":150},[91,95879,95880],{"class":101},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,95882,95884],{"id":95883},"_26-其他方式创建数组","2.6 其他方式创建数组",[63,95886,95888],{"id":95887},"_261-zeros创建数组","2.6.1 zeros()创建数组",[38,95890,95891],{},"①创建一维数组",[83,95893,95895],{"className":30353,"code":95894,"language":30355,"meta":10,"style":10},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[88,95896,95897,95906,95910,95915,95920],{"__ignoreMap":10},[91,95898,95899,95902,95904],{"class":93,"line":94},[91,95900,95901],{"class":101},"np.zeros(",[91,95903,548],{"class":150},[91,95905,108],{"class":101},[91,95907,95908],{"class":93,"line":11},[91,95909,95673],{"class":206},[91,95911,95912],{"class":93,"line":1157},[91,95913,95914],{"class":206},"输出结果：\n",[91,95916,95917],{"class":93,"line":1172},[91,95918,95919],{"class":206},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[91,95921,95922],{"class":93,"line":1178},[91,95923,95673],{"class":206},[38,95925,95926],{},"上方代码等价于：",[83,95928,95930],{"className":30353,"code":95929,"language":30355,"meta":10,"style":10},"np.zeros(shape=(10))#创建10个元素的0数组\n",[88,95931,95932],{"__ignoreMap":10},[91,95933,95934,95936,95939,95941,95943,95945,95947],{"class":93,"line":94},[91,95935,95901],{"class":101},[91,95937,95938],{"class":5195},"shape",[91,95940,147],{"class":97},[91,95942,102],{"class":101},[91,95944,548],{"class":150},[91,95946,82746],{"class":101},[91,95948,95949],{"class":160},"#创建10个元素的0数组\n",[38,95951,95952],{},"也可以指定类型",[83,95954,95956],{"className":30353,"code":95955,"language":30355,"meta":10,"style":10},"#指定类型\nnp.zeros(5,dtype=int)\n",[88,95957,95958,95963],{"__ignoreMap":10},[91,95959,95960],{"class":93,"line":94},[91,95961,95962],{"class":160},"#指定类型\n",[91,95964,95965,95967,95969,95971,95973,95975,95977],{"class":93,"line":11},[91,95966,95901],{"class":101},[91,95968,421],{"class":150},[91,95970,480],{"class":101},[91,95972,93475],{"class":5195},[91,95974,147],{"class":97},[91,95976,105],{"class":150},[91,95978,108],{"class":101},[38,95980,95981],{},"②创建二维数组",[83,95983,95985],{"className":30353,"code":95984,"language":30355,"meta":10,"style":10},"np.zeros((3,4),dtype=int)\n",[88,95986,95987],{"__ignoreMap":10},[91,95988,95989,95992,95994,95996,95998,96000,96002,96004,96006],{"class":93,"line":94},[91,95990,95991],{"class":101},"np.zeros((",[91,95993,173],{"class":150},[91,95995,480],{"class":101},[91,95997,395],{"class":150},[91,95999,42231],{"class":101},[91,96001,93475],{"class":5195},[91,96003,147],{"class":97},[91,96005,105],{"class":150},[91,96007,108],{"class":101},[38,96009,96010],{},"③创建三维数组",[83,96012,96014],{"className":30353,"code":96013,"language":30355,"meta":10,"style":10},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[88,96015,96016,96021],{"__ignoreMap":10},[91,96017,96018],{"class":93,"line":94},[91,96019,96020],{"class":160},"#创建三维数组\n",[91,96022,96023,96025,96027,96029,96031,96033,96035,96037,96039,96041,96043],{"class":93,"line":11},[91,96024,95991],{"class":101},[91,96026,173],{"class":150},[91,96028,480],{"class":101},[91,96030,395],{"class":150},[91,96032,480],{"class":101},[91,96034,421],{"class":150},[91,96036,42231],{"class":101},[91,96038,93475],{"class":5195},[91,96040,147],{"class":97},[91,96042,105],{"class":150},[91,96044,108],{"class":101},[38,96046,96047],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[83,96049,96051],{"className":30353,"code":96050,"language":30355,"meta":10,"style":10},"#使用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",[88,96052,96053,96058,96073,96078,96083,96105],{"__ignoreMap":10},[91,96054,96055],{"class":93,"line":94},[91,96056,96057],{"class":160},"#使用zeros_like将创建的一维数组变成全0的数组\n",[91,96059,96060,96062,96064,96066,96068,96070],{"class":93,"line":11},[91,96061,340],{"class":101},[91,96063,147],{"class":97},[91,96065,92977],{"class":101},[91,96067,395],{"class":150},[91,96069,531],{"class":101},[91,96071,96072],{"class":160},"#这个得到的结果：一维数组0，1，2，3\n",[91,96074,96075],{"class":93,"line":1157},[91,96076,96077],{"class":101},"np.zeros_like(a)\n",[91,96079,96080],{"class":93,"line":1172},[91,96081,96082],{"class":160},"#使用zeros_like将创建的二维数组变成全0的数组\n",[91,96084,96085,96087,96089,96091,96093,96095,96097,96099,96101,96103],{"class":93,"line":1178},[91,96086,93281],{"class":101},[91,96088,147],{"class":97},[91,96090,95402],{"class":101},[91,96092,31471],{"class":5195},[91,96094,147],{"class":97},[91,96096,102],{"class":101},[91,96098,395],{"class":150},[91,96100,480],{"class":101},[91,96102,421],{"class":150},[91,96104,30472],{"class":101},[91,96106,96107],{"class":93,"line":1192},[91,96108,96109],{"class":101},"np.zeros_like(aa)\n",[63,96111,96113],{"id":96112},"_262-ones创建数组","2.6.2 ones()创建数组",[38,96115,96116],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[63,96118,96120],{"id":96119},"_263-empty创建数组","2.6.3 empty()创建数组",[38,96122,96123],{},"①empty()用法",[83,96125,96127],{"className":30353,"code":96126,"language":30355,"meta":10,"style":10},"numpy.empty(shape,dtype=float,order='c')\n",[88,96128,96129],{"__ignoreMap":10},[91,96130,96131,96134,96136,96138,96140,96142,96144,96146,96148],{"class":93,"line":94},[91,96132,96133],{"class":101},"numpy.empty(shape,",[91,96135,93475],{"class":5195},[91,96137,147],{"class":97},[91,96139,141],{"class":150},[91,96141,480],{"class":101},[91,96143,95272],{"class":5195},[91,96145,147],{"class":97},[91,96147,76003],{"class":206},[91,96149,108],{"class":101},[38,96151,96152],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[38,96154,96155],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[38,96157,96158],{},[1440,96159],{"alt":10,"src":96160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[38,96162,96163],{},"②empty()用法",[83,96165,96167],{"className":30353,"code":96166,"language":30355,"meta":10,"style":10},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[88,96168,96169,96190,96202,96223,96228],{"__ignoreMap":10},[91,96170,96171,96173,96175,96178,96180,96182,96184,96186,96188],{"class":93,"line":94},[91,96172,947],{"class":101},[91,96174,147],{"class":97},[91,96176,96177],{"class":101},"np.empty(",[91,96179,548],{"class":150},[91,96181,480],{"class":101},[91,96183,93475],{"class":5195},[91,96185,147],{"class":97},[91,96187,105],{"class":150},[91,96189,108],{"class":101},[91,96191,96192,96194,96196,96198,96200],{"class":93,"line":11},[91,96193,922],{"class":101},[91,96195,147],{"class":97},[91,96197,92977],{"class":101},[91,96199,421],{"class":150},[91,96201,108],{"class":101},[91,96203,96204,96207,96209,96212,96214,96216,96219,96221],{"class":93,"line":1157},[91,96205,96206],{"class":101},"np.add(",[91,96208,179],{"class":150},[91,96210,96211],{"class":101},",x,",[91,96213,93029],{"class":5195},[91,96215,147],{"class":97},[91,96217,96218],{"class":101},"y[:",[91,96220,421],{"class":150},[91,96222,4635],{"class":101},[91,96224,96225],{"class":93,"line":1172},[91,96226,96227],{"class":160},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[91,96229,96230],{"class":93,"line":1178},[91,96231,96232],{"class":101},"y\n",[38,96234,11493],{},[38,96236,96237],{},[1440,96238],{"alt":10,"src":96239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[83,96241,96243],{"className":30353,"code":96242,"language":30355,"meta":10,"style":10},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[88,96244,96245,96261,96281,96296],{"__ignoreMap":10},[91,96246,96247,96249,96251,96253,96255,96257,96259],{"class":93,"line":94},[91,96248,922],{"class":101},[91,96250,147],{"class":97},[91,96252,92977],{"class":101},[91,96254,319],{"class":150},[91,96256,480],{"class":101},[91,96258,446],{"class":150},[91,96260,108],{"class":101},[91,96262,96263,96265,96267,96269,96271,96273,96275,96277,96279],{"class":93,"line":11},[91,96264,947],{"class":101},[91,96266,147],{"class":97},[91,96268,96177],{"class":101},[91,96270,421],{"class":150},[91,96272,480],{"class":101},[91,96274,93475],{"class":5195},[91,96276,147],{"class":97},[91,96278,105],{"class":150},[91,96280,108],{"class":101},[91,96282,96283,96286,96288,96290,96292,96294],{"class":93,"line":1157},[91,96284,96285],{"class":101},"np.add(x,",[91,96287,179],{"class":150},[91,96289,480],{"class":101},[91,96291,93029],{"class":5195},[91,96293,147],{"class":97},[91,96295,93424],{"class":101},[91,96297,96298],{"class":93,"line":1172},[91,96299,96300],{"class":160},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[38,96302,96303],{},"③empty_like()",[38,96305,96306],{},[251,96307,96308,96309,96314],{},"创建一个",[251,96310,96311],{},[251,96312,96313],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[38,96316,96317,96320],{},[88,96318,96319],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[38,96322,96323],{},[1440,96324],{"alt":10,"src":96325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[63,96327,96329],{"id":96328},"_264-用法","2.6.4 ？？用法",[38,96331,96332],{},"当想查看一个函数的参数时，可以通过？？来实现",[83,96334,96336],{"className":30353,"code":96335,"language":30355,"meta":10,"style":10},"np.full??\n",[88,96337,96338],{"__ignoreMap":10},[91,96339,96340,96343],{"class":93,"line":94},[91,96341,96342],{"class":101},"np.full",[91,96344,96345],{"class":77378},"??\n",[63,96347,96349],{"id":96348},"_265-full创建数组","2.6.5 full()创建数组",[83,96351,96353],{"className":30353,"code":96352,"language":30355,"meta":10,"style":10},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[88,96354,96355,96360],{"__ignoreMap":10},[91,96356,96357],{"class":93,"line":94},[91,96358,96359],{"class":101},"full(shape,fill_value)\n",[91,96361,96362],{"class":93,"line":11},[91,96363,96364],{"class":101},"创建全为某个指定值的数组\n",[38,96366,94505],{},[83,96368,96370],{"className":30353,"code":96369,"language":30355,"meta":10,"style":10},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[88,96371,96372,96377],{"__ignoreMap":10},[91,96373,96374],{"class":93,"line":94},[91,96375,96376],{"class":160},"#创建一个一维数组,以20进行填充\n",[91,96378,96379,96382,96384,96386,96388],{"class":93,"line":11},[91,96380,96381],{"class":101},"np.full(",[91,96383,548],{"class":150},[91,96385,480],{"class":101},[91,96387,802],{"class":150},[91,96389,108],{"class":101},[38,96391,93266],{},[83,96393,96395],{"className":30353,"code":96394,"language":30355,"meta":10,"style":10},"#创建二维数组\nnp.full((3,5),11)\n",[88,96396,96397,96401],{"__ignoreMap":10},[91,96398,96399],{"class":93,"line":94},[91,96400,93922],{"class":160},[91,96402,96403,96406,96408,96410,96412,96414,96416],{"class":93,"line":11},[91,96404,96405],{"class":101},"np.full((",[91,96407,173],{"class":150},[91,96409,480],{"class":101},[91,96411,421],{"class":150},[91,96413,42231],{"class":101},[91,96415,574],{"class":150},[91,96417,108],{"class":101},[38,96419,96420],{},"③full_like用法",[38,96422,96423],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[38,96425,96426],{},"这里是指定填充而已",[83,96428,96430],{"className":30353,"code":96429,"language":30355,"meta":10,"style":10},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[88,96431,96432,96437,96461,96466],{"__ignoreMap":10},[91,96433,96434],{"class":93,"line":94},[91,96435,96436],{"class":160},"#创建一个指定形状数组\n",[91,96438,96439,96441,96443,96445,96447,96449,96451,96453,96455,96457,96459],{"class":93,"line":11},[91,96440,340],{"class":101},[91,96442,147],{"class":97},[91,96444,92977],{"class":101},[91,96446,319],{"class":150},[91,96448,480],{"class":101},[91,96450,427],{"class":150},[91,96452,92982],{"class":101},[91,96454,395],{"class":150},[91,96456,480],{"class":101},[91,96458,522],{"class":150},[91,96460,108],{"class":101},[91,96462,96463],{"class":93,"line":1157},[91,96464,96465],{"class":160},"#进行指定填充\n",[91,96467,96468,96471,96473],{"class":93,"line":1172},[91,96469,96470],{"class":101},"np.full_like(a,",[91,96472,548],{"class":150},[91,96474,108],{"class":101},[38,96476,11493],{},[38,96478,96479],{},[1440,96480],{"alt":10,"src":96481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[63,96483,96485],{"id":96484},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21977,96487,96489],{"id":96488},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[83,96491,96493],{"className":30353,"code":96492,"language":30355,"meta":10,"style":10},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[88,96494,96495,96512],{"__ignoreMap":10},[91,96496,96497,96500,96502,96504,96506,96508,96510],{"class":93,"line":94},[91,96498,96499],{"class":101},"np.eye(",[91,96501,395],{"class":150},[91,96503,480],{"class":101},[91,96505,93475],{"class":5195},[91,96507,147],{"class":97},[91,96509,105],{"class":150},[91,96511,108],{"class":101},[91,96513,96514],{"class":93,"line":11},[91,96515,96516],{"class":160},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21977,96518,96520],{"id":96519},"_2662-法2identity","2.6.6.2 法2：identity()",[83,96522,96524],{"className":30353,"code":96523,"language":30355,"meta":10,"style":10},"#identity()\nnp.identity(5,dtype=int)\n",[88,96525,96526,96531],{"__ignoreMap":10},[91,96527,96528],{"class":93,"line":94},[91,96529,96530],{"class":160},"#identity()\n",[91,96532,96533,96536,96538,96540,96542,96544,96546],{"class":93,"line":11},[91,96534,96535],{"class":101},"np.identity(",[91,96537,421],{"class":150},[91,96539,480],{"class":101},[91,96541,93475],{"class":5195},[91,96543,147],{"class":97},[91,96545,105],{"class":150},[91,96547,108],{"class":101},[38,96549,96550],{},"两个函数是有区别的",[38,96552,96553],{},[1440,96554],{"alt":10,"src":96555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[38,96557,96558],{},[1440,96559],{"alt":10,"src":96560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[83,96562,96564],{"className":30353,"code":96563,"language":30355,"meta":10,"style":10},"# 创建一个 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",[88,96565,96566,96571,96583,96588,96593,96598,96603,96607,96612,96632,96636,96641,96646],{"__ignoreMap":10},[91,96567,96568],{"class":93,"line":94},[91,96569,96570],{"class":160},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[91,96572,96573,96575,96577,96579,96581],{"class":93,"line":11},[91,96574,96499],{"class":101},[91,96576,173],{"class":150},[91,96578,12414],{"class":101},[91,96580,395],{"class":150},[91,96582,108],{"class":101},[91,96584,96585],{"class":93,"line":1157},[91,96586,96587],{"class":160},"# 输出:\n",[91,96589,96590],{"class":93,"line":1172},[91,96591,96592],{"class":160},"# [[1. 0. 0. 0.]\n",[91,96594,96595],{"class":93,"line":1178},[91,96596,96597],{"class":160},"#  [0. 1. 0. 0.]\n",[91,96599,96600],{"class":93,"line":1192},[91,96601,96602],{"class":160},"#  [0. 0. 1. 0.]]\n",[91,96604,96605],{"class":93,"line":1198},[91,96606,2378],{"emptyLinePlaceholder":17},[91,96608,96609],{"class":93,"line":1289},[91,96610,96611],{"class":160},"# 对角线向上偏移1\n",[91,96613,96614,96616,96618,96620,96622,96624,96626,96628,96630],{"class":93,"line":1295},[91,96615,96499],{"class":101},[91,96617,173],{"class":150},[91,96619,12414],{"class":101},[91,96621,395],{"class":150},[91,96623,12414],{"class":101},[91,96625,595],{"class":5195},[91,96627,147],{"class":97},[91,96629,319],{"class":150},[91,96631,108],{"class":101},[91,96633,96634],{"class":93,"line":1307},[91,96635,96587],{"class":160},[91,96637,96638],{"class":93,"line":1590},[91,96639,96640],{"class":160},"# [[0. 1. 0. 0.]\n",[91,96642,96643],{"class":93,"line":1595},[91,96644,96645],{"class":160},"#  [0. 0. 1. 0.]\n",[91,96647,96648],{"class":93,"line":1601},[91,96649,96650],{"class":160},"#  [0. 0. 0. 1.]]\n",[63,96652,96654],{"id":96653},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[83,96656,96658],{"className":30353,"code":96657,"language":30355,"meta":10,"style":10},"#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",[88,96659,96660,96665,96669,96674,96679,96684,96689,96694,96699,96704,96709],{"__ignoreMap":10},[91,96661,96662],{"class":93,"line":94},[91,96663,96664],{"class":160},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[91,96666,96667],{"class":93,"line":11},[91,96668,95673],{"class":206},[91,96670,96671],{"class":93,"line":1157},[91,96672,96673],{"class":206},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[91,96675,96676],{"class":93,"line":1172},[91,96677,96678],{"class":206},"参数介绍：\n",[91,96680,96681],{"class":93,"line":1178},[91,96682,96683],{"class":206},"start：序列的起始值\n",[91,96685,96686],{"class":93,"line":1192},[91,96687,96688],{"class":206},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[91,96690,96691],{"class":93,"line":1198},[91,96692,96693],{"class":206},"num：要生长的等步长的样本数量，默认为50\n",[91,96695,96696],{"class":93,"line":1289},[91,96697,96698],{"class":206},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[91,96700,96701],{"class":93,"line":1295},[91,96702,96703],{"class":206},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[91,96705,96706],{"class":93,"line":1307},[91,96707,96708],{"class":206},"dtype：ndarry的数据类型\n",[91,96710,96711],{"class":93,"line":1590},[91,96712,95673],{"class":206},[38,96714,96715],{},[1440,96716],{"alt":10,"src":96717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[38,96719,96720],{},"这里num=是可以省略的",[38,96722,96723],{},"也就是下方两行代码结果是一模一样的",[83,96725,96727],{"className":30353,"code":96726,"language":30355,"meta":10,"style":10},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[88,96728,96729,96746],{"__ignoreMap":10},[91,96730,96731,96734,96736,96738,96740,96742,96744],{"class":93,"line":94},[91,96732,96733],{"class":101},"np.linspace(",[91,96735,319],{"class":150},[91,96737,480],{"class":101},[91,96739,421],{"class":150},[91,96741,480],{"class":101},[91,96743,421],{"class":150},[91,96745,108],{"class":101},[91,96747,96748,96750,96752,96754,96756,96758,96760,96762,96764],{"class":93,"line":11},[91,96749,96733],{"class":101},[91,96751,319],{"class":150},[91,96753,480],{"class":101},[91,96755,421],{"class":150},[91,96757,480],{"class":101},[91,96759,1643],{"class":5195},[91,96761,147],{"class":97},[91,96763,421],{"class":150},[91,96765,108],{"class":101},[63,96767,96769],{"id":96768},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[83,96771,96773],{"className":30353,"code":96772,"language":30355,"meta":10,"style":10},"#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",[88,96774,96775,96780,96784,96789,96794,96799,96804,96808,96813,96818,96822],{"__ignoreMap":10},[91,96776,96777],{"class":93,"line":94},[91,96778,96779],{"class":160},"#logspace函数用于创建一个等比数列，格式如下：\n",[91,96781,96782],{"class":93,"line":11},[91,96783,95673],{"class":206},[91,96785,96786],{"class":93,"line":1157},[91,96787,96788],{"class":206},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[91,96790,96791],{"class":93,"line":1172},[91,96792,96793],{"class":206},"参数为：\n",[91,96795,96796],{"class":93,"line":1178},[91,96797,96798],{"class":206},"start:序列的起始位置为：base**start\n",[91,96800,96801],{"class":93,"line":1192},[91,96802,96803],{"class":206},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[91,96805,96806],{"class":93,"line":1198},[91,96807,96693],{"class":206},[91,96809,96810],{"class":93,"line":1289},[91,96811,96812],{"class":206},"endpoint：是否包含 stop 这个值，默认是 True\n",[91,96814,96815],{"class":93,"line":1295},[91,96816,96817],{"class":206},"base：对数的底数，默认是 10（常见对数）\n",[91,96819,96820],{"class":93,"line":1307},[91,96821,96708],{"class":206},[91,96823,96824],{"class":93,"line":1590},[91,96825,95673],{"class":206},[38,96827,96828],{},[1440,96829],{"alt":10,"src":96830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[38,96832,96833],{},"logspace()函数中的num参数也是可以不写num=的",[38,96835,96836],{},"endpoint是不可以省略的",[5105,96838,96839],{},"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":10,"searchDepth":11,"depth":11,"links":96841},[96842,96846,96851,96855,96859,96860],{"id":95231,"depth":11,"text":95232,"children":96843},[96844,96845],{"id":95235,"depth":1157,"text":95236},{"id":95308,"depth":1157,"text":95309},{"id":95340,"depth":11,"text":95341,"children":96847},[96848,96849,96850],{"id":95344,"depth":1157,"text":95345},{"id":95526,"depth":1157,"text":95527},{"id":95604,"depth":1157,"text":95605},{"id":95639,"depth":11,"text":95640,"children":96852},[96853,96854],{"id":95643,"depth":1157,"text":95644},{"id":95700,"depth":1157,"text":95701},{"id":95796,"depth":11,"text":95797,"children":96856},[96857,96858],{"id":95800,"depth":1157,"text":95801},{"id":95812,"depth":1157,"text":95813},{"id":95846,"depth":11,"text":95847},{"id":95883,"depth":11,"text":95884,"children":96861},[96862,96863,96864,96865,96866,96867,96868,96869],{"id":95887,"depth":1157,"text":95888},{"id":96112,"depth":1157,"text":96113},{"id":96119,"depth":1157,"text":96120},{"id":96328,"depth":1157,"text":96329},{"id":96348,"depth":1157,"text":96349},{"id":96484,"depth":1157,"text":96485},{"id":96653,"depth":1157,"text":96654},{"id":96768,"depth":1157,"text":96769},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95223,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96876,"title":96877,"body":96878,"description":13,"extension":14,"meta":96971,"navigation":17,"path":96972,"seo":96973,"stem":96974,"__hash__":96975},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96879,"toc":96969},[96880,96883,96886,96889,96892,96895,96898,96901,96904,96907,96910,96913,96915,96918,96921,96926,96929,96932,96966],[29,96881,96877],{"id":96882},"_20魔法命令mprun",[38,96884,96885],{},"逐行分析数据内存的使用情况",[38,96887,96888],{},"语法格式：",[38,96890,96891],{},"%mprun -f 模块名.函数名 模块名.函数名()",[38,96893,96894],{},"分析结果列如下：",[38,96896,96897],{},"Line行号",[38,96899,96900],{},"Mem usage内存使用大小",[38,96902,96903],{},"increment内存增量",[38,96905,96906],{},"Line content代码内容",[38,96908,96909],{},"补充说明：",[38,96911,96912],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[38,96914,95178],{},[38,96916,96917],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[38,96919,96920],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[38,96922,96923],{},[1440,96924],{"alt":10,"src":96925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[38,96927,96928],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[38,96930,96931],{},"这时候需要重新加载模块",[83,96933,96935],{"className":30353,"code":96934,"language":30355,"meta":10,"style":10},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[88,96936,96937,96942,96949,96954],{"__ignoreMap":10},[91,96938,96939],{"class":93,"line":94},[91,96940,96941],{"class":160},"#重新加载模块\n",[91,96943,96944,96946],{"class":93,"line":11},[91,96945,30367],{"class":97},[91,96947,96948],{"class":101}," importlib\n",[91,96950,96951],{"class":93,"line":1157},[91,96952,96953],{"class":101},"importlib.reload(mprun_test)\n",[91,96955,96956,96958,96961,96963],{"class":93,"line":1172},[91,96957,430],{"class":97},[91,96959,96960],{"class":101},"mprun ",[91,96962,634],{"class":97},[91,96964,96965],{"class":101},"f mprun_test.fun_test mprun_test.fun_test()\n",[5105,96967,96968],{},"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":10,"searchDepth":11,"depth":11,"links":96970},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96877,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96977,"title":96978,"body":96979,"description":13,"extension":14,"meta":96996,"navigation":17,"path":96997,"seo":96998,"stem":96999,"__hash__":97000},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96980,"toc":96994},[96981,96984,96989],[29,96982,96978],{"id":96983},"_3一维数组的索引和切片",[38,96985,96986],{},[1440,96987],{"alt":10,"src":96988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[38,96990,96991],{},[1440,96992],{"alt":10,"src":96993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":10,"searchDepth":11,"depth":11,"links":96995},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96978,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97002,"title":97003,"body":97004,"description":13,"extension":14,"meta":97487,"navigation":17,"path":97488,"seo":97489,"stem":97490,"__hash__":97491},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97005,"toc":97485},[97006,97009,97012,97017,97050,97053,97091,97094,97128,97131,97236,97239,97276,97279,97380,97383,97434,97437,97479,97482],[29,97007,97003],{"id":97008},"_4二维数组的索引与切片",[38,97010,97011],{},"①获取指定单个元素",[38,97013,97014],{},[1440,97015],{"alt":10,"src":97016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[83,97018,97020],{"className":30353,"code":97019,"language":30355,"meta":10,"style":10},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[88,97021,97022,97027,97032,97037],{"__ignoreMap":10},[91,97023,97024],{"class":93,"line":94},[91,97025,97026],{"class":160},"#获取元素9\n",[91,97028,97029],{"class":93,"line":11},[91,97030,97031],{"class":160},"#先获取所在行，再获取所在列\n",[91,97033,97034],{"class":93,"line":1157},[91,97035,97036],{"class":160},"#数组[行索引号，列索引号]\n",[91,97038,97039,97042,97044,97046,97048],{"class":93,"line":1172},[91,97040,97041],{"class":101},"a[",[91,97043,319],{"class":150},[91,97045,480],{"class":101},[91,97047,179],{"class":150},[91,97049,33221],{"class":101},[38,97051,97052],{},"②获取整行元素",[83,97054,97056],{"className":30353,"code":97055,"language":30355,"meta":10,"style":10},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[88,97057,97058,97063,97068,97076,97081],{"__ignoreMap":10},[91,97059,97060],{"class":93,"line":94},[91,97061,97062],{"class":160},"#获取整行 数组[行索引号]\n",[91,97064,97065],{"class":93,"line":11},[91,97066,97067],{"class":160},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[91,97069,97070,97072,97074],{"class":93,"line":1157},[91,97071,97041],{"class":101},[91,97073,179],{"class":150},[91,97075,33221],{"class":101},[91,97077,97078],{"class":93,"line":1172},[91,97079,97080],{"class":160},"#也可以负索引获取一行\n",[91,97082,97083,97085,97087,97089],{"class":93,"line":1178},[91,97084,97041],{"class":101},[91,97086,634],{"class":97},[91,97088,319],{"class":150},[91,97090,33221],{"class":101},[38,97092,97093],{},"③获取整列元素",[83,97095,97097],{"className":30353,"code":97096,"language":30355,"meta":10,"style":10},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[88,97098,97099,97104,97113,97118],{"__ignoreMap":10},[91,97100,97101],{"class":93,"line":94},[91,97102,97103],{"class":160},"#获取整列 数组名[:,列索引]\n",[91,97105,97106,97109,97111],{"class":93,"line":11},[91,97107,97108],{"class":101},"a[:,",[91,97110,179],{"class":150},[91,97112,33221],{"class":101},[91,97114,97115],{"class":93,"line":1157},[91,97116,97117],{"class":160},"#也可以负索引获取一列\n",[91,97119,97120,97122,97124,97126],{"class":93,"line":1172},[91,97121,97108],{"class":101},[91,97123,634],{"class":97},[91,97125,319],{"class":150},[91,97127,33221],{"class":101},[38,97129,97130],{},"④部分行部分列的元素",[83,97132,97134],{"className":30353,"code":97133,"language":30355,"meta":10,"style":10},"#部分行部分列 数组名[行切片，列切片]\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",[88,97135,97136,97141,97151,97155,97159,97164,97169,97173,97185,97189,97193,97198,97203,97208,97213,97217,97222],{"__ignoreMap":10},[91,97137,97138],{"class":93,"line":94},[91,97139,97140],{"class":160},"#部分行部分列 数组名[行切片，列切片]\n",[91,97142,97143,97146,97148],{"class":93,"line":11},[91,97144,97145],{"class":101},"a[:",[91,97147,179],{"class":150},[91,97149,97150],{"class":101},",:]\n",[91,97152,97153],{"class":93,"line":1157},[91,97154,93539],{"class":160},[91,97156,97157],{"class":93,"line":1172},[91,97158,93903],{"class":206},[91,97160,97161],{"class":93,"line":1178},[91,97162,97163],{"class":206},"array([[ 1,  2,  3,  4,  5,  6],\n",[91,97165,97166],{"class":93,"line":1192},[91,97167,97168],{"class":206},"       [ 7,  8,  9, 10, 11, 12]])\n",[91,97170,97171],{"class":93,"line":1198},[91,97172,93903],{"class":206},[91,97174,97175,97177,97179,97181,97183],{"class":93,"line":1289},[91,97176,97108],{"class":101},[91,97178,319],{"class":150},[91,97180,961],{"class":101},[91,97182,395],{"class":150},[91,97184,33221],{"class":101},[91,97186,97187],{"class":93,"line":1295},[91,97188,93539],{"class":160},[91,97190,97191],{"class":93,"line":1307},[91,97192,93903],{"class":206},[91,97194,97195],{"class":93,"line":1590},[91,97196,97197],{"class":206},"array([[ 2,  3,  4],\n",[91,97199,97200],{"class":93,"line":1595},[91,97201,97202],{"class":206},"       [ 8,  9, 10],\n",[91,97204,97205],{"class":93,"line":1601},[91,97206,97207],{"class":206},"       [14, 15, 16],\n",[91,97209,97210],{"class":93,"line":1606},[91,97211,97212],{"class":206},"       [20, 21, 22]])\n",[91,97214,97215],{"class":93,"line":1620},[91,97216,93903],{"class":206},[91,97218,97219],{"class":93,"line":1625},[91,97220,97221],{"class":160},"#对列行同时进行切片，使用了step参数\n",[91,97223,97224,97227,97229,97232,97234],{"class":93,"line":1631},[91,97225,97226],{"class":101},"a[::",[91,97228,179],{"class":150},[91,97230,97231],{"class":101},",::",[91,97233,179],{"class":150},[91,97235,33221],{"class":101},[38,97237,97238],{},"⑤同时获取两个元素",[83,97240,97242],{"className":30353,"code":97241,"language":30355,"meta":10,"style":10},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[88,97243,97244,97249,97254],{"__ignoreMap":10},[91,97245,97246],{"class":93,"line":94},[91,97247,97248],{"class":160},"#同时获取第三行第二列，第四行第一列\n",[91,97250,97251],{"class":93,"line":11},[91,97252,97253],{"class":160},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[91,97255,97256,97259,97261,97263,97265,97267,97269,97271,97273],{"class":93,"line":1157},[91,97257,97258],{"class":101},"a[(",[91,97260,179],{"class":150},[91,97262,480],{"class":101},[91,97264,173],{"class":150},[91,97266,42222],{"class":101},[91,97268,319],{"class":150},[91,97270,480],{"class":101},[91,97272,293],{"class":150},[91,97274,97275],{"class":101},")]\n",[38,97277,97278],{},"⑥切片，对行进行反向获取",[83,97280,97282],{"className":30353,"code":97281,"language":30355,"meta":10,"style":10},"#切片 对所有行进行反向获取\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",[88,97283,97284,97289,97299,97303,97307,97312,97317,97322,97327,97331,97336,97352,97356,97361,97366,97371,97376],{"__ignoreMap":10},[91,97285,97286],{"class":93,"line":94},[91,97287,97288],{"class":160},"#切片 对所有行进行反向获取\n",[91,97290,97291,97293,97295,97297],{"class":93,"line":11},[91,97292,97226],{"class":101},[91,97294,634],{"class":97},[91,97296,319],{"class":150},[91,97298,33221],{"class":101},[91,97300,97301],{"class":93,"line":1157},[91,97302,93539],{"class":160},[91,97304,97305],{"class":93,"line":1172},[91,97306,93903],{"class":206},[91,97308,97309],{"class":93,"line":1178},[91,97310,97311],{"class":206},"array([[19, 20, 21, 22, 23, 24],\n",[91,97313,97314],{"class":93,"line":1192},[91,97315,97316],{"class":206},"       [13, 14, 15, 16, 17, 18],\n",[91,97318,97319],{"class":93,"line":1198},[91,97320,97321],{"class":206},"       [ 7,  8,  9, 10, 11, 12],\n",[91,97323,97324],{"class":93,"line":1289},[91,97325,97326],{"class":206},"       [ 1,  2,  3,  4,  5,  6]])\n",[91,97328,97329],{"class":93,"line":1295},[91,97330,93903],{"class":206},[91,97332,97333],{"class":93,"line":1307},[91,97334,97335],{"class":160},"#对行列都进行反向切片获取\n",[91,97337,97338,97340,97342,97344,97346,97348,97350],{"class":93,"line":1590},[91,97339,97226],{"class":101},[91,97341,634],{"class":97},[91,97343,319],{"class":150},[91,97345,97231],{"class":101},[91,97347,634],{"class":97},[91,97349,319],{"class":150},[91,97351,33221],{"class":101},[91,97353,97354],{"class":93,"line":1595},[91,97355,93903],{"class":206},[91,97357,97358],{"class":93,"line":1601},[91,97359,97360],{"class":206},"array([[24, 23, 22, 21, 20, 19],\n",[91,97362,97363],{"class":93,"line":1606},[91,97364,97365],{"class":206},"       [18, 17, 16, 15, 14, 13],\n",[91,97367,97368],{"class":93,"line":1620},[91,97369,97370],{"class":206},"       [12, 11, 10,  9,  8,  7],\n",[91,97372,97373],{"class":93,"line":1625},[91,97374,97375],{"class":206},"       [ 6,  5,  4,  3,  2,  1]])\n",[91,97377,97378],{"class":93,"line":1631},[91,97379,93903],{"class":206},[38,97381,97382],{},"⑦修改元素",[83,97384,97386],{"className":30353,"code":97385,"language":30355,"meta":10,"style":10},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[88,97387,97388,97393,97411,97416],{"__ignoreMap":10},[91,97389,97390],{"class":93,"line":94},[91,97391,97392],{"class":160},"#获取前两行和前两列\n",[91,97394,97395,97398,97400,97402,97404,97407,97409],{"class":93,"line":11},[91,97396,97397],{"class":101},"sub_a",[91,97399,147],{"class":97},[91,97401,97145],{"class":101},[91,97403,179],{"class":150},[91,97405,97406],{"class":101},",:",[91,97408,179],{"class":150},[91,97410,33221],{"class":101},[91,97412,97413],{"class":93,"line":1157},[91,97414,97415],{"class":160},"#修改sub_a第一个元素的值\n",[91,97417,97418,97421,97423,97425,97427,97429,97431],{"class":93,"line":1172},[91,97419,97420],{"class":101},"sub_a[",[91,97422,293],{"class":150},[91,97424,480],{"class":101},[91,97426,293],{"class":150},[91,97428,1042],{"class":101},[91,97430,147],{"class":97},[91,97432,97433],{"class":150},"100\n",[38,97435,97436],{},"⑧数组复制copy()",[83,97438,97440],{"className":30353,"code":97439,"language":30355,"meta":10,"style":10},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[88,97441,97442,97447,97457,97462],{"__ignoreMap":10},[91,97443,97444],{"class":93,"line":94},[91,97445,97446],{"class":160},"#数组复制\n",[91,97448,97449,97452,97454],{"class":93,"line":11},[91,97450,97451],{"class":101},"copy_a",[91,97453,147],{"class":97},[91,97455,97456],{"class":101},"np.copy(sub_a)\n",[91,97458,97459],{"class":93,"line":1157},[91,97460,97461],{"class":160},"#修改copy_a后不影响原数组\n",[91,97463,97464,97467,97469,97471,97473,97475,97477],{"class":93,"line":1172},[91,97465,97466],{"class":101},"copy_a[",[91,97468,293],{"class":150},[91,97470,480],{"class":101},[91,97472,293],{"class":150},[91,97474,1042],{"class":101},[91,97476,147],{"class":97},[91,97478,97433],{"class":150},[38,97480,97481],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5105,97483,97484],{},"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":10,"searchDepth":11,"depth":11,"links":97486},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97003,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97493,"title":97494,"body":97495,"description":13,"extension":14,"meta":97987,"navigation":17,"path":97988,"seo":97989,"stem":97990,"__hash__":97991},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97496,"toc":97979},[97497,97500,97504,97507,97510,97563,97566,97591,97594,97613,97633,97636,97652,97656,97702,97706,97748,97752,97755,97758,97761,97764,97767,97829,97889,97893,97896,97953,97957,97962,97971,97976],[29,97498,97494],{"id":97499},"_5改变数组的维度",[33,97501,97503],{"id":97502},"_51-使用reshape","5.1 使用reshape()",[38,97505,97506],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[38,97508,97509],{},"①一维数组转换为二维数组",[83,97511,97513],{"className":30353,"code":97512,"language":30355,"meta":10,"style":10},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[88,97514,97515,97531,97536,97541,97546],{"__ignoreMap":10},[91,97516,97517,97519,97521,97523,97525,97527,97529],{"class":93,"line":94},[91,97518,340],{"class":101},[91,97520,147],{"class":97},[91,97522,92977],{"class":101},[91,97524,319],{"class":150},[91,97526,480],{"class":101},[91,97528,625],{"class":150},[91,97530,108],{"class":101},[91,97532,97533],{"class":93,"line":11},[91,97534,97535],{"class":160},"#将一维数组进行转换\n",[91,97537,97538],{"class":93,"line":1157},[91,97539,97540],{"class":160},"#注意点：元素个数不可以变\n",[91,97542,97543],{"class":93,"line":1172},[91,97544,97545],{"class":160},"#转换维度要保持一致，不一致就异常！！！\n",[91,97547,97548,97550,97552,97555,97557,97559,97561],{"class":93,"line":1178},[91,97549,93281],{"class":101},[91,97551,147],{"class":97},[91,97553,97554],{"class":101},"a.reshape(",[91,97556,179],{"class":150},[91,97558,480],{"class":101},[91,97560,446],{"class":150},[91,97562,108],{"class":101},[38,97564,97565],{},"②一维数组转换为三维数组",[83,97567,97569],{"className":30353,"code":97568,"language":30355,"meta":10,"style":10},"aaa=a.reshape(2,3,2)\n",[88,97570,97571],{"__ignoreMap":10},[91,97572,97573,97575,97577,97579,97581,97583,97585,97587,97589],{"class":93,"line":94},[91,97574,95496],{"class":101},[91,97576,147],{"class":97},[91,97578,97554],{"class":101},[91,97580,179],{"class":150},[91,97582,480],{"class":101},[91,97584,173],{"class":150},[91,97586,480],{"class":101},[91,97588,179],{"class":150},[91,97590,108],{"class":101},[38,97592,97593],{},"③二维数组转化为一维数组",[83,97595,97597],{"className":30353,"code":97596,"language":30355,"meta":10,"style":10},"#知道元素个数：\naa.reshape(12)\n",[88,97598,97599,97604],{"__ignoreMap":10},[91,97600,97601],{"class":93,"line":94},[91,97602,97603],{"class":160},"#知道元素个数：\n",[91,97605,97606,97609,97611],{"class":93,"line":11},[91,97607,97608],{"class":101},"aa.reshape(",[91,97610,600],{"class":150},[91,97612,108],{"class":101},[83,97614,97616],{"className":30353,"code":97615,"language":30355,"meta":10,"style":10},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[88,97617,97618,97623],{"__ignoreMap":10},[91,97619,97620],{"class":93,"line":94},[91,97621,97622],{"class":160},"#不知道元素个数，参数传递-1\n",[91,97624,97625,97627,97629,97631],{"class":93,"line":11},[91,97626,97608],{"class":101},[91,97628,634],{"class":97},[91,97630,319],{"class":150},[91,97632,108],{"class":101},[38,97634,97635],{},"④三维数组转换为一维数组",[83,97637,97639],{"className":30353,"code":97638,"language":30355,"meta":10,"style":10},"aaa.reshape(-1)\n",[88,97640,97641],{"__ignoreMap":10},[91,97642,97643,97646,97648,97650],{"class":93,"line":94},[91,97644,97645],{"class":101},"aaa.reshape(",[91,97647,634],{"class":97},[91,97649,319],{"class":150},[91,97651,108],{"class":101},[33,97653,97655],{"id":97654},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[83,97657,97659],{"className":30353,"code":97658,"language":30355,"meta":10,"style":10},"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",[88,97660,97661,97688,97693,97697],{"__ignoreMap":10},[91,97662,97663,97665,97667,97669,97671,97673,97675,97677,97679,97681,97683,97685],{"class":93,"line":94},[91,97664,93281],{"class":101},[91,97666,147],{"class":97},[91,97668,92977],{"class":101},[91,97670,319],{"class":150},[91,97672,480],{"class":101},[91,97674,625],{"class":150},[91,97676,92982],{"class":101},[91,97678,179],{"class":150},[91,97680,480],{"class":101},[91,97682,446],{"class":150},[91,97684,531],{"class":101},[91,97686,97687],{"class":160},"#转换为2行6列的数组\n",[91,97689,97690],{"class":93,"line":11},[91,97691,97692],{"class":101},"aa.revel()\n",[91,97694,97695],{"class":93,"line":1157},[91,97696,93539],{"class":160},[91,97698,97699],{"class":93,"line":1172},[91,97700,97701],{"class":160},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,97703,97705],{"id":97704},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[83,97707,97709],{"className":30353,"code":97708,"language":30355,"meta":10,"style":10},"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",[88,97710,97711,97735,97740,97744],{"__ignoreMap":10},[91,97712,97713,97715,97717,97719,97721,97723,97725,97727,97729,97731,97733],{"class":93,"line":94},[91,97714,93281],{"class":101},[91,97716,147],{"class":97},[91,97718,92977],{"class":101},[91,97720,319],{"class":150},[91,97722,480],{"class":101},[91,97724,625],{"class":150},[91,97726,92982],{"class":101},[91,97728,179],{"class":150},[91,97730,480],{"class":101},[91,97732,446],{"class":150},[91,97734,108],{"class":101},[91,97736,97737],{"class":93,"line":11},[91,97738,97739],{"class":101},"aa.flatten()\n",[91,97741,97742],{"class":93,"line":1157},[91,97743,93539],{"class":160},[91,97745,97746],{"class":93,"line":1172},[91,97747,97701],{"class":160},[33,97749,97751],{"id":97750},"_54-使用resize","5.4 使用resize()",[38,97753,97754],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[38,97756,97757],{},"通过resize方法可以改变数组的维度",[38,97759,97760],{},"#resize修改数组维度",[38,97762,97763],{},"#以元组的形式指定形状",[38,97765,97766],{},"#改变的是原数组",[83,97768,97770],{"className":30353,"code":97769,"language":30355,"meta":10,"style":10},"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",[88,97771,97772,97788,97808,97821,97825],{"__ignoreMap":10},[91,97773,97774,97776,97778,97780,97782,97784,97786],{"class":93,"line":94},[91,97775,340],{"class":101},[91,97777,147],{"class":97},[91,97779,92977],{"class":101},[91,97781,319],{"class":150},[91,97783,480],{"class":101},[91,97785,625],{"class":150},[91,97787,108],{"class":101},[91,97789,97790,97793,97795,97797,97799,97801,97803,97805],{"class":93,"line":11},[91,97791,97792],{"class":101},"a.shape",[91,97794,147],{"class":97},[91,97796,102],{"class":101},[91,97798,179],{"class":150},[91,97800,480],{"class":101},[91,97802,446],{"class":150},[91,97804,531],{"class":101},[91,97806,97807],{"class":160},"#改变了原数组\n",[91,97809,97810,97812,97814,97817,97819],{"class":93,"line":1157},[91,97811,340],{"class":101},[91,97813,147],{"class":97},[91,97815,97816],{"class":101},"resize((",[91,97818,600],{"class":150},[91,97820,30472],{"class":101},[91,97822,97823],{"class":93,"line":1172},[91,97824,93539],{"class":160},[91,97826,97827],{"class":93,"line":1178},[91,97828,97701],{"class":160},[83,97830,97832],{"className":30353,"code":97831,"language":30355,"meta":10,"style":10},"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",[88,97833,97834,97847,97851,97855,97860,97865,97870,97875,97880,97885],{"__ignoreMap":10},[91,97835,97836,97839,97841,97843,97845],{"class":93,"line":94},[91,97837,97838],{"class":101},"a.resize((",[91,97840,446],{"class":150},[91,97842,480],{"class":101},[91,97844,179],{"class":150},[91,97846,30472],{"class":101},[91,97848,97849],{"class":93,"line":11},[91,97850,93539],{"class":160},[91,97852,97853],{"class":93,"line":1157},[91,97854,93903],{"class":206},[91,97856,97857],{"class":93,"line":1172},[91,97858,97859],{"class":206},"array([[ 1,  2],\n",[91,97861,97862],{"class":93,"line":1178},[91,97863,97864],{"class":206},"       [ 3,  4],\n",[91,97866,97867],{"class":93,"line":1192},[91,97868,97869],{"class":206},"       [ 5,  6],\n",[91,97871,97872],{"class":93,"line":1198},[91,97873,97874],{"class":206},"       [ 7,  8],\n",[91,97876,97877],{"class":93,"line":1289},[91,97878,97879],{"class":206},"       [ 9, 10],\n",[91,97881,97882],{"class":93,"line":1295},[91,97883,97884],{"class":206},"       [11, 12]])\n",[91,97886,97887],{"class":93,"line":1307},[91,97888,93903],{"class":206},[33,97890,97892],{"id":97891},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[38,97894,97895],{},"改变了原数组",[83,97897,97899],{"className":30353,"code":97898,"language":30355,"meta":10,"style":10},"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",[88,97900,97901,97917,97933,97937,97941,97945,97949],{"__ignoreMap":10},[91,97902,97903,97905,97907,97909,97911,97913,97915],{"class":93,"line":94},[91,97904,340],{"class":101},[91,97906,147],{"class":97},[91,97908,92977],{"class":101},[91,97910,319],{"class":150},[91,97912,480],{"class":101},[91,97914,625],{"class":150},[91,97916,108],{"class":101},[91,97918,97919,97921,97923,97925,97927,97929,97931],{"class":93,"line":11},[91,97920,97792],{"class":101},[91,97922,147],{"class":97},[91,97924,102],{"class":101},[91,97926,179],{"class":150},[91,97928,480],{"class":101},[91,97930,446],{"class":150},[91,97932,108],{"class":101},[91,97934,97935],{"class":93,"line":1157},[91,97936,93539],{"class":160},[91,97938,97939],{"class":93,"line":1172},[91,97940,93903],{"class":206},[91,97942,97943],{"class":93,"line":1178},[91,97944,97163],{"class":206},[91,97946,97947],{"class":93,"line":1192},[91,97948,97168],{"class":206},[91,97950,97951],{"class":93,"line":1198},[91,97952,93903],{"class":206},[33,97954,97956],{"id":97955},"_56-重要比较","5.6 重要比较：",[38,97958,97959],{},[1440,97960],{"alt":10,"src":97961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[38,97963,97964,97965,97967,97968,97970],{},"口诀：NumPy 函数要么用 ",[88,97966,95938],{},"，要么用 ",[88,97969,31471],{},"，创建结构用 shape，造数据用 size",[38,97972,97973],{},[1440,97974],{"alt":10,"src":97975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5105,97977,97978],{},"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":10,"searchDepth":11,"depth":11,"links":97980},[97981,97982,97983,97984,97985,97986],{"id":97502,"depth":11,"text":97503},{"id":97654,"depth":11,"text":97655},{"id":97704,"depth":11,"text":97705},{"id":97750,"depth":11,"text":97751},{"id":97891,"depth":11,"text":97892},{"id":97955,"depth":11,"text":97956},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97494,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97993,"title":97994,"body":97995,"description":13,"extension":14,"meta":99067,"navigation":17,"path":99068,"seo":99069,"stem":99070,"__hash__":99071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":97996,"toc":99061},[97997,98000,98004,98007,98010,98013,98078,98081,98121,98124,98206,98209,98214,98236,98238,98243,98248,98251,98254,98409,98412,98614,98618,98621,98624,98692,98694,98699,98702,98705,98785,98789,98792,98794,98867,98869,98874,98876,98956,98960,98963,98966,98969,98972,98975,98978,99058],[29,97998,97994],{"id":97999},"_6数组的拼接",[33,98001,98003],{"id":98002},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[38,98005,98006],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[38,98008,98009],{},"函数内部传两个数列构成的数列或者元组",[38,98011,98012],{},"①一维数组的拼接",[83,98014,98016],{"className":30353,"code":98015,"language":30355,"meta":10,"style":10},"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",[88,98017,98018,98038,98058,98063,98068,98073],{"__ignoreMap":10},[91,98019,98020,98022,98024,98026,98028,98030,98032,98034,98036],{"class":93,"line":94},[91,98021,340],{"class":101},[91,98023,147],{"class":97},[91,98025,92999],{"class":101},[91,98027,319],{"class":150},[91,98029,480],{"class":101},[91,98031,179],{"class":150},[91,98033,480],{"class":101},[91,98035,173],{"class":150},[91,98037,4635],{"class":101},[91,98039,98040,98042,98044,98046,98048,98050,98052,98054,98056],{"class":93,"line":11},[91,98041,365],{"class":101},[91,98043,147],{"class":97},[91,98045,92999],{"class":101},[91,98047,395],{"class":150},[91,98049,480],{"class":101},[91,98051,421],{"class":150},[91,98053,480],{"class":101},[91,98055,446],{"class":150},[91,98057,4635],{"class":101},[91,98059,98060],{"class":93,"line":1157},[91,98061,98062],{"class":160},"#调用concatenate进行数组拼接\n",[91,98064,98065],{"class":93,"line":1172},[91,98066,98067],{"class":101},"np.concatenate((a,b))\n",[91,98069,98070],{"class":93,"line":1178},[91,98071,98072],{"class":160},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[91,98074,98075],{"class":93,"line":1192},[91,98076,98077],{"class":160},"#np.concatenate([a,b])\n",[38,98079,98080],{},"②一维多个数组拼接",[83,98082,98084],{"className":30353,"code":98083,"language":30355,"meta":10,"style":10},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[88,98085,98086,98091,98111,98116],{"__ignoreMap":10},[91,98087,98088],{"class":93,"line":94},[91,98089,98090],{"class":160},"#也可以多个数组进行拼接\n",[91,98092,98093,98095,98097,98099,98101,98103,98105,98107,98109],{"class":93,"line":11},[91,98094,390],{"class":101},[91,98096,147],{"class":97},[91,98098,92999],{"class":101},[91,98100,548],{"class":150},[91,98102,480],{"class":101},[91,98104,574],{"class":150},[91,98106,480],{"class":101},[91,98108,625],{"class":150},[91,98110,4635],{"class":101},[91,98112,98113],{"class":93,"line":1157},[91,98114,98115],{"class":101},"c\n",[91,98117,98118],{"class":93,"line":1172},[91,98119,98120],{"class":101},"np.concatenate((a,b,c))\n",[38,98122,98123],{},"③二维数组拼接",[83,98125,98127],{"className":30353,"code":98126,"language":30355,"meta":10,"style":10},"#二维数组使用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",[88,98128,98129,98134,98158,98183,98188,98193],{"__ignoreMap":10},[91,98130,98131],{"class":93,"line":94},[91,98132,98133],{"class":160},"#二维数组使用concatenate进行拼接\n",[91,98135,98136,98138,98140,98142,98144,98146,98148,98150,98152,98154,98156],{"class":93,"line":11},[91,98137,93281],{"class":101},[91,98139,147],{"class":97},[91,98141,92977],{"class":101},[91,98143,319],{"class":150},[91,98145,480],{"class":101},[91,98147,625],{"class":150},[91,98149,92982],{"class":101},[91,98151,173],{"class":150},[91,98153,480],{"class":101},[91,98155,395],{"class":150},[91,98157,108],{"class":101},[91,98159,98160,98163,98165,98167,98169,98171,98173,98175,98177,98179,98181],{"class":93,"line":1157},[91,98161,98162],{"class":101},"bb",[91,98164,147],{"class":97},[91,98166,92977],{"class":101},[91,98168,439],{"class":150},[91,98170,480],{"class":101},[91,98172,744],{"class":150},[91,98174,92982],{"class":101},[91,98176,173],{"class":150},[91,98178,480],{"class":101},[91,98180,395],{"class":150},[91,98182,108],{"class":101},[91,98184,98185],{"class":93,"line":1172},[91,98186,98187],{"class":160},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[91,98189,98190],{"class":93,"line":1178},[91,98191,98192],{"class":160},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[91,98194,98195,98198,98200,98202,98204],{"class":93,"line":1192},[91,98196,98197],{"class":101},"np.concatenate((aa,bb),",[91,98199,47489],{"class":5195},[91,98201,147],{"class":97},[91,98203,293],{"class":150},[91,98205,108],{"class":101},[38,98207,98208],{},"结果：",[38,98210,98211],{},[1440,98212],{"alt":10,"src":98213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[83,98215,98217],{"className":30353,"code":98216,"language":30355,"meta":10,"style":10},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[88,98218,98219,98224],{"__ignoreMap":10},[91,98220,98221],{"class":93,"line":94},[91,98222,98223],{"class":160},"#指定axis为1进行拼接\n",[91,98225,98226,98228,98230,98232,98234],{"class":93,"line":11},[91,98227,98197],{"class":101},[91,98229,47489],{"class":5195},[91,98231,147],{"class":97},[91,98233,319],{"class":150},[91,98235,108],{"class":101},[38,98237,98208],{},[38,98239,98240],{},[1440,98241],{"alt":10,"src":98242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[38,98244,98245],{},[251,98246,98247],{},"二维数组总结：0竖着方向，1横着方向",[38,98249,98250],{},"④三维数组拼接",[38,98252,98253],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[83,98255,98257],{"className":30353,"code":98256,"language":30355,"meta":10,"style":10},"#两个三行六列\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",[88,98258,98259,98264,98292,98322,98327,98344,98349,98354,98359,98376,98381,98386,98391,98404],{"__ignoreMap":10},[91,98260,98261],{"class":93,"line":94},[91,98262,98263],{"class":160},"#两个三行六列\n",[91,98265,98266,98268,98270,98272,98274,98276,98278,98280,98282,98284,98286,98288,98290],{"class":93,"line":11},[91,98267,95496],{"class":101},[91,98269,147],{"class":97},[91,98271,92977],{"class":101},[91,98273,319],{"class":150},[91,98275,480],{"class":101},[91,98277,427],{"class":150},[91,98279,92982],{"class":101},[91,98281,179],{"class":150},[91,98283,480],{"class":101},[91,98285,173],{"class":150},[91,98287,480],{"class":101},[91,98289,446],{"class":150},[91,98291,108],{"class":101},[91,98293,98294,98297,98299,98301,98303,98305,98308,98310,98312,98314,98316,98318,98320],{"class":93,"line":1157},[91,98295,98296],{"class":101},"bbb",[91,98298,147],{"class":97},[91,98300,92977],{"class":101},[91,98302,439],{"class":150},[91,98304,480],{"class":101},[91,98306,98307],{"class":150},"137",[91,98309,92982],{"class":101},[91,98311,179],{"class":150},[91,98313,480],{"class":101},[91,98315,173],{"class":150},[91,98317,480],{"class":101},[91,98319,446],{"class":150},[91,98321,108],{"class":101},[91,98323,98324],{"class":93,"line":1172},[91,98325,98326],{"class":160},"#axis=0\n",[91,98328,98329,98331,98333,98336,98338,98340,98342],{"class":93,"line":1178},[91,98330,797],{"class":101},[91,98332,147],{"class":97},[91,98334,98335],{"class":101},"np.concatenate((aaa,bbb),",[91,98337,47489],{"class":5195},[91,98339,147],{"class":97},[91,98341,293],{"class":150},[91,98343,108],{"class":101},[91,98345,98346],{"class":93,"line":1192},[91,98347,98348],{"class":101},"s.shape\n",[91,98350,98351],{"class":93,"line":1198},[91,98352,98353],{"class":160},"#输出：(4,3,6)\n",[91,98355,98356],{"class":93,"line":1289},[91,98357,98358],{"class":160},"#axis=1\n",[91,98360,98361,98364,98366,98368,98370,98372,98374],{"class":93,"line":1295},[91,98362,98363],{"class":101},"ss",[91,98365,147],{"class":97},[91,98367,98335],{"class":101},[91,98369,47489],{"class":5195},[91,98371,147],{"class":97},[91,98373,319],{"class":150},[91,98375,108],{"class":101},[91,98377,98378],{"class":93,"line":1307},[91,98379,98380],{"class":101},"ss.shape\n",[91,98382,98383],{"class":93,"line":1590},[91,98384,98385],{"class":160},"#输出：(2,6,6)\n",[91,98387,98388],{"class":93,"line":1595},[91,98389,98390],{"class":160},"#axis=2\n",[91,98392,98393,98395,98397,98399,98401],{"class":93,"line":1601},[91,98394,98335],{"class":101},[91,98396,47489],{"class":5195},[91,98398,147],{"class":97},[91,98400,179],{"class":150},[91,98402,98403],{"class":101},").shape\n",[91,98405,98406],{"class":93,"line":1606},[91,98407,98408],{"class":160},"#输出：（2，3，12）\n",[38,98410,98411],{},"⑤四维数组拼接",[83,98413,98415],{"className":30353,"code":98414,"language":30355,"meta":10,"style":10},"#两个三行六列\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",[88,98416,98417,98421,98449,98477,98502,98528,98532,98545,98550,98554,98566,98571,98575,98587,98592,98597,98609],{"__ignoreMap":10},[91,98418,98419],{"class":93,"line":94},[91,98420,98263],{"class":160},[91,98422,98423,98425,98427,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447],{"class":93,"line":11},[91,98424,95496],{"class":101},[91,98426,147],{"class":97},[91,98428,92977],{"class":101},[91,98430,319],{"class":150},[91,98432,480],{"class":101},[91,98434,427],{"class":150},[91,98436,92982],{"class":101},[91,98438,179],{"class":150},[91,98440,480],{"class":101},[91,98442,173],{"class":150},[91,98444,480],{"class":101},[91,98446,446],{"class":150},[91,98448,108],{"class":101},[91,98450,98451,98453,98455,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475],{"class":93,"line":1157},[91,98452,98296],{"class":101},[91,98454,147],{"class":97},[91,98456,92977],{"class":101},[91,98458,439],{"class":150},[91,98460,480],{"class":101},[91,98462,98307],{"class":150},[91,98464,92982],{"class":101},[91,98466,179],{"class":150},[91,98468,480],{"class":101},[91,98470,173],{"class":150},[91,98472,480],{"class":101},[91,98474,446],{"class":150},[91,98476,108],{"class":101},[91,98478,98479,98482,98484,98486,98488,98490,98492,98494,98496,98498,98500],{"class":93,"line":1172},[91,98480,98481],{"class":101},"aaaa",[91,98483,147],{"class":97},[91,98485,97645],{"class":101},[91,98487,179],{"class":150},[91,98489,480],{"class":101},[91,98491,173],{"class":150},[91,98493,480],{"class":101},[91,98495,173],{"class":150},[91,98497,480],{"class":101},[91,98499,179],{"class":150},[91,98501,108],{"class":101},[91,98503,98504,98507,98509,98512,98514,98516,98518,98520,98522,98524,98526],{"class":93,"line":1178},[91,98505,98506],{"class":101},"bbbb",[91,98508,147],{"class":97},[91,98510,98511],{"class":101},"bbb.reshape(",[91,98513,179],{"class":150},[91,98515,480],{"class":101},[91,98517,173],{"class":150},[91,98519,480],{"class":101},[91,98521,173],{"class":150},[91,98523,480],{"class":101},[91,98525,179],{"class":150},[91,98527,108],{"class":101},[91,98529,98530],{"class":93,"line":1192},[91,98531,98326],{"class":160},[91,98533,98534,98537,98539,98541,98543],{"class":93,"line":1198},[91,98535,98536],{"class":101},"np.concatenate((aaaa,bbbb),",[91,98538,47489],{"class":5195},[91,98540,147],{"class":97},[91,98542,293],{"class":150},[91,98544,98403],{"class":101},[91,98546,98547],{"class":93,"line":1289},[91,98548,98549],{"class":160},"#结果：（4，3，3，2）\n",[91,98551,98552],{"class":93,"line":1295},[91,98553,98358],{"class":160},[91,98555,98556,98558,98560,98562,98564],{"class":93,"line":1307},[91,98557,98536],{"class":101},[91,98559,47489],{"class":5195},[91,98561,147],{"class":97},[91,98563,319],{"class":150},[91,98565,98403],{"class":101},[91,98567,98568],{"class":93,"line":1590},[91,98569,98570],{"class":160},"#结果：（2，6，3，2）\n",[91,98572,98573],{"class":93,"line":1595},[91,98574,98390],{"class":160},[91,98576,98577,98579,98581,98583,98585],{"class":93,"line":1601},[91,98578,98536],{"class":101},[91,98580,47489],{"class":5195},[91,98582,147],{"class":97},[91,98584,179],{"class":150},[91,98586,98403],{"class":101},[91,98588,98589],{"class":93,"line":1606},[91,98590,98591],{"class":160},"#结果：（2，3，6，2）\n",[91,98593,98594],{"class":93,"line":1620},[91,98595,98596],{"class":160},"#axis=3\n",[91,98598,98599,98601,98603,98605,98607],{"class":93,"line":1625},[91,98600,98536],{"class":101},[91,98602,47489],{"class":5195},[91,98604,147],{"class":97},[91,98606,173],{"class":150},[91,98608,98403],{"class":101},[91,98610,98611],{"class":93,"line":1631},[91,98612,98613],{"class":160},"#结果：（2，3，3，4）\n",[33,98615,98617],{"id":98616},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[38,98619,98620],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[38,98622,98623],{},"①二维数组",[83,98625,98627],{"className":30353,"code":98626,"language":30355,"meta":10,"style":10},"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",[88,98628,98629,98653,98677,98682,98687],{"__ignoreMap":10},[91,98630,98631,98633,98635,98637,98639,98641,98643,98645,98647,98649,98651],{"class":93,"line":94},[91,98632,93281],{"class":101},[91,98634,147],{"class":97},[91,98636,92977],{"class":101},[91,98638,319],{"class":150},[91,98640,480],{"class":101},[91,98642,625],{"class":150},[91,98644,92982],{"class":101},[91,98646,173],{"class":150},[91,98648,480],{"class":101},[91,98650,395],{"class":150},[91,98652,108],{"class":101},[91,98654,98655,98657,98659,98661,98663,98665,98667,98669,98671,98673,98675],{"class":93,"line":11},[91,98656,98162],{"class":101},[91,98658,147],{"class":97},[91,98660,92977],{"class":101},[91,98662,439],{"class":150},[91,98664,480],{"class":101},[91,98666,744],{"class":150},[91,98668,92982],{"class":101},[91,98670,173],{"class":150},[91,98672,480],{"class":101},[91,98674,395],{"class":150},[91,98676,108],{"class":101},[91,98678,98679],{"class":93,"line":1157},[91,98680,98681],{"class":101},"np.hstack((aa,bb))\n",[91,98683,98684],{"class":93,"line":1172},[91,98685,98686],{"class":160},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[91,98688,98689],{"class":93,"line":1178},[91,98690,98691],{"class":160},"#np.hstack([aa,bb])\n",[38,98693,98208],{},[38,98695,98696],{},[1440,98697],{"alt":10,"src":98698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[38,98700,98701],{},"等效于concatenate()函数中axis=1时的情况",[38,98703,98704],{},"②三维数组",[83,98706,98708],{"className":30353,"code":98707,"language":30355,"meta":10,"style":10},"#两个三行六列\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",[88,98709,98710,98714,98742,98770,98775,98780],{"__ignoreMap":10},[91,98711,98712],{"class":93,"line":94},[91,98713,98263],{"class":160},[91,98715,98716,98718,98720,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740],{"class":93,"line":11},[91,98717,95496],{"class":101},[91,98719,147],{"class":97},[91,98721,92977],{"class":101},[91,98723,319],{"class":150},[91,98725,480],{"class":101},[91,98727,427],{"class":150},[91,98729,92982],{"class":101},[91,98731,179],{"class":150},[91,98733,480],{"class":101},[91,98735,173],{"class":150},[91,98737,480],{"class":101},[91,98739,446],{"class":150},[91,98741,108],{"class":101},[91,98743,98744,98746,98748,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768],{"class":93,"line":1157},[91,98745,98296],{"class":101},[91,98747,147],{"class":97},[91,98749,92977],{"class":101},[91,98751,439],{"class":150},[91,98753,480],{"class":101},[91,98755,98307],{"class":150},[91,98757,92982],{"class":101},[91,98759,179],{"class":150},[91,98761,480],{"class":101},[91,98763,173],{"class":150},[91,98765,480],{"class":101},[91,98767,446],{"class":150},[91,98769,108],{"class":101},[91,98771,98772],{"class":93,"line":1172},[91,98773,98774],{"class":160},"#使用hstack\n",[91,98776,98777],{"class":93,"line":1178},[91,98778,98779],{"class":101},"np.hstack((aaa,bbb)).shape\n",[91,98781,98782],{"class":93,"line":1192},[91,98783,98784],{"class":160},"#输出：（2，6，6）\n",[33,98786,98788],{"id":98787},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[38,98790,98791],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[38,98793,98623],{},[83,98795,98797],{"className":30353,"code":98796,"language":30355,"meta":10,"style":10},"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",[88,98798,98799,98823,98847,98852,98857,98862],{"__ignoreMap":10},[91,98800,98801,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821],{"class":93,"line":94},[91,98802,93281],{"class":101},[91,98804,147],{"class":97},[91,98806,92977],{"class":101},[91,98808,319],{"class":150},[91,98810,480],{"class":101},[91,98812,625],{"class":150},[91,98814,92982],{"class":101},[91,98816,173],{"class":150},[91,98818,480],{"class":101},[91,98820,395],{"class":150},[91,98822,108],{"class":101},[91,98824,98825,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845],{"class":93,"line":11},[91,98826,98162],{"class":101},[91,98828,147],{"class":97},[91,98830,92977],{"class":101},[91,98832,439],{"class":150},[91,98834,480],{"class":101},[91,98836,744],{"class":150},[91,98838,92982],{"class":101},[91,98840,173],{"class":150},[91,98842,480],{"class":101},[91,98844,395],{"class":150},[91,98846,108],{"class":101},[91,98848,98849],{"class":93,"line":1157},[91,98850,98851],{"class":160},"#vstack 垂直方向进行堆叠\n",[91,98853,98854],{"class":93,"line":1172},[91,98855,98856],{"class":101},"np.vstack((aa,bb))\n",[91,98858,98859],{"class":93,"line":1178},[91,98860,98861],{"class":160},"#与hstack传的参数类似，等价于：\n",[91,98863,98864],{"class":93,"line":1192},[91,98865,98866],{"class":101},"np.vstack([aa,bb])\n",[38,98868,98208],{},[38,98870,98871],{},[1440,98872],{"alt":10,"src":98873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[38,98875,98704],{},[83,98877,98879],{"className":30353,"code":98878,"language":30355,"meta":10,"style":10},"#两个三行六列\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",[88,98880,98881,98885,98913,98941,98946,98951],{"__ignoreMap":10},[91,98882,98883],{"class":93,"line":94},[91,98884,98263],{"class":160},[91,98886,98887,98889,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911],{"class":93,"line":11},[91,98888,95496],{"class":101},[91,98890,147],{"class":97},[91,98892,92977],{"class":101},[91,98894,319],{"class":150},[91,98896,480],{"class":101},[91,98898,427],{"class":150},[91,98900,92982],{"class":101},[91,98902,179],{"class":150},[91,98904,480],{"class":101},[91,98906,173],{"class":150},[91,98908,480],{"class":101},[91,98910,446],{"class":150},[91,98912,108],{"class":101},[91,98914,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939],{"class":93,"line":1157},[91,98916,98296],{"class":101},[91,98918,147],{"class":97},[91,98920,92977],{"class":101},[91,98922,439],{"class":150},[91,98924,480],{"class":101},[91,98926,98307],{"class":150},[91,98928,92982],{"class":101},[91,98930,179],{"class":150},[91,98932,480],{"class":101},[91,98934,173],{"class":150},[91,98936,480],{"class":101},[91,98938,446],{"class":150},[91,98940,108],{"class":101},[91,98942,98943],{"class":93,"line":1172},[91,98944,98945],{"class":160},"#使用vstack\n",[91,98947,98948],{"class":93,"line":1178},[91,98949,98950],{"class":101},"np.vstack((aaa,bbb)).shape\n",[91,98952,98953],{"class":93,"line":1192},[91,98954,98955],{"class":160},"#输出：（4，3，6）\n",[33,98957,98959],{"id":98958},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[38,98961,98962],{},"该方法是三维数组特有的方法",[38,98964,98965],{},"也就是说",[38,98967,98968],{},"一维数组拼接方法用：concatenate()",[38,98970,98971],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[38,98973,98974],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[38,98976,98977],{},"四维数组及多维数组只能用concatenate进行拼接",[83,98979,98981],{"className":30353,"code":98980,"language":30355,"meta":10,"style":10},"#两个三行六列\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",[88,98982,98983,98987,99015,99043,99048,99053],{"__ignoreMap":10},[91,98984,98985],{"class":93,"line":94},[91,98986,98263],{"class":160},[91,98988,98989,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013],{"class":93,"line":11},[91,98990,95496],{"class":101},[91,98992,147],{"class":97},[91,98994,92977],{"class":101},[91,98996,319],{"class":150},[91,98998,480],{"class":101},[91,99000,427],{"class":150},[91,99002,92982],{"class":101},[91,99004,179],{"class":150},[91,99006,480],{"class":101},[91,99008,173],{"class":150},[91,99010,480],{"class":101},[91,99012,446],{"class":150},[91,99014,108],{"class":101},[91,99016,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041],{"class":93,"line":1157},[91,99018,98296],{"class":101},[91,99020,147],{"class":97},[91,99022,92977],{"class":101},[91,99024,439],{"class":150},[91,99026,480],{"class":101},[91,99028,98307],{"class":150},[91,99030,92982],{"class":101},[91,99032,179],{"class":150},[91,99034,480],{"class":101},[91,99036,173],{"class":150},[91,99038,480],{"class":101},[91,99040,446],{"class":150},[91,99042,108],{"class":101},[91,99044,99045],{"class":93,"line":1172},[91,99046,99047],{"class":160},"#使用dstack\n",[91,99049,99050],{"class":93,"line":1178},[91,99051,99052],{"class":101},"np.dstack((aaa,bbb)).shape\n",[91,99054,99055],{"class":93,"line":1192},[91,99056,99057],{"class":160},"#结果：（2，3，12）\n",[5105,99059,99060],{},"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":10,"searchDepth":11,"depth":11,"links":99062},[99063,99064,99065,99066],{"id":98002,"depth":11,"text":98003},{"id":98616,"depth":11,"text":98617},{"id":98787,"depth":11,"text":98788},{"id":98958,"depth":11,"text":98959},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":97994,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99073,"title":99074,"body":99075,"description":13,"extension":14,"meta":99350,"navigation":17,"path":99351,"seo":99352,"stem":99353,"__hash__":99354},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99076,"toc":99348},[99077,99080,99083,99177,99180,99183,99186,99189,99192,99195,99198,99201,99345],[29,99078,99074],{"id":99079},"_7数组转置",[38,99081,99082],{},"使用transpose()函数",[83,99084,99086],{"className":30353,"code":99085,"language":30355,"meta":10,"style":10},"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",[88,99087,99088,99098,99122,99127,99132,99137,99142,99150,99154,99158,99163,99168,99173],{"__ignoreMap":10},[91,99089,99090,99092,99094,99096],{"class":93,"line":94},[91,99091,30367],{"class":97},[91,99093,31355],{"class":101},[91,99095,31358],{"class":97},[91,99097,31361],{"class":101},[91,99099,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120],{"class":93,"line":11},[91,99101,340],{"class":101},[91,99103,147],{"class":97},[91,99105,31692],{"class":101},[91,99107,319],{"class":150},[91,99109,480],{"class":101},[91,99111,625],{"class":150},[91,99113,92982],{"class":101},[91,99115,395],{"class":150},[91,99117,480],{"class":101},[91,99119,173],{"class":150},[91,99121,108],{"class":101},[91,99123,99124],{"class":93,"line":1157},[91,99125,99126],{"class":160},"#二维数组转置\n",[91,99128,99129],{"class":93,"line":1172},[91,99130,99131],{"class":160},"#调用transpose()函数\n",[91,99133,99134],{"class":93,"line":1178},[91,99135,99136],{"class":101},"a.transpose()\n",[91,99138,99139],{"class":93,"line":1192},[91,99140,99141],{"class":160},"#对于二维数组也可以采用.T来实现\n",[91,99143,99144,99147],{"class":93,"line":1198},[91,99145,99146],{"class":101},"a.T",[91,99148,99149],{"class":160},"#与上述代码一样\n",[91,99151,99152],{"class":93,"line":1289},[91,99153,93539],{"class":160},[91,99155,99156],{"class":93,"line":1295},[91,99157,93903],{"class":206},[91,99159,99160],{"class":93,"line":1307},[91,99161,99162],{"class":206},"array([[ 1,  4,  7, 10],\n",[91,99164,99165],{"class":93,"line":1590},[91,99166,99167],{"class":206},"       [ 2,  5,  8, 11],\n",[91,99169,99170],{"class":93,"line":1595},[91,99171,99172],{"class":206},"       [ 3,  6,  9, 12]])\n",[91,99174,99175],{"class":93,"line":1601},[91,99176,93903],{"class":206},[38,99178,99179],{},"也可以使用np.transpose()的形式",[38,99181,99182],{},"#多维数组进行转置 np.transpose()",[38,99184,99185],{},"#对二维数组也可以使用np.transpose()进行转置",[38,99187,99188],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[38,99190,99191],{},"第二个参数，维度可以理解为用axis中的数来理解",[38,99193,99194],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[38,99196,99197],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[38,99199,99200],{},"四维及以上的数组也是一样的道理",[83,99202,99204],{"className":30353,"code":99203,"language":30355,"meta":10,"style":10},"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",[88,99205,99206,99234,99239,99244,99249,99267,99272,99304,99309,99314,99319,99340],{"__ignoreMap":10},[91,99207,99208,99210,99212,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232],{"class":93,"line":94},[91,99209,922],{"class":101},[91,99211,147],{"class":97},[91,99213,92977],{"class":101},[91,99215,319],{"class":150},[91,99217,480],{"class":101},[91,99219,427],{"class":150},[91,99221,92982],{"class":101},[91,99223,173],{"class":150},[91,99225,480],{"class":101},[91,99227,446],{"class":150},[91,99229,480],{"class":101},[91,99231,179],{"class":150},[91,99233,108],{"class":101},[91,99235,99236],{"class":93,"line":11},[91,99237,99238],{"class":101},"x.shape\n",[91,99240,99241],{"class":93,"line":1157},[91,99242,99243],{"class":160},"#结果：（3,6,2）\n",[91,99245,99246],{"class":93,"line":1172},[91,99247,99248],{"class":160},"#使用np.transpose()进行转置 变为(2,6,3)\n",[91,99250,99251,99254,99256,99258,99260,99262,99264],{"class":93,"line":1178},[91,99252,99253],{"class":101},"np.transpose(x,(",[91,99255,179],{"class":150},[91,99257,480],{"class":101},[91,99259,319],{"class":150},[91,99261,480],{"class":101},[91,99263,293],{"class":150},[91,99265,99266],{"class":101},")).shape\n",[91,99268,99269],{"class":93,"line":1192},[91,99270,99271],{"class":160},"#结果：(2,6,3)\n",[91,99273,99274,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302],{"class":93,"line":1198},[91,99275,98481],{"class":101},[91,99277,147],{"class":97},[91,99279,92977],{"class":101},[91,99281,319],{"class":150},[91,99283,480],{"class":101},[91,99285,427],{"class":150},[91,99287,92982],{"class":101},[91,99289,173],{"class":150},[91,99291,480],{"class":101},[91,99293,179],{"class":150},[91,99295,480],{"class":101},[91,99297,319],{"class":150},[91,99299,480],{"class":101},[91,99301,446],{"class":150},[91,99303,108],{"class":101},[91,99305,99306],{"class":93,"line":1289},[91,99307,99308],{"class":101},"aaaa.shape\n",[91,99310,99311],{"class":93,"line":1295},[91,99312,99313],{"class":160},"#结果：（3，2，1，6）\n",[91,99315,99316],{"class":93,"line":1307},[91,99317,99318],{"class":160},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[91,99320,99321,99324,99326,99328,99330,99332,99334,99336,99338],{"class":93,"line":1590},[91,99322,99323],{"class":101},"np.transpose(aaaa,(",[91,99325,319],{"class":150},[91,99327,480],{"class":101},[91,99329,179],{"class":150},[91,99331,480],{"class":101},[91,99333,293],{"class":150},[91,99335,480],{"class":101},[91,99337,173],{"class":150},[91,99339,99266],{"class":101},[91,99341,99342],{"class":93,"line":1595},[91,99343,99344],{"class":160},"#结果：(2,1,3,6)\n",[5105,99346,99347],{},"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":10,"searchDepth":11,"depth":11,"links":99349},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99074,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99356,"title":99357,"body":99358,"description":13,"extension":14,"meta":100092,"navigation":17,"path":100093,"seo":100094,"stem":100095,"__hash__":100096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99359,"toc":100090},[99360,99363,99366,99369,99372,99375,99378,99381,99384,99493,99496,99499,100087],[29,99361,99357],{"id":99362},"_8数组分割",[38,99364,99365],{},"split分割",[38,99367,99368],{},"numpy.split(ary,indics_or_sections,axis)",[38,99370,99371],{},"解释：",[38,99373,99374],{},"ary:被分割的数组",[38,99376,99377],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[38,99379,99380],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[38,99382,99383],{},"①一维数组的分割",[83,99385,99387],{"className":30353,"code":99386,"language":30355,"meta":10,"style":10},"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",[88,99388,99389,99405,99410,99419,99423,99428,99436,99440,99445,99450,99463,99467,99472,99484,99488],{"__ignoreMap":10},[91,99390,99391,99393,99395,99397,99399,99401,99403],{"class":93,"line":94},[91,99392,340],{"class":101},[91,99394,147],{"class":97},[91,99396,92977],{"class":101},[91,99398,319],{"class":150},[91,99400,480],{"class":101},[91,99402,522],{"class":150},[91,99404,108],{"class":101},[91,99406,99407],{"class":93,"line":11},[91,99408,99409],{"class":160},"#如果传入整数，必须能够平分，否则会报错\n",[91,99411,99412,99415,99417],{"class":93,"line":1157},[91,99413,99414],{"class":101},"np.split(a,",[91,99416,179],{"class":150},[91,99418,108],{"class":101},[91,99420,99421],{"class":93,"line":1172},[91,99422,93539],{"class":160},[91,99424,99425],{"class":93,"line":1178},[91,99426,99427],{"class":160},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[91,99429,99430,99432,99434],{"class":93,"line":1192},[91,99431,99414],{"class":101},[91,99433,395],{"class":150},[91,99435,108],{"class":101},[91,99437,99438],{"class":93,"line":1198},[91,99439,93539],{"class":160},[91,99441,99442],{"class":93,"line":1289},[91,99443,99444],{"class":160},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[91,99446,99447],{"class":93,"line":1295},[91,99448,99449],{"class":160},"#传入数组\n",[91,99451,99452,99455,99457,99459,99461],{"class":93,"line":1307},[91,99453,99454],{"class":101},"np.split(a,[",[91,99456,173],{"class":150},[91,99458,480],{"class":101},[91,99460,421],{"class":150},[91,99462,4635],{"class":101},[91,99464,99465],{"class":93,"line":1590},[91,99466,93539],{"class":160},[91,99468,99469],{"class":93,"line":1595},[91,99470,99471],{"class":160},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[91,99473,99474,99476,99478,99480,99482],{"class":93,"line":1601},[91,99475,99454],{"class":101},[91,99477,421],{"class":150},[91,99479,480],{"class":101},[91,99481,471],{"class":150},[91,99483,4635],{"class":101},[91,99485,99486],{"class":93,"line":1606},[91,99487,93539],{"class":160},[91,99489,99490],{"class":93,"line":1620},[91,99491,99492],{"class":160},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[38,99494,99495],{},"②二维数组的分割",[38,99497,99498],{},"使用split()",[83,99500,99502],{"className":30353,"code":99501,"language":30355,"meta":10,"style":10},"#二维数组分割\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",[88,99503,99504,99509,99533,99538,99547,99551,99555,99560,99565,99570,99575,99580,99585,99590,99594,99607,99611,99615,99619,99623,99627,99632,99637,99642,99646,99651,99667,99671,99675,99680,99685,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99769,99773,99793,99797,99801,99806,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99895,99900,99909,99913,99917,99921,99925,99929,99933,99937,99941,99945,99954,99958,99962,99966,99970,99974,99978,99982,99986,99990,99994,99998,100002,100006,100010,100014,100018,100022,100026,100030,100034,100038,100051,100055,100059,100063,100067,100071,100075,100079,100083],{"__ignoreMap":10},[91,99505,99506],{"class":93,"line":94},[91,99507,99508],{"class":160},"#二维数组分割\n",[91,99510,99511,99513,99515,99517,99519,99521,99523,99525,99527,99529,99531],{"class":93,"line":11},[91,99512,93281],{"class":101},[91,99514,147],{"class":97},[91,99516,92977],{"class":101},[91,99518,319],{"class":150},[91,99520,480],{"class":101},[91,99522,427],{"class":150},[91,99524,92982],{"class":101},[91,99526,446],{"class":150},[91,99528,480],{"class":101},[91,99530,446],{"class":150},[91,99532,108],{"class":101},[91,99534,99535],{"class":93,"line":1157},[91,99536,99537],{"class":160},"#默认axis=0  传入整数平均分,按行来的\n",[91,99539,99540,99543,99545],{"class":93,"line":1172},[91,99541,99542],{"class":101},"np.split(aa,",[91,99544,173],{"class":150},[91,99546,108],{"class":101},[91,99548,99549],{"class":93,"line":1178},[91,99550,95739],{"class":160},[91,99552,99553],{"class":93,"line":1192},[91,99554,93903],{"class":206},[91,99556,99557],{"class":93,"line":1198},[91,99558,99559],{"class":206},"[array([[ 1,  2,  3,  4,  5,  6],\n",[91,99561,99562],{"class":93,"line":1289},[91,99563,99564],{"class":206},"        [ 7,  8,  9, 10, 11, 12]]),\n",[91,99566,99567],{"class":93,"line":1295},[91,99568,99569],{"class":206}," array([[13, 14, 15, 16, 17, 18],\n",[91,99571,99572],{"class":93,"line":1307},[91,99573,99574],{"class":206},"        [19, 20, 21, 22, 23, 24]]),\n",[91,99576,99577],{"class":93,"line":1590},[91,99578,99579],{"class":206}," array([[25, 26, 27, 28, 29, 30],\n",[91,99581,99582],{"class":93,"line":1595},[91,99583,99584],{"class":206},"        [31, 32, 33, 34, 35, 36]])]\n",[91,99586,99587],{"class":93,"line":1601},[91,99588,99589],{"class":206}," '''\n",[91,99591,99592],{"class":93,"line":1606},[91,99593,99449],{"class":160},[91,99595,99596,99599,99601,99603,99605],{"class":93,"line":1620},[91,99597,99598],{"class":101},"np.split(aa,[",[91,99600,179],{"class":150},[91,99602,480],{"class":101},[91,99604,421],{"class":150},[91,99606,4635],{"class":101},[91,99608,99609],{"class":93,"line":1625},[91,99610,95739],{"class":160},[91,99612,99613],{"class":93,"line":1631},[91,99614,93903],{"class":206},[91,99616,99617],{"class":93,"line":1652},[91,99618,99559],{"class":206},[91,99620,99621],{"class":93,"line":1657},[91,99622,99564],{"class":206},[91,99624,99625],{"class":93,"line":1671},[91,99626,99569],{"class":206},[91,99628,99629],{"class":93,"line":1676},[91,99630,99631],{"class":206},"        [19, 20, 21, 22, 23, 24],\n",[91,99633,99634],{"class":93,"line":1705},[91,99635,99636],{"class":206},"        [25, 26, 27, 28, 29, 30]]),\n",[91,99638,99639],{"class":93,"line":1710},[91,99640,99641],{"class":206}," array([[31, 32, 33, 34, 35, 36]])]\n",[91,99643,99644],{"class":93,"line":1727},[91,99645,93903],{"class":206},[91,99647,99648],{"class":93,"line":1732},[91,99649,99650],{"class":160},"#axis=1 按照列来分\n",[91,99652,99653,99655,99657,99659,99661,99663,99665],{"class":93,"line":1737},[91,99654,99542],{"class":101},[91,99656,173],{"class":150},[91,99658,480],{"class":101},[91,99660,47489],{"class":5195},[91,99662,147],{"class":97},[91,99664,319],{"class":150},[91,99666,108],{"class":101},[91,99668,99669],{"class":93,"line":1742},[91,99670,95739],{"class":160},[91,99672,99673],{"class":93,"line":1756},[91,99674,93903],{"class":206},[91,99676,99677],{"class":93,"line":1761},[91,99678,99679],{"class":206},"[array([[ 1,  2],\n",[91,99681,99682],{"class":93,"line":2555},[91,99683,99684],{"class":206},"        [ 7,  8],\n",[91,99686,99687],{"class":93,"line":2569},[91,99688,99689],{"class":206},"        [13, 14],\n",[91,99691,99692],{"class":93,"line":2577},[91,99693,99694],{"class":206},"        [19, 20],\n",[91,99696,99697],{"class":93,"line":2582},[91,99698,99699],{"class":206},"        [25, 26],\n",[91,99701,99702],{"class":93,"line":2588},[91,99703,99704],{"class":206},"        [31, 32]]),\n",[91,99706,99707],{"class":93,"line":2594},[91,99708,99709],{"class":206}," array([[ 3,  4],\n",[91,99711,99712],{"class":93,"line":2599},[91,99713,99714],{"class":206},"        [ 9, 10],\n",[91,99716,99717],{"class":93,"line":7927},[91,99718,99719],{"class":206},"        [15, 16],\n",[91,99721,99722],{"class":93,"line":7951},[91,99723,99724],{"class":206},"        [21, 22],\n",[91,99726,99727],{"class":93,"line":7956},[91,99728,99729],{"class":206},"        [27, 28],\n",[91,99731,99732],{"class":93,"line":7962},[91,99733,99734],{"class":206},"        [33, 34]]),\n",[91,99736,99737],{"class":93,"line":7989},[91,99738,99739],{"class":206}," array([[ 5,  6],\n",[91,99741,99742],{"class":93,"line":7994},[91,99743,99744],{"class":206},"        [11, 12],\n",[91,99746,99747],{"class":93,"line":8000},[91,99748,99749],{"class":206},"        [17, 18],\n",[91,99751,99752],{"class":93,"line":8012},[91,99753,99754],{"class":206},"        [23, 24],\n",[91,99756,99757],{"class":93,"line":8024},[91,99758,99759],{"class":206},"        [29, 30],\n",[91,99761,99762],{"class":93,"line":8036},[91,99763,99764],{"class":206},"        [35, 36]])]\n",[91,99766,99767],{"class":93,"line":9695},[91,99768,99589],{"class":206},[91,99770,99771],{"class":93,"line":9720},[91,99772,99449],{"class":160},[91,99774,99775,99777,99779,99781,99783,99785,99787,99789,99791],{"class":93,"line":9743},[91,99776,99598],{"class":101},[91,99778,319],{"class":150},[91,99780,480],{"class":101},[91,99782,179],{"class":150},[91,99784,41584],{"class":101},[91,99786,47489],{"class":5195},[91,99788,147],{"class":97},[91,99790,319],{"class":150},[91,99792,108],{"class":101},[91,99794,99795],{"class":93,"line":9767},[91,99796,93539],{"class":160},[91,99798,99799],{"class":93,"line":9772},[91,99800,93903],{"class":206},[91,99802,99803],{"class":93,"line":9777},[91,99804,99805],{"class":206},"[array([[ 1],\n",[91,99807,99808],{"class":93,"line":9782},[91,99809,99810],{"class":206},"        [ 7],\n",[91,99812,99813],{"class":93,"line":9791},[91,99814,99815],{"class":206},"        [13],\n",[91,99817,99818],{"class":93,"line":9796},[91,99819,99820],{"class":206},"        [19],\n",[91,99822,99823],{"class":93,"line":9802},[91,99824,99825],{"class":206},"        [25],\n",[91,99827,99828],{"class":93,"line":9823},[91,99829,99830],{"class":206},"        [31]]),\n",[91,99832,99833],{"class":93,"line":9829},[91,99834,99835],{"class":206}," array([[ 2],\n",[91,99837,99838],{"class":93,"line":9843},[91,99839,99840],{"class":206},"        [ 8],\n",[91,99842,99843],{"class":93,"line":9849},[91,99844,99845],{"class":206},"        [14],\n",[91,99847,99848],{"class":93,"line":9876},[91,99849,99850],{"class":206},"        [20],\n",[91,99852,99853],{"class":93,"line":9885},[91,99854,99855],{"class":206},"        [26],\n",[91,99857,99858],{"class":93,"line":9891},[91,99859,99860],{"class":206},"        [32]]),\n",[91,99862,99863],{"class":93,"line":9899},[91,99864,99865],{"class":206}," array([[ 3,  4,  5,  6],\n",[91,99867,99868],{"class":93,"line":9904},[91,99869,99870],{"class":206},"        [ 9, 10, 11, 12],\n",[91,99872,99873],{"class":93,"line":16583},[91,99874,99875],{"class":206},"        [15, 16, 17, 18],\n",[91,99877,99878],{"class":93,"line":16589},[91,99879,99880],{"class":206},"        [21, 22, 23, 24],\n",[91,99882,99883],{"class":93,"line":16612},[91,99884,99885],{"class":206},"        [27, 28, 29, 30],\n",[91,99887,99888],{"class":93,"line":16618},[91,99889,99890],{"class":206},"        [33, 34, 35, 36]])]\n",[91,99892,99893],{"class":93,"line":16641},[91,99894,93903],{"class":206},[91,99896,99897],{"class":93,"line":16655},[91,99898,99899],{"class":160},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[91,99901,99902,99905,99907],{"class":93,"line":16675},[91,99903,99904],{"class":101},"np.vsplit(aa,",[91,99906,173],{"class":150},[91,99908,108],{"class":101},[91,99910,99911],{"class":93,"line":16681},[91,99912,93539],{"class":160},[91,99914,99915],{"class":93,"line":16692},[91,99916,93903],{"class":206},[91,99918,99919],{"class":93,"line":16715},[91,99920,99559],{"class":206},[91,99922,99923],{"class":93,"line":16737},[91,99924,99564],{"class":206},[91,99926,99927],{"class":93,"line":16742},[91,99928,99569],{"class":206},[91,99930,99931],{"class":93,"line":16748},[91,99932,99574],{"class":206},[91,99934,99935],{"class":93,"line":16762},[91,99936,99579],{"class":206},[91,99938,99939],{"class":93,"line":16775},[91,99940,99584],{"class":206},[91,99942,99943],{"class":93,"line":16780},[91,99944,93903],{"class":206},[91,99946,99947,99950,99952],{"class":93,"line":16794},[91,99948,99949],{"class":101},"np.hsplit(aa,",[91,99951,173],{"class":150},[91,99953,108],{"class":101},[91,99955,99956],{"class":93,"line":16799},[91,99957,93539],{"class":160},[91,99959,99960],{"class":93,"line":16805},[91,99961,93903],{"class":206},[91,99963,99964],{"class":93,"line":16810},[91,99965,99679],{"class":206},[91,99967,99968],{"class":93,"line":16824},[91,99969,99684],{"class":206},[91,99971,99972],{"class":93,"line":16829},[91,99973,99689],{"class":206},[91,99975,99976],{"class":93,"line":16834},[91,99977,99694],{"class":206},[91,99979,99980],{"class":93,"line":16848},[91,99981,99699],{"class":206},[91,99983,99984],{"class":93,"line":16860},[91,99985,99704],{"class":206},[91,99987,99988],{"class":93,"line":16865},[91,99989,99709],{"class":206},[91,99991,99992],{"class":93,"line":16878},[91,99993,99714],{"class":206},[91,99995,99996],{"class":93,"line":16883},[91,99997,99719],{"class":206},[91,99999,100000],{"class":93,"line":16888},[91,100001,99724],{"class":206},[91,100003,100004],{"class":93,"line":16893},[91,100005,99729],{"class":206},[91,100007,100008],{"class":93,"line":16906},[91,100009,99734],{"class":206},[91,100011,100012],{"class":93,"line":16911},[91,100013,99739],{"class":206},[91,100015,100016],{"class":93,"line":32608},[91,100017,99744],{"class":206},[91,100019,100020],{"class":93,"line":32614},[91,100021,99749],{"class":206},[91,100023,100024],{"class":93,"line":32620},[91,100025,99754],{"class":206},[91,100027,100028],{"class":93,"line":32626},[91,100029,99759],{"class":206},[91,100031,100032],{"class":93,"line":32632},[91,100033,99764],{"class":206},[91,100035,100036],{"class":93,"line":32643},[91,100037,93903],{"class":206},[91,100039,100040,100043,100045,100047,100049],{"class":93,"line":32649},[91,100041,100042],{"class":101},"np.vsplit(aa,[",[91,100044,179],{"class":150},[91,100046,480],{"class":101},[91,100048,421],{"class":150},[91,100050,4635],{"class":101},[91,100052,100053],{"class":93,"line":32669},[91,100054,93539],{"class":160},[91,100056,100057],{"class":93,"line":32675},[91,100058,93903],{"class":206},[91,100060,100061],{"class":93,"line":32686},[91,100062,99559],{"class":206},[91,100064,100065],{"class":93,"line":32692},[91,100066,99564],{"class":206},[91,100068,100069],{"class":93,"line":32698},[91,100070,99569],{"class":206},[91,100072,100073],{"class":93,"line":32704},[91,100074,99631],{"class":206},[91,100076,100077],{"class":93,"line":32710},[91,100078,99636],{"class":206},[91,100080,100081],{"class":93,"line":32716},[91,100082,99641],{"class":206},[91,100084,100085],{"class":93,"line":32722},[91,100086,99589],{"class":206},[5105,100088,100089],{},"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":10,"searchDepth":11,"depth":11,"links":100091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99357,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100098,"title":100099,"body":100100,"description":13,"extension":14,"meta":100594,"navigation":17,"path":100595,"seo":100596,"stem":100597,"__hash__":100598},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100101,"toc":100585},[100102,100105,100108,100133,100137,100196,100248,100252,100254,100290,100344,100346,100384,100455,100459,100464,100468,100471,100504,100507,100511,100514,100517,100520,100523,100528,100532,100535,100538,100541,100544,100549,100553,100558,100561,100582],[29,100103,100099],{"id":100104},"_9数学函数",[38,100106,100107],{},"补充回顾：python的列表推导式",[83,100109,100111],{"className":30353,"code":100110,"language":30355,"meta":10,"style":10},"[1\u002Fi for i in a]\n",[88,100112,100113],{"__ignoreMap":10},[91,100114,100115,100117,100119,100121,100124,100126,100128,100130],{"class":93,"line":94},[91,100116,992],{"class":101},[91,100118,319],{"class":150},[91,100120,686],{"class":97},[91,100122,100123],{"class":101},"i ",[91,100125,3003],{"class":97},[91,100127,9417],{"class":101},[91,100129,26018],{"class":97},[91,100131,100132],{"class":101}," a]\n",[33,100134,100136],{"id":100135},"_91-求倒数","9.1 求倒数",[83,100138,100140],{"className":30353,"code":100139,"language":30355,"meta":10,"style":10},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[88,100141,100142,100147,100175,100187],{"__ignoreMap":10},[91,100143,100144],{"class":93,"line":94},[91,100145,100146],{"class":160},"#数组求倒数\n",[91,100148,100149,100151,100153,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173],{"class":93,"line":11},[91,100150,340],{"class":101},[91,100152,147],{"class":97},[91,100154,992],{"class":101},[91,100156,319],{"class":150},[91,100158,480],{"class":101},[91,100160,179],{"class":150},[91,100162,480],{"class":101},[91,100164,173],{"class":150},[91,100166,480],{"class":101},[91,100168,395],{"class":150},[91,100170,480],{"class":101},[91,100172,421],{"class":150},[91,100174,33221],{"class":101},[91,100176,100177,100179,100181,100184],{"class":93,"line":1157},[91,100178,365],{"class":101},[91,100180,147],{"class":97},[91,100182,100183],{"class":101},"np.array(a)",[91,100185,100186],{"class":160},"#将列表转换为数组\n",[91,100188,100189,100191,100193],{"class":93,"line":1172},[91,100190,319],{"class":150},[91,100192,686],{"class":97},[91,100194,100195],{"class":101},"b\n",[83,100197,100199],{"className":30353,"code":100198,"language":30355,"meta":10,"style":10},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[88,100200,100201,100229,100238,100243],{"__ignoreMap":10},[91,100202,100203,100205,100207,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227],{"class":93,"line":94},[91,100204,340],{"class":101},[91,100206,147],{"class":97},[91,100208,992],{"class":101},[91,100210,319],{"class":150},[91,100212,480],{"class":101},[91,100214,179],{"class":150},[91,100216,480],{"class":101},[91,100218,173],{"class":150},[91,100220,480],{"class":101},[91,100222,395],{"class":150},[91,100224,480],{"class":101},[91,100226,421],{"class":150},[91,100228,33221],{"class":101},[91,100230,100231,100233,100235],{"class":93,"line":11},[91,100232,365],{"class":101},[91,100234,147],{"class":97},[91,100236,100237],{"class":101},"np.array(a)\n",[91,100239,100240],{"class":93,"line":1157},[91,100241,100242],{"class":160},"#调用numpy中的函数reciprocal()\n",[91,100244,100245],{"class":93,"line":1172},[91,100246,100247],{"class":101},"np.reciprocal(b)\n",[33,100249,100251],{"id":100250},"_92-求平方","9.2 求平方",[38,100253,94505],{},[83,100255,100257],{"className":30353,"code":100256,"language":30355,"meta":10,"style":10},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[88,100258,100259,100264,100269,100285],{"__ignoreMap":10},[91,100260,100261],{"class":93,"line":94},[91,100262,100263],{"class":160},"#square()，求平方\n",[91,100265,100266],{"class":93,"line":11},[91,100267,100268],{"class":160},"#一维数组\n",[91,100270,100271,100273,100275,100277,100279,100281,100283],{"class":93,"line":1157},[91,100272,340],{"class":101},[91,100274,147],{"class":97},[91,100276,92977],{"class":101},[91,100278,319],{"class":150},[91,100280,480],{"class":101},[91,100282,548],{"class":150},[91,100284,108],{"class":101},[91,100286,100287],{"class":93,"line":1172},[91,100288,100289],{"class":101},"np.square(a)\n",[83,100291,100293],{"className":30353,"code":100292,"language":30355,"meta":10,"style":10},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[88,100294,100295,100300,100305,100326],{"__ignoreMap":10},[91,100296,100297],{"class":93,"line":94},[91,100298,100299],{"class":160},"#或者通过循环遍历的形式来计算\n",[91,100301,100302],{"class":93,"line":11},[91,100303,100304],{"class":160},"#这是一个列表\n",[91,100306,100307,100310,100312,100314,100316,100318,100320,100323],{"class":93,"line":1157},[91,100308,100309],{"class":101},"[i",[91,100311,557],{"class":97},[91,100313,100123],{"class":101},[91,100315,3003],{"class":97},[91,100317,9417],{"class":101},[91,100319,26018],{"class":97},[91,100321,100322],{"class":101}," a]",[91,100324,100325],{"class":160},"#这个求完之后在数列当中\n",[91,100327,100328,100331,100333,100335,100337,100339,100341],{"class":93,"line":1172},[91,100329,100330],{"class":101},"np.array([i",[91,100332,557],{"class":97},[91,100334,100123],{"class":101},[91,100336,3003],{"class":97},[91,100338,9417],{"class":101},[91,100340,26018],{"class":97},[91,100342,100343],{"class":101}," a])\n",[38,100345,93266],{},[83,100347,100349],{"className":30353,"code":100348,"language":30355,"meta":10,"style":10},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[88,100350,100351,100355,100379],{"__ignoreMap":10},[91,100352,100353],{"class":93,"line":94},[91,100354,93276],{"class":160},[91,100356,100357,100359,100361,100363,100365,100367,100369,100371,100373,100375,100377],{"class":93,"line":11},[91,100358,93281],{"class":101},[91,100360,147],{"class":97},[91,100362,92977],{"class":101},[91,100364,319],{"class":150},[91,100366,480],{"class":101},[91,100368,625],{"class":150},[91,100370,92982],{"class":101},[91,100372,395],{"class":150},[91,100374,480],{"class":101},[91,100376,173],{"class":150},[91,100378,108],{"class":101},[91,100380,100381],{"class":93,"line":1157},[91,100382,100383],{"class":101},"np.square(aa)\n",[83,100385,100387],{"className":30353,"code":100386,"language":30355,"meta":10,"style":10},"#传统的方式\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",[88,100388,100389,100394,100403,100419,100435,100450],{"__ignoreMap":10},[91,100390,100391],{"class":93,"line":94},[91,100392,100393],{"class":160},"#传统的方式\n",[91,100395,100396,100398,100400],{"class":93,"line":11},[91,100397,98162],{"class":101},[91,100399,147],{"class":97},[91,100401,100402],{"class":101},"np.empty_like(aa)\n",[91,100404,100405,100407,100409,100411,100413,100415,100417],{"class":93,"line":1157},[91,100406,3003],{"class":97},[91,100408,9417],{"class":101},[91,100410,26018],{"class":97},[91,100412,32418],{"class":150},[91,100414,102],{"class":101},[91,100416,395],{"class":150},[91,100418,30761],{"class":101},[91,100420,100421,100423,100425,100427,100429,100431,100433],{"class":93,"line":1172},[91,100422,3179],{"class":97},[91,100424,9479],{"class":101},[91,100426,26018],{"class":97},[91,100428,32418],{"class":150},[91,100430,102],{"class":101},[91,100432,173],{"class":150},[91,100434,30761],{"class":101},[91,100436,100437,100440,100442,100445,100447],{"class":93,"line":1178},[91,100438,100439],{"class":101},"        bb[i,j]",[91,100441,147],{"class":97},[91,100443,100444],{"class":101},"aa[i,j]",[91,100446,557],{"class":97},[91,100448,100449],{"class":101},"aa[i,j]\n",[91,100451,100452],{"class":93,"line":1192},[91,100453,100454],{"class":101},"bb\n",[33,100456,100458],{"id":100457},"_93-求各元素的符号","9.3 求各元素的符号",[38,100460,100461],{},[1440,100462],{"alt":10,"src":100463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[33,100465,100467],{"id":100466},"_94-modf函数","9.4 modf函数",[38,100469,100470],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[83,100472,100474],{"className":30353,"code":100473,"language":30355,"meta":10,"style":10},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[88,100475,100476,100499],{"__ignoreMap":10},[91,100477,100478,100480,100482,100484,100486,100488,100490,100492,100494,100497],{"class":93,"line":94},[91,100479,340],{"class":101},[91,100481,147],{"class":97},[91,100483,92977],{"class":101},[91,100485,634],{"class":97},[91,100487,548],{"class":150},[91,100489,480],{"class":101},[91,100491,548],{"class":150},[91,100493,480],{"class":101},[91,100495,100496],{"class":150},"0.3",[91,100498,108],{"class":101},[91,100500,100501],{"class":93,"line":11},[91,100502,100503],{"class":101},"np.modf(a)\n",[38,100505,100506],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[33,100508,100510],{"id":100509},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[38,100512,100513],{},"np.cell()",[38,100515,100516],{},"np.floor()",[38,100518,100519],{},"np.rint()",[38,100521,100522],{},"对各元素分别向上取整、向下取整、四舍五入",[38,100524,100525],{},[1440,100526],{"alt":10,"src":100527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[33,100529,100531],{"id":100530},"_96-around函数","9.6 around()函数",[38,100533,100534],{},"around()函数也可以实现对数的小数位数进行操作",[38,100536,100537],{},"其中的参数：",[38,100539,100540],{},"1.要传的数组",[38,100542,100543],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[38,100545,100546],{},[1440,100547],{"alt":10,"src":100548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[33,100550,100552],{"id":100551},"_97-三角函数","9.7 三角函数",[38,100554,100555],{},[1440,100556],{"alt":10,"src":100557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[38,100559,100560],{},"引入图像模块非常重要",[83,100562,100564],{"className":30353,"code":100563,"language":30355,"meta":10,"style":10},"from matplotlib import pyplot as plt\n",[88,100565,100566],{"__ignoreMap":10},[91,100567,100568,100570,100573,100575,100578,100580],{"class":93,"line":94},[91,100569,30712],{"class":97},[91,100571,100572],{"class":101}," matplotlib ",[91,100574,30367],{"class":97},[91,100576,100577],{"class":101}," pyplot ",[91,100579,31358],{"class":97},[91,100581,31412],{"class":101},[5105,100583,100584],{},"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":10,"searchDepth":11,"depth":11,"links":100586},[100587,100588,100589,100590,100591,100592,100593],{"id":100135,"depth":11,"text":100136},{"id":100250,"depth":11,"text":100251},{"id":100457,"depth":11,"text":100458},{"id":100466,"depth":11,"text":100467},{"id":100509,"depth":11,"text":100510},{"id":100530,"depth":11,"text":100531},{"id":100551,"depth":11,"text":100552},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100099,"description":13},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100600,"title":100601,"body":100602,"description":13,"extension":14,"meta":100606,"navigation":17,"path":100607,"seo":100608,"stem":100609,"__hash__":100610},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100603,"toc":100604},[],{"title":10,"searchDepth":11,"depth":11,"links":100605},[],{"category":50395},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100601,"description":13},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100612,"title":100613,"body":100614,"description":10,"extension":14,"meta":102622,"navigation":17,"path":102623,"seo":102624,"stem":102625,"__hash__":102626},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100615,"toc":102598},[100616,100619,100623,100626,100629,100635,100638,100661,100664,100698,100701,100742,100746,100749,100842,100845,100889,100892,100909,100912,100926,100929,100932,100977,100980,101017,101021,101024,101030,101035,101055,101059,101062,101128,101131,101149,101153,101156,101185,101195,101201,101205,101208,101214,101225,101229,101232,101262,101265,101545,101548,101551,101562,101565,101568,101590,101597,101600,101618,101621,101624,101638,101646,101649,101675,101681,101684,101687,101697,101709,101729,101738,101758,101768,101792,101805,101819,101824,101865,101882,101907,101919,101939,101945,101990,102009,102026,102039,102055,102062,102074,102083,102118,102139,102164,102177,102201,102216,102241,102244,102265,102274,102277,102288,102292,102295,102301,102313,102320,102324,102327,102339,102342,102356,102359,102369,102379,102382,102422,102425,102429,102435,102438,102452,102456,102459,102492,102496,102499,102522,102530,102533,102539,102545,102548,102551,102579,102583,102586,102592,102595],[29,100617,100613],{"id":100618},"_1环境安装与第一个-mujoco-程序",[33,100620,100622],{"id":100621},"_1目标说明","1.目标说明",[38,100624,100625],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[38,100627,100628],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[83,100630,100633],{"className":100631,"code":100632,"language":5166,"meta":10},[5164],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[88,100634,100632],{"__ignoreMap":10},[38,100636,100637],{},"需要掌握:",[46,100639,100640,100643,100646,100651,100656],{},[49,100641,100642],{},"Fedora 44 下 MuJoCo 的系统依赖",[49,100644,100645],{},"Python 虚拟环境创建",[49,100647,100648],{},[88,100649,100650],{},"mujoco.MjModel",[49,100652,100653],{},[88,100654,100655],{},"mujoco.MjData",[49,100657,100658],{},[88,100659,100660],{},"mujoco.mj_step(model, data)",[38,100662,100663],{},"MuJoCo 中最重要的两个对象:",[239,100665,100666,100676],{},[242,100667,100668],{},[245,100669,100670,100673],{},[248,100671,100672],{"align":23710},"对象",[248,100674,100675],{"align":23710},"含义",[286,100677,100678,100688],{},[245,100679,100680,100685],{},[291,100681,100682],{"align":23710},[88,100683,100684],{},"MjModel",[291,100686,100687],{"align":23710},"模型结构，来自 XML，基本不随时间变化",[245,100689,100690,100695],{},[291,100691,100692],{"align":23710},[88,100693,100694],{},"MjData",[291,100696,100697],{"align":23710},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[38,100699,100700],{},"可以先用一个类比理解：",[239,100702,100703,100713],{},[242,100704,100705],{},[245,100706,100707,100710],{},[248,100708,100709],{"align":23710},"类比",[248,100711,100712],{"align":23710},"MuJoCo 对象",[286,100714,100715,100724,100733],{},[245,100716,100717,100720],{},[291,100718,100719],{"align":23710},"游戏地图和角色配置",[291,100721,100722],{"align":23710},[88,100723,100684],{},[245,100725,100726,100729],{},[291,100727,100728],{"align":23710},"游戏运行到当前帧的状态",[291,100730,100731],{"align":23710},[88,100732,100694],{},[245,100734,100735,100738],{},[291,100736,100737],{"align":23710},"前进一帧",[291,100739,100740],{"align":23710},[88,100741,100660],{},[33,100743,100745],{"id":100744},"_2环境与依赖安装","2.环境与依赖安装",[38,100747,100748],{},"Fedora 44 系统依赖:",[83,100750,100752],{"className":23796,"code":100751,"language":23798,"meta":10,"style":10},"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",[88,100753,100754,100766,100779,100792,100802,100812,100831],{"__ignoreMap":10},[91,100755,100756,100758,100760,100762,100764],{"class":93,"line":94},[91,100757,24551],{"class":1941},[91,100759,26290],{"class":206},[91,100761,23808],{"class":206},[91,100763,26375],{"class":150},[91,100765,24653],{"class":150},[91,100767,100768,100771,100774,100777],{"class":93,"line":11},[91,100769,100770],{"class":206},"  python3",[91,100772,100773],{"class":206}," python3-pip",[91,100775,100776],{"class":206}," python3-virtualenv",[91,100778,24653],{"class":150},[91,100780,100781,100784,100787,100790],{"class":93,"line":1157},[91,100782,100783],{"class":206},"  mesa-libGL",[91,100785,100786],{"class":206}," mesa-libGLU",[91,100788,100789],{"class":206}," mesa-dri-drivers",[91,100791,24653],{"class":150},[91,100793,100794,100797,100800],{"class":93,"line":1172},[91,100795,100796],{"class":206},"  libglvnd-glx",[91,100798,100799],{"class":206}," libglvnd-opengl",[91,100801,24653],{"class":150},[91,100803,100804,100807,100810],{"class":93,"line":1178},[91,100805,100806],{"class":206},"  glfw",[91,100808,100809],{"class":206}," glfw-devel",[91,100811,24653],{"class":150},[91,100813,100814,100817,100820,100823,100826,100829],{"class":93,"line":1192},[91,100815,100816],{"class":206},"  libX11",[91,100818,100819],{"class":206}," libXcursor",[91,100821,100822],{"class":206}," libXi",[91,100824,100825],{"class":206}," libXinerama",[91,100827,100828],{"class":206}," libXrandr",[91,100830,24653],{"class":150},[91,100832,100833,100836,100839],{"class":93,"line":1198},[91,100834,100835],{"class":206},"  gcc",[91,100837,100838],{"class":206}," gcc-c++",[91,100840,100841],{"class":206}," make\n",[38,100843,100844],{},"创建 Python 环境:",[83,100846,100848],{"className":23796,"code":100847,"language":23798,"meta":10,"style":10},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[88,100849,100850,100864,100872],{"__ignoreMap":10},[91,100851,100852,100855,100858,100861],{"class":93,"line":94},[91,100853,100854],{"class":1941},"python3",[91,100856,100857],{"class":150}," -m",[91,100859,100860],{"class":206}," venv",[91,100862,100863],{"class":206}," .venv\n",[91,100865,100866,100869],{"class":93,"line":11},[91,100867,100868],{"class":150},"source",[91,100870,100871],{"class":206}," .venv\u002Fbin\u002Factivate\n",[91,100873,100874,100876,100878,100881,100883,100886],{"class":93,"line":1157},[91,100875,30355],{"class":1941},[91,100877,100857],{"class":150},[91,100879,100880],{"class":206}," pip",[91,100882,23808],{"class":206},[91,100884,100885],{"class":150}," --upgrade",[91,100887,100888],{"class":206}," pip\n",[38,100890,100891],{},"pip 安装:",[83,100893,100895],{"className":23796,"code":100894,"language":23798,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy\n",[88,100896,100897],{"__ignoreMap":10},[91,100898,100899,100901,100903,100906],{"class":93,"line":94},[91,100900,23805],{"class":1941},[91,100902,23808],{"class":206},[91,100904,100905],{"class":206}," \"mujoco>=2.3\"",[91,100907,100908],{"class":206}," numpy\n",[38,100910,100911],{},"安装完成后，先做最小检查：",[83,100913,100915],{"className":23796,"code":100914,"language":23798,"meta":10,"style":10},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[88,100916,100917],{"__ignoreMap":10},[91,100918,100919,100921,100923],{"class":93,"line":94},[91,100920,30355],{"class":1941},[91,100922,30333],{"class":150},[91,100924,100925],{"class":206}," \"import mujoco; print(mujoco.__version__)\"\n",[38,100927,100928],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[38,100930,100931],{},"conda 安装:",[83,100933,100935],{"className":23796,"code":100934,"language":23798,"meta":10,"style":10},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[88,100936,100937,100957,100967],{"__ignoreMap":10},[91,100938,100939,100941,100943,100945,100948,100951,100954],{"class":93,"line":94},[91,100940,30305],{"class":1941},[91,100942,29151],{"class":206},[91,100944,25090],{"class":150},[91,100946,100947],{"class":206}," mujoco-study",[91,100949,100950],{"class":206}," python=",[91,100952,100953],{"class":150},"3.10",[91,100955,100956],{"class":150}," -y\n",[91,100958,100959,100961,100964],{"class":93,"line":11},[91,100960,30305],{"class":1941},[91,100962,100963],{"class":206}," activate",[91,100965,100966],{"class":206}," mujoco-study\n",[91,100968,100969,100971,100973,100975],{"class":93,"line":1157},[91,100970,23805],{"class":1941},[91,100972,23808],{"class":206},[91,100974,100905],{"class":206},[91,100976,100908],{"class":206},[38,100978,100979],{},"版本冲突说明:",[46,100981,100982,100988,100998,101007],{},[49,100983,100984,100985,28360],{},"不要安装 ",[88,100986,100987],{},"mujoco-py",[49,100989,100990,100991,100993,100994,100997],{},"如果旧项目里同时安装了 ",[88,100992,100987],{}," 和 ",[88,100995,100996],{},"mujoco","，建议新建干净虚拟环境。",[49,100999,101000,101003,101004,28360],{},[88,101001,101002],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[88,101005,101006],{},"~\u002F.mujoco\u002Fmujoco210",[49,101008,101009,101010,82514,101013,101016],{},"离屏渲染可能涉及 OpenGL 后端，",[88,101011,101012],{},"MUJOCO_GL=egl",[88,101014,101015],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[33,101018,101020],{"id":101019},"_3核心概念解释","3.核心概念解释",[38,101022,101023],{},"MuJoCo 的基本执行流程:",[83,101025,101028],{"className":101026,"code":101027,"language":5166,"meta":10},[5164],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[88,101029,101027],{"__ignoreMap":10},[38,101031,101032,101034],{},[88,101033,100684],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[38,101036,101037,101039,101040,314,101043,314,101046,314,101049,314,101052,28360],{},[88,101038,100694],{}," 存放仿真运行时状态，例如 ",[88,101041,101042],{},"data.time",[88,101044,101045],{},"data.qpos",[88,101047,101048],{},"data.qvel",[88,101050,101051],{},"data.ctrl",[88,101053,101054],{},"data.xpos",[63,101056,101058],{"id":101057},"xml-是什么","XML 是什么",[38,101060,101061],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[83,101063,101065],{"className":53042,"code":101064,"language":53044,"meta":10,"style":10},"\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",[88,101066,101067,101089,101120],{"__ignoreMap":10},[91,101068,101069,101071,101073,101075,101077,101079,101082,101084,101087],{"class":93,"line":94},[91,101070,1012],{"class":101},[91,101072,51775],{"class":51275},[91,101074,14899],{"class":1941},[91,101076,147],{"class":101},[91,101078,53466],{"class":206},[91,101080,101081],{"class":1941}," pos",[91,101083,147],{"class":101},[91,101085,101086],{"class":206},"\"0 0 1\"",[91,101088,51282],{"class":101},[91,101090,101091,101093,101096,101098,101100,101103,101105,101107,101109,101112,101114,101117],{"class":93,"line":11},[91,101092,52119],{"class":101},[91,101094,101095],{"class":51275},"geom",[91,101097,14899],{"class":1941},[91,101099,147],{"class":101},[91,101101,101102],{"class":206},"\"box_geom\"",[91,101104,53799],{"class":1941},[91,101106,147],{"class":101},[91,101108,53466],{"class":206},[91,101110,101111],{"class":1941}," size",[91,101113,147],{"class":101},[91,101115,101116],{"class":206},"\"0.1 0.1 0.1\"",[91,101118,101119],{"class":101},"\u002F>\n",[91,101121,101122,101124,101126],{"class":93,"line":1157},[91,101123,51760],{"class":101},[91,101125,51775],{"class":51275},[91,101127,51282],{"class":101},[38,101129,101130],{},"这段意思是：",[46,101132,101133,101139,101146],{},[49,101134,101135,101136,101138],{},"创建一个叫 ",[88,101137,53689],{}," 的刚体。",[49,101140,101141,101142,101145],{},"它初始放在 ",[88,101143,101144],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[49,101147,101148],{},"它里面有一个盒子形状的几何体。",[63,101150,101152],{"id":101151},"timestep-是什么","timestep 是什么",[38,101154,101155],{},"XML 里的：",[83,101157,101159],{"className":53042,"code":101158,"language":53044,"meta":10,"style":10},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[88,101160,101161],{"__ignoreMap":10},[91,101162,101163,101165,101167,101170,101172,101175,101178,101180,101183],{"class":93,"line":94},[91,101164,1012],{"class":101},[91,101166,69141],{"class":51275},[91,101168,101169],{"class":1941}," timestep",[91,101171,147],{"class":101},[91,101173,101174],{"class":206},"\"0.01\"",[91,101176,101177],{"class":1941}," gravity",[91,101179,147],{"class":101},[91,101181,101182],{"class":206},"\"0 0 -9.81\"",[91,101184,101119],{"class":101},[38,101186,101187,101188,101191,101192,101194],{},"表示每调用一次 ",[88,101189,101190],{},"mj_step","，仿真时间前进 ",[88,101193,38961],{}," 秒。循环 100 次，大约就是 1 秒：",[83,101196,101199],{"className":101197,"code":101198,"language":5166,"meta":10},[5164],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[88,101200,101198],{"__ignoreMap":10},[63,101202,101204],{"id":101203},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[38,101206,101207],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[83,101209,101212],{"className":101210,"code":101211,"language":5166,"meta":10},[5164],"x y z qw qx qy qz\n",[88,101213,101211],{"__ignoreMap":10},[38,101215,101216,101217,101220,101221,101224],{},"表示一个自由刚体的位置和姿态。其中 ",[88,101218,101219],{},"x y z"," 是位置，",[88,101222,101223],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[33,101226,101228],{"id":101227},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[38,101230,101231],{},"新建文件:",[83,101233,101235],{"className":23796,"code":101234,"language":23798,"meta":10,"style":10},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[88,101236,101237,101247,101254],{"__ignoreMap":10},[91,101238,101239,101242,101244],{"class":93,"line":94},[91,101240,101241],{"class":1941},"mkdir",[91,101243,29191],{"class":150},[91,101245,101246],{"class":206}," mujoco_tutorial\n",[91,101248,101249,101252],{"class":93,"line":11},[91,101250,101251],{"class":150},"cd",[91,101253,101246],{"class":206},[91,101255,101256,101259],{"class":93,"line":1157},[91,101257,101258],{"class":1941},"touch",[91,101260,101261],{"class":206}," ch1_first_sim.py\n",[38,101263,101264],{},"写入:",[83,101266,101268],{"className":30353,"code":101267,"language":30355,"meta":10,"style":10},"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",[88,101269,101270,101277,101281,101285,101295,101300,101305,101309,101314,101319,101323,101328,101333,101338,101343,101348,101353,101357,101361,101365,101378,101392,101402,101406,101418,101430,101442,101454,101466,101470,101487,101492,101496,101507,101518,101522,101526,101540],{"__ignoreMap":10},[91,101271,101272,101274],{"class":93,"line":94},[91,101273,30367],{"class":97},[91,101275,101276],{"class":101}," mujoco\n",[91,101278,101279],{"class":93,"line":11},[91,101280,2378],{"emptyLinePlaceholder":17},[91,101282,101283],{"class":93,"line":1157},[91,101284,2378],{"emptyLinePlaceholder":17},[91,101286,101287,101290,101292],{"class":93,"line":1172},[91,101288,101289],{"class":150},"XML",[91,101291,13543],{"class":97},[91,101293,101294],{"class":206}," \"\"\"\n",[91,101296,101297],{"class":93,"line":1178},[91,101298,101299],{"class":206},"\u003Cmujoco model=\"first_sim\">\n",[91,101301,101302],{"class":93,"line":1192},[91,101303,101304],{"class":206},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[91,101306,101307],{"class":93,"line":1198},[91,101308,2378],{"emptyLinePlaceholder":17},[91,101310,101311],{"class":93,"line":1289},[91,101312,101313],{"class":206},"  \u003Cworldbody>\n",[91,101315,101316],{"class":93,"line":1295},[91,101317,101318],{"class":206},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,101320,101321],{"class":93,"line":1307},[91,101322,2378],{"emptyLinePlaceholder":17},[91,101324,101325],{"class":93,"line":1590},[91,101326,101327],{"class":206},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[91,101329,101330],{"class":93,"line":1595},[91,101331,101332],{"class":206},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[91,101334,101335],{"class":93,"line":1601},[91,101336,101337],{"class":206},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,101339,101340],{"class":93,"line":1606},[91,101341,101342],{"class":206},"    \u003C\u002Fbody>\n",[91,101344,101345],{"class":93,"line":1620},[91,101346,101347],{"class":206},"  \u003C\u002Fworldbody>\n",[91,101349,101350],{"class":93,"line":1625},[91,101351,101352],{"class":206},"\u003C\u002Fmujoco>\n",[91,101354,101355],{"class":93,"line":1631},[91,101356,95673],{"class":206},[91,101358,101359],{"class":93,"line":1652},[91,101360,2378],{"emptyLinePlaceholder":17},[91,101362,101363],{"class":93,"line":1657},[91,101364,2378],{"emptyLinePlaceholder":17},[91,101366,101367,101369,101371,101374,101376],{"class":93,"line":1671},[91,101368,31922],{"class":97},[91,101370,1951],{"class":1941},[91,101372,101373],{"class":101},"() -> ",[91,101375,95661],{"class":150},[91,101377,3717],{"class":101},[91,101379,101380,101383,101385,101388,101390],{"class":93,"line":1676},[91,101381,101382],{"class":101},"    model ",[91,101384,147],{"class":97},[91,101386,101387],{"class":101}," mujoco.MjModel.from_xml_string(",[91,101389,101289],{"class":150},[91,101391,108],{"class":101},[91,101393,101394,101397,101399],{"class":93,"line":1705},[91,101395,101396],{"class":101},"    data ",[91,101398,147],{"class":97},[91,101400,101401],{"class":101}," mujoco.MjData(model)\n",[91,101403,101404],{"class":93,"line":1710},[91,101405,2378],{"emptyLinePlaceholder":17},[91,101407,101408,101410,101412,101415],{"class":93,"line":1727},[91,101409,31274],{"class":150},[91,101411,102],{"class":101},[91,101413,101414],{"class":206},"\"nq:\"",[91,101416,101417],{"class":101},", model.nq)\n",[91,101419,101420,101422,101424,101427],{"class":93,"line":1732},[91,101421,31274],{"class":150},[91,101423,102],{"class":101},[91,101425,101426],{"class":206},"\"nv:\"",[91,101428,101429],{"class":101},", model.nv)\n",[91,101431,101432,101434,101436,101439],{"class":93,"line":1737},[91,101433,31274],{"class":150},[91,101435,102],{"class":101},[91,101437,101438],{"class":206},"\"nu:\"",[91,101440,101441],{"class":101},", model.nu)\n",[91,101443,101444,101446,101448,101451],{"class":93,"line":1742},[91,101445,31274],{"class":150},[91,101447,102],{"class":101},[91,101449,101450],{"class":206},"\"initial time:\"",[91,101452,101453],{"class":101},", data.time)\n",[91,101455,101456,101458,101460,101463],{"class":93,"line":1756},[91,101457,31274],{"class":150},[91,101459,102],{"class":101},[91,101461,101462],{"class":206},"\"initial qpos:\"",[91,101464,101465],{"class":101},", data.qpos.copy())\n",[91,101467,101468],{"class":93,"line":1761},[91,101469,2378],{"emptyLinePlaceholder":17},[91,101471,101472,101474,101477,101479,101481,101483,101485],{"class":93,"line":2555},[91,101473,3179],{"class":97},[91,101475,101476],{"class":101}," _ ",[91,101478,26018],{"class":97},[91,101480,32418],{"class":150},[91,101482,102],{"class":101},[91,101484,413],{"class":150},[91,101486,30761],{"class":101},[91,101488,101489],{"class":93,"line":2569},[91,101490,101491],{"class":101},"        mujoco.mj_step(model, data)\n",[91,101493,101494],{"class":93,"line":2577},[91,101495,2378],{"emptyLinePlaceholder":17},[91,101497,101498,101500,101502,101505],{"class":93,"line":2582},[91,101499,31274],{"class":150},[91,101501,102],{"class":101},[91,101503,101504],{"class":206},"\"final time:\"",[91,101506,101453],{"class":101},[91,101508,101509,101511,101513,101516],{"class":93,"line":2588},[91,101510,31274],{"class":150},[91,101512,102],{"class":101},[91,101514,101515],{"class":206},"\"final qpos:\"",[91,101517,101465],{"class":101},[91,101519,101520],{"class":93,"line":2594},[91,101521,2378],{"emptyLinePlaceholder":17},[91,101523,101524],{"class":93,"line":2599},[91,101525,2378],{"emptyLinePlaceholder":17},[91,101527,101528,101530,101532,101535,101538],{"class":93,"line":7927},[91,101529,1509],{"class":97},[91,101531,31195],{"class":150},[91,101533,101534],{"class":97}," ==",[91,101536,101537],{"class":206}," \"__main__\"",[91,101539,3717],{"class":101},[91,101541,101542],{"class":93,"line":7951},[91,101543,101544],{"class":101},"    main()\n",[63,101546,101547],{"id":101547},"代码逐段解释",[38,101549,101550],{},"导入库：",[83,101552,101554],{"className":30353,"code":101553,"language":30355,"meta":10,"style":10},"import mujoco\n",[88,101555,101556],{"__ignoreMap":10},[91,101557,101558,101560],{"class":93,"line":94},[91,101559,30367],{"class":97},[91,101561,101276],{"class":101},[38,101563,101564],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[38,101566,101567],{},"定义 XML：",[83,101569,101571],{"className":30353,"code":101570,"language":30355,"meta":10,"style":10},"XML = \"\"\"\n...\n\"\"\"\n",[88,101572,101573,101581,101586],{"__ignoreMap":10},[91,101574,101575,101577,101579],{"class":93,"line":94},[91,101576,101289],{"class":150},[91,101578,13543],{"class":97},[91,101580,101294],{"class":206},[91,101582,101583],{"class":93,"line":11},[91,101584,101585],{"class":206},"...\n",[91,101587,101588],{"class":93,"line":1157},[91,101589,95673],{"class":206},[38,101591,101592,101593,101596],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[88,101594,101595],{},"freejoint"," 的方块。",[38,101598,101599],{},"编译模型：",[83,101601,101603],{"className":30353,"code":101602,"language":30355,"meta":10,"style":10},"model = mujoco.MjModel.from_xml_string(XML)\n",[88,101604,101605],{"__ignoreMap":10},[91,101606,101607,101610,101612,101614,101616],{"class":93,"line":94},[91,101608,101609],{"class":101},"model ",[91,101611,147],{"class":97},[91,101613,101387],{"class":101},[91,101615,101289],{"class":150},[91,101617,108],{"class":101},[38,101619,101620],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[38,101622,101623],{},"创建数据：",[83,101625,101627],{"className":30353,"code":101626,"language":30355,"meta":10,"style":10},"data = mujoco.MjData(model)\n",[88,101628,101629],{"__ignoreMap":10},[91,101630,101631,101634,101636],{"class":93,"line":94},[91,101632,101633],{"class":101},"data ",[91,101635,147],{"class":97},[91,101637,101401],{"class":101},[38,101639,101640,101642,101643,101645],{},[88,101641,33376],{}," 会保存仿真当前状态。刚创建时，时间是 ",[88,101644,293],{},"，方块还在初始位置。",[38,101647,101648],{},"推进仿真：",[83,101650,101652],{"className":30353,"code":101651,"language":30355,"meta":10,"style":10},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[88,101653,101654,101670],{"__ignoreMap":10},[91,101655,101656,101658,101660,101662,101664,101666,101668],{"class":93,"line":94},[91,101657,3003],{"class":97},[91,101659,101476],{"class":101},[91,101661,26018],{"class":97},[91,101663,32418],{"class":150},[91,101665,102],{"class":101},[91,101667,413],{"class":150},[91,101669,30761],{"class":101},[91,101671,101672],{"class":93,"line":11},[91,101673,101674],{"class":101},"    mujoco.mj_step(model, data)\n",[38,101676,101677,101678,101680],{},"每次 ",[88,101679,101190],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[63,101682,101683],{"id":101683},"代码逐行细讲",[38,101685,101686],{},"下面把完整代码按新手视角拆开讲。",[83,101688,101689],{"className":30353,"code":101553,"language":30355,"meta":10,"style":10},[88,101690,101691],{"__ignoreMap":10},[91,101692,101693,101695],{"class":93,"line":94},[91,101694,30367],{"class":97},[91,101696,101276],{"class":101},[38,101698,101699,101701,101702,314,101704,314,101706,28360],{},[88,101700,30367],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[88,101703,100650],{},[88,101705,100655],{},[88,101707,101708],{},"mujoco.mj_step",[83,101710,101711],{"className":30353,"code":101570,"language":30355,"meta":10,"style":10},[88,101712,101713,101721,101725],{"__ignoreMap":10},[91,101714,101715,101717,101719],{"class":93,"line":94},[91,101716,101289],{"class":150},[91,101718,13543],{"class":97},[91,101720,101294],{"class":206},[91,101722,101723],{"class":93,"line":11},[91,101724,101585],{"class":206},[91,101726,101727],{"class":93,"line":1157},[91,101728,95673],{"class":206},[38,101730,101731,101733,101734,101737],{},[88,101732,101289],{}," 是一个变量名。右边的三引号 ",[88,101735,101736],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[83,101739,101740],{"className":53042,"code":101299,"language":53044,"meta":10,"style":10},[88,101741,101742],{"__ignoreMap":10},[91,101743,101744,101746,101748,101751,101753,101756],{"class":93,"line":94},[91,101745,1012],{"class":101},[91,101747,100996],{"class":51275},[91,101749,101750],{"class":1941}," model",[91,101752,147],{"class":101},[91,101754,101755],{"class":206},"\"first_sim\"",[91,101757,51282],{"class":101},[38,101759,101760,101761,101764,101765,28360],{},"这是 XML 的根标签。",[88,101762,101763],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[88,101766,101767],{},"first_sim",[83,101769,101770],{"className":53042,"code":101158,"language":53044,"meta":10,"style":10},[88,101771,101772],{"__ignoreMap":10},[91,101773,101774,101776,101778,101780,101782,101784,101786,101788,101790],{"class":93,"line":94},[91,101775,1012],{"class":101},[91,101777,69141],{"class":51275},[91,101779,101169],{"class":1941},[91,101781,147],{"class":101},[91,101783,101174],{"class":206},[91,101785,101177],{"class":1941},[91,101787,147],{"class":101},[91,101789,101182],{"class":206},[91,101791,101119],{"class":101},[38,101793,101794,101796,101797,101800,101801,101804],{},[88,101795,69141],{}," 用来设置仿真参数。",[88,101798,101799],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[88,101802,101803],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[83,101806,101808],{"className":53042,"code":101807,"language":53044,"meta":10,"style":10},"\u003Cworldbody>\n",[88,101809,101810],{"__ignoreMap":10},[91,101811,101812,101814,101817],{"class":93,"line":94},[91,101813,1012],{"class":101},[91,101815,101816],{"class":51275},"worldbody",[91,101818,51282],{"class":101},[38,101820,101821,101823],{},[88,101822,101816],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[83,101825,101827],{"className":53042,"code":101826,"language":53044,"meta":10,"style":10},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[88,101828,101829],{"__ignoreMap":10},[91,101830,101831,101833,101835,101837,101839,101842,101844,101846,101849,101851,101853,101856,101858,101860,101863],{"class":93,"line":94},[91,101832,1012],{"class":101},[91,101834,101095],{"class":51275},[91,101836,14899],{"class":1941},[91,101838,147],{"class":101},[91,101840,101841],{"class":206},"\"floor\"",[91,101843,53799],{"class":1941},[91,101845,147],{"class":101},[91,101847,101848],{"class":206},"\"plane\"",[91,101850,101111],{"class":1941},[91,101852,147],{"class":101},[91,101854,101855],{"class":206},"\"2 2 0.1\"",[91,101857,78742],{"class":1941},[91,101859,147],{"class":101},[91,101861,101862],{"class":206},"\"0.8 0.8 0.8 1\"",[91,101864,101119],{"class":101},[38,101866,101867,101868,101870,101871,101874,101875,101878,101879,101881],{},"这行创建地面。",[88,101869,101095],{}," 是几何体。",[88,101872,101873],{},"name=\"floor\""," 是名字。",[88,101876,101877],{},"type=\"plane\""," 表示平面。",[88,101880,55085],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[83,101883,101885],{"className":53042,"code":101884,"language":53044,"meta":10,"style":10},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[88,101886,101887],{"__ignoreMap":10},[91,101888,101889,101891,101893,101895,101897,101899,101901,101903,101905],{"class":93,"line":94},[91,101890,1012],{"class":101},[91,101892,51775],{"class":51275},[91,101894,14899],{"class":1941},[91,101896,147],{"class":101},[91,101898,53466],{"class":206},[91,101900,101081],{"class":1941},[91,101902,147],{"class":101},[91,101904,101086],{"class":206},[91,101906,51282],{"class":101},[38,101908,101909,101910,28360,101912,101915,101916,101918],{},"这行创建一个刚体，名字叫 ",[88,101911,53689],{},[88,101913,101914],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[88,101917,101144],{},"，也就是离地面 1 米高。",[83,101920,101922],{"className":53042,"code":101921,"language":53044,"meta":10,"style":10},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[88,101923,101924],{"__ignoreMap":10},[91,101925,101926,101928,101930,101932,101934,101937],{"class":93,"line":94},[91,101927,1012],{"class":101},[91,101929,101595],{"class":51275},[91,101931,14899],{"class":1941},[91,101933,147],{"class":101},[91,101935,101936],{"class":206},"\"box_free\"",[91,101938,101119],{"class":101},[38,101940,101941,101942,101944],{},"这行很重要。",[88,101943,101595],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[83,101946,101948],{"className":53042,"code":101947,"language":53044,"meta":10,"style":10},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[88,101949,101950],{"__ignoreMap":10},[91,101951,101952,101954,101956,101958,101960,101962,101964,101966,101968,101970,101972,101974,101977,101979,101981,101983,101985,101988],{"class":93,"line":94},[91,101953,1012],{"class":101},[91,101955,101095],{"class":51275},[91,101957,14899],{"class":1941},[91,101959,147],{"class":101},[91,101961,101102],{"class":206},[91,101963,53799],{"class":1941},[91,101965,147],{"class":101},[91,101967,53466],{"class":206},[91,101969,101111],{"class":1941},[91,101971,147],{"class":101},[91,101973,101116],{"class":206},[91,101975,101976],{"class":1941}," mass",[91,101978,147],{"class":101},[91,101980,3656],{"class":206},[91,101982,78742],{"class":1941},[91,101984,147],{"class":101},[91,101986,101987],{"class":206},"\"1 0 0 1\"",[91,101989,101119],{"class":101},[38,101991,101992,101993,101996,101997,102000,102001,102004,102005,102008],{},"这行给 box body 添加一个盒子形状。",[88,101994,101995],{},"type=\"box\""," 表示形状是盒子。",[88,101998,101999],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[88,102002,102003],{},"mass=\"1\""," 表示质量是 1。",[88,102006,102007],{},"rgba=\"1 0 0 1\""," 表示红色。",[83,102010,102012],{"className":30353,"code":102011,"language":30355,"meta":10,"style":10},"def main() -> None:\n",[88,102013,102014],{"__ignoreMap":10},[91,102015,102016,102018,102020,102022,102024],{"class":93,"line":94},[91,102017,31922],{"class":97},[91,102019,1951],{"class":1941},[91,102021,101373],{"class":101},[91,102023,95661],{"class":150},[91,102025,3717],{"class":101},[38,102027,102028,102030,102031,102034,102035,102038],{},[88,102029,31922],{}," 用来定义函数。这里定义了一个叫 ",[88,102032,102033],{},"main"," 的函数。",[88,102036,102037],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[83,102040,102041],{"className":30353,"code":101602,"language":30355,"meta":10,"style":10},[88,102042,102043],{"__ignoreMap":10},[91,102044,102045,102047,102049,102051,102053],{"class":93,"line":94},[91,102046,101609],{"class":101},[91,102048,147],{"class":97},[91,102050,101387],{"class":101},[91,102052,101289],{"class":150},[91,102054,108],{"class":101},[38,102056,102057,102058,102061],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[88,102059,102060],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[83,102063,102064],{"className":30353,"code":101626,"language":30355,"meta":10,"style":10},[88,102065,102066],{"__ignoreMap":10},[91,102067,102068,102070,102072],{"class":93,"line":94},[91,102069,101633],{"class":101},[91,102071,147],{"class":97},[91,102073,101401],{"class":101},[38,102075,102076,102077,102079,102080,102082],{},"这行创建仿真数据。",[88,102078,33376],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[88,102081,33376],{}," 都会变化。",[83,102084,102086],{"className":30353,"code":102085,"language":30355,"meta":10,"style":10},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[88,102087,102088,102098,102108],{"__ignoreMap":10},[91,102089,102090,102092,102094,102096],{"class":93,"line":94},[91,102091,30390],{"class":150},[91,102093,102],{"class":101},[91,102095,101414],{"class":206},[91,102097,101417],{"class":101},[91,102099,102100,102102,102104,102106],{"class":93,"line":11},[91,102101,30390],{"class":150},[91,102103,102],{"class":101},[91,102105,101426],{"class":206},[91,102107,101429],{"class":101},[91,102109,102110,102112,102114,102116],{"class":93,"line":1157},[91,102111,30390],{"class":150},[91,102113,102],{"class":101},[91,102115,101438],{"class":206},[91,102117,101441],{"class":101},[38,102119,102120,102122,102123,102126,102127,102130,102131,102134,102135,102138],{},[88,102121,30390],{}," 用来输出信息。",[88,102124,102125],{},"model.nq"," 是位置变量数量，",[88,102128,102129],{},"model.nv"," 是速度变量数量，",[88,102132,102133],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[88,102136,102137],{},"nu"," 是 0。",[83,102140,102142],{"className":30353,"code":102141,"language":30355,"meta":10,"style":10},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[88,102143,102144,102154],{"__ignoreMap":10},[91,102145,102146,102148,102150,102152],{"class":93,"line":94},[91,102147,30390],{"class":150},[91,102149,102],{"class":101},[91,102151,101450],{"class":206},[91,102153,101453],{"class":101},[91,102155,102156,102158,102160,102162],{"class":93,"line":11},[91,102157,30390],{"class":150},[91,102159,102],{"class":101},[91,102161,101462],{"class":206},[91,102163,101465],{"class":101},[38,102165,102166,102167,102169,102170,102172,102173,102176],{},"这里打印初始时间和初始位置。",[88,102168,101042],{}," 一开始是 0。",[88,102171,101045],{}," 是位置数组。",[88,102174,102175],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[83,102178,102179],{"className":30353,"code":101651,"language":30355,"meta":10,"style":10},[88,102180,102181,102197],{"__ignoreMap":10},[91,102182,102183,102185,102187,102189,102191,102193,102195],{"class":93,"line":94},[91,102184,3003],{"class":97},[91,102186,101476],{"class":101},[91,102188,26018],{"class":97},[91,102190,32418],{"class":150},[91,102192,102],{"class":101},[91,102194,413],{"class":150},[91,102196,30761],{"class":101},[91,102198,102199],{"class":93,"line":11},[91,102200,101674],{"class":101},[38,102202,102203,102205,102206,102209,102210,102212,102213,102215],{},[88,102204,3003],{}," 是循环。",[88,102207,102208],{},"range(100)"," 表示循环 100 次。",[88,102211,1094],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[88,102214,101190],{},"，仿真就前进一步。",[83,102217,102219],{"className":30353,"code":102218,"language":30355,"meta":10,"style":10},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[88,102220,102221,102231],{"__ignoreMap":10},[91,102222,102223,102225,102227,102229],{"class":93,"line":94},[91,102224,30390],{"class":150},[91,102226,102],{"class":101},[91,102228,101504],{"class":206},[91,102230,101453],{"class":101},[91,102232,102233,102235,102237,102239],{"class":93,"line":11},[91,102234,30390],{"class":150},[91,102236,102],{"class":101},[91,102238,101515],{"class":206},[91,102240,101465],{"class":101},[38,102242,102243],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[83,102245,102247],{"className":30353,"code":102246,"language":30355,"meta":10,"style":10},"if __name__ == \"__main__\":\n    main()\n",[88,102248,102249,102261],{"__ignoreMap":10},[91,102250,102251,102253,102255,102257,102259],{"class":93,"line":94},[91,102252,1509],{"class":97},[91,102254,31195],{"class":150},[91,102256,101534],{"class":97},[91,102258,101537],{"class":206},[91,102260,3717],{"class":101},[91,102262,102263],{"class":93,"line":11},[91,102264,101544],{"class":101},[38,102266,102267,102268,102271,102272,28360],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[88,102269,102270],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[88,102273,102270],{},[38,102275,102276],{},"运行:",[83,102278,102280],{"className":23796,"code":102279,"language":23798,"meta":10,"style":10},"python ch1_first_sim.py\n",[88,102281,102282],{"__ignoreMap":10},[91,102283,102284,102286],{"class":93,"line":94},[91,102285,30355],{"class":1941},[91,102287,101261],{"class":206},[33,102289,102291],{"id":102290},"_5运行结果说明","5.运行结果说明",[38,102293,102294],{},"你应该看到类似输出:",[83,102296,102299],{"className":102297,"code":102298,"language":5166,"meta":10},[5164],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[88,102300,102298],{"__ignoreMap":10},[38,102302,102303,102305,102306,102309,102310,28360],{},[88,102304,101595],{}," 有 7 个位置变量: ",[88,102307,102308],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[88,102311,102312],{},"vx vy vz wx wy wz",[38,102314,102315,102316,102319],{},"你还会看到 ",[88,102317,102318],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[33,102321,102323],{"id":102322},"_6验证步骤","6.验证步骤",[38,102325,102326],{},"确认版本:",[83,102328,102329],{"className":23796,"code":100914,"language":23798,"meta":10,"style":10},[88,102330,102331],{"__ignoreMap":10},[91,102332,102333,102335,102337],{"class":93,"line":94},[91,102334,30355],{"class":1941},[91,102336,30333],{"class":150},[91,102338,100925],{"class":206},[38,102340,102341],{},"确认导入的是官方 bindings:",[83,102343,102345],{"className":23796,"code":102344,"language":23798,"meta":10,"style":10},"python -c \"import mujoco; print(mujoco)\"\n",[88,102346,102347],{"__ignoreMap":10},[91,102348,102349,102351,102353],{"class":93,"line":94},[91,102350,30355],{"class":1941},[91,102352,30333],{"class":150},[91,102354,102355],{"class":206}," \"import mujoco; print(mujoco)\"\n",[38,102357,102358],{},"运行程序:",[83,102360,102361],{"className":23796,"code":102279,"language":23798,"meta":10,"style":10},[88,102362,102363],{"__ignoreMap":10},[91,102364,102365,102367],{"class":93,"line":94},[91,102366,30355],{"class":1941},[91,102368,101261],{"class":206},[38,102370,102371,102372,102375,102376,28360],{},"检查 ",[88,102373,102374],{},"final time"," 是否约等于 ",[88,102377,102378],{},"1.0",[38,102380,102381],{},"再做几个小实验：",[46,102383,102384,102394,102402,102415],{},[49,102385,102386,102387,102389,102390,102393],{},"把 ",[88,102388,101914],{}," 改成 ",[88,102391,102392],{},"pos=\"0 0 2\"","，观察初始高度变化。",[49,102395,102386,102396,102389,102398,102401],{},[88,102397,101803],{},[88,102399,102400],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[49,102403,102386,102404,102389,102406,102409,102410,102412,102413,28360],{},[88,102405,101799],{},[88,102407,102408],{},"timestep=\"0.005\"","，观察 100 步后的 ",[88,102411,102374],{}," 是否变成约 ",[88,102414,35304],{},[49,102416,102417,102418,102421],{},"删除 ",[88,102419,102420],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[38,102423,102424],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[33,102426,102428],{"id":102427},"_7常见错误与解决方案","7.常见错误与解决方案",[63,102430,102432],{"id":102431},"modulenotfounderror-no-module-named-mujoco",[88,102433,102434],{},"ModuleNotFoundError: No module named 'mujoco'",[38,102436,102437],{},"解决:",[83,102439,102441],{"className":23796,"code":102440,"language":23798,"meta":10,"style":10},"pip install \"mujoco>=2.3\"\n",[88,102442,102443],{"__ignoreMap":10},[91,102444,102445,102447,102449],{"class":93,"line":94},[91,102446,23805],{"class":1941},[91,102448,23808],{"class":206},[91,102450,102451],{"class":206}," \"mujoco>=2.3\"\n",[63,102453,102455],{"id":102454},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[38,102457,102458],{},"先安装系统依赖:",[83,102460,102462],{"className":23796,"code":102461,"language":23798,"meta":10,"style":10},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[88,102463,102464],{"__ignoreMap":10},[91,102465,102466,102468,102470,102472,102474,102477,102479,102482,102484,102487,102489],{"class":93,"line":94},[91,102467,24551],{"class":1941},[91,102469,26290],{"class":206},[91,102471,23808],{"class":206},[91,102473,26375],{"class":150},[91,102475,102476],{"class":206}," mesa-libGL",[91,102478,100789],{"class":206},[91,102480,102481],{"class":206}," glfw",[91,102483,100809],{"class":206},[91,102485,102486],{"class":206}," libX11",[91,102488,100822],{"class":206},[91,102490,102491],{"class":206}," libXrandr\n",[63,102493,102495],{"id":102494},"xml-解析失败","XML 解析失败",[38,102497,102498],{},"检查:",[46,102500,102501,102504,102507,102513],{},[49,102502,102503],{},"标签是否闭合",[49,102505,102506],{},"属性是否带引号",[49,102508,102509,102510],{},"根节点是否是 ",[88,102511,102512],{},"\u003Cmujoco>",[49,102514,102515,102517,102518,102521],{},[88,102516,51775],{}," 是否放在 ",[88,102519,102520],{},"\u003Cworldbody>"," 内部",[63,102523,102525,102527,102528],{"id":102524},"final-time-不是严格等于-10",[88,102526,102374],{}," 不是严格等于 ",[88,102529,102378],{},[38,102531,102532],{},"这通常不是错误。浮点数计算可能得到：",[83,102534,102537],{"className":102535,"code":102536,"language":5166,"meta":10},[5164],"1.0000000000000007\n",[88,102538,102536],{"__ignoreMap":10},[38,102540,102541,102542,102544],{},"只要接近 ",[88,102543,102378],{}," 就正常。",[63,102546,102547],{"id":102547},"方块没有掉下来",[38,102549,102550],{},"检查：",[46,102552,102553,102559,102565,102570],{},[49,102554,102555,102556],{},"方块 body 里是否有 ",[88,102557,102558],{},"\u003Cfreejoint\u002F>",[49,102560,102561,102562],{},"重力是否是 ",[88,102563,102564],{},"0 0 -9.81",[49,102566,102567,102568],{},"是否真的调用了 ",[88,102569,100660],{},[49,102571,102572,102573,102575,102576],{},"你看的是否是 ",[88,102574,102318],{},"，不是 ",[88,102577,102578],{},"initial qpos",[33,102580,102582],{"id":102581},"_8本章小结","8.本章小结",[38,102584,102585],{},"本章你已经完成了 MuJoCo 的最小闭环：",[83,102587,102590],{"className":102588,"code":102589,"language":5166,"meta":10},[5164],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[88,102591,102589],{"__ignoreMap":10},[38,102593,102594],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5105,102596,102597],{},"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":10,"searchDepth":11,"depth":11,"links":102599},[102600,102601,102602,102607,102611,102612,102613,102621],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":102603},[102604,102605,102606],{"id":101057,"depth":1157,"text":101058},{"id":101151,"depth":1157,"text":101152},{"id":101203,"depth":1157,"text":101204},{"id":101227,"depth":11,"text":101228,"children":102608},[102609,102610],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":102614},[102615,102616,102617,102618,102620],{"id":102431,"depth":1157,"text":102434},{"id":102454,"depth":1157,"text":102455},{"id":102494,"depth":1157,"text":102495},{"id":102524,"depth":1157,"text":102619},"final time 不是严格等于 1.0",{"id":102547,"depth":1157,"text":102547},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100613,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102628,"title":102629,"body":102630,"description":10,"extension":14,"meta":104286,"navigation":17,"path":104287,"seo":104288,"stem":104289,"__hash__":104290},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102631,"toc":104262},[102632,102635,102637,102640,102643,102660,102755,102758,102764,102766,102768,102792,102795,102809,102812,102853,102855,102868,102870,102873,102921,102933,102936,102939,102945,102958,103025,103028,103047,103050,103053,103059,103061,103070,103073,103077,103086,103168,103177,103181,103187,103201,103211,103213,103543,103546,103558,103560,103571,103573,103576,103594,103597,103600,103618,103629,103632,103647,103657,103659,103680,103697,103717,103723,103763,103779,103795,103801,103804,103828,103844,103849,103879,103896,103921,103924,103939,103948,103963,103972,103987,103994,103996,104006,104019,104026,104029,104068,104075,104077,104129,104131,104137,104140,104147,104154,104157,104159,104177,104180,104183,104217,104229,104231,104234,104256,104259],[29,102633,102629],{"id":102634},"_2xml-与-mjcf-物理建模基础",[33,102636,100622],{"id":100621},[38,102638,102639],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[38,102641,102642],{},"本章结束后，你应该能看懂一个简单模型里：",[46,102644,102645,102648,102651,102654,102657],{},[49,102646,102647],{},"地面在哪里。",[49,102649,102650],{},"物体初始位置在哪里。",[49,102652,102653],{},"几何体是什么形状。",[49,102655,102656],{},"哪些 body 可以自由运动。",[49,102658,102659],{},"如何用名字在 Python 里找到 XML 中的对象。",[239,102661,102662,102672],{},[242,102663,102664],{},[245,102665,102666,102669],{},[248,102667,102668],{"align":23710},"标签",[248,102670,102671],{"align":23710},"作用",[286,102673,102674,102683,102693,102702,102712,102722,102735,102745],{},[245,102675,102676,102680],{},[291,102677,102678],{"align":23710},[88,102679,102512],{},[291,102681,102682],{"align":23710},"根节点",[245,102684,102685,102690],{},[291,102686,102687],{"align":23710},[88,102688,102689],{},"\u003Coption>",[291,102691,102692],{"align":23710},"仿真参数",[245,102694,102695,102699],{},[291,102696,102697],{"align":23710},[88,102698,102520],{},[291,102700,102701],{"align":23710},"世界中的物体",[245,102703,102704,102709],{},[291,102705,102706],{"align":23710},[88,102707,102708],{},"\u003Cbody>",[291,102710,102711],{"align":23710},"刚体",[245,102713,102714,102719],{},[291,102715,102716],{"align":23710},[88,102717,102718],{},"\u003Cgeom>",[291,102720,102721],{"align":23710},"几何体、碰撞体、可视体",[245,102723,102724,102732],{},[291,102725,102726,24953,102729],{"align":23710},[88,102727,102728],{},"\u003Cjoint>",[88,102730,102731],{},"\u003Cfreejoint>",[291,102733,102734],{"align":23710},"关节",[245,102736,102737,102742],{},[291,102738,102739],{"align":23710},[88,102740,102741],{},"\u003Csite>",[291,102743,102744],{"align":23710},"标记点",[245,102746,102747,102752],{},[291,102748,102749],{"align":23710},[88,102750,102751],{},"\u003Cactuator>",[291,102753,102754],{"align":23710},"控制器",[38,102756,102757],{},"初学时可以先记住：",[83,102759,102762],{"className":102760,"code":102761,"language":5166,"meta":10},[5164],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[88,102763,102761],{"__ignoreMap":10},[33,102765,100745],{"id":100744},[38,102767,100748],{},[83,102769,102771],{"className":23796,"code":102770,"language":23798,"meta":10,"style":10},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[88,102772,102773],{"__ignoreMap":10},[91,102774,102775,102777,102779,102781,102783,102785,102787,102789],{"class":93,"line":94},[91,102776,24551],{"class":1941},[91,102778,26290],{"class":206},[91,102780,23808],{"class":206},[91,102782,26375],{"class":150},[91,102784,102476],{"class":206},[91,102786,100789],{"class":206},[91,102788,102481],{"class":206},[91,102790,102791],{"class":206}," glfw-devel\n",[38,102793,102794],{},"pip:",[83,102796,102797],{"className":23796,"code":100894,"language":23798,"meta":10,"style":10},[88,102798,102799],{"__ignoreMap":10},[91,102800,102801,102803,102805,102807],{"class":93,"line":94},[91,102802,23805],{"class":1941},[91,102804,23808],{"class":206},[91,102806,100905],{"class":206},[91,102808,100908],{"class":206},[38,102810,102811],{},"conda:",[83,102813,102815],{"className":23796,"code":102814,"language":23798,"meta":10,"style":10},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[88,102816,102817,102834,102843],{"__ignoreMap":10},[91,102818,102819,102821,102823,102825,102828,102830,102832],{"class":93,"line":94},[91,102820,30305],{"class":1941},[91,102822,29151],{"class":206},[91,102824,25090],{"class":150},[91,102826,102827],{"class":206}," mujoco-xml",[91,102829,100950],{"class":206},[91,102831,100953],{"class":150},[91,102833,100956],{"class":150},[91,102835,102836,102838,102840],{"class":93,"line":11},[91,102837,30305],{"class":1941},[91,102839,100963],{"class":206},[91,102841,102842],{"class":206}," mujoco-xml\n",[91,102844,102845,102847,102849,102851],{"class":93,"line":1157},[91,102846,23805],{"class":1941},[91,102848,23808],{"class":206},[91,102850,100905],{"class":206},[91,102852,100908],{"class":206},[38,102854,100979],{},[46,102856,102857,102860,102865],{},[49,102858,102859],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[49,102861,102862,102863,28360],{},"本章使用基础标签，适用于 ",[88,102864,101002],{},[49,102866,102867],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[33,102869,101020],{"id":101019},[38,102871,102872],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[83,102874,102876],{"className":53042,"code":102875,"language":53044,"meta":10,"style":10},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[88,102877,102878,102892,102900,102905,102913],{"__ignoreMap":10},[91,102879,102880,102882,102884,102886,102888,102890],{"class":93,"line":94},[91,102881,1012],{"class":101},[91,102883,100996],{"class":51275},[91,102885,101750],{"class":1941},[91,102887,147],{"class":101},[91,102889,62654],{"class":206},[91,102891,51282],{"class":101},[91,102893,102894,102896,102898],{"class":93,"line":11},[91,102895,52119],{"class":101},[91,102897,101816],{"class":51275},[91,102899,51282],{"class":101},[91,102901,102902],{"class":93,"line":1157},[91,102903,102904],{"class":101},"    ...\n",[91,102906,102907,102909,102911],{"class":93,"line":1172},[91,102908,52392],{"class":101},[91,102910,101816],{"class":51275},[91,102912,51282],{"class":101},[91,102914,102915,102917,102919],{"class":93,"line":1178},[91,102916,51760],{"class":101},[91,102918,100996],{"class":51275},[91,102920,51282],{"class":101},[38,102922,102923,102925,102926,102928,102929,102932],{},[88,102924,51775],{}," 表示刚体。",[88,102927,101095],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[88,102930,102931],{},"joint"," 表示刚体相对父刚体如何运动。",[63,102934,102935],{"id":102935},"层级结构非常重要",[38,102937,102938],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[83,102940,102943],{"className":102941,"code":102942,"language":5166,"meta":10},[5164],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[88,102944,102942],{"__ignoreMap":10},[38,102946,102947,100993,102950,102953,102954,102957],{},[88,102948,102949],{},"red_box_geom",[88,102951,102952],{},"box_center"," 都属于 ",[88,102955,102956],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[83,102959,102961],{"className":53042,"code":102960,"language":53044,"meta":10,"style":10},"\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",[88,102962,102963,102983,102997,103017],{"__ignoreMap":10},[91,102964,102965,102967,102969,102971,102973,102975,102977,102979,102981],{"class":93,"line":94},[91,102966,1012],{"class":101},[91,102968,51775],{"class":51275},[91,102970,14899],{"class":1941},[91,102972,147],{"class":101},[91,102974,53466],{"class":206},[91,102976,101081],{"class":1941},[91,102978,147],{"class":101},[91,102980,101086],{"class":206},[91,102982,51282],{"class":101},[91,102984,102985,102987,102989,102991,102993,102995],{"class":93,"line":11},[91,102986,52119],{"class":101},[91,102988,101595],{"class":51275},[91,102990,14899],{"class":1941},[91,102992,147],{"class":101},[91,102994,101936],{"class":206},[91,102996,101119],{"class":101},[91,102998,102999,103001,103003,103005,103007,103009,103011,103013,103015],{"class":93,"line":1157},[91,103000,52119],{"class":101},[91,103002,101095],{"class":51275},[91,103004,53799],{"class":1941},[91,103006,147],{"class":101},[91,103008,53466],{"class":206},[91,103010,101111],{"class":1941},[91,103012,147],{"class":101},[91,103014,101116],{"class":206},[91,103016,101119],{"class":101},[91,103018,103019,103021,103023],{"class":93,"line":1172},[91,103020,51760],{"class":101},[91,103022,51775],{"class":51275},[91,103024,51282],{"class":101},[38,103026,103027],{},"含义:",[46,103029,103030,103036,103041,103044],{},[49,103031,103032,103033,103035],{},"创建名为 ",[88,103034,53689],{}," 的刚体",[49,103037,103038,103039],{},"初始位置在世界坐标 ",[88,103040,101144],{},[49,103042,103043],{},"它有一个自由关节",[49,103045,103046],{},"它有一个盒子几何体",[63,103048,103049],{"id":103049},"坐标怎么理解",[38,103051,103052],{},"MuJoCo 默认使用三维坐标：",[83,103054,103057],{"className":103055,"code":103056,"language":5166,"meta":10},[5164],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[88,103058,103056],{"__ignoreMap":10},[38,103060,14612],{},[83,103062,103064],{"className":53042,"code":103063,"language":53044,"meta":10,"style":10},"pos=\"0 0 1\"\n",[88,103065,103066],{"__ignoreMap":10},[91,103067,103068],{"class":93,"line":94},[91,103069,103063],{"class":101},[38,103071,103072],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[63,103074,103076],{"id":103075},"geom-的-size-怎么理解","geom 的 size 怎么理解",[38,103078,103079,103080,82505,103083,103085],{},"不同 ",[88,103081,103082],{},"type",[88,103084,31471],{}," 含义不同：",[239,103087,103088,103103],{},[242,103089,103090],{},[245,103091,103092,103096,103101],{},[248,103093,103094],{"align":23710},[88,103095,103082],{},[248,103097,103098,103100],{"align":23710},[88,103099,31471],{}," 示例",[248,103102,100675],{"align":23710},[286,103104,103105,103119,103134,103153],{},[245,103106,103107,103111,103116],{},[291,103108,103109],{"align":23710},[88,103110,53689],{},[291,103112,103113],{"align":23710},[88,103114,103115],{},"size=\"0.1 0.2 0.3\"",[291,103117,103118],{"align":23710},"x\u002Fy\u002Fz 半边长，不是完整长度",[245,103120,103121,103126,103131],{},[291,103122,103123],{"align":23710},[88,103124,103125],{},"sphere",[291,103127,103128],{"align":23710},[88,103129,103130],{},"size=\"0.1\"",[291,103132,103133],{"align":23710},"球半径",[245,103135,103136,103141,103146],{},[291,103137,103138],{"align":23710},[88,103139,103140],{},"capsule",[291,103142,103143],{"align":23710},[88,103144,103145],{},"size=\"0.03\"",[291,103147,103148,103149,103152],{"align":23710},"胶囊半径，长度常用 ",[88,103150,103151],{},"fromto"," 指定",[245,103154,103155,103160,103165],{},[291,103156,103157],{"align":23710},[88,103158,103159],{},"plane",[291,103161,103162],{"align":23710},[88,103163,103164],{},"size=\"3 3 0.1\"",[291,103166,103167],{"align":23710},"可视平面大小，通常当地面",[38,103169,103170,103171,103173,103174,103176],{},"最容易踩坑的是 box：",[88,103172,101999],{}," 表示边长大约是 ",[88,103175,32012],{},"，因为 MuJoCo 用的是半边长。",[63,103178,103180],{"id":103179},"site-是什么","site 是什么",[38,103182,103183,103186],{},[88,103184,103185],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[46,103188,103189,103192,103195,103198],{},[49,103190,103191],{},"标记机械臂末端。",[49,103193,103194],{},"标记目标位置。",[49,103196,103197],{},"放传感器或相机参考点。",[49,103199,103200],{},"在 Python 中读取某个关键点的世界坐标。",[38,103202,103203,103204,100993,103207,103210],{},"在后面的 Reacher 任务中，",[88,103205,103206],{},"tip",[88,103208,103209],{},"target"," 就会用 site 表示。",[33,103212,101228],{"id":101227},[83,103214,103216],{"className":30353,"code":103215,"language":30355,"meta":10,"style":10},"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",[88,103217,103218,103224,103234,103238,103242,103250,103255,103259,103263,103267,103272,103276,103281,103286,103291,103296,103300,103304,103308,103312,103316,103320,103332,103344,103352,103356,103371,103386,103390,103403,103418,103431,103444,103448,103464,103468,103472,103483,103495,103507,103519,103523,103527,103539],{"__ignoreMap":10},[91,103219,103220,103222],{"class":93,"line":94},[91,103221,30367],{"class":97},[91,103223,101276],{"class":101},[91,103225,103226,103228,103230,103232],{"class":93,"line":11},[91,103227,30367],{"class":97},[91,103229,31355],{"class":101},[91,103231,31358],{"class":97},[91,103233,31361],{"class":101},[91,103235,103236],{"class":93,"line":1157},[91,103237,2378],{"emptyLinePlaceholder":17},[91,103239,103240],{"class":93,"line":1172},[91,103241,2378],{"emptyLinePlaceholder":17},[91,103243,103244,103246,103248],{"class":93,"line":1178},[91,103245,101289],{"class":150},[91,103247,13543],{"class":97},[91,103249,101294],{"class":206},[91,103251,103252],{"class":93,"line":1192},[91,103253,103254],{"class":206},"\u003Cmujoco model=\"xml_basic\">\n",[91,103256,103257],{"class":93,"line":1198},[91,103258,101304],{"class":206},[91,103260,103261],{"class":93,"line":1289},[91,103262,2378],{"emptyLinePlaceholder":17},[91,103264,103265],{"class":93,"line":1295},[91,103266,101313],{"class":206},[91,103268,103269],{"class":93,"line":1307},[91,103270,103271],{"class":206},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[91,103273,103274],{"class":93,"line":1590},[91,103275,2378],{"emptyLinePlaceholder":17},[91,103277,103278],{"class":93,"line":1595},[91,103279,103280],{"class":206},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[91,103282,103283],{"class":93,"line":1601},[91,103284,103285],{"class":206},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[91,103287,103288],{"class":93,"line":1606},[91,103289,103290],{"class":206},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,103292,103293],{"class":93,"line":1620},[91,103294,103295],{"class":206},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[91,103297,103298],{"class":93,"line":1625},[91,103299,101342],{"class":206},[91,103301,103302],{"class":93,"line":1631},[91,103303,101347],{"class":206},[91,103305,103306],{"class":93,"line":1652},[91,103307,101352],{"class":206},[91,103309,103310],{"class":93,"line":1657},[91,103311,95673],{"class":206},[91,103313,103314],{"class":93,"line":1671},[91,103315,2378],{"emptyLinePlaceholder":17},[91,103317,103318],{"class":93,"line":1676},[91,103319,2378],{"emptyLinePlaceholder":17},[91,103321,103322,103324,103326,103328,103330],{"class":93,"line":1705},[91,103323,31922],{"class":97},[91,103325,1951],{"class":1941},[91,103327,101373],{"class":101},[91,103329,95661],{"class":150},[91,103331,3717],{"class":101},[91,103333,103334,103336,103338,103340,103342],{"class":93,"line":1710},[91,103335,101382],{"class":101},[91,103337,147],{"class":97},[91,103339,101387],{"class":101},[91,103341,101289],{"class":150},[91,103343,108],{"class":101},[91,103345,103346,103348,103350],{"class":93,"line":1727},[91,103347,101396],{"class":101},[91,103349,147],{"class":97},[91,103351,101401],{"class":101},[91,103353,103354],{"class":93,"line":1732},[91,103355,2378],{"emptyLinePlaceholder":17},[91,103357,103358,103361,103363,103366,103369],{"class":93,"line":1737},[91,103359,103360],{"class":101},"    box_body_id ",[91,103362,147],{"class":97},[91,103364,103365],{"class":101}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[91,103367,103368],{"class":206},"\"red_box\"",[91,103370,108],{"class":101},[91,103372,103373,103376,103378,103381,103384],{"class":93,"line":1742},[91,103374,103375],{"class":101},"    site_id ",[91,103377,147],{"class":97},[91,103379,103380],{"class":101}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[91,103382,103383],{"class":206},"\"box_center\"",[91,103385,108],{"class":101},[91,103387,103388],{"class":93,"line":1756},[91,103389,2378],{"emptyLinePlaceholder":17},[91,103391,103392,103394,103397,103399,103401],{"class":93,"line":1761},[91,103393,3079],{"class":97},[91,103395,103396],{"class":101}," box_body_id ",[91,103398,1012],{"class":97},[91,103400,4071],{"class":150},[91,103402,3717],{"class":101},[91,103404,103405,103408,103411,103413,103416],{"class":93,"line":2555},[91,103406,103407],{"class":97},"        raise",[91,103409,103410],{"class":150}," RuntimeError",[91,103412,102],{"class":101},[91,103414,103415],{"class":206},"\"body red_box not found\"",[91,103417,108],{"class":101},[91,103419,103420,103422,103425,103427,103429],{"class":93,"line":2569},[91,103421,3079],{"class":97},[91,103423,103424],{"class":101}," site_id ",[91,103426,1012],{"class":97},[91,103428,4071],{"class":150},[91,103430,3717],{"class":101},[91,103432,103433,103435,103437,103439,103442],{"class":93,"line":2577},[91,103434,103407],{"class":97},[91,103436,103410],{"class":150},[91,103438,102],{"class":101},[91,103440,103441],{"class":206},"\"site box_center not found\"",[91,103443,108],{"class":101},[91,103445,103446],{"class":93,"line":2582},[91,103447,2378],{"emptyLinePlaceholder":17},[91,103449,103450,103452,103454,103456,103458,103460,103462],{"class":93,"line":2588},[91,103451,3179],{"class":97},[91,103453,101476],{"class":101},[91,103455,26018],{"class":97},[91,103457,32418],{"class":150},[91,103459,102],{"class":101},[91,103461,1700],{"class":150},[91,103463,30761],{"class":101},[91,103465,103466],{"class":93,"line":2594},[91,103467,101491],{"class":101},[91,103469,103470],{"class":93,"line":2599},[91,103471,2378],{"emptyLinePlaceholder":17},[91,103473,103474,103476,103478,103481],{"class":93,"line":7927},[91,103475,31274],{"class":150},[91,103477,102],{"class":101},[91,103479,103480],{"class":206},"\"simulation time:\"",[91,103482,101453],{"class":101},[91,103484,103485,103487,103489,103492],{"class":93,"line":7951},[91,103486,31274],{"class":150},[91,103488,102],{"class":101},[91,103490,103491],{"class":206},"\"box body position:\"",[91,103493,103494],{"class":101},", data.xpos[box_body_id].copy())\n",[91,103496,103497,103499,103501,103504],{"class":93,"line":7956},[91,103498,31274],{"class":150},[91,103500,102],{"class":101},[91,103502,103503],{"class":206},"\"site position:\"",[91,103505,103506],{"class":101},", data.site_xpos[site_id].copy())\n",[91,103508,103509,103511,103513,103516],{"class":93,"line":7962},[91,103510,31274],{"class":150},[91,103512,102],{"class":101},[91,103514,103515],{"class":206},"\"box qpos:\"",[91,103517,103518],{"class":101},", np.array(data.qpos))\n",[91,103520,103521],{"class":93,"line":7989},[91,103522,2378],{"emptyLinePlaceholder":17},[91,103524,103525],{"class":93,"line":7994},[91,103526,2378],{"emptyLinePlaceholder":17},[91,103528,103529,103531,103533,103535,103537],{"class":93,"line":8000},[91,103530,1509],{"class":97},[91,103532,31195],{"class":150},[91,103534,101534],{"class":97},[91,103536,101537],{"class":206},[91,103538,3717],{"class":101},[91,103540,103541],{"class":93,"line":8012},[91,103542,101544],{"class":101},[38,103544,103545],{},"保存为：",[83,103547,103549],{"className":23796,"code":103548,"language":23798,"meta":10,"style":10},"touch ch2_xml_basic.py\n",[88,103550,103551],{"__ignoreMap":10},[91,103552,103553,103555],{"class":93,"line":94},[91,103554,101258],{"class":1941},[91,103556,103557],{"class":206}," ch2_xml_basic.py\n",[38,103559,102276],{},[83,103561,103563],{"className":23796,"code":103562,"language":23798,"meta":10,"style":10},"python ch2_xml_basic.py\n",[88,103564,103565],{"__ignoreMap":10},[91,103566,103567,103569],{"class":93,"line":94},[91,103568,30355],{"class":1941},[91,103570,103557],{"class":206},[63,103572,101547],{"id":101547},[38,103574,103575],{},"用名字查找 body：",[83,103577,103579],{"className":30353,"code":103578,"language":30355,"meta":10,"style":10},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[88,103580,103581],{"__ignoreMap":10},[91,103582,103583,103586,103588,103590,103592],{"class":93,"line":94},[91,103584,103585],{"class":101},"box_body_id ",[91,103587,147],{"class":97},[91,103589,103365],{"class":101},[91,103591,103368],{"class":206},[91,103593,108],{"class":101},[38,103595,103596],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[38,103598,103599],{},"用名字查找 site：",[83,103601,103603],{"className":30353,"code":103602,"language":30355,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[88,103604,103605],{"__ignoreMap":10},[91,103606,103607,103610,103612,103614,103616],{"class":93,"line":94},[91,103608,103609],{"class":101},"site_id ",[91,103611,147],{"class":97},[91,103613,103380],{"class":101},[91,103615,103383],{"class":206},[91,103617,108],{"class":101},[38,103619,103620,103621,103624,103625,103628],{},"注意第二个参数是对象类型。查 body 就用 ",[88,103622,103623],{},"mjOBJ_BODY","，查 site 就用 ",[88,103626,103627],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[38,103630,103631],{},"读取世界坐标：",[83,103633,103635],{"className":30353,"code":103634,"language":30355,"meta":10,"style":10},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[88,103636,103637,103642],{"__ignoreMap":10},[91,103638,103639],{"class":93,"line":94},[91,103640,103641],{"class":101},"data.xpos[box_body_id]\n",[91,103643,103644],{"class":93,"line":11},[91,103645,103646],{"class":101},"data.site_xpos[site_id]\n",[38,103648,103649,103652,103653,103656],{},[88,103650,103651],{},"xpos"," 是 body 的世界坐标，",[88,103654,103655],{},"site_xpos"," 是 site 的世界坐标。",[63,103658,101683],{"id":101683},[83,103660,103662],{"className":30353,"code":103661,"language":30355,"meta":10,"style":10},"import mujoco\nimport numpy as np\n",[88,103663,103664,103670],{"__ignoreMap":10},[91,103665,103666,103668],{"class":93,"line":94},[91,103667,30367],{"class":97},[91,103669,101276],{"class":101},[91,103671,103672,103674,103676,103678],{"class":93,"line":11},[91,103673,30367],{"class":97},[91,103675,31355],{"class":101},[91,103677,31358],{"class":97},[91,103679,31361],{"class":101},[38,103681,103682,103683,103686,103687,103690,103691,314,103694,28360],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[88,103684,103685],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[88,103688,103689],{},"as np"," 是习惯写法，后面就可以写 ",[88,103692,103693],{},"np.array(...)",[88,103695,103696],{},"np.round(...)",[83,103698,103699],{"className":30353,"code":101570,"language":30355,"meta":10,"style":10},[88,103700,103701,103709,103713],{"__ignoreMap":10},[91,103702,103703,103705,103707],{"class":93,"line":94},[91,103704,101289],{"class":150},[91,103706,13543],{"class":97},[91,103708,101294],{"class":206},[91,103710,103711],{"class":93,"line":11},[91,103712,101585],{"class":206},[91,103714,103715],{"class":93,"line":1157},[91,103716,95673],{"class":206},[38,103718,103719,103720,28360],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[88,103721,103722],{},"mujoco.MjModel.from_xml_string(XML)",[83,103724,103726],{"className":53042,"code":103725,"language":53044,"meta":10,"style":10},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[88,103727,103728],{"__ignoreMap":10},[91,103729,103730,103732,103734,103736,103738,103740,103742,103744,103747,103749,103751,103754,103756,103758,103761],{"class":93,"line":94},[91,103731,1012],{"class":101},[91,103733,103185],{"class":51275},[91,103735,14899],{"class":1941},[91,103737,147],{"class":101},[91,103739,103383],{"class":206},[91,103741,101081],{"class":1941},[91,103743,147],{"class":101},[91,103745,103746],{"class":206},"\"0 0 0\"",[91,103748,101111],{"class":1941},[91,103750,147],{"class":101},[91,103752,103753],{"class":206},"\"0.03\"",[91,103755,78742],{"class":1941},[91,103757,147],{"class":101},[91,103759,103760],{"class":206},"\"0 1 0 1\"",[91,103762,101119],{"class":101},[38,103764,103765,103767,103768,103771,103772,103774,103775,103778],{},[88,103766,103185],{}," 是标记点。",[88,103769,103770],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[88,103773,103145],{}," 表示显示出来的小球大小。",[88,103776,103777],{},"rgba=\"0 1 0 1\""," 表示绿色。",[83,103780,103781],{"className":30353,"code":103578,"language":30355,"meta":10,"style":10},[88,103782,103783],{"__ignoreMap":10},[91,103784,103785,103787,103789,103791,103793],{"class":93,"line":94},[91,103786,103585],{"class":101},[91,103788,147],{"class":97},[91,103790,103365],{"class":101},[91,103792,103368],{"class":206},[91,103794,108],{"class":101},[38,103796,103797,103798,103800],{},"这行的作用是：根据名字 ",[88,103799,103368],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[38,103802,103803],{},"拆开看：",[46,103805,103806,103812,103817,103823],{},[49,103807,103808,103811],{},[88,103809,103810],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[49,103813,103814,103816],{},[88,103815,102060],{}," 是被查询的模型。",[49,103818,103819,103822],{},[88,103820,103821],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[49,103824,103825,103827],{},[88,103826,103368],{}," 是 XML 里写的名字。",[83,103829,103830],{"className":30353,"code":103602,"language":30355,"meta":10,"style":10},[88,103831,103832],{"__ignoreMap":10},[91,103833,103834,103836,103838,103840,103842],{"class":93,"line":94},[91,103835,103609],{"class":101},[91,103837,147],{"class":97},[91,103839,103380],{"class":101},[91,103841,103383],{"class":206},[91,103843,108],{"class":101},[38,103845,103846,103847,28360],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[88,103848,103383],{},[83,103850,103852],{"className":30353,"code":103851,"language":30355,"meta":10,"style":10},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[88,103853,103854,103866],{"__ignoreMap":10},[91,103855,103856,103858,103860,103862,103864],{"class":93,"line":94},[91,103857,1509],{"class":97},[91,103859,103396],{"class":101},[91,103861,1012],{"class":97},[91,103863,4071],{"class":150},[91,103865,3717],{"class":101},[91,103867,103868,103871,103873,103875,103877],{"class":93,"line":11},[91,103869,103870],{"class":97},"    raise",[91,103872,103410],{"class":150},[91,103874,102],{"class":101},[91,103876,103415],{"class":206},[91,103878,108],{"class":101},[38,103880,103881,103883,103884,103887,103888,103891,103892,103895],{},[88,103882,1509],{}," 是条件判断。",[88,103885,103886],{},"mj_name2id"," 找不到对象时会返回 ",[88,103889,103890],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[88,103893,103894],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[83,103897,103899],{"className":30353,"code":103898,"language":30355,"meta":10,"style":10},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[88,103900,103901,103917],{"__ignoreMap":10},[91,103902,103903,103905,103907,103909,103911,103913,103915],{"class":93,"line":94},[91,103904,3003],{"class":97},[91,103906,101476],{"class":101},[91,103908,26018],{"class":97},[91,103910,32418],{"class":150},[91,103912,102],{"class":101},[91,103914,1700],{"class":150},[91,103916,30761],{"class":101},[91,103918,103919],{"class":93,"line":11},[91,103920,101674],{"class":101},[38,103922,103923],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[83,103925,103927],{"className":30353,"code":103926,"language":30355,"meta":10,"style":10},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[88,103928,103929],{"__ignoreMap":10},[91,103930,103931,103933,103935,103937],{"class":93,"line":94},[91,103932,30390],{"class":150},[91,103934,102],{"class":101},[91,103936,103491],{"class":206},[91,103938,103494],{"class":101},[38,103940,103941,103943,103944,103947],{},[88,103942,101054],{}," 保存所有 body 的世界坐标。",[88,103945,103946],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[83,103949,103951],{"className":30353,"code":103950,"language":30355,"meta":10,"style":10},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[88,103952,103953],{"__ignoreMap":10},[91,103954,103955,103957,103959,103961],{"class":93,"line":94},[91,103956,30390],{"class":150},[91,103958,102],{"class":101},[91,103960,103503],{"class":206},[91,103962,103506],{"class":101},[38,103964,103965,103968,103969,103971],{},[88,103966,103967],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[88,103970,102952],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[83,103973,103975],{"className":30353,"code":103974,"language":30355,"meta":10,"style":10},"print(\"box qpos:\", np.array(data.qpos))\n",[88,103976,103977],{"__ignoreMap":10},[91,103978,103979,103981,103983,103985],{"class":93,"line":94},[91,103980,30390],{"class":150},[91,103982,102],{"class":101},[91,103984,103515],{"class":206},[91,103986,103518],{"class":101},[38,103988,103989,103990,103993],{},"这里打印广义位置数组。",[88,103991,103992],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[33,103995,102291],{"id":102290},[38,103997,103998,103999,104002,104003,28360],{},"程序会输出 ",[88,104000,104001],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[88,104004,104005],{},"qpos",[38,104007,104008,104010,104011,104014,104015,104018],{},[88,104009,103946],{}," 是 body 的世界坐标位置。",[88,104012,104013],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[88,104016,104017],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[38,104020,82197,104021,82505,104023,104025],{},[88,104022,102952],{},[88,104024,103770],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[38,104027,104028],{},"如果你把 site 改成：",[83,104030,104032],{"className":53042,"code":104031,"language":53044,"meta":10,"style":10},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[88,104033,104034],{"__ignoreMap":10},[91,104035,104036,104038,104040,104042,104044,104047,104049,104051,104054,104056,104058,104060,104062,104064,104066],{"class":93,"line":94},[91,104037,1012],{"class":101},[91,104039,103185],{"class":51275},[91,104041,14899],{"class":1941},[91,104043,147],{"class":101},[91,104045,104046],{"class":206},"\"box_top\"",[91,104048,101081],{"class":1941},[91,104050,147],{"class":101},[91,104052,104053],{"class":206},"\"0 0 0.15\"",[91,104055,101111],{"class":1941},[91,104057,147],{"class":101},[91,104059,103753],{"class":206},[91,104061,78742],{"class":1941},[91,104063,147],{"class":101},[91,104065,103760],{"class":206},[91,104067,101119],{"class":101},[38,104069,104070,104071,104074],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[88,104072,104073],{},"site position"," 就会比 body position 的 z 坐标更高。",[33,104076,102323],{"id":102322},[46,104078,104079,104088,104091,104098,104104,104115],{},[49,104080,102386,104081,104083,104084,102389,104086,28360],{},[88,104082,102956],{}," 的初始高度从 ",[88,104085,319],{},[88,104087,179],{},[49,104089,104090],{},"重新运行程序。",[49,104092,104093,104094,104097],{},"观察 ",[88,104095,104096],{},"box qpos"," 和最终位置是否变化。",[49,104099,104100,104101,104103],{},"故意把 ",[88,104102,103185],{}," 名称改错，确认程序能报错。",[49,104105,102386,104106,104108,104109,102389,104111,104114],{},[88,104107,101095],{}," 的颜色 ",[88,104110,102007],{},[88,104112,104113],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[49,104116,102386,104117,82505,104119,102389,104122,104125,104126,104128],{},[88,104118,102952],{},[88,104120,104121],{},"pos",[88,104123,104124],{},"0 0 0.2","，观察 ",[88,104127,104073],{}," 如何变化。",[33,104130,102428],{"id":102427},[63,104132,104134],{"id":104133},"xml-error-schema-violation",[88,104135,104136],{},"XML Error: Schema violation",[38,104138,104139],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[63,104141,104143,81265,104145],{"id":104142},"mj_name2id-返回-1",[88,104144,103886],{},[88,104146,103890],{},[38,104148,104149,104150,104153],{},"说明名字没有找到。检查 XML 中 ",[88,104151,104152],{},"name=\"...\"","，并确认对象类型正确。",[63,104155,104156],{"id":104156},"物体不下落",[38,104158,102498],{},[46,104160,104161,104166,104171],{},[49,104162,104163,104164],{},"body 是否有 ",[88,104165,101595],{},[49,104167,104168,104169],{},"gravity 是否为 ",[88,104170,102564],{},[49,104172,104173,104174,104176],{},"body 是否被固定在 ",[88,104175,101816],{}," 中",[63,104178,104179],{"id":104179},"坐标看起来不符合预期",[38,104181,104182],{},"先区分两种坐标：",[239,104184,104185,104194],{},[242,104186,104187],{},[245,104188,104189,104192],{},[248,104190,104191],{"align":23710},"坐标",[248,104193,100675],{"align":23710},[286,104195,104196,104206],{},[245,104197,104198,104203],{},[291,104199,104200,104201],{"align":23710},"XML 里的 ",[88,104202,104121],{},[291,104204,104205],{"align":23710},"相对父 body 的局部坐标",[245,104207,104208,104214],{},[291,104209,104210,24953,104212],{"align":23710},[88,104211,101054],{},[88,104213,103967],{},[291,104215,104216],{"align":23710},"仿真更新后的世界坐标",[38,104218,104219,104220,104222,104223,82514,104226,104228],{},"如果你修改了 ",[88,104221,101045],{},"，但还没调用 ",[88,104224,104225],{},"mj_forward",[88,104227,101190],{},"，世界坐标可能还没有更新。",[33,104230,102582],{"id":102581},[38,104232,104233],{},"MJCF 建模先掌握四件事：",[46,104235,104236,104241,104246,104251],{},[49,104237,104238,104240],{},[88,104239,51775],{}," 表示刚体层级。",[49,104242,104243,104245],{},[88,104244,101095],{}," 表示形状、碰撞和质量。",[49,104247,104248,104250],{},[88,104249,102931],{}," 决定 body 能不能动、怎么动。",[49,104252,104253,104255],{},[88,104254,103185],{}," 用来标记关键点，方便 Python 读取位置。",[38,104257,104258],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5105,104260,104261],{},"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":10,"searchDepth":11,"depth":11,"links":104263},[104264,104265,104266,104272,104276,104277,104278,104285],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":104267},[104268,104269,104270,104271],{"id":102935,"depth":1157,"text":102935},{"id":103049,"depth":1157,"text":103049},{"id":103075,"depth":1157,"text":103076},{"id":103179,"depth":1157,"text":103180},{"id":101227,"depth":11,"text":101228,"children":104273},[104274,104275],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":104279},[104280,104281,104283,104284],{"id":104133,"depth":1157,"text":104136},{"id":104142,"depth":1157,"text":104282},"mj_name2id 返回 -1",{"id":104156,"depth":1157,"text":104156},{"id":104179,"depth":1157,"text":104179},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102629,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104292,"title":104293,"body":104294,"description":10,"extension":14,"meta":105789,"navigation":17,"path":105790,"seo":105791,"stem":105792,"__hash__":105793},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104295,"toc":105761},[104296,104299,104301,104304,104307,104345,104348,104354,104357,104359,104361,104388,104390,104404,104406,104447,104449,104473,104475,104478,104487,104496,104499,104508,104516,104525,104528,104538,104541,104593,104600,104606,104614,104662,104665,104684,104687,104695,104699,104708,104741,104743,105091,105093,105105,105107,105118,105120,105123,105144,105150,105153,105178,105188,105191,105199,105202,105205,105226,105237,105239,105259,105262,105283,105292,105311,105317,105342,105345,105359,105366,105390,105393,105401,105410,105426,105438,105446,105455,105457,105460,105484,105489,105492,105514,105516,105555,105557,105564,105566,105574,105577,105580,105592,105633,105640,105651,105658,105661,105710,105713,105716,105722,105724,105729,105755,105758],[29,104297,104293],{"id":104298},"_3python-控制接口读取状态与推进仿真",[33,104300,100622],{"id":100621},[38,104302,104303],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[38,104305,104306],{},"你将学习:",[46,104308,104309,104314,104319,104323,104328,104339],{},[49,104310,104311],{},[88,104312,104313],{},"MjModel.from_xml_string",[49,104315,104316],{},[88,104317,104318],{},"MjData(model)",[49,104320,104321],{},[88,104322,101190],{},[49,104324,104325],{},[88,104326,104327],{},"mj_resetData",[49,104329,104330,104331,314,104333,314,104336],{},"读取 ",[88,104332,104005],{},[88,104334,104335],{},"qvel",[88,104337,104338],{},"ctrl",[49,104340,104341,104342],{},"使用 ",[88,104343,104344],{},"model.opt.timestep",[38,104346,104347],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[83,104349,104352],{"className":104350,"code":104351,"language":5166,"meta":10},[5164],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[88,104353,104351],{"__ignoreMap":10},[38,104355,104356],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[33,104358,100745],{"id":100744},[38,104360,100748],{},[83,104362,104364],{"className":23796,"code":104363,"language":23798,"meta":10,"style":10},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[88,104365,104366],{"__ignoreMap":10},[91,104367,104368,104370,104372,104374,104376,104379,104381,104383,104385],{"class":93,"line":94},[91,104369,24551],{"class":1941},[91,104371,26290],{"class":206},[91,104373,23808],{"class":206},[91,104375,26375],{"class":150},[91,104377,104378],{"class":206}," python3",[91,104380,100773],{"class":206},[91,104382,102476],{"class":206},[91,104384,100789],{"class":206},[91,104386,104387],{"class":206}," glfw\n",[38,104389,102794],{},[83,104391,104392],{"className":23796,"code":100894,"language":23798,"meta":10,"style":10},[88,104393,104394],{"__ignoreMap":10},[91,104395,104396,104398,104400,104402],{"class":93,"line":94},[91,104397,23805],{"class":1941},[91,104399,23808],{"class":206},[91,104401,100905],{"class":206},[91,104403,100908],{"class":206},[38,104405,102811],{},[83,104407,104409],{"className":23796,"code":104408,"language":23798,"meta":10,"style":10},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[88,104410,104411,104428,104437],{"__ignoreMap":10},[91,104412,104413,104415,104417,104419,104422,104424,104426],{"class":93,"line":94},[91,104414,30305],{"class":1941},[91,104416,29151],{"class":206},[91,104418,25090],{"class":150},[91,104420,104421],{"class":206}," mujoco-python-api",[91,104423,100950],{"class":206},[91,104425,100953],{"class":150},[91,104427,100956],{"class":150},[91,104429,104430,104432,104434],{"class":93,"line":11},[91,104431,30305],{"class":1941},[91,104433,100963],{"class":206},[91,104435,104436],{"class":206}," mujoco-python-api\n",[91,104438,104439,104441,104443,104445],{"class":93,"line":1157},[91,104440,23805],{"class":1941},[91,104442,23808],{"class":206},[91,104444,100905],{"class":206},[91,104446,100908],{"class":206},[38,104448,100979],{},[46,104450,104451,104458,104467],{},[49,104452,104453,100993,104455,104457],{},[88,104454,100650],{},[88,104456,100655],{}," 是官方 Python bindings 的类名。",[49,104459,104460,104461,104464,104465,28360],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[88,104462,104463],{},"mjModel"," 在 Python 中是 ",[88,104466,100684],{},[49,104468,104469,104470,28360],{},"不要使用 ",[88,104471,104472],{},"sim = mujoco_py.MjSim(...)",[33,104474,101020],{"id":101019},[38,104476,104477],{},"仿真推进核心代码:",[83,104479,104481],{"className":30353,"code":104480,"language":30355,"meta":10,"style":10},"mujoco.mj_step(model, data)\n",[88,104482,104483],{"__ignoreMap":10},[91,104484,104485],{"class":93,"line":94},[91,104486,104480],{"class":101},[38,104488,104489,104490,314,104492,314,104494,28360],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[88,104491,101045],{},[88,104493,101048],{},[88,104495,101042],{},[38,104497,104498],{},"重置仿真:",[83,104500,104502],{"className":30353,"code":104501,"language":30355,"meta":10,"style":10},"mujoco.mj_resetData(model, data)\n",[88,104503,104504],{"__ignoreMap":10},[91,104505,104506],{"class":93,"line":94},[91,104507,104501],{"class":101},[38,104509,104510,104511,82514,104513,104515],{},"如果手动修改了 ",[88,104512,101045],{},[88,104514,101048],{},"，通常应调用:",[83,104517,104519],{"className":30353,"code":104518,"language":30355,"meta":10,"style":10},"mujoco.mj_forward(model, data)\n",[88,104520,104521],{"__ignoreMap":10},[91,104522,104523],{"class":93,"line":94},[91,104524,104518],{"class":101},[38,104526,104527],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[63,104529,104531,314,104533,314,104535,104537],{"id":104530},"qposqvelctrl-是什么",[88,104532,104005],{},[88,104534,104335],{},[88,104536,104338],{}," 是什么",[38,104539,104540],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[239,104542,104543,104555],{},[242,104544,104545],{},[245,104546,104547,104550,104552],{},[248,104548,104549],{"align":23710},"字段",[248,104551,100675],{"align":23710},[248,104553,104554],{"align":23710},"谁来修改",[286,104556,104557,104569,104581],{},[245,104558,104559,104563,104566],{},[291,104560,104561],{"align":23710},[88,104562,101045],{},[291,104564,104565],{"align":23710},"广义位置，例如小车位置、关节角、自由物体位置姿态",[291,104567,104568],{"align":23710},"MuJoCo 更新，也可以手动设置初始状态",[245,104570,104571,104575,104578],{},[291,104572,104573],{"align":23710},[88,104574,101048],{},[291,104576,104577],{"align":23710},"广义速度，例如小车速度、关节角速度",[291,104579,104580],{"align":23710},"MuJoCo 更新，也可以手动清零",[245,104582,104583,104587,104590],{},[291,104584,104585],{"align":23710},[88,104586,101051],{},[291,104588,104589],{"align":23710},"actuator 的控制输入",[291,104591,104592],{"align":23710},"主要由你的控制代码写入",[38,104594,9004,104595,100993,104597,104599],{},[88,104596,104005],{},[88,104598,104335],{}," 不一定同维。自由刚体就是典型例子：",[83,104601,104604],{"className":104602,"code":104603,"language":5166,"meta":10},[5164],"freejoint: qpos 7 维，qvel 6 维\n",[88,104605,104603],{"__ignoreMap":10},[63,104607,104609,100993,104611,104613],{"id":104608},"mj_step-和-mj_forward-的区别",[88,104610,101190],{},[88,104612,104225],{}," 的区别",[239,104615,104616,104629],{},[242,104617,104618],{},[245,104619,104620,104623,104626],{},[248,104621,104622],{"align":23710},"函数",[248,104624,104625],{"align":23710},"是否推进时间",[248,104627,104628],{"align":23710},"什么时候用",[286,104630,104631,104644],{},[245,104632,104633,104638,104641],{},[291,104634,104635],{"align":23710},[88,104636,104637],{},"mj_step(model, data)",[291,104639,104640],{"align":23710},"是",[291,104642,104643],{"align":23710},"正常仿真循环，每调用一次前进一步",[245,104645,104646,104651,104654],{},[291,104647,104648],{"align":23710},[88,104649,104650],{},"mj_forward(model, data)",[291,104652,104653],{"align":23710},"否",[291,104655,104656,104657,314,104659,104661],{"align":23710},"手动改了 ",[88,104658,104005],{},[88,104660,104335],{}," 后，刷新派生量",[38,104663,104664],{},"例如你写：",[83,104666,104668],{"className":30353,"code":104667,"language":30355,"meta":10,"style":10},"data.qpos[2] = 2.0\n",[88,104669,104670],{"__ignoreMap":10},[91,104671,104672,104675,104677,104679,104681],{"class":93,"line":94},[91,104673,104674],{"class":101},"data.qpos[",[91,104676,179],{"class":150},[91,104678,4421],{"class":101},[91,104680,147],{"class":97},[91,104682,104683],{"class":150}," 2.0\n",[38,104685,104686],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[83,104688,104689],{"className":30353,"code":104518,"language":30355,"meta":10,"style":10},[88,104690,104691],{"__ignoreMap":10},[91,104692,104693],{"class":93,"line":94},[91,104694,104518],{"class":101},[63,104696,104698],{"id":104697},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[38,104700,104701,104704,104705,104707],{},[88,104702,104703],{},"mujoco.mj_resetData(model, data)"," 会把 ",[88,104706,33376],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[83,104709,104711],{"className":30353,"code":104710,"language":30355,"meta":10,"style":10},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[88,104712,104713,104717,104727,104737],{"__ignoreMap":10},[91,104714,104715],{"class":93,"line":94},[91,104716,104501],{"class":101},[91,104718,104719,104722,104724],{"class":93,"line":11},[91,104720,104721],{"class":101},"data.qpos[:] ",[91,104723,147],{"class":97},[91,104725,104726],{"class":101}," random_qpos\n",[91,104728,104729,104732,104734],{"class":93,"line":1157},[91,104730,104731],{"class":101},"data.qvel[:] ",[91,104733,147],{"class":97},[91,104735,104736],{"class":150}," 0.0\n",[91,104738,104739],{"class":93,"line":1172},[91,104740,104518],{"class":101},[33,104742,101228],{"id":101227},[83,104744,104746],{"className":30353,"code":104745,"language":30355,"meta":10,"style":10},"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",[88,104747,104748,104754,104764,104768,104772,104780,104785,104789,104793,104797,104802,104806,104811,104816,104821,104825,104829,104833,104837,104841,104845,104864,104871,104883,104894,104910,104926,104930,104934,104946,104958,104966,104970,104981,104985,105001,105005,105009,105018,105022,105027,105036,105040,105053,105058,105067,105071,105075,105087],{"__ignoreMap":10},[91,104749,104750,104752],{"class":93,"line":94},[91,104751,30367],{"class":97},[91,104753,101276],{"class":101},[91,104755,104756,104758,104760,104762],{"class":93,"line":11},[91,104757,30367],{"class":97},[91,104759,31355],{"class":101},[91,104761,31358],{"class":97},[91,104763,31361],{"class":101},[91,104765,104766],{"class":93,"line":1157},[91,104767,2378],{"emptyLinePlaceholder":17},[91,104769,104770],{"class":93,"line":1172},[91,104771,2378],{"emptyLinePlaceholder":17},[91,104773,104774,104776,104778],{"class":93,"line":1178},[91,104775,101289],{"class":150},[91,104777,13543],{"class":97},[91,104779,101294],{"class":206},[91,104781,104782],{"class":93,"line":1192},[91,104783,104784],{"class":206},"\u003Cmujoco model=\"state_api\">\n",[91,104786,104787],{"class":93,"line":1198},[91,104788,101304],{"class":206},[91,104790,104791],{"class":93,"line":1289},[91,104792,2378],{"emptyLinePlaceholder":17},[91,104794,104795],{"class":93,"line":1295},[91,104796,101313],{"class":206},[91,104798,104799],{"class":93,"line":1307},[91,104800,104801],{"class":206},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[91,104803,104804],{"class":93,"line":1590},[91,104805,2378],{"emptyLinePlaceholder":17},[91,104807,104808],{"class":93,"line":1595},[91,104809,104810],{"class":206},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[91,104812,104813],{"class":93,"line":1601},[91,104814,104815],{"class":206},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[91,104817,104818],{"class":93,"line":1606},[91,104819,104820],{"class":206},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[91,104822,104823],{"class":93,"line":1620},[91,104824,101342],{"class":206},[91,104826,104827],{"class":93,"line":1625},[91,104828,101347],{"class":206},[91,104830,104831],{"class":93,"line":1631},[91,104832,101352],{"class":206},[91,104834,104835],{"class":93,"line":1652},[91,104836,95673],{"class":206},[91,104838,104839],{"class":93,"line":1657},[91,104840,2378],{"emptyLinePlaceholder":17},[91,104842,104843],{"class":93,"line":1671},[91,104844,2378],{"emptyLinePlaceholder":17},[91,104846,104847,104849,104852,104855,104857,104860,104862],{"class":93,"line":1676},[91,104848,31922],{"class":97},[91,104850,104851],{"class":1941}," print_state",[91,104853,104854],{"class":101},"(prefix: ",[91,104856,1277],{"class":150},[91,104858,104859],{"class":101},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[91,104861,95661],{"class":150},[91,104863,3717],{"class":101},[91,104865,104866,104868],{"class":93,"line":1705},[91,104867,31274],{"class":150},[91,104869,104870],{"class":101},"(prefix)\n",[91,104872,104873,104875,104877,104880],{"class":93,"line":1710},[91,104874,31274],{"class":150},[91,104876,102],{"class":101},[91,104878,104879],{"class":206},"\"  timestep:\"",[91,104881,104882],{"class":101},", model.opt.timestep)\n",[91,104884,104885,104887,104889,104892],{"class":93,"line":1727},[91,104886,31274],{"class":150},[91,104888,102],{"class":101},[91,104890,104891],{"class":206},"\"  time:\"",[91,104893,101453],{"class":101},[91,104895,104896,104898,104900,104903,104906,104908],{"class":93,"line":1732},[91,104897,31274],{"class":150},[91,104899,102],{"class":101},[91,104901,104902],{"class":206},"\"  qpos:\"",[91,104904,104905],{"class":101},", np.round(data.qpos.copy(), ",[91,104907,395],{"class":150},[91,104909,30472],{"class":101},[91,104911,104912,104914,104916,104919,104922,104924],{"class":93,"line":1737},[91,104913,31274],{"class":150},[91,104915,102],{"class":101},[91,104917,104918],{"class":206},"\"  qvel:\"",[91,104920,104921],{"class":101},", np.round(data.qvel.copy(), ",[91,104923,395],{"class":150},[91,104925,30472],{"class":101},[91,104927,104928],{"class":93,"line":1742},[91,104929,2378],{"emptyLinePlaceholder":17},[91,104931,104932],{"class":93,"line":1756},[91,104933,2378],{"emptyLinePlaceholder":17},[91,104935,104936,104938,104940,104942,104944],{"class":93,"line":1761},[91,104937,31922],{"class":97},[91,104939,1951],{"class":1941},[91,104941,101373],{"class":101},[91,104943,95661],{"class":150},[91,104945,3717],{"class":101},[91,104947,104948,104950,104952,104954,104956],{"class":93,"line":2555},[91,104949,101382],{"class":101},[91,104951,147],{"class":97},[91,104953,101387],{"class":101},[91,104955,101289],{"class":150},[91,104957,108],{"class":101},[91,104959,104960,104962,104964],{"class":93,"line":2569},[91,104961,101396],{"class":101},[91,104963,147],{"class":97},[91,104965,101401],{"class":101},[91,104967,104968],{"class":93,"line":2577},[91,104969,2378],{"emptyLinePlaceholder":17},[91,104971,104972,104975,104978],{"class":93,"line":2582},[91,104973,104974],{"class":101},"    print_state(",[91,104976,104977],{"class":206},"\"initial\"",[91,104979,104980],{"class":101},", model, data)\n",[91,104982,104983],{"class":93,"line":2588},[91,104984,2378],{"emptyLinePlaceholder":17},[91,104986,104987,104989,104991,104993,104995,104997,104999],{"class":93,"line":2594},[91,104988,3179],{"class":97},[91,104990,101476],{"class":101},[91,104992,26018],{"class":97},[91,104994,32418],{"class":150},[91,104996,102],{"class":101},[91,104998,758],{"class":150},[91,105000,30761],{"class":101},[91,105002,105003],{"class":93,"line":2599},[91,105004,101491],{"class":101},[91,105006,105007],{"class":93,"line":7927},[91,105008,2378],{"emptyLinePlaceholder":17},[91,105010,105011,105013,105016],{"class":93,"line":7951},[91,105012,104974],{"class":101},[91,105014,105015],{"class":206},"\"after 50 steps\"",[91,105017,104980],{"class":101},[91,105019,105020],{"class":93,"line":7956},[91,105021,2378],{"emptyLinePlaceholder":17},[91,105023,105024],{"class":93,"line":7962},[91,105025,105026],{"class":101},"    mujoco.mj_resetData(model, data)\n",[91,105028,105029,105031,105034],{"class":93,"line":7989},[91,105030,104974],{"class":101},[91,105032,105033],{"class":206},"\"after reset\"",[91,105035,104980],{"class":101},[91,105037,105038],{"class":93,"line":7994},[91,105039,2378],{"emptyLinePlaceholder":17},[91,105041,105042,105045,105047,105049,105051],{"class":93,"line":8000},[91,105043,105044],{"class":101},"    data.qpos[",[91,105046,179],{"class":150},[91,105048,4421],{"class":101},[91,105050,147],{"class":97},[91,105052,104683],{"class":150},[91,105054,105055],{"class":93,"line":8012},[91,105056,105057],{"class":101},"    mujoco.mj_forward(model, data)\n",[91,105059,105060,105062,105065],{"class":93,"line":8024},[91,105061,104974],{"class":101},[91,105063,105064],{"class":206},"\"after manual qpos edit\"",[91,105066,104980],{"class":101},[91,105068,105069],{"class":93,"line":8036},[91,105070,2378],{"emptyLinePlaceholder":17},[91,105072,105073],{"class":93,"line":9695},[91,105074,2378],{"emptyLinePlaceholder":17},[91,105076,105077,105079,105081,105083,105085],{"class":93,"line":9720},[91,105078,1509],{"class":97},[91,105080,31195],{"class":150},[91,105082,101534],{"class":97},[91,105084,101537],{"class":206},[91,105086,3717],{"class":101},[91,105088,105089],{"class":93,"line":9743},[91,105090,101544],{"class":101},[38,105092,103545],{},[83,105094,105096],{"className":23796,"code":105095,"language":23798,"meta":10,"style":10},"touch ch3_python_state.py\n",[88,105097,105098],{"__ignoreMap":10},[91,105099,105100,105102],{"class":93,"line":94},[91,105101,101258],{"class":1941},[91,105103,105104],{"class":206}," ch3_python_state.py\n",[38,105106,102276],{},[83,105108,105110],{"className":23796,"code":105109,"language":23798,"meta":10,"style":10},"python ch3_python_state.py\n",[88,105111,105112],{"__ignoreMap":10},[91,105113,105114,105116],{"class":93,"line":94},[91,105115,30355],{"class":1941},[91,105117,105104],{"class":206},[63,105119,101547],{"id":101547},[38,105121,105122],{},"打印状态的函数：",[83,105124,105126],{"className":30353,"code":105125,"language":30355,"meta":10,"style":10},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[88,105127,105128],{"__ignoreMap":10},[91,105129,105130,105132,105134,105136,105138,105140,105142],{"class":93,"line":94},[91,105131,31922],{"class":97},[91,105133,104851],{"class":1941},[91,105135,104854],{"class":101},[91,105137,1277],{"class":150},[91,105139,104859],{"class":101},[91,105141,95661],{"class":150},[91,105143,3717],{"class":101},[38,105145,105146,105147,105149],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[88,105148,33376],{}," 里发生了什么。",[38,105151,105152],{},"推进 50 步：",[83,105154,105156],{"className":30353,"code":105155,"language":30355,"meta":10,"style":10},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[88,105157,105158,105174],{"__ignoreMap":10},[91,105159,105160,105162,105164,105166,105168,105170,105172],{"class":93,"line":94},[91,105161,3003],{"class":97},[91,105163,101476],{"class":101},[91,105165,26018],{"class":97},[91,105167,32418],{"class":150},[91,105169,102],{"class":101},[91,105171,758],{"class":150},[91,105173,30761],{"class":101},[91,105175,105176],{"class":93,"line":11},[91,105177,101674],{"class":101},[38,105179,105180,105181,105184,105185,105187],{},"由于 ",[88,105182,105183],{},"timestep=0.01","，所以 50 步后时间约为 ",[88,105186,35304],{}," 秒。",[38,105189,105190],{},"重置：",[83,105192,105193],{"className":30353,"code":104501,"language":30355,"meta":10,"style":10},[88,105194,105195],{"__ignoreMap":10},[91,105196,105197],{"class":93,"line":94},[91,105198,104501],{"class":101},[38,105200,105201],{},"这会把时间、位置、速度恢复到初始状态。",[38,105203,105204],{},"手动改高度：",[83,105206,105208],{"className":30353,"code":105207,"language":30355,"meta":10,"style":10},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[88,105209,105210,105222],{"__ignoreMap":10},[91,105211,105212,105214,105216,105218,105220],{"class":93,"line":94},[91,105213,104674],{"class":101},[91,105215,179],{"class":150},[91,105217,4421],{"class":101},[91,105219,147],{"class":97},[91,105221,104683],{"class":150},[91,105223,105224],{"class":93,"line":11},[91,105225,104518],{"class":101},[38,105227,105228,105229,105232,105233,105236],{},"这个例子里 ",[88,105230,105231],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[88,105234,105235],{},"2.0"," 表示把小球放到更高的位置。",[63,105238,101683],{"id":101683},[83,105240,105241],{"className":30353,"code":105125,"language":30355,"meta":10,"style":10},[88,105242,105243],{"__ignoreMap":10},[91,105244,105245,105247,105249,105251,105253,105255,105257],{"class":93,"line":94},[91,105246,31922],{"class":97},[91,105248,104851],{"class":1941},[91,105250,104854],{"class":101},[91,105252,1277],{"class":150},[91,105254,104859],{"class":101},[91,105256,95661],{"class":150},[91,105258,3717],{"class":101},[38,105260,105261],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[46,105263,105264,105273,105278],{},[49,105265,105266,105269,105270,105272],{},[88,105267,105268],{},"prefix","：一段文字，比如 ",[88,105271,104977],{},"，用来说明现在打印的是哪个阶段。",[49,105274,105275,105277],{},[88,105276,102060],{},"：MuJoCo 模型。",[49,105279,105280,105282],{},[88,105281,33376],{},"：MuJoCo 当前状态。",[38,105284,105285,314,105288,105291],{},[88,105286,105287],{},"prefix: str",[88,105289,105290],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[83,105293,105295],{"className":30353,"code":105294,"language":30355,"meta":10,"style":10},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[88,105296,105297],{"__ignoreMap":10},[91,105298,105299,105301,105303,105305,105307,105309],{"class":93,"line":94},[91,105300,30390],{"class":150},[91,105302,102],{"class":101},[91,105304,104902],{"class":206},[91,105306,104905],{"class":101},[91,105308,395],{"class":150},[91,105310,30472],{"class":101},[38,105312,105313,105316],{},[88,105314,105315],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[83,105318,105320],{"className":30353,"code":105319,"language":30355,"meta":10,"style":10},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[88,105321,105322,105334],{"__ignoreMap":10},[91,105323,105324,105326,105328,105330,105332],{"class":93,"line":94},[91,105325,101609],{"class":101},[91,105327,147],{"class":97},[91,105329,101387],{"class":101},[91,105331,101289],{"class":150},[91,105333,108],{"class":101},[91,105335,105336,105338,105340],{"class":93,"line":11},[91,105337,101633],{"class":101},[91,105339,147],{"class":97},[91,105341,101401],{"class":101},[38,105343,105344],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[83,105346,105348],{"className":30353,"code":105347,"language":30355,"meta":10,"style":10},"print_state(\"initial\", model, data)\n",[88,105349,105350],{"__ignoreMap":10},[91,105351,105352,105355,105357],{"class":93,"line":94},[91,105353,105354],{"class":101},"print_state(",[91,105356,104977],{"class":206},[91,105358,104980],{"class":101},[38,105360,105361,105362,105365],{},"调用刚才定义的 ",[88,105363,105364],{},"print_state"," 函数，打印初始状态。",[83,105367,105368],{"className":30353,"code":105155,"language":30355,"meta":10,"style":10},[88,105369,105370,105386],{"__ignoreMap":10},[91,105371,105372,105374,105376,105378,105380,105382,105384],{"class":93,"line":94},[91,105373,3003],{"class":97},[91,105375,101476],{"class":101},[91,105377,26018],{"class":97},[91,105379,32418],{"class":150},[91,105381,102],{"class":101},[91,105383,758],{"class":150},[91,105385,30761],{"class":101},[91,105387,105388],{"class":93,"line":11},[91,105389,101674],{"class":101},[38,105391,105392],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[83,105394,105395],{"className":30353,"code":104501,"language":30355,"meta":10,"style":10},[88,105396,105397],{"__ignoreMap":10},[91,105398,105399],{"class":93,"line":94},[91,105400,104501],{"class":101},[38,105402,105403,105404,105406,105407,105409],{},"重置 ",[88,105405,33376],{},"。注意它不会重新创建 ",[88,105408,102060],{},"，因为模型结构没有变，只是状态回到初始值。",[83,105411,105412],{"className":30353,"code":104667,"language":30355,"meta":10,"style":10},[88,105413,105414],{"__ignoreMap":10},[91,105415,105416,105418,105420,105422,105424],{"class":93,"line":94},[91,105417,104674],{"class":101},[91,105419,179],{"class":150},[91,105421,4421],{"class":101},[91,105423,147],{"class":97},[91,105425,104683],{"class":150},[38,105427,105428,105429,314,105432,314,105435,105437],{},"这行是“手动改状态”。在 freejoint 中，",[88,105430,105431],{},"qpos[0]",[88,105433,105434],{},"qpos[1]",[88,105436,105231],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[83,105439,105440],{"className":30353,"code":104518,"language":30355,"meta":10,"style":10},[88,105441,105442],{"__ignoreMap":10},[91,105443,105444],{"class":93,"line":94},[91,105445,104518],{"class":101},[38,105447,105448,105449,105451,105452,105454],{},"手动改完 ",[88,105450,104005],{}," 后，调用 ",[88,105453,104225],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[33,105456,102291],{"id":102290},[38,105458,105459],{},"你会看到:",[46,105461,105462,105467,105472,105475],{},[49,105463,105464,105465],{},"初始时间为 ",[88,105466,293],{},[49,105468,105469,105470],{},"50 步后时间约为 ",[88,105471,35304],{},[49,105473,105474],{},"reset 后状态恢复",[49,105476,105477,105478,105481,105482],{},"手动修改 ",[88,105479,105480],{},"data.qpos[2]"," 后，小球高度变为 ",[88,105483,105235],{},[38,105485,105486,105488],{},[88,105487,105231],{}," 在这个例子中表示自由刚体的 z 坐标。",[38,105490,105491],{},"输出里可以重点看三件事：",[46,105493,105494,105502,105507],{},[49,105495,105496,105498,105499,105501],{},[88,105497,2365],{}," 是否随着 ",[88,105500,101190],{}," 增加。",[49,105503,105504,105506],{},[88,105505,104005],{}," 的 z 坐标是否因为下落而变化。",[49,105508,105509,105511,105512,28360],{},[88,105510,104327],{}," 后时间是否回到 ",[88,105513,293],{},[33,105515,102323],{"id":102322},[46,105517,105518,105524,105530,105536,105539,105548],{},[49,105519,105520,105521,28360],{},"修改 timestep 为 ",[88,105522,105523],{},"0.005",[49,105525,105526,105527,28360],{},"重新运行，检查 50 步后时间是否约为 ",[88,105528,105529],{},"0.25",[49,105531,105532,105533,28360],{},"修改重力为 ",[88,105534,105535],{},"0 0 -1.0",[49,105537,105538],{},"观察小球下降速度是否变慢。",[49,105540,102386,105541,102389,105544,105547],{},[88,105542,105543],{},"data.qpos[2] = 2.0",[88,105545,105546],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[49,105549,105550,105551,105554],{},"注释掉 ",[88,105552,105553],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[33,105556,102428],{"id":102427},[63,105558,105560,105561,105563],{"id":105559},"修改-dataqpos-后位置没有更新","修改 ",[88,105562,101045],{}," 后位置没有更新",[38,105565,102437],{},[83,105567,105568],{"className":30353,"code":104518,"language":30355,"meta":10,"style":10},[88,105569,105570],{"__ignoreMap":10},[91,105571,105572],{"class":93,"line":94},[91,105573,104518],{"class":101},[63,105575,105576],{"id":105576},"数组维度看不懂",[38,105578,105579],{},"打印模型维度:",[83,105581,105583],{"className":30353,"code":105582,"language":30355,"meta":10,"style":10},"print(model.nq, model.nv, model.nu)\n",[88,105584,105585],{"__ignoreMap":10},[91,105586,105587,105589],{"class":93,"line":94},[91,105588,30390],{"class":150},[91,105590,105591],{"class":101},"(model.nq, model.nv, model.nu)\n",[239,105593,105594,105602],{},[242,105595,105596],{},[245,105597,105598,105600],{},[248,105599,104549],{"align":23710},[248,105601,100675],{"align":23710},[286,105603,105604,105614,105624],{},[245,105605,105606,105611],{},[291,105607,105608],{"align":23710},[88,105609,105610],{},"nq",[291,105612,105613],{"align":23710},"位置变量数量",[245,105615,105616,105621],{},[291,105617,105618],{"align":23710},[88,105619,105620],{},"nv",[291,105622,105623],{"align":23710},"速度变量数量",[245,105625,105626,105630],{},[291,105627,105628],{"align":23710},[88,105629,102137],{},[291,105631,105632],{"align":23710},"控制输入数量",[63,105634,105636,105637,105639],{"id":105635},"误以为-qpos-一定等于关节数","误以为 ",[88,105638,104005],{}," 一定等于关节数",[38,105641,105642,105643,82505,105645,105647,105648,105650],{},"不是。例如 ",[88,105644,101595],{},[88,105646,104005],{}," 是 7 维，但 ",[88,105649,104335],{}," 是 6 维。",[63,105652,105654,105655,105657],{"id":105653},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[88,105656,104005],{}," 的第几位",[38,105659,105660],{},"初学时可以先打印：",[83,105662,105664],{"className":30353,"code":105663,"language":30355,"meta":10,"style":10},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[88,105665,105666,105676,105686,105698],{"__ignoreMap":10},[91,105667,105668,105670,105672,105674],{"class":93,"line":94},[91,105669,30390],{"class":150},[91,105671,102],{"class":101},[91,105673,101414],{"class":206},[91,105675,101417],{"class":101},[91,105677,105678,105680,105682,105684],{"class":93,"line":11},[91,105679,30390],{"class":150},[91,105681,102],{"class":101},[91,105683,101426],{"class":206},[91,105685,101429],{"class":101},[91,105687,105688,105690,105692,105695],{"class":93,"line":1157},[91,105689,30390],{"class":150},[91,105691,102],{"class":101},[91,105693,105694],{"class":206},"\"qpos:\"",[91,105696,105697],{"class":101},", data.qpos)\n",[91,105699,105700,105702,105704,105707],{"class":93,"line":1172},[91,105701,30390],{"class":150},[91,105703,102],{"class":101},[91,105705,105706],{"class":206},"\"qvel:\"",[91,105708,105709],{"class":101},", data.qvel)\n",[38,105711,105712],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[63,105714,105715],{"id":105715},"仿真结果每次都一样",[38,105717,105718,105719,105721],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[88,105720,104005],{},"、目标点或控制输入。",[33,105723,102582],{"id":102581},[38,105725,105726,105727,24593],{},"Python 控制 MuJoCo 的核心就是读写 ",[88,105728,33376],{},[46,105730,105731,105739,105744,105749],{},[49,105732,105733,105734,100993,105736,105738],{},"用 ",[88,105735,101045],{},[88,105737,101048],{}," 读取状态。",[49,105740,105733,105741,105743],{},[88,105742,101051],{}," 写入控制。",[49,105745,105733,105746,105748],{},[88,105747,101190],{}," 推进时间。",[49,105750,105751,105752,105754],{},"手动改状态后用 ",[88,105753,104225],{}," 刷新派生量。",[38,105756,105757],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5105,105759,105760],{},"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":10,"searchDepth":11,"depth":11,"links":105762},[105763,105764,105765,105772,105776,105777,105778,105788],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":105766},[105767,105769,105771],{"id":104530,"depth":1157,"text":105768},"qpos、qvel、ctrl 是什么",{"id":104608,"depth":1157,"text":105770},"mj_step 和 mj_forward 的区别",{"id":104697,"depth":1157,"text":104698},{"id":101227,"depth":11,"text":101228,"children":105773},[105774,105775],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":105779},[105780,105782,105783,105785,105787],{"id":105559,"depth":1157,"text":105781},"修改 data.qpos 后位置没有更新",{"id":105576,"depth":1157,"text":105576},{"id":105635,"depth":1157,"text":105784},"误以为 qpos 一定等于关节数",{"id":105653,"depth":1157,"text":105786},"不知道某个元素在 qpos 的第几位",{"id":105715,"depth":1157,"text":105715},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104293,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105795,"title":105796,"body":105797,"description":10,"extension":14,"meta":107487,"navigation":17,"path":107488,"seo":107489,"stem":107490,"__hash__":107491},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105798,"toc":107463},[105799,105802,105804,105807,105809,105834,105837,105856,105859,105861,105863,105887,105889,105903,105905,105946,105948,105972,105974,105977,106011,106013,106026,106029,106097,106106,106110,106113,106147,106153,106156,106160,106199,106202,106222,106226,106269,106271,106300,106303,106309,106312,106314,106708,106710,106722,106724,106735,106737,106740,106769,106777,106780,106815,106818,106820,106828,106831,106833,106844,106854,106874,106877,106913,106925,106973,106992,107034,107047,107075,107080,107101,107111,107129,107132,107166,107169,107189,107192,107211,107217,107219,107222,107228,107234,107244,107247,107253,107262,107264,107310,107312,107318,107324,107327,107330,107350,107353,107359,107365,107367,107390,107393,107396,107405,107408,107446,107448,107451,107457,107460],[29,105800,105796],{"id":105801},"_4关节actuator-与力控制",[33,105803,100622],{"id":100621},[38,105805,105806],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[38,105808,104306],{},[46,105810,105811,105817,105822,105826,105831],{},[49,105812,105813,105816],{},[88,105814,105815],{},"hinge"," 关节",[49,105818,105819],{},[88,105820,105821],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[49,105823,105824],{},[88,105825,101051],{},[49,105827,105828],{},[88,105829,105830],{},"ctrlrange",[49,105832,105833],{},"读取关节角和角速度",[38,105835,105836],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[83,105838,105840],{"className":30353,"code":105839,"language":30355,"meta":10,"style":10},"data.ctrl[0] = ...\n",[88,105841,105842],{"__ignoreMap":10},[91,105843,105844,105847,105849,105851,105853],{"class":93,"line":94},[91,105845,105846],{"class":101},"data.ctrl[",[91,105848,293],{"class":150},[91,105850,4421],{"class":101},[91,105852,147],{"class":97},[91,105854,105855],{"class":150}," ...\n",[38,105857,105858],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[33,105860,100745],{"id":100744},[38,105862,100748],{},[83,105864,105865],{"className":23796,"code":104363,"language":23798,"meta":10,"style":10},[88,105866,105867],{"__ignoreMap":10},[91,105868,105869,105871,105873,105875,105877,105879,105881,105883,105885],{"class":93,"line":94},[91,105870,24551],{"class":1941},[91,105872,26290],{"class":206},[91,105874,23808],{"class":206},[91,105876,26375],{"class":150},[91,105878,104378],{"class":206},[91,105880,100773],{"class":206},[91,105882,102476],{"class":206},[91,105884,100789],{"class":206},[91,105886,104387],{"class":206},[38,105888,102794],{},[83,105890,105891],{"className":23796,"code":100894,"language":23798,"meta":10,"style":10},[88,105892,105893],{"__ignoreMap":10},[91,105894,105895,105897,105899,105901],{"class":93,"line":94},[91,105896,23805],{"class":1941},[91,105898,23808],{"class":206},[91,105900,100905],{"class":206},[91,105902,100908],{"class":206},[38,105904,102811],{},[83,105906,105908],{"className":23796,"code":105907,"language":23798,"meta":10,"style":10},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[88,105909,105910,105927,105936],{"__ignoreMap":10},[91,105911,105912,105914,105916,105918,105921,105923,105925],{"class":93,"line":94},[91,105913,30305],{"class":1941},[91,105915,29151],{"class":206},[91,105917,25090],{"class":150},[91,105919,105920],{"class":206}," mujoco-control",[91,105922,100950],{"class":206},[91,105924,100953],{"class":150},[91,105926,100956],{"class":150},[91,105928,105929,105931,105933],{"class":93,"line":11},[91,105930,30305],{"class":1941},[91,105932,100963],{"class":206},[91,105934,105935],{"class":206}," mujoco-control\n",[91,105937,105938,105940,105942,105944],{"class":93,"line":1157},[91,105939,23805],{"class":1941},[91,105941,23808],{"class":206},[91,105943,100905],{"class":206},[91,105945,100908],{"class":206},[38,105947,100979],{},[46,105949,105950,105956,105963,105969],{},[49,105951,105952,105955],{},[88,105953,105954],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[49,105957,105958,105960,105961,28360],{},[88,105959,101051],{}," 长度等于 ",[88,105962,102133],{},[49,105964,82197,105965,105968],{},[88,105966,105967],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[49,105970,105971],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[33,105973,101020],{"id":101019},[38,105975,105976],{},"关节决定 body 如何运动:",[83,105978,105980],{"className":53042,"code":105979,"language":53044,"meta":10,"style":10},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[88,105981,105982],{"__ignoreMap":10},[91,105983,105984,105986,105988,105990,105992,105995,105997,105999,106001,106004,106006,106009],{"class":93,"line":94},[91,105985,1012],{"class":101},[91,105987,102931],{"class":51275},[91,105989,14899],{"class":1941},[91,105991,147],{"class":101},[91,105993,105994],{"class":206},"\"hinge\"",[91,105996,53799],{"class":1941},[91,105998,147],{"class":101},[91,106000,105994],{"class":206},[91,106002,106003],{"class":1941}," axis",[91,106005,147],{"class":101},[91,106007,106008],{"class":206},"\"0 1 0\"",[91,106010,101119],{"class":101},[38,106012,103027],{},[46,106014,106015,106020,106023],{},[49,106016,106017,106018],{},"名字是 ",[88,106019,105815],{},[49,106021,106022],{},"类型是旋转关节",[49,106024,106025],{},"绕 y 轴旋转",[38,106027,106028],{},"actuator 决定如何施加控制:",[83,106030,106032],{"className":53042,"code":106031,"language":53044,"meta":10,"style":10},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[88,106033,106034,106043,106089],{"__ignoreMap":10},[91,106035,106036,106038,106041],{"class":93,"line":94},[91,106037,1012],{"class":101},[91,106039,106040],{"class":51275},"actuator",[91,106042,51282],{"class":101},[91,106044,106045,106047,106050,106052,106054,106057,106060,106062,106064,106067,106069,106071,106074,106076,106079,106082,106084,106087],{"class":93,"line":11},[91,106046,52119],{"class":101},[91,106048,106049],{"class":51275},"motor",[91,106051,14899],{"class":1941},[91,106053,147],{"class":101},[91,106055,106056],{"class":206},"\"hinge_motor\"",[91,106058,106059],{"class":1941}," joint",[91,106061,147],{"class":101},[91,106063,105994],{"class":206},[91,106065,106066],{"class":1941}," gear",[91,106068,147],{"class":101},[91,106070,3656],{"class":206},[91,106072,106073],{"class":1941}," ctrlrange",[91,106075,147],{"class":101},[91,106077,106078],{"class":206},"\"-2 2\"",[91,106080,106081],{"class":1941}," ctrllimited",[91,106083,147],{"class":101},[91,106085,106086],{"class":206},"\"true\"",[91,106088,101119],{"class":101},[91,106090,106091,106093,106095],{"class":93,"line":1157},[91,106092,51760],{"class":101},[91,106094,106040],{"class":51275},[91,106096,51282],{"class":101},[38,106098,106099,106102,106103,28360],{},[88,106100,106101],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[88,106104,106105],{},"[-2, 2]",[63,106107,106109],{"id":106108},"joint-和-actuator-的关系","joint 和 actuator 的关系",[38,106111,106112],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[239,106114,106115,106125],{},[242,106116,106117],{},[245,106118,106119,106121,106123],{},[248,106120,25728],{"align":23710},[248,106122,102671],{"align":23710},[248,106124,100709],{"align":23710},[286,106126,106127,106137],{},[245,106128,106129,106131,106134],{},[291,106130,102931],{"align":23710},[291,106132,106133],{"align":23710},"定义能怎么动",[291,106135,106136],{"align":23710},"门轴允许门旋转",[245,106138,106139,106141,106144],{},[291,106140,106040],{"align":23710},[291,106142,106143],{"align":23710},"定义怎么施力或控制",[291,106145,106146],{"align":23710},"人推门、马达带动门",[38,106148,106149,106150,106152],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[88,106151,101051],{}," 主动控制它。",[38,106154,106155],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[63,106157,106159],{"id":106158},"hinge-joint","hinge joint",[83,106161,106163],{"className":53042,"code":106162,"language":53044,"meta":10,"style":10},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[88,106164,106165],{"__ignoreMap":10},[91,106166,106167,106169,106171,106173,106175,106177,106179,106181,106183,106185,106187,106189,106192,106194,106197],{"class":93,"line":94},[91,106168,1012],{"class":101},[91,106170,102931],{"class":51275},[91,106172,14899],{"class":1941},[91,106174,147],{"class":101},[91,106176,105994],{"class":206},[91,106178,53799],{"class":1941},[91,106180,147],{"class":101},[91,106182,105994],{"class":206},[91,106184,106003],{"class":1941},[91,106186,147],{"class":101},[91,106188,106008],{"class":206},[91,106190,106191],{"class":1941}," damping",[91,106193,147],{"class":101},[91,106195,106196],{"class":206},"\"0.1\"",[91,106198,101119],{"class":101},[38,106200,106201],{},"含义：",[46,106203,106204,106210,106216],{},[49,106205,106206,106209],{},[88,106207,106208],{},"type=\"hinge\"","：只能绕一个轴旋转。",[49,106211,106212,106215],{},[88,106213,106214],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[49,106217,106218,106221],{},[88,106219,106220],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[63,106223,106225],{"id":106224},"motor-actuator","motor actuator",[83,106227,106229],{"className":53042,"code":106228,"language":53044,"meta":10,"style":10},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[88,106230,106231],{"__ignoreMap":10},[91,106232,106233,106235,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267],{"class":93,"line":94},[91,106234,1012],{"class":101},[91,106236,106049],{"class":51275},[91,106238,14899],{"class":1941},[91,106240,147],{"class":101},[91,106242,106056],{"class":206},[91,106244,106059],{"class":1941},[91,106246,147],{"class":101},[91,106248,105994],{"class":206},[91,106250,106066],{"class":1941},[91,106252,147],{"class":101},[91,106254,3656],{"class":206},[91,106256,106073],{"class":1941},[91,106258,147],{"class":101},[91,106260,106078],{"class":206},[91,106262,106081],{"class":1941},[91,106264,147],{"class":101},[91,106266,106086],{"class":206},[91,106268,101119],{"class":101},[38,106270,106201],{},[46,106272,106273,106282,106288,106294],{},[49,106274,106275,106278,106279,106281],{},[88,106276,106277],{},"joint=\"hinge\"","：这个电机作用在名为 ",[88,106280,105815],{}," 的关节上。",[49,106283,106284,106287],{},[88,106285,106286],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[49,106289,106290,106293],{},[88,106291,106292],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[49,106295,106296,106299],{},[88,106297,106298],{},"ctrllimited=\"true\"","：启用控制范围限制。",[38,106301,106302],{},"简单理解：",[83,106304,106307],{"className":106305,"code":106306,"language":5166,"meta":10},[5164],"实际施加效果 ≈ data.ctrl[0] * gear\n",[88,106308,106306],{"__ignoreMap":10},[38,106310,106311],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[33,106313,101228],{"id":101227},[83,106315,106317],{"className":30353,"code":106316,"language":30355,"meta":10,"style":10},"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",[88,106318,106319,106326,106330,106336,106346,106350,106354,106362,106367,106372,106376,106380,106385,106390,106394,106399,106404,106409,106414,106418,106422,106426,106431,106436,106441,106445,106449,106453,106457,106469,106481,106489,106493,106503,106513,106523,106527,106540,106553,106557,106574,106588,106623,106627,106631,106642,106657,106672,106684,106688,106692,106704],{"__ignoreMap":10},[91,106320,106321,106323],{"class":93,"line":94},[91,106322,30367],{"class":97},[91,106324,106325],{"class":101}," math\n",[91,106327,106328],{"class":93,"line":11},[91,106329,2378],{"emptyLinePlaceholder":17},[91,106331,106332,106334],{"class":93,"line":1157},[91,106333,30367],{"class":97},[91,106335,101276],{"class":101},[91,106337,106338,106340,106342,106344],{"class":93,"line":1172},[91,106339,30367],{"class":97},[91,106341,31355],{"class":101},[91,106343,31358],{"class":97},[91,106345,31361],{"class":101},[91,106347,106348],{"class":93,"line":1178},[91,106349,2378],{"emptyLinePlaceholder":17},[91,106351,106352],{"class":93,"line":1192},[91,106353,2378],{"emptyLinePlaceholder":17},[91,106355,106356,106358,106360],{"class":93,"line":1198},[91,106357,101289],{"class":150},[91,106359,13543],{"class":97},[91,106361,101294],{"class":206},[91,106363,106364],{"class":93,"line":1289},[91,106365,106366],{"class":206},"\u003Cmujoco model=\"one_link_motor\">\n",[91,106368,106369],{"class":93,"line":1295},[91,106370,106371],{"class":206},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[91,106373,106374],{"class":93,"line":1307},[91,106375,2378],{"emptyLinePlaceholder":17},[91,106377,106378],{"class":93,"line":1590},[91,106379,101313],{"class":206},[91,106381,106382],{"class":93,"line":1595},[91,106383,106384],{"class":206},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[91,106386,106387],{"class":93,"line":1601},[91,106388,106389],{"class":206},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[91,106391,106392],{"class":93,"line":1606},[91,106393,2378],{"emptyLinePlaceholder":17},[91,106395,106396],{"class":93,"line":1620},[91,106397,106398],{"class":206},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[91,106400,106401],{"class":93,"line":1625},[91,106402,106403],{"class":206},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,106405,106406],{"class":93,"line":1631},[91,106407,106408],{"class":206},"        \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",[91,106410,106411],{"class":93,"line":1652},[91,106412,106413],{"class":206},"      \u003C\u002Fbody>\n",[91,106415,106416],{"class":93,"line":1657},[91,106417,101342],{"class":206},[91,106419,106420],{"class":93,"line":1671},[91,106421,101347],{"class":206},[91,106423,106424],{"class":93,"line":1676},[91,106425,2378],{"emptyLinePlaceholder":17},[91,106427,106428],{"class":93,"line":1705},[91,106429,106430],{"class":206},"  \u003Cactuator>\n",[91,106432,106433],{"class":93,"line":1710},[91,106434,106435],{"class":206},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[91,106437,106438],{"class":93,"line":1727},[91,106439,106440],{"class":206},"  \u003C\u002Factuator>\n",[91,106442,106443],{"class":93,"line":1732},[91,106444,101352],{"class":206},[91,106446,106447],{"class":93,"line":1737},[91,106448,95673],{"class":206},[91,106450,106451],{"class":93,"line":1742},[91,106452,2378],{"emptyLinePlaceholder":17},[91,106454,106455],{"class":93,"line":1756},[91,106456,2378],{"emptyLinePlaceholder":17},[91,106458,106459,106461,106463,106465,106467],{"class":93,"line":1761},[91,106460,31922],{"class":97},[91,106462,1951],{"class":1941},[91,106464,101373],{"class":101},[91,106466,95661],{"class":150},[91,106468,3717],{"class":101},[91,106470,106471,106473,106475,106477,106479],{"class":93,"line":2555},[91,106472,101382],{"class":101},[91,106474,147],{"class":97},[91,106476,101387],{"class":101},[91,106478,101289],{"class":150},[91,106480,108],{"class":101},[91,106482,106483,106485,106487],{"class":93,"line":2569},[91,106484,101396],{"class":101},[91,106486,147],{"class":97},[91,106488,101401],{"class":101},[91,106490,106491],{"class":93,"line":2577},[91,106492,2378],{"emptyLinePlaceholder":17},[91,106494,106495,106497,106499,106501],{"class":93,"line":2582},[91,106496,31274],{"class":150},[91,106498,102],{"class":101},[91,106500,101414],{"class":206},[91,106502,101417],{"class":101},[91,106504,106505,106507,106509,106511],{"class":93,"line":2588},[91,106506,31274],{"class":150},[91,106508,102],{"class":101},[91,106510,101426],{"class":206},[91,106512,101429],{"class":101},[91,106514,106515,106517,106519,106521],{"class":93,"line":2594},[91,106516,31274],{"class":150},[91,106518,102],{"class":101},[91,106520,101438],{"class":206},[91,106522,101441],{"class":101},[91,106524,106525],{"class":93,"line":2599},[91,106526,2378],{"emptyLinePlaceholder":17},[91,106528,106529,106531,106534,106536,106538],{"class":93,"line":7927},[91,106530,3079],{"class":97},[91,106532,106533],{"class":101}," model.nu ",[91,106535,20927],{"class":97},[91,106537,25093],{"class":150},[91,106539,3717],{"class":101},[91,106541,106542,106544,106546,106548,106551],{"class":93,"line":7951},[91,106543,103407],{"class":97},[91,106545,103410],{"class":150},[91,106547,102],{"class":101},[91,106549,106550],{"class":206},"\"expected exactly one actuator\"",[91,106552,108],{"class":101},[91,106554,106555],{"class":93,"line":7956},[91,106556,2378],{"emptyLinePlaceholder":17},[91,106558,106559,106561,106563,106565,106567,106569,106572],{"class":93,"line":7962},[91,106560,3179],{"class":97},[91,106562,31591],{"class":101},[91,106564,26018],{"class":97},[91,106566,32418],{"class":150},[91,106568,102],{"class":101},[91,106570,106571],{"class":150},"2000",[91,106573,30761],{"class":101},[91,106575,106576,106579,106581,106583,106585],{"class":93,"line":7989},[91,106577,106578],{"class":101},"        t ",[91,106580,147],{"class":97},[91,106582,31591],{"class":101},[91,106584,557],{"class":97},[91,106586,106587],{"class":101}," model.opt.timestep\n",[91,106589,106590,106593,106595,106597,106599,106602,106604,106607,106609,106611,106614,106616,106618,106620],{"class":93,"line":7994},[91,106591,106592],{"class":101},"        data.ctrl[",[91,106594,293],{"class":150},[91,106596,4421],{"class":101},[91,106598,147],{"class":97},[91,106600,106601],{"class":150}," 1.5",[91,106603,6497],{"class":97},[91,106605,106606],{"class":101}," math.sin(",[91,106608,105235],{"class":150},[91,106610,6497],{"class":97},[91,106612,106613],{"class":101}," math.pi ",[91,106615,557],{"class":97},[91,106617,61842],{"class":150},[91,106619,6497],{"class":97},[91,106621,106622],{"class":101}," t)\n",[91,106624,106625],{"class":93,"line":8000},[91,106626,101491],{"class":101},[91,106628,106629],{"class":93,"line":8012},[91,106630,2378],{"emptyLinePlaceholder":17},[91,106632,106633,106635,106637,106640],{"class":93,"line":8024},[91,106634,31274],{"class":150},[91,106636,102],{"class":101},[91,106638,106639],{"class":206},"\"time:\"",[91,106641,101453],{"class":101},[91,106643,106644,106646,106648,106651,106653,106655],{"class":93,"line":8036},[91,106645,31274],{"class":150},[91,106647,102],{"class":101},[91,106649,106650],{"class":206},"\"joint qpos:\"",[91,106652,104905],{"class":101},[91,106654,395],{"class":150},[91,106656,30472],{"class":101},[91,106658,106659,106661,106663,106666,106668,106670],{"class":93,"line":9695},[91,106660,31274],{"class":150},[91,106662,102],{"class":101},[91,106664,106665],{"class":206},"\"joint qvel:\"",[91,106667,104921],{"class":101},[91,106669,395],{"class":150},[91,106671,30472],{"class":101},[91,106673,106674,106676,106678,106681],{"class":93,"line":9720},[91,106675,31274],{"class":150},[91,106677,102],{"class":101},[91,106679,106680],{"class":206},"\"last ctrl:\"",[91,106682,106683],{"class":101},", data.ctrl.copy())\n",[91,106685,106686],{"class":93,"line":9743},[91,106687,2378],{"emptyLinePlaceholder":17},[91,106689,106690],{"class":93,"line":9767},[91,106691,2378],{"emptyLinePlaceholder":17},[91,106693,106694,106696,106698,106700,106702],{"class":93,"line":9772},[91,106695,1509],{"class":97},[91,106697,31195],{"class":150},[91,106699,101534],{"class":97},[91,106701,101537],{"class":206},[91,106703,3717],{"class":101},[91,106705,106706],{"class":93,"line":9777},[91,106707,101544],{"class":101},[38,106709,103545],{},[83,106711,106713],{"className":23796,"code":106712,"language":23798,"meta":10,"style":10},"touch ch4_joint_motor.py\n",[88,106714,106715],{"__ignoreMap":10},[91,106716,106717,106719],{"class":93,"line":94},[91,106718,101258],{"class":1941},[91,106720,106721],{"class":206}," ch4_joint_motor.py\n",[38,106723,102276],{},[83,106725,106727],{"className":23796,"code":106726,"language":23798,"meta":10,"style":10},"python ch4_joint_motor.py\n",[88,106728,106729],{"__ignoreMap":10},[91,106730,106731,106733],{"class":93,"line":94},[91,106732,30355],{"class":1941},[91,106734,106721],{"class":206},[63,106736,101547],{"id":101547},[38,106738,106739],{},"检查 actuator 数量：",[83,106741,106743],{"className":30353,"code":106742,"language":30355,"meta":10,"style":10},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[88,106744,106745,106757],{"__ignoreMap":10},[91,106746,106747,106749,106751,106753,106755],{"class":93,"line":94},[91,106748,1509],{"class":97},[91,106750,106533],{"class":101},[91,106752,20927],{"class":97},[91,106754,25093],{"class":150},[91,106756,3717],{"class":101},[91,106758,106759,106761,106763,106765,106767],{"class":93,"line":11},[91,106760,103870],{"class":97},[91,106762,103410],{"class":150},[91,106764,102],{"class":101},[91,106766,106550],{"class":206},[91,106768,108],{"class":101},[38,106770,106771,106773,106774,106776],{},[88,106772,102133],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[88,106775,101051],{}," 长度应该是 1。",[38,106778,106779],{},"产生正弦控制信号：",[83,106781,106783],{"className":30353,"code":106782,"language":30355,"meta":10,"style":10},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[88,106784,106785],{"__ignoreMap":10},[91,106786,106787,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813],{"class":93,"line":94},[91,106788,105846],{"class":101},[91,106790,293],{"class":150},[91,106792,4421],{"class":101},[91,106794,147],{"class":97},[91,106796,106601],{"class":150},[91,106798,6497],{"class":97},[91,106800,106606],{"class":101},[91,106802,105235],{"class":150},[91,106804,6497],{"class":97},[91,106806,106613],{"class":101},[91,106808,557],{"class":97},[91,106810,61842],{"class":150},[91,106812,6497],{"class":97},[91,106814,106622],{"class":101},[38,106816,106817],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[38,106819,101648],{},[83,106821,106822],{"className":30353,"code":104480,"language":30355,"meta":10,"style":10},[88,106823,106824],{"__ignoreMap":10},[91,106825,106826],{"class":93,"line":94},[91,106827,104480],{"class":101},[38,106829,106830],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[63,106832,101683],{"id":101683},[83,106834,106836],{"className":30353,"code":106835,"language":30355,"meta":10,"style":10},"import math\n",[88,106837,106838],{"__ignoreMap":10},[91,106839,106840,106842],{"class":93,"line":94},[91,106841,30367],{"class":97},[91,106843,106325],{"class":101},[38,106845,106846,106847,100993,106850,106853],{},"导入 Python 标准库里的数学模块。后面要用 ",[88,106848,106849],{},"math.sin",[88,106851,106852],{},"math.pi"," 生成周期变化的控制信号。",[83,106855,106856],{"className":30353,"code":103661,"language":30355,"meta":10,"style":10},[88,106857,106858,106864],{"__ignoreMap":10},[91,106859,106860,106862],{"class":93,"line":94},[91,106861,30367],{"class":97},[91,106863,101276],{"class":101},[91,106865,106866,106868,106870,106872],{"class":93,"line":11},[91,106867,30367],{"class":97},[91,106869,31355],{"class":101},[91,106871,31358],{"class":97},[91,106873,31361],{"class":101},[38,106875,106876],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[83,106878,106879],{"className":53042,"code":106162,"language":53044,"meta":10,"style":10},[88,106880,106881],{"__ignoreMap":10},[91,106882,106883,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911],{"class":93,"line":94},[91,106884,1012],{"class":101},[91,106886,102931],{"class":51275},[91,106888,14899],{"class":1941},[91,106890,147],{"class":101},[91,106892,105994],{"class":206},[91,106894,53799],{"class":1941},[91,106896,147],{"class":101},[91,106898,105994],{"class":206},[91,106900,106003],{"class":1941},[91,106902,147],{"class":101},[91,106904,106008],{"class":206},[91,106906,106191],{"class":1941},[91,106908,147],{"class":101},[91,106910,106196],{"class":206},[91,106912,101119],{"class":101},[38,106914,106915,106916,106918,106919,106921,106922,106924],{},"这行定义关节。",[88,106917,105815],{}," 表示旋转关节。",[88,106920,106214],{}," 表示绕 y 轴旋转。",[88,106923,106220],{}," 表示有一点阻尼，运动不会完全无损耗。",[83,106926,106928],{"className":53042,"code":106927,"language":53044,"meta":10,"style":10},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[88,106929,106930],{"__ignoreMap":10},[91,106931,106932,106934,106936,106938,106940,106943,106945,106947,106950,106953,106955,106958,106960,106962,106964,106966,106968,106971],{"class":93,"line":94},[91,106933,1012],{"class":101},[91,106935,101095],{"class":51275},[91,106937,14899],{"class":1941},[91,106939,147],{"class":101},[91,106941,106942],{"class":206},"\"link_geom\"",[91,106944,53799],{"class":1941},[91,106946,147],{"class":101},[91,106948,106949],{"class":206},"\"capsule\"",[91,106951,106952],{"class":1941}," fromto",[91,106954,147],{"class":101},[91,106956,106957],{"class":206},"\"0 0 0 0 0 0.5\"",[91,106959,101111],{"class":1941},[91,106961,147],{"class":101},[91,106963,103753],{"class":206},[91,106965,101976],{"class":1941},[91,106967,147],{"class":101},[91,106969,106970],{"class":206},"\"0.5\"",[91,106972,101119],{"class":101},[38,106974,106975,106976,106978,106979,106981,106982,106985,106986,28360,106989,106991],{},"这行定义摆杆的形状。",[88,106977,103140],{}," 是胶囊体，适合表示杆子。",[88,106980,103151],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[88,106983,106984],{},"(0,0,0)"," 延伸到 ",[88,106987,106988],{},"(0,0,0.5)",[88,106990,103145],{}," 是半径。",[83,106993,106994],{"className":53042,"code":106228,"language":53044,"meta":10,"style":10},[88,106995,106996],{"__ignoreMap":10},[91,106997,106998,107000,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032],{"class":93,"line":94},[91,106999,1012],{"class":101},[91,107001,106049],{"class":51275},[91,107003,14899],{"class":1941},[91,107005,147],{"class":101},[91,107007,106056],{"class":206},[91,107009,106059],{"class":1941},[91,107011,147],{"class":101},[91,107013,105994],{"class":206},[91,107015,106066],{"class":1941},[91,107017,147],{"class":101},[91,107019,3656],{"class":206},[91,107021,106073],{"class":1941},[91,107023,147],{"class":101},[91,107025,106078],{"class":206},[91,107027,106081],{"class":1941},[91,107029,147],{"class":101},[91,107031,106086],{"class":206},[91,107033,101119],{"class":101},[38,107035,107036,107037,107039,107040,107043,107044,107046],{},"这行定义电机。它作用在 ",[88,107038,105815],{}," 关节上。",[88,107041,107042],{},"gear"," 可以理解成放大倍数。",[88,107045,105830],{}," 限制控制输入范围。",[83,107048,107049],{"className":30353,"code":106742,"language":30355,"meta":10,"style":10},[88,107050,107051,107063],{"__ignoreMap":10},[91,107052,107053,107055,107057,107059,107061],{"class":93,"line":94},[91,107054,1509],{"class":97},[91,107056,106533],{"class":101},[91,107058,20927],{"class":97},[91,107060,25093],{"class":150},[91,107062,3717],{"class":101},[91,107064,107065,107067,107069,107071,107073],{"class":93,"line":11},[91,107066,103870],{"class":97},[91,107068,103410],{"class":150},[91,107070,102],{"class":101},[91,107072,106550],{"class":206},[91,107074,108],{"class":101},[38,107076,107077,107079],{},[88,107078,102133],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[83,107081,107083],{"className":30353,"code":107082,"language":30355,"meta":10,"style":10},"for step in range(2000):\n",[88,107084,107085],{"__ignoreMap":10},[91,107086,107087,107089,107091,107093,107095,107097,107099],{"class":93,"line":94},[91,107088,3003],{"class":97},[91,107090,31591],{"class":101},[91,107092,26018],{"class":97},[91,107094,32418],{"class":150},[91,107096,102],{"class":101},[91,107098,106571],{"class":150},[91,107100,30761],{"class":101},[38,107102,107103,107104,107106,107107,107110],{},"循环 2000 步。这里没有用 ",[88,107105,1094],{},"，而是用 ",[88,107108,107109],{},"step","，因为后面要用当前步数计算时间。",[83,107112,107114],{"className":30353,"code":107113,"language":30355,"meta":10,"style":10},"t = step * model.opt.timestep\n",[88,107115,107116],{"__ignoreMap":10},[91,107117,107118,107121,107123,107125,107127],{"class":93,"line":94},[91,107119,107120],{"class":101},"t ",[91,107122,147],{"class":97},[91,107124,31591],{"class":101},[91,107126,557],{"class":97},[91,107128,106587],{"class":101},[38,107130,107131],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[83,107133,107134],{"className":30353,"code":106782,"language":30355,"meta":10,"style":10},[88,107135,107136],{"__ignoreMap":10},[91,107137,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164],{"class":93,"line":94},[91,107139,105846],{"class":101},[91,107141,293],{"class":150},[91,107143,4421],{"class":101},[91,107145,147],{"class":97},[91,107147,106601],{"class":150},[91,107149,6497],{"class":97},[91,107151,106606],{"class":101},[91,107153,105235],{"class":150},[91,107155,6497],{"class":97},[91,107157,106613],{"class":101},[91,107159,557],{"class":97},[91,107161,61842],{"class":150},[91,107163,6497],{"class":97},[91,107165,106622],{"class":101},[38,107167,107168],{},"这行给电机输入一个正弦波。拆开看：",[46,107170,107171,107177,107183],{},[49,107172,107173,107176],{},[88,107174,107175],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[49,107178,107179,107182],{},[88,107180,107181],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[49,107184,107185,107188],{},[88,107186,107187],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[38,107190,107191],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[83,107193,107195],{"className":30353,"code":107194,"language":30355,"meta":10,"style":10},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[88,107196,107197],{"__ignoreMap":10},[91,107198,107199,107201,107203,107205,107207,107209],{"class":93,"line":94},[91,107200,30390],{"class":150},[91,107202,102],{"class":101},[91,107204,106650],{"class":206},[91,107206,104905],{"class":101},[91,107208,395],{"class":150},[91,107210,30472],{"class":101},[38,107212,107213,107214,107216],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[88,107215,101045],{}," 只有一个数。",[33,107218,102291],{"id":102290},[38,107220,107221],{},"输出类似:",[83,107223,107226],{"className":107224,"code":107225,"language":5166,"meta":10},[5164],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[88,107227,107225],{"__ignoreMap":10},[38,107229,107230,107231,107233],{},"这里 ",[88,107232,106101],{}," 是电机输入。",[38,107235,107236,107239,107240,107243],{},[88,107237,107238],{},"joint qpos"," 是关节角度，单位通常是弧度。",[88,107241,107242],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[38,107245,107246],{},"角度单位提示：",[83,107248,107251],{"className":107249,"code":107250,"language":5166,"meta":10},[5164],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[88,107252,107250],{"__ignoreMap":10},[38,107254,107255,107256,107258,107259,107261],{},"如果你看到 ",[88,107257,104005],{}," 是 ",[88,107260,35304],{},"，大约就是 28.6 度。",[33,107263,102323],{"id":102322},[46,107265,107266,107273,107276,107283,107286,107294,107302],{},[49,107267,102386,107268,102389,107270,28360],{},[88,107269,106286],{},[88,107271,107272],{},"gear=\"5\"",[49,107274,107275],{},"重新运行，观察关节运动是否更剧烈。",[49,107277,102386,107278,102389,107280,28360],{},[88,107279,105830],{},[88,107281,107282],{},"-0.2 0.2",[49,107284,107285],{},"重新运行，观察控制能力是否变弱。",[49,107287,107288,107289,107291,107292,28360],{},"去掉 actuator，确认 ",[88,107290,102133],{}," 变成 ",[88,107293,293],{},[49,107295,102386,107296,102389,107298,107301],{},[88,107297,106220],{},[88,107299,107300],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[49,107303,102386,107304,102389,107306,107309],{},[88,107305,106214],{},[88,107307,107308],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[33,107311,102428],{"id":102427},[63,107313,107315],{"id":107314},"indexerror-index-0-is-out-of-bounds",[88,107316,107317],{},"IndexError: index 0 is out of bounds",[38,107319,107320,107321,107323],{},"原因是 ",[88,107322,105967],{},"，没有 actuator。",[63,107325,107326],{"id":107326},"关节几乎不动",[38,107328,107329],{},"可能原因:",[46,107331,107332,107337,107341,107347],{},[49,107333,107334,107336],{},[88,107335,107042],{}," 太小",[49,107338,107339,107336],{},[88,107340,105830],{},[49,107342,107343,107346],{},[88,107344,107345],{},"damping"," 太大",[49,107348,107349],{},"重力方向导致运动不明显",[63,107351,107352],{"id":107352},"模型编译失败",[38,107354,107355,107356,107358],{},"检查 actuator 引用的 ",[88,107357,106277],{}," 是否存在，joint 名称是否拼写一致。",[63,107360,107362,107364],{"id":107361},"datactrl0-写了但没有效果",[88,107363,106101],{}," 写了但没有效果",[38,107366,102550],{},[46,107368,107369,107374,107377,107382,107387],{},[49,107370,107371,107373],{},[88,107372,102133],{}," 是否大于 0。",[49,107375,107376],{},"motor 是否引用了正确 joint。",[49,107378,107379,107381],{},[88,107380,107042],{}," 是否太小。",[49,107383,107384,107386],{},[88,107385,105830],{}," 是否把输入限制得太小。",[49,107388,107389],{},"body 是否真的有可动 joint。",[63,107391,107392],{"id":107392},"控制输入超过范围会怎样",[38,107394,107395],{},"如果设置了：",[83,107397,107399],{"className":53042,"code":107398,"language":53044,"meta":10,"style":10},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[88,107400,107401],{"__ignoreMap":10},[91,107402,107403],{"class":93,"line":94},[91,107404,107398],{"class":101},[38,107406,107407],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[83,107409,107411],{"className":30353,"code":107410,"language":30355,"meta":10,"style":10},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[88,107412,107413,107433],{"__ignoreMap":10},[91,107414,107415,107418,107420,107423,107425,107427,107429,107431],{"class":93,"line":94},[91,107416,107417],{"class":101},"action ",[91,107419,147],{"class":97},[91,107421,107422],{"class":101}," np.clip(action, ",[91,107424,634],{"class":97},[91,107426,105235],{"class":150},[91,107428,12414],{"class":101},[91,107430,105235],{"class":150},[91,107432,108],{"class":101},[91,107434,107435,107437,107439,107441,107443],{"class":93,"line":11},[91,107436,105846],{"class":101},[91,107438,293],{"class":150},[91,107440,4421],{"class":101},[91,107442,147],{"class":97},[91,107444,107445],{"class":101}," action\n",[33,107447,102582],{"id":102581},[38,107449,107450],{},"这一章建立了控制任务的基本形式：",[83,107452,107455],{"className":107453,"code":107454,"language":5166,"meta":10},[5164],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[88,107456,107454],{"__ignoreMap":10},[38,107458,107459],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5105,107461,107462],{},"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":10,"searchDepth":11,"depth":11,"links":107464},[107465,107466,107467,107472,107476,107477,107478,107486],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":107468},[107469,107470,107471],{"id":106108,"depth":1157,"text":106109},{"id":106158,"depth":1157,"text":106159},{"id":106224,"depth":1157,"text":106225},{"id":101227,"depth":11,"text":101228,"children":107473},[107474,107475],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":107479},[107480,107481,107482,107483,107485],{"id":107314,"depth":1157,"text":107317},{"id":107326,"depth":1157,"text":107326},{"id":107352,"depth":1157,"text":107352},{"id":107361,"depth":1157,"text":107484},"data.ctrl[0] 写了但没有效果",{"id":107392,"depth":1157,"text":107392},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105796,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107493,"title":107494,"body":107495,"description":10,"extension":14,"meta":109404,"navigation":17,"path":109405,"seo":109406,"stem":109407,"__hash__":109408},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107496,"toc":109380},[107497,107500,107502,107505,107513,107516,107533,107536,107561,107564,107610,107612,107614,107669,107671,107690,107692,107735,107738,107755,107758,107774,107784,107791,107793,107796,107799,107833,107836,107884,107888,107891,107905,107914,107918,107921,107946,107949,107953,107966,107969,107975,107978,107993,107995,107998,108258,108260,108272,108275,108587,108589,108601,108603,108606,108621,108626,108629,108651,108654,108657,108691,108694,108698,108709,108712,108729,108732,108746,108753,108773,108780,108794,108797,108809,108824,108844,108847,108869,108872,108876,108891,108902,108917,108920,108950,108966,108995,109003,109027,109030,109048,109058,109070,109077,109086,109092,109101,109104,109106,109115,109118,109133,109135,109138,109149,109152,109163,109166,109184,109186,109203,109206,109234,109236,109240,109243,109273,109279,109282,109286,109294,109297,109299,109320,109323,109326,109342,109345,109361,109363,109366,109377],[29,107498,107494],{"id":107499},"_5viewer-可视化与-renderer-离屏渲染",[33,107501,100622],{"id":100621},[38,107503,107504],{},"本章掌握两类可视化方式:",[46,107506,107507,107510],{},[49,107508,107509],{},"交互式 viewer: 适合人工观察仿真",[49,107511,107512],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[38,107514,107515],{},"使用官方接口:",[83,107517,107519],{"className":30353,"code":107518,"language":30355,"meta":10,"style":10},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[88,107520,107521,107528],{"__ignoreMap":10},[91,107522,107523,107525],{"class":93,"line":94},[91,107524,30367],{"class":97},[91,107526,107527],{"class":101}," mujoco.viewer\n",[91,107529,107530],{"class":93,"line":11},[91,107531,107532],{"class":101},"mujoco.viewer.launch_passive(model, data)\n",[38,107534,107535],{},"以及:",[83,107537,107539],{"className":30353,"code":107538,"language":30355,"meta":10,"style":10},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[88,107540,107541,107551],{"__ignoreMap":10},[91,107542,107543,107546,107548],{"class":93,"line":94},[91,107544,107545],{"class":101},"renderer ",[91,107547,147],{"class":97},[91,107549,107550],{"class":101}," mujoco.Renderer(model)\n",[91,107552,107553,107556,107558],{"class":93,"line":11},[91,107554,107555],{"class":101},"image ",[91,107557,147],{"class":97},[91,107559,107560],{"class":101}," renderer.render()\n",[38,107562,107563],{},"新手建议先理解二者区别：",[239,107565,107566,107582],{},[242,107567,107568],{},[245,107569,107570,107573,107576,107579],{},[248,107571,107572],{"align":23710},"工具",[248,107574,107575],{"align":23710},"用途",[248,107577,107578],{"align":23710},"是否打开窗口",[248,107580,107581],{"align":23710},"常见场景",[286,107583,107584,107597],{},[245,107585,107586,107589,107592,107594],{},[291,107587,107588],{"align":23710},"Viewer",[291,107590,107591],{"align":23710},"人眼实时观察仿真",[291,107593,104640],{"align":23710},[291,107595,107596],{"align":23710},"调试模型、看控制效果",[245,107598,107599,107602,107605,107607],{},[291,107600,107601],{"align":23710},"Renderer",[291,107603,107604],{"align":23710},"生成图像数组",[291,107606,104653],{"align":23710},[291,107608,107609],{"align":23710},"保存图片、训练视觉策略、服务器批量采集",[33,107611,100745],{"id":100744},[38,107613,100748],{},[83,107615,107617],{"className":23796,"code":107616,"language":23798,"meta":10,"style":10},"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",[88,107618,107619,107631,107641,107649,107657],{"__ignoreMap":10},[91,107620,107621,107623,107625,107627,107629],{"class":93,"line":94},[91,107622,24551],{"class":1941},[91,107624,26290],{"class":206},[91,107626,23808],{"class":206},[91,107628,26375],{"class":150},[91,107630,24653],{"class":150},[91,107632,107633,107635,107637,107639],{"class":93,"line":11},[91,107634,100783],{"class":206},[91,107636,100786],{"class":206},[91,107638,100789],{"class":206},[91,107640,24653],{"class":150},[91,107642,107643,107645,107647],{"class":93,"line":1157},[91,107644,100796],{"class":206},[91,107646,100799],{"class":206},[91,107648,24653],{"class":150},[91,107650,107651,107653,107655],{"class":93,"line":1172},[91,107652,100806],{"class":206},[91,107654,100809],{"class":206},[91,107656,24653],{"class":150},[91,107658,107659,107661,107663,107665,107667],{"class":93,"line":1178},[91,107660,100816],{"class":206},[91,107662,100819],{"class":206},[91,107664,100822],{"class":206},[91,107666,100825],{"class":206},[91,107668,102491],{"class":206},[38,107670,102794],{},[83,107672,107674],{"className":23796,"code":107673,"language":23798,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy pillow\n",[88,107675,107676],{"__ignoreMap":10},[91,107677,107678,107680,107682,107684,107687],{"class":93,"line":94},[91,107679,23805],{"class":1941},[91,107681,23808],{"class":206},[91,107683,100905],{"class":206},[91,107685,107686],{"class":206}," numpy",[91,107688,107689],{"class":206}," pillow\n",[38,107691,102811],{},[83,107693,107695],{"className":23796,"code":107694,"language":23798,"meta":10,"style":10},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[88,107696,107697,107714,107723],{"__ignoreMap":10},[91,107698,107699,107701,107703,107705,107708,107710,107712],{"class":93,"line":94},[91,107700,30305],{"class":1941},[91,107702,29151],{"class":206},[91,107704,25090],{"class":150},[91,107706,107707],{"class":206}," mujoco-render",[91,107709,100950],{"class":206},[91,107711,100953],{"class":150},[91,107713,100956],{"class":150},[91,107715,107716,107718,107720],{"class":93,"line":11},[91,107717,30305],{"class":1941},[91,107719,100963],{"class":206},[91,107721,107722],{"class":206}," mujoco-render\n",[91,107724,107725,107727,107729,107731,107733],{"class":93,"line":1157},[91,107726,23805],{"class":1941},[91,107728,23808],{"class":206},[91,107730,100905],{"class":206},[91,107732,107686],{"class":206},[91,107734,107689],{"class":206},[38,107736,107737],{},"离屏渲染后端:",[83,107739,107741],{"className":23796,"code":107740,"language":23798,"meta":10,"style":10},"export MUJOCO_GL=egl\n",[88,107742,107743],{"__ignoreMap":10},[91,107744,107745,107747,107750,107752],{"class":93,"line":94},[91,107746,25017],{"class":97},[91,107748,107749],{"class":101}," MUJOCO_GL",[91,107751,147],{"class":97},[91,107753,107754],{"class":101},"egl\n",[38,107756,107757],{},"或:",[83,107759,107761],{"className":23796,"code":107760,"language":23798,"meta":10,"style":10},"export MUJOCO_GL=osmesa\n",[88,107762,107763],{"__ignoreMap":10},[91,107764,107765,107767,107769,107771],{"class":93,"line":94},[91,107766,25017],{"class":97},[91,107768,107749],{"class":101},[91,107770,147],{"class":97},[91,107772,107773],{"class":101},"osmesa\n",[38,107775,107776,107777,107780,107781,28360],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[88,107778,107779],{},"egl"," 失败，再尝试 ",[88,107782,107783],{},"osmesa",[38,107785,107786,107787,107790],{},"如果你在本机桌面环境运行，通常先不要设置 ",[88,107788,107789],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[33,107792,101020],{"id":101019},[38,107794,107795],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[38,107797,107798],{},"典型 viewer 流程:",[83,107800,107802],{"className":30353,"code":107801,"language":30355,"meta":10,"style":10},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[88,107803,107804,107817,107824,107828],{"__ignoreMap":10},[91,107805,107806,107809,107812,107814],{"class":93,"line":94},[91,107807,107808],{"class":97},"with",[91,107810,107811],{"class":101}," mujoco.viewer.launch_passive(model, data) ",[91,107813,31358],{"class":97},[91,107815,107816],{"class":101}," viewer:\n",[91,107818,107819,107821],{"class":93,"line":11},[91,107820,2229],{"class":97},[91,107822,107823],{"class":101}," viewer.is_running():\n",[91,107825,107826],{"class":93,"line":1157},[91,107827,101491],{"class":101},[91,107829,107830],{"class":93,"line":1172},[91,107831,107832],{"class":101},"        viewer.sync()\n",[38,107834,107835],{},"典型 renderer 流程:",[83,107837,107839],{"className":30353,"code":107838,"language":30355,"meta":10,"style":10},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[88,107840,107841,107867,107871,107876],{"__ignoreMap":10},[91,107842,107843,107845,107847,107850,107852,107854,107856,107858,107860,107862,107865],{"class":93,"line":94},[91,107844,107545],{"class":101},[91,107846,147],{"class":97},[91,107848,107849],{"class":101}," mujoco.Renderer(model, ",[91,107851,24956],{"class":5195},[91,107853,147],{"class":97},[91,107855,42317],{"class":150},[91,107857,12414],{"class":101},[91,107859,24952],{"class":5195},[91,107861,147],{"class":97},[91,107863,107864],{"class":150},"640",[91,107866,108],{"class":101},[91,107868,107869],{"class":93,"line":11},[91,107870,104480],{"class":101},[91,107872,107873],{"class":93,"line":1157},[91,107874,107875],{"class":101},"renderer.update_scene(data)\n",[91,107877,107878,107880,107882],{"class":93,"line":1172},[91,107879,107555],{"class":101},[91,107881,147],{"class":97},[91,107883,107560],{"class":101},[63,107885,107887],{"id":107886},"viewer-的同步逻辑","viewer 的同步逻辑",[38,107889,107890],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[83,107892,107894],{"className":30353,"code":107893,"language":30355,"meta":10,"style":10},"mujoco.mj_step(model, data)\nviewer.sync()\n",[88,107895,107896,107900],{"__ignoreMap":10},[91,107897,107898],{"class":93,"line":94},[91,107899,104480],{"class":101},[91,107901,107902],{"class":93,"line":11},[91,107903,107904],{"class":101},"viewer.sync()\n",[38,107906,107907,107909,107910,107913],{},[88,107908,101190],{}," 负责算物理，",[88,107911,107912],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[63,107915,107917],{"id":107916},"为什么要-sleep","为什么要 sleep",[38,107919,107920],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[83,107922,107924],{"className":30353,"code":107923,"language":30355,"meta":10,"style":10},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[88,107925,107926],{"__ignoreMap":10},[91,107927,107928,107931,107933,107936,107938,107941,107943],{"class":93,"line":94},[91,107929,107930],{"class":101},"sleep_time ",[91,107932,147],{"class":97},[91,107934,107935],{"class":101}," model.opt.timestep ",[91,107937,634],{"class":97},[91,107939,107940],{"class":101}," (time.time() ",[91,107942,634],{"class":97},[91,107944,107945],{"class":101}," step_start)\n",[38,107947,107948],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[63,107950,107952],{"id":107951},"renderer-输出是什么","renderer 输出是什么",[83,107954,107956],{"className":30353,"code":107955,"language":30355,"meta":10,"style":10},"image = renderer.render()\n",[88,107957,107958],{"__ignoreMap":10},[91,107959,107960,107962,107964],{"class":93,"line":94},[91,107961,107555],{"class":101},[91,107963,147],{"class":97},[91,107965,107560],{"class":101},[38,107967,107968],{},"得到的是 NumPy 数组，形状通常是：",[83,107970,107973],{"className":107971,"code":107972,"language":5166,"meta":10},[5164],"(height, width, 3)\n",[88,107974,107972],{"__ignoreMap":10},[38,107976,107977],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[83,107979,107981],{"className":30353,"code":107980,"language":30355,"meta":10,"style":10},"Image.fromarray(image).save(\"render_output.png\")\n",[88,107982,107983],{"__ignoreMap":10},[91,107984,107985,107988,107991],{"class":93,"line":94},[91,107986,107987],{"class":101},"Image.fromarray(image).save(",[91,107989,107990],{"class":206},"\"render_output.png\"",[91,107992,108],{"class":101},[33,107994,101228],{"id":101227},[38,107996,107997],{},"交互式 Viewer:",[83,107999,108001],{"className":30353,"code":108000,"language":30355,"meta":10,"style":10},"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",[88,108002,108003,108009,108013,108019,108025,108029,108033,108041,108046,108050,108054,108058,108063,108068,108072,108076,108080,108085,108089,108093,108097,108101,108105,108109,108121,108133,108141,108145,108155,108175,108185,108190,108195,108199,108216,108229,108234,108238,108242,108254],{"__ignoreMap":10},[91,108004,108005,108007],{"class":93,"line":94},[91,108006,30367],{"class":97},[91,108008,31804],{"class":101},[91,108010,108011],{"class":93,"line":11},[91,108012,2378],{"emptyLinePlaceholder":17},[91,108014,108015,108017],{"class":93,"line":1157},[91,108016,30367],{"class":97},[91,108018,101276],{"class":101},[91,108020,108021,108023],{"class":93,"line":1172},[91,108022,30367],{"class":97},[91,108024,107527],{"class":101},[91,108026,108027],{"class":93,"line":1178},[91,108028,2378],{"emptyLinePlaceholder":17},[91,108030,108031],{"class":93,"line":1192},[91,108032,2378],{"emptyLinePlaceholder":17},[91,108034,108035,108037,108039],{"class":93,"line":1198},[91,108036,101289],{"class":150},[91,108038,13543],{"class":97},[91,108040,101294],{"class":206},[91,108042,108043],{"class":93,"line":1289},[91,108044,108045],{"class":206},"\u003Cmujoco model=\"viewer_demo\">\n",[91,108047,108048],{"class":93,"line":1295},[91,108049,101304],{"class":206},[91,108051,108052],{"class":93,"line":1307},[91,108053,2378],{"emptyLinePlaceholder":17},[91,108055,108056],{"class":93,"line":1590},[91,108057,101313],{"class":206},[91,108059,108060],{"class":93,"line":1595},[91,108061,108062],{"class":206},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[91,108064,108065],{"class":93,"line":1601},[91,108066,108067],{"class":206},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,108069,108070],{"class":93,"line":1606},[91,108071,2378],{"emptyLinePlaceholder":17},[91,108073,108074],{"class":93,"line":1620},[91,108075,101327],{"class":206},[91,108077,108078],{"class":93,"line":1625},[91,108079,101332],{"class":206},[91,108081,108082],{"class":93,"line":1631},[91,108083,108084],{"class":206},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,108086,108087],{"class":93,"line":1652},[91,108088,101342],{"class":206},[91,108090,108091],{"class":93,"line":1657},[91,108092,101347],{"class":206},[91,108094,108095],{"class":93,"line":1671},[91,108096,101352],{"class":206},[91,108098,108099],{"class":93,"line":1676},[91,108100,95673],{"class":206},[91,108102,108103],{"class":93,"line":1705},[91,108104,2378],{"emptyLinePlaceholder":17},[91,108106,108107],{"class":93,"line":1710},[91,108108,2378],{"emptyLinePlaceholder":17},[91,108110,108111,108113,108115,108117,108119],{"class":93,"line":1727},[91,108112,31922],{"class":97},[91,108114,1951],{"class":1941},[91,108116,101373],{"class":101},[91,108118,95661],{"class":150},[91,108120,3717],{"class":101},[91,108122,108123,108125,108127,108129,108131],{"class":93,"line":1732},[91,108124,101382],{"class":101},[91,108126,147],{"class":97},[91,108128,101387],{"class":101},[91,108130,101289],{"class":150},[91,108132,108],{"class":101},[91,108134,108135,108137,108139],{"class":93,"line":1737},[91,108136,101396],{"class":101},[91,108138,147],{"class":97},[91,108140,101401],{"class":101},[91,108142,108143],{"class":93,"line":1742},[91,108144,2378],{"emptyLinePlaceholder":17},[91,108146,108147,108149,108151,108153],{"class":93,"line":1756},[91,108148,34153],{"class":97},[91,108150,107811],{"class":101},[91,108152,31358],{"class":97},[91,108154,107816],{"class":101},[91,108156,108157,108160,108163,108165,108168,108170,108173],{"class":93,"line":1761},[91,108158,108159],{"class":97},"        while",[91,108161,108162],{"class":101}," viewer.is_running() ",[91,108164,30437],{"class":97},[91,108166,108167],{"class":101}," data.time ",[91,108169,1012],{"class":97},[91,108171,108172],{"class":150}," 5.0",[91,108174,3717],{"class":101},[91,108176,108177,108180,108182],{"class":93,"line":2555},[91,108178,108179],{"class":101},"            step_start ",[91,108181,147],{"class":97},[91,108183,108184],{"class":101}," time.time()\n",[91,108186,108187],{"class":93,"line":2569},[91,108188,108189],{"class":101},"            mujoco.mj_step(model, data)\n",[91,108191,108192],{"class":93,"line":2577},[91,108193,108194],{"class":101},"            viewer.sync()\n",[91,108196,108197],{"class":93,"line":2582},[91,108198,2378],{"emptyLinePlaceholder":17},[91,108200,108201,108204,108206,108208,108210,108212,108214],{"class":93,"line":2588},[91,108202,108203],{"class":101},"            sleep_time ",[91,108205,147],{"class":97},[91,108207,107935],{"class":101},[91,108209,634],{"class":97},[91,108211,107940],{"class":101},[91,108213,634],{"class":97},[91,108215,107945],{"class":101},[91,108217,108218,108220,108223,108225,108227],{"class":93,"line":2594},[91,108219,4620],{"class":97},[91,108221,108222],{"class":101}," sleep_time ",[91,108224,1062],{"class":97},[91,108226,4071],{"class":150},[91,108228,3717],{"class":101},[91,108230,108231],{"class":93,"line":2599},[91,108232,108233],{"class":101},"                time.sleep(sleep_time)\n",[91,108235,108236],{"class":93,"line":7927},[91,108237,2378],{"emptyLinePlaceholder":17},[91,108239,108240],{"class":93,"line":7951},[91,108241,2378],{"emptyLinePlaceholder":17},[91,108243,108244,108246,108248,108250,108252],{"class":93,"line":7956},[91,108245,1509],{"class":97},[91,108247,31195],{"class":150},[91,108249,101534],{"class":97},[91,108251,101537],{"class":206},[91,108253,3717],{"class":101},[91,108255,108256],{"class":93,"line":7962},[91,108257,101544],{"class":101},[38,108259,103545],{},[83,108261,108263],{"className":23796,"code":108262,"language":23798,"meta":10,"style":10},"touch ch5_viewer.py\n",[88,108264,108265],{"__ignoreMap":10},[91,108266,108267,108269],{"class":93,"line":94},[91,108268,101258],{"class":1941},[91,108270,108271],{"class":206}," ch5_viewer.py\n",[38,108273,108274],{},"离屏 Renderer 保存图片:",[83,108276,108278],{"className":30353,"code":108277,"language":30355,"meta":10,"style":10},"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",[88,108279,108280,108292,108296,108302,108312,108316,108320,108328,108333,108337,108341,108345,108349,108354,108358,108362,108366,108370,108374,108378,108382,108386,108390,108394,108398,108410,108422,108430,108455,108459,108475,108479,108483,108498,108507,108511,108525,108530,108535,108539,108551,108563,108567,108571,108583],{"__ignoreMap":10},[91,108281,108282,108284,108287,108289],{"class":93,"line":94},[91,108283,30712],{"class":97},[91,108285,108286],{"class":101}," pathlib ",[91,108288,30367],{"class":97},[91,108290,108291],{"class":101}," Path\n",[91,108293,108294],{"class":93,"line":11},[91,108295,2378],{"emptyLinePlaceholder":17},[91,108297,108298,108300],{"class":93,"line":1157},[91,108299,30367],{"class":97},[91,108301,101276],{"class":101},[91,108303,108304,108306,108308,108310],{"class":93,"line":1172},[91,108305,30712],{"class":97},[91,108307,47238],{"class":150},[91,108309,47241],{"class":97},[91,108311,47244],{"class":101},[91,108313,108314],{"class":93,"line":1178},[91,108315,2378],{"emptyLinePlaceholder":17},[91,108317,108318],{"class":93,"line":1192},[91,108319,2378],{"emptyLinePlaceholder":17},[91,108321,108322,108324,108326],{"class":93,"line":1198},[91,108323,101289],{"class":150},[91,108325,13543],{"class":97},[91,108327,101294],{"class":206},[91,108329,108330],{"class":93,"line":1289},[91,108331,108332],{"class":206},"\u003Cmujoco model=\"renderer_demo\">\n",[91,108334,108335],{"class":93,"line":1295},[91,108336,101304],{"class":206},[91,108338,108339],{"class":93,"line":1307},[91,108340,2378],{"emptyLinePlaceholder":17},[91,108342,108343],{"class":93,"line":1590},[91,108344,101313],{"class":206},[91,108346,108347],{"class":93,"line":1595},[91,108348,108062],{"class":206},[91,108350,108351],{"class":93,"line":1601},[91,108352,108353],{"class":206},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[91,108355,108356],{"class":93,"line":1606},[91,108357,108067],{"class":206},[91,108359,108360],{"class":93,"line":1620},[91,108361,2378],{"emptyLinePlaceholder":17},[91,108363,108364],{"class":93,"line":1625},[91,108365,101327],{"class":206},[91,108367,108368],{"class":93,"line":1631},[91,108369,101332],{"class":206},[91,108371,108372],{"class":93,"line":1652},[91,108373,108084],{"class":206},[91,108375,108376],{"class":93,"line":1657},[91,108377,101342],{"class":206},[91,108379,108380],{"class":93,"line":1671},[91,108381,101347],{"class":206},[91,108383,108384],{"class":93,"line":1676},[91,108385,101352],{"class":206},[91,108387,108388],{"class":93,"line":1705},[91,108389,95673],{"class":206},[91,108391,108392],{"class":93,"line":1710},[91,108393,2378],{"emptyLinePlaceholder":17},[91,108395,108396],{"class":93,"line":1727},[91,108397,2378],{"emptyLinePlaceholder":17},[91,108399,108400,108402,108404,108406,108408],{"class":93,"line":1732},[91,108401,31922],{"class":97},[91,108403,1951],{"class":1941},[91,108405,101373],{"class":101},[91,108407,95661],{"class":150},[91,108409,3717],{"class":101},[91,108411,108412,108414,108416,108418,108420],{"class":93,"line":1737},[91,108413,101382],{"class":101},[91,108415,147],{"class":97},[91,108417,101387],{"class":101},[91,108419,101289],{"class":150},[91,108421,108],{"class":101},[91,108423,108424,108426,108428],{"class":93,"line":1742},[91,108425,101396],{"class":101},[91,108427,147],{"class":97},[91,108429,101401],{"class":101},[91,108431,108432,108435,108437,108439,108441,108443,108445,108447,108449,108451,108453],{"class":93,"line":1756},[91,108433,108434],{"class":101},"    renderer ",[91,108436,147],{"class":97},[91,108438,107849],{"class":101},[91,108440,24956],{"class":5195},[91,108442,147],{"class":97},[91,108444,42317],{"class":150},[91,108446,12414],{"class":101},[91,108448,24952],{"class":5195},[91,108450,147],{"class":97},[91,108452,107864],{"class":150},[91,108454,108],{"class":101},[91,108456,108457],{"class":93,"line":1761},[91,108458,2378],{"emptyLinePlaceholder":17},[91,108460,108461,108463,108465,108467,108469,108471,108473],{"class":93,"line":2555},[91,108462,3179],{"class":97},[91,108464,101476],{"class":101},[91,108466,26018],{"class":97},[91,108468,32418],{"class":150},[91,108470,102],{"class":101},[91,108472,413],{"class":150},[91,108474,30761],{"class":101},[91,108476,108477],{"class":93,"line":2569},[91,108478,101491],{"class":101},[91,108480,108481],{"class":93,"line":2577},[91,108482,2378],{"emptyLinePlaceholder":17},[91,108484,108485,108488,108491,108493,108496],{"class":93,"line":2582},[91,108486,108487],{"class":101},"    renderer.update_scene(data, ",[91,108489,108490],{"class":5195},"camera",[91,108492,147],{"class":97},[91,108494,108495],{"class":206},"\"fixed_camera\"",[91,108497,108],{"class":101},[91,108499,108500,108503,108505],{"class":93,"line":2588},[91,108501,108502],{"class":101},"    image ",[91,108504,147],{"class":97},[91,108506,107560],{"class":101},[91,108508,108509],{"class":93,"line":2594},[91,108510,2378],{"emptyLinePlaceholder":17},[91,108512,108513,108516,108518,108521,108523],{"class":93,"line":2599},[91,108514,108515],{"class":101},"    output_path ",[91,108517,147],{"class":97},[91,108519,108520],{"class":101}," Path(",[91,108522,107990],{"class":206},[91,108524,108],{"class":101},[91,108526,108527],{"class":93,"line":7927},[91,108528,108529],{"class":101},"    Image.fromarray(image).save(output_path)\n",[91,108531,108532],{"class":93,"line":7951},[91,108533,108534],{"class":101},"    renderer.close()\n",[91,108536,108537],{"class":93,"line":7956},[91,108538,2378],{"emptyLinePlaceholder":17},[91,108540,108541,108543,108545,108548],{"class":93,"line":7962},[91,108542,31274],{"class":150},[91,108544,102],{"class":101},[91,108546,108547],{"class":206},"\"saved:\"",[91,108549,108550],{"class":101},", output_path.resolve())\n",[91,108552,108553,108555,108557,108560],{"class":93,"line":7989},[91,108554,31274],{"class":150},[91,108556,102],{"class":101},[91,108558,108559],{"class":206},"\"image shape:\"",[91,108561,108562],{"class":101},", image.shape)\n",[91,108564,108565],{"class":93,"line":7994},[91,108566,2378],{"emptyLinePlaceholder":17},[91,108568,108569],{"class":93,"line":8000},[91,108570,2378],{"emptyLinePlaceholder":17},[91,108572,108573,108575,108577,108579,108581],{"class":93,"line":8012},[91,108574,1509],{"class":97},[91,108576,31195],{"class":150},[91,108578,101534],{"class":97},[91,108580,101537],{"class":206},[91,108582,3717],{"class":101},[91,108584,108585],{"class":93,"line":8024},[91,108586,101544],{"class":101},[38,108588,103545],{},[83,108590,108592],{"className":23796,"code":108591,"language":23798,"meta":10,"style":10},"touch ch5_renderer.py\n",[88,108593,108594],{"__ignoreMap":10},[91,108595,108596,108598],{"class":93,"line":94},[91,108597,101258],{"class":1941},[91,108599,108600],{"class":206}," ch5_renderer.py\n",[63,108602,101547],{"id":101547},[38,108604,108605],{},"viewer 上下文：",[83,108607,108609],{"className":30353,"code":108608,"language":30355,"meta":10,"style":10},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[88,108610,108611],{"__ignoreMap":10},[91,108612,108613,108615,108617,108619],{"class":93,"line":94},[91,108614,107808],{"class":97},[91,108616,107811],{"class":101},[91,108618,31358],{"class":97},[91,108620,107816],{"class":101},[38,108622,108623,108625],{},[88,108624,107808],{}," 语句会创建窗口，并在退出时自动清理资源。",[38,108627,108628],{},"窗口循环：",[83,108630,108632],{"className":30353,"code":108631,"language":30355,"meta":10,"style":10},"while viewer.is_running() and data.time \u003C 5.0:\n",[88,108633,108634],{"__ignoreMap":10},[91,108635,108636,108639,108641,108643,108645,108647,108649],{"class":93,"line":94},[91,108637,108638],{"class":97},"while",[91,108640,108162],{"class":101},[91,108642,30437],{"class":97},[91,108644,108167],{"class":101},[91,108646,1012],{"class":97},[91,108648,108172],{"class":150},[91,108650,3717],{"class":101},[38,108652,108653],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[38,108655,108656],{},"固定相机：",[83,108658,108660],{"className":53042,"code":108659,"language":53044,"meta":10,"style":10},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[88,108661,108662],{"__ignoreMap":10},[91,108663,108664,108666,108668,108670,108672,108674,108676,108678,108681,108684,108686,108689],{"class":93,"line":94},[91,108665,1012],{"class":101},[91,108667,108490],{"class":51275},[91,108669,14899],{"class":1941},[91,108671,147],{"class":101},[91,108673,108495],{"class":206},[91,108675,101081],{"class":1941},[91,108677,147],{"class":101},[91,108679,108680],{"class":206},"\"1.5 -2.0 1.2\"",[91,108682,108683],{"class":1941}," xyaxes",[91,108685,147],{"class":101},[91,108687,108688],{"class":206},"\"1 0.75 0 0 0 1\"",[91,108690,101119],{"class":101},[38,108692,108693],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[63,108695,108697],{"id":108696},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[83,108699,108701],{"className":30353,"code":108700,"language":30355,"meta":10,"style":10},"import time\n",[88,108702,108703],{"__ignoreMap":10},[91,108704,108705,108707],{"class":93,"line":94},[91,108706,30367],{"class":97},[91,108708,31804],{"class":101},[38,108710,108711],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[83,108713,108715],{"className":30353,"code":108714,"language":30355,"meta":10,"style":10},"import mujoco\nimport mujoco.viewer\n",[88,108716,108717,108723],{"__ignoreMap":10},[91,108718,108719,108721],{"class":93,"line":94},[91,108720,30367],{"class":97},[91,108722,101276],{"class":101},[91,108724,108725,108727],{"class":93,"line":11},[91,108726,30367],{"class":97},[91,108728,107527],{"class":101},[38,108730,108731],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[83,108733,108734],{"className":30353,"code":108608,"language":30355,"meta":10,"style":10},[88,108735,108736],{"__ignoreMap":10},[91,108737,108738,108740,108742,108744],{"class":93,"line":94},[91,108739,107808],{"class":97},[91,108741,107811],{"class":101},[91,108743,31358],{"class":97},[91,108745,107816],{"class":101},[38,108747,108748,108749,108752],{},"打开一个 viewer 窗口。",[88,108750,108751],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[83,108754,108755],{"className":30353,"code":108631,"language":30355,"meta":10,"style":10},[88,108756,108757],{"__ignoreMap":10},[91,108758,108759,108761,108763,108765,108767,108769,108771],{"class":93,"line":94},[91,108760,108638],{"class":97},[91,108762,108162],{"class":101},[91,108764,30437],{"class":97},[91,108766,108167],{"class":101},[91,108768,1012],{"class":97},[91,108770,108172],{"class":150},[91,108772,3717],{"class":101},[38,108774,108775,108776,108779],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[88,108777,108778],{},"viewer.is_running()"," 会变成 false，循环结束。",[83,108781,108783],{"className":30353,"code":108782,"language":30355,"meta":10,"style":10},"step_start = time.time()\n",[88,108784,108785],{"__ignoreMap":10},[91,108786,108787,108790,108792],{"class":93,"line":94},[91,108788,108789],{"class":101},"step_start ",[91,108791,147],{"class":97},[91,108793,108184],{"class":101},[38,108795,108796],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[83,108798,108799],{"className":30353,"code":107893,"language":30355,"meta":10,"style":10},[88,108800,108801,108805],{"__ignoreMap":10},[91,108802,108803],{"class":93,"line":94},[91,108804,104480],{"class":101},[91,108806,108807],{"class":93,"line":11},[91,108808,107904],{"class":101},[38,108810,108811,108813,108814,108816,108817,108819,108820,108823],{},[88,108812,101190],{}," 推进物理仿真。",[88,108815,107912],{}," 把最新的 ",[88,108818,33376],{}," 同步到窗口里显示。没有 ",[88,108821,108822],{},"sync()","，窗口可能看不到最新状态。",[83,108825,108826],{"className":30353,"code":107923,"language":30355,"meta":10,"style":10},[88,108827,108828],{"__ignoreMap":10},[91,108829,108830,108832,108834,108836,108838,108840,108842],{"class":93,"line":94},[91,108831,107930],{"class":101},[91,108833,147],{"class":97},[91,108835,107935],{"class":101},[91,108837,634],{"class":97},[91,108839,107940],{"class":101},[91,108841,634],{"class":97},[91,108843,107945],{"class":101},[38,108845,108846],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[83,108848,108850],{"className":30353,"code":108849,"language":30355,"meta":10,"style":10},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[88,108851,108852,108864],{"__ignoreMap":10},[91,108853,108854,108856,108858,108860,108862],{"class":93,"line":94},[91,108855,1509],{"class":97},[91,108857,108222],{"class":101},[91,108859,1062],{"class":97},[91,108861,4071],{"class":150},[91,108863,3717],{"class":101},[91,108865,108866],{"class":93,"line":11},[91,108867,108868],{"class":101},"    time.sleep(sleep_time)\n",[38,108870,108871],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[63,108873,108875],{"id":108874},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[83,108877,108879],{"className":30353,"code":108878,"language":30355,"meta":10,"style":10},"from pathlib import Path\n",[88,108880,108881],{"__ignoreMap":10},[91,108882,108883,108885,108887,108889],{"class":93,"line":94},[91,108884,30712],{"class":97},[91,108886,108286],{"class":101},[91,108888,30367],{"class":97},[91,108890,108291],{"class":101},[38,108892,108893,108894,108897,108898,108901],{},"导入 ",[88,108895,108896],{},"Path","，用来处理文件路径。相比直接写字符串，",[88,108899,108900],{},"Path(\"render_output.png\")"," 更清晰。",[83,108903,108905],{"className":30353,"code":108904,"language":30355,"meta":10,"style":10},"from PIL import Image\n",[88,108906,108907],{"__ignoreMap":10},[91,108908,108909,108911,108913,108915],{"class":93,"line":94},[91,108910,30712],{"class":97},[91,108912,47238],{"class":150},[91,108914,47241],{"class":97},[91,108916,47244],{"class":101},[38,108918,108919],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[83,108921,108922],{"className":53042,"code":108659,"language":53044,"meta":10,"style":10},[88,108923,108924],{"__ignoreMap":10},[91,108925,108926,108928,108930,108932,108934,108936,108938,108940,108942,108944,108946,108948],{"class":93,"line":94},[91,108927,1012],{"class":101},[91,108929,108490],{"class":51275},[91,108931,14899],{"class":1941},[91,108933,147],{"class":101},[91,108935,108495],{"class":206},[91,108937,101081],{"class":1941},[91,108939,147],{"class":101},[91,108941,108680],{"class":206},[91,108943,108683],{"class":1941},[91,108945,147],{"class":101},[91,108947,108688],{"class":206},[91,108949,101119],{"class":101},[38,108951,108952,108953,108955,108956,108958,108959,108962,108963,108965],{},"定义一个相机。",[88,108954,79785],{}," 是相机名字。",[88,108957,104121],{}," 是相机在世界里的位置。",[88,108960,108961],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[88,108964,104121],{}," 来调视角。",[83,108967,108969],{"className":30353,"code":108968,"language":30355,"meta":10,"style":10},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[88,108970,108971],{"__ignoreMap":10},[91,108972,108973,108975,108977,108979,108981,108983,108985,108987,108989,108991,108993],{"class":93,"line":94},[91,108974,107545],{"class":101},[91,108976,147],{"class":97},[91,108978,107849],{"class":101},[91,108980,24956],{"class":5195},[91,108982,147],{"class":97},[91,108984,42317],{"class":150},[91,108986,12414],{"class":101},[91,108988,24952],{"class":5195},[91,108990,147],{"class":97},[91,108992,107864],{"class":150},[91,108994,108],{"class":101},[38,108996,108997,108998,100993,109000,109002],{},"创建离屏渲染器。",[88,108999,24956],{},[88,109001,24952],{}," 决定输出图片大小。",[83,109004,109005],{"className":30353,"code":101651,"language":30355,"meta":10,"style":10},[88,109006,109007,109023],{"__ignoreMap":10},[91,109008,109009,109011,109013,109015,109017,109019,109021],{"class":93,"line":94},[91,109010,3003],{"class":97},[91,109012,101476],{"class":101},[91,109014,26018],{"class":97},[91,109016,32418],{"class":150},[91,109018,102],{"class":101},[91,109020,413],{"class":150},[91,109022,30761],{"class":101},[91,109024,109025],{"class":93,"line":11},[91,109026,101674],{"class":101},[38,109028,109029],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[83,109031,109033],{"className":30353,"code":109032,"language":30355,"meta":10,"style":10},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[88,109034,109035],{"__ignoreMap":10},[91,109036,109037,109040,109042,109044,109046],{"class":93,"line":94},[91,109038,109039],{"class":101},"renderer.update_scene(data, ",[91,109041,108490],{"class":5195},[91,109043,147],{"class":97},[91,109045,108495],{"class":206},[91,109047,108],{"class":101},[38,109049,109050,109051,109053,109054,109057],{},"告诉 renderer：用当前 ",[88,109052,33376],{}," 的状态更新画面，并使用名为 ",[88,109055,109056],{},"fixed_camera"," 的相机视角。",[83,109059,109060],{"className":30353,"code":107955,"language":30355,"meta":10,"style":10},[88,109061,109062],{"__ignoreMap":10},[91,109063,109064,109066,109068],{"class":93,"line":94},[91,109065,107555],{"class":101},[91,109067,147],{"class":97},[91,109069,107560],{"class":101},[38,109071,109072,109073,109076],{},"真正渲染出图像。",[88,109074,109075],{},"image"," 是一个 NumPy 数组，不是文件。",[83,109078,109080],{"className":30353,"code":109079,"language":30355,"meta":10,"style":10},"Image.fromarray(image).save(output_path)\n",[88,109081,109082],{"__ignoreMap":10},[91,109083,109084],{"class":93,"line":94},[91,109085,109079],{"class":101},[38,109087,109088,109089,28360],{},"把数组转换成图片，并保存到 ",[88,109090,109091],{},"render_output.png",[83,109093,109095],{"className":30353,"code":109094,"language":30355,"meta":10,"style":10},"renderer.close()\n",[88,109096,109097],{"__ignoreMap":10},[91,109098,109099],{"class":93,"line":94},[91,109100,109094],{"class":101},[38,109102,109103],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[33,109105,102291],{"id":102290},[38,109107,109108,109109,109111,109112,28360],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[88,109110,109091],{},"，并输出图像数组形状，例如 ",[88,109113,109114],{},"(480, 640, 3)",[38,109116,109117],{},"如果图片里看不到方块，先检查：",[46,109119,109120,109123,109126],{},[49,109121,109122],{},"方块是否掉到相机视野外。",[49,109124,109125],{},"camera 位置是否合理。",[49,109127,109128,109129,109132],{},"是否在 ",[88,109130,109131],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[33,109134,102323],{"id":102322},[38,109136,109137],{},"运行 viewer:",[83,109139,109141],{"className":23796,"code":109140,"language":23798,"meta":10,"style":10},"python ch5_viewer.py\n",[88,109142,109143],{"__ignoreMap":10},[91,109144,109145,109147],{"class":93,"line":94},[91,109146,30355],{"class":1941},[91,109148,108271],{"class":206},[38,109150,109151],{},"运行 renderer:",[83,109153,109155],{"className":23796,"code":109154,"language":23798,"meta":10,"style":10},"python ch5_renderer.py\n",[88,109156,109157],{"__ignoreMap":10},[91,109158,109159,109161],{"class":93,"line":94},[91,109160,30355],{"class":1941},[91,109162,108600],{"class":206},[38,109164,109165],{},"如果在服务器上运行:",[83,109167,109169],{"className":23796,"code":109168,"language":23798,"meta":10,"style":10},"MUJOCO_GL=egl python ch5_renderer.py\n",[88,109170,109171],{"__ignoreMap":10},[91,109172,109173,109175,109177,109179,109182],{"class":93,"line":94},[91,109174,107789],{"class":101},[91,109176,147],{"class":97},[91,109178,107779],{"class":206},[91,109180,109181],{"class":1941}," python",[91,109183,108600],{"class":206},[38,109185,107757],{},[83,109187,109189],{"className":23796,"code":109188,"language":23798,"meta":10,"style":10},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[88,109190,109191],{"__ignoreMap":10},[91,109192,109193,109195,109197,109199,109201],{"class":93,"line":94},[91,109194,107789],{"class":101},[91,109196,147],{"class":97},[91,109198,107783],{"class":206},[91,109200,109181],{"class":1941},[91,109202,108600],{"class":206},[38,109204,109205],{},"再做几个练习：",[46,109207,109208,109215,109218,109224],{},[49,109209,109210,109211,109214],{},"把 renderer 分辨率改成 ",[88,109212,109213],{},"height=240, width=320","，观察输出 shape。",[49,109216,109217],{},"把方块颜色改成蓝色，重新保存图片。",[49,109219,109220,109221,109223],{},"把相机 ",[88,109222,104121],{}," 改远一点，观察画面中物体是否变小。",[49,109225,109226,109227,102389,109230,109233],{},"把 viewer 示例中的 ",[88,109228,109229],{},"data.time \u003C 5.0",[88,109231,109232],{},"data.time \u003C 20.0","，观察更长时间。",[33,109235,102428],{"id":102427},[63,109237,109239],{"id":109238},"viewer-窗口打不开","viewer 窗口打不开",[38,109241,109242],{},"安装:",[83,109244,109246],{"className":23796,"code":109245,"language":23798,"meta":10,"style":10},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[88,109247,109248],{"__ignoreMap":10},[91,109249,109250,109252,109254,109256,109258,109260,109262,109264,109266,109268,109270],{"class":93,"line":94},[91,109251,24551],{"class":1941},[91,109253,26290],{"class":206},[91,109255,23808],{"class":206},[91,109257,26375],{"class":150},[91,109259,102481],{"class":206},[91,109261,100809],{"class":206},[91,109263,102486],{"class":206},[91,109265,100822],{"class":206},[91,109267,100828],{"class":206},[91,109269,100819],{"class":206},[91,109271,109272],{"class":206}," libXinerama\n",[63,109274,109276],{"id":109275},"glfwerror",[88,109277,109278],{},"GLFWError",[38,109280,109281],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[63,109283,109285],{"id":109284},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[38,109287,109288,109289,82514,109291,109293],{},"尝试 ",[88,109290,101012],{},[88,109292,101015],{},"。可能存在版本差异。",[63,109295,109296],{"id":109296},"保存图片是黑的",[38,109298,102550],{},[46,109300,109301,109304,109307,109317],{},[49,109302,109303],{},"XML 里是否有 light。",[49,109305,109306],{},"相机是否对着模型。",[49,109308,109309,109310,109313,109314,28360],{},"是否先 ",[88,109311,109312],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[88,109315,109316],{},"renderer.render()",[49,109318,109319],{},"物体是否已经掉出视野。",[63,109321,109322],{"id":109322},"远程服务器没有显示器",[38,109324,109325],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[83,109327,109328],{"className":23796,"code":109168,"language":23798,"meta":10,"style":10},[88,109329,109330],{"__ignoreMap":10},[91,109331,109332,109334,109336,109338,109340],{"class":93,"line":94},[91,109333,107789],{"class":101},[91,109335,147],{"class":97},[91,109337,107779],{"class":206},[91,109339,109181],{"class":1941},[91,109341,108600],{"class":206},[38,109343,109344],{},"如果 EGL 不可用，再尝试：",[83,109346,109347],{"className":23796,"code":109188,"language":23798,"meta":10,"style":10},[88,109348,109349],{"__ignoreMap":10},[91,109350,109351,109353,109355,109357,109359],{"class":93,"line":94},[91,109352,107789],{"class":101},[91,109354,147],{"class":97},[91,109356,107783],{"class":206},[91,109358,109181],{"class":1941},[91,109360,108600],{"class":206},[33,109362,102582],{"id":102581},[38,109364,109365],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[46,109367,109368,109371,109374],{},[49,109369,109370],{},"先用 viewer 看模型和控制是否正常。",[49,109372,109373],{},"再用 renderer 保存图片或构造视觉观测。",[49,109375,109376],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5105,109378,109379],{},"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":10,"searchDepth":11,"depth":11,"links":109381},[109382,109383,109384,109389,109394,109395,109396,109403],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":109385},[109386,109387,109388],{"id":107886,"depth":1157,"text":107887},{"id":107916,"depth":1157,"text":107917},{"id":107951,"depth":1157,"text":107952},{"id":101227,"depth":11,"text":101228,"children":109390},[109391,109392,109393],{"id":101547,"depth":1157,"text":101547},{"id":108696,"depth":1157,"text":108697},{"id":108874,"depth":1157,"text":108875},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":109397},[109398,109399,109400,109401,109402],{"id":109238,"depth":1157,"text":109239},{"id":109275,"depth":1157,"text":109278},{"id":109284,"depth":1157,"text":109285},{"id":109296,"depth":1157,"text":109296},{"id":109322,"depth":1157,"text":109322},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107494,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109410,"title":109411,"body":109412,"description":10,"extension":14,"meta":111323,"navigation":17,"path":111324,"seo":111325,"stem":111326,"__hash__":111327},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109413,"toc":111299},[109414,109417,109419,109422,109424,109443,109446,109452,109455,109457,109459,109483,109485,109499,109501,109542,109544,109555,109557,109560,109566,109569,109603,109606,109638,109641,109673,109677,109680,109720,109723,109729,109732,109738,109742,109745,109751,109754,109758,109761,109801,109803,109816,109819,109821,110403,110405,110417,110420,110431,110433,110436,110455,110467,110470,110491,110494,110497,110540,110543,110546,110566,110573,110575,110593,110608,110611,110617,110620,110626,110643,110650,110681,110692,110726,110737,110754,110763,110771,110776,110790,110793,110814,110820,110834,110839,110869,110879,110904,110912,110935,110938,110954,110957,110965,110971,110993,111006,111027,111036,111075,111086,111088,111091,111097,111100,111103,111109,111112,111132,111135,111137,111176,111178,111181,111189,111192,111195,111222,111225,111235,111241,111244,111250,111252,111258,111262,111265,111267,111270,111294,111297],[29,109415,109411],{"id":109416},"_6控制任务cartpole",[33,109418,100622],{"id":100621},[38,109420,109421],{},"本章搭建一个最小 Cartpole 控制任务。",[38,109423,104306],{},[46,109425,109426,109429,109431,109434,109437,109440],{},[49,109427,109428],{},"slide joint",[49,109430,106159],{},[49,109432,109433],{},"cart force actuator",[49,109435,109436],{},"状态观测",[49,109438,109439],{},"简单控制循环",[49,109441,109442],{},"reward 设计雏形",[38,109444,109445],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[83,109447,109450],{"className":109448,"code":109449,"language":5166,"meta":10},[5164],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[88,109451,109449],{"__ignoreMap":10},[38,109453,109454],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[33,109456,100745],{"id":100744},[38,109458,100748],{},[83,109460,109461],{"className":23796,"code":104363,"language":23798,"meta":10,"style":10},[88,109462,109463],{"__ignoreMap":10},[91,109464,109465,109467,109469,109471,109473,109475,109477,109479,109481],{"class":93,"line":94},[91,109466,24551],{"class":1941},[91,109468,26290],{"class":206},[91,109470,23808],{"class":206},[91,109472,26375],{"class":150},[91,109474,104378],{"class":206},[91,109476,100773],{"class":206},[91,109478,102476],{"class":206},[91,109480,100789],{"class":206},[91,109482,104387],{"class":206},[38,109484,102794],{},[83,109486,109487],{"className":23796,"code":100894,"language":23798,"meta":10,"style":10},[88,109488,109489],{"__ignoreMap":10},[91,109490,109491,109493,109495,109497],{"class":93,"line":94},[91,109492,23805],{"class":1941},[91,109494,23808],{"class":206},[91,109496,100905],{"class":206},[91,109498,100908],{"class":206},[38,109500,102811],{},[83,109502,109504],{"className":23796,"code":109503,"language":23798,"meta":10,"style":10},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[88,109505,109506,109523,109532],{"__ignoreMap":10},[91,109507,109508,109510,109512,109514,109517,109519,109521],{"class":93,"line":94},[91,109509,30305],{"class":1941},[91,109511,29151],{"class":206},[91,109513,25090],{"class":150},[91,109515,109516],{"class":206}," mujoco-cartpole",[91,109518,100950],{"class":206},[91,109520,100953],{"class":150},[91,109522,100956],{"class":150},[91,109524,109525,109527,109529],{"class":93,"line":11},[91,109526,30305],{"class":1941},[91,109528,100963],{"class":206},[91,109530,109531],{"class":206}," mujoco-cartpole\n",[91,109533,109534,109536,109538,109540],{"class":93,"line":1157},[91,109535,23805],{"class":1941},[91,109537,23808],{"class":206},[91,109539,100905],{"class":206},[91,109541,100908],{"class":206},[38,109543,100979],{},[46,109545,109546,109549,109552],{},[49,109547,109548],{},"本章不依赖 Gymnasium。",[49,109550,109551],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[49,109553,109554],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[33,109556,101020],{"id":101019},[38,109558,109559],{},"Cartpole 的模型结构:",[83,109561,109564],{"className":109562,"code":109563,"language":5166,"meta":10},[5164],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[88,109565,109563],{"__ignoreMap":10},[38,109567,109568],{},"小车通过 slide joint 左右移动:",[83,109570,109572],{"className":53042,"code":109571,"language":53044,"meta":10,"style":10},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[88,109573,109574],{"__ignoreMap":10},[91,109575,109576,109578,109580,109582,109584,109587,109589,109591,109594,109596,109598,109601],{"class":93,"line":94},[91,109577,1012],{"class":101},[91,109579,102931],{"class":51275},[91,109581,14899],{"class":1941},[91,109583,147],{"class":101},[91,109585,109586],{"class":206},"\"cart_x\"",[91,109588,53799],{"class":1941},[91,109590,147],{"class":101},[91,109592,109593],{"class":206},"\"slide\"",[91,109595,106003],{"class":1941},[91,109597,147],{"class":101},[91,109599,109600],{"class":206},"\"1 0 0\"",[91,109602,101119],{"class":101},[38,109604,109605],{},"杆子通过 hinge joint 旋转:",[83,109607,109609],{"className":53042,"code":109608,"language":53044,"meta":10,"style":10},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[88,109610,109611],{"__ignoreMap":10},[91,109612,109613,109615,109617,109619,109621,109624,109626,109628,109630,109632,109634,109636],{"class":93,"line":94},[91,109614,1012],{"class":101},[91,109616,102931],{"class":51275},[91,109618,14899],{"class":1941},[91,109620,147],{"class":101},[91,109622,109623],{"class":206},"\"pole_hinge\"",[91,109625,53799],{"class":1941},[91,109627,147],{"class":101},[91,109629,105994],{"class":206},[91,109631,106003],{"class":1941},[91,109633,147],{"class":101},[91,109635,106008],{"class":206},[91,109637,101119],{"class":101},[38,109639,109640],{},"控制力作用在小车 slide joint 上:",[83,109642,109644],{"className":53042,"code":109643,"language":53044,"meta":10,"style":10},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[88,109645,109646],{"__ignoreMap":10},[91,109647,109648,109650,109652,109654,109656,109659,109661,109663,109665,109667,109669,109671],{"class":93,"line":94},[91,109649,1012],{"class":101},[91,109651,106049],{"class":51275},[91,109653,14899],{"class":1941},[91,109655,147],{"class":101},[91,109657,109658],{"class":206},"\"cart_motor\"",[91,109660,106059],{"class":1941},[91,109662,147],{"class":101},[91,109664,109586],{"class":206},[91,109666,106066],{"class":1941},[91,109668,147],{"class":101},[91,109670,54291],{"class":206},[91,109672,101119],{"class":101},[63,109674,109676],{"id":109675},"cartpole-的状态是什么","Cartpole 的状态是什么",[38,109678,109679],{},"这个简化模型有两个关节：",[239,109681,109682,109693],{},[242,109683,109684],{},[245,109685,109686,109688,109690],{},[248,109687,102734],{"align":23710},[248,109689,23711],{"align":23710},[248,109691,109692],{"align":23710},"对应状态",[286,109694,109695,109708],{},[245,109696,109697,109702,109705],{},[291,109698,109699],{"align":23710},[88,109700,109701],{},"cart_x",[291,109703,109704],{"align":23710},"slide",[291,109706,109707],{"align":23710},"小车 x 位置",[245,109709,109710,109715,109717],{},[291,109711,109712],{"align":23710},[88,109713,109714],{},"pole_hinge",[291,109716,105815],{"align":23710},[291,109718,109719],{"align":23710},"杆子角度",[38,109721,109722],{},"所以：",[83,109724,109727],{"className":109725,"code":109726,"language":5166,"meta":10},[5164],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[88,109728,109726],{"__ignoreMap":10},[38,109730,109731],{},"把它们拼起来就是观测：",[83,109733,109736],{"className":109734,"code":109735,"language":5166,"meta":10},[5164],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[88,109737,109735],{"__ignoreMap":10},[63,109739,109741],{"id":109740},"action-是什么","action 是什么",[38,109743,109744],{},"本章只有一个 actuator：",[83,109746,109749],{"className":109747,"code":109748,"language":5166,"meta":10},[5164],"data.ctrl[0] = action\n",[88,109750,109748],{"__ignoreMap":10},[38,109752,109753],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[63,109755,109757],{"id":109756},"reward-是什么","reward 是什么",[38,109759,109760],{},"奖励函数：",[83,109762,109764],{"className":30353,"code":109763,"language":30355,"meta":10,"style":10},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[88,109765,109766],{"__ignoreMap":10},[91,109767,109768,109770,109773,109775,109777,109779,109782,109784,109787,109789,109791,109793,109796,109798],{"class":93,"line":94},[91,109769,17025],{"class":97},[91,109771,109772],{"class":150}," float",[91,109774,102],{"class":101},[91,109776,102378],{"class":150},[91,109778,52246],{"class":97},[91,109780,109781],{"class":150}," 0.1",[91,109783,6497],{"class":97},[91,109785,109786],{"class":101}," cart_x ",[91,109788,557],{"class":97},[91,109790,109786],{"class":101},[91,109792,634],{"class":97},[91,109794,109795],{"class":101}," pole_angle ",[91,109797,557],{"class":97},[91,109799,109800],{"class":101}," pole_angle)\n",[38,109802,106201],{},[46,109804,109805,109810,109813],{},[49,109806,109807,109808,28360],{},"基础奖励是 ",[88,109809,102378],{},[49,109811,109812],{},"小车离中心越远，扣分越多。",[49,109814,109815],{},"杆子角度越大，扣分越多。",[38,109817,109818],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[33,109820,101228],{"id":101227},[83,109822,109824],{"className":30353,"code":109823,"language":30355,"meta":10,"style":10},"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",[88,109825,109826,109832,109842,109846,109850,109858,109863,109867,109871,109875,109880,109884,109889,109894,109899,109903,109908,109913,109918,109922,109926,109930,109934,109938,109943,109947,109951,109955,109959,109963,109973,109980,109984,109988,110002,110016,110029,110059,110063,110067,110079,110091,110099,110103,110116,110120,110124,110133,110137,110153,110163,110176,110189,110193,110216,110234,110238,110250,110254,110258,110268,110278,110282,110298,110339,110343,110363,110379,110383,110387,110399],{"__ignoreMap":10},[91,109827,109828,109830],{"class":93,"line":94},[91,109829,30367],{"class":97},[91,109831,101276],{"class":101},[91,109833,109834,109836,109838,109840],{"class":93,"line":11},[91,109835,30367],{"class":97},[91,109837,31355],{"class":101},[91,109839,31358],{"class":97},[91,109841,31361],{"class":101},[91,109843,109844],{"class":93,"line":1157},[91,109845,2378],{"emptyLinePlaceholder":17},[91,109847,109848],{"class":93,"line":1172},[91,109849,2378],{"emptyLinePlaceholder":17},[91,109851,109852,109854,109856],{"class":93,"line":1178},[91,109853,101289],{"class":150},[91,109855,13543],{"class":97},[91,109857,101294],{"class":206},[91,109859,109860],{"class":93,"line":1192},[91,109861,109862],{"class":206},"\u003Cmujoco model=\"cartpole\">\n",[91,109864,109865],{"class":93,"line":1198},[91,109866,101304],{"class":206},[91,109868,109869],{"class":93,"line":1289},[91,109870,2378],{"emptyLinePlaceholder":17},[91,109872,109873],{"class":93,"line":1295},[91,109874,101313],{"class":206},[91,109876,109877],{"class":93,"line":1307},[91,109878,109879],{"class":206},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,109881,109882],{"class":93,"line":1590},[91,109883,2378],{"emptyLinePlaceholder":17},[91,109885,109886],{"class":93,"line":1595},[91,109887,109888],{"class":206},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[91,109890,109891],{"class":93,"line":1601},[91,109892,109893],{"class":206},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[91,109895,109896],{"class":93,"line":1606},[91,109897,109898],{"class":206},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[91,109900,109901],{"class":93,"line":1620},[91,109902,2378],{"emptyLinePlaceholder":17},[91,109904,109905],{"class":93,"line":1625},[91,109906,109907],{"class":206},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[91,109909,109910],{"class":93,"line":1631},[91,109911,109912],{"class":206},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[91,109914,109915],{"class":93,"line":1652},[91,109916,109917],{"class":206},"        \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",[91,109919,109920],{"class":93,"line":1657},[91,109921,106413],{"class":206},[91,109923,109924],{"class":93,"line":1671},[91,109925,101342],{"class":206},[91,109927,109928],{"class":93,"line":1676},[91,109929,101347],{"class":206},[91,109931,109932],{"class":93,"line":1705},[91,109933,2378],{"emptyLinePlaceholder":17},[91,109935,109936],{"class":93,"line":1710},[91,109937,106430],{"class":206},[91,109939,109940],{"class":93,"line":1727},[91,109941,109942],{"class":206},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[91,109944,109945],{"class":93,"line":1732},[91,109946,106440],{"class":206},[91,109948,109949],{"class":93,"line":1737},[91,109950,101352],{"class":206},[91,109952,109953],{"class":93,"line":1742},[91,109954,95673],{"class":206},[91,109956,109957],{"class":93,"line":1756},[91,109958,2378],{"emptyLinePlaceholder":17},[91,109960,109961],{"class":93,"line":1761},[91,109962,2378],{"emptyLinePlaceholder":17},[91,109964,109965,109967,109970],{"class":93,"line":2555},[91,109966,31922],{"class":97},[91,109968,109969],{"class":1941}," get_observation",[91,109971,109972],{"class":101},"(data: mujoco.MjData) -> np.ndarray:\n",[91,109974,109975,109977],{"class":93,"line":2569},[91,109976,4068],{"class":97},[91,109978,109979],{"class":101}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[91,109981,109982],{"class":93,"line":2577},[91,109983,2378],{"emptyLinePlaceholder":17},[91,109985,109986],{"class":93,"line":2582},[91,109987,2378],{"emptyLinePlaceholder":17},[91,109989,109990,109992,109995,109998,110000],{"class":93,"line":2588},[91,109991,31922],{"class":97},[91,109993,109994],{"class":1941}," compute_reward",[91,109996,109997],{"class":101},"(obs: np.ndarray) -> ",[91,109999,141],{"class":150},[91,110001,3717],{"class":101},[91,110003,110004,110007,110009,110012,110014],{"class":93,"line":2594},[91,110005,110006],{"class":101},"    cart_x ",[91,110008,147],{"class":97},[91,110010,110011],{"class":101}," obs[",[91,110013,293],{"class":150},[91,110015,33221],{"class":101},[91,110017,110018,110021,110023,110025,110027],{"class":93,"line":2599},[91,110019,110020],{"class":101},"    pole_angle ",[91,110022,147],{"class":97},[91,110024,110011],{"class":101},[91,110026,319],{"class":150},[91,110028,33221],{"class":101},[91,110030,110031,110033,110035,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057],{"class":93,"line":7927},[91,110032,4068],{"class":97},[91,110034,109772],{"class":150},[91,110036,102],{"class":101},[91,110038,102378],{"class":150},[91,110040,52246],{"class":97},[91,110042,109781],{"class":150},[91,110044,6497],{"class":97},[91,110046,109786],{"class":101},[91,110048,557],{"class":97},[91,110050,109786],{"class":101},[91,110052,634],{"class":97},[91,110054,109795],{"class":101},[91,110056,557],{"class":97},[91,110058,109800],{"class":101},[91,110060,110061],{"class":93,"line":7951},[91,110062,2378],{"emptyLinePlaceholder":17},[91,110064,110065],{"class":93,"line":7956},[91,110066,2378],{"emptyLinePlaceholder":17},[91,110068,110069,110071,110073,110075,110077],{"class":93,"line":7962},[91,110070,31922],{"class":97},[91,110072,1951],{"class":1941},[91,110074,101373],{"class":101},[91,110076,95661],{"class":150},[91,110078,3717],{"class":101},[91,110080,110081,110083,110085,110087,110089],{"class":93,"line":7989},[91,110082,101382],{"class":101},[91,110084,147],{"class":97},[91,110086,101387],{"class":101},[91,110088,101289],{"class":150},[91,110090,108],{"class":101},[91,110092,110093,110095,110097],{"class":93,"line":7994},[91,110094,101396],{"class":101},[91,110096,147],{"class":97},[91,110098,101401],{"class":101},[91,110100,110101],{"class":93,"line":8000},[91,110102,2378],{"emptyLinePlaceholder":17},[91,110104,110105,110107,110109,110111,110113],{"class":93,"line":8012},[91,110106,105044],{"class":101},[91,110108,319],{"class":150},[91,110110,4421],{"class":101},[91,110112,147],{"class":97},[91,110114,110115],{"class":150}," 0.1\n",[91,110117,110118],{"class":93,"line":8024},[91,110119,105057],{"class":101},[91,110121,110122],{"class":93,"line":8036},[91,110123,2378],{"emptyLinePlaceholder":17},[91,110125,110126,110129,110131],{"class":93,"line":9695},[91,110127,110128],{"class":101},"    total_reward ",[91,110130,147],{"class":97},[91,110132,104736],{"class":150},[91,110134,110135],{"class":93,"line":9720},[91,110136,2378],{"emptyLinePlaceholder":17},[91,110138,110139,110141,110143,110145,110147,110149,110151],{"class":93,"line":9743},[91,110140,3179],{"class":97},[91,110142,31591],{"class":101},[91,110144,26018],{"class":97},[91,110146,32418],{"class":150},[91,110148,102],{"class":101},[91,110150,6389],{"class":150},[91,110152,30761],{"class":101},[91,110154,110155,110158,110160],{"class":93,"line":9767},[91,110156,110157],{"class":101},"        obs ",[91,110159,147],{"class":97},[91,110161,110162],{"class":101}," get_observation(data)\n",[91,110164,110165,110168,110170,110172,110174],{"class":93,"line":9772},[91,110166,110167],{"class":101},"        pole_angle ",[91,110169,147],{"class":97},[91,110171,110011],{"class":101},[91,110173,319],{"class":150},[91,110175,33221],{"class":101},[91,110177,110178,110181,110183,110185,110187],{"class":93,"line":9777},[91,110179,110180],{"class":101},"        pole_angular_velocity ",[91,110182,147],{"class":97},[91,110184,110011],{"class":101},[91,110186,173],{"class":150},[91,110188,33221],{"class":101},[91,110190,110191],{"class":93,"line":9782},[91,110192,2378],{"emptyLinePlaceholder":17},[91,110194,110195,110198,110200,110203,110205,110207,110209,110211,110213],{"class":93,"line":9791},[91,110196,110197],{"class":101},"        action ",[91,110199,147],{"class":97},[91,110201,110202],{"class":150}," 2.0",[91,110204,6497],{"class":97},[91,110206,109795],{"class":101},[91,110208,583],{"class":97},[91,110210,61842],{"class":150},[91,110212,6497],{"class":97},[91,110214,110215],{"class":101}," pole_angular_velocity\n",[91,110217,110218,110220,110222,110224,110226,110228,110230,110232],{"class":93,"line":9796},[91,110219,110197],{"class":101},[91,110221,147],{"class":97},[91,110223,107422],{"class":101},[91,110225,634],{"class":97},[91,110227,102378],{"class":150},[91,110229,12414],{"class":101},[91,110231,102378],{"class":150},[91,110233,108],{"class":101},[91,110235,110236],{"class":93,"line":9802},[91,110237,2378],{"emptyLinePlaceholder":17},[91,110239,110240,110242,110244,110246,110248],{"class":93,"line":9823},[91,110241,106592],{"class":101},[91,110243,293],{"class":150},[91,110245,4421],{"class":101},[91,110247,147],{"class":97},[91,110249,107445],{"class":101},[91,110251,110252],{"class":93,"line":9829},[91,110253,101491],{"class":101},[91,110255,110256],{"class":93,"line":9843},[91,110257,2378],{"emptyLinePlaceholder":17},[91,110259,110260,110263,110265],{"class":93,"line":9849},[91,110261,110262],{"class":101},"        reward ",[91,110264,147],{"class":97},[91,110266,110267],{"class":101}," compute_reward(get_observation(data))\n",[91,110269,110270,110273,110275],{"class":93,"line":9876},[91,110271,110272],{"class":101},"        total_reward ",[91,110274,9456],{"class":97},[91,110276,110277],{"class":101}," reward\n",[91,110279,110280],{"class":93,"line":9885},[91,110281,2378],{"emptyLinePlaceholder":17},[91,110283,110284,110286,110288,110290,110292,110294,110296],{"class":93,"line":9891},[91,110285,2475],{"class":97},[91,110287,31591],{"class":101},[91,110289,430],{"class":97},[91,110291,5733],{"class":150},[91,110293,101534],{"class":97},[91,110295,4071],{"class":150},[91,110297,3717],{"class":101},[91,110299,110300,110302,110304,110307,110310,110313,110316,110318,110321,110324,110326,110328,110330,110332,110335,110337],{"class":93,"line":9899},[91,110301,34625],{"class":150},[91,110303,102],{"class":101},[91,110305,110306],{"class":206},"\"step:\"",[91,110308,110309],{"class":101},", step, ",[91,110311,110312],{"class":206},"\"obs:\"",[91,110314,110315],{"class":101},", np.round(obs, ",[91,110317,173],{"class":150},[91,110319,110320],{"class":101},"), ",[91,110322,110323],{"class":206},"\"action:\"",[91,110325,12414],{"class":101},[91,110327,31993],{"class":150},[91,110329,102],{"class":101},[91,110331,141],{"class":150},[91,110333,110334],{"class":101},"(action), ",[91,110336,173],{"class":150},[91,110338,30472],{"class":101},[91,110340,110341],{"class":93,"line":9904},[91,110342,2378],{"emptyLinePlaceholder":17},[91,110344,110345,110347,110349,110352,110354,110356,110359,110361],{"class":93,"line":16583},[91,110346,31274],{"class":150},[91,110348,102],{"class":101},[91,110350,110351],{"class":206},"\"total_reward:\"",[91,110353,12414],{"class":101},[91,110355,31993],{"class":150},[91,110357,110358],{"class":101},"(total_reward, ",[91,110360,173],{"class":150},[91,110362,30472],{"class":101},[91,110364,110365,110367,110369,110372,110375,110377],{"class":93,"line":16589},[91,110366,31274],{"class":150},[91,110368,102],{"class":101},[91,110370,110371],{"class":206},"\"final obs:\"",[91,110373,110374],{"class":101},", np.round(get_observation(data), ",[91,110376,173],{"class":150},[91,110378,30472],{"class":101},[91,110380,110381],{"class":93,"line":16612},[91,110382,2378],{"emptyLinePlaceholder":17},[91,110384,110385],{"class":93,"line":16618},[91,110386,2378],{"emptyLinePlaceholder":17},[91,110388,110389,110391,110393,110395,110397],{"class":93,"line":16641},[91,110390,1509],{"class":97},[91,110392,31195],{"class":150},[91,110394,101534],{"class":97},[91,110396,101537],{"class":206},[91,110398,3717],{"class":101},[91,110400,110401],{"class":93,"line":16655},[91,110402,101544],{"class":101},[38,110404,103545],{},[83,110406,110408],{"className":23796,"code":110407,"language":23798,"meta":10,"style":10},"touch ch6_cartpole.py\n",[88,110409,110410],{"__ignoreMap":10},[91,110411,110412,110414],{"class":93,"line":94},[91,110413,101258],{"class":1941},[91,110415,110416],{"class":206}," ch6_cartpole.py\n",[38,110418,110419],{},"运行：",[83,110421,110423],{"className":23796,"code":110422,"language":23798,"meta":10,"style":10},"python ch6_cartpole.py\n",[88,110424,110425],{"__ignoreMap":10},[91,110426,110427,110429],{"class":93,"line":94},[91,110428,30355],{"class":1941},[91,110430,110416],{"class":206},[63,110432,101547],{"id":101547},[38,110434,110435],{},"构造观测：",[83,110437,110439],{"className":30353,"code":110438,"language":30355,"meta":10,"style":10},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[88,110440,110441,110449],{"__ignoreMap":10},[91,110442,110443,110445,110447],{"class":93,"line":94},[91,110444,31922],{"class":97},[91,110446,109969],{"class":1941},[91,110448,109972],{"class":101},[91,110450,110451,110453],{"class":93,"line":11},[91,110452,4068],{"class":97},[91,110454,109979],{"class":101},[38,110456,110457,110460,110461,110463,110464,110466],{},[88,110458,110459],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[88,110462,104005],{}," 2 维，",[88,110465,104335],{}," 2 维，所以 obs 是 4 维。",[38,110468,110469],{},"设置初始角度：",[83,110471,110473],{"className":30353,"code":110472,"language":30355,"meta":10,"style":10},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[88,110474,110475,110487],{"__ignoreMap":10},[91,110476,110477,110479,110481,110483,110485],{"class":93,"line":94},[91,110478,104674],{"class":101},[91,110480,319],{"class":150},[91,110482,4421],{"class":101},[91,110484,147],{"class":97},[91,110486,110115],{"class":150},[91,110488,110489],{"class":93,"line":11},[91,110490,104518],{"class":101},[38,110492,110493],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[38,110495,110496],{},"简单反馈控制：",[83,110498,110500],{"className":30353,"code":110499,"language":30355,"meta":10,"style":10},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[88,110501,110502,110522],{"__ignoreMap":10},[91,110503,110504,110506,110508,110510,110512,110514,110516,110518,110520],{"class":93,"line":94},[91,110505,107417],{"class":101},[91,110507,147],{"class":97},[91,110509,110202],{"class":150},[91,110511,6497],{"class":97},[91,110513,109795],{"class":101},[91,110515,583],{"class":97},[91,110517,61842],{"class":150},[91,110519,6497],{"class":97},[91,110521,110215],{"class":101},[91,110523,110524,110526,110528,110530,110532,110534,110536,110538],{"class":93,"line":11},[91,110525,107417],{"class":101},[91,110527,147],{"class":97},[91,110529,107422],{"class":101},[91,110531,634],{"class":97},[91,110533,102378],{"class":150},[91,110535,12414],{"class":101},[91,110537,102378],{"class":150},[91,110539,108],{"class":101},[38,110541,110542],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[38,110544,110545],{},"限制动作：",[83,110547,110549],{"className":30353,"code":110548,"language":30355,"meta":10,"style":10},"np.clip(action, -1.0, 1.0)\n",[88,110550,110551],{"__ignoreMap":10},[91,110552,110553,110556,110558,110560,110562,110564],{"class":93,"line":94},[91,110554,110555],{"class":101},"np.clip(action, ",[91,110557,634],{"class":97},[91,110559,102378],{"class":150},[91,110561,12414],{"class":101},[91,110563,102378],{"class":150},[91,110565,108],{"class":101},[38,110567,110568,110569,110572],{},"因为 XML 里 ",[88,110570,110571],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[63,110574,101683],{"id":101683},[83,110576,110577],{"className":30353,"code":110438,"language":30355,"meta":10,"style":10},[88,110578,110579,110587],{"__ignoreMap":10},[91,110580,110581,110583,110585],{"class":93,"line":94},[91,110582,31922],{"class":97},[91,110584,109969],{"class":1941},[91,110586,109972],{"class":101},[91,110588,110589,110591],{"class":93,"line":11},[91,110590,4068],{"class":97},[91,110592,109979],{"class":101},[38,110594,110595,110596,110599,110600,110603,110604,110607],{},"这段定义了一个函数，用来获取当前观测。",[88,110597,110598],{},"data.qpos.copy()"," 是位置数组副本，",[88,110601,110602],{},"data.qvel.copy()"," 是速度数组副本。",[88,110605,110606],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[38,110609,110610],{},"在本章模型里：",[83,110612,110615],{"className":110613,"code":110614,"language":5166,"meta":10},[5164],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[88,110616,110614],{"__ignoreMap":10},[38,110618,110619],{},"所以返回的 obs 是：",[83,110621,110624],{"className":110622,"code":110623,"language":5166,"meta":10},[5164],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[88,110625,110623],{"__ignoreMap":10},[83,110627,110629],{"className":30353,"code":110628,"language":30355,"meta":10,"style":10},"def compute_reward(obs: np.ndarray) -> float:\n",[88,110630,110631],{"__ignoreMap":10},[91,110632,110633,110635,110637,110639,110641],{"class":93,"line":94},[91,110634,31922],{"class":97},[91,110636,109994],{"class":1941},[91,110638,109997],{"class":101},[91,110640,141],{"class":150},[91,110642,3717],{"class":101},[38,110644,110645,110646,110649],{},"这行定义奖励函数。输入是观测 ",[88,110647,110648],{},"obs","，输出是一个浮点数奖励。",[83,110651,110653],{"className":30353,"code":110652,"language":30355,"meta":10,"style":10},"cart_x = obs[0]\npole_angle = obs[1]\n",[88,110654,110655,110668],{"__ignoreMap":10},[91,110656,110657,110660,110662,110664,110666],{"class":93,"line":94},[91,110658,110659],{"class":101},"cart_x ",[91,110661,147],{"class":97},[91,110663,110011],{"class":101},[91,110665,293],{"class":150},[91,110667,33221],{"class":101},[91,110669,110670,110673,110675,110677,110679],{"class":93,"line":11},[91,110671,110672],{"class":101},"pole_angle ",[91,110674,147],{"class":97},[91,110676,110011],{"class":101},[91,110678,319],{"class":150},[91,110680,33221],{"class":101},[38,110682,110683,110684,110687,110688,110691],{},"数组索引从 0 开始。",[88,110685,110686],{},"obs[0]"," 是第一个元素，也就是小车位置。",[88,110689,110690],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[83,110693,110694],{"className":30353,"code":109763,"language":30355,"meta":10,"style":10},[88,110695,110696],{"__ignoreMap":10},[91,110697,110698,110700,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724],{"class":93,"line":94},[91,110699,17025],{"class":97},[91,110701,109772],{"class":150},[91,110703,102],{"class":101},[91,110705,102378],{"class":150},[91,110707,52246],{"class":97},[91,110709,109781],{"class":150},[91,110711,6497],{"class":97},[91,110713,109786],{"class":101},[91,110715,557],{"class":97},[91,110717,109786],{"class":101},[91,110719,634],{"class":97},[91,110721,109795],{"class":101},[91,110723,557],{"class":97},[91,110725,109800],{"class":101},[38,110727,110728,110729,110732,110733,110736],{},"这行计算奖励。",[88,110730,110731],{},"cart_x * cart_x"," 是小车位置的平方，",[88,110734,110735],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[83,110738,110740],{"className":30353,"code":110739,"language":30355,"meta":10,"style":10},"data.qpos[1] = 0.1\n",[88,110741,110742],{"__ignoreMap":10},[91,110743,110744,110746,110748,110750,110752],{"class":93,"line":94},[91,110745,104674],{"class":101},[91,110747,319],{"class":150},[91,110749,4421],{"class":101},[91,110751,147],{"class":97},[91,110753,110115],{"class":150},[38,110755,110756,110757,110759,110760,110762],{},"手动设置杆子的初始角度。因为 ",[88,110758,105431],{}," 是小车位置，",[88,110761,105434],{}," 是杆子角度，所以这里改的是杆子。",[83,110764,110765],{"className":30353,"code":104518,"language":30355,"meta":10,"style":10},[88,110766,110767],{"__ignoreMap":10},[91,110768,110769],{"class":93,"line":94},[91,110770,104518],{"class":101},[38,110772,105477,110773,110775],{},[88,110774,104005],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[83,110777,110779],{"className":30353,"code":110778,"language":30355,"meta":10,"style":10},"total_reward = 0.0\n",[88,110780,110781],{"__ignoreMap":10},[91,110782,110783,110786,110788],{"class":93,"line":94},[91,110784,110785],{"class":101},"total_reward ",[91,110787,147],{"class":97},[91,110789,104736],{"class":150},[38,110791,110792],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[83,110794,110796],{"className":30353,"code":110795,"language":30355,"meta":10,"style":10},"for step in range(1000):\n",[88,110797,110798],{"__ignoreMap":10},[91,110799,110800,110802,110804,110806,110808,110810,110812],{"class":93,"line":94},[91,110801,3003],{"class":97},[91,110803,31591],{"class":101},[91,110805,26018],{"class":97},[91,110807,32418],{"class":150},[91,110809,102],{"class":101},[91,110811,6389],{"class":150},[91,110813,30761],{"class":101},[38,110815,110816,110817,110819],{},"循环 1000 步。",[88,110818,107109],{}," 是当前步数，从 0 到 999。",[83,110821,110823],{"className":30353,"code":110822,"language":30355,"meta":10,"style":10},"obs = get_observation(data)\n",[88,110824,110825],{"__ignoreMap":10},[91,110826,110827,110830,110832],{"class":93,"line":94},[91,110828,110829],{"class":101},"obs ",[91,110831,147],{"class":97},[91,110833,110162],{"class":101},[38,110835,110836,110837,28360],{},"读取当前状态，保存到 ",[88,110838,110648],{},[83,110840,110842],{"className":30353,"code":110841,"language":30355,"meta":10,"style":10},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[88,110843,110844,110856],{"__ignoreMap":10},[91,110845,110846,110848,110850,110852,110854],{"class":93,"line":94},[91,110847,110672],{"class":101},[91,110849,147],{"class":97},[91,110851,110011],{"class":101},[91,110853,319],{"class":150},[91,110855,33221],{"class":101},[91,110857,110858,110861,110863,110865,110867],{"class":93,"line":11},[91,110859,110860],{"class":101},"pole_angular_velocity ",[91,110862,147],{"class":97},[91,110864,110011],{"class":101},[91,110866,173],{"class":150},[91,110868,33221],{"class":101},[38,110870,110871,110872,110875,110876,28360],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[88,110873,110874],{},"obs[3]","？因为 obs 的顺序是 ",[88,110877,110878],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[83,110880,110882],{"className":30353,"code":110881,"language":30355,"meta":10,"style":10},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[88,110883,110884],{"__ignoreMap":10},[91,110885,110886,110888,110890,110892,110894,110896,110898,110900,110902],{"class":93,"line":94},[91,110887,107417],{"class":101},[91,110889,147],{"class":97},[91,110891,110202],{"class":150},[91,110893,6497],{"class":97},[91,110895,109795],{"class":101},[91,110897,583],{"class":97},[91,110899,61842],{"class":150},[91,110901,6497],{"class":97},[91,110903,110215],{"class":101},[38,110905,110906,110907,100993,110909,110911],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[88,110908,105235],{},[88,110910,35304],{}," 是人为设置的系数，不是固定公式。",[83,110913,110915],{"className":30353,"code":110914,"language":30355,"meta":10,"style":10},"action = np.clip(action, -1.0, 1.0)\n",[88,110916,110917],{"__ignoreMap":10},[91,110918,110919,110921,110923,110925,110927,110929,110931,110933],{"class":93,"line":94},[91,110920,107417],{"class":101},[91,110922,147],{"class":97},[91,110924,107422],{"class":101},[91,110926,634],{"class":97},[91,110928,102378],{"class":150},[91,110930,12414],{"class":101},[91,110932,102378],{"class":150},[91,110934,108],{"class":101},[38,110936,110937],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[83,110939,110940],{"className":30353,"code":109748,"language":30355,"meta":10,"style":10},[88,110941,110942],{"__ignoreMap":10},[91,110943,110944,110946,110948,110950,110952],{"class":93,"line":94},[91,110945,105846],{"class":101},[91,110947,293],{"class":150},[91,110949,4421],{"class":101},[91,110951,147],{"class":97},[91,110953,107445],{"class":101},[38,110955,110956],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[83,110958,110959],{"className":30353,"code":104480,"language":30355,"meta":10,"style":10},[88,110960,110961],{"__ignoreMap":10},[91,110962,110963],{"class":93,"line":94},[91,110964,104480],{"class":101},[38,110966,110967,110968,110970],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[88,110969,106101],{}," 计算小车和杆子的下一刻状态。",[83,110972,110974],{"className":30353,"code":110973,"language":30355,"meta":10,"style":10},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[88,110975,110976,110985],{"__ignoreMap":10},[91,110977,110978,110981,110983],{"class":93,"line":94},[91,110979,110980],{"class":101},"reward ",[91,110982,147],{"class":97},[91,110984,110267],{"class":101},[91,110986,110987,110989,110991],{"class":93,"line":11},[91,110988,110785],{"class":101},[91,110990,9456],{"class":97},[91,110992,110277],{"class":101},[38,110994,110995,110996,110998,110999,111002,111003,28360],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[88,110997,9456],{}," 是简写，",[88,111000,111001],{},"total_reward += reward"," 等价于 ",[88,111004,111005],{},"total_reward = total_reward + reward",[83,111007,111009],{"className":30353,"code":111008,"language":30355,"meta":10,"style":10},"if step % 100 == 0:\n",[88,111010,111011],{"__ignoreMap":10},[91,111012,111013,111015,111017,111019,111021,111023,111025],{"class":93,"line":94},[91,111014,1509],{"class":97},[91,111016,31591],{"class":101},[91,111018,430],{"class":97},[91,111020,5733],{"class":150},[91,111022,101534],{"class":97},[91,111024,4071],{"class":150},[91,111026,3717],{"class":101},[38,111028,111029,111031,111032,111035],{},[88,111030,430],{}," 是取余数。",[88,111033,111034],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[83,111037,111039],{"className":30353,"code":111038,"language":30355,"meta":10,"style":10},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[88,111040,111041],{"__ignoreMap":10},[91,111042,111043,111045,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073],{"class":93,"line":94},[91,111044,30390],{"class":150},[91,111046,102],{"class":101},[91,111048,110306],{"class":206},[91,111050,110309],{"class":101},[91,111052,110312],{"class":206},[91,111054,110315],{"class":101},[91,111056,173],{"class":150},[91,111058,110320],{"class":101},[91,111060,110323],{"class":206},[91,111062,12414],{"class":101},[91,111064,31993],{"class":150},[91,111066,102],{"class":101},[91,111068,141],{"class":150},[91,111070,110334],{"class":101},[91,111072,173],{"class":150},[91,111074,30472],{"class":101},[38,111076,111077,111078,111081,111082,111085],{},"打印当前步数、观测和动作。",[88,111079,111080],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[88,111083,111084],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[33,111087,102291],{"id":102290},[38,111089,111090],{},"观测向量:",[83,111092,111095],{"className":111093,"code":111094,"language":5166,"meta":10},[5164],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[88,111096,111094],{"__ignoreMap":10},[38,111098,111099],{},"控制器是教学用的简单线性反馈，不保证最优。",[38,111101,111102],{},"每隔 100 步会打印一次：",[83,111104,111107],{"className":111105,"code":111106,"language":5166,"meta":10},[5164],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[88,111108,111106],{"__ignoreMap":10},[38,111110,111111],{},"重点观察：",[46,111113,111114,111120,111125],{},[49,111115,111116,111119],{},[88,111117,111118],{},"pole_angle"," 是否越来越大。",[49,111121,111122,111124],{},[88,111123,109701],{}," 是否跑得太远。",[49,111126,111127,111128,82514,111130,28360],{},"action 是否经常被 clip 到 ",[88,111129,103890],{},[88,111131,319],{},[38,111133,111134],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[33,111136,102323],{"id":102322},[46,111138,111139,111145,111148,111154,111164,111170,111173],{},[49,111140,111141,111142,28360],{},"把初始角度改为 ",[88,111143,111144],{},"data.qpos[1] = 0.3",[49,111146,111147],{},"重新运行，观察控制是否变差。",[49,111149,111150,111151,111153],{},"把 actuator ",[88,111152,107042],{}," 改小。",[49,111155,111156,111157,111160,111161,28360],{},"打印 ",[88,111158,111159],{},"model.nq, model.nv, model.nu","，应为 ",[88,111162,111163],{},"2 2 1",[49,111165,111166,111167,111169],{},"把 reward 里的 ",[88,111168,110735],{}," 系数改大，观察总奖励变化。",[49,111171,111172],{},"把控制器改成反号，观察杆子是否更容易倒。",[49,111174,111175],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[33,111177,102428],{"id":102427},[63,111179,111180],{"id":111180},"杆子方向和预期不一致",[38,111182,102371,111183,111185,111186,111188],{},[88,111184,106214],{}," 和 capsule 的 ",[88,111187,103151],{},"，必要时用 viewer 可视化确认。",[63,111190,111191],{"id":111191},"控制器越控越倒",[38,111193,111194],{},"说明反馈符号可能反了，尝试:",[83,111196,111198],{"className":30353,"code":111197,"language":30355,"meta":10,"style":10},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[88,111199,111200],{"__ignoreMap":10},[91,111201,111202,111204,111206,111208,111210,111212,111214,111216,111218,111220],{"class":93,"line":94},[91,111203,107417],{"class":101},[91,111205,147],{"class":97},[91,111207,52246],{"class":97},[91,111209,105235],{"class":150},[91,111211,6497],{"class":97},[91,111213,109795],{"class":101},[91,111215,634],{"class":97},[91,111217,61842],{"class":150},[91,111219,6497],{"class":97},[91,111221,110215],{"class":101},[63,111223,111224],{"id":111224},"小车飞走",[38,111226,111227,111228,111230,111231,111234],{},"降低 ",[88,111229,107042],{}," 或缩小 ",[88,111232,111233],{},"action"," 的 clip 范围。",[63,111236,111238,111240],{"id":111237},"obs3-为什么是杆子角速度",[88,111239,110874],{}," 为什么是杆子角速度",[38,111242,111243],{},"因为这个模型里：",[83,111245,111248],{"className":111246,"code":111247,"language":5166,"meta":10},[5164],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[88,111249,111247],{"__ignoreMap":10},[38,111251,109722],{},[83,111253,111256],{"className":111254,"code":111255,"language":5166,"meta":10},[5164],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[88,111257,111255],{"__ignoreMap":10},[63,111259,111261],{"id":111260},"reward-变成负数是否错误","reward 变成负数是否错误",[38,111263,111264],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[33,111266,102582],{"id":102581},[38,111268,111269],{},"一个控制任务通常包含：",[46,111271,111272,111275,111283,111288,111291],{},[49,111273,111274],{},"模型：Cartpole 的 body、joint、actuator。",[49,111276,111277,111278,314,111280,111282],{},"观测：从 ",[88,111279,104005],{},[88,111281,104335],{}," 里取状态。",[49,111284,111285,111286,28360],{},"动作：写入 ",[88,111287,101051],{},[49,111289,111290],{},"奖励：根据任务目标打分。",[49,111292,111293],{},"循环：obs -> action -> step -> reward。",[38,111295,111296],{},"这就是后面 Gymnasium 环境的基本骨架。",[5105,111298,104261],{},{"title":10,"searchDepth":11,"depth":11,"links":111300},[111301,111302,111303,111308,111312,111313,111314,111322],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":111304},[111305,111306,111307],{"id":109675,"depth":1157,"text":109676},{"id":109740,"depth":1157,"text":109741},{"id":109756,"depth":1157,"text":109757},{"id":101227,"depth":11,"text":101228,"children":111309},[111310,111311],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":111315},[111316,111317,111318,111319,111321],{"id":111180,"depth":1157,"text":111180},{"id":111191,"depth":1157,"text":111191},{"id":111224,"depth":1157,"text":111224},{"id":111237,"depth":1157,"text":111320},"obs[3] 为什么是杆子角速度",{"id":111260,"depth":1157,"text":111261},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109411,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111329,"title":111330,"body":111331,"description":10,"extension":14,"meta":113345,"navigation":17,"path":113346,"seo":113347,"stem":113348,"__hash__":113349},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111332,"toc":113321},[111333,111336,111338,111341,111343,111360,111363,111366,111372,111375,111377,111379,111403,111405,111419,111421,111462,111464,111482,111484,111487,111493,111496,111524,111528,111534,111559,111562,111593,111600,111603,111606,111612,111615,111621,111624,111630,111634,111637,111662,111665,111667,112427,112429,112441,112443,112454,112456,112459,112476,112479,112481,112492,112495,112497,112543,112546,112559,112562,112644,112647,112649,112665,112675,112688,112691,112730,112740,112751,112761,112774,112777,112806,112809,112819,112822,112828,112845,112856,112858,112864,112881,112892,112913,112916,112928,112931,112952,112955,112963,112971,112988,112991,113060,113067,113075,113078,113091,113098,113100,113103,113109,113112,113115,113121,113127,113129,113169,113171,113177,113186,113189,113191,113211,113214,113217,113223,113227,113229,113256,113259,113262,113289,113295,113298,113301,113303,113306,113309,113315,113318],[29,111334,111330],{"id":111335},"_7控制任务reacher-机械臂到达目标",[33,111337,100622],{"id":100621},[38,111339,111340],{},"本章搭建一个二维两关节 reacher 任务。",[38,111342,104306],{},[46,111344,111345,111348,111351,111354,111357],{},[49,111346,111347],{},"两个 hinge joint",[49,111349,111350],{},"两个 motor actuator",[49,111352,111353],{},"site 作为末端点和目标点",[49,111355,111356],{},"根据末端和目标距离设计 reward",[49,111358,111359],{},"构造机械臂任务的基本形式",[38,111361,111362],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[38,111364,111365],{},"Reacher 任务可以理解为：",[83,111367,111370],{"className":111368,"code":111369,"language":5166,"meta":10},[5164],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[88,111371,111369],{"__ignoreMap":10},[38,111373,111374],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[33,111376,100745],{"id":100744},[38,111378,100748],{},[83,111380,111381],{"className":23796,"code":104363,"language":23798,"meta":10,"style":10},[88,111382,111383],{"__ignoreMap":10},[91,111384,111385,111387,111389,111391,111393,111395,111397,111399,111401],{"class":93,"line":94},[91,111386,24551],{"class":1941},[91,111388,26290],{"class":206},[91,111390,23808],{"class":206},[91,111392,26375],{"class":150},[91,111394,104378],{"class":206},[91,111396,100773],{"class":206},[91,111398,102476],{"class":206},[91,111400,100789],{"class":206},[91,111402,104387],{"class":206},[38,111404,102794],{},[83,111406,111407],{"className":23796,"code":100894,"language":23798,"meta":10,"style":10},[88,111408,111409],{"__ignoreMap":10},[91,111410,111411,111413,111415,111417],{"class":93,"line":94},[91,111412,23805],{"class":1941},[91,111414,23808],{"class":206},[91,111416,100905],{"class":206},[91,111418,100908],{"class":206},[38,111420,102811],{},[83,111422,111424],{"className":23796,"code":111423,"language":23798,"meta":10,"style":10},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[88,111425,111426,111443,111452],{"__ignoreMap":10},[91,111427,111428,111430,111432,111434,111437,111439,111441],{"class":93,"line":94},[91,111429,30305],{"class":1941},[91,111431,29151],{"class":206},[91,111433,25090],{"class":150},[91,111435,111436],{"class":206}," mujoco-reacher",[91,111438,100950],{"class":206},[91,111440,100953],{"class":150},[91,111442,100956],{"class":150},[91,111444,111445,111447,111449],{"class":93,"line":11},[91,111446,30305],{"class":1941},[91,111448,100963],{"class":206},[91,111450,111451],{"class":206}," mujoco-reacher\n",[91,111453,111454,111456,111458,111460],{"class":93,"line":1157},[91,111455,23805],{"class":1941},[91,111457,23808],{"class":206},[91,111459,100905],{"class":206},[91,111461,100908],{"class":206},[38,111463,100979],{},[46,111465,111466,111469,111472],{},[49,111467,111468],{},"本章使用低维状态，不使用图像输入。",[49,111470,111471],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[49,111473,111474,111475,314,111477,314,111479,111481],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[88,111476,104005],{},[88,111478,104335],{},[88,111480,103655],{}," 的方法一致。",[33,111483,101020],{"id":101019},[38,111485,111486],{},"Reacher 任务核心:",[83,111488,111491],{"className":111489,"code":111490,"language":5166,"meta":10},[5164],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[88,111492,111490],{"__ignoreMap":10},[38,111494,111495],{},"读取 site 世界坐标:",[83,111497,111499],{"className":30353,"code":111498,"language":30355,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[88,111500,111501,111514],{"__ignoreMap":10},[91,111502,111503,111505,111507,111509,111512],{"class":93,"line":94},[91,111504,103609],{"class":101},[91,111506,147],{"class":97},[91,111508,103380],{"class":101},[91,111510,111511],{"class":206},"\"tip\"",[91,111513,108],{"class":101},[91,111515,111516,111519,111521],{"class":93,"line":11},[91,111517,111518],{"class":101},"tip_pos ",[91,111520,147],{"class":97},[91,111522,111523],{"class":101}," data.site_xpos[site_id]\n",[63,111525,111527],{"id":111526},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[38,111529,111530,111531,111533],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[88,111532,104005],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[83,111535,111537],{"className":30353,"code":111536,"language":30355,"meta":10,"style":10},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[88,111538,111539,111549],{"__ignoreMap":10},[91,111540,111541,111544,111546],{"class":93,"line":94},[91,111542,111543],{"class":101},"tip ",[91,111545,147],{"class":97},[91,111547,111548],{"class":101}," data.site_xpos[tip_site_id]\n",[91,111550,111551,111554,111556],{"class":93,"line":11},[91,111552,111553],{"class":101},"target ",[91,111555,147],{"class":97},[91,111557,111558],{"class":101}," data.site_xpos[target_site_id]\n",[38,111560,111561],{},"这样 reward 就很容易写：",[83,111563,111565],{"className":30353,"code":111564,"language":30355,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[88,111566,111567,111582],{"__ignoreMap":10},[91,111568,111569,111572,111574,111577,111579],{"class":93,"line":94},[91,111570,111571],{"class":101},"dist ",[91,111573,147],{"class":97},[91,111575,111576],{"class":101}," np.linalg.norm(tip ",[91,111578,634],{"class":97},[91,111580,111581],{"class":101}," target)\n",[91,111583,111584,111586,111588,111590],{"class":93,"line":11},[91,111585,110980],{"class":101},[91,111587,147],{"class":97},[91,111589,52246],{"class":97},[91,111591,111592],{"class":101},"dist\n",[38,111594,111595,111596,111599],{},"距离越小，",[88,111597,111598],{},"-dist"," 越接近 0，奖励越高。",[63,111601,111602],{"id":111602},"两关节机械臂的状态",[38,111604,111605],{},"这个模型有两个 hinge joint：",[83,111607,111610],{"className":111608,"code":111609,"language":5166,"meta":10},[5164],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[88,111611,111609],{"__ignoreMap":10},[38,111613,111614],{},"再加上末端和目标位置：",[83,111616,111619],{"className":111617,"code":111618,"language":5166,"meta":10},[5164],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[88,111620,111618],{"__ignoreMap":10},[38,111622,111623],{},"总维度：",[83,111625,111628],{"className":111626,"code":111627,"language":5166,"meta":10},[5164],"2 + 2 + 3 + 3 = 10\n",[88,111629,111627],{"__ignoreMap":10},[63,111631,111633],{"id":111632},"为什么-gravity-是-0","为什么 gravity 是 0",[38,111635,111636],{},"本章把重力设为：",[83,111638,111640],{"className":53042,"code":111639,"language":53044,"meta":10,"style":10},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[88,111641,111642],{"__ignoreMap":10},[91,111643,111644,111646,111648,111650,111652,111654,111656,111658,111660],{"class":93,"line":94},[91,111645,1012],{"class":101},[91,111647,69141],{"class":51275},[91,111649,101169],{"class":1941},[91,111651,147],{"class":101},[91,111653,101174],{"class":206},[91,111655,101177],{"class":1941},[91,111657,147],{"class":101},[91,111659,103746],{"class":206},[91,111661,101119],{"class":101},[38,111663,111664],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[33,111666,101228],{"id":101227},[83,111668,111670],{"className":30353,"code":111669,"language":30355,"meta":10,"style":10},"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",[88,111671,111672,111678,111688,111692,111696,111704,111709,111714,111718,111722,111727,111732,111736,111741,111746,111751,111755,111760,111765,111770,111775,111779,111783,111787,111791,111795,111800,111805,111809,111813,111817,111821,111825,111840,111849,111861,111884,111891,111895,111899,111909,111923,111937,111944,111948,111952,111966,111978,111990,112003,112018,112035,112039,112043,112055,112067,112075,112083,112087,112103,112108,112121,112134,112149,112153,112188,112220,112224,112228,112237,112241,112257,112267,112278,112294,112310,112326,112342,112346,112364,112384,112403,112407,112411,112423],{"__ignoreMap":10},[91,111673,111674,111676],{"class":93,"line":94},[91,111675,30367],{"class":97},[91,111677,101276],{"class":101},[91,111679,111680,111682,111684,111686],{"class":93,"line":11},[91,111681,30367],{"class":97},[91,111683,31355],{"class":101},[91,111685,31358],{"class":97},[91,111687,31361],{"class":101},[91,111689,111690],{"class":93,"line":1157},[91,111691,2378],{"emptyLinePlaceholder":17},[91,111693,111694],{"class":93,"line":1172},[91,111695,2378],{"emptyLinePlaceholder":17},[91,111697,111698,111700,111702],{"class":93,"line":1178},[91,111699,101289],{"class":150},[91,111701,13543],{"class":97},[91,111703,101294],{"class":206},[91,111705,111706],{"class":93,"line":1192},[91,111707,111708],{"class":206},"\u003Cmujoco model=\"two_link_reacher\">\n",[91,111710,111711],{"class":93,"line":1198},[91,111712,111713],{"class":206},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[91,111715,111716],{"class":93,"line":1289},[91,111717,2378],{"emptyLinePlaceholder":17},[91,111719,111720],{"class":93,"line":1295},[91,111721,101313],{"class":206},[91,111723,111724],{"class":93,"line":1307},[91,111725,111726],{"class":206},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[91,111728,111729],{"class":93,"line":1590},[91,111730,111731],{"class":206},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[91,111733,111734],{"class":93,"line":1595},[91,111735,2378],{"emptyLinePlaceholder":17},[91,111737,111738],{"class":93,"line":1601},[91,111739,111740],{"class":206},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[91,111742,111743],{"class":93,"line":1606},[91,111744,111745],{"class":206},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,111747,111748],{"class":93,"line":1620},[91,111749,111750],{"class":206},"      \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",[91,111752,111753],{"class":93,"line":1625},[91,111754,2378],{"emptyLinePlaceholder":17},[91,111756,111757],{"class":93,"line":1631},[91,111758,111759],{"class":206},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[91,111761,111762],{"class":93,"line":1652},[91,111763,111764],{"class":206},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,111766,111767],{"class":93,"line":1657},[91,111768,111769],{"class":206},"        \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",[91,111771,111772],{"class":93,"line":1671},[91,111773,111774],{"class":206},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[91,111776,111777],{"class":93,"line":1676},[91,111778,106413],{"class":206},[91,111780,111781],{"class":93,"line":1705},[91,111782,101342],{"class":206},[91,111784,111785],{"class":93,"line":1710},[91,111786,101347],{"class":206},[91,111788,111789],{"class":93,"line":1727},[91,111790,2378],{"emptyLinePlaceholder":17},[91,111792,111793],{"class":93,"line":1732},[91,111794,106430],{"class":206},[91,111796,111797],{"class":93,"line":1737},[91,111798,111799],{"class":206},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[91,111801,111802],{"class":93,"line":1742},[91,111803,111804],{"class":206},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[91,111806,111807],{"class":93,"line":1756},[91,111808,106440],{"class":206},[91,111810,111811],{"class":93,"line":1761},[91,111812,101352],{"class":206},[91,111814,111815],{"class":93,"line":2555},[91,111816,95673],{"class":206},[91,111818,111819],{"class":93,"line":2569},[91,111820,2378],{"emptyLinePlaceholder":17},[91,111822,111823],{"class":93,"line":2577},[91,111824,2378],{"emptyLinePlaceholder":17},[91,111826,111827,111829,111832,111835,111837],{"class":93,"line":2582},[91,111828,31922],{"class":97},[91,111830,111831],{"class":1941}," site_position",[91,111833,111834],{"class":101},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[91,111836,1277],{"class":150},[91,111838,111839],{"class":101},") -> np.ndarray:\n",[91,111841,111842,111844,111846],{"class":93,"line":2588},[91,111843,103375],{"class":101},[91,111845,147],{"class":97},[91,111847,111848],{"class":101}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[91,111850,111851,111853,111855,111857,111859],{"class":93,"line":2594},[91,111852,3079],{"class":97},[91,111854,103424],{"class":101},[91,111856,1012],{"class":97},[91,111858,4071],{"class":150},[91,111860,3717],{"class":101},[91,111862,111863,111865,111867,111869,111871,111874,111876,111878,111880,111882],{"class":93,"line":2599},[91,111864,103407],{"class":97},[91,111866,103410],{"class":150},[91,111868,102],{"class":101},[91,111870,154],{"class":97},[91,111872,111873],{"class":206},"\"site not found: ",[91,111875,998],{"class":150},[91,111877,79785],{"class":101},[91,111879,1048],{"class":150},[91,111881,353],{"class":206},[91,111883,108],{"class":101},[91,111885,111886,111888],{"class":93,"line":7927},[91,111887,4068],{"class":97},[91,111889,111890],{"class":101}," data.site_xpos[site_id].copy()\n",[91,111892,111893],{"class":93,"line":7951},[91,111894,2378],{"emptyLinePlaceholder":17},[91,111896,111897],{"class":93,"line":7956},[91,111898,2378],{"emptyLinePlaceholder":17},[91,111900,111901,111903,111906],{"class":93,"line":7962},[91,111902,31922],{"class":97},[91,111904,111905],{"class":1941}," get_obs",[91,111907,111908],{"class":101},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[91,111910,111911,111914,111916,111919,111921],{"class":93,"line":7989},[91,111912,111913],{"class":101},"    tip ",[91,111915,147],{"class":97},[91,111917,111918],{"class":101}," site_position(model, data, ",[91,111920,111511],{"class":206},[91,111922,108],{"class":101},[91,111924,111925,111928,111930,111932,111935],{"class":93,"line":7994},[91,111926,111927],{"class":101},"    target ",[91,111929,147],{"class":97},[91,111931,111918],{"class":101},[91,111933,111934],{"class":206},"\"target\"",[91,111936,108],{"class":101},[91,111938,111939,111941],{"class":93,"line":8000},[91,111940,4068],{"class":97},[91,111942,111943],{"class":101}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[91,111945,111946],{"class":93,"line":8012},[91,111947,2378],{"emptyLinePlaceholder":17},[91,111949,111950],{"class":93,"line":8024},[91,111951,2378],{"emptyLinePlaceholder":17},[91,111953,111954,111956,111959,111962,111964],{"class":93,"line":8036},[91,111955,31922],{"class":97},[91,111957,111958],{"class":1941}," reward",[91,111960,111961],{"class":101},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[91,111963,141],{"class":150},[91,111965,3717],{"class":101},[91,111967,111968,111970,111972,111974,111976],{"class":93,"line":9695},[91,111969,111913],{"class":101},[91,111971,147],{"class":97},[91,111973,111918],{"class":101},[91,111975,111511],{"class":206},[91,111977,108],{"class":101},[91,111979,111980,111982,111984,111986,111988],{"class":93,"line":9720},[91,111981,111927],{"class":101},[91,111983,147],{"class":97},[91,111985,111918],{"class":101},[91,111987,111934],{"class":206},[91,111989,108],{"class":101},[91,111991,111992,111995,111997,111999,112001],{"class":93,"line":9743},[91,111993,111994],{"class":101},"    dist ",[91,111996,147],{"class":97},[91,111998,111576],{"class":101},[91,112000,634],{"class":97},[91,112002,111581],{"class":101},[91,112004,112005,112008,112010,112013,112015],{"class":93,"line":9767},[91,112006,112007],{"class":101},"    control_cost ",[91,112009,147],{"class":97},[91,112011,112012],{"class":150}," 0.01",[91,112014,6497],{"class":97},[91,112016,112017],{"class":101}," np.sum(np.square(data.ctrl))\n",[91,112019,112020,112022,112024,112026,112028,112030,112032],{"class":93,"line":9772},[91,112021,4068],{"class":97},[91,112023,109772],{"class":150},[91,112025,102],{"class":101},[91,112027,634],{"class":97},[91,112029,111571],{"class":101},[91,112031,634],{"class":97},[91,112033,112034],{"class":101}," control_cost)\n",[91,112036,112037],{"class":93,"line":9777},[91,112038,2378],{"emptyLinePlaceholder":17},[91,112040,112041],{"class":93,"line":9782},[91,112042,2378],{"emptyLinePlaceholder":17},[91,112044,112045,112047,112049,112051,112053],{"class":93,"line":9791},[91,112046,31922],{"class":97},[91,112048,1951],{"class":1941},[91,112050,101373],{"class":101},[91,112052,95661],{"class":150},[91,112054,3717],{"class":101},[91,112056,112057,112059,112061,112063,112065],{"class":93,"line":9796},[91,112058,101382],{"class":101},[91,112060,147],{"class":97},[91,112062,101387],{"class":101},[91,112064,101289],{"class":150},[91,112066,108],{"class":101},[91,112068,112069,112071,112073],{"class":93,"line":9802},[91,112070,101396],{"class":101},[91,112072,147],{"class":97},[91,112074,101401],{"class":101},[91,112076,112077,112079,112081],{"class":93,"line":9823},[91,112078,110128],{"class":101},[91,112080,147],{"class":97},[91,112082,104736],{"class":150},[91,112084,112085],{"class":93,"line":9829},[91,112086,2378],{"emptyLinePlaceholder":17},[91,112088,112089,112091,112093,112095,112097,112099,112101],{"class":93,"line":9843},[91,112090,3179],{"class":97},[91,112092,31591],{"class":101},[91,112094,26018],{"class":97},[91,112096,32418],{"class":150},[91,112098,102],{"class":101},[91,112100,65049],{"class":150},[91,112102,30761],{"class":101},[91,112104,112105],{"class":93,"line":9849},[91,112106,112107],{"class":101},"        mujoco.mj_forward(model, data)\n",[91,112109,112110,112113,112115,112117,112119],{"class":93,"line":9876},[91,112111,112112],{"class":101},"        tip ",[91,112114,147],{"class":97},[91,112116,111918],{"class":101},[91,112118,111511],{"class":206},[91,112120,108],{"class":101},[91,112122,112123,112126,112128,112130,112132],{"class":93,"line":9885},[91,112124,112125],{"class":101},"        target ",[91,112127,147],{"class":97},[91,112129,111918],{"class":101},[91,112131,111934],{"class":206},[91,112133,108],{"class":101},[91,112135,112136,112139,112141,112144,112146],{"class":93,"line":9891},[91,112137,112138],{"class":101},"        error ",[91,112140,147],{"class":97},[91,112142,112143],{"class":101}," target ",[91,112145,634],{"class":97},[91,112147,112148],{"class":101}," tip\n",[91,112150,112151],{"class":93,"line":9899},[91,112152,2378],{"emptyLinePlaceholder":17},[91,112154,112155,112157,112159,112161,112163,112166,112168,112170,112173,112175,112178,112180,112182,112184,112186],{"class":93,"line":9904},[91,112156,106592],{"class":101},[91,112158,293],{"class":150},[91,112160,4421],{"class":101},[91,112162,147],{"class":97},[91,112164,112165],{"class":101}," np.clip(",[91,112167,105235],{"class":150},[91,112169,6497],{"class":97},[91,112171,112172],{"class":101}," error[",[91,112174,179],{"class":150},[91,112176,112177],{"class":101},"], ",[91,112179,634],{"class":97},[91,112181,102378],{"class":150},[91,112183,12414],{"class":101},[91,112185,102378],{"class":150},[91,112187,108],{"class":101},[91,112189,112190,112192,112194,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218],{"class":93,"line":16583},[91,112191,106592],{"class":101},[91,112193,319],{"class":150},[91,112195,4421],{"class":101},[91,112197,147],{"class":97},[91,112199,112165],{"class":101},[91,112201,105235],{"class":150},[91,112203,6497],{"class":97},[91,112205,112172],{"class":101},[91,112207,293],{"class":150},[91,112209,112177],{"class":101},[91,112211,634],{"class":97},[91,112213,102378],{"class":150},[91,112215,12414],{"class":101},[91,112217,102378],{"class":150},[91,112219,108],{"class":101},[91,112221,112222],{"class":93,"line":16589},[91,112223,2378],{"emptyLinePlaceholder":17},[91,112225,112226],{"class":93,"line":16612},[91,112227,101491],{"class":101},[91,112229,112230,112232,112234],{"class":93,"line":16618},[91,112231,110272],{"class":101},[91,112233,9456],{"class":97},[91,112235,112236],{"class":101}," reward(model, data)\n",[91,112238,112239],{"class":93,"line":16641},[91,112240,2378],{"emptyLinePlaceholder":17},[91,112242,112243,112245,112247,112249,112251,112253,112255],{"class":93,"line":16655},[91,112244,2475],{"class":97},[91,112246,31591],{"class":101},[91,112248,430],{"class":97},[91,112250,5733],{"class":150},[91,112252,101534],{"class":97},[91,112254,4071],{"class":150},[91,112256,3717],{"class":101},[91,112258,112259,112262,112264],{"class":93,"line":16675},[91,112260,112261],{"class":101},"            obs ",[91,112263,147],{"class":97},[91,112265,112266],{"class":101}," get_obs(model, data)\n",[91,112268,112269,112271,112273,112275],{"class":93,"line":16681},[91,112270,34625],{"class":150},[91,112272,102],{"class":101},[91,112274,110306],{"class":206},[91,112276,112277],{"class":101},", step)\n",[91,112279,112280,112282,112284,112287,112290,112292],{"class":93,"line":16692},[91,112281,34625],{"class":150},[91,112283,102],{"class":101},[91,112285,112286],{"class":206},"\"  tip:\"",[91,112288,112289],{"class":101},", np.round(tip, ",[91,112291,173],{"class":150},[91,112293,30472],{"class":101},[91,112295,112296,112298,112300,112303,112306,112308],{"class":93,"line":16715},[91,112297,34625],{"class":150},[91,112299,102],{"class":101},[91,112301,112302],{"class":206},"\"  target:\"",[91,112304,112305],{"class":101},", np.round(target, ",[91,112307,173],{"class":150},[91,112309,30472],{"class":101},[91,112311,112312,112314,112316,112319,112322,112324],{"class":93,"line":16737},[91,112313,34625],{"class":150},[91,112315,102],{"class":101},[91,112317,112318],{"class":206},"\"  ctrl:\"",[91,112320,112321],{"class":101},", np.round(data.ctrl.copy(), ",[91,112323,173],{"class":150},[91,112325,30472],{"class":101},[91,112327,112328,112330,112332,112335,112338,112340],{"class":93,"line":16742},[91,112329,34625],{"class":150},[91,112331,102],{"class":101},[91,112333,112334],{"class":206},"\"  obs_dim:\"",[91,112336,112337],{"class":101},", obs.shape[",[91,112339,293],{"class":150},[91,112341,4635],{"class":101},[91,112343,112344],{"class":93,"line":16748},[91,112345,2378],{"emptyLinePlaceholder":17},[91,112347,112348,112350,112352,112354,112356,112358,112360,112362],{"class":93,"line":16762},[91,112349,31274],{"class":150},[91,112351,102],{"class":101},[91,112353,110351],{"class":206},[91,112355,12414],{"class":101},[91,112357,31993],{"class":150},[91,112359,110358],{"class":101},[91,112361,173],{"class":150},[91,112363,30472],{"class":101},[91,112365,112366,112368,112370,112373,112376,112378,112380,112382],{"class":93,"line":16775},[91,112367,31274],{"class":150},[91,112369,102],{"class":101},[91,112371,112372],{"class":206},"\"final tip:\"",[91,112374,112375],{"class":101},", np.round(site_position(model, data, ",[91,112377,111511],{"class":206},[91,112379,110320],{"class":101},[91,112381,173],{"class":150},[91,112383,30472],{"class":101},[91,112385,112386,112388,112390,112393,112395,112397,112399,112401],{"class":93,"line":16780},[91,112387,31274],{"class":150},[91,112389,102],{"class":101},[91,112391,112392],{"class":206},"\"target:\"",[91,112394,112375],{"class":101},[91,112396,111934],{"class":206},[91,112398,110320],{"class":101},[91,112400,173],{"class":150},[91,112402,30472],{"class":101},[91,112404,112405],{"class":93,"line":16794},[91,112406,2378],{"emptyLinePlaceholder":17},[91,112408,112409],{"class":93,"line":16799},[91,112410,2378],{"emptyLinePlaceholder":17},[91,112412,112413,112415,112417,112419,112421],{"class":93,"line":16805},[91,112414,1509],{"class":97},[91,112416,31195],{"class":150},[91,112418,101534],{"class":97},[91,112420,101537],{"class":206},[91,112422,3717],{"class":101},[91,112424,112425],{"class":93,"line":16810},[91,112426,101544],{"class":101},[38,112428,103545],{},[83,112430,112432],{"className":23796,"code":112431,"language":23798,"meta":10,"style":10},"touch ch7_reacher.py\n",[88,112433,112434],{"__ignoreMap":10},[91,112435,112436,112438],{"class":93,"line":94},[91,112437,101258],{"class":1941},[91,112439,112440],{"class":206}," ch7_reacher.py\n",[38,112442,110419],{},[83,112444,112446],{"className":23796,"code":112445,"language":23798,"meta":10,"style":10},"python ch7_reacher.py\n",[88,112447,112448],{"__ignoreMap":10},[91,112449,112450,112452],{"class":93,"line":94},[91,112451,30355],{"class":1941},[91,112453,112440],{"class":206},[63,112455,101547],{"id":101547},[38,112457,112458],{},"读取 site 坐标：",[83,112460,112462],{"className":30353,"code":112461,"language":30355,"meta":10,"style":10},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[88,112463,112464],{"__ignoreMap":10},[91,112465,112466,112468,112470,112472,112474],{"class":93,"line":94},[91,112467,31922],{"class":97},[91,112469,111831],{"class":1941},[91,112471,111834],{"class":101},[91,112473,1277],{"class":150},[91,112475,111839],{"class":101},[38,112477,112478],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[38,112480,110435],{},[83,112482,112484],{"className":30353,"code":112483,"language":30355,"meta":10,"style":10},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[88,112485,112486],{"__ignoreMap":10},[91,112487,112488,112490],{"class":93,"line":94},[91,112489,17025],{"class":97},[91,112491,111943],{"class":101},[38,112493,112494],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[38,112496,109760],{},[83,112498,112500],{"className":30353,"code":112499,"language":30355,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[88,112501,112502,112514,112527],{"__ignoreMap":10},[91,112503,112504,112506,112508,112510,112512],{"class":93,"line":94},[91,112505,111571],{"class":101},[91,112507,147],{"class":97},[91,112509,111576],{"class":101},[91,112511,634],{"class":97},[91,112513,111581],{"class":101},[91,112515,112516,112519,112521,112523,112525],{"class":93,"line":11},[91,112517,112518],{"class":101},"control_cost ",[91,112520,147],{"class":97},[91,112522,112012],{"class":150},[91,112524,6497],{"class":97},[91,112526,112017],{"class":101},[91,112528,112529,112531,112533,112535,112537,112539,112541],{"class":93,"line":1157},[91,112530,17025],{"class":97},[91,112532,109772],{"class":150},[91,112534,102],{"class":101},[91,112536,634],{"class":97},[91,112538,111571],{"class":101},[91,112540,634],{"class":97},[91,112542,112034],{"class":101},[38,112544,112545],{},"奖励由两部分组成：",[46,112547,112548,112553],{},[49,112549,112550,112552],{},[88,112551,111598],{},"：末端离目标越远，奖励越低。",[49,112554,112555,112558],{},[88,112556,112557],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[38,112560,112561],{},"简单控制器：",[83,112563,112565],{"className":30353,"code":112564,"language":30355,"meta":10,"style":10},"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",[88,112566,112567,112580,112612],{"__ignoreMap":10},[91,112568,112569,112572,112574,112576,112578],{"class":93,"line":94},[91,112570,112571],{"class":101},"error ",[91,112573,147],{"class":97},[91,112575,112143],{"class":101},[91,112577,634],{"class":97},[91,112579,112148],{"class":101},[91,112581,112582,112584,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610],{"class":93,"line":11},[91,112583,105846],{"class":101},[91,112585,293],{"class":150},[91,112587,4421],{"class":101},[91,112589,147],{"class":97},[91,112591,112165],{"class":101},[91,112593,105235],{"class":150},[91,112595,6497],{"class":97},[91,112597,112172],{"class":101},[91,112599,179],{"class":150},[91,112601,112177],{"class":101},[91,112603,634],{"class":97},[91,112605,102378],{"class":150},[91,112607,12414],{"class":101},[91,112609,102378],{"class":150},[91,112611,108],{"class":101},[91,112613,112614,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642],{"class":93,"line":1157},[91,112615,105846],{"class":101},[91,112617,319],{"class":150},[91,112619,4421],{"class":101},[91,112621,147],{"class":97},[91,112623,112165],{"class":101},[91,112625,105235],{"class":150},[91,112627,6497],{"class":97},[91,112629,112172],{"class":101},[91,112631,293],{"class":150},[91,112633,112177],{"class":101},[91,112635,634],{"class":97},[91,112637,102378],{"class":150},[91,112639,12414],{"class":101},[91,112641,102378],{"class":150},[91,112643,108],{"class":101},[38,112645,112646],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[63,112648,101683],{"id":101683},[83,112650,112651],{"className":30353,"code":112461,"language":30355,"meta":10,"style":10},[88,112652,112653],{"__ignoreMap":10},[91,112654,112655,112657,112659,112661,112663],{"class":93,"line":94},[91,112656,31922],{"class":97},[91,112658,111831],{"class":1941},[91,112660,111834],{"class":101},[91,112662,1277],{"class":150},[91,112664,111839],{"class":101},[38,112666,112667,112668,112670,112671,82514,112673,28360],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[88,112669,79785],{}," 是 site 的名字，比如 ",[88,112672,111511],{},[88,112674,111934],{},[83,112676,112678],{"className":30353,"code":112677,"language":30355,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[88,112679,112680],{"__ignoreMap":10},[91,112681,112682,112684,112686],{"class":93,"line":94},[91,112683,103609],{"class":101},[91,112685,147],{"class":97},[91,112687,111848],{"class":101},[38,112689,112690],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[83,112692,112694],{"className":30353,"code":112693,"language":30355,"meta":10,"style":10},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[88,112695,112696,112708],{"__ignoreMap":10},[91,112697,112698,112700,112702,112704,112706],{"class":93,"line":94},[91,112699,1509],{"class":97},[91,112701,103424],{"class":101},[91,112703,1012],{"class":97},[91,112705,4071],{"class":150},[91,112707,3717],{"class":101},[91,112709,112710,112712,112714,112716,112718,112720,112722,112724,112726,112728],{"class":93,"line":11},[91,112711,103870],{"class":97},[91,112713,103410],{"class":150},[91,112715,102],{"class":101},[91,112717,154],{"class":97},[91,112719,111873],{"class":206},[91,112721,998],{"class":150},[91,112723,79785],{"class":101},[91,112725,1048],{"class":150},[91,112727,353],{"class":206},[91,112729,108],{"class":101},[38,112731,112732,112733,112736,112737,112739],{},"如果 site 没找到，就主动报错。",[88,112734,112735],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[88,112738,79785],{}," 的值放进字符串里。",[83,112741,112743],{"className":30353,"code":112742,"language":30355,"meta":10,"style":10},"return data.site_xpos[site_id].copy()\n",[88,112744,112745],{"__ignoreMap":10},[91,112746,112747,112749],{"class":93,"line":94},[91,112748,17025],{"class":97},[91,112750,111890],{"class":101},[38,112752,112753,112754,112756,112757,112760],{},"返回这个 site 的世界坐标。",[88,112755,103655],{}," 里的每一行都是一个 site 的 ",[88,112758,112759],{},"(x, y, z)"," 坐标。",[83,112762,112764],{"className":30353,"code":112763,"language":30355,"meta":10,"style":10},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[88,112765,112766],{"__ignoreMap":10},[91,112767,112768,112770,112772],{"class":93,"line":94},[91,112769,31922],{"class":97},[91,112771,111905],{"class":1941},[91,112773,111908],{"class":101},[38,112775,112776],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[83,112778,112780],{"className":30353,"code":112779,"language":30355,"meta":10,"style":10},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[88,112781,112782,112794],{"__ignoreMap":10},[91,112783,112784,112786,112788,112790,112792],{"class":93,"line":94},[91,112785,111543],{"class":101},[91,112787,147],{"class":97},[91,112789,111918],{"class":101},[91,112791,111511],{"class":206},[91,112793,108],{"class":101},[91,112795,112796,112798,112800,112802,112804],{"class":93,"line":11},[91,112797,111553],{"class":101},[91,112799,147],{"class":97},[91,112801,111918],{"class":101},[91,112803,111934],{"class":206},[91,112805,108],{"class":101},[38,112807,112808],{},"分别读取末端点和目标点的世界坐标。",[83,112810,112811],{"className":30353,"code":112483,"language":30355,"meta":10,"style":10},[88,112812,112813],{"__ignoreMap":10},[91,112814,112815,112817],{"class":93,"line":94},[91,112816,17025],{"class":97},[91,112818,111943],{"class":101},[38,112820,112821],{},"把四部分拼成一个观测数组：",[83,112823,112826],{"className":112824,"code":112825,"language":5166,"meta":10},[5164],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[88,112827,112825],{"__ignoreMap":10},[83,112829,112831],{"className":30353,"code":112830,"language":30355,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\n",[88,112832,112833],{"__ignoreMap":10},[91,112834,112835,112837,112839,112841,112843],{"class":93,"line":94},[91,112836,111571],{"class":101},[91,112838,147],{"class":97},[91,112840,111576],{"class":101},[91,112842,634],{"class":97},[91,112844,111581],{"class":101},[38,112846,112847,112848,112851,112852,112855],{},"计算 tip 到 target 的距离。",[88,112849,112850],{},"tip - target"," 得到一个三维向量，",[88,112853,112854],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[38,112857,14612],{},[83,112859,112862],{"className":112860,"code":112861,"language":5166,"meta":10},[5164],"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",[88,112863,112861],{"__ignoreMap":10},[83,112865,112867],{"className":30353,"code":112866,"language":30355,"meta":10,"style":10},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[88,112868,112869],{"__ignoreMap":10},[91,112870,112871,112873,112875,112877,112879],{"class":93,"line":94},[91,112872,112518],{"class":101},[91,112874,147],{"class":97},[91,112876,112012],{"class":150},[91,112878,6497],{"class":97},[91,112880,112017],{"class":101},[38,112882,112883,112884,112887,112888,112891],{},"计算动作惩罚。",[88,112885,112886],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[88,112889,112890],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[83,112893,112895],{"className":30353,"code":112894,"language":30355,"meta":10,"style":10},"return float(-dist - control_cost)\n",[88,112896,112897],{"__ignoreMap":10},[91,112898,112899,112901,112903,112905,112907,112909,112911],{"class":93,"line":94},[91,112900,17025],{"class":97},[91,112902,109772],{"class":150},[91,112904,102],{"class":101},[91,112906,634],{"class":97},[91,112908,111571],{"class":101},[91,112910,634],{"class":97},[91,112912,112034],{"class":101},[38,112914,112915],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[83,112917,112918],{"className":30353,"code":110778,"language":30355,"meta":10,"style":10},[88,112919,112920],{"__ignoreMap":10},[91,112921,112922,112924,112926],{"class":93,"line":94},[91,112923,110785],{"class":101},[91,112925,147],{"class":97},[91,112927,104736],{"class":150},[38,112929,112930],{},"累计奖励变量，记录整个运行过程的总分。",[83,112932,112934],{"className":30353,"code":112933,"language":30355,"meta":10,"style":10},"for step in range(500):\n",[88,112935,112936],{"__ignoreMap":10},[91,112937,112938,112940,112942,112944,112946,112948,112950],{"class":93,"line":94},[91,112939,3003],{"class":97},[91,112941,31591],{"class":101},[91,112943,26018],{"class":97},[91,112945,32418],{"class":150},[91,112947,102],{"class":101},[91,112949,65049],{"class":150},[91,112951,30761],{"class":101},[38,112953,112954],{},"运行 500 个控制步。",[83,112956,112957],{"className":30353,"code":104518,"language":30355,"meta":10,"style":10},[88,112958,112959],{"__ignoreMap":10},[91,112960,112961],{"class":93,"line":94},[91,112962,104518],{"class":101},[38,112964,112965,112966,100993,112968,112970],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[88,112967,103206],{},[88,112969,103209],{}," 是当前状态下的坐标。",[83,112972,112974],{"className":30353,"code":112973,"language":30355,"meta":10,"style":10},"error = target - tip\n",[88,112975,112976],{"__ignoreMap":10},[91,112977,112978,112980,112982,112984,112986],{"class":93,"line":94},[91,112979,112571],{"class":101},[91,112981,147],{"class":97},[91,112983,112143],{"class":101},[91,112985,634],{"class":97},[91,112987,112148],{"class":101},[38,112989,112990],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[83,112992,112994],{"className":30353,"code":112993,"language":30355,"meta":10,"style":10},"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",[88,112995,112996,113028],{"__ignoreMap":10},[91,112997,112998,113000,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026],{"class":93,"line":94},[91,112999,105846],{"class":101},[91,113001,293],{"class":150},[91,113003,4421],{"class":101},[91,113005,147],{"class":97},[91,113007,112165],{"class":101},[91,113009,105235],{"class":150},[91,113011,6497],{"class":97},[91,113013,112172],{"class":101},[91,113015,179],{"class":150},[91,113017,112177],{"class":101},[91,113019,634],{"class":97},[91,113021,102378],{"class":150},[91,113023,12414],{"class":101},[91,113025,102378],{"class":150},[91,113027,108],{"class":101},[91,113029,113030,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058],{"class":93,"line":11},[91,113031,105846],{"class":101},[91,113033,319],{"class":150},[91,113035,4421],{"class":101},[91,113037,147],{"class":97},[91,113039,112165],{"class":101},[91,113041,105235],{"class":150},[91,113043,6497],{"class":97},[91,113045,112172],{"class":101},[91,113047,293],{"class":150},[91,113049,112177],{"class":101},[91,113051,634],{"class":97},[91,113053,102378],{"class":150},[91,113055,12414],{"class":101},[91,113057,102378],{"class":150},[91,113059,108],{"class":101},[38,113061,113062,113063,113066],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[88,113064,113065],{},"error -> ctrl -> step"," 的流程。",[83,113068,113069],{"className":30353,"code":104480,"language":30355,"meta":10,"style":10},[88,113070,113071],{"__ignoreMap":10},[91,113072,113073],{"class":93,"line":94},[91,113074,104480],{"class":101},[38,113076,113077],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[83,113079,113081],{"className":30353,"code":113080,"language":30355,"meta":10,"style":10},"obs = get_obs(model, data)\n",[88,113082,113083],{"__ignoreMap":10},[91,113084,113085,113087,113089],{"class":93,"line":94},[91,113086,110829],{"class":101},[91,113088,147],{"class":97},[91,113090,112266],{"class":101},[38,113092,113093,113094,113097],{},"读取最新观测。后面打印 ",[88,113095,113096],{},"obs.shape[0]","，用来确认观测维度是 10。",[33,113099,102291],{"id":102290},[38,113101,113102],{},"观测维度为:",[83,113104,113107],{"className":113105,"code":113106,"language":5166,"meta":10},[5164],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[88,113108,113106],{"__ignoreMap":10},[38,113110,113111],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[38,113113,113114],{},"程序每 100 步打印：",[83,113116,113119],{"className":113117,"code":113118,"language":5166,"meta":10},[5164],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[88,113120,113118],{"__ignoreMap":10},[38,113122,113123,113124,113126],{},"如果控制有效，你应该看到最终 ",[88,113125,103206],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[33,113128,102323],{"id":102322},[46,113130,113131,113134,113137,113143,113149,113156,113166],{},[49,113132,113133],{},"修改目标点位置。",[49,113135,113136],{},"重新运行，观察最终 tip 是否变化。",[49,113138,113139,113140,113142],{},"把 gravity 改成 ",[88,113141,102564],{},"，观察控制是否变差。",[49,113144,111156,113145,111160,113147,28360],{},[88,113146,102133],{},[88,113148,179],{},[49,113150,102386,113151,102389,113153,113155],{},[88,113152,110571],{},[88,113154,107282],{},"，观察机械臂是否更难移动。",[49,113157,102386,113158,82505,113160,102389,113162,113165],{},[88,113159,103209],{},[88,113161,104121],{},[88,113163,113164],{},"0.2 0 0.6","，观察 reward 和 final tip。",[49,113167,113168],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[33,113170,102428],{"id":102427},[63,113172,113174],{"id":113173},"site-not-found",[88,113175,113176],{},"site not found",[38,113178,113179,113180,100993,113183,28360],{},"检查 XML 中是否有 ",[88,113181,113182],{},"site name=\"tip\"",[88,113184,113185],{},"site name=\"target\"",[63,113187,113188],{"id":113188},"机械臂完全不动",[38,113190,102498],{},[46,113192,113193,113198,113201,113206],{},[49,113194,113195,113197],{},[88,113196,102133],{}," 是否为 2",[49,113199,113200],{},"actuator 是否引用正确 joint",[49,113202,113203,113205],{},[88,113204,101051],{}," 是否被赋值",[49,113207,113208,113209],{},"是否执行了 ",[88,113210,100660],{},[63,113212,113213],{"id":113213},"控制效果不好",[38,113215,113216],{},"正常。本章重点不是控制器最优，而是任务结构:",[83,113218,113221],{"className":113219,"code":113220,"language":5166,"meta":10},[5164],"obs → action → mj_step → reward → next_obs\n",[88,113222,113220],{"__ignoreMap":10},[63,113224,113226],{"id":113225},"tip-坐标不变化","tip 坐标不变化",[38,113228,102550],{},[46,113230,113231,113236,113244,113253],{},[49,113232,113233,113234,28360],{},"是否每步调用了 ",[88,113235,100660],{},[49,113237,113238,113239,100993,113241,28360],{},"是否写入了 ",[88,113240,106101],{},[88,113242,113243],{},"data.ctrl[1]",[49,113245,113246,113247,314,113250,28360],{},"actuator 是否正确引用 ",[88,113248,113249],{},"joint1",[88,113251,113252],{},"joint2",[49,113254,113255],{},"控制输入是否太小。",[63,113257,113258],{"id":113258},"目标点不会动",[38,113260,113261],{},"本章的 target 是固定 site：",[83,113263,113265],{"className":53042,"code":113264,"language":53044,"meta":10,"style":10},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[88,113266,113267],{"__ignoreMap":10},[91,113268,113269,113271,113273,113275,113277,113279,113281,113283,113286],{"class":93,"line":94},[91,113270,1012],{"class":101},[91,113272,103185],{"class":51275},[91,113274,14899],{"class":1941},[91,113276,147],{"class":101},[91,113278,111934],{"class":206},[91,113280,101081],{"class":1941},[91,113282,147],{"class":101},[91,113284,113285],{"class":206},"\"0.5 0 0.4\"",[91,113287,113288],{"class":101}," ...\u002F>\n",[38,113290,113291,113292,113294],{},"它直接挂在 ",[88,113293,101816],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[63,113296,113297],{"id":113297},"机械臂不像真实机械臂",[38,113299,113300],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[33,113302,102582],{"id":102581},[38,113304,113305],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[38,113307,113308],{},"核心公式：",[83,113310,113313],{"className":113311,"code":113312,"language":5166,"meta":10},[5164],"distance = ||tip - target||\nreward = -distance - action_cost\n",[88,113314,113312],{"__ignoreMap":10},[38,113316,113317],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5105,113319,113320],{},"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":10,"searchDepth":11,"depth":11,"links":113322},[113323,113324,113325,113330,113334,113335,113336,113344],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":113326},[113327,113328,113329],{"id":111526,"depth":1157,"text":111527},{"id":111602,"depth":1157,"text":111602},{"id":111632,"depth":1157,"text":111633},{"id":101227,"depth":11,"text":101228,"children":113331},[113332,113333],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":113337},[113338,113339,113340,113341,113342,113343],{"id":113173,"depth":1157,"text":113176},{"id":113188,"depth":1157,"text":113188},{"id":113213,"depth":1157,"text":113213},{"id":113225,"depth":1157,"text":113226},{"id":113258,"depth":1157,"text":113258},{"id":113297,"depth":1157,"text":113297},{"id":102581,"depth":11,"text":102582},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111330,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113351,"title":113352,"body":113353,"description":10,"extension":14,"meta":116815,"navigation":17,"path":116816,"seo":116817,"stem":116818,"__hash__":116819},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113354,"toc":116786},[113355,113358,113360,113363,113366,113391,113394,113400,113403,113409,113411,113413,113437,113439,113457,113459,113502,113504,113531,113533,113536,113588,113591,113597,113606,113609,113647,113650,113689,113692,113700,113707,113710,113716,113718,113772,113779,113824,113827,113831,113847,113857,113859,115120,115122,115134,115136,115147,115149,115152,115173,115176,115179,115212,115218,115221,115254,115257,115260,115301,115306,115320,115323,115336,115341,115364,115366,115381,115391,115406,115413,115433,115448,115466,115469,115486,115494,115510,115516,115548,115561,115593,115603,115638,115652,115698,115712,115754,115765,115778,115784,115817,115820,115847,115857,115897,115907,115924,115931,115949,115952,115993,116006,116021,116024,116047,116050,116062,116065,116084,116089,116110,116113,116128,116131,116165,116177,116192,116195,116220,116223,116242,116245,116277,116280,116304,116310,116340,116347,116360,116363,116365,116367,116373,116376,116379,116391,116394,116396,116450,116452,116456,116462,116471,116474,116481,116483,116506,116509,116513,116515,116533,116539,116541,116574,116577,116583,116587,116590,116610,116615,116619,116626,116646,116651,116655,116658,116678,116681,116767,116771,116774,116780,116783],[29,113356,113352],{"id":113357},"_8gymnasium-风格强化学习接口基础",[33,113359,100622],{"id":100621},[38,113361,113362],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[38,113364,113365],{},"你将实现:",[83,113367,113369],{"className":30353,"code":113368,"language":30355,"meta":10,"style":10},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[88,113370,113371,113381],{"__ignoreMap":10},[91,113372,113373,113376,113378],{"class":93,"line":94},[91,113374,113375],{"class":101},"obs, info ",[91,113377,147],{"class":97},[91,113379,113380],{"class":101}," env.reset()\n",[91,113382,113383,113386,113388],{"class":93,"line":11},[91,113384,113385],{"class":101},"obs, reward, terminated, truncated, info ",[91,113387,147],{"class":97},[91,113389,113390],{"class":101}," env.step(action)\n",[38,113392,113393],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[38,113395,113396,113397,113399],{},"前面章节的代码都是“脚本式”的：在 ",[88,113398,102270],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[38,113401,113402],{},"可以先记住 Gymnasium 环境的核心交互：",[83,113404,113407],{"className":113405,"code":113406,"language":5166,"meta":10},[5164],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[88,113408,113406],{"__ignoreMap":10},[33,113410,100745],{"id":100744},[38,113412,100748],{},[83,113414,113415],{"className":23796,"code":104363,"language":23798,"meta":10,"style":10},[88,113416,113417],{"__ignoreMap":10},[91,113418,113419,113421,113423,113425,113427,113429,113431,113433,113435],{"class":93,"line":94},[91,113420,24551],{"class":1941},[91,113422,26290],{"class":206},[91,113424,23808],{"class":206},[91,113426,26375],{"class":150},[91,113428,104378],{"class":206},[91,113430,100773],{"class":206},[91,113432,102476],{"class":206},[91,113434,100789],{"class":206},[91,113436,104387],{"class":206},[38,113438,102794],{},[83,113440,113442],{"className":23796,"code":113441,"language":23798,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[88,113443,113444],{"__ignoreMap":10},[91,113445,113446,113448,113450,113452,113454],{"class":93,"line":94},[91,113447,23805],{"class":1941},[91,113449,23808],{"class":206},[91,113451,100905],{"class":206},[91,113453,107686],{"class":206},[91,113455,113456],{"class":206}," gymnasium\n",[38,113458,102811],{},[83,113460,113462],{"className":23796,"code":113461,"language":23798,"meta":10,"style":10},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[88,113463,113464,113481,113490],{"__ignoreMap":10},[91,113465,113466,113468,113470,113472,113475,113477,113479],{"class":93,"line":94},[91,113467,30305],{"class":1941},[91,113469,29151],{"class":206},[91,113471,25090],{"class":150},[91,113473,113474],{"class":206}," mujoco-gym-api",[91,113476,100950],{"class":206},[91,113478,100953],{"class":150},[91,113480,100956],{"class":150},[91,113482,113483,113485,113487],{"class":93,"line":11},[91,113484,30305],{"class":1941},[91,113486,100963],{"class":206},[91,113488,113489],{"class":206}," mujoco-gym-api\n",[91,113491,113492,113494,113496,113498,113500],{"class":93,"line":1157},[91,113493,23805],{"class":1941},[91,113495,23808],{"class":206},[91,113497,100905],{"class":206},[91,113499,107686],{"class":206},[91,113501,113456],{"class":206},[38,113503,100979],{},[46,113505,113506,113516,113519,113525],{},[49,113507,113508,113509,113512,113513,28360],{},"本章使用 ",[88,113510,113511],{},"gymnasium","，不是旧版 ",[88,113514,113515],{},"gym",[49,113517,113518],{},"Gymnasium API 与旧 Gym API 有差异。",[49,113520,113521,113522,28360],{},"旧 Gym 常见返回值是 4 个: ",[88,113523,113524],{},"obs, reward, done, info",[49,113526,113527,113528,28360],{},"Gymnasium 返回值是 5 个: ",[88,113529,113530],{},"obs, reward, terminated, truncated, info",[33,113532,101020],{"id":101019},[38,113534,113535],{},"强化学习环境接口包含:",[239,113537,113538,113547],{},[242,113539,113540],{},[245,113541,113542,113545],{},[248,113543,113544],{"align":23710},"方法",[248,113546,102671],{"align":23710},[286,113548,113549,113559,113569,113579],{},[245,113550,113551,113556],{},[291,113552,113553],{"align":23710},[88,113554,113555],{},"reset()",[291,113557,113558],{"align":23710},"重置环境",[245,113560,113561,113566],{},[291,113562,113563],{"align":23710},[88,113564,113565],{},"step(action)",[291,113567,113568],{"align":23710},"执行动作",[245,113570,113571,113576],{},[291,113572,113573],{"align":23710},[88,113574,113575],{},"observation_space",[291,113577,113578],{"align":23710},"观测空间",[245,113580,113581,113586],{},[291,113582,113583],{"align":23710},[88,113584,113585],{},"action_space",[291,113587,23628],{"align":23710},[38,113589,113590],{},"一个最小环境需要完成:",[83,113592,113595],{"className":113593,"code":113594,"language":5166,"meta":10},[5164],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[88,113596,113594],{"__ignoreMap":10},[63,113598,113600,100993,113603,104613],{"id":113599},"terminated-和-truncated-的区别",[88,113601,113602],{},"terminated",[88,113604,113605],{},"truncated",[38,113607,113608],{},"Gymnasium 把“结束”拆成两个概念：",[239,113610,113611,113621],{},[242,113612,113613],{},[245,113614,113615,113617,113619],{},[248,113616,104549],{"align":23710},[248,113618,100675],{"align":23710},[248,113620,21166],{"align":23710},[286,113622,113623,113635],{},[245,113624,113625,113629,113632],{},[291,113626,113627],{"align":23710},[88,113628,113602],{},[291,113630,113631],{"align":23710},"任务自然结束",[291,113633,113634],{"align":23710},"机械臂到达目标、机器人摔倒",[245,113636,113637,113641,113644],{},[291,113638,113639],{"align":23710},[88,113640,113605],{},[291,113642,113643],{"align":23710},"因外部限制截断",[291,113645,113646],{"align":23710},"达到最大步数、时间限制",[38,113648,113649],{},"本章中：",[83,113651,113653],{"className":30353,"code":113652,"language":30355,"meta":10,"style":10},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[88,113654,113655,113670],{"__ignoreMap":10},[91,113656,113657,113660,113662,113665,113667],{"class":93,"line":94},[91,113658,113659],{"class":101},"terminated ",[91,113661,147],{"class":97},[91,113663,113664],{"class":101}," dist ",[91,113666,1012],{"class":97},[91,113668,113669],{"class":150}," 0.05\n",[91,113671,113672,113675,113677,113679,113682,113684,113686],{"class":93,"line":11},[91,113673,113674],{"class":101},"truncated ",[91,113676,147],{"class":97},[91,113678,38848],{"class":150},[91,113680,113681],{"class":101},".steps ",[91,113683,1688],{"class":97},[91,113685,38848],{"class":150},[91,113687,113688],{"class":101},".max_steps\n",[38,113690,113691],{},"也就是：",[46,113693,113694,113697],{},[49,113695,113696],{},"末端距离目标小于 0.05，任务成功结束。",[49,113698,113699],{},"步数超过上限，episode 被截断。",[63,113701,113703,100993,113705],{"id":113702},"observation_space-和-action_space",[88,113704,113575],{},[88,113706,113585],{},[38,113708,113709],{},"这两个对象告诉算法：",[83,113711,113714],{"className":113712,"code":113713,"language":5166,"meta":10},[5164],"观测长什么样\n动作允许多大\n",[88,113715,113713],{"__ignoreMap":10},[38,113717,14612],{},[83,113719,113721],{"className":30353,"code":113720,"language":30355,"meta":10,"style":10},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[88,113722,113723],{"__ignoreMap":10},[91,113724,113725,113727,113730,113732,113735,113738,113741,113743,113745,113748,113750,113752,113754,113756,113758,113760,113762,113765,113767,113769],{"class":93,"line":94},[91,113726,30798],{"class":150},[91,113728,113729],{"class":101},".action_space ",[91,113731,147],{"class":97},[91,113733,113734],{"class":101}," spaces.Box(",[91,113736,113737],{"class":5195},"low",[91,113739,113740],{"class":97},"=-",[91,113742,102378],{"class":150},[91,113744,12414],{"class":101},[91,113746,113747],{"class":5195},"high",[91,113749,147],{"class":97},[91,113751,102378],{"class":150},[91,113753,12414],{"class":101},[91,113755,95938],{"class":5195},[91,113757,147],{"class":97},[91,113759,102],{"class":101},[91,113761,179],{"class":150},[91,113763,113764],{"class":101},",), ",[91,113766,93475],{"class":5195},[91,113768,147],{"class":97},[91,113770,113771],{"class":101},"np.float32)\n",[38,113773,113774,113775,113778],{},"表示动作是 2 维数组，每个值都在 ",[88,113776,113777],{},"[-1, 1]"," 范围内。",[83,113780,113782],{"className":30353,"code":113781,"language":30355,"meta":10,"style":10},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[88,113783,113784],{"__ignoreMap":10},[91,113785,113786,113788,113791,113793,113795,113797,113799,113802,113804,113806,113808,113810,113812,113814,113816,113818,113820,113822],{"class":93,"line":94},[91,113787,30798],{"class":150},[91,113789,113790],{"class":101},".observation_space ",[91,113792,147],{"class":97},[91,113794,113734],{"class":101},[91,113796,113737],{"class":5195},[91,113798,113740],{"class":97},[91,113800,113801],{"class":101},"np.inf, ",[91,113803,113747],{"class":5195},[91,113805,147],{"class":97},[91,113807,113801],{"class":101},[91,113809,95938],{"class":5195},[91,113811,147],{"class":97},[91,113813,102],{"class":101},[91,113815,548],{"class":150},[91,113817,113764],{"class":101},[91,113819,93475],{"class":5195},[91,113821,147],{"class":97},[91,113823,113771],{"class":101},[38,113825,113826],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[63,113828,113830],{"id":113829},"frame_skip-是什么","frame_skip 是什么",[83,113832,113834],{"className":30353,"code":113833,"language":30355,"meta":10,"style":10},"self.frame_skip = 5\n",[88,113835,113836],{"__ignoreMap":10},[91,113837,113838,113840,113843,113845],{"class":93,"line":94},[91,113839,30798],{"class":150},[91,113841,113842],{"class":101},".frame_skip ",[91,113844,147],{"class":97},[91,113846,54402],{"class":150},[38,113848,113849,113850,113853,113854,113856],{},"表示外部调用一次 ",[88,113851,113852],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[88,113855,101190],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[33,113858,101228],{"id":101227},[83,113860,113862],{"className":30353,"code":113861,"language":30355,"meta":10,"style":10},"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",[88,113863,113864,113876,113882,113892,113903,113907,113911,113919,113924,113928,113932,113936,113940,113944,113948,113952,113957,113961,113965,113969,113974,113978,113982,113986,113990,113994,113998,114002,114006,114010,114014,114018,114022,114026,114044,114059,114063,114076,114086,114101,114118,114122,114143,114162,114187,114201,114205,114215,114227,114237,114241,114283,114321,114325,114335,114351,114366,114385,114392,114396,114409,114424,114439,114452,114471,114487,114491,114532,114547,114562,114566,114605,114616,114629,114633,114643,114652,114656,114666,114681,114699,114703,114714,114731,114744,114748,114758,114762,114773,114784,114788,114802,114816,114832,114836,114849,114866,114881,114888,114892,114896,114908,114918,114936,114948,114960,114964,114972,114988,114997,115006,115014,115056,115069,115074,115078,115096,115100,115104,115116],{"__ignoreMap":10},[91,113865,113866,113868,113871,113873],{"class":93,"line":94},[91,113867,30367],{"class":97},[91,113869,113870],{"class":101}," gymnasium ",[91,113872,31358],{"class":97},[91,113874,113875],{"class":101}," gym\n",[91,113877,113878,113880],{"class":93,"line":11},[91,113879,30367],{"class":97},[91,113881,101276],{"class":101},[91,113883,113884,113886,113888,113890],{"class":93,"line":1157},[91,113885,30367],{"class":97},[91,113887,31355],{"class":101},[91,113889,31358],{"class":97},[91,113891,31361],{"class":101},[91,113893,113894,113896,113898,113900],{"class":93,"line":1172},[91,113895,30712],{"class":97},[91,113897,113870],{"class":101},[91,113899,30367],{"class":97},[91,113901,113902],{"class":101}," spaces\n",[91,113904,113905],{"class":93,"line":1178},[91,113906,2378],{"emptyLinePlaceholder":17},[91,113908,113909],{"class":93,"line":1192},[91,113910,2378],{"emptyLinePlaceholder":17},[91,113912,113913,113915,113917],{"class":93,"line":1198},[91,113914,101289],{"class":150},[91,113916,13543],{"class":97},[91,113918,101294],{"class":206},[91,113920,113921],{"class":93,"line":1289},[91,113922,113923],{"class":206},"\u003Cmujoco model=\"gym_reacher\">\n",[91,113925,113926],{"class":93,"line":1295},[91,113927,111713],{"class":206},[91,113929,113930],{"class":93,"line":1307},[91,113931,2378],{"emptyLinePlaceholder":17},[91,113933,113934],{"class":93,"line":1590},[91,113935,101313],{"class":206},[91,113937,113938],{"class":93,"line":1595},[91,113939,111731],{"class":206},[91,113941,113942],{"class":93,"line":1601},[91,113943,2378],{"emptyLinePlaceholder":17},[91,113945,113946],{"class":93,"line":1606},[91,113947,111740],{"class":206},[91,113949,113950],{"class":93,"line":1620},[91,113951,111745],{"class":206},[91,113953,113954],{"class":93,"line":1625},[91,113955,113956],{"class":206},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[91,113958,113959],{"class":93,"line":1631},[91,113960,2378],{"emptyLinePlaceholder":17},[91,113962,113963],{"class":93,"line":1652},[91,113964,111759],{"class":206},[91,113966,113967],{"class":93,"line":1657},[91,113968,111764],{"class":206},[91,113970,113971],{"class":93,"line":1671},[91,113972,113973],{"class":206},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[91,113975,113976],{"class":93,"line":1676},[91,113977,111774],{"class":206},[91,113979,113980],{"class":93,"line":1705},[91,113981,106413],{"class":206},[91,113983,113984],{"class":93,"line":1710},[91,113985,101342],{"class":206},[91,113987,113988],{"class":93,"line":1727},[91,113989,101347],{"class":206},[91,113991,113992],{"class":93,"line":1732},[91,113993,2378],{"emptyLinePlaceholder":17},[91,113995,113996],{"class":93,"line":1737},[91,113997,106430],{"class":206},[91,113999,114000],{"class":93,"line":1742},[91,114001,111799],{"class":206},[91,114003,114004],{"class":93,"line":1756},[91,114005,111804],{"class":206},[91,114007,114008],{"class":93,"line":1761},[91,114009,106440],{"class":206},[91,114011,114012],{"class":93,"line":2555},[91,114013,101352],{"class":206},[91,114015,114016],{"class":93,"line":2569},[91,114017,95673],{"class":206},[91,114019,114020],{"class":93,"line":2577},[91,114021,2378],{"emptyLinePlaceholder":17},[91,114023,114024],{"class":93,"line":2582},[91,114025,2378],{"emptyLinePlaceholder":17},[91,114027,114028,114030,114033,114035,114037,114039,114042],{"class":93,"line":2588},[91,114029,14673],{"class":97},[91,114031,114032],{"class":1941}," ReacherEnv",[91,114034,102],{"class":101},[91,114036,113515],{"class":1941},[91,114038,660],{"class":101},[91,114040,114041],{"class":1941},"Env",[91,114043,30761],{"class":101},[91,114045,114046,114049,114051,114053,114056],{"class":93,"line":2594},[91,114047,114048],{"class":101},"    metadata ",[91,114050,147],{"class":97},[91,114052,4426],{"class":101},[91,114054,114055],{"class":206},"\"render_modes\"",[91,114057,114058],{"class":101},": []}\n",[91,114060,114061],{"class":93,"line":2599},[91,114062,2378],{"emptyLinePlaceholder":17},[91,114064,114065,114067,114069,114072,114074],{"class":93,"line":7927},[91,114066,30776],{"class":97},[91,114068,30779],{"class":150},[91,114070,114071],{"class":101},"(self) -> ",[91,114073,95661],{"class":150},[91,114075,3717],{"class":101},[91,114077,114078,114080,114082,114084],{"class":93,"line":7951},[91,114079,30792],{"class":150},[91,114081,17240],{"class":101},[91,114083,30804],{"class":150},[91,114085,1954],{"class":101},[91,114087,114088,114090,114093,114095,114097,114099],{"class":93,"line":7956},[91,114089,30820],{"class":150},[91,114091,114092],{"class":101},".model ",[91,114094,147],{"class":97},[91,114096,101387],{"class":101},[91,114098,101289],{"class":150},[91,114100,108],{"class":101},[91,114102,114103,114105,114108,114110,114113,114115],{"class":93,"line":7962},[91,114104,30820],{"class":150},[91,114106,114107],{"class":101},".data ",[91,114109,147],{"class":97},[91,114111,114112],{"class":101}," mujoco.MjData(",[91,114114,30798],{"class":150},[91,114116,114117],{"class":101},".model)\n",[91,114119,114120],{"class":93,"line":7989},[91,114121,2378],{"emptyLinePlaceholder":17},[91,114123,114124,114126,114129,114131,114134,114136,114139,114141],{"class":93,"line":7994},[91,114125,30820],{"class":150},[91,114127,114128],{"class":101},".tip_site_id ",[91,114130,147],{"class":97},[91,114132,114133],{"class":101}," mujoco.mj_name2id(",[91,114135,30798],{"class":150},[91,114137,114138],{"class":101},".model, mujoco.mjtObj.mjOBJ_SITE, ",[91,114140,111511],{"class":206},[91,114142,108],{"class":101},[91,114144,114145,114147,114150,114152,114154,114156,114158,114160],{"class":93,"line":8000},[91,114146,30820],{"class":150},[91,114148,114149],{"class":101},".target_site_id ",[91,114151,147],{"class":97},[91,114153,114133],{"class":101},[91,114155,30798],{"class":150},[91,114157,114138],{"class":101},[91,114159,111934],{"class":206},[91,114161,108],{"class":101},[91,114163,114164,114166,114168,114170,114172,114174,114177,114179,114181,114183,114185],{"class":93,"line":8012},[91,114165,2475],{"class":97},[91,114167,38848],{"class":150},[91,114169,114128],{"class":101},[91,114171,1012],{"class":97},[91,114173,4071],{"class":150},[91,114175,114176],{"class":97}," or",[91,114178,38848],{"class":150},[91,114180,114149],{"class":101},[91,114182,1012],{"class":97},[91,114184,4071],{"class":150},[91,114186,3717],{"class":101},[91,114188,114189,114192,114194,114196,114199],{"class":93,"line":8024},[91,114190,114191],{"class":97},"            raise",[91,114193,103410],{"class":150},[91,114195,102],{"class":101},[91,114197,114198],{"class":206},"\"required sites not found\"",[91,114200,108],{"class":101},[91,114202,114203],{"class":93,"line":8036},[91,114204,2378],{"emptyLinePlaceholder":17},[91,114206,114207,114209,114211,114213],{"class":93,"line":9695},[91,114208,30820],{"class":150},[91,114210,113842],{"class":101},[91,114212,147],{"class":97},[91,114214,54402],{"class":150},[91,114216,114217,114219,114222,114224],{"class":93,"line":9720},[91,114218,30820],{"class":150},[91,114220,114221],{"class":101},".max_steps ",[91,114223,147],{"class":97},[91,114225,114226],{"class":150}," 200\n",[91,114228,114229,114231,114233,114235],{"class":93,"line":9743},[91,114230,30820],{"class":150},[91,114232,113681],{"class":101},[91,114234,147],{"class":97},[91,114236,47308],{"class":150},[91,114238,114239],{"class":93,"line":9767},[91,114240,2378],{"emptyLinePlaceholder":17},[91,114242,114243,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281],{"class":93,"line":9772},[91,114244,30820],{"class":150},[91,114246,113729],{"class":101},[91,114248,147],{"class":97},[91,114250,113734],{"class":101},[91,114252,113737],{"class":5195},[91,114254,113740],{"class":97},[91,114256,102378],{"class":150},[91,114258,12414],{"class":101},[91,114260,113747],{"class":5195},[91,114262,147],{"class":97},[91,114264,102378],{"class":150},[91,114266,12414],{"class":101},[91,114268,95938],{"class":5195},[91,114270,147],{"class":97},[91,114272,102],{"class":101},[91,114274,179],{"class":150},[91,114276,113764],{"class":101},[91,114278,93475],{"class":5195},[91,114280,147],{"class":97},[91,114282,113771],{"class":101},[91,114284,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319],{"class":93,"line":9777},[91,114286,30820],{"class":150},[91,114288,113790],{"class":101},[91,114290,147],{"class":97},[91,114292,113734],{"class":101},[91,114294,113737],{"class":5195},[91,114296,113740],{"class":97},[91,114298,113801],{"class":101},[91,114300,113747],{"class":5195},[91,114302,147],{"class":97},[91,114304,113801],{"class":101},[91,114306,95938],{"class":5195},[91,114308,147],{"class":97},[91,114310,102],{"class":101},[91,114312,548],{"class":150},[91,114314,113764],{"class":101},[91,114316,93475],{"class":5195},[91,114318,147],{"class":97},[91,114320,113771],{"class":101},[91,114322,114323],{"class":93,"line":9782},[91,114324,2378],{"emptyLinePlaceholder":17},[91,114326,114327,114329,114332],{"class":93,"line":9791},[91,114328,30776],{"class":97},[91,114330,114331],{"class":1941}," _get_obs",[91,114333,114334],{"class":101},"(self) -> np.ndarray:\n",[91,114336,114337,114339,114341,114343,114346,114348],{"class":93,"line":9796},[91,114338,112112],{"class":101},[91,114340,147],{"class":97},[91,114342,38848],{"class":150},[91,114344,114345],{"class":101},".data.site_xpos[",[91,114347,30798],{"class":150},[91,114349,114350],{"class":101},".tip_site_id].copy()\n",[91,114352,114353,114355,114357,114359,114361,114363],{"class":93,"line":9802},[91,114354,112125],{"class":101},[91,114356,147],{"class":97},[91,114358,38848],{"class":150},[91,114360,114345],{"class":101},[91,114362,30798],{"class":150},[91,114364,114365],{"class":101},".target_site_id].copy()\n",[91,114367,114368,114370,114372,114375,114377,114380,114382],{"class":93,"line":9823},[91,114369,110157],{"class":101},[91,114371,147],{"class":97},[91,114373,114374],{"class":101}," np.concatenate([",[91,114376,30798],{"class":150},[91,114378,114379],{"class":101},".data.qpos.copy(), ",[91,114381,30798],{"class":150},[91,114383,114384],{"class":101},".data.qvel.copy(), tip, target])\n",[91,114386,114387,114389],{"class":93,"line":9829},[91,114388,14731],{"class":97},[91,114390,114391],{"class":101}," obs.astype(np.float32)\n",[91,114393,114394],{"class":93,"line":9843},[91,114395,2378],{"emptyLinePlaceholder":17},[91,114397,114398,114400,114403,114405,114407],{"class":93,"line":9849},[91,114399,30776],{"class":97},[91,114401,114402],{"class":1941}," _get_reward",[91,114404,114071],{"class":101},[91,114406,141],{"class":150},[91,114408,3717],{"class":101},[91,114410,114411,114413,114415,114417,114419,114421],{"class":93,"line":9876},[91,114412,112112],{"class":101},[91,114414,147],{"class":97},[91,114416,38848],{"class":150},[91,114418,114345],{"class":101},[91,114420,30798],{"class":150},[91,114422,114423],{"class":101},".tip_site_id]\n",[91,114425,114426,114428,114430,114432,114434,114436],{"class":93,"line":9885},[91,114427,112125],{"class":101},[91,114429,147],{"class":97},[91,114431,38848],{"class":150},[91,114433,114345],{"class":101},[91,114435,30798],{"class":150},[91,114437,114438],{"class":101},".target_site_id]\n",[91,114440,114441,114444,114446,114448,114450],{"class":93,"line":9891},[91,114442,114443],{"class":101},"        dist ",[91,114445,147],{"class":97},[91,114447,111576],{"class":101},[91,114449,634],{"class":97},[91,114451,111581],{"class":101},[91,114453,114454,114457,114459,114461,114463,114466,114468],{"class":93,"line":9899},[91,114455,114456],{"class":101},"        control_cost ",[91,114458,147],{"class":97},[91,114460,112012],{"class":150},[91,114462,6497],{"class":97},[91,114464,114465],{"class":101}," np.sum(np.square(",[91,114467,30798],{"class":150},[91,114469,114470],{"class":101},".data.ctrl))\n",[91,114472,114473,114475,114477,114479,114481,114483,114485],{"class":93,"line":9904},[91,114474,14731],{"class":97},[91,114476,109772],{"class":150},[91,114478,102],{"class":101},[91,114480,634],{"class":97},[91,114482,111571],{"class":101},[91,114484,634],{"class":97},[91,114486,112034],{"class":101},[91,114488,114489],{"class":93,"line":16583},[91,114490,2378],{"emptyLinePlaceholder":17},[91,114492,114493,114495,114498,114501,114503,114506,114508,114510,114512,114514,114516,114519,114522,114524,114526,114528,114530],{"class":93,"line":16589},[91,114494,30776],{"class":97},[91,114496,114497],{"class":1941}," reset",[91,114499,114500],{"class":101},"(self, ",[91,114502,557],{"class":97},[91,114504,114505],{"class":101},", seed: ",[91,114507,105],{"class":150},[91,114509,25084],{"class":97},[91,114511,38908],{"class":150},[91,114513,13543],{"class":97},[91,114515,38908],{"class":150},[91,114517,114518],{"class":101},", options: ",[91,114520,114521],{"class":150},"dict",[91,114523,25084],{"class":97},[91,114525,38908],{"class":150},[91,114527,13543],{"class":97},[91,114529,38908],{"class":150},[91,114531,30761],{"class":101},[91,114533,114534,114536,114539,114542,114544],{"class":93,"line":16612},[91,114535,30792],{"class":150},[91,114537,114538],{"class":101},"().reset(",[91,114540,114541],{"class":5195},"seed",[91,114543,147],{"class":97},[91,114545,114546],{"class":101},"seed)\n",[91,114548,114549,114552,114554,114557,114559],{"class":93,"line":16618},[91,114550,114551],{"class":101},"        mujoco.mj_resetData(",[91,114553,30798],{"class":150},[91,114555,114556],{"class":101},".model, ",[91,114558,30798],{"class":150},[91,114560,114561],{"class":101},".data)\n",[91,114563,114564],{"class":93,"line":16641},[91,114565,2378],{"emptyLinePlaceholder":17},[91,114567,114568,114570,114573,114575,114577,114580,114582,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602],{"class":93,"line":16655},[91,114569,30820],{"class":150},[91,114571,114572],{"class":101},".data.qpos[:] ",[91,114574,147],{"class":97},[91,114576,38848],{"class":150},[91,114578,114579],{"class":101},".np_random.uniform(",[91,114581,113737],{"class":5195},[91,114583,113740],{"class":97},[91,114585,86185],{"class":150},[91,114587,12414],{"class":101},[91,114589,113747],{"class":5195},[91,114591,147],{"class":97},[91,114593,86185],{"class":150},[91,114595,12414],{"class":101},[91,114597,31471],{"class":5195},[91,114599,147],{"class":97},[91,114601,30798],{"class":150},[91,114603,114604],{"class":101},".model.nq)\n",[91,114606,114607,114609,114612,114614],{"class":93,"line":16675},[91,114608,30820],{"class":150},[91,114610,114611],{"class":101},".data.qvel[:] ",[91,114613,147],{"class":97},[91,114615,104736],{"class":150},[91,114617,114618,114621,114623,114625,114627],{"class":93,"line":16681},[91,114619,114620],{"class":101},"        mujoco.mj_forward(",[91,114622,30798],{"class":150},[91,114624,114556],{"class":101},[91,114626,30798],{"class":150},[91,114628,114561],{"class":101},[91,114630,114631],{"class":93,"line":16692},[91,114632,2378],{"emptyLinePlaceholder":17},[91,114634,114635,114637,114639,114641],{"class":93,"line":16715},[91,114636,30820],{"class":150},[91,114638,113681],{"class":101},[91,114640,147],{"class":97},[91,114642,47308],{"class":150},[91,114644,114645,114647,114649],{"class":93,"line":16737},[91,114646,14731],{"class":97},[91,114648,38848],{"class":150},[91,114650,114651],{"class":101},"._get_obs(), {}\n",[91,114653,114654],{"class":93,"line":16742},[91,114655,2378],{"emptyLinePlaceholder":17},[91,114657,114658,114660,114663],{"class":93,"line":16748},[91,114659,30776],{"class":97},[91,114661,114662],{"class":1941}," step",[91,114664,114665],{"class":101},"(self, action):\n",[91,114667,114668,114670,114672,114675,114677,114679],{"class":93,"line":16762},[91,114669,110197],{"class":101},[91,114671,147],{"class":97},[91,114673,114674],{"class":101}," np.asarray(action, ",[91,114676,93475],{"class":5195},[91,114678,147],{"class":97},[91,114680,113771],{"class":101},[91,114682,114683,114685,114687,114689,114691,114694,114696],{"class":93,"line":16775},[91,114684,110197],{"class":101},[91,114686,147],{"class":97},[91,114688,107422],{"class":101},[91,114690,30798],{"class":150},[91,114692,114693],{"class":101},".action_space.low, ",[91,114695,30798],{"class":150},[91,114697,114698],{"class":101},".action_space.high)\n",[91,114700,114701],{"class":93,"line":16780},[91,114702,2378],{"emptyLinePlaceholder":17},[91,114704,114705,114707,114710,114712],{"class":93,"line":16794},[91,114706,30820],{"class":150},[91,114708,114709],{"class":101},".data.ctrl[:] ",[91,114711,147],{"class":97},[91,114713,107445],{"class":101},[91,114715,114716,114718,114720,114722,114724,114726,114728],{"class":93,"line":16799},[91,114717,3381],{"class":97},[91,114719,101476],{"class":101},[91,114721,26018],{"class":97},[91,114723,32418],{"class":150},[91,114725,102],{"class":101},[91,114727,30798],{"class":150},[91,114729,114730],{"class":101},".frame_skip):\n",[91,114732,114733,114736,114738,114740,114742],{"class":93,"line":16805},[91,114734,114735],{"class":101},"            mujoco.mj_step(",[91,114737,30798],{"class":150},[91,114739,114556],{"class":101},[91,114741,30798],{"class":150},[91,114743,114561],{"class":101},[91,114745,114746],{"class":93,"line":16810},[91,114747,2378],{"emptyLinePlaceholder":17},[91,114749,114750,114752,114754,114756],{"class":93,"line":16824},[91,114751,30820],{"class":150},[91,114753,113681],{"class":101},[91,114755,9456],{"class":97},[91,114757,55674],{"class":150},[91,114759,114760],{"class":93,"line":16829},[91,114761,2378],{"emptyLinePlaceholder":17},[91,114763,114764,114766,114768,114770],{"class":93,"line":16834},[91,114765,110157],{"class":101},[91,114767,147],{"class":97},[91,114769,38848],{"class":150},[91,114771,114772],{"class":101},"._get_obs()\n",[91,114774,114775,114777,114779,114781],{"class":93,"line":16848},[91,114776,110262],{"class":101},[91,114778,147],{"class":97},[91,114780,38848],{"class":150},[91,114782,114783],{"class":101},"._get_reward()\n",[91,114785,114786],{"class":93,"line":16860},[91,114787,2378],{"emptyLinePlaceholder":17},[91,114789,114790,114792,114794,114796,114798,114800],{"class":93,"line":16865},[91,114791,112112],{"class":101},[91,114793,147],{"class":97},[91,114795,38848],{"class":150},[91,114797,114345],{"class":101},[91,114799,30798],{"class":150},[91,114801,114423],{"class":101},[91,114803,114804,114806,114808,114810,114812,114814],{"class":93,"line":16878},[91,114805,112125],{"class":101},[91,114807,147],{"class":97},[91,114809,38848],{"class":150},[91,114811,114345],{"class":101},[91,114813,30798],{"class":150},[91,114815,114438],{"class":101},[91,114817,114818,114820,114822,114824,114827,114829],{"class":93,"line":16883},[91,114819,114443],{"class":101},[91,114821,147],{"class":97},[91,114823,109772],{"class":150},[91,114825,114826],{"class":101},"(np.linalg.norm(tip ",[91,114828,634],{"class":97},[91,114830,114831],{"class":101}," target))\n",[91,114833,114834],{"class":93,"line":16888},[91,114835,2378],{"emptyLinePlaceholder":17},[91,114837,114838,114841,114843,114845,114847],{"class":93,"line":16893},[91,114839,114840],{"class":101},"        terminated ",[91,114842,147],{"class":97},[91,114844,113664],{"class":101},[91,114846,1012],{"class":97},[91,114848,113669],{"class":150},[91,114850,114851,114854,114856,114858,114860,114862,114864],{"class":93,"line":16906},[91,114852,114853],{"class":101},"        truncated ",[91,114855,147],{"class":97},[91,114857,38848],{"class":150},[91,114859,113681],{"class":101},[91,114861,1688],{"class":97},[91,114863,38848],{"class":150},[91,114865,113688],{"class":101},[91,114867,114868,114871,114873,114875,114878],{"class":93,"line":16911},[91,114869,114870],{"class":101},"        info ",[91,114872,147],{"class":97},[91,114874,4426],{"class":101},[91,114876,114877],{"class":206},"\"distance\"",[91,114879,114880],{"class":101},": dist}\n",[91,114882,114883,114885],{"class":93,"line":32608},[91,114884,14731],{"class":97},[91,114886,114887],{"class":101}," obs, reward, terminated, truncated, info\n",[91,114889,114890],{"class":93,"line":32614},[91,114891,2378],{"emptyLinePlaceholder":17},[91,114893,114894],{"class":93,"line":32620},[91,114895,2378],{"emptyLinePlaceholder":17},[91,114897,114898,114900,114902,114904,114906],{"class":93,"line":32626},[91,114899,31922],{"class":97},[91,114901,1951],{"class":1941},[91,114903,101373],{"class":101},[91,114905,95661],{"class":150},[91,114907,3717],{"class":101},[91,114909,114910,114913,114915],{"class":93,"line":32632},[91,114911,114912],{"class":101},"    env ",[91,114914,147],{"class":97},[91,114916,114917],{"class":101}," ReacherEnv()\n",[91,114919,114920,114923,114925,114928,114930,114932,114934],{"class":93,"line":32643},[91,114921,114922],{"class":101},"    obs, info ",[91,114924,147],{"class":97},[91,114926,114927],{"class":101}," env.reset(",[91,114929,114541],{"class":5195},[91,114931,147],{"class":97},[91,114933,293],{"class":150},[91,114935,108],{"class":101},[91,114937,114938,114940,114942,114945],{"class":93,"line":32649},[91,114939,31274],{"class":150},[91,114941,102],{"class":101},[91,114943,114944],{"class":206},"\"initial obs shape:\"",[91,114946,114947],{"class":101},", obs.shape)\n",[91,114949,114950,114952,114954,114957],{"class":93,"line":32669},[91,114951,31274],{"class":150},[91,114953,102],{"class":101},[91,114955,114956],{"class":206},"\"initial info:\"",[91,114958,114959],{"class":101},", info)\n",[91,114961,114962],{"class":93,"line":32675},[91,114963,2378],{"emptyLinePlaceholder":17},[91,114965,114966,114968,114970],{"class":93,"line":32686},[91,114967,110128],{"class":101},[91,114969,147],{"class":97},[91,114971,104736],{"class":150},[91,114973,114974,114976,114978,114980,114982,114984,114986],{"class":93,"line":32692},[91,114975,3179],{"class":97},[91,114977,31591],{"class":101},[91,114979,26018],{"class":97},[91,114981,32418],{"class":150},[91,114983,102],{"class":101},[91,114985,802],{"class":150},[91,114987,30761],{"class":101},[91,114989,114990,114992,114994],{"class":93,"line":32698},[91,114991,110197],{"class":101},[91,114993,147],{"class":97},[91,114995,114996],{"class":101}," env.action_space.sample()\n",[91,114998,114999,115002,115004],{"class":93,"line":32704},[91,115000,115001],{"class":101},"        obs, reward, terminated, truncated, info ",[91,115003,147],{"class":97},[91,115005,113390],{"class":101},[91,115007,115008,115010,115012],{"class":93,"line":32710},[91,115009,110272],{"class":101},[91,115011,9456],{"class":97},[91,115013,110277],{"class":101},[91,115015,115016,115018,115020,115022,115024,115027,115029,115031,115034,115036,115038,115041,115043,115045,115048,115050,115052,115054],{"class":93,"line":32716},[91,115017,32426],{"class":150},[91,115019,102],{"class":101},[91,115021,110306],{"class":206},[91,115023,110309],{"class":101},[91,115025,115026],{"class":206},"\"reward:\"",[91,115028,12414],{"class":101},[91,115030,31993],{"class":150},[91,115032,115033],{"class":101},"(reward, ",[91,115035,173],{"class":150},[91,115037,110320],{"class":101},[91,115039,115040],{"class":206},"\"distance:\"",[91,115042,12414],{"class":101},[91,115044,31993],{"class":150},[91,115046,115047],{"class":101},"(info[",[91,115049,114877],{"class":206},[91,115051,112177],{"class":101},[91,115053,173],{"class":150},[91,115055,30472],{"class":101},[91,115057,115058,115060,115063,115066],{"class":93,"line":32722},[91,115059,2475],{"class":97},[91,115061,115062],{"class":101}," terminated ",[91,115064,115065],{"class":97},"or",[91,115067,115068],{"class":101}," truncated:\n",[91,115070,115071],{"class":93,"line":32728},[91,115072,115073],{"class":97},"            break\n",[91,115075,115076],{"class":93,"line":32748},[91,115077,2378],{"emptyLinePlaceholder":17},[91,115079,115080,115082,115084,115086,115088,115090,115092,115094],{"class":93,"line":32754},[91,115081,31274],{"class":150},[91,115083,102],{"class":101},[91,115085,110351],{"class":206},[91,115087,12414],{"class":101},[91,115089,31993],{"class":150},[91,115091,110358],{"class":101},[91,115093,173],{"class":150},[91,115095,30472],{"class":101},[91,115097,115098],{"class":93,"line":32770},[91,115099,2378],{"emptyLinePlaceholder":17},[91,115101,115102],{"class":93,"line":32776},[91,115103,2378],{"emptyLinePlaceholder":17},[91,115105,115106,115108,115110,115112,115114],{"class":93,"line":32790},[91,115107,1509],{"class":97},[91,115109,31195],{"class":150},[91,115111,101534],{"class":97},[91,115113,101537],{"class":206},[91,115115,3717],{"class":101},[91,115117,115118],{"class":93,"line":32796},[91,115119,101544],{"class":101},[38,115121,103545],{},[83,115123,115125],{"className":23796,"code":115124,"language":23798,"meta":10,"style":10},"touch ch8_gym_env.py\n",[88,115126,115127],{"__ignoreMap":10},[91,115128,115129,115131],{"class":93,"line":94},[91,115130,101258],{"class":1941},[91,115132,115133],{"class":206}," ch8_gym_env.py\n",[38,115135,110419],{},[83,115137,115139],{"className":23796,"code":115138,"language":23798,"meta":10,"style":10},"python ch8_gym_env.py\n",[88,115140,115141],{"__ignoreMap":10},[91,115142,115143,115145],{"class":93,"line":94},[91,115144,30355],{"class":1941},[91,115146,115133],{"class":206},[63,115148,101547],{"id":101547},[38,115150,115151],{},"继承 Gymnasium 环境：",[83,115153,115155],{"className":30353,"code":115154,"language":30355,"meta":10,"style":10},"class ReacherEnv(gym.Env):\n",[88,115156,115157],{"__ignoreMap":10},[91,115158,115159,115161,115163,115165,115167,115169,115171],{"class":93,"line":94},[91,115160,14673],{"class":97},[91,115162,114032],{"class":1941},[91,115164,102],{"class":101},[91,115166,113515],{"class":1941},[91,115168,660],{"class":101},[91,115170,114041],{"class":1941},[91,115172,30761],{"class":101},[38,115174,115175],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[38,115177,115178],{},"初始化模型：",[83,115180,115182],{"className":30353,"code":115181,"language":30355,"meta":10,"style":10},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[88,115183,115184,115198],{"__ignoreMap":10},[91,115185,115186,115188,115190,115192,115194,115196],{"class":93,"line":94},[91,115187,30798],{"class":150},[91,115189,114092],{"class":101},[91,115191,147],{"class":97},[91,115193,101387],{"class":101},[91,115195,101289],{"class":150},[91,115197,108],{"class":101},[91,115199,115200,115202,115204,115206,115208,115210],{"class":93,"line":11},[91,115201,30798],{"class":150},[91,115203,114107],{"class":101},[91,115205,147],{"class":97},[91,115207,114112],{"class":101},[91,115209,30798],{"class":150},[91,115211,114117],{"class":101},[38,115213,115214,115215,115217],{},"这和前面章节一样，只是现在放到了类的 ",[88,115216,30804],{}," 里。",[38,115219,115220],{},"缓存 site ID：",[83,115222,115224],{"className":30353,"code":115223,"language":30355,"meta":10,"style":10},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[88,115225,115226,115240],{"__ignoreMap":10},[91,115227,115228,115230,115232,115234,115236,115238],{"class":93,"line":94},[91,115229,30798],{"class":150},[91,115231,114128],{"class":101},[91,115233,147],{"class":97},[91,115235,114133],{"class":101},[91,115237,89529],{"class":150},[91,115239,108],{"class":101},[91,115241,115242,115244,115246,115248,115250,115252],{"class":93,"line":11},[91,115243,30798],{"class":150},[91,115245,114149],{"class":101},[91,115247,147],{"class":97},[91,115249,114133],{"class":101},[91,115251,89529],{"class":150},[91,115253,108],{"class":101},[38,115255,115256],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[38,115258,115259],{},"reset：",[83,115261,115263],{"className":30353,"code":115262,"language":30355,"meta":10,"style":10},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[88,115264,115265],{"__ignoreMap":10},[91,115266,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299],{"class":93,"line":94},[91,115268,31922],{"class":97},[91,115270,114497],{"class":1941},[91,115272,114500],{"class":101},[91,115274,557],{"class":97},[91,115276,114505],{"class":101},[91,115278,105],{"class":150},[91,115280,25084],{"class":97},[91,115282,38908],{"class":150},[91,115284,13543],{"class":97},[91,115286,38908],{"class":150},[91,115288,114518],{"class":101},[91,115290,114521],{"class":150},[91,115292,25084],{"class":97},[91,115294,38908],{"class":150},[91,115296,13543],{"class":97},[91,115298,38908],{"class":150},[91,115300,30761],{"class":101},[38,115302,115303,115305],{},[88,115304,70031],{}," 做四件事：",[46,115307,115308,115311,115314,115317],{},[49,115309,115310],{},"设置随机种子。",[49,115312,115313],{},"重置 MuJoCo data。",[49,115315,115316],{},"随机初始化关节角。",[49,115318,115319],{},"返回初始观测和 info。",[38,115321,115322],{},"step：",[83,115324,115326],{"className":30353,"code":115325,"language":30355,"meta":10,"style":10},"def step(self, action):\n",[88,115327,115328],{"__ignoreMap":10},[91,115329,115330,115332,115334],{"class":93,"line":94},[91,115331,31922],{"class":97},[91,115333,114662],{"class":1941},[91,115335,114665],{"class":101},[38,115337,115338,115340],{},[88,115339,107109],{}," 做六件事：",[46,115342,115343,115346,115352,115355,115358,115361],{},[49,115344,115345],{},"检查并裁剪 action。",[49,115347,115348,115349,28360],{},"写入 ",[88,115350,115351],{},"self.data.ctrl",[49,115353,115354],{},"连续推进若干个 MuJoCo 物理步。",[49,115356,115357],{},"计算新观测。",[49,115359,115360],{},"计算奖励和结束条件。",[49,115362,115363],{},"返回 Gymnasium 标准五元组。",[63,115365,101683],{"id":101683},[83,115367,115369],{"className":30353,"code":115368,"language":30355,"meta":10,"style":10},"import gymnasium as gym\n",[88,115370,115371],{"__ignoreMap":10},[91,115372,115373,115375,115377,115379],{"class":93,"line":94},[91,115374,30367],{"class":97},[91,115376,113870],{"class":101},[91,115378,31358],{"class":97},[91,115380,113875],{"class":101},[38,115382,115383,115384,115386,115387,115390],{},"导入 Gymnasium，并起别名 ",[88,115385,113515],{},"。后面写 ",[88,115388,115389],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[83,115392,115394],{"className":30353,"code":115393,"language":30355,"meta":10,"style":10},"from gymnasium import spaces\n",[88,115395,115396],{"__ignoreMap":10},[91,115397,115398,115400,115402,115404],{"class":93,"line":94},[91,115399,30712],{"class":97},[91,115401,113870],{"class":101},[91,115403,30367],{"class":97},[91,115405,113902],{"class":101},[38,115407,115408,115409,115412],{},"导入空间定义工具。",[88,115410,115411],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[83,115414,115415],{"className":30353,"code":115154,"language":30355,"meta":10,"style":10},[88,115416,115417],{"__ignoreMap":10},[91,115418,115419,115421,115423,115425,115427,115429,115431],{"class":93,"line":94},[91,115420,14673],{"class":97},[91,115422,114032],{"class":1941},[91,115424,102],{"class":101},[91,115426,113515],{"class":1941},[91,115428,660],{"class":101},[91,115430,114041],{"class":1941},[91,115432,30761],{"class":101},[38,115434,115435,115436,115439,115440,115442,115443,100993,115445,115447],{},"定义一个类，名字叫 ",[88,115437,115438],{},"ReacherEnv","。括号里的 ",[88,115441,115389],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[88,115444,70031],{},[88,115446,107109],{}," 这两个核心方法。",[83,115449,115451],{"className":30353,"code":115450,"language":30355,"meta":10,"style":10},"metadata = {\"render_modes\": []}\n",[88,115452,115453],{"__ignoreMap":10},[91,115454,115455,115458,115460,115462,115464],{"class":93,"line":94},[91,115456,115457],{"class":101},"metadata ",[91,115459,147],{"class":97},[91,115461,4426],{"class":101},[91,115463,114055],{"class":206},[91,115465,114058],{"class":101},[38,115467,115468],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[83,115470,115472],{"className":30353,"code":115471,"language":30355,"meta":10,"style":10},"def __init__(self) -> None:\n",[88,115473,115474],{"__ignoreMap":10},[91,115475,115476,115478,115480,115482,115484],{"class":93,"line":94},[91,115477,31922],{"class":97},[91,115479,30779],{"class":150},[91,115481,114071],{"class":101},[91,115483,95661],{"class":150},[91,115485,3717],{"class":101},[38,115487,115488,115490,115491,28360],{},[88,115489,30804],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[88,115492,115493],{},"env = ReacherEnv()",[83,115495,115497],{"className":30353,"code":115496,"language":30355,"meta":10,"style":10},"super().__init__()\n",[88,115498,115499],{"__ignoreMap":10},[91,115500,115501,115504,115506,115508],{"class":93,"line":94},[91,115502,115503],{"class":150},"super",[91,115505,17240],{"class":101},[91,115507,30804],{"class":150},[91,115509,1954],{"class":101},[38,115511,115512,115513,115515],{},"调用父类 ",[88,115514,115389],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[83,115517,115518],{"className":30353,"code":115181,"language":30355,"meta":10,"style":10},[88,115519,115520,115534],{"__ignoreMap":10},[91,115521,115522,115524,115526,115528,115530,115532],{"class":93,"line":94},[91,115523,30798],{"class":150},[91,115525,114092],{"class":101},[91,115527,147],{"class":97},[91,115529,101387],{"class":101},[91,115531,101289],{"class":150},[91,115533,108],{"class":101},[91,115535,115536,115538,115540,115542,115544,115546],{"class":93,"line":11},[91,115537,30798],{"class":150},[91,115539,114107],{"class":101},[91,115541,147],{"class":97},[91,115543,114112],{"class":101},[91,115545,30798],{"class":150},[91,115547,114117],{"class":101},[38,115549,115550,115551,115553,115554,100993,115557,115560],{},"把 MuJoCo 模型和状态保存到 ",[88,115552,30798],{}," 上。",[88,115555,115556],{},"self.model",[88,115558,115559],{},"self.data"," 表示这个环境对象自己的模型和状态。",[83,115562,115563],{"className":30353,"code":115223,"language":30355,"meta":10,"style":10},[88,115564,115565,115579],{"__ignoreMap":10},[91,115566,115567,115569,115571,115573,115575,115577],{"class":93,"line":94},[91,115568,30798],{"class":150},[91,115570,114128],{"class":101},[91,115572,147],{"class":97},[91,115574,114133],{"class":101},[91,115576,89529],{"class":150},[91,115578,108],{"class":101},[91,115580,115581,115583,115585,115587,115589,115591],{"class":93,"line":11},[91,115582,30798],{"class":150},[91,115584,114149],{"class":101},[91,115586,147],{"class":97},[91,115588,114133],{"class":101},[91,115590,89529],{"class":150},[91,115592,108],{"class":101},[38,115594,115595,115596,100993,115599,115602],{},"提前查好 tip 和 target 的 site ID。这样 ",[88,115597,115598],{},"_get_obs",[88,115600,115601],{},"_get_reward"," 里就不用每次按名字查找。",[83,115604,115606],{"className":30353,"code":115605,"language":30355,"meta":10,"style":10},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[88,115607,115608,115618,115628],{"__ignoreMap":10},[91,115609,115610,115612,115614,115616],{"class":93,"line":94},[91,115611,30798],{"class":150},[91,115613,113842],{"class":101},[91,115615,147],{"class":97},[91,115617,54402],{"class":150},[91,115619,115620,115622,115624,115626],{"class":93,"line":11},[91,115621,30798],{"class":150},[91,115623,114221],{"class":101},[91,115625,147],{"class":97},[91,115627,114226],{"class":150},[91,115629,115630,115632,115634,115636],{"class":93,"line":1157},[91,115631,30798],{"class":150},[91,115633,113681],{"class":101},[91,115635,147],{"class":97},[91,115637,47308],{"class":150},[38,115639,115640,115643,115644,115647,115648,115651],{},[88,115641,115642],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[88,115645,115646],{},"max_steps"," 是一个 episode 最多运行多少步。",[88,115649,115650],{},"steps"," 记录当前 episode 已经走了多少步。",[83,115653,115654],{"className":30353,"code":113720,"language":30355,"meta":10,"style":10},[88,115655,115656],{"__ignoreMap":10},[91,115657,115658,115660,115662,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696],{"class":93,"line":94},[91,115659,30798],{"class":150},[91,115661,113729],{"class":101},[91,115663,147],{"class":97},[91,115665,113734],{"class":101},[91,115667,113737],{"class":5195},[91,115669,113740],{"class":97},[91,115671,102378],{"class":150},[91,115673,12414],{"class":101},[91,115675,113747],{"class":5195},[91,115677,147],{"class":97},[91,115679,102378],{"class":150},[91,115681,12414],{"class":101},[91,115683,95938],{"class":5195},[91,115685,147],{"class":97},[91,115687,102],{"class":101},[91,115689,179],{"class":150},[91,115691,113764],{"class":101},[91,115693,93475],{"class":5195},[91,115695,147],{"class":97},[91,115697,113771],{"class":101},[38,115699,115700,115701,115704,115705,100993,115708,115711],{},"定义动作空间。",[88,115702,115703],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[88,115706,115707],{},"low=-1.0",[88,115709,115710],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[83,115713,115714],{"className":30353,"code":113781,"language":30355,"meta":10,"style":10},[88,115715,115716],{"__ignoreMap":10},[91,115717,115718,115720,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752],{"class":93,"line":94},[91,115719,30798],{"class":150},[91,115721,113790],{"class":101},[91,115723,147],{"class":97},[91,115725,113734],{"class":101},[91,115727,113737],{"class":5195},[91,115729,113740],{"class":97},[91,115731,113801],{"class":101},[91,115733,113747],{"class":5195},[91,115735,147],{"class":97},[91,115737,113801],{"class":101},[91,115739,95938],{"class":5195},[91,115741,147],{"class":97},[91,115743,102],{"class":101},[91,115745,548],{"class":150},[91,115747,113764],{"class":101},[91,115749,93475],{"class":5195},[91,115751,147],{"class":97},[91,115753,113771],{"class":101},[38,115755,115756,115757,115760,115761,115764],{},"定义观测空间。",[88,115758,115759],{},"shape=(10,)"," 表示观测是 10 个数。",[88,115762,115763],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[83,115766,115768],{"className":30353,"code":115767,"language":30355,"meta":10,"style":10},"def _get_obs(self) -> np.ndarray:\n",[88,115769,115770],{"__ignoreMap":10},[91,115771,115772,115774,115776],{"class":93,"line":94},[91,115773,31922],{"class":97},[91,115775,114331],{"class":1941},[91,115777,114334],{"class":101},[38,115779,115780,115781,115783],{},"定义内部函数，用来生成观测。函数名前面的 ",[88,115782,1094],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[83,115785,115787],{"className":30353,"code":115786,"language":30355,"meta":10,"style":10},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[88,115788,115789,115803],{"__ignoreMap":10},[91,115790,115791,115793,115795,115797,115799,115801],{"class":93,"line":94},[91,115792,111543],{"class":101},[91,115794,147],{"class":97},[91,115796,38848],{"class":150},[91,115798,114345],{"class":101},[91,115800,30798],{"class":150},[91,115802,114350],{"class":101},[91,115804,115805,115807,115809,115811,115813,115815],{"class":93,"line":11},[91,115806,111553],{"class":101},[91,115808,147],{"class":97},[91,115810,38848],{"class":150},[91,115812,114345],{"class":101},[91,115814,30798],{"class":150},[91,115816,114365],{"class":101},[38,115818,115819],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[83,115821,115823],{"className":30353,"code":115822,"language":30355,"meta":10,"style":10},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[88,115824,115825,115841],{"__ignoreMap":10},[91,115826,115827,115829,115831,115833,115835,115837,115839],{"class":93,"line":94},[91,115828,110829],{"class":101},[91,115830,147],{"class":97},[91,115832,114374],{"class":101},[91,115834,30798],{"class":150},[91,115836,114379],{"class":101},[91,115838,30798],{"class":150},[91,115840,114384],{"class":101},[91,115842,115843,115845],{"class":93,"line":11},[91,115844,17025],{"class":97},[91,115846,114391],{"class":101},[38,115848,115849,115850,115853,115854,115856],{},"拼接观测，并转换成 ",[88,115851,115852],{},"float32","。很多强化学习库默认使用 ",[88,115855,115852],{},"，所以这里主动转换。",[83,115858,115859],{"className":30353,"code":115262,"language":30355,"meta":10,"style":10},[88,115860,115861],{"__ignoreMap":10},[91,115862,115863,115865,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895],{"class":93,"line":94},[91,115864,31922],{"class":97},[91,115866,114497],{"class":1941},[91,115868,114500],{"class":101},[91,115870,557],{"class":97},[91,115872,114505],{"class":101},[91,115874,105],{"class":150},[91,115876,25084],{"class":97},[91,115878,38908],{"class":150},[91,115880,13543],{"class":97},[91,115882,38908],{"class":150},[91,115884,114518],{"class":101},[91,115886,114521],{"class":150},[91,115888,25084],{"class":97},[91,115890,38908],{"class":150},[91,115892,13543],{"class":97},[91,115894,38908],{"class":150},[91,115896,30761],{"class":101},[38,115898,115899,115900,115902,115903,115906],{},"定义 reset。",[88,115901,114541],{}," 用来控制随机数，保证实验可以复现。",[88,115904,115905],{},"options"," 用来接收额外配置，本章暂时不用。",[83,115908,115910],{"className":30353,"code":115909,"language":30355,"meta":10,"style":10},"super().reset(seed=seed)\n",[88,115911,115912],{"__ignoreMap":10},[91,115913,115914,115916,115918,115920,115922],{"class":93,"line":94},[91,115915,115503],{"class":150},[91,115917,114538],{"class":101},[91,115919,114541],{"class":5195},[91,115921,147],{"class":97},[91,115923,114546],{"class":101},[38,115925,115926,115927,115930],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[88,115928,115929],{},"self.np_random"," 生成可复现的随机数。",[83,115932,115934],{"className":30353,"code":115933,"language":30355,"meta":10,"style":10},"mujoco.mj_resetData(self.model, self.data)\n",[88,115935,115936],{"__ignoreMap":10},[91,115937,115938,115941,115943,115945,115947],{"class":93,"line":94},[91,115939,115940],{"class":101},"mujoco.mj_resetData(",[91,115942,30798],{"class":150},[91,115944,114556],{"class":101},[91,115946,30798],{"class":150},[91,115948,114561],{"class":101},[38,115950,115951],{},"把 MuJoCo 状态重置到默认状态。",[83,115953,115955],{"className":30353,"code":115954,"language":30355,"meta":10,"style":10},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[88,115956,115957],{"__ignoreMap":10},[91,115958,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991],{"class":93,"line":94},[91,115960,30798],{"class":150},[91,115962,114572],{"class":101},[91,115964,147],{"class":97},[91,115966,38848],{"class":150},[91,115968,114579],{"class":101},[91,115970,113737],{"class":5195},[91,115972,113740],{"class":97},[91,115974,86185],{"class":150},[91,115976,12414],{"class":101},[91,115978,113747],{"class":5195},[91,115980,147],{"class":97},[91,115982,86185],{"class":150},[91,115984,12414],{"class":101},[91,115986,31471],{"class":5195},[91,115988,147],{"class":97},[91,115990,30798],{"class":150},[91,115992,114604],{"class":101},[38,115994,115316,115995,115998,115999,116002,116003,116005],{},[88,115996,115997],{},"[:]"," 表示修改整个数组。",[88,116000,116001],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[88,116004,102125],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[83,116007,116009],{"className":30353,"code":116008,"language":30355,"meta":10,"style":10},"self.data.qvel[:] = 0.0\n",[88,116010,116011],{"__ignoreMap":10},[91,116012,116013,116015,116017,116019],{"class":93,"line":94},[91,116014,30798],{"class":150},[91,116016,114611],{"class":101},[91,116018,147],{"class":97},[91,116020,104736],{"class":150},[38,116022,116023],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[83,116025,116027],{"className":30353,"code":116026,"language":30355,"meta":10,"style":10},"self.steps = 0\nreturn self._get_obs(), {}\n",[88,116028,116029,116039],{"__ignoreMap":10},[91,116030,116031,116033,116035,116037],{"class":93,"line":94},[91,116032,30798],{"class":150},[91,116034,113681],{"class":101},[91,116036,147],{"class":97},[91,116038,47308],{"class":150},[91,116040,116041,116043,116045],{"class":93,"line":11},[91,116042,17025],{"class":97},[91,116044,38848],{"class":150},[91,116046,114651],{"class":101},[38,116048,116049],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[83,116051,116052],{"className":30353,"code":115325,"language":30355,"meta":10,"style":10},[88,116053,116054],{"__ignoreMap":10},[91,116055,116056,116058,116060],{"class":93,"line":94},[91,116057,31922],{"class":97},[91,116059,114662],{"class":1941},[91,116061,114665],{"class":101},[38,116063,116064],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[83,116066,116068],{"className":30353,"code":116067,"language":30355,"meta":10,"style":10},"action = np.asarray(action, dtype=np.float32)\n",[88,116069,116070],{"__ignoreMap":10},[91,116071,116072,116074,116076,116078,116080,116082],{"class":93,"line":94},[91,116073,107417],{"class":101},[91,116075,147],{"class":97},[91,116077,114674],{"class":101},[91,116079,93475],{"class":5195},[91,116081,147],{"class":97},[91,116083,113771],{"class":101},[38,116085,116086,116087,28360],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[88,116088,115852],{},[83,116090,116092],{"className":30353,"code":116091,"language":30355,"meta":10,"style":10},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[88,116093,116094],{"__ignoreMap":10},[91,116095,116096,116098,116100,116102,116104,116106,116108],{"class":93,"line":94},[91,116097,107417],{"class":101},[91,116099,147],{"class":97},[91,116101,107422],{"class":101},[91,116103,30798],{"class":150},[91,116105,114693],{"class":101},[91,116107,30798],{"class":150},[91,116109,114698],{"class":101},[38,116111,116112],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[83,116114,116116],{"className":30353,"code":116115,"language":30355,"meta":10,"style":10},"self.data.ctrl[:] = action\n",[88,116117,116118],{"__ignoreMap":10},[91,116119,116120,116122,116124,116126],{"class":93,"line":94},[91,116121,30798],{"class":150},[91,116123,114709],{"class":101},[91,116125,147],{"class":97},[91,116127,107445],{"class":101},[38,116129,116130],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[83,116132,116134],{"className":30353,"code":116133,"language":30355,"meta":10,"style":10},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[88,116135,116136,116152],{"__ignoreMap":10},[91,116137,116138,116140,116142,116144,116146,116148,116150],{"class":93,"line":94},[91,116139,3003],{"class":97},[91,116141,101476],{"class":101},[91,116143,26018],{"class":97},[91,116145,32418],{"class":150},[91,116147,102],{"class":101},[91,116149,30798],{"class":150},[91,116151,114730],{"class":101},[91,116153,116154,116157,116159,116161,116163],{"class":93,"line":11},[91,116155,116156],{"class":101},"    mujoco.mj_step(",[91,116158,30798],{"class":150},[91,116160,114556],{"class":101},[91,116162,30798],{"class":150},[91,116164,114561],{"class":101},[38,116166,116167,116168,116171,116172,116174,116175,28360],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[88,116169,116170],{},"frame_skip=5","，所以外部调用一次 ",[88,116173,113852],{},"，内部实际执行 5 次 ",[88,116176,101190],{},[83,116178,116180],{"className":30353,"code":116179,"language":30355,"meta":10,"style":10},"self.steps += 1\n",[88,116181,116182],{"__ignoreMap":10},[91,116183,116184,116186,116188,116190],{"class":93,"line":94},[91,116185,30798],{"class":150},[91,116187,113681],{"class":101},[91,116189,9456],{"class":97},[91,116191,55674],{"class":150},[38,116193,116194],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[83,116196,116198],{"className":30353,"code":116197,"language":30355,"meta":10,"style":10},"obs = self._get_obs()\nreward = self._get_reward()\n",[88,116199,116200,116210],{"__ignoreMap":10},[91,116201,116202,116204,116206,116208],{"class":93,"line":94},[91,116203,110829],{"class":101},[91,116205,147],{"class":97},[91,116207,38848],{"class":150},[91,116209,114772],{"class":101},[91,116211,116212,116214,116216,116218],{"class":93,"line":11},[91,116213,110980],{"class":101},[91,116215,147],{"class":97},[91,116217,38848],{"class":150},[91,116219,114783],{"class":101},[38,116221,116222],{},"计算新的观测和奖励。",[83,116224,116226],{"className":30353,"code":116225,"language":30355,"meta":10,"style":10},"dist = float(np.linalg.norm(tip - target))\n",[88,116227,116228],{"__ignoreMap":10},[91,116229,116230,116232,116234,116236,116238,116240],{"class":93,"line":94},[91,116231,111571],{"class":101},[91,116233,147],{"class":97},[91,116235,109772],{"class":150},[91,116237,114826],{"class":101},[91,116239,634],{"class":97},[91,116241,114831],{"class":101},[38,116243,116244],{},"计算末端到目标的距离，并转换成 Python float。",[83,116246,116247],{"className":30353,"code":113652,"language":30355,"meta":10,"style":10},[88,116248,116249,116261],{"__ignoreMap":10},[91,116250,116251,116253,116255,116257,116259],{"class":93,"line":94},[91,116252,113659],{"class":101},[91,116254,147],{"class":97},[91,116256,113664],{"class":101},[91,116258,1012],{"class":97},[91,116260,113669],{"class":150},[91,116262,116263,116265,116267,116269,116271,116273,116275],{"class":93,"line":11},[91,116264,113674],{"class":101},[91,116266,147],{"class":97},[91,116268,38848],{"class":150},[91,116270,113681],{"class":101},[91,116272,1688],{"class":97},[91,116274,38848],{"class":150},[91,116276,113688],{"class":101},[38,116278,116279],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[83,116281,116283],{"className":30353,"code":116282,"language":30355,"meta":10,"style":10},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[88,116284,116285,116298],{"__ignoreMap":10},[91,116286,116287,116290,116292,116294,116296],{"class":93,"line":94},[91,116288,116289],{"class":101},"info ",[91,116291,147],{"class":97},[91,116293,4426],{"class":101},[91,116295,114877],{"class":206},[91,116297,114880],{"class":101},[91,116299,116300,116302],{"class":93,"line":11},[91,116301,17025],{"class":97},[91,116303,114887],{"class":101},[38,116305,116306,116309],{},[88,116307,116308],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[83,116311,116313],{"className":30353,"code":116312,"language":30355,"meta":10,"style":10},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[88,116314,116315,116324],{"__ignoreMap":10},[91,116316,116317,116320,116322],{"class":93,"line":94},[91,116318,116319],{"class":101},"env ",[91,116321,147],{"class":97},[91,116323,114917],{"class":101},[91,116325,116326,116328,116330,116332,116334,116336,116338],{"class":93,"line":11},[91,116327,113375],{"class":101},[91,116329,147],{"class":97},[91,116331,114927],{"class":101},[91,116333,114541],{"class":5195},[91,116335,147],{"class":97},[91,116337,293],{"class":150},[91,116339,108],{"class":101},[38,116341,116342,116343,116346],{},"创建环境并重置。",[88,116344,116345],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[83,116348,116350],{"className":30353,"code":116349,"language":30355,"meta":10,"style":10},"action = env.action_space.sample()\n",[88,116351,116352],{"__ignoreMap":10},[91,116353,116354,116356,116358],{"class":93,"line":94},[91,116355,107417],{"class":101},[91,116357,147],{"class":97},[91,116359,114996],{"class":101},[38,116361,116362],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[33,116364,102291],{"id":102290},[38,116366,105459],{},[83,116368,116371],{"className":116369,"code":116370,"language":5166,"meta":10},[5164],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[88,116372,116370],{"__ignoreMap":10},[38,116374,116375],{},"这个环境已经具备强化学习环境的基本结构。",[38,116377,116378],{},"主函数里使用随机动作：",[83,116380,116381],{"className":30353,"code":116349,"language":30355,"meta":10,"style":10},[88,116382,116383],{"__ignoreMap":10},[91,116384,116385,116387,116389],{"class":93,"line":94},[91,116386,107417],{"class":101},[91,116388,147],{"class":97},[91,116390,114996],{"class":101},[38,116392,116393],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[33,116395,102323],{"id":102322},[46,116397,116398,116401,116407,116416,116425,116434,116440],{},[49,116399,116400],{},"运行程序。",[49,116402,116403,116404,28360],{},"确认 ",[88,116405,116406],{},"obs.shape == (10,)",[49,116408,111156,116409,116412,116413,28360],{},[88,116410,116411],{},"env.action_space","，应类似 ",[88,116414,116415],{},"Box(-1.0, 1.0, (2,), float32)",[49,116417,105560,116418,116421,116422,28360],{},[88,116419,116420],{},"self.max_steps = 10","，确认环境会更快 ",[88,116423,116424],{},"truncated=True",[49,116426,102386,116427,102389,116430,116433],{},[88,116428,116429],{},"terminated = dist \u003C 0.05",[88,116431,116432],{},"dist \u003C 0.2","，观察是否更容易结束。",[49,116435,102386,116436,116439],{},[88,116437,116438],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[49,116441,116442,116443,116445,116446,116449],{},"在 ",[88,116444,116308],{}," 里加入 ",[88,116447,116448],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[33,116451,102428],{"id":102427},[63,116453,116455],{"id":116454},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[38,116457,116458,116459,116461],{},"Gymnasium 的 ",[88,116460,107109],{}," 返回 5 个值:",[83,116463,116465],{"className":30353,"code":116464,"language":30355,"meta":10,"style":10},"obs, reward, terminated, truncated, info\n",[88,116466,116467],{"__ignoreMap":10},[91,116468,116469],{"class":93,"line":94},[91,116470,116464],{"class":101},[38,116472,116473],{},"不是旧 Gym 的 4 个值。",[63,116475,116477,116480],{"id":116476},"datactrl-action-维度错误",[88,116478,116479],{},"data.ctrl[:] = action"," 维度错误",[38,116482,102498],{},[83,116484,116486],{"className":30353,"code":116485,"language":30355,"meta":10,"style":10},"print(self.model.nu)\nprint(action.shape)\n",[88,116487,116488,116499],{"__ignoreMap":10},[91,116489,116490,116492,116494,116496],{"class":93,"line":94},[91,116491,30390],{"class":150},[91,116493,102],{"class":101},[91,116495,30798],{"class":150},[91,116497,116498],{"class":101},".model.nu)\n",[91,116500,116501,116503],{"class":93,"line":11},[91,116502,30390],{"class":150},[91,116504,116505],{"class":101},"(action.shape)\n",[38,116507,116508],{},"两者必须匹配。",[63,116510,116512],{"id":116511},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[38,116514,102437],{},[83,116516,116518],{"className":30353,"code":116517,"language":30355,"meta":10,"style":10},"mujoco.mj_forward(self.model, self.data)\n",[88,116519,116520],{"__ignoreMap":10},[91,116521,116522,116525,116527,116529,116531],{"class":93,"line":94},[91,116523,116524],{"class":101},"mujoco.mj_forward(",[91,116526,30798],{"class":150},[91,116528,114556],{"class":101},[91,116530,30798],{"class":150},[91,116532,114561],{"class":101},[63,116534,116536,116538],{"id":116535},"observation_space-维度和-obs-不一致",[88,116537,113575],{}," 维度和 obs 不一致",[38,116540,102550],{},[83,116542,116544],{"className":30353,"code":116543,"language":30355,"meta":10,"style":10},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[88,116545,116546,116556,116563],{"__ignoreMap":10},[91,116547,116548,116550,116552,116554],{"class":93,"line":94},[91,116549,110829],{"class":101},[91,116551,147],{"class":97},[91,116553,38848],{"class":150},[91,116555,114772],{"class":101},[91,116557,116558,116560],{"class":93,"line":11},[91,116559,30390],{"class":150},[91,116561,116562],{"class":101},"(obs.shape)\n",[91,116564,116565,116567,116569,116571],{"class":93,"line":1157},[91,116566,30390],{"class":150},[91,116568,102],{"class":101},[91,116570,30798],{"class":150},[91,116572,116573],{"class":101},".observation_space.shape)\n",[38,116575,116576],{},"两者必须一致。本章观测是：",[83,116578,116581],{"className":116579,"code":116580,"language":5166,"meta":10},[5164],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[88,116582,116580],{"__ignoreMap":10},[63,116584,116586],{"id":116585},"action-超过范围","action 超过范围",[38,116588,116589],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[83,116591,116592],{"className":30353,"code":116091,"language":30355,"meta":10,"style":10},[88,116593,116594],{"__ignoreMap":10},[91,116595,116596,116598,116600,116602,116604,116606,116608],{"class":93,"line":94},[91,116597,107417],{"class":101},[91,116599,147],{"class":97},[91,116601,107422],{"class":101},[91,116603,30798],{"class":150},[91,116605,114693],{"class":101},[91,116607,30798],{"class":150},[91,116609,114698],{"class":101},[38,116611,116612,116613,28360],{},"这能避免无效动作直接写入 ",[88,116614,101051],{},[63,116616,116618],{"id":116617},"忘记返回-info","忘记返回 info",[38,116620,116458,116621,100993,116623,116625],{},[88,116622,70031],{},[88,116624,107109],{}," 都会返回 info：",[83,116627,116628],{"className":30353,"code":113368,"language":30355,"meta":10,"style":10},[88,116629,116630,116638],{"__ignoreMap":10},[91,116631,116632,116634,116636],{"class":93,"line":94},[91,116633,113375],{"class":101},[91,116635,147],{"class":97},[91,116637,113380],{"class":101},[91,116639,116640,116642,116644],{"class":93,"line":11},[91,116641,113385],{"class":101},[91,116643,147],{"class":97},[91,116645,113390],{"class":101},[38,116647,116648,116649,28360],{},"即使暂时没有额外信息，也返回 ",[88,116650,32434],{},[33,116652,116654],{"id":116653},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[38,116656,116657],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[46,116659,116660,116663,116666,116669,116672,116675],{},[49,116661,116662],{},"更稳定的 reward。",[49,116664,116665],{},"合理的 episode 长度。",[49,116667,116668],{},"可重复的随机目标采样。",[49,116670,116671],{},"render 接口。",[49,116673,116674],{},"环境注册代码。",[49,116676,116677],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[38,116679,116680],{},"如果只是自己写训练循环，最小形式是：",[83,116682,116684],{"className":30353,"code":116683,"language":30355,"meta":10,"style":10},"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",[88,116685,116686,116694,116710,116714,116730,116739,116748,116758],{"__ignoreMap":10},[91,116687,116688,116690,116692],{"class":93,"line":94},[91,116689,116319],{"class":101},[91,116691,147],{"class":97},[91,116693,114917],{"class":101},[91,116695,116696,116698,116700,116702,116704,116706,116708],{"class":93,"line":11},[91,116697,113375],{"class":101},[91,116699,147],{"class":97},[91,116701,114927],{"class":101},[91,116703,114541],{"class":5195},[91,116705,147],{"class":97},[91,116707,293],{"class":150},[91,116709,108],{"class":101},[91,116711,116712],{"class":93,"line":1157},[91,116713,2378],{"emptyLinePlaceholder":17},[91,116715,116716,116718,116720,116722,116724,116726,116728],{"class":93,"line":1172},[91,116717,3003],{"class":97},[91,116719,101476],{"class":101},[91,116721,26018],{"class":97},[91,116723,32418],{"class":150},[91,116725,102],{"class":101},[91,116727,6389],{"class":150},[91,116729,30761],{"class":101},[91,116731,116732,116735,116737],{"class":93,"line":1178},[91,116733,116734],{"class":101},"    action ",[91,116736,147],{"class":97},[91,116738,114996],{"class":101},[91,116740,116741,116744,116746],{"class":93,"line":1192},[91,116742,116743],{"class":101},"    obs, reward, terminated, truncated, info ",[91,116745,147],{"class":97},[91,116747,113390],{"class":101},[91,116749,116750,116752,116754,116756],{"class":93,"line":1198},[91,116751,3079],{"class":97},[91,116753,115062],{"class":101},[91,116755,115065],{"class":97},[91,116757,115068],{"class":101},[91,116759,116760,116763,116765],{"class":93,"line":1289},[91,116761,116762],{"class":101},"        obs, info ",[91,116764,147],{"class":97},[91,116766,113380],{"class":101},[33,116768,116770],{"id":116769},"_9本章小结","9.本章小结",[38,116772,116773],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[83,116775,116778],{"className":116776,"code":116777,"language":5166,"meta":10},[5164],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[88,116779,116777],{"__ignoreMap":10},[38,116781,116782],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5105,116784,116785],{},"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":10,"searchDepth":11,"depth":11,"links":116787},[116788,116789,116790,116797,116801,116802,116803,116813,116814],{"id":100621,"depth":11,"text":100622},{"id":100744,"depth":11,"text":100745},{"id":101019,"depth":11,"text":101020,"children":116791},[116792,116794,116796],{"id":113599,"depth":1157,"text":116793},"terminated 和 truncated 的区别",{"id":113702,"depth":1157,"text":116795},"observation_space 和 action_space",{"id":113829,"depth":1157,"text":113830},{"id":101227,"depth":11,"text":101228,"children":116798},[116799,116800],{"id":101547,"depth":1157,"text":101547},{"id":101683,"depth":1157,"text":101683},{"id":102290,"depth":11,"text":102291},{"id":102322,"depth":11,"text":102323},{"id":102427,"depth":11,"text":102428,"children":116804},[116805,116806,116808,116809,116811,116812],{"id":116454,"depth":1157,"text":116455},{"id":116476,"depth":1157,"text":116807},"data.ctrl[:] = action 维度错误",{"id":116511,"depth":1157,"text":116512},{"id":116535,"depth":1157,"text":116810},"observation_space 维度和 obs 不一致",{"id":116585,"depth":1157,"text":116586},{"id":116617,"depth":1157,"text":116618},{"id":116653,"depth":11,"text":116654},{"id":116769,"depth":11,"text":116770},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113352,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116821,"title":116822,"body":116823,"description":117246,"extension":14,"meta":117247,"navigation":17,"path":117248,"seo":117249,"stem":117250,"__hash__":117251},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116824,"toc":117236},[116825,116829,116832,116835,116855,116861,116867,116877,116880,116883,116903,116906,116910,116913,116919,116922,116936,116939,116942,117016,117019,117025,117028,117051,117054,117104,117107,117113,117116,117119,117122,117141,117144,117150,117153,117156,117159,117179,117182,117185,117188,117233],[29,116826,116828],{"id":116827},"mujoco-学习","MuJoCo 学习",[38,116830,116831],{},"初版",[38,116833,116834],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[46,116836,116837,116840,116843,116852],{},[49,116838,116839],{},"MuJoCo 模型文件在描述什么。",[49,116841,116842],{},"Python 代码怎样读取和推进仿真。",[49,116844,116845,314,116847,314,116849,116851],{},[88,116846,104005],{},[88,116848,104335],{},[88,116850,104338],{}," 这些数组为什么重要。",[49,116853,116854],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[38,116856,116857,116858,116860],{},"默认环境为 Fedora 44、Python >= 3.10、",[88,116859,101002],{}," 官方 Python bindings。",[38,116862,116863,116864,116866],{},"注意：本文禁止使用 ",[88,116865,100987],{},"。所有示例均使用：",[83,116868,116869],{"className":30353,"code":101553,"language":30355,"meta":10,"style":10},[88,116870,116871],{"__ignoreMap":10},[91,116872,116873,116875],{"class":93,"line":94},[91,116874,30367],{"class":97},[91,116876,101276],{"class":101},[33,116878,116879],{"id":116879},"适合谁阅读",[38,116881,116882],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[46,116884,116885,116888,116891,116894],{},[49,116886,116887],{},"没学过 MuJoCo，只会一点 Python。",[49,116889,116890],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[49,116892,116893],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[49,116895,116896,116897,116899,116900,116902],{},"以前接触过 ",[88,116898,100987],{},"，现在想迁移到官方 ",[88,116901,100996],{}," Python bindings。",[38,116904,116905],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[33,116907,116909],{"id":116908},"mujoco-到底是什么","MuJoCo 到底是什么",[38,116911,116912],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[83,116914,116917],{"className":116915,"code":116916,"language":5166,"meta":10},[5164],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[88,116918,116916],{"__ignoreMap":10},[38,116920,116921],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[46,116923,116924,116927,116930,116933],{},[49,116925,116926],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[49,116928,116929],{},"快速测试控制算法，不必一开始就上真实机器人。",[49,116931,116932],{},"生成强化学习环境。",[49,116934,116935],{},"采集状态、动作、图像、奖励等训练数据。",[33,116937,116938],{"id":116938},"学习前的心智模型",[38,116940,116941],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[239,116943,116944,116956],{},[242,116945,116946],{},[245,116947,116948,116951,116954],{},[248,116949,116950],{"align":23710},"部分",[248,116952,116953],{"align":23710},"负责什么",[248,116955,21166],{"align":23710},[286,116957,116958,116969,116981,116993,117005],{},[245,116959,116960,116963,116966],{},[291,116961,116962],{"align":23710},"MJCF XML",[291,116964,116965],{"align":23710},"定义世界和机器人结构",[291,116967,116968],{"align":23710},"地面、盒子、关节、电机、摄像头",[245,116970,116971,116975,116978],{},[291,116972,116973],{"align":23710},[88,116974,100684],{},[291,116976,116977],{"align":23710},"编译后的静态模型",[291,116979,116980],{"align":23710},"有几个关节、有几个电机、时间步长是多少",[245,116982,116983,116987,116990],{},[291,116984,116985],{"align":23710},[88,116986,100694],{},[291,116988,116989],{"align":23710},"运行中的动态状态",[291,116991,116992],{"align":23710},"当前时间、位置、速度、电机输入",[245,116994,116995,116999,117002],{},[291,116996,116997],{"align":23710},[88,116998,101190],{},[291,117000,117001],{"align":23710},"推进一步物理仿真",[291,117003,117004],{"align":23710},"根据重力、力、碰撞更新状态",[245,117006,117007,117010,117013],{},[291,117008,117009],{"align":23710},"Viewer \u002F Renderer",[291,117011,117012],{"align":23710},"把仿真显示出来",[291,117014,117015],{"align":23710},"打开窗口或保存图片",[38,117017,117018],{},"一句话总结：",[83,117020,117023],{"className":117021,"code":117022,"language":5166,"meta":10},[5164],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[88,117024,117022],{"__ignoreMap":10},[38,117026,117027],{},"参考来源：",[1109,117029,117030,117037,117044],{},[49,117031,117032,117033],{},"MuJoCo Python 官方文档：",[340,117034,117035],{"href":117035,"rel":117036},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23839],[49,117038,117039,117040],{},"MuJoCo XML Reference：",[340,117041,117042],{"href":117042,"rel":117043},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23839],[49,117045,117046,117047],{},"MuJoCo Overview：",[340,117048,117049],{"href":117049,"rel":117050},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23839],[33,117052,117053],{"id":117053},"章节目录",[46,117055,117056,117062,117068,117074,117080,117086,117092,117098],{},[49,117057,117058],{},[340,117059,117061],{"href":117060},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[49,117063,117064],{},[340,117065,117067],{"href":117066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[49,117069,117070],{},[340,117071,117073],{"href":117072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[49,117075,117076],{},[340,117077,117079],{"href":117078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[49,117081,117082],{},[340,117083,117085],{"href":117084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[49,117087,117088],{},[340,117089,117091],{"href":117090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[49,117093,117094],{},[340,117095,117097],{"href":117096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[49,117099,117100],{},[340,117101,117103],{"href":117102},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[33,117105,117106],{"id":117106},"推荐学习路线",[83,117108,117111],{"className":117109,"code":117110,"language":5166,"meta":10},[5164],"环境安装\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",[88,117112,117110],{"__ignoreMap":10},[38,117114,117115],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[33,117117,117118],{"id":117118},"建议的目录结构",[38,117120,117121],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[83,117123,117125],{"className":23796,"code":117124,"language":23798,"meta":10,"style":10},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[88,117126,117127,117135],{"__ignoreMap":10},[91,117128,117129,117131,117133],{"class":93,"line":94},[91,117130,101241],{"class":1941},[91,117132,29191],{"class":150},[91,117134,101246],{"class":206},[91,117136,117137,117139],{"class":93,"line":11},[91,117138,101251],{"class":150},[91,117140,101246],{"class":206},[38,117142,117143],{},"每一章的代码都单独保存：",[83,117145,117148],{"className":117146,"code":117147,"language":5166,"meta":10},[5164],"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",[88,117149,117147],{"__ignoreMap":10},[38,117151,117152],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[33,117154,117155],{"id":117155},"学习方法",[38,117157,117158],{},"每章建议按这个顺序操作：",[46,117160,117161,117164,117167,117170,117173,117176],{},[49,117162,117163],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[49,117165,117166],{},"复制最小可运行代码，保存成指定文件。",[49,117168,117169],{},"运行代码，确认没有报错。",[49,117171,117172],{},"对照“运行结果说明”理解输出。",[49,117174,117175],{},"做“验证步骤”，主动改一两个参数。",[49,117177,117178],{},"遇到报错先看“常见错误与解决方案”。",[38,117180,117181],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[33,117183,117184],{"id":117184},"全局排错顺序",[38,117186,117187],{},"遇到问题时，按下面顺序查：",[46,117189,117190,117196,117202,117207,117210,117213,117220,117230],{},[49,117191,117192,117193],{},"Python 环境是否激活：",[88,117194,117195],{},"which python",[49,117197,117198,117199],{},"MuJoCo 是否能导入：",[88,117200,117201],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[49,117203,117204,117205],{},"是否误装了 ",[88,117206,100987],{},[49,117208,117209],{},"XML 标签是否闭合、属性是否拼写正确",[49,117211,117212],{},"actuator 引用的 joint 名字是否存在",[49,117214,117215,117217,117218],{},[88,117216,101051],{}," 的长度是否等于 ",[88,117219,102133],{},[49,117221,105560,117222,82514,117224,117226,117227],{},[88,117223,104005],{},[88,117225,104335],{}," 后是否调用了 ",[88,117228,117229],{},"mujoco.mj_forward",[49,117231,117232],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5105,117234,117235],{},"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":10,"searchDepth":11,"depth":11,"links":117237},[117238,117239,117240,117241,117242,117243,117244,117245],{"id":116879,"depth":11,"text":116879},{"id":116908,"depth":11,"text":116909},{"id":116938,"depth":11,"text":116938},{"id":117053,"depth":11,"text":117053},{"id":117106,"depth":11,"text":117106},{"id":117118,"depth":11,"text":117118},{"id":117155,"depth":11,"text":117155},{"id":117184,"depth":11,"text":117184},"仿真搭建。",{"category":16},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116822,"description":117246},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117253,"title":117254,"body":117255,"description":13,"extension":14,"meta":117710,"navigation":17,"path":117711,"seo":117712,"stem":117713,"__hash__":117714},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117256,"toc":117708},[117257,117260,117263,117269,117705],[29,117258,117254],{"id":117259},"_1-最常用的基本操作更新",[38,117261,117262],{},"装linux系统教程：",[38,117264,117265],{},[340,117266,117267],{"href":117267,"rel":117268},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23839],[83,117270,117274],{"className":117271,"code":117272,"language":117273,"meta":10,"style":10},"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",[88,117275,117276,117281,117286,117295,117300,117309,117314,117334,117339,117350,117355,117364,117369,117397,117402,117421,117426,117445,117449,117454,117470,117474,117479,117509,117513,117518,117534,117538,117543,117558,117562,117567,117583,117587,117592,117604,117616,117620,117625,117642,117646,117651,117669,117673,117678,117687,117691,117696],{"__ignoreMap":10},[91,117277,117278],{"class":93,"line":94},[91,117279,117280],{"class":160},"#更新相关的知识\n",[91,117282,117283],{"class":93,"line":11},[91,117284,117285],{"class":160},"# 更新软件包列表（从服务器获取最新软件信息）\n",[91,117287,117288,117290,117293],{"class":93,"line":1157},[91,117289,24551],{"class":1941},[91,117291,117292],{"class":206}," apt",[91,117294,26217],{"class":206},[91,117296,117297],{"class":93,"line":1172},[91,117298,117299],{"class":160},"# 升级所有可更新的软件包（不删除旧包）\n",[91,117301,117302,117304,117306],{"class":93,"line":1178},[91,117303,24551],{"class":1941},[91,117305,117292],{"class":206},[91,117307,117308],{"class":206}," upgrade\n",[91,117310,117311],{"class":93,"line":1192},[91,117312,117313],{"class":160},"#更新和升级软件包\n",[91,117315,117316,117318,117320,117323,117325,117327,117329,117332],{"class":93,"line":1198},[91,117317,24551],{"class":1941},[91,117319,117292],{"class":206},[91,117321,117322],{"class":206}," update",[91,117324,26165],{"class":101},[91,117326,24551],{"class":1941},[91,117328,117292],{"class":206},[91,117330,117331],{"class":206}," upgrade",[91,117333,100956],{"class":150},[91,117335,117336],{"class":93,"line":1289},[91,117337,117338],{"class":160},"#列出可更新的软件包及版本信息\n",[91,117340,117341,117344,117347],{"class":93,"line":1295},[91,117342,117343],{"class":1941},"apt",[91,117345,117346],{"class":206}," list",[91,117348,117349],{"class":150}," --upgradable\n",[91,117351,117352],{"class":93,"line":1307},[91,117353,117354],{"class":160},"#彻底升级（处理依赖关系，可能删除旧包）\n",[91,117356,117357,117359,117361],{"class":93,"line":1590},[91,117358,24551],{"class":1941},[91,117360,117292],{"class":206},[91,117362,117363],{"class":206}," full-upgrade\n",[91,117365,117366],{"class":93,"line":1595},[91,117367,117368],{"class":160},"#设置指定版本\n",[91,117370,117371,117373,117375,117377,117379,117382,117384,117386,117388,117390,117393,117395],{"class":93,"line":1601},[91,117372,24551],{"class":1941},[91,117374,117292],{"class":206},[91,117376,23808],{"class":206},[91,117378,28877],{"class":97},[91,117380,117381],{"class":206},"package_nam",[91,117383,176],{"class":101},[91,117385,1062],{"class":97},[91,117387,147],{"class":206},[91,117389,1012],{"class":97},[91,117391,117392],{"class":206},"version_numbe",[91,117394,772],{"class":101},[91,117396,51282],{"class":97},[91,117398,117399],{"class":93,"line":1606},[91,117400,117401],{"class":160},"#只安装软件包不升级\n",[91,117403,117404,117406,117408,117410,117412,117414,117416,117418],{"class":93,"line":1620},[91,117405,24551],{"class":1941},[91,117407,117292],{"class":206},[91,117409,23808],{"class":206},[91,117411,28877],{"class":97},[91,117413,117381],{"class":206},[91,117415,176],{"class":101},[91,117417,1062],{"class":97},[91,117419,117420],{"class":150}," --no-upgrade\n",[91,117422,117423],{"class":93,"line":1625},[91,117424,117425],{"class":160},"#只升级，不存在就不安装\n",[91,117427,117428,117430,117432,117434,117436,117438,117440,117442],{"class":93,"line":1631},[91,117429,24551],{"class":1941},[91,117431,117292],{"class":206},[91,117433,23808],{"class":206},[91,117435,28877],{"class":97},[91,117437,117381],{"class":206},[91,117439,176],{"class":101},[91,117441,1062],{"class":97},[91,117443,117444],{"class":150}," --only-upgrade\n",[91,117446,117447],{"class":93,"line":1652},[91,117448,2378],{"emptyLinePlaceholder":17},[91,117450,117451],{"class":93,"line":1657},[91,117452,117453],{"class":160},"#安装指定的软件命令\n",[91,117455,117456,117458,117460,117462,117464,117466,117468],{"class":93,"line":1671},[91,117457,24551],{"class":1941},[91,117459,117292],{"class":206},[91,117461,23808],{"class":206},[91,117463,28877],{"class":97},[91,117465,117381],{"class":206},[91,117467,176],{"class":101},[91,117469,51282],{"class":97},[91,117471,117472],{"class":93,"line":1676},[91,117473,2378],{"emptyLinePlaceholder":17},[91,117475,117476],{"class":93,"line":1705},[91,117477,117478],{"class":160},"#安装多个软件包\n",[91,117480,117481,117483,117485,117487,117489,117492,117495,117497,117499,117502,117504,117506],{"class":93,"line":1710},[91,117482,24551],{"class":1941},[91,117484,117292],{"class":206},[91,117486,23808],{"class":206},[91,117488,28877],{"class":97},[91,117490,117491],{"class":206},"package_",[91,117493,117494],{"class":97},"1>",[91,117496,28877],{"class":97},[91,117498,117491],{"class":206},[91,117500,117501],{"class":97},"2>",[91,117503,28877],{"class":97},[91,117505,117491],{"class":206},[91,117507,117508],{"class":97},"3>\n",[91,117510,117511],{"class":93,"line":1727},[91,117512,2378],{"emptyLinePlaceholder":17},[91,117514,117515],{"class":93,"line":1732},[91,117516,117517],{"class":160},"#更新指定的软件命令\n",[91,117519,117520,117522,117524,117526,117528,117530,117532],{"class":93,"line":1737},[91,117521,24551],{"class":1941},[91,117523,117292],{"class":206},[91,117525,117322],{"class":206},[91,117527,28877],{"class":97},[91,117529,117381],{"class":206},[91,117531,176],{"class":101},[91,117533,51282],{"class":97},[91,117535,117536],{"class":93,"line":1742},[91,117537,2378],{"emptyLinePlaceholder":17},[91,117539,117540],{"class":93,"line":1756},[91,117541,117542],{"class":160},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[91,117544,117545,117547,117550,117552,117554,117556],{"class":93,"line":1761},[91,117546,117343],{"class":1941},[91,117548,117549],{"class":206}," show",[91,117551,28877],{"class":97},[91,117553,117381],{"class":206},[91,117555,176],{"class":101},[91,117557,51282],{"class":97},[91,117559,117560],{"class":93,"line":2555},[91,117561,2378],{"emptyLinePlaceholder":17},[91,117563,117564],{"class":93,"line":2569},[91,117565,117566],{"class":160},"#删除软件包命令\n",[91,117568,117569,117571,117573,117575,117577,117579,117581],{"class":93,"line":2577},[91,117570,24551],{"class":1941},[91,117572,117292],{"class":206},[91,117574,26054],{"class":206},[91,117576,28877],{"class":97},[91,117578,117381],{"class":206},[91,117580,176],{"class":101},[91,117582,51282],{"class":97},[91,117584,117585],{"class":93,"line":2582},[91,117586,2378],{"emptyLinePlaceholder":17},[91,117588,117589],{"class":93,"line":2588},[91,117590,117591],{"class":160},"# 清理旧版本和缓存（释放磁盘空间）\n",[91,117593,117594,117596,117598,117601],{"class":93,"line":2594},[91,117595,24551],{"class":1941},[91,117597,117292],{"class":206},[91,117599,117600],{"class":206}," autoremove",[91,117602,117603],{"class":160},"  # 删除不再需要的依赖和库文件\n",[91,117605,117606,117608,117610,117613],{"class":93,"line":2599},[91,117607,24551],{"class":1941},[91,117609,117292],{"class":206},[91,117611,117612],{"class":206}," clean",[91,117614,117615],{"class":160},"       # 清理下载的缓存包\n",[91,117617,117618],{"class":93,"line":7927},[91,117619,2378],{"emptyLinePlaceholder":17},[91,117621,117622],{"class":93,"line":7951},[91,117623,117624],{"class":160},"#移除软件包及配置文件\n",[91,117626,117627,117629,117631,117634,117636,117638,117640],{"class":93,"line":7956},[91,117628,24551],{"class":1941},[91,117630,117292],{"class":206},[91,117632,117633],{"class":206}," purge",[91,117635,28877],{"class":97},[91,117637,117381],{"class":206},[91,117639,176],{"class":101},[91,117641,51282],{"class":97},[91,117643,117644],{"class":93,"line":7962},[91,117645,2378],{"emptyLinePlaceholder":17},[91,117647,117648],{"class":93,"line":7989},[91,117649,117650],{"class":160},"#查找软件包命令\n",[91,117652,117653,117655,117657,117660,117662,117665,117667],{"class":93,"line":7994},[91,117654,24551],{"class":1941},[91,117656,117292],{"class":206},[91,117658,117659],{"class":206}," search",[91,117661,28877],{"class":97},[91,117663,117664],{"class":206},"keywor",[91,117666,416],{"class":101},[91,117668,51282],{"class":97},[91,117670,117671],{"class":93,"line":8000},[91,117672,2378],{"emptyLinePlaceholder":17},[91,117674,117675],{"class":93,"line":8012},[91,117676,117677],{"class":160},"#列出所有已安装的包\n",[91,117679,117680,117682,117684],{"class":93,"line":8024},[91,117681,117343],{"class":1941},[91,117683,117346],{"class":206},[91,117685,117686],{"class":150}," --installed\n",[91,117688,117689],{"class":93,"line":8036},[91,117690,2378],{"emptyLinePlaceholder":17},[91,117692,117693],{"class":93,"line":9695},[91,117694,117695],{"class":160},"#列出所有已安装的包的版本信息\n",[91,117697,117698,117700,117702],{"class":93,"line":9720},[91,117699,117343],{"class":1941},[91,117701,117346],{"class":206},[91,117703,117704],{"class":150}," --all-versions\n",[5105,117706,117707],{},"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":10,"searchDepth":11,"depth":11,"links":117709},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117254,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117716,"title":117717,"body":117718,"description":13,"extension":14,"meta":118459,"navigation":17,"path":118460,"seo":118461,"stem":118462,"__hash__":118463},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117719,"toc":118446},[117720,117723,117727,117730,117736,117740,117744,117750,117755,117760,117765,117770,117775,117778,117781,117784,117787,117791,117794,117799,117802,117807,117810,117815,117822,117825,117828,117831,117834,117837,117848,117852,117856,117861,117866,117870,117875,117879,117884,117888,117892,117897,117900,117945,117950,117954,117958,117963,117969,117974,117984,117989,117999,118004,118009,118036,118040,118043,118048,118051,118076,118080,118085,118088,118093,118098,118118,118123,118126,118141,118145,118198,118201,118206,118210,118213,118228,118231,118234,118239,118243,118247,118250,118254,118258,118261,118266,118271,118275,118282,118290,118293,118300,118305,118310,118313,118318,118325,118330,118337,118341,118343,118348,118352,118355,118358,118363,118366,118371,118374,118379,118384,118389,118393,118398,118402,118443],[29,117721,117717],{"id":117722},"_2-linux装机教程",[33,117724,117726],{"id":117725},"_21-实体机","2.1 实体机",[38,117728,117729],{},"使用清华源：（Ubuntu24.04）",[38,117731,117732],{},[340,117733,117734],{"href":117734,"rel":117735},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23839],[33,117737,117739],{"id":117738},"_22-普通虚拟机","2.2 普通虚拟机",[63,117741,117743],{"id":117742},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[38,117745,117746],{},[340,117747,117748],{"href":117748,"rel":117749},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23839],[38,117751,117752],{},[1440,117753],{"alt":10,"src":117754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[38,117756,117757],{},[1440,117758],{"alt":10,"src":117759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[38,117761,117762],{},[1440,117763],{"alt":10,"src":117764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[38,117766,117767],{},[1440,117768],{"alt":10,"src":117769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[38,117771,117772],{},[1440,117773],{"alt":10,"src":117774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[38,117776,117777],{},"内存4G（4096MB）；",[38,117779,117780],{},"CPU给4个核；",[38,117782,117783],{},"硬盘动态分配60G；",[38,117785,117786],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[63,117788,117790],{"id":117789},"_222-安装ubuntu","2.2.2 安装Ubuntu",[38,117792,117793],{},"按照1.1的步骤下载Ubuntu",[38,117795,117796],{},[1440,117797],{"alt":10,"src":117798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[38,117800,117801],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[38,117803,117804],{},[1440,117805],{"alt":10,"src":117806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[38,117808,117809],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[38,117811,117812],{},[1440,117813],{"alt":10,"src":117814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[38,117816,117817,117818,117821],{},"选择“正常安装”(找不到都用Alt+F7)， ",[251,117819,117820],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[38,117823,117824],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[38,117826,117827],{},"将改动写入磁盘吗 继续",[38,117829,117830],{},"选择东八区（shanghai，大致在地图上点一下），继续",[38,117832,117833],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[38,117835,117836],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[38,117838,117839,117840,117843,117844,117847],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[251,117841,117842],{},"除了"," 选不发送系统信息与不升级之外， ",[251,117845,117846],{},"其它"," 都跳过或前进）",[63,117849,117851],{"id":117850},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21977,117853,117855],{"id":117854},"_2231-全屏","2.2.3.1 全屏",[38,117857,117858],{},[1440,117859],{"alt":10,"src":117860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[38,117862,117863],{},[1440,117864],{"alt":10,"src":117865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21977,117867,117869],{"id":117868},"_2232-文件交换","2.2.3.2 文件交换",[38,117871,117872],{},[1440,117873],{"alt":10,"src":117874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21977,117876,117878],{"id":117877},"_2233-新建文本文档","2.2.3.3 新建文本文档",[38,117880,117881],{},[1440,117882],{"alt":10,"src":117883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[33,117885,117887],{"id":117886},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[63,117889,117891],{"id":117890},"_231-简介与优缺点","2.3.1 简介与优缺点",[46,117893,117894],{},[49,117895,117896],{},"什么情况下推荐？",[38,117898,117899],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[46,117901,117902],{"start":11},[49,117903,117904,117905],{},"优缺点：",[46,117906,117907,117937],{},[49,117908,117909,117910],{},"优点：",[46,117911,117912,117915,117922,117925,117928,117931,117934],{},[49,117913,117914],{},"WSL2是最好的Linux发行版;(bushi)",[49,117916,117917,117918,117921],{},"性能损耗极低。且比在Windows上跑深度性能 ",[251,117919,117920],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[49,117923,117924],{},"非常方便调用USB设备，可以USB直通;",[49,117926,117927],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[49,117929,117930],{},"非常方便Win与WSL2互相传文件等协同操作;",[49,117932,117933],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[49,117935,117936],{},"非常方便使用Windows的VScode远程开发;",[49,117938,117939,117940],{},"缺点：",[46,117941,117942],{},[49,117943,117944],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[38,117946,117947],{},[1440,117948],{"alt":10,"src":117949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[63,117951,117953],{"id":117952},"_232-安装教程","2.3.2 安装教程",[21977,117955,117957],{"id":117956},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[46,117959,117960],{},[49,117961,117962],{},"方法一(图形界面)",[38,117964,117965,117966,24593],{},"用Win+R输入",[88,117967,117968],{},"appwiz.cpl",[38,117970,117971],{},[1440,117972],{"alt":10,"src":117973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[38,117975,117976,117977,117980,117981,26448],{},"点击OK进入 ",[251,117978,117979],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[251,117982,117983],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[38,117985,117986],{},[1440,117987],{"alt":10,"src":117988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[38,117990,117991,117992,100993,117995,117998],{},"选择 ",[251,117993,117994],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[251,117996,117997],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[38,118000,118001],{},[1440,118002],{"alt":10,"src":118003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[46,118005,118006],{"start":11},[49,118007,118008],{},"方法二(命令行)",[83,118010,118014],{"className":118011,"code":118012,"language":118013,"meta":10,"style":10},"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",[88,118015,118016,118021,118026,118031],{"__ignoreMap":10},[91,118017,118018],{"class":93,"line":94},[91,118019,118020],{},"# 开启 Linux 子系统\n",[91,118022,118023],{"class":93,"line":11},[91,118024,118025],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[91,118027,118028],{"class":93,"line":1157},[91,118029,118030],{},"# 开启虚拟机平台\n",[91,118032,118033],{"class":93,"line":1172},[91,118034,118035],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21977,118037,118039],{"id":118038},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[38,118041,118042],{},"用管理员权限打开powershell",[38,118044,118045],{},[1440,118046],{"alt":10,"src":118047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[38,118049,118050],{},"升级WSL并设置默认版本为WSL2",[83,118052,118054],{"className":118011,"code":118053,"language":118013,"meta":10,"style":10},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[88,118055,118056,118061,118066,118071],{"__ignoreMap":10},[91,118057,118058],{"class":93,"line":94},[91,118059,118060],{},"# 更新 wsl\n",[91,118062,118063],{"class":93,"line":11},[91,118064,118065],{},"wsl --update\n",[91,118067,118068],{"class":93,"line":1157},[91,118069,118070],{},"# 将 wsl 版本设置为 wsl2\n",[91,118072,118073],{"class":93,"line":1172},[91,118074,118075],{},"wsl --set-default-version 2\n",[21977,118077,118079],{"id":118078},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[46,118081,118082],{},[49,118083,118084],{},"方式一(商店下载)",[38,118086,118087],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[38,118089,118090],{},[1440,118091],{"alt":10,"src":118092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[46,118094,118095],{"start":11},[49,118096,118097],{},"方式二(命令行安装)",[83,118099,118101],{"className":118011,"code":118100,"language":118013,"meta":10,"style":10},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[88,118102,118103,118108,118113],{"__ignoreMap":10},[91,118104,118105],{"class":93,"line":94},[91,118106,118107],{},"# 列出可安装的 Linux 版本\n",[91,118109,118110],{"class":93,"line":11},[91,118111,118112],{},"#（需要科学手段）\n",[91,118114,118115],{"class":93,"line":1157},[91,118116,118117],{},"wsl --list --online\n",[38,118119,118120],{},[1440,118121],{"alt":10,"src":118122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[38,118124,118125],{},"选择对应发行版并安装",[83,118127,118129],{"className":118011,"code":118128,"language":118013,"meta":10,"style":10},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[88,118130,118131,118136],{"__ignoreMap":10},[91,118132,118133],{"class":93,"line":94},[91,118134,118135],{},"# Ubuntu安装完毕后需要重启系统\n",[91,118137,118138],{"class":93,"line":11},[91,118139,118140],{},"wsl --install -d Ubuntu-24.04\n",[21977,118142,118144],{"id":118143},"_2324-查看系统状态","2.3.2.4 查看系统状态",[83,118146,118148],{"className":118011,"code":118147,"language":118013,"meta":10,"style":10},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[88,118149,118150,118155,118160,118165,118170,118174,118178,118183,118188,118193],{"__ignoreMap":10},[91,118151,118152],{"class":93,"line":94},[91,118153,118154],{},"# 查看 wsl\n",[91,118156,118157],{"class":93,"line":11},[91,118158,118159],{},"wsl -l\n",[91,118161,118162],{"class":93,"line":1157},[91,118163,118164],{},"# 查看 wsl 运行版本或模式\n",[91,118166,118167],{"class":93,"line":1172},[91,118168,118169],{},"wsl -l -v\n",[91,118171,118172],{"class":93,"line":1178},[91,118173,2378],{"emptyLinePlaceholder":17},[91,118175,118176],{"class":93,"line":1192},[91,118177,2378],{"emptyLinePlaceholder":17},[91,118179,118180],{"class":93,"line":1198},[91,118181,118182],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[91,118184,118185],{"class":93,"line":1289},[91,118186,118187],{},"wsl --set-version \u003Cdistro> 2\n",[91,118189,118190],{"class":93,"line":1295},[91,118191,118192],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[91,118194,118195],{"class":93,"line":1307},[91,118196,118197],{},"wsl --unregister \u003Cdistro>\n",[38,118199,118200],{},"输出Version为2即正常",[38,118202,118203],{},[1440,118204],{"alt":10,"src":118205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21977,118207,118209],{"id":118208},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[38,118211,118212],{},"直接在Powershell里输入wsl命令进入子系统",[83,118214,118216],{"className":118011,"code":118215,"language":118013,"meta":10,"style":10},"# 进入子系统\nwsl\n",[88,118217,118218,118223],{"__ignoreMap":10},[91,118219,118220],{"class":93,"line":94},[91,118221,118222],{},"# 进入子系统\n",[91,118224,118225],{"class":93,"line":11},[91,118226,118227],{},"wsl\n",[38,118229,118230],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[38,118232,118233],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[38,118235,118236],{},[1440,118237],{"alt":10,"src":118238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[63,118240,118242],{"id":118241},"_233-配置各种环境","2.3.3 配置各种环境",[21977,118244,118246],{"id":118245},"_2331-换源","2.3.3.1 换源",[38,118248,118249],{},"(同实体机LINUX，往下找教程)",[21977,118251,118253],{"id":118252},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22889,118255,118257],{"id":118256},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[38,118259,118260],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[38,118262,118263],{},[1440,118264],{"alt":10,"src":118265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[38,118267,118268],{},[1440,118269],{"alt":10,"src":118270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22889,118272,118274],{"id":118273},"_23322-cuda","2.3.3.2.2 CUDA",[38,118276,118277,118278],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[340,118279,118280],{"href":118280,"rel":118281},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23839],[38,118283,118284,118287],{},[1440,118285],{"alt":10,"src":118286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1440,118288],{"alt":10,"src":118289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[38,118291,118292],{},"在下方的网站，选择合适的版本。",[38,118294,118295,118296],{},"WSL2 专属 CUDA 指南：",[340,118297,118298],{"href":118298,"rel":118299},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23839],[38,118301,118302],{},[251,118303,118304],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[38,118306,118307],{},[1440,118308],{"alt":10,"src":118309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[38,118311,118312],{},"挨行敲一遍",[38,118314,118315],{},[1440,118316],{"alt":10,"src":118317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[38,118319,118320,118321,118324],{},"敲完后，输入",[88,118322,118323],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[38,118326,118327],{},[1440,118328],{"alt":10,"src":118329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[38,118331,118332,118333,118336],{},"（请详看下方教程的",[251,118334,118335],{},"安装CUDA的配置环境来看","如何配置环境）",[22889,118338,118340],{"id":118339},"_23323-cudnn","2.3.3.2.3 cuDNN",[38,118342,118249],{},[38,118344,118345],{},[1440,118346],{"alt":10,"src":118347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21977,118349,118351],{"id":118350},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[38,118353,118354],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[38,118356,118357],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[38,118359,118360],{},[1440,118361],{"alt":10,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[38,118364,118365],{},"连接WSL2",[38,118367,118368],{},[1440,118369],{"alt":10,"src":118370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[38,118372,118373],{},"远程开发成功。",[38,118375,118376],{},[1440,118377],{"alt":10,"src":118378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[38,118380,118381],{},[1440,118382],{"alt":10,"src":118383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[38,118385,118386],{},[1440,118387],{"alt":10,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21977,118390,118392],{"id":118391},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[38,118394,118395],{},[1440,118396],{"alt":10,"src":118397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21977,118399,118401],{"id":118400},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[83,118403,118405],{"className":117271,"code":118404,"language":117273,"meta":10,"style":10},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[88,118406,118407,118415,118423,118434,118438],{"__ignoreMap":10},[91,118408,118409,118411,118413],{"class":93,"line":94},[91,118410,24551],{"class":1941},[91,118412,117292],{"class":206},[91,118414,26217],{"class":206},[91,118416,118417,118419,118421],{"class":93,"line":11},[91,118418,24551],{"class":1941},[91,118420,117292],{"class":206},[91,118422,117308],{"class":206},[91,118424,118425,118427,118429,118431],{"class":93,"line":1157},[91,118426,24551],{"class":1941},[91,118428,117292],{"class":206},[91,118430,23808],{"class":206},[91,118432,118433],{"class":206}," mesa-utils\n",[91,118435,118436],{"class":93,"line":1172},[91,118437,2378],{"emptyLinePlaceholder":17},[91,118439,118440],{"class":93,"line":1178},[91,118441,118442],{"class":160},"#然后重启wsl2即可\n",[5105,118444,118445],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":10,"searchDepth":11,"depth":11,"links":118447},[118448,118449,118454],{"id":117725,"depth":11,"text":117726},{"id":117738,"depth":11,"text":117739,"children":118450},[118451,118452,118453],{"id":117742,"depth":1157,"text":117743},{"id":117789,"depth":1157,"text":117790},{"id":117850,"depth":1157,"text":117851},{"id":117886,"depth":11,"text":117887,"children":118455},[118456,118457,118458],{"id":117890,"depth":1157,"text":117891},{"id":117952,"depth":1157,"text":117953},{"id":118241,"depth":1157,"text":118242},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117717,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118465,"title":118466,"body":118467,"description":13,"extension":14,"meta":121403,"navigation":17,"path":121404,"seo":121405,"stem":121406,"__hash__":121407},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118468,"toc":121375},[118469,118472,118476,118482,118486,118492,118496,118684,118687,118692,118696,118700,118703,118706,118712,118717,118720,118723,118728,118761,118766,118770,118847,118850,118855,118859,118862,118901,118904,118913,118931,118936,118943,119060,119065,119068,119095,119100,119104,119113,119163,119170,119174,119177,119191,119198,119232,119237,119241,119264,119267,119272,119276,119279,119282,119285,119327,119331,119334,119337,119378,119382,119386,119389,119394,119399,119402,119425,119428,119436,119441,119444,119449,119454,119457,119462,119466,119471,119494,119499,119561,119569,119574,119579,119582,119587,119590,119595,119600,119618,119623,119629,119634,119648,119652,119655,119658,119661,119704,119707,119712,119813,119816,119821,119825,119829,119866,119870,119874,119878,119924,119928,119973,119977,119984,119992,120047,120050,120127,120130,120153,120157,120160,120165,120170,120178,120181,120186,120191,120196,120199,120204,120213,120216,120221,120224,120295,120300,120303,120308,120311,120316,120319,120324,120327,120332,120337,120340,120415,120418,120431,120436,120439,120453,120456,120485,120490,120519,120522,120527,120531,120536,120545,120548,120553,120556,120561,120564,120567,120572,120575,120580,120585,120588,120593,120596,120721,120726,120756,120759,120764,120769,120786,120789,120832,120835,120862,120867,120880,121023,121027,121032,121046,121049,121100,121103,121133,121136,121152,121157,121171,121174,121241,121246,121255,121260,121263,121275,121280,121287,121311,121314,121319,121322,121341,121346,121353,121365,121372],[29,118470,118466],{"id":118471},"_3-安装必备配置",[33,118473,118475],{"id":118474},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[83,118477,118480],{"className":118478,"code":118479,"language":5166},[5164],"  打开下方网站（注意，该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",[88,118481,118479],{"__ignoreMap":10},[63,118483,118485],{"id":118484},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[83,118487,118490],{"className":118488,"code":118489,"language":5166},[5164],"  输入以下命令\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",[88,118491,118489],{"__ignoreMap":10},[63,118493,118495],{"id":118494},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[83,118497,118501],{"className":118498,"code":118499,"language":118500,"meta":10,"style":10},"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",[88,118502,118503,118511,118522,118534,118548,118552,118562,118567,118571,118575,118580,118584,118596,118600,118605,118609,118620,118624,118640,118644,118655,118659,118664,118668,118676],{"__ignoreMap":10},[91,118504,118505,118507,118509],{"class":93,"line":94},[91,118506,24551],{"class":1941},[91,118508,117292],{"class":206},[91,118510,26217],{"class":206},[91,118512,118513,118515,118517,118519],{"class":93,"line":11},[91,118514,24551],{"class":1941},[91,118516,117292],{"class":206},[91,118518,23808],{"class":206},[91,118520,118521],{"class":206}," vim\n",[91,118523,118524,118526,118529,118531],{"class":93,"line":1157},[91,118525,24551],{"class":1941},[91,118527,118528],{"class":206}," rm",[91,118530,25300],{"class":150},[91,118532,118533],{"class":206}," \u002Fetc\u002Fapt\u002Fsources.list\n",[91,118535,118536,118538,118540,118542,118545],{"class":93,"line":1172},[91,118537,24551],{"class":1941},[91,118539,118528],{"class":206},[91,118541,25300],{"class":150},[91,118543,118544],{"class":206}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[91,118546,118547],{"class":150},"**\n",[91,118549,118550],{"class":93,"line":1178},[91,118551,2378],{"emptyLinePlaceholder":17},[91,118553,118554,118556,118559],{"class":93,"line":1192},[91,118555,24551],{"class":1941},[91,118557,118558],{"class":206}," vim",[91,118560,118561],{"class":206}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[91,118563,118564],{"class":93,"line":1198},[91,118565,118566],{"class":206},"```\n",[91,118568,118569],{"class":93,"line":1289},[91,118570,2378],{"emptyLinePlaceholder":17},[91,118572,118573],{"class":93,"line":1295},[91,118574,2378],{"emptyLinePlaceholder":17},[91,118576,118577],{"class":93,"line":1307},[91,118578,118579],{"class":1941},"选择好Ubuntu版本后，复制下方的内容。\n",[91,118581,118582],{"class":93,"line":1590},[91,118583,2378],{"emptyLinePlaceholder":17},[91,118585,118586,118588,118591,118594],{"class":93,"line":1595},[91,118587,328],{"class":97},[91,118589,118590],{"class":206},"[](",[91,118592,118593],{"class":1941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[91,118595,108],{"class":206},[91,118597,118598],{"class":93,"line":1601},[91,118599,2378],{"emptyLinePlaceholder":17},[91,118601,118602],{"class":93,"line":1606},[91,118603,118604],{"class":1941},"粘贴进去\n",[91,118606,118607],{"class":93,"line":1620},[91,118608,2378],{"emptyLinePlaceholder":17},[91,118610,118611,118613,118615,118618],{"class":93,"line":1625},[91,118612,328],{"class":97},[91,118614,118590],{"class":206},[91,118616,118617],{"class":1941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[91,118619,108],{"class":206},[91,118621,118622],{"class":93,"line":1631},[91,118623,2378],{"emptyLinePlaceholder":17},[91,118625,118626,118629,118632,118635,118637],{"class":93,"line":1652},[91,118627,118628],{"class":1941},"按一下ESC，然后英文冒号，输入",[91,118630,118631],{"class":206}," `",[91,118633,118634],{"class":1941},":wq!",[91,118636,1074],{"class":206},[91,118638,118639],{"class":1941},"然后回车\n",[91,118641,118642],{"class":93,"line":1657},[91,118643,2378],{"emptyLinePlaceholder":17},[91,118645,118646,118648,118650,118653],{"class":93,"line":1671},[91,118647,328],{"class":97},[91,118649,118590],{"class":206},[91,118651,118652],{"class":1941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[91,118654,108],{"class":206},[91,118656,118657],{"class":93,"line":1676},[91,118658,2378],{"emptyLinePlaceholder":17},[91,118660,118661],{"class":93,"line":1705},[91,118662,118663],{"class":1941},"输入以下命令\n",[91,118665,118666],{"class":93,"line":1710},[91,118667,2378],{"emptyLinePlaceholder":17},[91,118669,118670,118673],{"class":93,"line":1727},[91,118671,118672],{"class":206},"```",[91,118674,118675],{"class":1941},"Bash\n",[91,118677,118678,118680,118682],{"class":93,"line":1732},[91,118679,24551],{"class":1941},[91,118681,117292],{"class":206},[91,118683,26217],{"class":206},[38,118685,118686],{},"这里被替换成对应学校则成功",[38,118688,118689],{},[1440,118690],{"alt":10,"src":118691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[33,118693,118695],{"id":118694},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[63,118697,118699],{"id":118698},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[38,118701,118702],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[38,118704,118705],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[38,118707,118708],{},[340,118709,118710],{"href":118710,"rel":118711},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23839],[38,118713,118714],{},[1440,118715],{"alt":10,"src":118716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[38,118718,118719],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[38,118721,118722],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[38,118724,118725],{},[1440,118726],{"alt":10,"src":118727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[83,118729,118731],{"className":117271,"code":118730,"language":117273,"meta":10,"style":10},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[88,118732,118733,118738,118745,118750],{"__ignoreMap":10},[91,118734,118735],{"class":93,"line":94},[91,118736,118737],{"class":160},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[91,118739,118740,118742],{"class":93,"line":11},[91,118741,101251],{"class":150},[91,118743,118744],{"class":206}," ~\u002FDownloads\n",[91,118746,118747],{"class":93,"line":1157},[91,118748,118749],{"class":160},"#下方chrome安装包名不一定是这个，根据名字来看\n",[91,118751,118752,118754,118756,118758],{"class":93,"line":1172},[91,118753,24551],{"class":1941},[91,118755,117292],{"class":206},[91,118757,23808],{"class":206},[91,118759,118760],{"class":206}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[38,118762,118763],{},[1440,118764],{"alt":10,"src":118765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[63,118767,118769],{"id":118768},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[83,118771,118773],{"className":117271,"code":118772,"language":117273,"meta":10,"style":10},"# 老版\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",[88,118774,118775,118780,118788,118799,118804,118808,118813,118823,118831,118842],{"__ignoreMap":10},[91,118776,118777],{"class":93,"line":94},[91,118778,118779],{"class":160},"# 老版\n",[91,118781,118782,118784,118786],{"class":93,"line":11},[91,118783,24551],{"class":1941},[91,118785,117292],{"class":206},[91,118787,26217],{"class":206},[91,118789,118790,118792,118794,118796],{"class":93,"line":1157},[91,118791,24551],{"class":1941},[91,118793,117292],{"class":206},[91,118795,23808],{"class":206},[91,118797,118798],{"class":206}," neofetch\n",[91,118800,118801],{"class":93,"line":1172},[91,118802,118803],{"class":1941},"neofetch\n",[91,118805,118806],{"class":93,"line":1178},[91,118807,2378],{"emptyLinePlaceholder":17},[91,118809,118810],{"class":93,"line":1192},[91,118811,118812],{"class":160},"# 新版\n",[91,118814,118815,118817,118820],{"class":93,"line":1198},[91,118816,24551],{"class":1941},[91,118818,118819],{"class":206}," add-apt-repository",[91,118821,118822],{"class":206}," ppa:zhangsongcui3371\u002Ffastfetch\n",[91,118824,118825,118827,118829],{"class":93,"line":1289},[91,118826,24551],{"class":1941},[91,118828,117292],{"class":206},[91,118830,26217],{"class":206},[91,118832,118833,118835,118837,118839],{"class":93,"line":1295},[91,118834,24551],{"class":1941},[91,118836,117292],{"class":206},[91,118838,23808],{"class":206},[91,118840,118841],{"class":206}," fastfetch\n",[91,118843,118844],{"class":93,"line":1307},[91,118845,118846],{"class":1941},"fastfetch\n",[38,118848,118849],{},"这里显示，一共有3162个debian的程序，7个snap程序",[38,118851,118852],{},[1440,118853],{"alt":10,"src":118854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[63,118856,118858],{"id":118857},"_323-移除snap应用","3.2.3 移除snap应用",[38,118860,118861],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[83,118863,118865],{"className":117271,"code":118864,"language":117273,"meta":10,"style":10},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[88,118866,118867,118879,118890],{"__ignoreMap":10},[91,118868,118869,118871,118873,118876],{"class":93,"line":94},[91,118870,24551],{"class":1941},[91,118872,26488],{"class":206},[91,118874,118875],{"class":206}," disable",[91,118877,118878],{"class":206}," snapd.service\n",[91,118880,118881,118883,118885,118887],{"class":93,"line":11},[91,118882,24551],{"class":1941},[91,118884,26488],{"class":206},[91,118886,118875],{"class":206},[91,118888,118889],{"class":206}," snapd.socket\n",[91,118891,118892,118894,118896,118898],{"class":93,"line":1157},[91,118893,24551],{"class":1941},[91,118895,26488],{"class":206},[91,118897,118875],{"class":206},[91,118899,118900],{"class":206}," snapd.seeded.service\n",[38,118902,118903],{},"然后查看snap应用列表",[38,118905,118906,118907,118912],{},"根据你安装的选择不同（最小安装或普通安装），有",[340,118908,118911],{"href":118909,"rel":118910},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23839],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[83,118914,118916],{"className":117271,"code":118915,"language":117273,"meta":10,"style":10},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[88,118917,118918,118923],{"__ignoreMap":10},[91,118919,118920],{"class":93,"line":94},[91,118921,118922],{"class":160},"# 查询当前系统上snap安装了哪些app\n",[91,118924,118925,118928],{"class":93,"line":11},[91,118926,118927],{"class":1941},"snap",[91,118929,118930],{"class":206}," list\n",[38,118932,118933],{},[1440,118934],{"alt":10,"src":118935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[38,118937,118938,118939,118942],{},"卸载掉图中所有应用，按照 ",[251,118940,118941],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[83,118944,118946],{"className":117271,"code":118945,"language":117273,"meta":10,"style":10},"#移除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",[88,118947,118948,118953,118965,118970,118981,118986,118997,119002,119013,119018,119022,119027,119038,119049],{"__ignoreMap":10},[91,118949,118950],{"class":93,"line":94},[91,118951,118952],{"class":160},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[91,118954,118955,118957,118960,118962],{"class":93,"line":11},[91,118956,24551],{"class":1941},[91,118958,118959],{"class":206}," snap",[91,118961,26054],{"class":206},[91,118963,118964],{"class":206}," snap-store\n",[91,118966,118967],{"class":93,"line":1157},[91,118968,118969],{"class":160},"#移除firefox浏览器\n",[91,118971,118972,118974,118976,118978],{"class":93,"line":1172},[91,118973,24551],{"class":1941},[91,118975,118959],{"class":206},[91,118977,26054],{"class":206},[91,118979,118980],{"class":206}," firefox\n",[91,118982,118983],{"class":93,"line":1178},[91,118984,118985],{"class":160},"#移除gnome-42-2204\n",[91,118987,118988,118990,118992,118994],{"class":93,"line":1192},[91,118989,24551],{"class":1941},[91,118991,118959],{"class":206},[91,118993,26054],{"class":206},[91,118995,118996],{"class":206}," gnome-42-2204\n",[91,118998,118999],{"class":93,"line":1198},[91,119000,119001],{"class":160},"#移除gtk-common-themes\n",[91,119003,119004,119006,119008,119010],{"class":93,"line":1289},[91,119005,24551],{"class":1941},[91,119007,118959],{"class":206},[91,119009,26054],{"class":206},[91,119011,119012],{"class":206}," gtk-common-themes\n",[91,119014,119015],{"class":93,"line":1295},[91,119016,119017],{"class":160},"#移除其它...\n",[91,119019,119020],{"class":93,"line":1307},[91,119021,2652],{"class":101},[91,119023,119024],{"class":93,"line":1590},[91,119025,119026],{"class":160},"#移除core22,bare以及snapd\n",[91,119028,119029,119031,119033,119035],{"class":93,"line":1595},[91,119030,24551],{"class":1941},[91,119032,118959],{"class":206},[91,119034,26054],{"class":206},[91,119036,119037],{"class":206}," core22\n",[91,119039,119040,119042,119044,119046],{"class":93,"line":1601},[91,119041,24551],{"class":1941},[91,119043,118959],{"class":206},[91,119045,26054],{"class":206},[91,119047,119048],{"class":206}," bare\n",[91,119050,119051,119053,119055,119057],{"class":93,"line":1606},[91,119052,24551],{"class":1941},[91,119054,118959],{"class":206},[91,119056,26054],{"class":206},[91,119058,119059],{"class":206}," snapd\n",[38,119061,119062],{},[1440,119063],{"alt":10,"src":119064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[38,119066,119067],{},"输入以下命令查看是否还有snap包",[83,119069,119071],{"className":117271,"code":119070,"language":117273,"meta":10,"style":10},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[88,119072,119073,119079,119083,119087,119091],{"__ignoreMap":10},[91,119074,119075,119077],{"class":93,"line":94},[91,119076,118927],{"class":1941},[91,119078,118930],{"class":206},[91,119080,119081],{"class":93,"line":11},[91,119082,118779],{"class":160},[91,119084,119085],{"class":93,"line":1157},[91,119086,118803],{"class":1941},[91,119088,119089],{"class":93,"line":1172},[91,119090,118812],{"class":160},[91,119092,119093],{"class":93,"line":1178},[91,119094,118846],{"class":1941},[38,119096,119097],{},[1440,119098],{"alt":10,"src":119099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[63,119101,119103],{"id":119102},"_324-移除snap","3.2.4 移除snap",[38,119105,119106,119107,119112],{},"在删除掉",[340,119108,119111],{"href":119109,"rel":119110},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23839],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[83,119114,119116],{"className":117271,"code":119115,"language":117273,"meta":10,"style":10}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[88,119117,119118,119123,119136,119141,119152],{"__ignoreMap":10},[91,119119,119120],{"class":93,"line":94},[91,119121,119122],{"class":160}," #使用apt移除掉snap\n",[91,119124,119125,119127,119129,119131,119134],{"class":93,"line":11},[91,119126,24551],{"class":1941},[91,119128,117292],{"class":206},[91,119130,117600],{"class":206},[91,119132,119133],{"class":150}," --purge",[91,119135,119059],{"class":206},[91,119137,119138],{"class":93,"line":1157},[91,119139,119140],{"class":160},"#移除snapd的一些目录\n",[91,119142,119143,119145,119147,119149],{"class":93,"line":1172},[91,119144,24551],{"class":1941},[91,119146,118528],{"class":206},[91,119148,25300],{"class":150},[91,119150,119151],{"class":206}," \u002Fvar\u002Fcache\u002Fsnapd\n",[91,119153,119154,119156,119158,119160],{"class":93,"line":1178},[91,119155,24551],{"class":1941},[91,119157,118528],{"class":206},[91,119159,25300],{"class":150},[91,119161,119162],{"class":206}," ~\u002Fsnap\n",[38,119164,119165,119166,119169],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[88,119167,119168],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[63,119171,119173],{"id":119172},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[38,119175,119176],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[83,119178,119180],{"className":117271,"code":119179,"language":117273,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[88,119181,119182],{"__ignoreMap":10},[91,119183,119184,119186,119188],{"class":93,"line":94},[91,119185,24551],{"class":1941},[91,119187,118558],{"class":206},[91,119189,119190],{"class":206}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[38,119192,119193,119194,119197],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[88,119195,119196],{},":wq"," 回车",[83,119199,119201],{"className":117271,"code":119200,"language":117273,"meta":10,"style":10},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[88,119202,119203,119210,119224],{"__ignoreMap":10},[91,119204,119205,119208],{"class":93,"line":94},[91,119206,119207],{"class":1941},"Package:",[91,119209,119059],{"class":206},[91,119211,119212,119215,119218,119221],{"class":93,"line":11},[91,119213,119214],{"class":1941},"Pin:",[91,119216,119217],{"class":206}," release",[91,119219,119220],{"class":206}," a=",[91,119222,119223],{"class":150},"*\n",[91,119225,119226,119229],{"class":93,"line":1157},[91,119227,119228],{"class":1941},"Pin-Priority:",[91,119230,119231],{"class":150}," -10\n",[38,119233,119234],{},[1440,119235],{"alt":10,"src":119236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[63,119238,119240],{"id":119239},"_326-测试是否成功","3.2.6 测试是否成功",[83,119242,119244],{"className":117271,"code":119243,"language":117273,"meta":10,"style":10},"sudo apt update\nsudo apt install firefox\n",[88,119245,119246,119254],{"__ignoreMap":10},[91,119247,119248,119250,119252],{"class":93,"line":94},[91,119249,24551],{"class":1941},[91,119251,117292],{"class":206},[91,119253,26217],{"class":206},[91,119255,119256,119258,119260,119262],{"class":93,"line":11},[91,119257,24551],{"class":1941},[91,119259,117292],{"class":206},[91,119261,23808],{"class":206},[91,119263,118980],{"class":206},[38,119265,119266],{},"这里提示snapd无法被安装，就证明成功了",[38,119268,119269],{},[1440,119270],{"alt":10,"src":119271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[63,119273,119275],{"id":119274},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[38,119277,119278],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[38,119280,119281],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[38,119283,119284],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[83,119286,119288],{"className":117271,"code":119287,"language":117273,"meta":10,"style":10},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[88,119289,119290,119295,119304,119309,119317],{"__ignoreMap":10},[91,119291,119292],{"class":93,"line":94},[91,119293,119294],{"class":160},"# 添加Mozilla提供的源\n",[91,119296,119297,119299,119301],{"class":93,"line":11},[91,119298,24551],{"class":1941},[91,119300,118819],{"class":206},[91,119302,119303],{"class":206}," ppa:mozillateam\u002Fppa\n",[91,119305,119306],{"class":93,"line":1157},[91,119307,119308],{"class":160},"# 安装Firefox\n",[91,119310,119311,119313,119315],{"class":93,"line":1172},[91,119312,24551],{"class":1941},[91,119314,117292],{"class":206},[91,119316,26217],{"class":206},[91,119318,119319,119321,119323,119325],{"class":93,"line":1178},[91,119320,24551],{"class":1941},[91,119322,117292],{"class":206},[91,119324,23808],{"class":206},[91,119326,118980],{"class":206},[63,119328,119330],{"id":119329},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[38,119332,119333],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[38,119335,119336],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[83,119338,119340],{"className":117271,"code":119339,"language":117273,"meta":10,"style":10},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[88,119341,119342,119347,119357,119365,119369],{"__ignoreMap":10},[91,119343,119344],{"class":93,"line":94},[91,119345,119346],{"class":160},"#删掉禁止安装snap的配置文件\n",[91,119348,119349,119351,119353,119355],{"class":93,"line":11},[91,119350,24551],{"class":1941},[91,119352,118528],{"class":206},[91,119354,25300],{"class":150},[91,119356,119190],{"class":206},[91,119358,119359,119361,119363],{"class":93,"line":1157},[91,119360,24551],{"class":1941},[91,119362,117292],{"class":206},[91,119364,26217],{"class":206},[91,119366,119367],{"class":93,"line":1172},[91,119368,2378],{"emptyLinePlaceholder":17},[91,119370,119371,119373,119375],{"class":93,"line":1178},[91,119372,24551],{"class":1941},[91,119374,117292],{"class":206},[91,119376,119377],{"class":206}," dist-update\n",[33,119379,119381],{"id":119380},"_33-中文输入法","3.3 中文输入法",[63,119383,119385],{"id":119384},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[38,119387,119388],{},"官网下载搜狗输入法",[38,119390,119391],{},[1440,119392],{"alt":10,"src":119393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[38,119395,119396],{},[1440,119397],{"alt":10,"src":119398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[38,119400,119401],{},"打开终端输入如下",[83,119403,119405],{"className":117271,"code":119404,"language":117273,"meta":10,"style":10},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[88,119406,119407,119414],{"__ignoreMap":10},[91,119408,119409,119411],{"class":93,"line":94},[91,119410,101251],{"class":150},[91,119412,119413],{"class":206}," ~\u002FDownloads\u002F\n",[91,119415,119416,119418,119420,119422],{"class":93,"line":11},[91,119417,24551],{"class":1941},[91,119419,117292],{"class":206},[91,119421,23808],{"class":206},[91,119423,119424],{"class":206}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[38,119426,119427],{},"打开Fcitx",[38,119429,119430,119433],{},[1440,119431],{"alt":10,"src":119432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1440,119434],{"alt":10,"src":119435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[38,119437,119438],{},[1440,119439],{"alt":10,"src":119440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[38,119442,119443],{},"添加搜狗输入法",[38,119445,119446],{},[1440,119447],{"alt":10,"src":119448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[38,119450,119451],{},[1440,119452],{"alt":10,"src":119453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[38,119455,119456],{},"将搜狗输入法设置为唯一输入法",[38,119458,119459],{},[1440,119460],{"alt":10,"src":119461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[63,119463,119465],{"id":119464},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[46,119467,119468],{},[49,119469,119470],{},"卸载旧输入法",[83,119472,119474],{"className":118498,"code":119473,"language":118500,"meta":10,"style":10},"sudo apt purge fcitx* ibus*\n",[88,119475,119476],{"__ignoreMap":10},[91,119477,119478,119480,119482,119484,119487,119489,119492],{"class":93,"line":94},[91,119479,24551],{"class":1941},[91,119481,117292],{"class":206},[91,119483,117633],{"class":206},[91,119485,119486],{"class":206}," fcitx",[91,119488,557],{"class":150},[91,119490,119491],{"class":206}," ibus",[91,119493,119223],{"class":150},[46,119495,119496],{"start":11},[49,119497,119498],{},"安装Fcitx5",[83,119500,119502],{"className":117271,"code":119501,"language":117273,"meta":10,"style":10},"# 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",[88,119503,119504,119509,119523,119527,119532,119541,119549],{"__ignoreMap":10},[91,119505,119506],{"class":93,"line":94},[91,119507,119508],{"class":160},"# Ubuntu22.04及以上、Debian12及以上\n",[91,119510,119511,119513,119515,119517,119520],{"class":93,"line":11},[91,119512,24551],{"class":1941},[91,119514,117292],{"class":206},[91,119516,23808],{"class":206},[91,119518,119519],{"class":206}," fcitx5",[91,119521,119522],{"class":206}," fcitx5-chinese-addons\n",[91,119524,119525],{"class":93,"line":1157},[91,119526,2378],{"emptyLinePlaceholder":17},[91,119528,119529],{"class":93,"line":1172},[91,119530,119531],{"class":160},"# Ubuntu20.04\n",[91,119533,119534,119536,119538],{"class":93,"line":1178},[91,119535,24551],{"class":1941},[91,119537,118819],{"class":206},[91,119539,119540],{"class":206}," ppa:zhsj\u002Ffcitx5\n",[91,119542,119543,119545,119547],{"class":93,"line":1192},[91,119544,24551],{"class":1941},[91,119546,117292],{"class":206},[91,119548,26217],{"class":206},[91,119550,119551,119553,119555,119557,119559],{"class":93,"line":1198},[91,119552,24551],{"class":1941},[91,119554,117292],{"class":206},[91,119556,23808],{"class":206},[91,119558,119519],{"class":206},[91,119560,119522],{"class":206},[46,119562,119563,119566],{"start":1157},[49,119564,119565],{},"Reboot System",[49,119567,119568],{},"启动Fcitx5",[38,119570,119571],{},[1440,119572],{"alt":10,"src":119573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[46,119575,119576],{"start":1178},[49,119577,119578],{},"修改一些设置",[38,119580,119581],{},"将Pinyin和Keyboard - English US加入到左边。",[38,119583,119584],{},[1440,119585],{"alt":10,"src":119586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[38,119588,119589],{},"添加快捷键以便于更好切换中英文",[38,119591,119592],{},[1440,119593],{"alt":10,"src":119594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[46,119596,119597],{"start":1192},[49,119598,119599],{},"重启",[83,119601,119603],{"className":118498,"code":119602,"language":118500,"meta":10,"style":10},"sudo shutdown -r now\n",[88,119604,119605],{"__ignoreMap":10},[91,119606,119607,119609,119612,119615],{"class":93,"line":94},[91,119608,24551],{"class":1941},[91,119610,119611],{"class":206}," shutdown",[91,119613,119614],{"class":150}," -r",[91,119616,119617],{"class":206}," now\n",[46,119619,119620],{"start":1198},[49,119621,119622],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[38,119624,119625],{},[340,119626,119627],{"href":119627,"rel":119628},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23839],[46,119630,119631],{"start":1289},[49,119632,119633],{},"再重启",[83,119635,119636],{"className":118498,"code":119602,"language":118500,"meta":10,"style":10},[88,119637,119638],{"__ignoreMap":10},[91,119639,119640,119642,119644,119646],{"class":93,"line":94},[91,119641,24551],{"class":1941},[91,119643,119611],{"class":206},[91,119645,119614],{"class":150},[91,119647,119617],{"class":206},[33,119649,119651],{"id":119650},"_34-pip3源替换","3.4 pip3源替换",[38,119653,119654],{},"非Debian系发行版需要做。",[38,119656,119657],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[38,119659,119660],{},"使用dnf的系统也可能不用做。",[83,119662,119664],{"className":117271,"code":119663,"language":117273,"meta":10,"style":10},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[88,119665,119666,119671,119678,119683,119688],{"__ignoreMap":10},[91,119667,119668],{"class":93,"line":94},[91,119669,119670],{"class":160},"# 检查是否已安装 pip\n",[91,119672,119673,119676],{"class":93,"line":11},[91,119674,119675],{"class":1941},"pip3",[91,119677,26268],{"class":150},[91,119679,119680],{"class":93,"line":1157},[91,119681,119682],{"class":160},"# 如果未安装，先安装 pip3（见下方）\n",[91,119684,119685],{"class":93,"line":1172},[91,119686,119687],{"class":160},"# 配置 pip 使用清华源\n",[91,119689,119690,119692,119695,119698,119701],{"class":93,"line":1178},[91,119691,119675],{"class":1941},[91,119693,119694],{"class":206}," config",[91,119696,119697],{"class":206}," set",[91,119699,119700],{"class":206}," global.index-url",[91,119702,119703],{"class":206}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[38,119705,119706],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[38,119708,119709],{},[1440,119710],{"alt":10,"src":119711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[83,119713,119715],{"className":117271,"code":119714,"language":117273,"meta":10,"style":10},"#安装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",[88,119716,119717,119722,119730,119741,119745,119750,119769,119773,119778,119790,119794,119799],{"__ignoreMap":10},[91,119718,119719],{"class":93,"line":94},[91,119720,119721],{"class":160},"#安装pip3\n",[91,119723,119724,119726,119728],{"class":93,"line":11},[91,119725,24551],{"class":1941},[91,119727,117292],{"class":206},[91,119729,26217],{"class":206},[91,119731,119732,119734,119736,119738],{"class":93,"line":1157},[91,119733,24551],{"class":1941},[91,119735,26051],{"class":206},[91,119737,23808],{"class":206},[91,119739,119740],{"class":206}," python3-pip\n",[91,119742,119743],{"class":93,"line":1172},[91,119744,2378],{"emptyLinePlaceholder":17},[91,119746,119747],{"class":93,"line":1178},[91,119748,119749],{"class":160},"#更新pip3\n",[91,119751,119752,119754,119756,119758,119760,119762,119765,119767],{"class":93,"line":1192},[91,119753,100854],{"class":1941},[91,119755,100857],{"class":150},[91,119757,100880],{"class":206},[91,119759,23808],{"class":206},[91,119761,26405],{"class":150},[91,119763,119764],{"class":206}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[91,119766,100885],{"class":150},[91,119768,100888],{"class":206},[91,119770,119771],{"class":93,"line":1198},[91,119772,2378],{"emptyLinePlaceholder":17},[91,119774,119775],{"class":93,"line":1289},[91,119776,119777],{"class":160},"#设置pip源为清华源\n",[91,119779,119780,119782,119784,119786,119788],{"class":93,"line":1295},[91,119781,119675],{"class":1941},[91,119783,119694],{"class":206},[91,119785,119697],{"class":206},[91,119787,119700],{"class":206},[91,119789,119703],{"class":206},[91,119791,119792],{"class":93,"line":1307},[91,119793,2378],{"emptyLinePlaceholder":17},[91,119795,119796],{"class":93,"line":1590},[91,119797,119798],{"class":160},"#测试\n",[91,119800,119801,119803,119805,119807,119809,119811],{"class":93,"line":1595},[91,119802,100854],{"class":1941},[91,119804,100857],{"class":150},[91,119806,100880],{"class":206},[91,119808,23808],{"class":206},[91,119810,100885],{"class":150},[91,119812,100888],{"class":206},[38,119814,119815],{},"成功的话，会看到Looking后面是tsinghua字样。",[38,119817,119818],{},[1440,119819],{"alt":10,"src":119820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[33,119822,119824],{"id":119823},"_35-显卡驱动安装","3.5 显卡驱动安装",[63,119826,119828],{"id":119827},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[83,119830,119832],{"className":118498,"code":119831,"language":118500,"meta":10,"style":10},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[88,119833,119834,119839,119854,119859],{"__ignoreMap":10},[91,119835,119836],{"class":93,"line":94},[91,119837,119838],{"class":160},"# 如果是使用apt安装的驱动\n",[91,119840,119841,119843,119845,119847,119849,119852],{"class":93,"line":11},[91,119842,24551],{"class":1941},[91,119844,26051],{"class":206},[91,119846,26054],{"class":206},[91,119848,119133],{"class":150},[91,119850,119851],{"class":206}," nvidia",[91,119853,119223],{"class":150},[91,119855,119856],{"class":93,"line":1157},[91,119857,119858],{"class":160},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[91,119860,119861,119863],{"class":93,"line":1172},[91,119862,24551],{"class":1941},[91,119864,119865],{"class":206}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[63,119867,119869],{"id":119868},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21977,119871,119873],{"id":119872},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22889,119875,119877],{"id":119876},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[83,119879,119881],{"className":118498,"code":119880,"language":118500,"meta":10,"style":10},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[88,119882,119883,119888,119899,119904,119914,119919],{"__ignoreMap":10},[91,119884,119885],{"class":93,"line":94},[91,119886,119887],{"class":160},"# 安装英伟达驱动\n",[91,119889,119890,119892,119894,119896],{"class":93,"line":11},[91,119891,24551],{"class":1941},[91,119893,117292],{"class":206},[91,119895,23808],{"class":206},[91,119897,119898],{"class":206}," nvidia-driver-版本号\n",[91,119900,119901],{"class":93,"line":1157},[91,119902,119903],{"class":160},"# 重启 \n",[91,119905,119906,119908,119910,119912],{"class":93,"line":1172},[91,119907,24551],{"class":1941},[91,119909,119611],{"class":206},[91,119911,119614],{"class":150},[91,119913,119617],{"class":206},[91,119915,119916],{"class":93,"line":1178},[91,119917,119918],{"class":160},"# 检查驱动是否安装成功\n",[91,119920,119921],{"class":93,"line":1192},[91,119922,119923],{"class":1941},"nvidia-smi\n",[22889,119925,119927],{"id":119926},"_35212-debian","3.5.2.1.2 Debian",[83,119929,119931],{"className":118498,"code":119930,"language":118500,"meta":10,"style":10},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[88,119932,119933,119937,119951,119955,119965,119969],{"__ignoreMap":10},[91,119934,119935],{"class":93,"line":94},[91,119936,119887],{"class":160},[91,119938,119939,119941,119943,119945,119948],{"class":93,"line":11},[91,119940,24551],{"class":1941},[91,119942,117292],{"class":206},[91,119944,23808],{"class":206},[91,119946,119947],{"class":206}," nvidia-driver",[91,119949,119950],{"class":206}," nvidia-settings\n",[91,119952,119953],{"class":93,"line":1157},[91,119954,119903],{"class":160},[91,119956,119957,119959,119961,119963],{"class":93,"line":1172},[91,119958,24551],{"class":1941},[91,119960,119611],{"class":206},[91,119962,119614],{"class":150},[91,119964,119617],{"class":206},[91,119966,119967],{"class":93,"line":1178},[91,119968,119918],{"class":160},[91,119970,119971],{"class":93,"line":1192},[91,119972,119923],{"class":1941},[21977,119974,119976],{"id":119975},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[38,119978,119979,119980,119983],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[251,119981,119982],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[38,119985,119986,119987],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23527,119988,119989],{},[251,119990,119991],{},"（也可以不禁用桌面环境，直接进行下一步。）",[83,119993,119995],{"className":118498,"code":119994,"language":118500,"meta":10,"style":10},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[88,119996,119997,120002,120012,120017,120030,120035],{"__ignoreMap":10},[91,119998,119999],{"class":93,"line":94},[91,120000,120001],{"class":160},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[91,120003,120004,120006,120009],{"class":93,"line":11},[91,120005,24551],{"class":1941},[91,120007,120008],{"class":206}," telinit",[91,120010,120011],{"class":150}," 3\n",[91,120013,120014],{"class":93,"line":1157},[91,120015,120016],{"class":160},"# ubuntu 使用下方命令\n",[91,120018,120019,120021,120024,120027],{"class":93,"line":1172},[91,120020,24551],{"class":1941},[91,120022,120023],{"class":206}," service",[91,120025,120026],{"class":206}," lightdm",[91,120028,120029],{"class":206}," stop\n",[91,120031,120032],{"class":93,"line":1178},[91,120033,120034],{"class":160},"# Fedora 使用下方命令\n",[91,120036,120037,120039,120041,120044],{"class":93,"line":1192},[91,120038,24551],{"class":1941},[91,120040,26488],{"class":206},[91,120042,120043],{"class":206}," isolate",[91,120045,120046],{"class":206}," multi-user.target\n",[38,120048,120049],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[83,120051,120053],{"className":118498,"code":120052,"language":118500,"meta":10,"style":10},"# 编译环境+准备工作\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",[88,120054,120055,120060,120071,120076,120083,120088,120100,120105,120112,120117],{"__ignoreMap":10},[91,120056,120057],{"class":93,"line":94},[91,120058,120059],{"class":160},"# 编译环境+准备工作\n",[91,120061,120062,120064,120066,120068],{"class":93,"line":11},[91,120063,24551],{"class":1941},[91,120065,117292],{"class":206},[91,120067,23808],{"class":206},[91,120069,120070],{"class":206}," build-essential\n",[91,120072,120073],{"class":93,"line":1157},[91,120074,120075],{"class":160},"# 进入到.run目录中\n",[91,120077,120078,120080],{"class":93,"line":1172},[91,120079,101251],{"class":150},[91,120081,120082],{"class":206}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[91,120084,120085],{"class":93,"line":1178},[91,120086,120087],{"class":160},"# 给驱动文件增加可执行权限：\n",[91,120089,120090,120092,120094,120097],{"class":93,"line":1192},[91,120091,24551],{"class":1941},[91,120093,24554],{"class":206},[91,120095,120096],{"class":206}," a+x",[91,120098,120099],{"class":206}," NVIDIA-Linux-x86_64-550.107.02.run\n",[91,120101,120102],{"class":93,"line":1198},[91,120103,120104],{"class":160},"# 然后执行安装：\n",[91,120106,120107,120109],{"class":93,"line":1289},[91,120108,24551],{"class":1941},[91,120110,120111],{"class":206}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[91,120113,120114],{"class":93,"line":1295},[91,120115,120116],{"class":160},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[91,120118,120119,120121,120124],{"class":93,"line":1307},[91,120120,24551],{"class":1941},[91,120122,120123],{"class":206}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[91,120125,120126],{"class":150},"  --no-opengl-files\n",[38,120128,120129],{},"安装完毕重启即可",[83,120131,120133],{"className":118498,"code":120132,"language":118500,"meta":10,"style":10},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[88,120134,120135,120139,120145,120149],{"__ignoreMap":10},[91,120136,120137],{"class":93,"line":94},[91,120138,119903],{"class":160},[91,120140,120141,120143],{"class":93,"line":11},[91,120142,24551],{"class":1941},[91,120144,26622],{"class":206},[91,120146,120147],{"class":93,"line":1157},[91,120148,119918],{"class":160},[91,120150,120151],{"class":93,"line":1172},[91,120152,119923],{"class":1941},[63,120154,120156],{"id":120155},"_353-安装cuda","3.5.3 安装CUDA",[38,120158,120159],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[38,120161,120162],{},[1440,120163],{"alt":10,"src":120164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[46,120166,120167],{},[49,120168,120169],{},"先查看显卡驱动所支持的最高CUDA版本",[83,120171,120172],{"className":118498,"code":119923,"language":118500,"meta":10,"style":10},[88,120173,120174],{"__ignoreMap":10},[91,120175,120176],{"class":93,"line":94},[91,120177,119923],{"class":1941},[38,120179,120180],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[38,120182,120183],{},[1440,120184],{"alt":10,"src":120185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[46,120187,120188],{"start":11},[49,120189,120190],{},"下载CUDA并安装CUDA",[38,120192,118277,120193],{},[340,120194,118280],{"href":118280,"rel":120195},[23839],[38,120197,120198],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[38,120200,120201],{},[1440,120202],{"alt":10,"src":120203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[38,120205,120206,120207,120212],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[340,120208,120211],{"href":120209,"rel":120210},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23839],"Vinci机器人队单片机教程","）",[38,120214,120215],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[38,120217,120218],{},[1440,120219],{"alt":10,"src":120220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[38,120222,120223],{},"将最下方框框里的命令敲入终端",[83,120225,120227],{"className":118498,"code":120226,"language":118500,"meta":10,"style":10},"# 在当前文件夹下创建一个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",[88,120228,120229,120234,120243,120248,120255,120260,120268,120273,120284,120289],{"__ignoreMap":10},[91,120230,120231],{"class":93,"line":94},[91,120232,120233],{"class":160},"# 在当前文件夹下创建一个ttt的子文件夹\n",[91,120235,120236,120238,120240],{"class":93,"line":11},[91,120237,101241],{"class":1941},[91,120239,29191],{"class":150},[91,120241,120242],{"class":206}," .\u002Fttt\n",[91,120244,120245],{"class":93,"line":1157},[91,120246,120247],{"class":160},"# 进入ttt文件夹\n",[91,120249,120250,120252],{"class":93,"line":1172},[91,120251,101251],{"class":150},[91,120253,120254],{"class":206}," ttt\n",[91,120256,120257],{"class":93,"line":1178},[91,120258,120259],{"class":160},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[91,120261,120262,120265],{"class":93,"line":1192},[91,120263,120264],{"class":1941},"wget",[91,120266,120267],{"class":206}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[91,120269,120270],{"class":93,"line":1198},[91,120271,120272],{"class":160},"# 给予权限\n",[91,120274,120275,120277,120279,120281],{"class":93,"line":1289},[91,120276,24551],{"class":1941},[91,120278,24554],{"class":206},[91,120280,120096],{"class":206},[91,120282,120283],{"class":206}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[91,120285,120286],{"class":93,"line":1295},[91,120287,120288],{"class":160},"# 运行脚本\n",[91,120290,120291,120293],{"class":93,"line":1307},[91,120292,24551],{"class":1941},[91,120294,120283],{"class":206},[38,120296,120297],{},[1440,120298],{"alt":10,"src":120299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[38,120301,120302],{},"正在安装中：",[38,120304,120305],{},[1440,120306],{"alt":10,"src":120307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[38,120309,120310],{},"输入accept接受即可",[38,120312,120313],{},[1440,120314],{"alt":10,"src":120315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[38,120317,120318],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[38,120320,120321],{},[1440,120322],{"alt":10,"src":120323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[38,120325,120326],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[38,120328,120329],{},[1440,120330],{"alt":10,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[46,120333,120334],{"start":1157},[49,120335,120336],{},"配置环境",[38,120338,120339],{},"根据上方确认一下路径，比如我上面红色框起来的为",[83,120341,120343],{"className":118498,"code":120342,"language":118500,"meta":10,"style":10},"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",[88,120344,120345,120361,120376],{"__ignoreMap":10},[91,120346,120347,120350,120353,120356,120359],{"class":93,"line":94},[91,120348,120349],{"class":1941},"Please",[91,120351,120352],{"class":206}," make",[91,120354,120355],{"class":206}," sure",[91,120357,120358],{"class":206}," that",[91,120360,2652],{"class":101},[91,120362,120363,120365,120368,120371,120374],{"class":93,"line":11},[91,120364,52246],{"class":1941},[91,120366,120367],{"class":206},"   PATH",[91,120369,120370],{"class":206}," includes",[91,120372,120373],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[91,120375,2652],{"class":101},[91,120377,120378,120380,120383,120385,120388,120391,120393,120396,120399,120402,120405,120407,120410,120412],{"class":93,"line":1157},[91,120379,52246],{"class":1941},[91,120381,120382],{"class":206},"   LD_LIBRARY_PATH",[91,120384,120370],{"class":206},[91,120386,120387],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[91,120389,120390],{"class":206}," or,",[91,120392,5188],{"class":206},[91,120394,120395],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[91,120397,120398],{"class":206}," to",[91,120400,120401],{"class":206}," \u002Fetc\u002Fld.so.conf",[91,120403,120404],{"class":206}," and",[91,120406,27205],{"class":206},[91,120408,120409],{"class":206}," ldconfig",[91,120411,64579],{"class":206},[91,120413,120414],{"class":206}," root\n",[38,120416,120417],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[83,120419,120421],{"className":118498,"code":120420,"language":118500,"meta":10,"style":10},"which nvcc\n",[88,120422,120423],{"__ignoreMap":10},[91,120424,120425,120428],{"class":93,"line":94},[91,120426,120427],{"class":150},"which",[91,120429,120430],{"class":206}," nvcc\n",[38,120432,120433],{},[1440,120434],{"alt":10,"src":120435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[38,120437,120438],{},"所以我进行以下操作：",[83,120440,120442],{"className":118498,"code":120441,"language":118500,"meta":10,"style":10},"sudo vim ~\u002F.bashrc\n",[88,120443,120444],{"__ignoreMap":10},[91,120445,120446,120448,120450],{"class":93,"line":94},[91,120447,24551],{"class":1941},[91,120449,118558],{"class":206},[91,120451,120452],{"class":206}," ~\u002F.bashrc\n",[38,120454,120455],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[83,120457,120459],{"className":118498,"code":120458,"language":118500,"meta":10,"style":10},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[88,120460,120461,120473],{"__ignoreMap":10},[91,120462,120463,120465,120468,120470],{"class":93,"line":94},[91,120464,25017],{"class":97},[91,120466,120467],{"class":101}," PATH",[91,120469,147],{"class":97},[91,120471,120472],{"class":101},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[91,120474,120475,120477,120480,120482],{"class":93,"line":11},[91,120476,25017],{"class":97},[91,120478,120479],{"class":101}," LD_LIBRARY_PATH",[91,120481,147],{"class":97},[91,120483,120484],{"class":101},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[38,120486,120487],{},[1440,120488],{"alt":10,"src":120489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[83,120491,120493],{"className":118498,"code":120492,"language":118500,"meta":10,"style":10},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[88,120494,120495,120500,120506,120511],{"__ignoreMap":10},[91,120496,120497],{"class":93,"line":94},[91,120498,120499],{"class":160},"# 刷新当前终端的环境变量\n",[91,120501,120502,120504],{"class":93,"line":11},[91,120503,100868],{"class":150},[91,120505,120452],{"class":206},[91,120507,120508],{"class":93,"line":1157},[91,120509,120510],{"class":160},"# 验证CUDA是否安装成功\n",[91,120512,120513,120516],{"class":93,"line":1172},[91,120514,120515],{"class":1941},"nvcc",[91,120517,120518],{"class":150}," -V\n",[38,120520,120521],{},"出现下图这种则安装成功。",[38,120523,120524],{},[1440,120525],{"alt":10,"src":120526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[63,120528,120530],{"id":120529},"_354-安装cudnn","3.5.4 安装cuDNN",[46,120532,120533],{},[49,120534,120535],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[38,120537,120538,120539,120544],{},"前往 NVIDIA cuDNN 下载页面：",[340,120540,120543],{"href":120541,"rel":120542},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23839],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[38,120546,120547],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[38,120549,120550],{},[1440,120551],{"alt":10,"src":120552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[38,120554,120555],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[38,120557,120558],{},[1440,120559],{"alt":10,"src":120560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[38,120562,120563],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[38,120565,120566],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[38,120568,120569],{},[251,120570,120571],{},"我这里选择所有Linux X86_64最通用的办法：",[38,120573,120574],{},"下载好的：",[38,120576,120577],{},[1440,120578],{"alt":10,"src":120579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[46,120581,120582],{"start":11},[49,120583,120584],{},"安装cuDNN",[38,120586,120587],{},"找到该文件所在目录，并打开终端，cd到该目录。",[38,120589,120590],{},[1440,120591],{"alt":10,"src":120592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[38,120594,120595],{},"解压文件，并复制到对应位置完成安装",[83,120597,120599],{"className":118498,"code":120598,"language":118500,"meta":10,"style":10},"# 解压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",[88,120600,120601,120606,120617,120622,120629,120634,120650,120664,120669,120680,120689,120693,120709],{"__ignoreMap":10},[91,120602,120603],{"class":93,"line":94},[91,120604,120605],{"class":160},"# 解压cuDNN文件\n",[91,120607,120608,120611,120614],{"class":93,"line":11},[91,120609,120610],{"class":1941},"tar",[91,120612,120613],{"class":150}," -xvf",[91,120615,120616],{"class":206}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[91,120618,120619],{"class":93,"line":1157},[91,120620,120621],{"class":160},"# cd进文件夹\n",[91,120623,120624,120626],{"class":93,"line":1172},[91,120625,101251],{"class":150},[91,120627,120628],{"class":206}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[91,120630,120631],{"class":93,"line":1178},[91,120632,120633],{"class":160},"# 复制cuDNN文件到CUDA目录\n",[91,120635,120636,120638,120640,120643,120645,120648],{"class":93,"line":1192},[91,120637,24551],{"class":1941},[91,120639,27836],{"class":206},[91,120641,120642],{"class":206}," include\u002Fcudnn",[91,120644,557],{"class":150},[91,120646,120647],{"class":206},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[91,120649,2652],{"class":101},[91,120651,120652,120654,120656,120659,120661],{"class":93,"line":1198},[91,120653,24551],{"class":1941},[91,120655,27836],{"class":206},[91,120657,120658],{"class":206}," lib\u002Flibcudnn",[91,120660,557],{"class":150},[91,120662,120663],{"class":206},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[91,120665,120666],{"class":93,"line":1289},[91,120667,120668],{"class":160},"# 对比一下有没有缺文件\n",[91,120670,120671,120673,120676,120678],{"class":93,"line":1295},[91,120672,26736],{"class":1941},[91,120674,120675],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[91,120677,557],{"class":150},[91,120679,2652],{"class":101},[91,120681,120682,120684,120687],{"class":93,"line":1307},[91,120683,26736],{"class":1941},[91,120685,120686],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[91,120688,119223],{"class":150},[91,120690,120691],{"class":93,"line":1590},[91,120692,120272],{"class":160},[91,120694,120695,120697,120699,120702,120704,120706],{"class":93,"line":1595},[91,120696,24551],{"class":1941},[91,120698,24554],{"class":206},[91,120700,120701],{"class":206}," a+r",[91,120703,120675],{"class":206},[91,120705,557],{"class":150},[91,120707,120708],{"class":101},"   \n",[91,120710,120711,120713,120715,120717,120719],{"class":93,"line":1601},[91,120712,24551],{"class":1941},[91,120714,24554],{"class":206},[91,120716,120701],{"class":206},[91,120718,120686],{"class":206},[91,120720,119223],{"class":150},[46,120722,120723],{"start":1157},[49,120724,120725],{},"检查是否安装成功",[83,120727,120729],{"className":118498,"code":120728,"language":118500,"meta":10,"style":10},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[88,120730,120731,120736],{"__ignoreMap":10},[91,120732,120733],{"class":93,"line":94},[91,120734,120735],{"class":160},"# 检查cuDNN版本命令\n",[91,120737,120738,120741,120744,120746,120748,120751,120754],{"class":93,"line":11},[91,120739,120740],{"class":1941},"cat",[91,120742,120743],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[91,120745,25084],{"class":97},[91,120747,30211],{"class":1941},[91,120749,120750],{"class":206}," CUDNN_MAJOR",[91,120752,120753],{"class":150}," -A",[91,120755,47698],{"class":150},[38,120757,120758],{},"出现下图这样的就是安装成功了",[38,120760,120761],{},[1440,120762],{"alt":10,"src":120763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[46,120765,120766],{"start":1172},[49,120767,120768],{},"软链接(一般不需要)",[83,120770,120772],{"className":118498,"code":120771,"language":118500,"meta":10,"style":10},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[88,120773,120774,120779],{"__ignoreMap":10},[91,120775,120776],{"class":93,"line":94},[91,120777,120778],{"class":160},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[91,120780,120781,120783],{"class":93,"line":11},[91,120782,24551],{"class":1941},[91,120784,120785],{"class":206}," ldconfig\n",[38,120787,120788],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[83,120790,120795],{"className":120791,"code":120792,"language":120793,"meta":120794,"style":10},"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",[88,120796,120797,120802,120807,120812,120817,120822,120827],{"__ignoreMap":10},[91,120798,120799],{"class":93,"line":94},[91,120800,120801],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[91,120803,120804],{"class":93,"line":11},[91,120805,120806],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[91,120808,120809],{"class":93,"line":1157},[91,120810,120811],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[91,120813,120814],{"class":93,"line":1172},[91,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[91,120818,120819],{"class":93,"line":1178},[91,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[91,120823,120824],{"class":93,"line":1192},[91,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[91,120828,120829],{"class":93,"line":1198},[91,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[38,120833,120834],{},"运行下方的命令",[83,120836,120838],{"className":118498,"code":120837,"language":118500,"meta":10,"style":10},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[88,120839,120840,120845,120852,120857],{"__ignoreMap":10},[91,120841,120842],{"class":93,"line":94},[91,120843,120844],{"class":160},"# cd进入CUDA路径\n",[91,120846,120847,120849],{"class":93,"line":11},[91,120848,101251],{"class":150},[91,120850,120851],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[91,120853,120854],{"class":93,"line":1157},[91,120855,120856],{"class":160}," # 查看本路径下的需要软链接的文件名\n",[91,120858,120859],{"class":93,"line":1172},[91,120860,120861],{"class":1941}," ls\n",[38,120863,120864],{},[1440,120865],{"alt":10,"src":120866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[38,120868,120869,120870,18389,120873,18389,120876,120879],{},"如上图，我需要将",[88,120871,120872],{},"libcudnn_xxx_xxxxx.so.8.9.7",[88,120874,120875],{},"libcudnn_xxx_xxxxx.so.8",[88,120877,120878],{},"libcudnn_xxx_xxxxx.so","软链接",[83,120881,120883],{"className":118498,"code":120882,"language":118500,"meta":10,"style":10},"# 创建符号链接。对于每个 .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",[88,120884,120885,120890,120906,120920,120934,120948,120962,120976,120990,120995,121001,121006],{"__ignoreMap":10},[91,120886,120887],{"class":93,"line":94},[91,120888,120889],{"class":160},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[91,120891,120892,120894,120897,120900,120903],{"class":93,"line":11},[91,120893,24551],{"class":1941},[91,120895,120896],{"class":206}," ln",[91,120898,120899],{"class":150}," -sf",[91,120901,120902],{"class":206}," libcudnn_cnn_train.so.8.9.7",[91,120904,120905],{"class":206}," libcudnn_cnn_train.so.8\n",[91,120907,120908,120910,120912,120914,120917],{"class":93,"line":1157},[91,120909,24551],{"class":1941},[91,120911,120896],{"class":206},[91,120913,120899],{"class":150},[91,120915,120916],{"class":206}," libcudnn_adv_infer.so.8.9.7",[91,120918,120919],{"class":206}," libcudnn_adv_infer.so.8\n",[91,120921,120922,120924,120926,120928,120931],{"class":93,"line":1172},[91,120923,24551],{"class":1941},[91,120925,120896],{"class":206},[91,120927,120899],{"class":150},[91,120929,120930],{"class":206}," libcudnn_adv_train.so.8.9.7",[91,120932,120933],{"class":206}," libcudnn_adv_train.so.8\n",[91,120935,120936,120938,120940,120942,120945],{"class":93,"line":1178},[91,120937,24551],{"class":1941},[91,120939,120896],{"class":206},[91,120941,120899],{"class":150},[91,120943,120944],{"class":206}," libcudnn_cnn_infer.so.8.9.7",[91,120946,120947],{"class":206}," libcudnn_cnn_infer.so.8\n",[91,120949,120950,120952,120954,120956,120959],{"class":93,"line":1192},[91,120951,24551],{"class":1941},[91,120953,120896],{"class":206},[91,120955,120899],{"class":150},[91,120957,120958],{"class":206}," libcudnn.so.8.9.7",[91,120960,120961],{"class":206}," libcudnn.so.8\n",[91,120963,120964,120966,120968,120970,120973],{"class":93,"line":1198},[91,120965,24551],{"class":1941},[91,120967,120896],{"class":206},[91,120969,120899],{"class":150},[91,120971,120972],{"class":206}," libcudnn_ops_infer.so.8.9.7",[91,120974,120975],{"class":206}," libcudnn_ops_infer.so.8\n",[91,120977,120978,120980,120982,120984,120987],{"class":93,"line":1289},[91,120979,24551],{"class":1941},[91,120981,120896],{"class":206},[91,120983,120899],{"class":150},[91,120985,120986],{"class":206}," libcudnn_ops_train.so.8.9.7",[91,120988,120989],{"class":206}," libcudnn_ops_train.so.8\n",[91,120991,120992],{"class":93,"line":1295},[91,120993,120994],{"class":160},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[91,120996,120997,120999],{"class":93,"line":1307},[91,120998,24551],{"class":1941},[91,121000,120785],{"class":206},[91,121002,121003],{"class":93,"line":1590},[91,121004,121005],{"class":160},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[91,121007,121008,121010,121013,121016,121018,121021],{"class":93,"line":1595},[91,121009,26736],{"class":1941},[91,121011,121012],{"class":150}," -l",[91,121014,121015],{"class":206}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[91,121017,557],{"class":150},[91,121019,121020],{"class":206},".so",[91,121022,119223],{"class":150},[63,121024,121026],{"id":121025},"_355-常见问题","3.5.5 常见问题",[46,121028,121029],{},[49,121030,121031],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[83,121033,121035],{"className":118498,"code":121034,"language":118500,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[88,121036,121037],{"__ignoreMap":10},[91,121038,121039,121041,121043],{"class":93,"line":94},[91,121040,24551],{"class":1941},[91,121042,118558],{"class":206},[91,121044,121045],{"class":206}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[38,121047,121048],{},"blacklist-nouveau.conf文件内容如下：",[83,121050,121052],{"className":118498,"code":121051,"language":118500,"meta":10,"style":10},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[88,121053,121054,121062,121069,121081,121091],{"__ignoreMap":10},[91,121055,121056,121059],{"class":93,"line":94},[91,121057,121058],{"class":1941},"blacklist",[91,121060,121061],{"class":206}," nouveau\n",[91,121063,121064,121066],{"class":93,"line":11},[91,121065,121058],{"class":1941},[91,121067,121068],{"class":206}," lbm-nouveau\n",[91,121070,121071,121073,121076,121079],{"class":93,"line":1157},[91,121072,115905],{"class":1941},[91,121074,121075],{"class":206}," nouveau",[91,121077,121078],{"class":206}," modeset=",[91,121080,3063],{"class":150},[91,121082,121083,121086,121088],{"class":93,"line":1172},[91,121084,121085],{"class":150},"alias",[91,121087,121075],{"class":206},[91,121089,121090],{"class":206}," off\n",[91,121092,121093,121095,121098],{"class":93,"line":1178},[91,121094,121085],{"class":150},[91,121096,121097],{"class":206}," lbm-nouveau",[91,121099,121090],{"class":206},[38,121101,121102],{},"接着运行下方命令",[83,121104,121106],{"className":118498,"code":121105,"language":118500,"meta":10,"style":10},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[88,121107,121108,121118,121123],{"__ignoreMap":10},[91,121109,121110,121112,121115],{"class":93,"line":94},[91,121111,24551],{"class":1941},[91,121113,121114],{"class":206}," update-initramfs",[91,121116,121117],{"class":150}," -u\n",[91,121119,121120],{"class":93,"line":11},[91,121121,121122],{"class":1941},"或者\n",[91,121124,121125,121127,121130],{"class":93,"line":1157},[91,121126,24551],{"class":1941},[91,121128,121129],{"class":206}," dracut",[91,121131,121132],{"class":150}," --force\n",[38,121134,121135],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[83,121137,121139],{"className":118498,"code":121138,"language":118500,"meta":10,"style":10},"lsmod | grep nouveau\n",[88,121140,121141],{"__ignoreMap":10},[91,121142,121143,121146,121148,121150],{"class":93,"line":94},[91,121144,121145],{"class":1941},"lsmod",[91,121147,25084],{"class":97},[91,121149,30211],{"class":1941},[91,121151,121061],{"class":206},[46,121153,121154],{"start":11},[49,121155,121156],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[83,121158,121160],{"className":118498,"code":121159,"language":118500,"meta":10,"style":10},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[88,121161,121162],{"__ignoreMap":10},[91,121163,121164,121166,121168],{"class":93,"line":94},[91,121165,24551],{"class":1941},[91,121167,118558],{"class":206},[91,121169,121170],{"class":206}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[38,121172,121173],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[83,121175,121177],{"className":118498,"code":121176,"language":118500,"meta":10,"style":10},"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",[88,121178,121179,121187,121195,121203,121210,121218,121228,121236],{"__ignoreMap":10},[91,121180,121181,121184],{"class":93,"line":94},[91,121182,121183],{"class":1941},"Section",[91,121185,121186],{"class":206}," \"OutputClass\"\n",[91,121188,121189,121192],{"class":93,"line":11},[91,121190,121191],{"class":1941},"   Identifier",[91,121193,121194],{"class":206}," \"nvidia\"\n",[91,121196,121197,121200],{"class":93,"line":1157},[91,121198,121199],{"class":1941},"   MatchDriver",[91,121201,121202],{"class":206}," \"nvidia-drm\"\n",[91,121204,121205,121208],{"class":93,"line":1172},[91,121206,121207],{"class":1941},"   Driver",[91,121209,121194],{"class":206},[91,121211,121212,121215],{"class":93,"line":1178},[91,121213,121214],{"class":1941},"   Option",[91,121216,121217],{"class":206}," \"AllowEmptyInitialConfiguration\"\n",[91,121219,121220,121222,121225],{"class":93,"line":1192},[91,121221,121214],{"class":1941},[91,121223,121224],{"class":206}," \"PrimaryGPU\"",[91,121226,121227],{"class":206}," \"yes\"\n",[91,121229,121230,121233],{"class":93,"line":1198},[91,121231,121232],{"class":1941},"   ModulePath",[91,121234,121235],{"class":206}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[91,121237,121238],{"class":93,"line":1289},[91,121239,121240],{"class":1941},"EndSection\n",[46,121242,121243],{"start":1157},[49,121244,121245],{},"安装N卡驱动提示错误",[83,121247,121249],{"className":120791,"code":121248,"language":120793,"meta":120794,"style":10},"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",[88,121250,121251],{"__ignoreMap":10},[91,121252,121253],{"class":93,"line":94},[91,121254,121248],{},[46,121256,121257],{},[49,121258,121259],{},"检查当前运行的内核版本：",[38,121261,121262],{},"运行以下命令以查看你当前正在使用的内核版本：",[83,121264,121266],{"className":117271,"code":121265,"language":117273,"meta":10,"style":10},"uname -r\n",[88,121267,121268],{"__ignoreMap":10},[91,121269,121270,121272],{"class":93,"line":94},[91,121271,70179],{"class":1941},[91,121273,121274],{"class":150}," -r\n",[46,121276,121277],{"start":11},[49,121278,121279],{},"安装内核开发文件：",[38,121281,121282,121283,121286],{},"确保你已经安装了与当前内核版本相匹配的 ",[88,121284,121285],{},"kernel-devel"," 包。运行以下命令来安装：",[83,121288,121290],{"className":117271,"code":121289,"language":117273,"meta":10,"style":10},"sudo dnf install kernel-devel-$(uname -r)\n",[88,121291,121292],{"__ignoreMap":10},[91,121293,121294,121296,121298,121300,121303,121305,121307,121309],{"class":93,"line":94},[91,121295,24551],{"class":1941},[91,121297,26290],{"class":206},[91,121299,23808],{"class":206},[91,121301,121302],{"class":206}," kernel-devel-",[91,121304,25074],{"class":101},[91,121306,70179],{"class":1941},[91,121308,119614],{"class":150},[91,121310,108],{"class":101},[38,121312,121313],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[46,121315,121316],{"start":1157},[49,121317,121318],{},"安装内核源代码（如果需要）：",[38,121320,121321],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[83,121323,121325],{"className":117271,"code":121324,"language":117273,"meta":10,"style":10},"sudo dnf install kernel-headers kernel-source\n",[88,121326,121327],{"__ignoreMap":10},[91,121328,121329,121331,121333,121335,121338],{"class":93,"line":94},[91,121330,24551],{"class":1941},[91,121332,26290],{"class":206},[91,121334,23808],{"class":206},[91,121336,121337],{"class":206}," kernel-headers",[91,121339,121340],{"class":206}," kernel-source\n",[46,121342,121343],{"start":1172},[49,121344,121345],{},"检查安装：",[38,121347,121348,121349,121352],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[88,121350,121351],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[83,121354,121356],{"className":117271,"code":121355,"language":117273,"meta":10,"style":10},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[88,121357,121358],{"__ignoreMap":10},[91,121359,121360,121362],{"class":93,"line":94},[91,121361,26736],{"class":1941},[91,121363,121364],{"class":206}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[38,121366,121367,121368,121371],{},"如果仍然遇到问题，可以通过 ",[88,121369,121370],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5105,121373,121374],{},"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":10,"searchDepth":11,"depth":11,"links":121376},[121377,121381,121391,121395,121396],{"id":118474,"depth":11,"text":118475,"children":121378},[121379,121380],{"id":118484,"depth":1157,"text":118485},{"id":118494,"depth":1157,"text":118495},{"id":118694,"depth":11,"text":118695,"children":121382},[121383,121384,121385,121386,121387,121388,121389,121390],{"id":118698,"depth":1157,"text":118699},{"id":118768,"depth":1157,"text":118769},{"id":118857,"depth":1157,"text":118858},{"id":119102,"depth":1157,"text":119103},{"id":119172,"depth":1157,"text":119173},{"id":119239,"depth":1157,"text":119240},{"id":119274,"depth":1157,"text":119275},{"id":119329,"depth":1157,"text":119330},{"id":119380,"depth":11,"text":119381,"children":121392},[121393,121394],{"id":119384,"depth":1157,"text":119385},{"id":119464,"depth":1157,"text":119465},{"id":119650,"depth":11,"text":119651},{"id":119823,"depth":11,"text":119824,"children":121397},[121398,121399,121400,121401,121402],{"id":119827,"depth":1157,"text":119828},{"id":119868,"depth":1157,"text":119869},{"id":120155,"depth":1157,"text":120156},{"id":120529,"depth":1157,"text":120530},{"id":121025,"depth":1157,"text":121026},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118466,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121409,"title":121410,"body":121411,"description":13,"extension":14,"meta":121751,"navigation":17,"path":121752,"seo":121753,"stem":121754,"__hash__":121755},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121412,"toc":121749},[121413,121416,121421,121424,121670,121675,121678,121714,121717,121746],[29,121414,121410],{"id":121415},"_4-命令教程长期积累",[46,121417,121418],{},[49,121419,121420],{},"大多数命令",[38,121422,121423],{},"常用 Linux 命令速查：",[83,121425,121427],{"className":117271,"code":121426,"language":117273,"meta":10,"style":10},"# 文件与目录\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",[88,121428,121429,121434,121441,121448,121456,121463,121470,121478,121486,121493,121500,121508,121512,121517,121524,121532,121539,121543,121548,121555,121563,121571,121579,121587,121591,121596,121604,121611,121618,121626,121634,121638,121643,121652,121661],{"__ignoreMap":10},[91,121430,121431],{"class":93,"line":94},[91,121432,121433],{"class":160},"# 文件与目录\n",[91,121435,121436,121438],{"class":93,"line":11},[91,121437,26736],{"class":1941},[91,121439,121440],{"class":160},"        # 列出目录内容\n",[91,121442,121443,121445],{"class":93,"line":1157},[91,121444,101251],{"class":150},[91,121446,121447],{"class":160},"        # 切换目录\n",[91,121449,121450,121453],{"class":93,"line":1172},[91,121451,121452],{"class":150},"pwd",[91,121454,121455],{"class":160},"       # 显示当前路径\n",[91,121457,121458,121460],{"class":93,"line":1178},[91,121459,101241],{"class":1941},[91,121461,121462],{"class":160},"     # 创建目录\n",[91,121464,121465,121467],{"class":93,"line":1192},[91,121466,25297],{"class":1941},[91,121468,121469],{"class":160},"        # 删除文件或目录\n",[91,121471,121472,121475],{"class":93,"line":1198},[91,121473,121474],{"class":1941},"cp",[91,121476,121477],{"class":160},"        # 复制文件或目录\n",[91,121479,121480,121483],{"class":93,"line":1289},[91,121481,121482],{"class":1941},"mv",[91,121484,121485],{"class":160},"        # 移动\u002F重命名文件或目录\n",[91,121487,121488,121490],{"class":93,"line":1295},[91,121489,101258],{"class":1941},[91,121491,121492],{"class":160},"     # 创建空文件\n",[91,121494,121495,121497],{"class":93,"line":1307},[91,121496,120740],{"class":1941},[91,121498,121499],{"class":160},"       # 查看文件内容\n",[91,121501,121502,121505],{"class":93,"line":1590},[91,121503,121504],{"class":1941},"head\u002Ftail",[91,121506,121507],{"class":160}," # 查看文件头部\u002F尾部\n",[91,121509,121510],{"class":93,"line":1595},[91,121511,2378],{"emptyLinePlaceholder":17},[91,121513,121514],{"class":93,"line":1601},[91,121515,121516],{"class":160},"# 权限管理\n",[91,121518,121519,121521],{"class":93,"line":1606},[91,121520,24586],{"class":1941},[91,121522,121523],{"class":160},"     # 修改文件权限\n",[91,121525,121526,121529],{"class":93,"line":1620},[91,121527,121528],{"class":1941},"chown",[91,121530,121531],{"class":160},"     # 修改文件所有者\n",[91,121533,121534,121536],{"class":93,"line":1625},[91,121535,24551],{"class":1941},[91,121537,121538],{"class":160},"      # 以管理员身份执行\n",[91,121540,121541],{"class":93,"line":1631},[91,121542,2378],{"emptyLinePlaceholder":17},[91,121544,121545],{"class":93,"line":1652},[91,121546,121547],{"class":160},"# 系统信息\n",[91,121549,121550,121552],{"class":93,"line":1657},[91,121551,70179],{"class":1941},[91,121553,121554],{"class":160},"     # 系统信息\n",[91,121556,121557,121560],{"class":93,"line":1671},[91,121558,121559],{"class":1941},"df",[91,121561,121562],{"class":160},"        # 磁盘使用情况\n",[91,121564,121565,121568],{"class":93,"line":1676},[91,121566,121567],{"class":1941},"free",[91,121569,121570],{"class":160},"      # 内存使用情况\n",[91,121572,121573,121576],{"class":93,"line":1705},[91,121574,121575],{"class":1941},"top\u002Fhtop",[91,121577,121578],{"class":160},"  # 进程监控\n",[91,121580,121581,121584],{"class":93,"line":1710},[91,121582,121583],{"class":1941},"ps",[91,121585,121586],{"class":160},"        # 查看进程\n",[91,121588,121589],{"class":93,"line":1727},[91,121590,2378],{"emptyLinePlaceholder":17},[91,121592,121593],{"class":93,"line":1732},[91,121594,121595],{"class":160},"# 网络\n",[91,121597,121598,121601],{"class":93,"line":1737},[91,121599,121600],{"class":1941},"ping",[91,121602,121603],{"class":160},"      # 测试网络连通性\n",[91,121605,121606,121608],{"class":93,"line":1742},[91,121607,26824],{"class":1941},[91,121609,121610],{"class":160},"      # 发送 HTTP 请求\n",[91,121612,121613,121615],{"class":93,"line":1756},[91,121614,120264],{"class":1941},[91,121616,121617],{"class":160},"      # 下载文件\n",[91,121619,121620,121623],{"class":93,"line":1761},[91,121621,121622],{"class":1941},"ssh",[91,121624,121625],{"class":160},"       # 远程登录\n",[91,121627,121628,121631],{"class":93,"line":2555},[91,121629,121630],{"class":1941},"scp",[91,121632,121633],{"class":160},"       # 远程文件传输\n",[91,121635,121636],{"class":93,"line":2569},[91,121637,2378],{"emptyLinePlaceholder":17},[91,121639,121640],{"class":93,"line":2577},[91,121641,121642],{"class":160},"# 包管理（Debian\u002FUbuntu）\n",[91,121644,121645,121647,121649],{"class":93,"line":2582},[91,121646,117343],{"class":1941},[91,121648,117322],{"class":206},[91,121650,121651],{"class":160},"   # 更新软件源\n",[91,121653,121654,121656,121658],{"class":93,"line":2588},[91,121655,117343],{"class":1941},[91,121657,23808],{"class":206},[91,121659,121660],{"class":160},"  # 安装软件包\n",[91,121662,121663,121665,121667],{"class":93,"line":2594},[91,121664,117343],{"class":1941},[91,121666,26054],{"class":206},[91,121668,121669],{"class":160},"   # 卸载软件包\n",[46,121671,121672],{"start":11},[49,121673,121674],{},"KDE Dolphin 以root打开",[38,121676,121677],{},"kde5",[83,121679,121681],{"className":117271,"code":121680,"language":117273,"meta":10,"style":10},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[88,121682,121683],{"__ignoreMap":10},[91,121684,121685,121688,121691,121694,121696,121698,121701,121704,121706,121709,121711],{"class":93,"line":94},[91,121686,121687],{"class":1941},"pkexec",[91,121689,121690],{"class":206}," env",[91,121692,121693],{"class":206}," DISPLAY=",[91,121695,28118],{"class":101},[91,121697,28176],{"class":206},[91,121699,121700],{"class":101},"$XAUTHORITY ",[91,121702,121703],{"class":206},"KDE_SESSION_VERSION=",[91,121705,421],{"class":150},[91,121707,121708],{"class":206}," KDE_FULL_SESSION=",[91,121710,1340],{"class":150},[91,121712,121713],{"class":206}," dolphin\n",[38,121715,121716],{},"kde6",[83,121718,121720],{"className":117271,"code":121719,"language":117273,"meta":10,"style":10},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[88,121721,121722],{"__ignoreMap":10},[91,121723,121724,121726,121728,121730,121732,121734,121736,121738,121740,121742,121744],{"class":93,"line":94},[91,121725,121687],{"class":1941},[91,121727,121690],{"class":206},[91,121729,121693],{"class":206},[91,121731,28118],{"class":101},[91,121733,28176],{"class":206},[91,121735,121700],{"class":101},[91,121737,121703],{"class":206},[91,121739,446],{"class":150},[91,121741,121708],{"class":206},[91,121743,1340],{"class":150},[91,121745,121713],{"class":206},[5105,121747,121748],{},"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":10,"searchDepth":11,"depth":11,"links":121750},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121410,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121757,"title":121758,"body":121759,"description":13,"extension":14,"meta":121773,"navigation":17,"path":121774,"seo":121775,"stem":121776,"__hash__":121777},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121760,"toc":121771},[121761,121764],[29,121762,121758],{"id":121763},"_5-各种环境配置",[38,121765,121766],{},[340,121767,121770],{"href":121768,"rel":121769},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23839],"电控组环境搭建大全",{"title":10,"searchDepth":11,"depth":11,"links":121772},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121758,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121779,"title":121780,"body":121781,"description":13,"extension":14,"meta":122129,"navigation":17,"path":122130,"seo":122131,"stem":122132,"__hash__":122133},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121782,"toc":122121},[121783,121786,121790,121794,121798,121803,121810,121814,122107,122111,122118],[29,121784,121780],{"id":121785},"_6-拓展功能",[33,121787,121789],{"id":121788},"_61-wine","6.1 Wine",[33,121791,121793],{"id":121792},"_62-android","6.2 Android",[63,121795,121797],{"id":121796},"_621-i卡a卡","6.2.1 I卡、A卡",[46,121799,121800],{},[49,121801,121802],{},"Wayland-Waydroid(体验超级好)",[38,121804,121805,121806],{},"Waydroid 官网与安装指南：",[340,121807,121808],{"href":121808,"rel":121809},"https:\u002F\u002Fwaydro.id\u002F",[23839],[63,121811,121813],{"id":121812},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[46,121815,121816],{},[49,121817,121818,121819,121821,121822,121826,121828,121831,121836,122033],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53691,121820],{},"BlissOS 官网下载：",[340,121823,121824],{"href":121824,"rel":121825},"https:\u002F\u002Fblissos.org\u002F",[23839],[53691,121827],{},[1440,121829],{"alt":10,"src":121830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[46,121832,121833],{"start":1157},[49,121834,121835],{},"比较推荐的配置",[83,121837,121839],{"className":117271,"code":121838,"language":117273,"meta":10,"style":10},"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",[88,121840,121841,121848,121858,121868,121878,121890,121900,121907,121917,121926,121935,121945,121955,121964,121974,121984,121996,122006,122015,122025],{"__ignoreMap":10},[91,121842,121843,121846],{"class":93,"line":94},[91,121844,121845],{"class":1941},"qemu-system-x86_64",[91,121847,24653],{"class":150},[91,121849,121850,121853,121856],{"class":93,"line":11},[91,121851,121852],{"class":150},"        -M",[91,121854,121855],{"class":206}," q35,vmport=off",[91,121857,24653],{"class":150},[91,121859,121860,121863,121866],{"class":93,"line":1157},[91,121861,121862],{"class":150},"        -accel",[91,121864,121865],{"class":206}," kvm",[91,121867,24653],{"class":150},[91,121869,121870,121873,121876],{"class":93,"line":1172},[91,121871,121872],{"class":150},"        -cpu",[91,121874,121875],{"class":206}," qemu64,+sse3,+sse4.2",[91,121877,24653],{"class":150},[91,121879,121880,121883,121886,121888],{"class":93,"line":1178},[91,121881,121882],{"class":150},"        -smp",[91,121884,121885],{"class":206}," 8,cores=",[91,121887,395],{"class":150},[91,121889,24653],{"class":150},[91,121891,121892,121895,121898],{"class":93,"line":1192},[91,121893,121894],{"class":150},"        -m",[91,121896,121897],{"class":206}," 6G",[91,121899,24653],{"class":150},[91,121901,121902,121905],{"class":93,"line":1198},[91,121903,121904],{"class":150},"        -usb",[91,121906,24653],{"class":150},[91,121908,121909,121912,121915],{"class":93,"line":1289},[91,121910,121911],{"class":150},"        -device",[91,121913,121914],{"class":206}," virtio-tablet",[91,121916,24653],{"class":150},[91,121918,121919,121921,121924],{"class":93,"line":1295},[91,121920,121911],{"class":150},[91,121922,121923],{"class":206}," virtio-keyboard",[91,121925,24653],{"class":150},[91,121927,121928,121930,121933],{"class":93,"line":1307},[91,121929,121911],{"class":150},[91,121931,121932],{"class":206}," usb-tablet",[91,121934,24653],{"class":150},[91,121936,121937,121940,121943],{"class":93,"line":1590},[91,121938,121939],{"class":150},"        -bios",[91,121941,121942],{"class":206}," OVMF-pure-efi64.fd",[91,121944,24653],{"class":150},[91,121946,121947,121950,121953],{"class":93,"line":1595},[91,121948,121949],{"class":150},"        -net",[91,121951,121952],{"class":206}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[91,121954,24653],{"class":150},[91,121956,121957,121959,121962],{"class":93,"line":1601},[91,121958,121949],{"class":150},[91,121960,121961],{"class":206}," nic,model=virtio",[91,121963,24653],{"class":150},[91,121965,121966,121969,121972],{"class":93,"line":1606},[91,121967,121968],{"class":150},"        -audio",[91,121970,121971],{"class":206}," sdl,model=hda",[91,121973,24653],{"class":150},[91,121975,121976,121979,121982],{"class":93,"line":1620},[91,121977,121978],{"class":150},"        -display",[91,121980,121981],{"class":206}," sdl,gl=on,show-cursor=on",[91,121983,24653],{"class":150},[91,121985,121986,121988,121991,121994],{"class":93,"line":1625},[91,121987,121911],{"class":150},[91,121989,121990],{"class":206}," virtio-vga-gl,xres=1920,yres=",[91,121992,121993],{"class":150},"1080",[91,121995,24653],{"class":150},[91,121997,121998,122001,122004],{"class":93,"line":1631},[91,121999,122000],{"class":150},"        -drive",[91,122002,122003],{"class":206}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[91,122005,24653],{"class":150},[91,122007,122008,122010,122013],{"class":93,"line":1652},[91,122009,122000],{"class":150},[91,122011,122012],{"class":206}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[91,122014,24653],{"class":150},[91,122016,122017,122020,122023],{"class":93,"line":1657},[91,122018,122019],{"class":150},"        -monitor",[91,122021,122022],{"class":206}," stdio",[91,122024,24653],{"class":150},[91,122026,122027,122030],{"class":93,"line":1671},[91,122028,122029],{"class":150},"        -serial",[91,122031,122032],{"class":206}," none\n",[46,122034,122035],{"start":1178},[49,122036,122037,122038],{},"常用操作：",[46,122039,122040,122043,122099],{},[49,122041,122042],{},"全屏：Ctrl+Alt+F",[49,122044,122045,122046,122051],{},"adb调试",[46,122047,122048],{},[49,122049,122050],{},"使Linux与Android用ADB连接。",[83,122052,122054],{"className":117271,"code":122053,"language":117273,"meta":10,"style":10},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[88,122055,122056,122061,122072,122077,122089,122094],{"__ignoreMap":10},[91,122057,122058],{"class":93,"line":94},[91,122059,122060],{"class":160},"# 连接安卓\n",[91,122062,122063,122066,122069],{"class":93,"line":11},[91,122064,122065],{"class":1941},"adb",[91,122067,122068],{"class":206}," connect",[91,122070,122071],{"class":150}," 127.0.0.1\n",[91,122073,122074],{"class":93,"line":1157},[91,122075,122076],{"class":160},"# 打开shell\n",[91,122078,122079,122081,122083,122086],{"class":93,"line":1172},[91,122080,122065],{"class":1941},[91,122082,26858],{"class":150},[91,122084,122085],{"class":206}," 127.0.0.1:5555",[91,122087,122088],{"class":206}," shell\n",[91,122090,122091],{"class":93,"line":1178},[91,122092,122093],{"class":160},"# 使用root权限\n",[91,122095,122096],{"class":93,"line":1192},[91,122097,122098],{"class":1941},"su\n",[49,122100,122101,122102],{},"中文输入法",[46,122103,122104],{},[49,122105,122106],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[33,122108,122110],{"id":122109},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[38,122112,122113,122114],{},"rEFInd 官网与文档：",[340,122115,122116],{"href":122116,"rel":122117},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23839],[5105,122119,122120],{},"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":10,"searchDepth":11,"depth":11,"links":122122},[122123,122124,122128],{"id":121788,"depth":11,"text":121789},{"id":121792,"depth":11,"text":121793,"children":122125},[122126,122127],{"id":121796,"depth":1157,"text":121797},{"id":121812,"depth":1157,"text":121813},{"id":122109,"depth":11,"text":122110},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121780,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122135,"title":122136,"body":122137,"description":13,"extension":14,"meta":125436,"navigation":17,"path":125437,"seo":125438,"stem":125439,"__hash__":125440},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122138,"toc":125410},[122139,122142,122146,122149,122156,122406,122409,122481,122484,122488,122492,122497,122500,122503,122506,122511,122514,122517,122520,122525,122528,122533,122536,122539,122544,122547,122552,122555,122559,122563,122566,122571,122574,122588,122591,122594,122603,122606,122615,122618,122621,122630,122633,122642,122645,122648,122657,122660,122663,122678,122681,122684,122693,122698,122701,122704,122713,122716,122725,122728,122737,122740,122749,122754,122757,122765,122770,122773,122782,122785,122793,122798,122801,122810,122813,122816,122820,122823,122828,122831,122836,122850,122855,122860,122871,122876,122882,122887,122902,122907,122910,122915,122920,122925,122933,122938,122945,122950,122961,122966,122969,122973,122976,122979,122984,122987,123006,123011,123014,123023,123028,123031,123053,123056,123086,123089,123094,123097,123111,123116,123135,123138,123141,123146,123158,123163,123168,123171,123176,123179,123194,123197,123202,123207,123211,123216,123256,123259,123263,123269,123275,123280,123283,123290,123295,123302,123305,123308,123315,123329,123332,123392,123395,123409,123421,123424,123427,123430,123494,123497,123500,123503,123523,123526,123531,123538,123542,123545,123549,123554,123559,123563,123566,123569,123611,123616,123619,123641,123656,123658,123663,123675,123735,123737,123739,123793,123795,123797,123803,123808,123811,123816,123820,123823,123885,123890,123893,123895,123899,123911,123993,123995,123997,124051,124057,124059,124063,124068,124070,124075,124079,124099,124134,124138,124141,124144,124147,124154,124157,124169,124172,124187,124190,124209,124257,124260,124277,124280,124294,124299,124302,124311,124326,124338,124376,124381,124390,124395,124400,124426,124435,124439,124443,124448,124451,124455,124459,124464,124467,124472,124475,124480,124483,124488,124491,124495,124500,124503,124508,124511,124515,124520,124523,124528,124531,124536,124539,124543,124548,124551,124556,124559,124564,124567,124571,124576,124579,124584,124587,124592,124595,124600,124603,124608,124611,124616,124619,124623,124628,124631,124636,124643,124647,124652,124655,124660,124663,124667,124672,124675,124678,124681,124684,124687,124691,124694,124704,124709,124714,124736,124741,124746,124753,124757,124762,124765,124768,124773,124776,124779,124782,124785,124788,124791,124794,124797,124800,124803,124806,124809,124814,124819,124824,124829,124834,124839,124844,124847,124851,124854,124858,124863,124868,124873,124878,124882,124888,124896,124901,124904,124909,124924,124927,124932,124966,124981,124984,125039,125065,125077,125080,125089,125092,125107,125112,125115,125121,125126,125129,125134,125137,125142,125147,125154,125157,125172,125175,125210,125215,125223,125261,125264,125267,125272,125275,125280,125291,125325,125330,125333,125342,125347,125353,125356,125361,125370,125375,125378,125381,125386,125394,125397,125402,125407],[29,122140,122136],{"id":122141},"_7-其他操作",[33,122143,122145],{"id":122144},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[38,122147,122148],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[38,122150,122151,122152,122155],{},"进入工控机的硬盘目录，进入",[88,122153,122154],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[83,122157,122161],{"className":122158,"code":122159,"language":122160,"meta":10,"style":10},"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",[88,122162,122163,122171,122182,122189,122196,122208,122215,122227,122238,122249,122256,122263,122270,122282,122294,122301,122313,122325,122332,122344,122356,122368,122379,122386,122397],{"__ignoreMap":10},[91,122164,122165,122168],{"class":93,"line":94},[91,122166,122167],{"class":51275},"network",[91,122169,122170],{"class":101},": \n",[91,122172,122173,122176,122178,122180],{"class":93,"line":11},[91,122174,122175],{"class":51275},"  version",[91,122177,51412],{"class":101},[91,122179,179],{"class":150},[91,122181,2652],{"class":101},[91,122183,122184,122187],{"class":93,"line":1157},[91,122185,122186],{"class":51275},"  wifis",[91,122188,122170],{"class":101},[91,122190,122191,122194],{"class":93,"line":1172},[91,122192,122193],{"class":51275},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[91,122195,122170],{"class":101},[91,122197,122198,122201,122203,122206],{"class":93,"line":1178},[91,122199,122200],{"class":51275},"      renderer",[91,122202,51412],{"class":101},[91,122204,122205],{"class":206},"NetworkManager",[91,122207,2652],{"class":101},[91,122209,122210,122213],{"class":93,"line":1192},[91,122211,122212],{"class":51275},"      match",[91,122214,122170],{"class":101},[91,122216,122217,122220,122222,122225],{"class":93,"line":1198},[91,122218,122219],{"class":51275},"        name",[91,122221,51412],{"class":101},[91,122223,122224],{"class":206},"\"wlan0\"",[91,122226,2652],{"class":101},[91,122228,122229,122232,122234,122236],{"class":93,"line":1289},[91,122230,122231],{"class":51275},"      dhcp4",[91,122233,51412],{"class":101},[91,122235,1340],{"class":150},[91,122237,2652],{"class":101},[91,122239,122240,122243,122245,122247],{"class":93,"line":1295},[91,122241,122242],{"class":51275},"      dhcp6",[91,122244,51412],{"class":101},[91,122246,1340],{"class":150},[91,122248,2652],{"class":101},[91,122250,122251,122254],{"class":93,"line":1307},[91,122252,122253],{"class":51275},"      access-points",[91,122255,122170],{"class":101},[91,122257,122258,122261],{"class":93,"line":1590},[91,122259,122260],{"class":206},"        \"EMIS_Vinci_Robocon_5G\"",[91,122262,122170],{"class":101},[91,122264,122265,122268],{"class":93,"line":1595},[91,122266,122267],{"class":51275},"          auth",[91,122269,122170],{"class":101},[91,122271,122272,122275,122277,122280],{"class":93,"line":1601},[91,122273,122274],{"class":51275},"            key-management",[91,122276,51412],{"class":101},[91,122278,122279],{"class":206},"\"psk\"",[91,122281,2652],{"class":101},[91,122283,122284,122287,122289,122292],{"class":93,"line":1606},[91,122285,122286],{"class":51275},"            password",[91,122288,51412],{"class":101},[91,122290,122291],{"class":206},"\"vinci666\"",[91,122293,2652],{"class":101},[91,122295,122296,122299],{"class":93,"line":1620},[91,122297,122298],{"class":51275},"          networkmanager",[91,122300,122170],{"class":101},[91,122302,122303,122306,122308,122311],{"class":93,"line":1625},[91,122304,122305],{"class":51275},"            uuid",[91,122307,51412],{"class":101},[91,122309,122310],{"class":206},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[91,122312,2652],{"class":101},[91,122314,122315,122318,122320,122323],{"class":93,"line":1631},[91,122316,122317],{"class":51275},"            name",[91,122319,51412],{"class":101},[91,122321,122322],{"class":206},"\"EMIS_Vinci_Robocon_5G\"",[91,122324,2652],{"class":101},[91,122326,122327,122330],{"class":93,"line":1652},[91,122328,122329],{"class":51275},"            passthrough",[91,122331,122170],{"class":101},[91,122333,122334,122337,122339,122342],{"class":93,"line":1657},[91,122335,122336],{"class":51275},"              wifi-security.auth-alg",[91,122338,51412],{"class":101},[91,122340,122341],{"class":206},"\"open\"",[91,122343,2652],{"class":101},[91,122345,122346,122349,122351,122354],{"class":93,"line":1671},[91,122347,122348],{"class":51275},"              ipv6.addr-gen-mode",[91,122350,51412],{"class":101},[91,122352,122353],{"class":206},"\"default\"",[91,122355,2652],{"class":101},[91,122357,122358,122361,122363,122366],{"class":93,"line":1676},[91,122359,122360],{"class":51275},"              ipv6.ip6-privacy",[91,122362,51412],{"class":101},[91,122364,122365],{"class":206},"\"-1\"",[91,122367,2652],{"class":101},[91,122369,122370,122373,122375,122377],{"class":93,"line":1705},[91,122371,122372],{"class":51275},"              proxy._",[91,122374,51412],{"class":101},[91,122376,7631],{"class":206},[91,122378,2652],{"class":101},[91,122380,122381,122384],{"class":93,"line":1710},[91,122382,122383],{"class":51275},"      networkmanager",[91,122385,122170],{"class":101},[91,122387,122388,122391,122393,122395],{"class":93,"line":1727},[91,122389,122390],{"class":51275},"        uuid",[91,122392,51412],{"class":101},[91,122394,122310],{"class":206},[91,122396,2652],{"class":101},[91,122398,122399,122401,122403],{"class":93,"line":1732},[91,122400,122219],{"class":51275},[91,122402,51412],{"class":101},[91,122404,122405],{"class":206},"\"EMIS_Vinci_Robocon_5G\"\n",[38,122407,122408],{},"将其改为新wifi的名和密码：",[83,122410,122412],{"className":122158,"code":122411,"language":122160,"meta":10,"style":10},"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",[88,122413,122414,122420,122429,122435,122442,122451,122459,122465,122471],{"__ignoreMap":10},[91,122415,122416,122418],{"class":93,"line":94},[91,122417,122167],{"class":51275},[91,122419,3717],{"class":101},[91,122421,122422,122424,122426],{"class":93,"line":11},[91,122423,122175],{"class":51275},[91,122425,51412],{"class":101},[91,122427,122428],{"class":150},"2\n",[91,122430,122431,122433],{"class":93,"line":1157},[91,122432,122186],{"class":51275},[91,122434,3717],{"class":101},[91,122436,122437,122440],{"class":93,"line":1172},[91,122438,122439],{"class":51275},"    wlan0",[91,122441,3717],{"class":101},[91,122443,122444,122446,122448],{"class":93,"line":1178},[91,122445,122231],{"class":51275},[91,122447,51412],{"class":101},[91,122449,122450],{"class":150},"true\n",[91,122452,122453,122455,122457],{"class":93,"line":1192},[91,122454,122242],{"class":51275},[91,122456,51412],{"class":101},[91,122458,122450],{"class":150},[91,122460,122461,122463],{"class":93,"line":1198},[91,122462,122253],{"class":51275},[91,122464,3717],{"class":101},[91,122466,122467,122469],{"class":93,"line":1289},[91,122468,122260],{"class":206},[91,122470,3717],{"class":101},[91,122472,122473,122476,122478],{"class":93,"line":1295},[91,122474,122475],{"class":51275},"          password",[91,122477,51412],{"class":101},[91,122479,122480],{"class":206},"\"vinci666\"\n",[38,122482,122483],{},"工控机开机即可连上网。",[33,122485,122487],{"id":122486},"_72-ssh远程开发","7.2 SSH远程开发",[63,122489,122491],{"id":122490},"_721-环境准备","7.2.1 环境准备",[38,122493,122494],{},[251,122495,122496],{},"1.硬件准备",[38,122498,122499],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[38,122501,122502],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[38,122504,122505],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[38,122507,122508],{},[251,122509,122510],{},"2.设置固定IP",[38,122512,122513],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[38,122515,122516],{},"1.进入设置界面",[38,122518,122519],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[38,122521,122522],{},[1440,122523],{"alt":10,"src":122524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[38,122526,122527],{},"2.配置所连接的网络",[38,122529,122530],{},[1440,122531],{"alt":10,"src":122532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[38,122534,122535],{},"3.设置固定IP",[38,122537,122538],{},"查看当前IP地址。",[38,122540,122541],{},[1440,122542],{"alt":10,"src":122543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[38,122545,122546],{},"设置固定IP。",[38,122548,122549],{},[1440,122550],{"alt":10,"src":122551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[38,122553,122554],{},"至此，IP配置完毕。",[63,122556,122558],{"id":122557},"_722-环境搭建","7.2.2 环境搭建",[38,122560,122561],{},[251,122562,25728],{},[38,122564,122565],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[38,122567,122568],{},[251,122569,122570],{},"实现",[38,122572,122573],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[46,122575,122576,122579,122582,122585],{},[49,122577,122578],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[49,122580,122581],{},"远程主机启动SSH服务；",[49,122583,122584],{},"本地主机登陆远程主机；",[49,122586,122587],{},"实现数据传输。",[38,122589,122590],{},"1.安装SSH客户端与服务端",[38,122592,122593],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[83,122595,122597],{"className":120791,"code":122596,"language":120793,"meta":120794,"style":10}," sudo apt install openssh-server\n",[88,122598,122599],{"__ignoreMap":10},[91,122600,122601],{"class":93,"line":94},[91,122602,122596],{},[38,122604,122605],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[83,122607,122609],{"className":120791,"code":122608,"language":120793,"meta":120794,"style":10},"sudo apt install openssh-client\n",[88,122610,122611],{"__ignoreMap":10},[91,122612,122613],{"class":93,"line":94},[91,122614,122608],{},[38,122616,122617],{},"2.远程主机启动SSH服务",[38,122619,122620],{},"远程主机启动 ssh 服务命令如下：",[83,122622,122624],{"className":120791,"code":122623,"language":120793,"meta":120794,"style":10},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[88,122625,122626],{"__ignoreMap":10},[91,122627,122628],{"class":93,"line":94},[91,122629,122623],{},[38,122631,122632],{},"启动后可使用如下命令查看服务是否正常运行：",[83,122634,122636],{"className":120791,"code":122635,"language":120793,"meta":120794,"style":10},"ps -e | grep ssh\n",[88,122637,122638],{"__ignoreMap":10},[91,122639,122640],{"class":93,"line":94},[91,122641,122635],{},[38,122643,122644],{},"如果启动成功，会包含 sshd 程序。",[38,122646,122647],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[83,122649,122651],{"className":120791,"code":122650,"language":120793,"meta":120794,"style":10},"sudo systemctl enable ssh\n",[88,122652,122653],{"__ignoreMap":10},[91,122654,122655],{"class":93,"line":94},[91,122656,122650],{},[38,122658,122659],{},"3.本地远程登录",[38,122661,122662],{},"登录远程主机可以调用如下命令:",[83,122664,122666],{"className":117271,"code":122665,"language":117273,"meta":10,"style":10},"ssh -X 用户名@ip地址\n",[88,122667,122668],{"__ignoreMap":10},[91,122669,122670,122672,122675],{"class":93,"line":94},[91,122671,121622],{"class":1941},[91,122673,122674],{"class":150}," -X",[91,122676,122677],{"class":206}," 用户名@ip地址\n",[38,122679,122680],{},"然后根据提示，录入登陆密码，即可成功登录。",[38,122682,122683],{},"如果退出，可以调用exit命令：",[83,122685,122687],{"className":120791,"code":122686,"language":120793,"meta":120794,"style":10},"exit\n",[88,122688,122689],{"__ignoreMap":10},[91,122690,122691],{"class":93,"line":94},[91,122692,122686],{},[38,122694,122695],{},[251,122696,122697],{},"4.实现数据传输",[38,122699,122700],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[38,122702,122703],{},"上传文件指令格式如下：",[83,122705,122707],{"className":120791,"code":122706,"language":120793,"meta":120794,"style":10},"scp 本地文件路径 账号@ip:路径\n",[88,122708,122709],{"__ignoreMap":10},[91,122710,122711],{"class":93,"line":94},[91,122712,122706],{},[38,122714,122715],{},"上传文件夹指令格式如下：",[83,122717,122719],{"className":120791,"code":122718,"language":120793,"meta":120794,"style":10},"scp -r 本地文件夹路径 账号@ip:路径\n",[88,122720,122721],{"__ignoreMap":10},[91,122722,122723],{"class":93,"line":94},[91,122724,122718],{},[38,122726,122727],{},"下载文件指令格式如下：",[83,122729,122731],{"className":120791,"code":122730,"language":120793,"meta":120794,"style":10},"scp 账号@ip:路径 本地文件夹路径\n",[88,122732,122733],{"__ignoreMap":10},[91,122734,122735],{"class":93,"line":94},[91,122736,122730],{},[38,122738,122739],{},"下载文件夹指令格式如下：",[83,122741,122743],{"className":120791,"code":122742,"language":120793,"meta":120794,"style":10},"scp -r 账号@ip:路径 本地文件夹路径\n",[88,122744,122745],{"__ignoreMap":10},[91,122746,122747],{"class":93,"line":94},[91,122748,122742],{},[38,122750,122751],{},[251,122752,122753],{},"优化",[38,122755,122756],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[46,122758,122759,122762],{},[49,122760,122761],{},"本地生成密钥对；",[49,122763,122764],{},"将公钥上传至远程主机。",[38,122766,122767],{},[251,122768,122769],{},"1.生成密钥对",[38,122771,122772],{},"本地客户端生成公私钥：（一路回车默认即可）",[83,122774,122776],{"className":120791,"code":122775,"language":120793,"meta":120794,"style":10},"ssh-keygen\n",[88,122777,122778],{"__ignoreMap":10},[91,122779,122780],{"class":93,"line":94},[91,122781,122775],{},[38,122783,122784],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[46,122786,122787,122790],{},[49,122788,122789],{},"id_rsa （私钥）；",[49,122791,122792],{},"id_rsa.pub (公钥)。",[38,122794,122795],{},[251,122796,122797],{},"2.公钥上传",[38,122799,122800],{},"上传指令如下：",[83,122802,122804],{"className":120791,"code":122803,"language":120793,"meta":120794,"style":10},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[88,122805,122806],{"__ignoreMap":10},[91,122807,122808],{"class":93,"line":94},[91,122809,122803],{},[38,122811,122812],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[38,122814,122815],{},"以后再远程登录就无需录入密码了。",[63,122817,122819],{"id":122818},"_723-使用vscode优化","7.2.3 使用VScode优化",[38,122821,122822],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[38,122824,122825],{},[251,122826,122827],{},"1.准备工作",[38,122829,122830],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[38,122832,122833],{},[251,122834,122835],{},"2.为VScode安装远程开发插件",[38,122837,122838,122839,122842,122843,122846,122847,28360],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[88,122840,122841],{},"扩展：商店","的搜索栏输入",[88,122844,122845],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[88,122848,122849],{},"安装",[38,122851,122852],{},[1440,122853],{"alt":10,"src":122854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[38,122856,122857],{},[251,122858,122859],{},"3.配置远程连接",[38,122861,122862,122863,122866,122867,122870],{},"步骤1：使用快捷键",[88,122864,122865],{},"ctrl + shift + p","打开命令输入窗口，并输入",[88,122868,122869],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[38,122872,122873],{},[1440,122874],{"alt":10,"src":122875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[38,122877,122878,122879,28360],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[88,122880,122881],{},"Add New SSH Host",[38,122883,122884],{},[1440,122885],{"alt":10,"src":122886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[38,122888,122889,122890,122893,122894,122897,122898,122901],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[88,122891,122892],{},"ssh +X ubuntu@192.168.43.164","，其中，",[88,122895,122896],{},"ubuntu","需要替换为你的登录用户名，",[88,122899,122900],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[38,122903,122904],{},[1440,122905],{"alt":10,"src":122906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[38,122908,122909],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[38,122911,122912],{},[1440,122913],{"alt":10,"src":122914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[38,122916,122917],{},[1440,122918],{"alt":10,"src":122919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[38,122921,122922],{},[251,122923,122924],{},"4.使用",[38,122926,122927,122928,122866,122930,122932],{},"步骤1：继续使用快捷键",[88,122929,122865],{},[88,122931,122869],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[38,122934,122935],{},[1440,122936],{"alt":10,"src":122937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[38,122939,122940,122941,122944],{},"或者，也可以点击侧边栏的",[88,122942,122943],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[38,122946,122947],{},[1440,122948],{"alt":10,"src":122949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[38,122951,122952,122953,122956,122957,122960],{},"步骤2：选择菜单栏的",[88,122954,122955],{},"文件","下的",[88,122958,122959],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[38,122962,122963],{},[1440,122964],{"alt":10,"src":122965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[38,122967,122968],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[33,122970,122972],{"id":122971},"_73-远程桌面","7.3 远程桌面",[38,122974,122975],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[38,122977,122978],{},"我们选择使用VNC来看。",[46,122980,122981],{},[49,122982,122983],{},"安装VNC服务器：",[38,122985,122986],{},"这里以TigerVNC为例进行安装：",[83,122988,122990],{"className":117271,"code":122989,"language":117273,"meta":10,"style":10},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[88,122991,122992],{"__ignoreMap":10},[91,122993,122994,122996,122998,123000,123003],{"class":93,"line":94},[91,122995,24551],{"class":1941},[91,122997,117292],{"class":206},[91,122999,23808],{"class":206},[91,123001,123002],{"class":206}," tigervnc-standalone-server",[91,123004,123005],{"class":206}," tigervnc-common\n",[46,123007,123008],{"start":11},[49,123009,123010],{},"设置VNC密码：",[38,123012,123013],{},"为VNC用户设置密码，运行以下命令：",[83,123015,123017],{"className":117271,"code":123016,"language":117273,"meta":10,"style":10},"vncpasswd\n",[88,123018,123019],{"__ignoreMap":10},[91,123020,123021],{"class":93,"line":94},[91,123022,123016],{"class":1941},[46,123024,123025],{"start":1157},[49,123026,123027],{},"配置VNC启动脚本:",[38,123029,123030],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[83,123032,123034],{"className":117271,"code":123033,"language":117273,"meta":10,"style":10},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[88,123035,123036,123045],{"__ignoreMap":10},[91,123037,123038,123040,123042],{"class":93,"line":94},[91,123039,101241],{"class":1941},[91,123041,29191],{"class":150},[91,123043,123044],{"class":206}," ~\u002F.vnc\n",[91,123046,123047,123050],{"class":93,"line":11},[91,123048,123049],{"class":1941},"nano",[91,123051,123052],{"class":206}," ~\u002F.vnc\u002Fxstartup\n",[38,123054,123055],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[83,123057,123059],{"className":117271,"code":123058,"language":117273,"meta":10,"style":10},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[88,123060,123061,123066,123074,123081],{"__ignoreMap":10},[91,123062,123063],{"class":93,"line":94},[91,123064,123065],{"class":160},"#!\u002Fbin\u002Fsh\n",[91,123067,123068,123071],{"class":93,"line":11},[91,123069,123070],{"class":150},"unset",[91,123072,123073],{"class":206}," SESSION_MANAGER\n",[91,123075,123076,123078],{"class":93,"line":1157},[91,123077,123070],{"class":150},[91,123079,123080],{"class":206}," DBUS_SESSION_BUS_ADDRESS\n",[91,123082,123083],{"class":93,"line":1172},[91,123084,123085],{"class":1941},"gnome-session\n",[38,123087,123088],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[46,123090,123091],{"start":1172},[49,123092,123093],{},"给予执行权限：",[38,123095,123096],{},"为xstartup文件设置执行权限：",[83,123098,123100],{"className":117271,"code":123099,"language":117273,"meta":10,"style":10},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[88,123101,123102],{"__ignoreMap":10},[91,123103,123104,123106,123109],{"class":93,"line":94},[91,123105,24586],{"class":1941},[91,123107,123108],{"class":206}," +x",[91,123110,123052],{"class":206},[46,123112,123113],{"start":1178},[49,123114,123115],{},"启动VNC服务器：",[83,123117,123119],{"className":117271,"code":123118,"language":117273,"meta":10,"style":10},"vncserver -geometry 1920x1080 -localhost=0\n",[88,123120,123121],{"__ignoreMap":10},[91,123122,123123,123126,123129,123132],{"class":93,"line":94},[91,123124,123125],{"class":1941},"vncserver",[91,123127,123128],{"class":150}," -geometry",[91,123130,123131],{"class":206}," 1920x1080",[91,123133,123134],{"class":150}," -localhost=0\n",[38,123136,123137],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[38,123139,123140],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[46,123142,123143],{"start":1192},[49,123144,123145],{},"查看已开启的VNC服务器：",[83,123147,123149],{"className":117271,"code":123148,"language":117273,"meta":10,"style":10},"vncserver -list\n",[88,123150,123151],{"__ignoreMap":10},[91,123152,123153,123155],{"class":93,"line":94},[91,123154,123125],{"class":1941},[91,123156,123157],{"class":150}," -list\n",[38,123159,123160],{},[1440,123161],{"alt":10,"src":123162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[46,123164,123165],{"start":1198},[49,123166,123167],{},"连接到VNC服务器：",[38,123169,123170],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[46,123172,123173],{"start":1289},[49,123174,123175],{},"停止VNC服务器：",[38,123177,123178],{},"如果需要停止VNC服务器，可以使用以下命令：",[83,123180,123182],{"className":117271,"code":123181,"language":117273,"meta":10,"style":10},"vncserver -kill :1\n",[88,123183,123184],{"__ignoreMap":10},[91,123185,123186,123188,123191],{"class":93,"line":94},[91,123187,123125],{"class":1941},[91,123189,123190],{"class":150}," -kill",[91,123192,123193],{"class":206}," :1\n",[38,123195,123196],{},"将:1替换为你实际使用的显示编号。",[38,123198,123199],{},[1440,123200],{"alt":10,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[38,123203,123204],{},[1440,123205],{"alt":10,"src":123206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[33,123208,123210],{"id":123209},"_74-usb端口设置","7.4 USB端口设置",[38,123212,123213],{},[251,123214,123215],{},"首先先配置好权限",[83,123217,123219],{"className":117271,"code":123218,"language":117273,"meta":10,"style":10},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[88,123220,123221,123226,123239,123246,123251],{"__ignoreMap":10},[91,123222,123223],{"class":93,"line":94},[91,123224,123225],{"class":160},"# 将用户权限提高\n",[91,123227,123228,123230,123232,123234,123237],{"class":93,"line":11},[91,123229,24551],{"class":1941},[91,123231,26549],{"class":206},[91,123233,26552],{"class":150},[91,123235,123236],{"class":206}," dialout",[91,123238,26557],{"class":101},[91,123240,123241,123243],{"class":93,"line":1157},[91,123242,26576],{"class":1941},[91,123244,123245],{"class":206}," dialout\n",[91,123247,123248],{"class":93,"line":1172},[91,123249,123250],{"class":160},"# 查看下面命令是否输出dialout（若输出才正常）\n",[91,123252,123253],{"class":93,"line":1178},[91,123254,123255],{"class":1941},"groups\n",[38,123257,123258],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[63,123260,123262],{"id":123261},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[38,123264,123265,123268],{},[251,123266,123267],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[38,123270,123271,123274],{},[251,123272,123273],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[38,123276,123277],{},[251,123278,123279],{},"流程如下：",[38,123281,123282],{},"（1）.查找设备idVendor和idProduct",[38,123284,123285,123286,123289],{},"接入两个USB设备，在终端调用指令",[88,123287,123288],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[38,123291,123292],{},[1440,123293],{"alt":10,"src":123294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[38,123296,123297,123298,123301],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[88,123299,123300],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[38,123303,123304],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[38,123306,123307],{},"（2）.编写映射规则",[38,123309,123310,123311,123314],{},"在",[88,123312,123313],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[83,123316,123318],{"className":117271,"code":123317,"language":117273,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[88,123319,123320],{"__ignoreMap":10},[91,123321,123322,123324,123326],{"class":93,"line":94},[91,123323,24551],{"class":1941},[91,123325,118558],{"class":206},[91,123327,123328],{"class":206}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[38,123330,123331],{},"输入如下内容：",[83,123333,123335],{"className":117271,"code":123334,"language":117273,"meta":10,"style":10},"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",[88,123336,123337,123367],{"__ignoreMap":10},[91,123338,123339,123342,123344,123347,123350,123353,123356,123358,123361,123364],{"class":93,"line":94},[91,123340,123341],{"class":101},"KERNEL",[91,123343,147],{"class":97},[91,123345,123346],{"class":206},"=\"ttyUSB*\",",[91,123348,123349],{"class":1941}," ATTRS",[91,123351,123352],{"class":206},"{idVendor}==",[91,123354,123355],{"class":1941},"\"10c4\"",[91,123357,480],{"class":1941},[91,123359,123360],{"class":206}," ATTRS{idProduct}==\"ea60\",",[91,123362,123363],{"class":206}," MODE:=\"0777\",",[91,123365,123366],{"class":206}," SYMLINK+=\"mylidar\"\n",[91,123368,123369,123371,123373,123375,123377,123379,123382,123384,123387,123389],{"class":93,"line":11},[91,123370,123341],{"class":101},[91,123372,147],{"class":97},[91,123374,123346],{"class":206},[91,123376,123349],{"class":1941},[91,123378,123352],{"class":206},[91,123380,123381],{"class":1941},"\"1a86\"",[91,123383,480],{"class":1941},[91,123385,123386],{"class":206}," ATTRS{idProduct}==\"7523\",",[91,123388,123363],{"class":206},[91,123390,123391],{"class":206}," SYMLINK+=\"mycar\"\n",[38,123393,123394],{},"代码解释：",[1109,123396,123397,123400,123403,123406],{},[49,123398,123399],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[49,123401,123402],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[49,123404,123405],{},"SYMLINK是符号连接，即绑定的别名；",[49,123407,123408],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[38,123410,123411,123412,123415,123418],{},"***小提示：***",[23527,123413,123414],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[88,123416,123417],{},"\u002Fetc\u002Fudev\u002Frule.d",[23527,123419,123420],{},"目录即可。",[38,123422,123423],{},"表格 还在加载中，请等待加载完成后再尝试复制",[38,123425,123426],{},"（3）.使规则生效",[38,123428,123429],{},"在终端下输入如下指令：",[83,123431,123433],{"className":117271,"code":123432,"language":117273,"meta":10,"style":10},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[88,123434,123435,123440,123452,123463,123467,123472,123485],{"__ignoreMap":10},[91,123436,123437],{"class":93,"line":94},[91,123438,123439],{"class":160},"# Ubuntu用下方命令\n",[91,123441,123442,123444,123446,123449],{"class":93,"line":11},[91,123443,24551],{"class":1941},[91,123445,120023],{"class":206},[91,123447,123448],{"class":206}," udev",[91,123450,123451],{"class":206}," reload\n",[91,123453,123454,123456,123458,123460],{"class":93,"line":1157},[91,123455,24551],{"class":1941},[91,123457,120023],{"class":206},[91,123459,123448],{"class":206},[91,123461,123462],{"class":206}," restart\n",[91,123464,123465],{"class":93,"line":1172},[91,123466,2378],{"emptyLinePlaceholder":17},[91,123468,123469],{"class":93,"line":1178},[91,123470,123471],{"class":160},"#Fedora用下方命令\n",[91,123473,123474,123476,123479,123482],{"class":93,"line":1192},[91,123475,24551],{"class":1941},[91,123477,123478],{"class":206}," udevadm",[91,123480,123481],{"class":206}," control",[91,123483,123484],{"class":150}," --reload\n",[91,123486,123487,123489,123491],{"class":93,"line":1198},[91,123488,24551],{"class":1941},[91,123490,123478],{"class":206},[91,123492,123493],{"class":206}," trigger\n",[38,123495,123496],{},"再重新插拔设备即可。",[38,123498,123499],{},"（4）.测试",[38,123501,123502],{},"终端下输入如下指令",[83,123504,123506],{"className":117271,"code":123505,"language":117273,"meta":10,"style":10},"ll \u002Fdev | grep ttyUSB\n",[88,123507,123508],{"__ignoreMap":10},[91,123509,123510,123513,123516,123518,123520],{"class":93,"line":94},[91,123511,123512],{"class":1941},"ll",[91,123514,123515],{"class":206}," \u002Fdev",[91,123517,25084],{"class":97},[91,123519,30211],{"class":1941},[91,123521,123522],{"class":206}," ttyUSB\n",[38,123524,123525],{},"运行结果如下：",[38,123527,123528],{},[1440,123529],{"alt":10,"src":123530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[38,123532,123533,123534,123537],{},"也可以多次插拔USB设备，会发现设备端口",[88,123535,123536],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[38,123539,123540],{},[251,123541,117939],{},[38,123543,123544],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[63,123546,123548],{"id":123547},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[38,123550,123551,123553],{},[251,123552,123267],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[38,123555,123556,123558],{},[251,123557,123273],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[38,123560,123561],{},[251,123562,123279],{},[38,123564,123565],{},"（1）.查看所连接的主机USB接口的KERNELS",[38,123567,123568],{},"调用如下指令查看第一台雷达的USB信息：",[83,123570,123572],{"className":117271,"code":123571,"language":117273,"meta":10,"style":10},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[88,123573,123574,123594],{"__ignoreMap":10},[91,123575,123576,123579,123581,123584,123587,123589,123591],{"class":93,"line":94},[91,123577,123578],{"class":1941},"udevadm",[91,123580,69796],{"class":206},[91,123582,123583],{"class":150}," --attribute-walk",[91,123585,123586],{"class":150}," --name=\u002Fdev\u002FttyUSB0",[91,123588,25084],{"class":97},[91,123590,30211],{"class":1941},[91,123592,123593],{"class":206}," KERNELS\n",[91,123595,123596,123598,123600,123602,123605,123607,123609],{"class":93,"line":11},[91,123597,123578],{"class":1941},[91,123599,69796],{"class":206},[91,123601,123583],{"class":150},[91,123603,123604],{"class":150}," --name=\u002Fdev\u002FttyACM0",[91,123606,25084],{"class":97},[91,123608,30211],{"class":1941},[91,123610,123593],{"class":206},[38,123612,123613],{},[1440,123614],{"alt":10,"src":123615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[38,123617,123618],{},"调用如下指令查看第二台雷达的USB信息：",[83,123620,123622],{"className":117271,"code":123621,"language":117273,"meta":10,"style":10},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[88,123623,123624],{"__ignoreMap":10},[91,123625,123626,123628,123630,123632,123635,123637,123639],{"class":93,"line":94},[91,123627,123578],{"class":1941},[91,123629,69796],{"class":206},[91,123631,123583],{"class":150},[91,123633,123634],{"class":150}," --name=\u002Fdev\u002FttyUSB1",[91,123636,25084],{"class":97},[91,123638,30211],{"class":1941},[91,123640,123593],{"class":206},[38,123642,123643,123644,123647,123648,123651,123652,123655],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[88,123645,123646],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[88,123649,123650],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[251,123653,123654],{},"唯一性标识","”。",[38,123657,123307],{},[38,123659,123310,123660,123662],{},[88,123661,123313],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[83,123664,123665],{"className":117271,"code":123317,"language":117273,"meta":10,"style":10},[88,123666,123667],{"__ignoreMap":10},[91,123668,123669,123671,123673],{"class":93,"line":94},[91,123670,24551],{"class":1941},[91,123672,118558],{"class":206},[91,123674,123328],{"class":206},[83,123676,123678],{"className":117271,"code":123677,"language":117273,"meta":10,"style":10},"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",[88,123679,123680,123709],{"__ignoreMap":10},[91,123681,123682,123684,123686,123688,123691,123693,123696,123699,123701,123704,123706],{"class":93,"line":94},[91,123683,123341],{"class":101},[91,123685,147],{"class":97},[91,123687,123346],{"class":206},[91,123689,123690],{"class":101}," KERNELS",[91,123692,147],{"class":97},[91,123694,123695],{"class":206},"=\"1-1.3:1.0\",",[91,123697,123698],{"class":1941}," MODE:",[91,123700,147],{"class":206},[91,123702,123703],{"class":1941},"\"0777\"",[91,123705,480],{"class":1941},[91,123707,123708],{"class":206}," SYMLINK+=\"rplidar_front\"\n",[91,123710,123711,123713,123715,123717,123719,123721,123724,123726,123728,123730,123732],{"class":93,"line":11},[91,123712,123341],{"class":101},[91,123714,147],{"class":97},[91,123716,123346],{"class":206},[91,123718,123690],{"class":101},[91,123720,147],{"class":97},[91,123722,123723],{"class":206},"=\"1-1.4:1.0\",",[91,123725,123698],{"class":1941},[91,123727,147],{"class":206},[91,123729,123703],{"class":1941},[91,123731,480],{"class":1941},[91,123733,123734],{"class":206}," SYMLINK+=\"rplidar_back\"\n",[38,123736,123426],{},[38,123738,123429],{},[83,123740,123741],{"className":117271,"code":123432,"language":117273,"meta":10,"style":10},[88,123742,123743,123747,123757,123767,123771,123775,123785],{"__ignoreMap":10},[91,123744,123745],{"class":93,"line":94},[91,123746,123439],{"class":160},[91,123748,123749,123751,123753,123755],{"class":93,"line":11},[91,123750,24551],{"class":1941},[91,123752,120023],{"class":206},[91,123754,123448],{"class":206},[91,123756,123451],{"class":206},[91,123758,123759,123761,123763,123765],{"class":93,"line":1157},[91,123760,24551],{"class":1941},[91,123762,120023],{"class":206},[91,123764,123448],{"class":206},[91,123766,123462],{"class":206},[91,123768,123769],{"class":93,"line":1172},[91,123770,2378],{"emptyLinePlaceholder":17},[91,123772,123773],{"class":93,"line":1178},[91,123774,123471],{"class":160},[91,123776,123777,123779,123781,123783],{"class":93,"line":1192},[91,123778,24551],{"class":1941},[91,123780,123478],{"class":206},[91,123782,123481],{"class":206},[91,123784,123484],{"class":150},[91,123786,123787,123789,123791],{"class":93,"line":1198},[91,123788,24551],{"class":1941},[91,123790,123478],{"class":206},[91,123792,123493],{"class":206},[38,123794,123496],{},[38,123796,123499],{},[38,123798,123502,123799,123802],{},[88,123800,123801],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[38,123804,123805],{},[1440,123806],{"alt":10,"src":123807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[38,123809,123810],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[38,123812,123813,123815],{},[251,123814,117939],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[63,123817,123819],{"id":123818},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[38,123821,123822],{},"（1）.查看所连接的主机USB接口的信息",[83,123824,123826],{"className":117271,"code":123825,"language":117273,"meta":10,"style":10},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[88,123827,123828,123858],{"__ignoreMap":10},[91,123829,123830,123832,123834,123837,123839,123841,123843,123845,123848,123851,123853,123856],{"class":93,"line":94},[91,123831,123578],{"class":1941},[91,123833,69796],{"class":206},[91,123835,123836],{"class":150}," -a",[91,123838,29191],{"class":150},[91,123840,28397],{"class":101},[91,123842,123578],{"class":1941},[91,123844,69796],{"class":206},[91,123846,123847],{"class":150}," -q",[91,123849,123850],{"class":206}," path",[91,123852,25090],{"class":150},[91,123854,123855],{"class":206}," \u002Fdev\u002FttyACM0",[91,123857,108],{"class":101},[91,123859,123860,123862,123864,123866,123868,123870,123872,123874,123876,123878,123880,123883],{"class":93,"line":11},[91,123861,123578],{"class":1941},[91,123863,69796],{"class":206},[91,123865,123836],{"class":150},[91,123867,29191],{"class":150},[91,123869,28397],{"class":101},[91,123871,123578],{"class":1941},[91,123873,69796],{"class":206},[91,123875,123847],{"class":150},[91,123877,123850],{"class":206},[91,123879,25090],{"class":150},[91,123881,123882],{"class":206}," \u002Fdev\u002FttyUSB0",[91,123884,108],{"class":101},[38,123886,123887],{},[1440,123888],{"alt":10,"src":123889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[38,123891,123892],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[38,123894,123307],{},[38,123896,123310,123897,123662],{},[88,123898,123313],{},[83,123900,123901],{"className":117271,"code":123317,"language":117273,"meta":10,"style":10},[88,123902,123903],{"__ignoreMap":10},[91,123904,123905,123907,123909],{"class":93,"line":94},[91,123906,24551],{"class":1941},[91,123908,118558],{"class":206},[91,123910,123328],{"class":206},[83,123912,123914],{"className":117271,"code":123913,"language":117273,"meta":10,"style":10},"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",[88,123915,123916,123944,123970],{"__ignoreMap":10},[91,123917,123918,123920,123922,123925,123927,123929,123931,123933,123936,123939,123941],{"class":93,"line":94},[91,123919,123341],{"class":101},[91,123921,147],{"class":97},[91,123923,123924],{"class":206},"=\"ttyACM*\",",[91,123926,123349],{"class":1941},[91,123928,123352],{"class":206},[91,123930,123381],{"class":1941},[91,123932,480],{"class":1941},[91,123934,123935],{"class":206}," ATTRS{idProduct}==\"55d4\",",[91,123937,123938],{"class":206}," ATTRS{serial}==\"0001\",",[91,123940,123363],{"class":206},[91,123942,123943],{"class":206}," SYMLINK+=\"ttyACM_MCU\"\n",[91,123945,123946,123948,123950,123952,123954,123956,123958,123960,123962,123965,123967],{"class":93,"line":11},[91,123947,123341],{"class":101},[91,123949,147],{"class":97},[91,123951,123924],{"class":206},[91,123953,123349],{"class":1941},[91,123955,123352],{"class":206},[91,123957,123381],{"class":1941},[91,123959,480],{"class":1941},[91,123961,123935],{"class":206},[91,123963,123964],{"class":206}," ATTRS{serial}==\"0002\",",[91,123966,123363],{"class":206},[91,123968,123969],{"class":206}," SYMLINK+=\"ttyACM_Lidar\"\n",[91,123971,123972,123974,123976,123978,123980,123982,123984,123986,123988,123990],{"class":93,"line":1157},[91,123973,123341],{"class":101},[91,123975,147],{"class":97},[91,123977,123346],{"class":206},[91,123979,123349],{"class":1941},[91,123981,123352],{"class":206},[91,123983,123381],{"class":1941},[91,123985,480],{"class":1941},[91,123987,123386],{"class":206},[91,123989,123363],{"class":206},[91,123991,123992],{"class":206}," SYMLINK+=\"ttyUSB_IMU\"\n",[38,123994,123426],{},[38,123996,123429],{},[83,123998,123999],{"className":117271,"code":123432,"language":117273,"meta":10,"style":10},[88,124000,124001,124005,124015,124025,124029,124033,124043],{"__ignoreMap":10},[91,124002,124003],{"class":93,"line":94},[91,124004,123439],{"class":160},[91,124006,124007,124009,124011,124013],{"class":93,"line":11},[91,124008,24551],{"class":1941},[91,124010,120023],{"class":206},[91,124012,123448],{"class":206},[91,124014,123451],{"class":206},[91,124016,124017,124019,124021,124023],{"class":93,"line":1157},[91,124018,24551],{"class":1941},[91,124020,120023],{"class":206},[91,124022,123448],{"class":206},[91,124024,123462],{"class":206},[91,124026,124027],{"class":93,"line":1172},[91,124028,2378],{"emptyLinePlaceholder":17},[91,124030,124031],{"class":93,"line":1178},[91,124032,123471],{"class":160},[91,124034,124035,124037,124039,124041],{"class":93,"line":1192},[91,124036,24551],{"class":1941},[91,124038,123478],{"class":206},[91,124040,123481],{"class":206},[91,124042,123484],{"class":150},[91,124044,124045,124047,124049],{"class":93,"line":1198},[91,124046,24551],{"class":1941},[91,124048,123478],{"class":206},[91,124050,123493],{"class":206},[38,124052,124053,124054],{},"再重新插拔设备即可，或者 ",[251,124055,124056],{},"直接重启系统。",[38,124058,123499],{},[38,124060,123502,124061,123802],{},[88,124062,123801],{},[38,124064,124065],{},[1440,124066],{"alt":10,"src":124067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[38,124069,123810],{},[38,124071,124072,124074],{},[251,124073,117939],{}," 一些设备可能没有串口号等。",[63,124076,124078],{"id":124077},"_744-其他注意事项","7.4.4 其他注意事项",[38,124080,124081,124082,124084,124085,124088,124089,18389,124092,124095,124096,124098],{},"并非所有的USB设备端口号都是",[88,124083,123536],{},"的格式，比如Arduino的端口号可能是",[88,124086,124087],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[88,124090,124091],{},"videon",[88,124093,124094],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[88,124097,124091],{},"端口，绑定时需要关联的也是该接口。",[38,124100,124101,124102,124105,124106,124109,124110,124112,124113,124116,124117,124120,124121,124124,124125,124124,124128,124124,124131,28360],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[88,124103,124104],{},"KERNEL==\"ttyUSB*\"","修改为",[88,124107,124108],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[88,124111,124104],{},"修改为类似于",[88,124114,124115],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[88,124118,124119],{},"video[0,2,4,6]","表示可以绑定的端口为",[88,124122,124123],{},"video0","或",[88,124126,124127],{},"video2",[88,124129,124130],{},"video4",[88,124132,124133],{},"video6",[33,124135,124137],{"id":124136},"_75-挂载内网网页","7.5 挂载内网网页",[38,124139,124140],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[38,124142,124143],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[38,124145,124146],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[38,124148,124149,124150],{},"Termux 下载地址（F-Droid）：",[340,124151,124152],{"href":124152,"rel":124153},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23839],[38,124155,124156],{},"首先打开app后，先更新软件缓存：",[83,124158,124160],{"className":117271,"code":124159,"language":117273,"meta":10,"style":10},"pkg update\n",[88,124161,124162],{"__ignoreMap":10},[91,124163,124164,124167],{"class":93,"line":94},[91,124165,124166],{"class":1941},"pkg",[91,124168,26217],{"class":206},[38,124170,124171],{},"然后换源",[83,124173,124175],{"className":117271,"code":124174,"language":117273,"meta":10,"style":10},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[88,124176,124177],{"__ignoreMap":10},[91,124178,124179,124181,124184],{"class":93,"line":94},[91,124180,123049],{"class":1941},[91,124182,124183],{"class":101}," $PREFIX",[91,124185,124186],{"class":206},"\u002Fetc\u002Fapt\u002Fsources.list\n",[38,124188,124189],{},"将该文件内容替换为下面：",[83,124191,124193],{"className":117271,"code":124192,"language":117273,"meta":10,"style":10},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[88,124194,124195],{"__ignoreMap":10},[91,124196,124197,124200,124203,124206],{"class":93,"line":94},[91,124198,124199],{"class":1941},"deb",[91,124201,124202],{"class":206}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[91,124204,124205],{"class":206}," stable",[91,124207,124208],{"class":206}," main\n",[1109,124210,124211,124238],{},[49,124212,124213,124214,124216,124217],{},"如果你使用的是",[88,124215,123049],{},"编辑器：",[1109,124218,124219,124226,124232],{},[49,124220,124221,124222,124225],{},"按 ",[88,124223,124224],{},"Ctrl+O"," 保存文件。",[49,124227,124221,124228,124231],{},[88,124229,124230],{},"Enter"," 确认文件名。",[49,124233,124221,124234,124237],{},[88,124235,124236],{},"Ctrl+X"," 退出编辑器。",[49,124239,124213,124240,124216,124243],{},[88,124241,124242],{},"vim",[1109,124244,124245,124251],{},[49,124246,124221,124247,124250],{},[88,124248,124249],{},"Esc"," 退出编辑模式。",[49,124252,124253,124254,124256],{},"输入 ",[88,124255,119196],{}," 保存并退出。",[38,124258,124259],{},"接下来重新更新软件源：",[83,124261,124263],{"className":117271,"code":124262,"language":117273,"meta":10,"style":10},"pkg update && pkg upgrade\n",[88,124264,124265],{"__ignoreMap":10},[91,124266,124267,124269,124271,124273,124275],{"class":93,"line":94},[91,124268,124166],{"class":1941},[91,124270,117322],{"class":206},[91,124272,26165],{"class":101},[91,124274,124166],{"class":1941},[91,124276,117308],{"class":206},[38,124278,124279],{},"安装python：",[83,124281,124283],{"className":117271,"code":124282,"language":117273,"meta":10,"style":10},"pkg install python\n",[88,124284,124285],{"__ignoreMap":10},[91,124286,124287,124289,124291],{"class":93,"line":94},[91,124288,124166],{"class":1941},[91,124290,23808],{"class":206},[91,124292,124293],{"class":206}," python\n",[38,124295,124296,26448],{},[251,124297,124298],{},"通过Termux访问设备存储",[38,124300,124301],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[83,124303,124305],{"className":117271,"code":124304,"language":117273,"meta":10,"style":10},"termux-setup-storage\n",[88,124306,124307],{"__ignoreMap":10},[91,124308,124309],{"class":93,"line":94},[91,124310,124304],{"class":1941},[46,124312,124313],{},[49,124314,124315,26448,124318],{},[251,124316,124317],{},"进入HTML文件所在的目录",[46,124319,124320],{},[49,124321,124322,124323,124325],{},"使用",[88,124324,101251],{},"命令进入HTML文件所在的目录：",[83,124327,124329],{"className":117271,"code":124328,"language":117273,"meta":10,"style":10},"cd ~\u002Fyour_html_folder\n",[88,124330,124331],{"__ignoreMap":10},[91,124332,124333,124335],{"class":93,"line":94},[91,124334,101251],{"class":150},[91,124336,124337],{"class":206}," ~\u002Fyour_html_folder\n",[46,124339,124340],{"start":11},[49,124341,124342,26448,124345,124350,124367],{},[251,124343,124344],{},"启动Python HTTP服务器",[46,124346,124347],{},[49,124348,124349],{},"运行以下命令启动一个简单的HTTP服务器：",[83,124351,124353],{"className":117271,"code":124352,"language":117273,"meta":10,"style":10},"python -m http.server 8000\n",[88,124354,124355],{"__ignoreMap":10},[91,124356,124357,124359,124361,124364],{"class":93,"line":94},[91,124358,30355],{"class":1941},[91,124360,100857],{"class":150},[91,124362,124363],{"class":206}," http.server",[91,124365,124366],{"class":150}," 8000\n",[46,124368,124369],{"start":1157},[49,124370,124371,124372,124375],{},"这会在端口",[88,124373,124374],{},"8000","上启动一个Web服务器。",[1109,124377,124378],{},[49,124379,124380],{},"启动服务器后，Termux会显示日志信息，例如：",[83,124382,124384],{"className":120791,"code":124383,"language":120793,"meta":120794,"style":10},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[88,124385,124386],{"__ignoreMap":10},[91,124387,124388],{"class":93,"line":94},[91,124389,124383],{},[1109,124391,124392],{},[49,124393,124394],{},"这表示服务器已成功启动。",[38,124396,124397],{},[251,124398,124399],{},"在浏览器中访问HTML文件",[46,124401,124402],{},[49,124403,124404,26448,124407,124412],{},[251,124405,124406],{},"在同一设备上访问",[46,124408,124409],{},[49,124410,124411],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[83,124413,124416],{"className":124414,"code":124415,"language":71639,"meta":10,"style":10},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[88,124417,124418],{"__ignoreMap":10},[91,124419,124420,124423],{"class":93,"line":94},[91,124421,124422],{"class":101},"http:",[91,124424,124425],{"class":160},"\u002F\u002Flocalhost:8000\n",[1109,124427,124428],{},[49,124429,124430,124431,124434],{},"如果HTML文件中有",[88,124432,124433],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[33,124436,124438],{"id":124437},"_76-linux重点知识","7.6 Linux重点知识",[63,124440,124442],{"id":124441},"_761-关于点的说明","7.6.1 关于点的说明",[38,124444,124445],{},[1440,124446],{"alt":10,"src":124447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[38,124449,124450],{},"一点本目录，两点上目录",[63,124452,124454],{"id":124453},"_762-目录","7.6.2 目录",[21977,124456,124458],{"id":124457},"_7621-系统启动必须","7.6.2.1 系统启动必须",[38,124460,124461],{},[251,124462,124463],{},"\u002Fboot:",[38,124465,124466],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[38,124468,124469],{},[251,124470,124471],{},"\u002Fetc:",[38,124473,124474],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[38,124476,124477],{},[251,124478,124479],{},"\u002Flib：",[38,124481,124482],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[38,124484,124485],{},[251,124486,124487],{},"\u002Fsys:",[38,124489,124490],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21977,124492,124494],{"id":124493},"_7622-指令集合","7.6.2.2 指令集合",[38,124496,124497],{},[251,124498,124499],{},"\u002Fbin:",[38,124501,124502],{},"为二进制文件的缩写，存放最经常使用的命令",[38,124504,124505],{},[251,124506,124507],{},"\u002Fsbin:",[38,124509,124510],{},"只有系统管理员才能使用的程序和指令",[21977,124512,124514],{"id":124513},"_7623-外部文件管理","7.6.2.3 外部文件管理",[38,124516,124517],{},[251,124518,124519],{},"\u002Fdev:",[38,124521,124522],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[38,124524,124525],{},[251,124526,124527],{},"\u002Fmedia:",[38,124529,124530],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[38,124532,124533],{},[251,124534,124535],{},"\u002Fmnt:",[38,124537,124538],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21977,124540,124542],{"id":124541},"_7624-临时文件","7.6.2.4 临时文件",[38,124544,124545],{},[251,124546,124547],{},"\u002Frun:",[38,124549,124550],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[38,124552,124553],{},[251,124554,124555],{},"\u002Flost+found:",[38,124557,124558],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[38,124560,124561],{},[251,124562,124563],{},"\u002Ftmp:",[38,124565,124566],{},"这个目录是用来存放一些临时文件的",[21977,124568,124570],{"id":124569},"_7625-账户","7.6.2.5 账户",[38,124572,124573],{},[251,124574,124575],{},"\u002Froot：",[38,124577,124578],{},"系统管理员的用户主目录",[38,124580,124581,26448],{},[251,124582,124583],{},"\u002Fhome",[38,124585,124586],{},"用户的主目录，以用户的账号命名的",[38,124588,124589,26448],{},[251,124590,124591],{},"\u002Fusr",[38,124593,124594],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[38,124596,124597],{},[251,124598,124599],{},"\u002Fusr\u002Fbin：",[38,124601,124602],{},"系统用户使用的应用程序与指令",[38,124604,124605],{},[251,124606,124607],{},"\u002Fusr\u002Fsbin：",[38,124609,124610],{},"超级用户使用的比较高级的管理程序和系统守护程序",[38,124612,124613],{},[251,124614,124615],{},"\u002Fusr\u002Fsrc：",[38,124617,124618],{},"内核源代码默认的放置目录",[21977,124620,124622],{"id":124621},"_7626-运行过程要用","7.6.2.6 运行过程要用",[38,124624,124625],{},[251,124626,124627],{},"\u002Fvar：",[38,124629,124630],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[38,124632,124633],{},[251,124634,124635],{},"\u002Fproc:",[38,124637,124638,124639,124642],{},"管理 ",[251,124640,124641],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21977,124644,124646],{"id":124645},"_7627-扩展用的","7.6.2.7 扩展用的",[38,124648,124649],{},[251,124650,124651],{},"\u002Fopt:",[38,124653,124654],{},"默认是空的，我们安装额外软件可以放在这个里面",[38,124656,124657],{},[251,124658,124659],{},"\u002Fsrv:",[38,124661,124662],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[63,124664,124666],{"id":124665},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[38,124668,124669],{},[1440,124670],{"alt":10,"src":124671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[38,124673,124674],{},"windows-->linux:",[38,124676,124677],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[38,124679,124680],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[38,124682,124683],{},"linux传输文件到windows",[38,124685,124686],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[63,124688,124690],{"id":124689},"_764-易忘知识","7.6.4 易忘知识",[38,124692,124693],{},"操作系统内核查看",[83,124695,124696],{"className":117271,"code":121265,"language":117273,"meta":10,"style":10},[88,124697,124698],{"__ignoreMap":10},[91,124699,124700,124702],{"class":93,"line":94},[91,124701,70179],{"class":1941},[91,124703,121274],{"class":150},[38,124705,124706],{},[1440,124707],{"alt":10,"src":124708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[38,124710,124711],{},[1440,124712],{"alt":10,"src":124713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[83,124715,124717],{"className":117271,"code":124716,"language":117273,"meta":10,"style":10},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[88,124718,124719,124731],{"__ignoreMap":10},[91,124720,124721,124723,124726,124729],{"class":93,"line":94},[91,124722,121482],{"class":1941},[91,124724,124725],{"class":206}," mvtest",[91,124727,124728],{"class":206}," mvtest2",[91,124730,2652],{"class":101},[91,124732,124733],{"class":93,"line":11},[91,124734,124735],{"class":1941},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[38,124737,124738],{},[1440,124739],{"alt":10,"src":124740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[38,124742,124743],{},[1440,124744],{"alt":10,"src":124745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[38,124747,124748,124749,124752],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[88,124750,124751],{},"du -a"," 可以快速查看磁盘使用细节。",[63,124754,124756],{"id":124755},"_765-vim","7.6.5 Vim",[38,124758,124759],{},[1440,124760],{"alt":10,"src":124761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[38,124763,124764],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[38,124766,124767],{},"一开始进去为命令模式，此时点击输入的字母为命令",[38,124769,124770],{},[251,124771,124772],{},"1.命令模式：",[38,124774,124775],{},"i 切换到输入模式，在光标当前位置开始输入文本",[38,124777,124778],{},"x 删除当前光标所在处的字符",[38,124780,124781],{},"：切换到底线命令模式，以在最底一行输入命令",[38,124783,124784],{},"a 进行插入模式，在光标下一个位置输入文本",[38,124786,124787],{},"o 在当前的下方插入一个新行，并进入插入模式",[38,124789,124790],{},"0 在当前行的上方插入一个新行，并进入插入模式",[38,124792,124793],{},"dd 剪切当前行",[38,124795,124796],{},"yy 复制当前行",[38,124798,124799],{},"p 粘贴剪贴板内容到光标下方",[38,124801,124802],{},"P 粘贴剪贴板内容到光标上方",[38,124804,124805],{},"u 撤销上一次操作",[38,124807,124808],{},"ctrl+r 重做上一次操作",[38,124810,124811,124813],{},[897,124812],{}," 保存文件",[38,124815,124816,124818],{},[747,124817],{}," 退出Vim编辑器",[38,124820,124821,124823],{},[747,124822],{},"! 强制退出Vim编辑器，不保存修改",[38,124825,124826],{},[251,124827,124828],{},"2.输入模式：",[38,124830,124831],{},[1440,124832],{"alt":10,"src":124833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[38,124835,124836],{},[251,124837,124838],{},"3.底线命令模式：",[38,124840,124841],{},[1440,124842],{"alt":10,"src":124843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[38,124845,124846],{},"按下esc可以退出底线命令模式",[63,124848,124850],{"id":124849},"_766-apt","7.6.6 apt",[38,124852,124853],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[63,124855,124857],{"id":124856},"_767-home与root的区别","7.6.7 home与root的区别",[38,124859,124860],{},[1440,124861],{"alt":10,"src":124862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[38,124864,124865],{},[1440,124866],{"alt":10,"src":124867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[38,124869,124870],{},[1440,124871],{"alt":10,"src":124872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[38,124874,124875],{},[1440,124876],{"alt":10,"src":124877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[63,124879,124881],{"id":124880},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[38,124883,124884],{},[340,124885,124886],{"href":124886,"rel":124887},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23839],[46,124889,124890,124893],{},[49,124891,124892],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[49,124894,124895],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[38,124897,124898],{},[1440,124899],{"alt":10,"src":124900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[38,124902,124903],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[38,124905,124906],{},[1440,124907],{"alt":10,"src":124908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[83,124910,124912],{"className":120791,"code":124911,"language":120793,"meta":120794,"style":10},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[88,124913,124914,124919],{"__ignoreMap":10},[91,124915,124916],{"class":93,"line":94},[91,124917,124918],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[91,124920,124921],{"class":93,"line":11},[91,124922,124923],{},".\u002Fpycharm.sh\n",[38,124925,124926],{},"3️⃣创建.desktop文件",[38,124928,124929],{},[251,124930,124931],{},"原理：",[1109,124933,124934,124944],{},[49,124935,124936,124937,124943],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[251,124938,124939,124942],{},[88,124940,124941],{},".desktop"," 文件"," 来识别应用。",[49,124945,124946,124948,124949],{},[88,124947,124941],{}," 文件相当于一个“应用注册表”，告诉系统：",[1109,124950,124951,124954,124957,124960,124963],{},[49,124952,124953],{},"应用名字（Name）",[49,124955,124956],{},"图标（Icon）",[49,124958,124959],{},"执行命令（Exec）",[49,124961,124962],{},"分类（Categories）",[49,124964,124965],{},"是否需要终端（Terminal）",[83,124967,124969],{"className":120791,"code":124968,"language":120793,"meta":120794,"style":10},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[88,124970,124971,124976],{"__ignoreMap":10},[91,124972,124973],{"class":93,"line":94},[91,124974,124975],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[91,124977,124978],{"class":93,"line":11},[91,124979,124980],{},"nano pycharm.desktop\n",[38,124982,124983],{},"nano是一个命令行下的编辑器，也可以使用vim",[83,124985,124987],{"className":120791,"code":124986,"language":120793,"meta":120794,"style":10},"[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",[88,124988,124989,124994,124999,125004,125009,125014,125019,125024,125029,125034],{"__ignoreMap":10},[91,124990,124991],{"class":93,"line":94},[91,124992,124993],{},"[Desktop Entry]\n",[91,124995,124996],{"class":93,"line":11},[91,124997,124998],{},"Version=1.0\n",[91,125000,125001],{"class":93,"line":1157},[91,125002,125003],{},"Type=Application\n",[91,125005,125006],{"class":93,"line":1172},[91,125007,125008],{},"Name=PyCharm\n",[91,125010,125011],{"class":93,"line":1178},[91,125012,125013],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[91,125015,125016],{"class":93,"line":1192},[91,125017,125018],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[91,125020,125021],{"class":93,"line":1198},[91,125022,125023],{},"Comment=JetBrains PyCharm IDE\n",[91,125025,125026],{"class":93,"line":1289},[91,125027,125028],{},"Categories=Development;IDE;\n",[91,125030,125031],{"class":93,"line":1295},[91,125032,125033],{},"Terminal=false\n",[91,125035,125036],{"class":93,"line":1307},[91,125037,125038],{},"StartupWMClass=jetbrains-pycharm\n",[1109,125040,125041,125047,125053,125059],{},[49,125042,125043,125046],{},[88,125044,125045],{},"Exec"," → 点击图标时执行的命令",[49,125048,125049,125052],{},[88,125050,125051],{},"Icon"," → 显示在菜单和桌面上的图标",[49,125054,125055,125058],{},[88,125056,125057],{},"Terminal=false"," → 不打开终端",[49,125060,125061,125064],{},[88,125062,125063],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125066,125067,125068],"blockquote",{},[38,125069,125070,125071,125073,125074],{},"可以理解成 ",[88,125072,124941],{}," 文件是 Linux 的 ",[251,125075,125076],{},"快捷方式配置文件",[38,125078,125079],{},"4️⃣设置可执行权限",[83,125081,125083],{"className":120791,"code":125082,"language":120793,"meta":120794,"style":10},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[88,125084,125085],{"__ignoreMap":10},[91,125086,125087],{"class":93,"line":94},[91,125088,125082],{},[38,125090,125091],{},"5️⃣桌面图标启动的话如下：",[83,125093,125095],{"className":120791,"code":125094,"language":120793,"meta":120794,"style":10},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[88,125096,125097,125102],{"__ignoreMap":10},[91,125098,125099],{"class":93,"line":94},[91,125100,125101],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[91,125103,125104],{"class":93,"line":11},[91,125105,125106],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[46,125108,125109],{"start":1157},[49,125110,125111],{},"下载Appimage文件实现软件的安装",[38,125113,125114],{},"1️⃣先下载appimage",[38,125116,125117],{},[340,125118,125119],{"href":125119,"rel":125120},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23839],[38,125122,125123],{},[1440,125124],{"alt":10,"src":125125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[38,125127,125128],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[38,125130,125131],{},[1440,125132],{"alt":10,"src":125133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[38,125135,125136],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[38,125138,125139],{},[1440,125140],{"alt":10,"src":125141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[38,125143,125144],{},[1440,125145],{"alt":10,"src":125146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[38,125148,125149,125150,125153],{},"3️⃣给他们放在",[88,125151,125152],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[38,125155,125156],{},"4️⃣给软件执行权限",[83,125158,125160],{"className":120791,"code":125159,"language":120793,"meta":120794,"style":10},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[88,125161,125162,125167],{"__ignoreMap":10},[91,125163,125164],{"class":93,"line":94},[91,125165,125166],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[91,125168,125169],{"class":93,"line":11},[91,125170,125171],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[38,125173,125174],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[83,125176,125178],{"className":117271,"code":125177,"language":117273,"meta":10,"style":10},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[88,125179,125180,125187,125194,125200],{"__ignoreMap":10},[91,125181,125182,125184],{"class":93,"line":94},[91,125183,101251],{"class":150},[91,125185,125186],{"class":206}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[91,125188,125189,125191],{"class":93,"line":11},[91,125190,101258],{"class":1941},[91,125192,125193],{"class":206}," .\u002Fqqmusic.desktop\n",[91,125195,125196,125198],{"class":93,"line":1157},[91,125197,124242],{"class":1941},[91,125199,125193],{"class":206},[91,125201,125202,125204,125206,125208],{"class":93,"line":1172},[91,125203,24551],{"class":1941},[91,125205,24554],{"class":206},[91,125207,123108],{"class":206},[91,125209,125193],{"class":206},[38,125211,125212,125214],{},[88,125213,101258],{},"：一个 Linux 命令，主要功能是：",[1109,125216,125217,125220],{},[49,125218,125219],{},"如果文件不存在，就创建一个新的空文件",[49,125221,125222],{},"如果文件已存在，就更新该文件的最后修改时间",[83,125224,125226],{"className":120791,"code":125225,"language":120793,"meta":120794,"style":10},"[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",[88,125227,125228,125232,125237,125242,125247,125251,125256],{"__ignoreMap":10},[91,125229,125230],{"class":93,"line":94},[91,125231,124993],{},[91,125233,125234],{"class":93,"line":11},[91,125235,125236],{},"Name=QQ音乐\n",[91,125238,125239],{"class":93,"line":1157},[91,125240,125241],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[91,125243,125244],{"class":93,"line":1172},[91,125245,125246],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[91,125248,125249],{"class":93,"line":1178},[91,125250,125003],{},[91,125252,125253],{"class":93,"line":1192},[91,125254,125255],{},"Categories=Audio;Music;Player;\n",[91,125257,125258],{"class":93,"line":1198},[91,125259,125260],{},"Comment=QQ Music Client for Linux\n",[38,125262,125263],{},"将文件复制进去",[38,125265,125266],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[38,125268,125269],{},[1440,125270],{"alt":10,"src":125271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[38,125273,125274],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[38,125276,125277],{},[1440,125278],{"alt":10,"src":125279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[38,125281,125282,125283,125286,125287,125290],{},"如果你用的不是KDE，那么也可以直接修改",[88,125284,125285],{},"qqmuic.desktop","：在exec的末尾加上",[88,125288,125289],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[83,125292,125294],{"className":120791,"code":125293,"language":120793,"meta":120794,"style":10},"[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",[88,125295,125296,125300,125304,125309,125313,125317,125321],{"__ignoreMap":10},[91,125297,125298],{"class":93,"line":94},[91,125299,124993],{},[91,125301,125302],{"class":93,"line":11},[91,125303,125236],{},[91,125305,125306],{"class":93,"line":1157},[91,125307,125308],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[91,125310,125311],{"class":93,"line":1172},[91,125312,125246],{},[91,125314,125315],{"class":93,"line":1178},[91,125316,125003],{},[91,125318,125319],{"class":93,"line":1192},[91,125320,125255],{},[91,125322,125323],{"class":93,"line":1198},[91,125324,125260],{},[38,125326,125327],{},[1440,125328],{"alt":10,"src":125329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[38,125331,125332],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[83,125334,125336],{"className":120791,"code":125335,"language":120793,"meta":120794,"style":10},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[88,125337,125338],{"__ignoreMap":10},[91,125339,125340],{"class":93,"line":94},[91,125341,125335],{},[46,125343,125344],{"start":1172},[49,125345,125346],{},"去Flathub上安装软件",[38,125348,125349],{},[340,125350,125351],{"href":125351,"rel":125352},"https:\u002F\u002Fflathub.org\u002F",[23839],[38,125354,125355],{},"1️⃣去上面的官网搜索软件+下载软件",[38,125357,125358],{},[1440,125359],{"alt":10,"src":125360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[83,125362,125364],{"className":120791,"code":125363,"language":120793,"meta":120794,"style":10},"flatpak install flathub com.obsproject.Studio\n",[88,125365,125366],{"__ignoreMap":10},[91,125367,125368],{"class":93,"line":94},[91,125369,125363],{},[38,125371,125372],{},[1440,125373],{"alt":10,"src":125374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[38,125376,125377],{},"2️⃣运行软件",[38,125379,125380],{},"a.官方方式：",[38,125382,125383],{},[1440,125384],{"alt":10,"src":125385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[83,125387,125388],{"className":120791,"code":125363,"language":120793,"meta":120794,"style":10},[88,125389,125390],{"__ignoreMap":10},[91,125391,125392],{"class":93,"line":94},[91,125393,125363],{},[38,125395,125396],{},"b.当普通软件运行：",[38,125398,125399],{},[1440,125400],{"alt":10,"src":125401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[38,125403,125404],{},[1440,125405],{"alt":10,"src":125406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5105,125408,125409],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":10,"searchDepth":11,"depth":11,"links":125411},[125412,125413,125418,125419,125425,125426],{"id":122144,"depth":11,"text":122145},{"id":122486,"depth":11,"text":122487,"children":125414},[125415,125416,125417],{"id":122490,"depth":1157,"text":122491},{"id":122557,"depth":1157,"text":122558},{"id":122818,"depth":1157,"text":122819},{"id":122971,"depth":11,"text":122972},{"id":123209,"depth":11,"text":123210,"children":125420},[125421,125422,125423,125424],{"id":123261,"depth":1157,"text":123262},{"id":123547,"depth":1157,"text":123548},{"id":123818,"depth":1157,"text":123819},{"id":124077,"depth":1157,"text":124078},{"id":124136,"depth":11,"text":124137},{"id":124437,"depth":11,"text":124438,"children":125427},[125428,125429,125430,125431,125432,125433,125434,125435],{"id":124441,"depth":1157,"text":124442},{"id":124453,"depth":1157,"text":124454},{"id":124665,"depth":1157,"text":124666},{"id":124689,"depth":1157,"text":124690},{"id":124755,"depth":1157,"text":124756},{"id":124849,"depth":1157,"text":124850},{"id":124856,"depth":1157,"text":124857},{"id":124880,"depth":1157,"text":124881},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122136,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125442,"title":125443,"body":125444,"description":13,"extension":14,"meta":125448,"navigation":17,"path":125449,"seo":125450,"stem":125451,"__hash__":125452},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125445,"toc":125446},[],{"title":10,"searchDepth":11,"depth":11,"links":125447},[],{"category":30238},"\u002Fwiki\u002F2025-01-27-linux",{"title":125443,"description":13},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125454,"title":125455,"body":125456,"description":125460,"extension":14,"meta":125851,"navigation":17,"path":125852,"seo":125853,"stem":125854,"__hash__":125855},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125457,"toc":125849},[125458,125461,125465,125482,125485,125538,125542,125544,125584,125593,125597,125600,125841,125846],[38,125459,125460],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[29,125462,125464],{"id":125463},"_1ubuntu环境配置","1.Ubuntu环境配置",[46,125466,125467,125470,125473,125476,125479],{},[49,125468,125469],{},"ubuntu环境换源",[49,125471,125472],{},"安装cuda",[49,125474,125475],{},"安装miniconda",[49,125477,125478],{},"安装pytorch",[49,125480,125481],{},"安装genesis",[38,125483,125484],{},"参考链接：",[83,125486,125488],{"className":23796,"code":125487,"language":23798,"meta":10,"style":10},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[88,125489,125490],{"__ignoreMap":10},[91,125491,125492,125495,125498,125501,125503,125506,125509,125511,125514,125517,125519,125522,125525,125527,125530,125533,125535],{"class":93,"line":94},[91,125493,125494],{"class":1941},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[91,125496,125497],{"class":206},"=blogdetail",[91,125499,125500],{"class":101},"&sharetype",[91,125502,147],{"class":97},[91,125504,125505],{"class":206},"blogdetail",[91,125507,125508],{"class":101},"&sharerId",[91,125510,147],{"class":97},[91,125512,125513],{"class":206},"144728092",[91,125515,125516],{"class":101},"&sharerefer",[91,125518,147],{"class":97},[91,125520,125521],{"class":206},"PC",[91,125523,125524],{"class":101},"&sharesource",[91,125526,147],{"class":97},[91,125528,125529],{"class":206},"qq_69379513",[91,125531,125532],{"class":101},"&sharefrom",[91,125534,147],{"class":97},[91,125536,125537],{"class":206},"from_link\n",[29,125539,125541],{"id":125540},"_2genesis-报错issue","2.Genesis 报错issue",[38,125543,125484],{},[83,125545,125546],{"className":23796,"code":125487,"language":23798,"meta":10,"style":10},[88,125547,125548],{"__ignoreMap":10},[91,125549,125550,125552,125554,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582],{"class":93,"line":94},[91,125551,125494],{"class":1941},[91,125553,125497],{"class":206},[91,125555,125500],{"class":101},[91,125557,147],{"class":97},[91,125559,125505],{"class":206},[91,125561,125508],{"class":101},[91,125563,147],{"class":97},[91,125565,125513],{"class":206},[91,125567,125516],{"class":101},[91,125569,147],{"class":97},[91,125571,125521],{"class":206},[91,125573,125524],{"class":101},[91,125575,147],{"class":97},[91,125577,125529],{"class":206},[91,125579,125532],{"class":101},[91,125581,147],{"class":97},[91,125583,125537],{"class":206},[83,125585,125587],{"className":23796,"code":125586,"language":23798,"meta":10,"style":10},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[88,125588,125589],{"__ignoreMap":10},[91,125590,125591],{"class":93,"line":94},[91,125592,125586],{"class":1941},[29,125594,125596],{"id":125595},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[38,125598,125599],{},"hello_robot.py",[83,125601,125603],{"className":30353,"code":125602,"language":30355,"meta":10,"style":10},"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",[88,125604,125605,125611,125626,125630,125642,125654,125658,125671,125675,125694,125704,125714,125728,125732,125736,125741,125745,125755,125762,125776,125783,125793,125798,125802,125820,125825,125829,125836],{"__ignoreMap":10},[91,125606,125607,125609],{"class":93,"line":94},[91,125608,30367],{"class":97},[91,125610,45280],{"class":101},[91,125612,125613,125616,125619,125621,125623],{"class":93,"line":11},[91,125614,125615],{"class":101},"os.environ[",[91,125617,125618],{"class":206},"'PYOPENGL_PLATFORM'",[91,125620,4421],{"class":101},[91,125622,147],{"class":97},[91,125624,125625],{"class":206}," 'glx'\n",[91,125627,125628],{"class":93,"line":1157},[91,125629,2378],{"emptyLinePlaceholder":17},[91,125631,125632,125634,125637,125639],{"class":93,"line":1172},[91,125633,30367],{"class":97},[91,125635,125636],{"class":101}," genesis ",[91,125638,31358],{"class":97},[91,125640,125641],{"class":101}," gs\n",[91,125643,125644,125646,125649,125651],{"class":93,"line":1178},[91,125645,30712],{"class":97},[91,125647,125648],{"class":101}," pynput ",[91,125650,30367],{"class":97},[91,125652,125653],{"class":101}," keyboard\n",[91,125655,125656],{"class":93,"line":1192},[91,125657,2378],{"emptyLinePlaceholder":17},[91,125659,125660,125663,125666,125668],{"class":93,"line":1198},[91,125661,125662],{"class":101},"gs.init(",[91,125664,125665],{"class":5195},"backend",[91,125667,147],{"class":97},[91,125669,125670],{"class":101},"gs.gpu)\n",[91,125672,125673],{"class":93,"line":1289},[91,125674,2378],{"emptyLinePlaceholder":17},[91,125676,125677,125680,125682,125685,125688,125690,125692],{"class":93,"line":1295},[91,125678,125679],{"class":101},"scene ",[91,125681,147],{"class":97},[91,125683,125684],{"class":101}," gs.Scene(",[91,125686,125687],{"class":5195},"show_viewer",[91,125689,147],{"class":97},[91,125691,31451],{"class":150},[91,125693,108],{"class":101},[91,125695,125696,125699,125701],{"class":93,"line":1307},[91,125697,125698],{"class":101},"plane ",[91,125700,147],{"class":97},[91,125702,125703],{"class":101}," scene.add_entity(gs.morphs.Plane())\n",[91,125705,125706,125709,125711],{"class":93,"line":1590},[91,125707,125708],{"class":101},"franka ",[91,125710,147],{"class":97},[91,125712,125713],{"class":101}," scene.add_entity(\n",[91,125715,125716,125719,125721,125723,125726],{"class":93,"line":1595},[91,125717,125718],{"class":101},"    gs.morphs.MJCF(",[91,125720,45329],{"class":5195},[91,125722,147],{"class":97},[91,125724,125725],{"class":206},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[91,125727,38022],{"class":101},[91,125729,125730],{"class":93,"line":1601},[91,125731,108],{"class":101},[91,125733,125734],{"class":93,"line":1606},[91,125735,2378],{"emptyLinePlaceholder":17},[91,125737,125738],{"class":93,"line":1620},[91,125739,125740],{"class":101},"scene.build()\n",[91,125742,125743],{"class":93,"line":1625},[91,125744,2378],{"emptyLinePlaceholder":17},[91,125746,125747,125749,125752],{"class":93,"line":1631},[91,125748,31922],{"class":97},[91,125750,125751],{"class":1941}," on_press",[91,125753,125754],{"class":101},"(key):\n",[91,125756,125757,125760],{"class":93,"line":1652},[91,125758,125759],{"class":97},"    try",[91,125761,3717],{"class":101},[91,125763,125764,125766,125769,125771,125774],{"class":93,"line":1657},[91,125765,2475],{"class":97},[91,125767,125768],{"class":101}," key.char ",[91,125770,2927],{"class":97},[91,125772,125773],{"class":206}," 'q'",[91,125775,3717],{"class":101},[91,125777,125778,125780],{"class":93,"line":1671},[91,125779,15711],{"class":97},[91,125781,125782],{"class":150}," False\n",[91,125784,125785,125788,125791],{"class":93,"line":1676},[91,125786,125787],{"class":97},"    except",[91,125789,125790],{"class":150}," AttributeError",[91,125792,3717],{"class":101},[91,125794,125795],{"class":93,"line":1705},[91,125796,125797],{"class":97},"        pass\n",[91,125799,125800],{"class":93,"line":1710},[91,125801,2378],{"emptyLinePlaceholder":17},[91,125803,125804,125807,125809,125812,125815,125817],{"class":93,"line":1727},[91,125805,125806],{"class":101},"listener ",[91,125808,147],{"class":97},[91,125810,125811],{"class":101}," keyboard.Listener(",[91,125813,125814],{"class":5195},"on_press",[91,125816,147],{"class":97},[91,125818,125819],{"class":101},"on_press)\n",[91,125821,125822],{"class":93,"line":1732},[91,125823,125824],{"class":101},"listener.start()\n",[91,125826,125827],{"class":93,"line":1737},[91,125828,2378],{"emptyLinePlaceholder":17},[91,125830,125831,125833],{"class":93,"line":1742},[91,125832,108638],{"class":97},[91,125834,125835],{"class":101}," listener.running:\n",[91,125837,125838],{"class":93,"line":1756},[91,125839,125840],{"class":101},"    scene.step()\n",[38,125842,125843],{},[1440,125844],{"alt":10,"src":125845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5105,125847,125848],{},"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":10,"searchDepth":11,"depth":11,"links":125850},[],{"category":16},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125455,"description":125460},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125857,"title":125858,"body":125859,"description":13,"extension":14,"meta":125874,"navigation":17,"path":125875,"seo":125876,"stem":125877,"__hash__":125878},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125860,"toc":125871},[125861,125864,125868],[29,125862,125858],{"id":125863},"_1-基础知识",[33,125865,125867],{"id":125866},"_11-js的组成","1.1 js的组成",[38,125869,125870],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":10,"searchDepth":11,"depth":11,"links":125872},[125873],{"id":125866,"depth":11,"text":125867},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125858,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125880,"title":125881,"body":125882,"description":13,"extension":14,"meta":126021,"navigation":17,"path":126022,"seo":126023,"stem":126024,"__hash__":126025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125883,"toc":126009},[125884,125887,125891,125894,125898,125908,125912,125915,125918,125921,125925,125932,125938,125942,125948,125959,125963,125966,125970,125973,125977,125980,125984,125987,125991,125994,125997,126000,126003,126006],[29,125885,125881],{"id":125886},"_2-vscode必备内容",[33,125888,125890],{"id":125889},"_21-标签分类","2.1 标签分类",[38,125892,125893],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[33,125895,125897],{"id":125896},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[38,125899,125900,125901,125903,125904,125907],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[88,125902,328],{}," 然后按 ",[88,125905,125906],{},"Tab","，快速自动生成基本结构。",[33,125909,125911],{"id":125910},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[38,125913,125914],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[38,125916,125917],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[38,125919,125920],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[33,125922,125924],{"id":125923},"_24-视图缩放","2.4 视图缩放",[38,125926,125927,125928,125931],{},"缩放视图 ",[88,125929,125930],{},"ctrl+"," 可实现代码增大。",[38,125933,125934,125937],{},[88,125935,125936],{},"ctrl-"," 可实现代码减小。",[33,125939,125941],{"id":125940},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[38,125943,125944,125945,28360],{},"VSCode 新建文件快捷键为 ",[88,125946,125947],{},"ctrl+N",[38,125949,125950,125951,125954,125955,125958],{},"保存快捷键为 ",[88,125952,125953],{},"ctrl+S","，将文本保存为 ",[88,125956,125957],{},".html"," 文件。",[33,125960,125962],{"id":125961},"_26-auto-rename-tag","2.6 Auto Rename Tag",[38,125964,125965],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[33,125967,125969],{"id":125968},"_27-vscode-icons","2.7 vscode-icons",[38,125971,125972],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[33,125974,125976],{"id":125975},"_28-easy-less","2.8 Easy LESS",[38,125978,125979],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[33,125981,125983],{"id":125982},"_29-会了吧插件","2.9 会了吧插件",[38,125985,125986],{},"会了吧插件可以展示代码中英语单词的意思。",[33,125988,125990],{"id":125989},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[38,125992,125993],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[38,125995,125996],{},"②选定多个相同的单词:ctrl+D",[38,125998,125999],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[38,126001,126002],{},"④全局替换某些单词:ctrl+h",[38,126004,126005],{},"⑤快速定位到某一行:ctrl+g",[38,126007,126008],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":10,"searchDepth":11,"depth":11,"links":126010},[126011,126012,126013,126014,126015,126016,126017,126018,126019,126020],{"id":125889,"depth":11,"text":125890},{"id":125896,"depth":11,"text":125897},{"id":125910,"depth":11,"text":125911},{"id":125923,"depth":11,"text":125924},{"id":125940,"depth":11,"text":125941},{"id":125961,"depth":11,"text":125962},{"id":125968,"depth":11,"text":125969},{"id":125975,"depth":11,"text":125976},{"id":125982,"depth":11,"text":125983},{"id":125989,"depth":11,"text":125990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125881,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126027,"title":126028,"body":126029,"description":13,"extension":14,"meta":126188,"navigation":17,"path":126189,"seo":126190,"stem":126191,"__hash__":126192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126030,"toc":126180},[126031,126034,126038,126048,126054,126060,126064,126073,126077,126082,126085,126088,126092,126095,126105,126114,126123,126132,126142,126149,126154,126159,126172],[29,126032,126028],{"id":126033},"_3-html文本与容器标签",[33,126035,126037],{"id":126036},"_31-标题标签","3.1 标题标签",[38,126039,126040,126043,126044,126047],{},[88,126041,126042],{},"\u003Ch1>","我是一级标签",[88,126045,126046],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[38,126049,126050,126043,126052],{},[88,126051,126042],{},[88,126053,126046],{},[38,126055,123310,126056,126059],{},[88,126057,126058],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[33,126061,126063],{"id":126062},"_32-段落标签","3.2 段落标签",[38,126065,126066,126069,126070],{},[88,126067,126068],{},"\u003Cp>","....",[88,126071,126072],{},"\u003C\u002Fp>",[33,126074,126076],{"id":126075},"_33-换行标签","3.3 换行标签",[38,126078,126079],{},[88,126080,126081],{},"\u003Cbr \u002F>",[38,126083,126084],{},"具有强制换行的作用",[38,126086,126087],{},"单标签",[33,126089,126091],{"id":126090},"_34-文本格式化标签","3.4 文本格式化标签",[38,126093,126094],{},"提供粗体、斜体和下划线等效果",[38,126096,126097,126098,82514,126101,126104],{},"加粗：",[88,126099,126100],{},"\u003Cstrong>...\u003C\u002Fstrong>",[88,126102,126103],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[38,126106,126107,126108,82514,126111,126104],{},"斜体：",[88,126109,126110],{},"\u003Cem>...\u003C\u002Fem>",[88,126112,126113],{},"\u003Ci>...\u003C\u002Fi>",[38,126115,126116,126117,82514,126120,126104],{},"删除线：",[88,126118,126119],{},"\u003Cdel>...\u003C\u002Fdel>",[88,126121,126122],{},"\u003Cs>...\u003C\u002Fs>",[38,126124,126125,126126,82514,126129,126104],{},"下划线：",[88,126127,126128],{},"\u003Cins>...\u003C\u002Fins>",[88,126130,126131],{},"\u003Cu>...\u003C\u002Fu>",[33,126133,126135,126136,18389,126139,102668],{"id":126134},"_35-div和span标签","3.5 ",[88,126137,126138],{},"\u003Cdiv>",[88,126140,126141],{},"\u003Cspan>",[38,126143,126144,100993,126146,126148],{},[88,126145,126138],{},[88,126147,126141],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[38,126150,126151],{},[88,126152,126153],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[38,126155,126156],{},[88,126157,126158],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[38,126160,126161,126162,126164,126165,126167,126168,126171],{},"两者特点：①",[88,126163,126138],{}," 标签用来布局，但一行通常只放一个 ",[88,126166,126138],{},"。可以理解为一个大盒子，独占一行，在 ",[88,126169,126170],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[38,126173,77224,126174,126176,126177,126179],{},[88,126175,126141],{}," 标签也可用于布局，一行可以放多个 ",[88,126178,126141],{},"，可理解为小盒子。",{"title":10,"searchDepth":11,"depth":11,"links":126181},[126182,126183,126184,126185,126186],{"id":126036,"depth":11,"text":126037},{"id":126062,"depth":11,"text":126063},{"id":126075,"depth":11,"text":126076},{"id":126090,"depth":11,"text":126091},{"id":126134,"depth":11,"text":126187},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126028,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126194,"title":126195,"body":126196,"description":13,"extension":14,"meta":126393,"navigation":17,"path":126394,"seo":126395,"stem":126396,"__hash__":126397},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126197,"toc":126385},[126198,126201,126205,126208,126214,126221,126227,126233,126236,126239,126242,126245,126248,126251,126254,126258,126261,126264,126267,126273,126279,126285,126292,126296,126302,126308,126311,126314,126320,126326,126332,126335,126338,126342,126345,126355,126361,126365,126374,126378,126381],[29,126199,126195],{"id":126200},"_4-html图像与链接",[33,126202,126204],{"id":126203},"_41-图像标签","4.1 图像标签",[38,126206,126207],{},"（1）标签",[38,126209,126210,126213],{},[88,126211,126212],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[38,126215,126216,126217,126220],{},"src是",[88,126218,126219],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[38,126222,126223,126224],{},"alt:文本，替换文本。图像不能显示的文字 ",[88,126225,126226],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[38,126228,126229,126230],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[88,126231,126232],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[38,126234,126235],{},"width:像素，设置图像的宽度",[38,126237,126238],{},"height:像素，设置图像的高度",[38,126240,126241],{},"border：像素，设置图像的边框粗细",[38,126243,126244],{},"（2）图像标签属性的注意点：",[38,126246,126247],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[38,126249,126250],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[38,126252,126253],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[33,126255,126257],{"id":126256},"_42-路径注意要点","4.2 路径注意要点：",[38,126259,126260],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[38,126262,126263],{},"（2）根目录：就是打开文件夹的第一层根目录",[38,126265,126266],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[38,126268,126269,126270],{},"①同一级路径：图像文件位于HTML文件同一级，如",[88,126271,126272],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[38,126274,126275,126276],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[88,126277,126278],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[38,126280,126281,126282],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[88,126283,126284],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[38,126286,126287,126288,353],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[340,126289,126290],{"href":126290,"rel":126291},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23839],[33,126293,126295],{"id":126294},"_43-超链接标签","4.3 超链接标签",[38,126297,126298,126301],{},[88,126299,126300],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[38,126303,126304,126305],{},"①语法格式：",[88,126306,126307],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[38,126309,126310],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[38,126312,126313],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[38,126315,126316,126317],{},"③链接分类：外部链接：",[88,126318,126319],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[38,126321,126322,126323],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[88,126324,126325],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[38,126327,126328,126329],{},"空链接：如果当时没有确定链接目标时，",[88,126330,126331],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[38,126333,126334],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[38,126336,126337],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[33,126339,126341],{"id":126340},"_44-锚点链接","4.4 锚点链接",[38,126343,126344],{},"点我们点击链接，可以快速定位到页面中的某个位置",[38,126346,126347,126348,126351,126352],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[88,126349,126350],{},"\u003Ca href=\"#two\">","第二级",[88,126353,126354],{},"\u003C\u002Fa>",[38,126356,126357,126358],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[88,126359,126360],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[33,126362,126364],{"id":126363},"_45-注释标签","4.5 注释标签",[38,126366,126367,126370,126371],{},[88,126368,126369],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[88,126372,126373],{},"ctrl+\u002F",[33,126375,126377],{"id":126376},"_46-特殊字符","4.6 特殊字符",[38,126379,126380],{},"可以实现添加多个空格",[1440,126382],{"style":126383,"src":126384},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":10,"searchDepth":11,"depth":11,"links":126386},[126387,126388,126389,126390,126391,126392],{"id":126203,"depth":11,"text":126204},{"id":126256,"depth":11,"text":126257},{"id":126294,"depth":11,"text":126295},{"id":126340,"depth":11,"text":126341},{"id":126363,"depth":11,"text":126364},{"id":126376,"depth":11,"text":126377},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126195,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126399,"title":126400,"body":126401,"description":13,"extension":14,"meta":126694,"navigation":17,"path":126695,"seo":126696,"stem":126697,"__hash__":126698},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126402,"toc":126685},[126403,126406,126410,126413,126416,126419,126422,126425,126428,126431,126434,126437,126457,126463,126467,126470,126473,126476,126479,126482,126485,126489,126492,126495,126498,126501,126514,126519,126522,126525,126540,126543,126546,126549,126552,126555,126559,126562,126569,126572,126575,126578,126581,126584,126590,126593,126596,126602,126605,126608,126611,126617,126620,126623,126637,126644,126647,126650,126657,126666,126669,126672,126675,126679,126682],[29,126404,126400],{"id":126405},"_5-html表格列表与表单",[33,126407,126409],{"id":126408},"_51-表格标签","5.1 表格标签",[38,126411,126412],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[38,126414,126415],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[38,126417,126418],{},"②表格基本语法：",[1440,126420],{"style":126383,"src":126421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[38,126423,126424],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1440,126426],{"style":126383,"src":126427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[38,126429,126430],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1440,126432],{"style":126383,"src":126433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[38,126435,126436],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[38,126438,126439,126442,126443,126445,126446,126449,126450,126452,126453,126456],{},[88,126440,126441],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[88,126444,126441],{},"内部必须拥有",[88,126447,126448],{},"\u003Ctr>","标签，一般位于第一行，",[88,126451,126441],{},"比",[88,126454,126455],{},"\u003Cth>","范围广",[38,126458,126459,126462],{},[88,126460,126461],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[33,126464,126466],{"id":126465},"_52-合并单元格","5.2 合并单元格",[38,126468,126469],{},"（1）合并单元格方式：",[38,126471,126472],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[38,126474,126475],{},"②跨列合并：colspan=\"合并单元格的个数\"",[38,126477,126478],{},"（2）目标单元格：",[38,126480,126481],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[38,126483,126484],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[33,126486,126488],{"id":126487},"_53-列表标签","5.3 列表标签",[38,126490,126491],{},"（1）分类：无序列表、有序列表、自定义列表",[38,126493,126494],{},"①无序列表：",[1440,126496],{"style":126383,"src":126497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[38,126499,126500],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[38,126502,126503,126506,126507,126510,126511,126513],{},[88,126504,126505],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[88,126508,126509],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[88,126512,126505],{},"中输入其他标签或文字是不对的",[38,126515,126516,126518],{},[88,126517,126509],{},"之间相当于一个容器，可以容纳所有元素",[38,126520,126521],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[38,126523,126524],{},"在css中去除前边的小圆点采用如下代码:",[83,126526,126530],{"className":126527,"code":126528,"language":126529,"meta":10,"style":10},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[88,126531,126532],{"__ignoreMap":10},[91,126533,126534,126537],{"class":93,"line":94},[91,126535,126536],{"class":51275},"list-style",[91,126538,126539],{"class":101},": none;\n",[38,126541,126542],{},"②有序列表：",[1440,126544],{"style":126383,"src":126545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[38,126547,126548],{},"③自定义列表：",[1440,126550],{"style":126383,"src":126551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1440,126553],{"style":126383,"src":126554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[33,126556,126558],{"id":126557},"_54-表单标签","5.4 表单标签",[38,126560,126561],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[38,126563,126564,126565,126568],{},"（1）表单域：包含单元素的区域，",[88,126566,126567],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1440,126570],{"style":126383,"src":126571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[38,126573,126574],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[38,126576,126577],{},"表单元素提交必须有name属性",[38,126579,126580],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[38,126582,126583],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[38,126585,77201,126586,126589],{},[88,126587,126588],{},"\u003Cinput>","输入表单元素",[1440,126591],{"style":126383,"src":126592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1440,126594],{"style":126383,"src":126595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[38,126597,126598,126599],{},"单选按钮：",[88,126600,126601],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1440,126603],{"style":126383,"src":126604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[38,126606,126607],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1440,126609],{"style":126383,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[38,126612,126613,126616],{},[251,126614,126615],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[38,126618,126619],{},"②select下拉表单元素：可以节约页面控件",[1440,126621],{"style":126383,"src":126622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[38,126624,126625,13774,126627,126630,126631,126633,126634,126636],{},[251,126626,131],{},[88,126628,126629],{},"\u003Cselect>","中至少包含一对",[88,126632,102689],{},"；在",[88,126635,102689],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[38,126638,126639,126640,126643],{},"③",[88,126641,126642],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1440,126645],{"style":126383,"src":126646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[38,126648,126649],{},"3行20列",[33,126651,126653,126654,102668],{"id":126652},"_55-lable标签","5.5 ",[88,126655,126656],{},"\u003Clable>",[38,126658,126659,126660,126662,126663,126665],{},"它不是表单标签，但常常与表单标签搭配使用，",[88,126661,126656],{},"标签用于绑定一个表单标签，当点击",[88,126664,126656],{},"标签内的文本",[38,126667,126668],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1440,126670],{"style":126383,"src":126671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1440,126673],{"style":126383,"src":126674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[33,126676,126678],{"id":126677},"_56-实例","5.6 实例",[1440,126680],{"style":126383,"src":126681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5105,126683,126684],{},"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":10,"searchDepth":11,"depth":11,"links":126686},[126687,126688,126689,126690,126691,126693],{"id":126408,"depth":11,"text":126409},{"id":126465,"depth":11,"text":126466},{"id":126487,"depth":11,"text":126488},{"id":126557,"depth":11,"text":126558},{"id":126652,"depth":11,"text":126692},"5.5 \u003Clable>标签",{"id":126677,"depth":11,"text":126678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126400,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126700,"title":126701,"body":126702,"description":13,"extension":14,"meta":127251,"navigation":17,"path":127252,"seo":127253,"stem":127254,"__hash__":127255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126703,"toc":127226},[126704,126707,126711,126714,126717,126721,126724,126727,126730,126733,126736,126739,126742,126746,126749,126753,126756,126759,126762,126766,126769,126772,126775,126781,126784,126787,126790,126793,126796,126799,126802,126835,126839,126842,126845,126848,126852,126855,126858,126861,126864,126867,126871,126874,126877,126880,126884,126887,126891,126894,126898,126901,126906,126910,126913,126917,126920,126923,126926,126929,126956,126959,126963,126966,126969,126974,126977,126980,126984,126987,126992,126995,126998,127001,127005,127008,127011,127014,127018,127021,127024,127027,127031,127035,127038,127078,127081,127085,127092,127095,127099,127102,127148,127152,127155,127158,127161,127189,127193,127196,127223],[29,126705,126701],{"id":126706},"_6-css语法与文本样式",[33,126708,126710],{"id":126709},"_61-css语法规范","6.1 css语法规范",[38,126712,126713],{},"由两部分组成，选择器及一条或多条声明",[1440,126715],{"style":126383,"src":126716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[38,126718,126719],{},[251,126720,131],{},[38,126722,126723],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[38,126725,126726],{},"②属性与属性值以“键值对”的形式出现",[38,126728,126729],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[38,126731,126732],{},"④属性和属性值之间用英文“;”分开",[1440,126734],{"style":126383,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1440,126737],{"style":126383,"src":126738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1440,126740],{"style":126383,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[33,126743,126745],{"id":126744},"_62-css选择器","6.2 css选择器",[38,126747,126748],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[63,126750,126752],{"id":126751},"_621-标签选择器","6.2.1 标签选择器",[38,126754,126755],{},"①优点：能快速为页面中同类型的标签统一设置样式",[38,126757,126758],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1440,126760],{"style":126383,"src":126761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[63,126763,126765],{"id":126764},"_622-类选择器","6.2.2 类选择器",[38,126767,126768],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[38,126770,126771],{},"②样例",[1440,126773],{"style":126383,"src":126774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[38,126776,126777,126778,126780],{},"③ ",[251,126779,126615],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[38,126782,126783],{},"可以理解为给这个标签起了个名字，来表示；",[38,126785,126786],{},"长名称或词组可以使用横线来为选择器命名；",[38,126788,126789],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[38,126791,126792],{},"命名要有意义；",[1440,126794],{"style":126383,"src":126795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[38,126797,126798],{},"类选择器也可以指定特殊的元素p.center{}",[38,126800,126801],{},"p.center和.center都对",[83,126803,126805],{"className":126527,"code":126804,"language":126529,"meta":10,"style":10},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[88,126806,126807,126812,126821,126831],{"__ignoreMap":10},[91,126808,126809],{"class":93,"line":94},[91,126810,126811],{"class":160},"\u002F* 类选择器指定特殊元素 *\u002F\n",[91,126813,126814,126816,126819],{"class":93,"line":11},[91,126815,38],{"class":51275},[91,126817,126818],{"class":1941},".center",[91,126820,15551],{"class":101},[91,126822,126823,126825,126827,126829],{"class":93,"line":1157},[91,126824,70501],{"class":150},[91,126826,51412],{"class":101},[91,126828,51567],{"class":150},[91,126830,1268],{"class":101},[91,126832,126833],{"class":93,"line":1172},[91,126834,1543],{"class":101},[63,126836,126838],{"id":126837},"_623-多类名使用","6.2.3 多类名使用",[38,126840,126841],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1440,126843],{"style":126383,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[38,126846,126847],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[63,126849,126851],{"id":126850},"_624-id选择器","6.2.4 id选择器",[38,126853,126854],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[38,126856,126857],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1440,126859],{"style":126383,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[38,126862,126863],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[38,126865,126866],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[63,126868,126870],{"id":126869},"_625-通配符选择器","6.2.5 通配符选择器",[38,126872,126873],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[38,126875,126876],{},"* {",[38,126878,126879],{},"color=\"red\"}",[63,126881,126883],{"id":126882},"_626-总结","6.2.6 总结",[1440,126885],{"style":126383,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[33,126888,126890],{"id":126889},"_63-css字体属性","6.3 css字体属性",[38,126892,126893],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[63,126895,126897],{"id":126896},"_631-字体系列","6.3.1 字体系列",[38,126899,126900],{},"font-family: '宋体';",[38,126902,126903,126905],{},[251,126904,131],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[63,126907,126909],{"id":126908},"_632-字体大小","6.3.2 字体大小",[38,126911,126912],{},"font-size: 20px",[38,126914,126915,26448],{},[251,126916,126615],{},[38,126918,126919],{},"①px（像素）大小是网页的最常用单位",[38,126921,126922],{},"②谷歌浏览器默认为16px",[38,126924,126925],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[38,126927,126928],{},"④可以给body指定整个页面的大小：会自动引用",[83,126930,126932],{"className":126527,"code":126931,"language":126529,"meta":10,"style":10},"body {\n  font-size: 16px;\n}\n",[88,126933,126934,126940,126952],{"__ignoreMap":10},[91,126935,126936,126938],{"class":93,"line":94},[91,126937,51775],{"class":51275},[91,126939,15551],{"class":101},[91,126941,126942,126944,126946,126948,126950],{"class":93,"line":11},[91,126943,70601],{"class":150},[91,126945,51412],{"class":101},[91,126947,703],{"class":150},[91,126949,51467],{"class":97},[91,126951,1268],{"class":101},[91,126953,126954],{"class":93,"line":1157},[91,126955,1543],{"class":101},[38,126957,126958],{},"⑤标题标签比较特殊，需要单独指定大小",[63,126960,126962],{"id":126961},"_633-字体粗细","6.3.3 字体粗细",[38,126964,126965],{},"font-weight: bold;",[38,126967,126968],{},"font-weight: 100；",[38,126970,126971,126973],{},[251,126972,131],{}," ①粗体文字变细：尽量别用normal，多用数字",[38,126975,126976],{},"font-weight= 400;",[38,126978,126979],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[63,126981,126983],{"id":126982},"_634-文字样式","6.3.4 文字样式",[38,126985,126986],{},"font-style: normal；",[38,126988,126989,26448],{},[251,126990,126991],{},"属性值",[38,126993,126994],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[38,126996,126997],{},"②italic：浏览器会显示斜体的字体样式",[1440,126999],{"style":126383,"src":127000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[63,127002,127004],{"id":127003},"_635-字体符合属性","6.3.5 字体符合属性",[1440,127006],{"style":126383,"src":127007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1440,127009],{"style":126383,"src":127010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[38,127012,127013],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[38,127015,127016,26448],{},[251,127017,126615],{},[38,127019,127020],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[38,127022,127023],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[38,127025,127026],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[33,127028,127030],{"id":127029},"_64-css-test文本属性","6.4 css test文本属性",[63,127032,127034],{"id":127033},"_641-文本颜色","6.4.1 文本颜色",[38,127036,127037],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[83,127039,127041],{"className":126527,"code":127040,"language":126529,"meta":10,"style":10},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[88,127042,127043,127048,127054,127064,127069,127074],{"__ignoreMap":10},[91,127044,127045],{"class":93,"line":94},[91,127046,127047],{"class":160},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[91,127049,127050,127052],{"class":93,"line":11},[91,127051,38],{"class":51275},[91,127053,15551],{"class":101},[91,127055,127056,127058,127060,127062],{"class":93,"line":1157},[91,127057,70880],{"class":150},[91,127059,51412],{"class":101},[91,127061,57396],{"class":150},[91,127063,1268],{"class":101},[91,127065,127066],{"class":93,"line":1172},[91,127067,127068],{"class":160},"  \u002F* color: #ff0000; *\u002F\n",[91,127070,127071],{"class":93,"line":1178},[91,127072,127073],{"class":160},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[91,127075,127076],{"class":93,"line":1192},[91,127077,1543],{"class":101},[1440,127079],{"style":126383,"src":127080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[63,127082,127084],{"id":127083},"_642-对齐文本","6.4.2 对齐文本",[38,127086,127087,127088,127091],{},"text-align属于用于设置元素内文本内容的 ",[251,127089,127090],{},"水平对齐"," 方式",[38,127093,127094],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[63,127096,127098],{"id":127097},"_643-装饰文本","6.4.3 装饰文本",[38,127100,127101],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[83,127103,127105],{"className":126527,"code":127104,"language":126529,"meta":10,"style":10},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[88,127106,127107,127113,127123,127127,127133,127144],{"__ignoreMap":10},[91,127108,127109,127111],{"class":93,"line":94},[91,127110,340],{"class":51275},[91,127112,15551],{"class":101},[91,127114,127115,127117,127119,127121],{"class":93,"line":11},[91,127116,70477],{"class":150},[91,127118,51412],{"class":101},[91,127120,54712],{"class":150},[91,127122,1268],{"class":101},[91,127124,127125],{"class":93,"line":1157},[91,127126,1543],{"class":101},[91,127128,127129,127131],{"class":93,"line":1172},[91,127130,38],{"class":51275},[91,127132,15551],{"class":101},[91,127134,127135,127137,127139,127142],{"class":93,"line":1178},[91,127136,70477],{"class":150},[91,127138,51412],{"class":101},[91,127140,127141],{"class":150},"underline",[91,127143,1268],{"class":101},[91,127145,127146],{"class":93,"line":1192},[91,127147,1543],{"class":101},[63,127149,127151],{"id":127150},"_644-文本缩进","6.4.4 文本缩进",[38,127153,127154],{},"实现文本的第一行首行缩进自己指定的距离",[38,127156,127157],{},"20px往右边走；-20px往左边走",[38,127159,127160],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[83,127162,127164],{"className":126527,"code":127163,"language":126529,"meta":10,"style":10},"p {\n  text-indent: 2em;\n}\n",[88,127165,127166,127172,127185],{"__ignoreMap":10},[91,127167,127168,127170],{"class":93,"line":94},[91,127169,38],{"class":51275},[91,127171,15551],{"class":101},[91,127173,127174,127177,127179,127181,127183],{"class":93,"line":11},[91,127175,127176],{"class":150},"  text-indent",[91,127178,51412],{"class":101},[91,127180,179],{"class":150},[91,127182,23527],{"class":97},[91,127184,1268],{"class":101},[91,127186,127187],{"class":93,"line":1157},[91,127188,1543],{"class":101},[63,127190,127192],{"id":127191},"_645-行间距","6.4.5 行间距",[38,127194,127195],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[83,127197,127199],{"className":126527,"code":127198,"language":126529,"meta":10,"style":10},"p {\n  line-height: 1.6;\n}\n",[88,127200,127201,127207,127219],{"__ignoreMap":10},[91,127202,127203,127205],{"class":93,"line":94},[91,127204,38],{"class":51275},[91,127206,15551],{"class":101},[91,127208,127209,127212,127214,127217],{"class":93,"line":11},[91,127210,127211],{"class":150},"  line-height",[91,127213,51412],{"class":101},[91,127215,127216],{"class":150},"1.6",[91,127218,1268],{"class":101},[91,127220,127221],{"class":93,"line":1157},[91,127222,1543],{"class":101},[5105,127224,127225],{},"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":10,"searchDepth":11,"depth":11,"links":127227},[127228,127229,127237,127244],{"id":126709,"depth":11,"text":126710},{"id":126744,"depth":11,"text":126745,"children":127230},[127231,127232,127233,127234,127235,127236],{"id":126751,"depth":1157,"text":126752},{"id":126764,"depth":1157,"text":126765},{"id":126837,"depth":1157,"text":126838},{"id":126850,"depth":1157,"text":126851},{"id":126869,"depth":1157,"text":126870},{"id":126882,"depth":1157,"text":126883},{"id":126889,"depth":11,"text":126890,"children":127238},[127239,127240,127241,127242,127243],{"id":126896,"depth":1157,"text":126897},{"id":126908,"depth":1157,"text":126909},{"id":126961,"depth":1157,"text":126962},{"id":126982,"depth":1157,"text":126983},{"id":127003,"depth":1157,"text":127004},{"id":127029,"depth":11,"text":127030,"children":127245},[127246,127247,127248,127249,127250],{"id":127033,"depth":1157,"text":127034},{"id":127083,"depth":1157,"text":127084},{"id":127097,"depth":1157,"text":127098},{"id":127150,"depth":1157,"text":127151},{"id":127191,"depth":1157,"text":127192},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126701,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127257,"title":127258,"body":127259,"description":13,"extension":14,"meta":127908,"navigation":17,"path":127909,"seo":127910,"stem":127911,"__hash__":127912},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127260,"toc":127889},[127261,127264,127268,127272,127332,127336,127346,127349,127352,127356,127381,127385,127388,127391,127394,127397,127400,127404,127407,127410,127452,127455,127481,127487,127490,127494,127498,127504,127507,127510,127513,127516,127519,127522,127567,127571,127574,127577,127581,127585,127614,127617,127622,127625,127628,127631,127634,127638,127642,127645,127647,127650,127654,127657,127661,127664,127667,127670,127674,127678,127684,127694,127697,127700,127703,127706,127709,127832,127840,127848,127886],[29,127262,127258],{"id":127263},"_7-css引入方式与选择器进阶",[33,127265,127267],{"id":127266},"_71-css引入方式","7.1 css引入方式",[63,127269,127271],{"id":127270},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[83,127273,127277],{"className":127274,"code":127275,"language":127276,"meta":10,"style":10},"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",[88,127278,127279,127287,127294,127306,127319,127324],{"__ignoreMap":10},[91,127280,127281,127283,127285],{"class":93,"line":94},[91,127282,1012],{"class":101},[91,127284,5105],{"class":51275},[91,127286,51282],{"class":101},[91,127288,127289,127292],{"class":93,"line":11},[91,127290,127291],{"class":51275},"  h1",[91,127293,15551],{"class":101},[91,127295,127296,127299,127301,127304],{"class":93,"line":1157},[91,127297,127298],{"class":150},"    color",[91,127300,51412],{"class":101},[91,127302,127303],{"class":150},"blue",[91,127305,1268],{"class":101},[91,127307,127308,127311,127313,127315,127317],{"class":93,"line":1172},[91,127309,127310],{"class":150},"    font-size",[91,127312,51412],{"class":101},[91,127314,902],{"class":150},[91,127316,51467],{"class":97},[91,127318,1268],{"class":101},[91,127320,127321],{"class":93,"line":1178},[91,127322,127323],{"class":101},"  }\n",[91,127325,127326,127328,127330],{"class":93,"line":1192},[91,127327,51760],{"class":101},[91,127329,5105],{"class":51275},[91,127331,51282],{"class":101},[38,127333,127334,26448],{},[251,127335,126615],{},[38,127337,77201,127338,127341,127342,127345],{},[88,127339,127340],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[88,127343,127344],{},"\u003Chead>","标签中",[38,127347,127348],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[38,127350,127351],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[63,127353,127355],{"id":127354},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[83,127357,127359],{"className":127274,"code":127358,"language":127276,"meta":10,"style":10},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[88,127360,127361],{"__ignoreMap":10},[91,127362,127363,127365,127367,127369,127371,127374,127377,127379],{"class":93,"line":94},[91,127364,1012],{"class":101},[91,127366,38],{"class":51275},[91,127368,62601],{"class":1941},[91,127370,147],{"class":101},[91,127372,127373],{"class":206},"\"color: red; font-size: 16px;\"",[91,127375,127376],{"class":101},">这是一个段落\u003C\u002F",[91,127378,38],{"class":51275},[91,127380,51282],{"class":101},[38,127382,127383,26448],{},[251,127384,126615],{},[38,127386,127387],{},"①style其实就是标签的属性",[38,127389,127390],{},"②在双引号中间，写法要符合css规范",[38,127392,127393],{},"③可以控制当前的标签设置样式",[38,127395,127396],{},"④书写繁琐，简单时才用",[38,127398,127399],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[63,127401,127403],{"id":127402},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[38,127405,127406],{},"使用最多，单独建一个css文件，然后html引用",[38,127408,127409],{},"①css文件部分： style.css",[83,127411,127413],{"className":126527,"code":127412,"language":126529,"meta":10,"style":10},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[88,127414,127415,127420,127426,127436,127448],{"__ignoreMap":10},[91,127416,127417],{"class":93,"line":94},[91,127418,127419],{"class":160},"\u002F* style.css *\u002F\n",[91,127421,127422,127424],{"class":93,"line":11},[91,127423,29],{"class":51275},[91,127425,15551],{"class":101},[91,127427,127428,127430,127432,127434],{"class":93,"line":1157},[91,127429,70880],{"class":150},[91,127431,51412],{"class":101},[91,127433,127303],{"class":150},[91,127435,1268],{"class":101},[91,127437,127438,127440,127442,127444,127446],{"class":93,"line":1172},[91,127439,70601],{"class":150},[91,127441,51412],{"class":101},[91,127443,902],{"class":150},[91,127445,51467],{"class":97},[91,127447,1268],{"class":101},[91,127449,127450],{"class":93,"line":1178},[91,127451,1543],{"class":101},[38,127453,127454],{},"②html部分",[83,127456,127458],{"className":127274,"code":127457,"language":127276,"meta":10,"style":10},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[88,127459,127460],{"__ignoreMap":10},[91,127461,127462,127464,127466,127468,127470,127472,127474,127476,127479],{"class":93,"line":94},[91,127463,1012],{"class":101},[91,127465,68980],{"class":51275},[91,127467,68983],{"class":1941},[91,127469,147],{"class":101},[91,127471,68988],{"class":206},[91,127473,61032],{"class":1941},[91,127475,147],{"class":101},[91,127477,127478],{"class":206},"\"style.css\"",[91,127480,51282],{"class":101},[38,127482,127483,127486],{},[88,127484,127485],{},"\u003Chr>","水平线标签（但是不常用！）",[38,127488,127489],{},"ctrl+0回到页面原来大小",[33,127491,127493],{"id":127492},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[63,127495,127497],{"id":127496},"_721-快速生成html","7.2.1 快速生成html",[38,127499,127500,127501],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[88,127502,127503],{},"\u003Cdiv>``\u003C\u002Fdiv>",[38,127505,127506],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[38,127508,127509],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[38,127511,127512],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[38,127514,127515],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[38,127517,127518],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[38,127520,127521],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[83,127523,127525],{"className":127274,"code":127524,"language":127276,"meta":10,"style":10},"\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",[88,127526,127527,127532,127537,127542,127547,127552,127557,127562],{"__ignoreMap":10},[91,127528,127529],{"class":93,"line":94},[91,127530,127531],{"class":160},"\u003C!-- Emmet 语法示例 -->\n",[91,127533,127534],{"class":93,"line":11},[91,127535,127536],{"class":160},"\u003C!-- div*3        → 生成3个div -->\n",[91,127538,127539],{"class":93,"line":1157},[91,127540,127541],{"class":160},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[91,127543,127544],{"class":93,"line":1172},[91,127545,127546],{"class":160},"\u003C!-- div+p        → 兄弟div和p -->\n",[91,127548,127549],{"class":93,"line":1178},[91,127550,127551],{"class":160},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[91,127553,127554],{"class":93,"line":1192},[91,127555,127556],{"class":160},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[91,127558,127559],{"class":93,"line":1198},[91,127560,127561],{"class":160},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[91,127563,127564],{"class":93,"line":1289},[91,127565,127566],{"class":160},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[63,127568,127570],{"id":127569},"_722-快速生成css","7.2.2 快速生成css",[38,127572,127573],{},"简写开头",[38,127575,127576],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[33,127578,127580],{"id":127579},"_73-css复合选择器","7.3 css复合选择器",[63,127582,127584],{"id":127583},"_731-后代选择器","7.3.1 后代选择器",[83,127586,127588],{"className":126527,"code":127587,"language":126529,"meta":10,"style":10},".parent .child {\n  color: blue;\n}\n",[88,127589,127590,127600,127610],{"__ignoreMap":10},[91,127591,127592,127595,127598],{"class":93,"line":94},[91,127593,127594],{"class":1941},".parent",[91,127596,127597],{"class":1941}," .child",[91,127599,15551],{"class":101},[91,127601,127602,127604,127606,127608],{"class":93,"line":11},[91,127603,70880],{"class":150},[91,127605,51412],{"class":101},[91,127607,127303],{"class":150},[91,127609,1268],{"class":101},[91,127611,127612],{"class":93,"line":1157},[91,127613,1543],{"class":101},[38,127615,127616],{},"元素1 元素2 {样式声明}",[38,127618,127619],{},[251,127620,127621],{},"注意点:",[38,127623,127624],{},"①元素1和元素2中间用空格隔开",[38,127626,127627],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[38,127629,127630],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[38,127632,127633],{},"④元素1和元素2可以是任意基础选择器",[63,127635,127637],{"id":127636},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[38,127639,127640],{},[251,127641,127621],{},[38,127643,127644],{},"①元素1和元素2中间用大于号隔开",[38,127646,127627],{},[38,127648,127649],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[63,127651,127653],{"id":127652},"_733-并集选择器","7.3.3 并集选择器",[38,127655,127656],{},"元素1，元素2 {样式声明}",[38,127658,127659],{},[251,127660,127621],{},[38,127662,127663],{},"①元素1和元素2中间用逗号隔开",[38,127665,127666],{},"②逗号可以理解为和的意思",[38,127668,127669],{},"③并集选择器通常用于集体声明",[63,127671,127673],{"id":127672},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[38,127675,127676],{},[251,127677,127621],{},[38,127679,127680,127681,127683],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68980,127682],{},"－:visited－:hover－:active。",[38,127685,127686,127687,127690,127691,25715],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127688,127689],"hover",{}," 、 ",[127692,127693],"first-child",{},[38,127695,127696],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[38,127698,127699],{},"link对没访问的进行设置",[38,127701,127702],{},"vistied对已访问的进行改变",[38,127704,127705],{},"hover鼠标经过就会变",[38,127707,127708],{},"active常按(点)就会变",[83,127710,127712],{"className":126527,"code":127711,"language":126529,"meta":10,"style":10},"\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",[88,127713,127714,127719,127728,127738,127748,127752,127761,127772,127776,127784,127794,127804,127808,127817,127828],{"__ignoreMap":10},[91,127715,127716],{"class":93,"line":94},[91,127717,127718],{"class":160},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[91,127720,127721,127723,127726],{"class":93,"line":11},[91,127722,340],{"class":51275},[91,127724,127725],{"class":1941},":link",[91,127727,15551],{"class":101},[91,127729,127730,127732,127734,127736],{"class":93,"line":1157},[91,127731,70880],{"class":150},[91,127733,51412],{"class":101},[91,127735,62344],{"class":150},[91,127737,1268],{"class":101},[91,127739,127740,127742,127744,127746],{"class":93,"line":1172},[91,127741,70477],{"class":150},[91,127743,51412],{"class":101},[91,127745,54712],{"class":150},[91,127747,1268],{"class":101},[91,127749,127750],{"class":93,"line":1178},[91,127751,1543],{"class":101},[91,127753,127754,127756,127759],{"class":93,"line":1192},[91,127755,340],{"class":51275},[91,127757,127758],{"class":1941},":visited",[91,127760,15551],{"class":101},[91,127762,127763,127765,127767,127770],{"class":93,"line":1198},[91,127764,70880],{"class":150},[91,127766,51412],{"class":101},[91,127768,127769],{"class":150},"purple",[91,127771,1268],{"class":101},[91,127773,127774],{"class":93,"line":1289},[91,127775,1543],{"class":101},[91,127777,127778,127780,127782],{"class":93,"line":1295},[91,127779,340],{"class":51275},[91,127781,60915],{"class":1941},[91,127783,15551],{"class":101},[91,127785,127786,127788,127790,127792],{"class":93,"line":1307},[91,127787,70880],{"class":150},[91,127789,51412],{"class":101},[91,127791,54864],{"class":150},[91,127793,1268],{"class":101},[91,127795,127796,127798,127800,127802],{"class":93,"line":1590},[91,127797,70477],{"class":150},[91,127799,51412],{"class":101},[91,127801,127141],{"class":150},[91,127803,1268],{"class":101},[91,127805,127806],{"class":93,"line":1595},[91,127807,1543],{"class":101},[91,127809,127810,127812,127815],{"class":93,"line":1601},[91,127811,340],{"class":51275},[91,127813,127814],{"class":1941},":active",[91,127816,15551],{"class":101},[91,127818,127819,127821,127823,127826],{"class":93,"line":1606},[91,127820,70880],{"class":150},[91,127822,51412],{"class":101},[91,127824,127825],{"class":150},"green",[91,127827,1268],{"class":101},[91,127829,127830],{"class":93,"line":1620},[91,127831,1543],{"class":101},[63,127833,127835,127836,127839],{"id":127834},"_735-伪类选择器","7.3.5 ",[127837,127838],"focus",{},"伪类选择器",[38,127841,127842,127844,127845,127847],{},[127837,127843],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[88,127846,126588],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[83,127849,127851],{"className":126527,"code":127850,"language":126529,"meta":10,"style":10},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[88,127852,127853,127861,127872,127882],{"__ignoreMap":10},[91,127854,127855,127857,127859],{"class":93,"line":94},[91,127856,53796],{"class":51275},[91,127858,61875],{"class":1941},[91,127860,15551],{"class":101},[91,127862,127863,127866,127868,127870],{"class":93,"line":11},[91,127864,127865],{"class":150},"  border-color",[91,127867,51412],{"class":101},[91,127869,54864],{"class":150},[91,127871,1268],{"class":101},[91,127873,127874,127876,127878,127880],{"class":93,"line":1157},[91,127875,70773],{"class":150},[91,127877,51412],{"class":101},[91,127879,54712],{"class":150},[91,127881,1268],{"class":101},[91,127883,127884],{"class":93,"line":1172},[91,127885,1543],{"class":101},[5105,127887,127888],{},"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":10,"searchDepth":11,"depth":11,"links":127890},[127891,127896,127900],{"id":127266,"depth":11,"text":127267,"children":127892},[127893,127894,127895],{"id":127270,"depth":1157,"text":127271},{"id":127354,"depth":1157,"text":127355},{"id":127402,"depth":1157,"text":127403},{"id":127492,"depth":11,"text":127493,"children":127897},[127898,127899],{"id":127496,"depth":1157,"text":127497},{"id":127569,"depth":1157,"text":127570},{"id":127579,"depth":11,"text":127580,"children":127901},[127902,127903,127904,127905,127906],{"id":127583,"depth":1157,"text":127584},{"id":127636,"depth":1157,"text":127637},{"id":127652,"depth":1157,"text":127653},{"id":127672,"depth":1157,"text":127673},{"id":127834,"depth":1157,"text":127907},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127258,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127914,"title":127915,"body":127916,"description":13,"extension":14,"meta":129839,"navigation":17,"path":129840,"seo":129841,"stem":129842,"__hash__":129843},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127917,"toc":129813},[127918,127921,127925,127934,127938,127964,127969,127972,127975,127978,127981,127985,127988,127998,128006,128010,128045,128050,128053,128056,128059,128062,128066,128069,128078,128082,128095,128100,128103,128106,128109,128113,128116,128120,128123,128178,128181,128212,128215,128269,128273,128276,128442,128565,128568,128571,128574,128577,128581,128584,128588,128591,128594,128598,128601,128632,128659,128687,128690,128694,128720,128763,128767,128861,128864,128891,128894,128897,128900,128903,128906,128909,128912,128915,128918,128922,128979,129006,129010,129058,129062,129103,129105,129108,129111,129114,129117,129121,129213,129216,129219,129222,129226,129349,129550,129554,129558,129561,129564,129567,129571,129574,129577,129602,129605,129608,129611,129614,129617,129621,129629,129691,129694,129752,129755,129758,129761,129764,129767,129770,129773,129810],[29,127919,127915],{"id":127920},"_8-css显示模式与背景特性",[33,127922,127924],{"id":127923},"_81-css元素显示模式","8.1 css元素显示模式",[38,127926,127927,127928,127930,127931,127933],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[88,127929,126138],{},"自己占一行，比如一行可以放多个",[88,127932,126141],{},"，HTML 元素一般分为块元素和行内元素两种类型",[63,127935,127937],{"id":127936},"_811-块元素","8.1.1 块元素",[38,127939,127940,127941,127943,127944,314,127947,314,127949,314,127951,314,127954,314,127957,127960,127961,127963],{},"常见的块元素有",[88,127942,126042],{},"~",[88,127945,127946],{},"\u003Ch6>",[88,127948,126068],{},[88,127950,126138],{},[88,127952,127953],{},"\u003Cul>",[88,127955,127956],{},"\u003Col>",[88,127958,127959],{},"\u003Cli>","等，其中 ",[88,127962,126138],{}," 标签是最典型的块元素",[38,127965,127966],{},[251,127967,127968],{},"块级元素的特点：",[38,127970,127971],{},"① 比较霸道，自己独占一行。",[38,127973,127974],{},"② 高度，宽度、外边距以及内边距都可以控制。",[38,127976,127977],{},"③ 宽度默认是容器（父级宽度）的100%。",[38,127979,127980],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[38,127982,127983],{},[251,127984,131],{},[38,127986,127987],{},"①文字类的元素内不能使用块级元素",[38,127989,77224,127990,127992,127993,127995,127996],{},[88,127991,126068],{}," 标签主要用于存放文字，因此 ",[88,127994,126068],{}," 里面不能放块级元素，特别是不能放",[88,127997,126138],{},[38,127999,128000,128001,127943,128003,128005],{},"⑥同理， ",[88,128002,126042],{},[88,128004,127946],{},"等都是文字类块级标签，里面也不能放其他块级元素",[63,128007,128009],{"id":128008},"_812-行内元素","8.1.2 行内元素",[38,128011,128012,128013,314,128015,314,128018,314,128021,314,128024,314,128027,314,128030,314,128033,314,128036,314,128039,128041,128042,128044],{},"常见的行内元素有 ",[88,128014,126300],{},[88,128016,128017],{},"\u003Cstrong>",[88,128019,128020],{},"\u003Cb>",[88,128022,128023],{},"\u003Cem>",[88,128025,128026],{},"\u003Ci>",[88,128028,128029],{},"\u003Cdel>",[88,128031,128032],{},"\u003Cs>",[88,128034,128035],{},"\u003Cins>",[88,128037,128038],{},"\u003Cu>",[88,128040,126141],{}," 等，其中 ",[88,128043,126141],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[38,128046,128047],{},[251,128048,128049],{},"特点：",[38,128051,128052],{},"① 相邻行内元素在一行上，一行可以显示多个。",[38,128054,128055],{},"② 高、宽直接设置是无效的。",[38,128057,128058],{},"③ 默认宽度就是它本身内容的宽度。",[38,128060,128061],{},"④ 行内元素只能容纳文本或其他行内元素。",[38,128063,128064],{},[251,128065,131],{},[38,128067,128068],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[38,128070,128071,128072,128074,128075,128077],{},"②特殊情况链接 ",[88,128073,126300],{}," 里面可以放块级元素，但是给 ",[88,128076,126300],{}," 转换一下块级模式最安全",[63,128079,128081],{"id":128080},"_813-行内块元素","8.1.3 行内块元素",[38,128083,128084,128085,314,128088,314,128091,128094],{},"在行内元素中有几个特殊的标签 —— ",[88,128086,128087],{},"\u003Cimg \u002F>",[88,128089,128090],{},"\u003Cinput \u002F>",[88,128092,128093],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[38,128096,128097],{},[251,128098,128099],{},"行内块元素的特点：",[38,128101,128102],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[38,128104,128105],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[38,128107,128108],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[63,128110,128112],{"id":128111},"_814-总结","8.1.4 总结",[1440,128114],{"style":126383,"src":128115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[63,128117,128119],{"id":128118},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[38,128121,128122],{},"①转换为块元素：display:block;",[83,128124,128126],{"className":126527,"code":128125,"language":126529,"meta":10,"style":10},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[88,128127,128128,128133,128139,128150,128162,128174],{"__ignoreMap":10},[91,128129,128130],{"class":93,"line":94},[91,128131,128132],{"class":160},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[91,128134,128135,128137],{"class":93,"line":11},[91,128136,340],{"class":51275},[91,128138,15551],{"class":101},[91,128140,128141,128144,128146,128148],{"class":93,"line":1157},[91,128142,128143],{"class":150},"  display",[91,128145,51412],{"class":101},[91,128147,60844],{"class":150},[91,128149,1268],{"class":101},[91,128151,128152,128154,128156,128158,128160],{"class":93,"line":1172},[91,128153,70543],{"class":150},[91,128155,51412],{"class":101},[91,128157,413],{"class":150},[91,128159,51467],{"class":97},[91,128161,1268],{"class":101},[91,128163,128164,128166,128168,128170,128172],{"class":93,"line":1178},[91,128165,70763],{"class":150},[91,128167,51412],{"class":101},[91,128169,503],{"class":150},[91,128171,51467],{"class":97},[91,128173,1268],{"class":101},[91,128175,128176],{"class":93,"line":1192},[91,128177,1543],{"class":101},[38,128179,128180],{},"②转换为行内元素：display:inline;",[83,128182,128184],{"className":126527,"code":128183,"language":126529,"meta":10,"style":10},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[88,128185,128186,128191,128197,128208],{"__ignoreMap":10},[91,128187,128188],{"class":93,"line":94},[91,128189,128190],{"class":160},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[91,128192,128193,128195],{"class":93,"line":11},[91,128194,51586],{"class":51275},[91,128196,15551],{"class":101},[91,128198,128199,128201,128203,128206],{"class":93,"line":1157},[91,128200,128143],{"class":150},[91,128202,51412],{"class":101},[91,128204,128205],{"class":150},"inline",[91,128207,1268],{"class":101},[91,128209,128210],{"class":93,"line":1172},[91,128211,1543],{"class":101},[38,128213,128214],{},"③转换为行内块：display:inline-block;",[83,128216,128218],{"className":126527,"code":128217,"language":126529,"meta":10,"style":10},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[88,128219,128220,128225,128231,128241,128253,128265],{"__ignoreMap":10},[91,128221,128222],{"class":93,"line":94},[91,128223,128224],{"class":160},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[91,128226,128227,128229],{"class":93,"line":11},[91,128228,91],{"class":51275},[91,128230,15551],{"class":101},[91,128232,128233,128235,128237,128239],{"class":93,"line":1157},[91,128234,128143],{"class":150},[91,128236,51412],{"class":101},[91,128238,72358],{"class":150},[91,128240,1268],{"class":101},[91,128242,128243,128245,128247,128249,128251],{"class":93,"line":1172},[91,128244,70543],{"class":150},[91,128246,51412],{"class":101},[91,128248,714],{"class":150},[91,128250,51467],{"class":97},[91,128252,1268],{"class":101},[91,128254,128255,128257,128259,128261,128263],{"class":93,"line":1178},[91,128256,70763],{"class":150},[91,128258,51412],{"class":101},[91,128260,1053],{"class":150},[91,128262,51467],{"class":97},[91,128264,1268],{"class":101},[91,128266,128267],{"class":93,"line":1192},[91,128268,1543],{"class":101},[63,128270,128272],{"id":128271},"_816-小米侧边栏","8.1.6 小米侧边栏",[1440,128274],{"style":126383,"src":128275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[83,128277,128279],{"className":127274,"code":128278,"language":127276,"meta":10,"style":10},"\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",[88,128280,128281,128286,128301,128320,128339,128358,128377,128396,128415,128434],{"__ignoreMap":10},[91,128282,128283],{"class":93,"line":94},[91,128284,128285],{"class":160},"\u003C!-- 小米侧边栏案例 -->\n",[91,128287,128288,128290,128292,128294,128296,128299],{"class":93,"line":11},[91,128289,1012],{"class":101},[91,128291,51586],{"class":51275},[91,128293,53461],{"class":1941},[91,128295,147],{"class":101},[91,128297,128298],{"class":206},"\"sidebar\"",[91,128300,51282],{"class":101},[91,128302,128303,128305,128307,128309,128311,128313,128316,128318],{"class":93,"line":1157},[91,128304,52119],{"class":101},[91,128306,340],{"class":51275},[91,128308,61032],{"class":1941},[91,128310,147],{"class":101},[91,128312,61037],{"class":206},[91,128314,128315],{"class":101},">手机 电话卡\u003C\u002F",[91,128317,340],{"class":51275},[91,128319,51282],{"class":101},[91,128321,128322,128324,128326,128328,128330,128332,128335,128337],{"class":93,"line":1172},[91,128323,52119],{"class":101},[91,128325,340],{"class":51275},[91,128327,61032],{"class":1941},[91,128329,147],{"class":101},[91,128331,61037],{"class":206},[91,128333,128334],{"class":101},">电视 盒子\u003C\u002F",[91,128336,340],{"class":51275},[91,128338,51282],{"class":101},[91,128340,128341,128343,128345,128347,128349,128351,128354,128356],{"class":93,"line":1178},[91,128342,52119],{"class":101},[91,128344,340],{"class":51275},[91,128346,61032],{"class":1941},[91,128348,147],{"class":101},[91,128350,61037],{"class":206},[91,128352,128353],{"class":101},">笔记本 平板\u003C\u002F",[91,128355,340],{"class":51275},[91,128357,51282],{"class":101},[91,128359,128360,128362,128364,128366,128368,128370,128373,128375],{"class":93,"line":1192},[91,128361,52119],{"class":101},[91,128363,340],{"class":51275},[91,128365,61032],{"class":1941},[91,128367,147],{"class":101},[91,128369,61037],{"class":206},[91,128371,128372],{"class":101},">出行 穿戴\u003C\u002F",[91,128374,340],{"class":51275},[91,128376,51282],{"class":101},[91,128378,128379,128381,128383,128385,128387,128389,128392,128394],{"class":93,"line":1198},[91,128380,52119],{"class":101},[91,128382,340],{"class":51275},[91,128384,61032],{"class":1941},[91,128386,147],{"class":101},[91,128388,61037],{"class":206},[91,128390,128391],{"class":101},">智能 路由器\u003C\u002F",[91,128393,340],{"class":51275},[91,128395,51282],{"class":101},[91,128397,128398,128400,128402,128404,128406,128408,128411,128413],{"class":93,"line":1289},[91,128399,52119],{"class":101},[91,128401,340],{"class":51275},[91,128403,61032],{"class":1941},[91,128405,147],{"class":101},[91,128407,61037],{"class":206},[91,128409,128410],{"class":101},">健康 儿童\u003C\u002F",[91,128412,340],{"class":51275},[91,128414,51282],{"class":101},[91,128416,128417,128419,128421,128423,128425,128427,128430,128432],{"class":93,"line":1295},[91,128418,52119],{"class":101},[91,128420,340],{"class":51275},[91,128422,61032],{"class":1941},[91,128424,147],{"class":101},[91,128426,61037],{"class":206},[91,128428,128429],{"class":101},">耳机 音响\u003C\u002F",[91,128431,340],{"class":51275},[91,128433,51282],{"class":101},[91,128435,128436,128438,128440],{"class":93,"line":1307},[91,128437,51760],{"class":101},[91,128439,51586],{"class":51275},[91,128441,51282],{"class":101},[83,128443,128445],{"className":126527,"code":128444,"language":126529,"meta":10,"style":10},".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",[88,128446,128447,128456,128466,128479,128491,128503,128515,128525,128536,128540,128550,128561],{"__ignoreMap":10},[91,128448,128449,128452,128454],{"class":93,"line":94},[91,128450,128451],{"class":1941},".sidebar",[91,128453,1376],{"class":51275},[91,128455,15551],{"class":101},[91,128457,128458,128460,128462,128464],{"class":93,"line":11},[91,128459,128143],{"class":150},[91,128461,51412],{"class":101},[91,128463,60844],{"class":150},[91,128465,1268],{"class":101},[91,128467,128468,128470,128472,128475,128477],{"class":93,"line":1157},[91,128469,70543],{"class":150},[91,128471,51412],{"class":101},[91,128473,128474],{"class":150},"234",[91,128476,51467],{"class":97},[91,128478,1268],{"class":101},[91,128480,128481,128483,128485,128487,128489],{"class":93,"line":1172},[91,128482,70763],{"class":150},[91,128484,51412],{"class":101},[91,128486,554],{"class":150},[91,128488,51467],{"class":97},[91,128490,1268],{"class":101},[91,128492,128493,128495,128497,128499,128501],{"class":93,"line":1178},[91,128494,127211],{"class":150},[91,128496,51412],{"class":101},[91,128498,554],{"class":150},[91,128500,51467],{"class":97},[91,128502,1268],{"class":101},[91,128504,128505,128507,128509,128511,128513],{"class":93,"line":1192},[91,128506,70798],{"class":150},[91,128508,51412],{"class":101},[91,128510,1053],{"class":150},[91,128512,51467],{"class":97},[91,128514,1268],{"class":101},[91,128516,128517,128519,128521,128523],{"class":93,"line":1198},[91,128518,70880],{"class":150},[91,128520,51412],{"class":101},[91,128522,60817],{"class":150},[91,128524,1268],{"class":101},[91,128526,128527,128529,128531,128534],{"class":93,"line":1289},[91,128528,70853],{"class":150},[91,128530,51412],{"class":101},[91,128532,128533],{"class":150},"#55585a",[91,128535,1268],{"class":101},[91,128537,128538],{"class":93,"line":1295},[91,128539,1543],{"class":101},[91,128541,128542,128544,128546,128548],{"class":93,"line":1307},[91,128543,128451],{"class":1941},[91,128545,1376],{"class":51275},[91,128547,60915],{"class":1941},[91,128549,15551],{"class":101},[91,128551,128552,128554,128556,128559],{"class":93,"line":1590},[91,128553,70853],{"class":150},[91,128555,51412],{"class":101},[91,128557,128558],{"class":150},"#ff6700",[91,128560,1268],{"class":101},[91,128562,128563],{"class":93,"line":1595},[91,128564,1543],{"class":101},[1440,128566],{"style":126383,"src":128567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[38,128569,128570],{},"行高=盒子高度：实现文字的垂直居中",[38,128572,128573],{},"原理讲解：",[1440,128575],{"style":126383,"src":128576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[33,128578,128580],{"id":128579},"_82-css背景","8.2 css背景",[38,128582,128583],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[63,128585,128587],{"id":128586},"_821-背景颜色","8.2.1 背景颜色",[38,128589,128590],{},"background-color:颜色值;",[38,128592,128593],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[63,128595,128597],{"id":128596},"_822-背景图片","8.2.2 背景图片",[38,128599,128600],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[83,128602,128604],{"className":126527,"code":128603,"language":126529,"meta":10,"style":10},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[88,128605,128606,128612,128628],{"__ignoreMap":10},[91,128607,128608,128610],{"class":93,"line":94},[91,128609,51586],{"class":51275},[91,128611,15551],{"class":101},[91,128613,128614,128617,128619,128621,128623,128626],{"class":93,"line":11},[91,128615,128616],{"class":150},"  background-image",[91,128618,51412],{"class":101},[91,128620,61701],{"class":150},[91,128622,102],{"class":101},[91,128624,128625],{"class":5195},"images\u002Fbg.png",[91,128627,2697],{"class":101},[91,128629,128630],{"class":93,"line":1157},[91,128631,1543],{"class":101},[239,128633,128634,128643],{},[242,128635,128636],{},[245,128637,128638,128641],{},[248,128639,128640],{"align":23710},"参数值",[248,128642,102671],{"align":23710},[286,128644,128645,128652],{},[245,128646,128647,128649],{},[291,128648,54712],{"align":23710},[291,128650,128651],{"align":23710},"无背景图（默认的）",[245,128653,128654,128656],{},[291,128655,61701],{"align":23710},[291,128657,128658],{"align":23710},"使用绝对或相对地址指定背景图像",[83,128660,128661],{"className":126527,"code":128603,"language":126529,"meta":10,"style":10},[88,128662,128663,128669,128683],{"__ignoreMap":10},[91,128664,128665,128667],{"class":93,"line":94},[91,128666,51586],{"class":51275},[91,128668,15551],{"class":101},[91,128670,128671,128673,128675,128677,128679,128681],{"class":93,"line":11},[91,128672,128616],{"class":150},[91,128674,51412],{"class":101},[91,128676,61701],{"class":150},[91,128678,102],{"class":101},[91,128680,128625],{"class":5195},[91,128682,2697],{"class":101},[91,128684,128685],{"class":93,"line":1157},[91,128686,1543],{"class":101},[38,128688,128689],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[63,128691,128693],{"id":128692},"_823-背景平铺","8.2.3 背景平铺",[83,128695,128697],{"className":126527,"code":128696,"language":126529,"meta":10,"style":10},"div {\n  background-repeat: no-repeat;\n}\n",[88,128698,128699,128705,128716],{"__ignoreMap":10},[91,128700,128701,128703],{"class":93,"line":94},[91,128702,51586],{"class":51275},[91,128704,15551],{"class":101},[91,128706,128707,128710,128712,128714],{"class":93,"line":11},[91,128708,128709],{"class":150},"  background-repeat",[91,128711,51412],{"class":101},[91,128713,61711],{"class":150},[91,128715,1268],{"class":101},[91,128717,128718],{"class":93,"line":1157},[91,128719,1543],{"class":101},[239,128721,128722,128730],{},[242,128723,128724],{},[245,128725,128726,128728],{},[248,128727,128640],{"align":23710},[248,128729,102671],{"align":23710},[286,128731,128732,128740,128747,128755],{},[245,128733,128734,128737],{},[291,128735,128736],{"align":23710},"repeat",[291,128738,128739],{"align":23710},"背景图像在纵向和横向上平铺（默认的）",[245,128741,128742,128744],{},[291,128743,61711],{"align":23710},[291,128745,128746],{"align":23710},"背景图像不平铺",[245,128748,128749,128752],{},[291,128750,128751],{"align":23710},"repeat-x",[291,128753,128754],{"align":23710},"背景图像在横向上平铺",[245,128756,128757,128760],{},[291,128758,128759],{"align":23710},"repeat-y",[291,128761,128762],{"align":23710},"背景图像在纵向平铺",[63,128764,128766],{"id":128765},"_824-背景图片位置","8.2.4 背景图片位置",[83,128768,128770],{"className":126527,"code":128769,"language":126529,"meta":10,"style":10},"\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",[88,128771,128772,128777,128783,128797,128801,128806,128812,128828,128832,128837,128843,128857],{"__ignoreMap":10},[91,128773,128774],{"class":93,"line":94},[91,128775,128776],{"class":160},"\u002F* 方位名词 *\u002F\n",[91,128778,128779,128781],{"class":93,"line":11},[91,128780,51586],{"class":51275},[91,128782,15551],{"class":101},[91,128784,128785,128788,128790,128792,128795],{"class":93,"line":1157},[91,128786,128787],{"class":150},"  background-position",[91,128789,51412],{"class":101},[91,128791,51567],{"class":150},[91,128793,128794],{"class":150}," top",[91,128796,1268],{"class":101},[91,128798,128799],{"class":93,"line":1172},[91,128800,1543],{"class":101},[91,128802,128803],{"class":93,"line":1178},[91,128804,128805],{"class":160},"\u002F* 精确单位 *\u002F\n",[91,128807,128808,128810],{"class":93,"line":1192},[91,128809,51586],{"class":51275},[91,128811,15551],{"class":101},[91,128813,128814,128816,128818,128820,128822,128824,128826],{"class":93,"line":1198},[91,128815,128787],{"class":150},[91,128817,51412],{"class":101},[91,128819,802],{"class":150},[91,128821,51467],{"class":97},[91,128823,57479],{"class":150},[91,128825,51467],{"class":97},[91,128827,1268],{"class":101},[91,128829,128830],{"class":93,"line":1289},[91,128831,1543],{"class":101},[91,128833,128834],{"class":93,"line":1295},[91,128835,128836],{"class":160},"\u002F* 混合单位 *\u002F\n",[91,128838,128839,128841],{"class":93,"line":1307},[91,128840,51586],{"class":51275},[91,128842,15551],{"class":101},[91,128844,128845,128847,128849,128851,128853,128855],{"class":93,"line":1590},[91,128846,128787],{"class":150},[91,128848,51412],{"class":101},[91,128850,802],{"class":150},[91,128852,51467],{"class":97},[91,128854,17123],{"class":150},[91,128856,1268],{"class":101},[91,128858,128859],{"class":93,"line":1595},[91,128860,1543],{"class":101},[38,128862,128863],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[239,128865,128866,128874],{},[242,128867,128868],{},[245,128869,128870,128872],{},[248,128871,128640],{"align":23710},[248,128873,25844],{"align":23710},[286,128875,128876,128883],{},[245,128877,128878,128880],{},[291,128879,51943],{"align":23710},[291,128881,128882],{"align":23710},"百分数|由浮点数和单位标识符组成的长度值",[245,128884,128885,128888],{},[291,128886,128887],{"align":23710},"position",[291,128889,128890],{"align":23710},"top|center|bottom|left|center|right 方位名词",[38,128892,128893],{},"其他说明：",[38,128895,128896],{},"①参数是方位名词",[38,128898,128899],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[38,128901,128902],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[38,128904,128905],{},"②参数是精确单位",[38,128907,128908],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[38,128910,128911],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[38,128913,128914],{},"③参数是混合单位",[38,128916,128917],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[63,128919,128921],{"id":128920},"_825-背景图片固定","8.2.5 背景图片固定",[83,128923,128925],{"className":126527,"code":128924,"language":126529,"meta":10,"style":10},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[88,128926,128927,128932,128938,128950,128954,128959,128965,128975],{"__ignoreMap":10},[91,128928,128929],{"class":93,"line":94},[91,128930,128931],{"class":160},"\u002F* 背景滚动（默认） *\u002F\n",[91,128933,128934,128936],{"class":93,"line":11},[91,128935,51586],{"class":51275},[91,128937,15551],{"class":101},[91,128939,128940,128943,128945,128948],{"class":93,"line":1157},[91,128941,128942],{"class":150},"  background-attachment",[91,128944,51412],{"class":101},[91,128946,128947],{"class":150},"scroll",[91,128949,1268],{"class":101},[91,128951,128952],{"class":93,"line":1172},[91,128953,1543],{"class":101},[91,128955,128956],{"class":93,"line":1178},[91,128957,128958],{"class":160},"\u002F* 背景固定 *\u002F\n",[91,128960,128961,128963],{"class":93,"line":1192},[91,128962,51586],{"class":51275},[91,128964,15551],{"class":101},[91,128966,128967,128969,128971,128973],{"class":93,"line":1198},[91,128968,128942],{"class":150},[91,128970,51412],{"class":101},[91,128972,86208],{"class":150},[91,128974,1268],{"class":101},[91,128976,128977],{"class":93,"line":1289},[91,128978,1543],{"class":101},[239,128980,128981,128990],{},[242,128982,128983],{},[245,128984,128985,128988],{},[248,128986,128987],{"align":23710},"参数",[248,128989,102671],{"align":23710},[286,128991,128992,128999],{},[245,128993,128994,128996],{},[291,128995,128947],{"align":23710},[291,128997,128998],{"align":23710},"背景图像是随对象内容滚动",[245,129000,129001,129003],{},[291,129002,86208],{"align":23710},[291,129004,129005],{"align":23710},"背景图像固定",[63,129007,129009],{"id":129008},"_826-背景样式合写","8.2.6 背景样式合写",[83,129011,129013],{"className":126527,"code":129012,"language":126529,"meta":10,"style":10},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[88,129014,129015,129020,129026,129054],{"__ignoreMap":10},[91,129016,129017],{"class":93,"line":94},[91,129018,129019],{"class":160},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[91,129021,129022,129024],{"class":93,"line":11},[91,129023,51586],{"class":51275},[91,129025,15551],{"class":101},[91,129027,129028,129030,129032,129034,129037,129039,129041,129043,129045,129048,129050,129052],{"class":93,"line":1157},[91,129029,70586],{"class":150},[91,129031,51412],{"class":101},[91,129033,60817],{"class":150},[91,129035,129036],{"class":150}," url",[91,129038,102],{"class":101},[91,129040,128625],{"class":5195},[91,129042,13693],{"class":101},[91,129044,61711],{"class":150},[91,129046,129047],{"class":150}," fixed",[91,129049,17123],{"class":150},[91,129051,128794],{"class":150},[91,129053,1268],{"class":101},[91,129055,129056],{"class":93,"line":1172},[91,129057,1543],{"class":101},[63,129059,129061],{"id":129060},"_827-背景色半透明","8.2.7 背景色半透明",[83,129063,129065],{"className":126527,"code":129064,"language":126529,"meta":10,"style":10},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[88,129066,129067,129073,129099],{"__ignoreMap":10},[91,129068,129069,129071],{"class":93,"line":94},[91,129070,51586],{"class":51275},[91,129072,15551],{"class":101},[91,129074,129075,129077,129079,129081,129083,129085,129087,129089,129091,129093,129095,129097],{"class":93,"line":11},[91,129076,70586],{"class":150},[91,129078,51412],{"class":101},[91,129080,55085],{"class":150},[91,129082,102],{"class":101},[91,129084,293],{"class":150},[91,129086,12414],{"class":101},[91,129088,293],{"class":150},[91,129090,12414],{"class":101},[91,129092,293],{"class":150},[91,129094,12414],{"class":101},[91,129096,100496],{"class":150},[91,129098,2697],{"class":101},[91,129100,129101],{"class":93,"line":1157},[91,129102,1543],{"class":101},[38,129104,99371],{},[38,129106,129107],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[38,129109,129110],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[38,129112,129113],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[38,129115,129116],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[63,129118,129120],{"id":129119},"_828-总结","8.2.8 总结",[239,129122,129123,129134],{},[242,129124,129125],{},[245,129126,129127,129130,129132],{},[248,129128,129129],{"align":23710},"属性",[248,129131,102671],{"align":23710},[248,129133,254],{"align":23710},[286,129135,129136,129147,129158,129169,129180,129191,129202],{},[245,129137,129138,129141,129144],{},[291,129139,129140],{"align":23710},"background-color",[291,129142,129143],{"align":23710},"背景颜色",[291,129145,129146],{"align":23710},"预定义的颜色值\u002F十六进制\u002FRGB代码",[245,129148,129149,129152,129155],{},[291,129150,129151],{"align":23710},"background-image",[291,129153,129154],{"align":23710},"背景图片",[291,129156,129157],{"align":23710},"url(图片路径)",[245,129159,129160,129163,129166],{},[291,129161,129162],{"align":23710},"background-repeat",[291,129164,129165],{"align":23710},"是否平铺",[291,129167,129168],{"align":23710},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[245,129170,129171,129174,129177],{},[291,129172,129173],{"align":23710},"background-position",[291,129175,129176],{"align":23710},"背景位置",[291,129178,129179],{"align":23710},"length\u002Fposition 分别是x和y坐标",[245,129181,129182,129185,129188],{},[291,129183,129184],{"align":23710},"background-attachment",[291,129186,129187],{"align":23710},"背景附着",[291,129189,129190],{"align":23710},"scroll(背景滚动) \u002Ffixed (背景固定)",[245,129192,129193,129196,129199],{},[291,129194,129195],{"align":23710},"背景简写",[291,129197,129198],{"align":23710},"书写更简单",[291,129200,129201],{"align":23710},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[245,129203,129204,129207,129210],{},[291,129205,129206],{"align":23710},"背景半透明",[291,129208,129209],{"align":23710},"背景颜色半透明",[291,129211,129212],{"align":23710},"background: rgba(0,0,0.3); 后面必须是4个值",[38,129214,129215],{},"颜色渐变：",[1440,129217],{"style":126383,"src":129218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1440,129220],{"style":126383,"src":129221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[63,129223,129225],{"id":129224},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[83,129227,129229],{"className":127274,"code":129228,"language":127276,"meta":10,"style":10},"\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",[88,129230,129231,129246,129265,129284,129303,129322,129341],{"__ignoreMap":10},[91,129232,129233,129235,129237,129239,129241,129244],{"class":93,"line":94},[91,129234,1012],{"class":101},[91,129236,51586],{"class":51275},[91,129238,53461],{"class":1941},[91,129240,147],{"class":101},[91,129242,129243],{"class":206},"\"nav\"",[91,129245,51282],{"class":101},[91,129247,129248,129250,129252,129254,129256,129258,129261,129263],{"class":93,"line":11},[91,129249,52119],{"class":101},[91,129251,340],{"class":51275},[91,129253,61032],{"class":1941},[91,129255,147],{"class":101},[91,129257,61037],{"class":206},[91,129259,129260],{"class":101},">五彩导航1\u003C\u002F",[91,129262,340],{"class":51275},[91,129264,51282],{"class":101},[91,129266,129267,129269,129271,129273,129275,129277,129280,129282],{"class":93,"line":1157},[91,129268,52119],{"class":101},[91,129270,340],{"class":51275},[91,129272,61032],{"class":1941},[91,129274,147],{"class":101},[91,129276,61037],{"class":206},[91,129278,129279],{"class":101},">五彩导航2\u003C\u002F",[91,129281,340],{"class":51275},[91,129283,51282],{"class":101},[91,129285,129286,129288,129290,129292,129294,129296,129299,129301],{"class":93,"line":1172},[91,129287,52119],{"class":101},[91,129289,340],{"class":51275},[91,129291,61032],{"class":1941},[91,129293,147],{"class":101},[91,129295,61037],{"class":206},[91,129297,129298],{"class":101},">五彩导航3\u003C\u002F",[91,129300,340],{"class":51275},[91,129302,51282],{"class":101},[91,129304,129305,129307,129309,129311,129313,129315,129318,129320],{"class":93,"line":1178},[91,129306,52119],{"class":101},[91,129308,340],{"class":51275},[91,129310,61032],{"class":1941},[91,129312,147],{"class":101},[91,129314,61037],{"class":206},[91,129316,129317],{"class":101},">五彩导航4\u003C\u002F",[91,129319,340],{"class":51275},[91,129321,51282],{"class":101},[91,129323,129324,129326,129328,129330,129332,129334,129337,129339],{"class":93,"line":1192},[91,129325,52119],{"class":101},[91,129327,340],{"class":51275},[91,129329,61032],{"class":1941},[91,129331,147],{"class":101},[91,129333,61037],{"class":206},[91,129335,129336],{"class":101},">五彩导航5\u003C\u002F",[91,129338,340],{"class":51275},[91,129340,51282],{"class":101},[91,129342,129343,129345,129347],{"class":93,"line":1198},[91,129344,51760],{"class":101},[91,129346,51586],{"class":51275},[91,129348,51282],{"class":101},[83,129350,129352],{"className":126527,"code":129351,"language":126529,"meta":10,"style":10},".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",[88,129353,129354,129363,129373,129385,129397,129407,129419,129429,129433,129458,129481,129504,129527],{"__ignoreMap":10},[91,129355,129356,129359,129361],{"class":93,"line":94},[91,129357,129358],{"class":1941},".nav",[91,129360,1376],{"class":51275},[91,129362,15551],{"class":101},[91,129364,129365,129367,129369,129371],{"class":93,"line":11},[91,129366,128143],{"class":150},[91,129368,51412],{"class":101},[91,129370,72358],{"class":150},[91,129372,1268],{"class":101},[91,129374,129375,129377,129379,129381,129383],{"class":93,"line":1157},[91,129376,70543],{"class":150},[91,129378,51412],{"class":101},[91,129380,919],{"class":150},[91,129382,51467],{"class":97},[91,129384,1268],{"class":101},[91,129386,129387,129389,129391,129393,129395],{"class":93,"line":1172},[91,129388,70763],{"class":150},[91,129390,51412],{"class":101},[91,129392,958],{"class":150},[91,129394,51467],{"class":97},[91,129396,1268],{"class":101},[91,129398,129399,129401,129403,129405],{"class":93,"line":1178},[91,129400,70501],{"class":150},[91,129402,51412],{"class":101},[91,129404,51567],{"class":150},[91,129406,1268],{"class":101},[91,129408,129409,129411,129413,129415,129417],{"class":93,"line":1192},[91,129410,127211],{"class":150},[91,129412,51412],{"class":101},[91,129414,958],{"class":150},[91,129416,51467],{"class":97},[91,129418,1268],{"class":101},[91,129420,129421,129423,129425,129427],{"class":93,"line":1198},[91,129422,70880],{"class":150},[91,129424,51412],{"class":101},[91,129426,60817],{"class":150},[91,129428,1268],{"class":101},[91,129430,129431],{"class":93,"line":1289},[91,129432,1543],{"class":101},[91,129434,129435,129437,129439,129442,129444,129446,129449,129451,129453,129455],{"class":93,"line":1295},[91,129436,129358],{"class":1941},[91,129438,1376],{"class":51275},[91,129440,129441],{"class":1941},":nth-child",[91,129443,102],{"class":101},[91,129445,319],{"class":150},[91,129447,129448],{"class":101},") { ",[91,129450,129140],{"class":150},[91,129452,51412],{"class":101},[91,129454,128558],{"class":150},[91,129456,129457],{"class":101},"; }\n",[91,129459,129460,129462,129464,129466,129468,129470,129472,129474,129476,129479],{"class":93,"line":1307},[91,129461,129358],{"class":1941},[91,129463,1376],{"class":51275},[91,129465,129441],{"class":1941},[91,129467,102],{"class":101},[91,129469,179],{"class":150},[91,129471,129448],{"class":101},[91,129473,129140],{"class":150},[91,129475,51412],{"class":101},[91,129477,129478],{"class":150},"#ff0000",[91,129480,129457],{"class":101},[91,129482,129483,129485,129487,129489,129491,129493,129495,129497,129499,129502],{"class":93,"line":1590},[91,129484,129358],{"class":1941},[91,129486,1376],{"class":51275},[91,129488,129441],{"class":1941},[91,129490,102],{"class":101},[91,129492,173],{"class":150},[91,129494,129448],{"class":101},[91,129496,129140],{"class":150},[91,129498,51412],{"class":101},[91,129500,129501],{"class":150},"#00a4ff",[91,129503,129457],{"class":101},[91,129505,129506,129508,129510,129512,129514,129516,129518,129520,129522,129525],{"class":93,"line":1595},[91,129507,129358],{"class":1941},[91,129509,1376],{"class":51275},[91,129511,129441],{"class":1941},[91,129513,102],{"class":101},[91,129515,395],{"class":150},[91,129517,129448],{"class":101},[91,129519,129140],{"class":150},[91,129521,51412],{"class":101},[91,129523,129524],{"class":150},"#ff00ff",[91,129526,129457],{"class":101},[91,129528,129529,129531,129533,129535,129537,129539,129541,129543,129545,129548],{"class":93,"line":1601},[91,129530,129358],{"class":1941},[91,129532,1376],{"class":51275},[91,129534,129441],{"class":1941},[91,129536,102],{"class":101},[91,129538,421],{"class":150},[91,129540,129448],{"class":101},[91,129542,129140],{"class":150},[91,129544,51412],{"class":101},[91,129546,129547],{"class":150},"#00ff00",[91,129549,129457],{"class":101},[33,129551,129553],{"id":129552},"_83-css三大特性","8.3 css三大特性",[63,129555,129557],{"id":129556},"_831-层叠性","8.3.1 层叠性",[38,129559,129560],{},"为了解决样式冲突问题",[38,129562,129563],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[38,129565,129566],{},"   ②样式不冲突，不会层叠",[63,129568,129570],{"id":129569},"_832-继承性","8.3.2 继承性",[38,129572,129573],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[38,129575,129576],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[83,129578,129580],{"className":126527,"code":129579,"language":126529,"meta":10,"style":10},"p {\n  color: #333;\n}\n",[88,129581,129582,129588,129598],{"__ignoreMap":10},[91,129583,129584,129586],{"class":93,"line":94},[91,129585,38],{"class":51275},[91,129587,15551],{"class":101},[91,129589,129590,129592,129594,129596],{"class":93,"line":11},[91,129591,70880],{"class":150},[91,129593,51412],{"class":101},[91,129595,62344],{"class":150},[91,129597,1268],{"class":101},[91,129599,129600],{"class":93,"line":1157},[91,129601,1543],{"class":101},[1440,129603],{"style":126383,"src":129604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[38,129606,129607],{},"解释：①行高可以跟单位也可以不跟单位",[38,129609,129610],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[38,129612,129613],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[38,129615,129616],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[63,129618,129620],{"id":129619},"_833-优先级","8.3.3 优先级",[46,129622,129623,129626],{},[49,129624,129625],{},"选择器相同，则执行层叠性",[49,129627,129628],{},"选择器不同，则根据选择器权重执行",[239,129630,129631,129641],{},[242,129632,129633],{},[245,129634,129635,129638],{},[248,129636,129637],{"align":23710},"选择器",[248,129639,129640],{"align":23710},"选择器权重",[286,129642,129643,129651,129659,129667,129675,129683],{},[245,129644,129645,129648],{},[291,129646,129647],{"align":23710},"继承 或者*",[291,129649,129650],{"align":23710},"0，0，0，0",[245,129652,129653,129656],{},[291,129654,129655],{"align":23710},"标签选择器",[291,129657,129658],{"align":23710},"0，0，0，1",[245,129660,129661,129664],{},[291,129662,129663],{"align":23710},"类选择器，伪类选择器",[291,129665,129666],{"align":23710},"0，0，1，0",[245,129668,129669,129672],{},[291,129670,129671],{"align":23710},"ID选择器",[291,129673,129674],{"align":23710},"0，1，0，0",[245,129676,129677,129680],{},[291,129678,129679],{"align":23710},"行内样式",[291,129681,129682],{"align":23710},"1，0，0，0",[245,129684,129685,129688],{},[291,129686,129687],{"align":23710},"！important",[291,129689,129690],{"align":23710},"无穷大",[38,129692,129693],{},"! important用法：",[83,129695,129697],{"className":126527,"code":129696,"language":126529,"meta":10,"style":10},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[88,129698,129699,129704,129710,129723,129727,129732,129738,129748],{"__ignoreMap":10},[91,129700,129701],{"class":93,"line":94},[91,129702,129703],{"class":160},"\u002F* !important 拥有最高优先级 *\u002F\n",[91,129705,129706,129708],{"class":93,"line":11},[91,129707,51586],{"class":51275},[91,129709,15551],{"class":101},[91,129711,129712,129714,129716,129718,129721],{"class":93,"line":1157},[91,129713,70880],{"class":150},[91,129715,51412],{"class":101},[91,129717,51620],{"class":150},[91,129719,129720],{"class":97}," !important",[91,129722,1268],{"class":101},[91,129724,129725],{"class":93,"line":1172},[91,129726,1543],{"class":101},[91,129728,129729],{"class":93,"line":1178},[91,129730,129731],{"class":160},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[91,129733,129734,129736],{"class":93,"line":1192},[91,129735,51586],{"class":51275},[91,129737,15551],{"class":101},[91,129739,129740,129742,129744,129746],{"class":93,"line":1198},[91,129741,70880],{"class":150},[91,129743,51412],{"class":101},[91,129745,57396],{"class":150},[91,129747,1268],{"class":101},[91,129749,129750],{"class":93,"line":1289},[91,129751,1543],{"class":101},[38,129753,129754],{},"优先级注意点：",[38,129756,129757],{},"①权重是有4组数字组成,但是不会有进位",[38,129759,129760],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[38,129762,129763],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[38,129765,129766],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[38,129768,129769],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[38,129771,129772],{},"⑥复合选择器",[239,129774,129775,129785],{},[242,129776,129777],{},[245,129778,129779,129782],{},[248,129780,129781],{"align":23710},"div ul li",[248,129783,129784],{"align":23710},"0,0,0,3",[286,129786,129787,129795,129803],{},[245,129788,129789,129792],{},[291,129790,129791],{"align":23710},".nav ul li",[291,129793,129794],{"align":23710},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[245,129796,129797,129800],{},[291,129798,129799],{"align":23710},"a:hover",[291,129801,129802],{"align":23710},"0,0,1,1",[245,129804,129805,129808],{},[291,129806,129807],{"align":23710},".nav a",[291,129809,129802],{"align":23710},[5105,129811,129812],{},"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":10,"searchDepth":11,"depth":11,"links":129814},[129815,129823,129834],{"id":127923,"depth":11,"text":127924,"children":129816},[129817,129818,129819,129820,129821,129822],{"id":127936,"depth":1157,"text":127937},{"id":128008,"depth":1157,"text":128009},{"id":128080,"depth":1157,"text":128081},{"id":128111,"depth":1157,"text":128112},{"id":128118,"depth":1157,"text":128119},{"id":128271,"depth":1157,"text":128272},{"id":128579,"depth":11,"text":128580,"children":129824},[129825,129826,129827,129828,129829,129830,129831,129832,129833],{"id":128586,"depth":1157,"text":128587},{"id":128596,"depth":1157,"text":128597},{"id":128692,"depth":1157,"text":128693},{"id":128765,"depth":1157,"text":128766},{"id":128920,"depth":1157,"text":128921},{"id":129008,"depth":1157,"text":129009},{"id":129060,"depth":1157,"text":129061},{"id":129119,"depth":1157,"text":129120},{"id":129224,"depth":1157,"text":129225},{"id":129552,"depth":11,"text":129553,"children":129835},[129836,129837,129838],{"id":129556,"depth":1157,"text":129557},{"id":129569,"depth":1157,"text":129570},{"id":129619,"depth":1157,"text":129620},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127915,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129845,"title":129846,"body":129847,"description":13,"extension":14,"meta":131437,"navigation":17,"path":131438,"seo":131439,"stem":131440,"__hash__":131441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129848,"toc":131416},[129849,129852,129856,129859,129862,129865,129868,129871,129874,129877,129881,129889,129926,129962,129965,129979,129984,130018,130021,130114,130119,130122,130152,130155,130160,130168,130172,130179,130225,130269,130274,130277,130280,130283,130286,130289,130292,130294,130297,130301,130306,130350,130355,130358,130361,130398,130403,130406,130409,130412,130415,130447,130450,130453,130456,130488,130491,130494,130497,130501,130504,130536,130539,130543,130563,130566,130574,130577,130581,130586,130589,130621,130626,130629,130667,130671,130676,130679,130682,130713,130716,130733,130738,130790,130850,130855,130909,130947,130951,130955,130958,130962,130970,130973,130975,130986,130991,131039,131073,131076,131079,131082,131085,131129,131132,131135,131138,131141,131144,131147,131191,131194,131197,131200,131203,131206,131209,131215,131218,131262,131265,131268,131271,131274,131277,131321,131324,131326,131329,131333,131337,131375,131379,131382,131385,131389,131397,131401,131404,131407,131410,131413],[29,129850,129846],{"id":129851},"_9-css盒模型浮动与切图",[33,129853,129855],{"id":129854},"_91-盒子模型","9.1 盒子模型",[38,129857,129858],{},"利用盒子来设计网页",[38,129860,129861],{},"盒子包含：边框、外边距、内边距、实际内容",[38,129863,129864],{},"网页布局设置：",[38,129866,129867],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[38,129869,129870],{},"②利用css设置好盒子样式，然后摆放到相应位置",[38,129872,129873],{},"③往盒子里装内容",[1440,129875],{"style":126383,"src":129876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[63,129878,129880],{"id":129879},"_911-边框border","9.1.1 边框（border）",[46,129882,129883,129886],{},[49,129884,129885],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[49,129887,129888],{},"语法",[83,129890,129892],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[88,129893,129894,129899,129905,129922],{"__ignoreMap":10},[91,129895,129896],{"class":93,"line":94},[91,129897,129898],{"class":160},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[91,129900,129901,129903],{"class":93,"line":11},[91,129902,51586],{"class":51275},[91,129904,15551],{"class":101},[91,129906,129907,129909,129911,129913,129915,129917,129920],{"class":93,"line":1157},[91,129908,70871],{"class":150},[91,129910,51412],{"class":101},[91,129912,319],{"class":150},[91,129914,51467],{"class":97},[91,129916,51496],{"class":150},[91,129918,129919],{"class":150}," #ccc",[91,129921,1268],{"class":101},[91,129923,129924],{"class":93,"line":1172},[91,129925,1543],{"class":101},[239,129927,129928,129936],{},[242,129929,129930],{},[245,129931,129932,129934],{},[248,129933,129129],{"align":23710},[248,129935,102671],{"align":23710},[286,129937,129938,129946,129954],{},[245,129939,129940,129943],{},[291,129941,129942],{"align":23710},"border-width",[291,129944,129945],{"align":23710},"定义边框粗细，单位是px",[245,129947,129948,129951],{},[291,129949,129950],{"align":23710},"border-style",[291,129952,129953],{"align":23710},"边框的样式",[245,129955,129956,129959],{},[291,129957,129958],{"align":23710},"border-color",[291,129960,129961],{"align":23710},"边框的颜色",[38,129963,129964],{},"边框样式 border-style 可以设置如下值：",[1109,129966,129967,129970,129973,129976],{},[49,129968,129969],{},"none：没有边框即忽略所有边框的宽度（默认值）",[49,129971,129972],{},"solid：边框为单实线(最为常用的)",[49,129974,129975],{},"dashed：边框为虚线",[49,129977,129978],{},"dotted：边框为点线",[46,129980,129981],{"start":1157},[49,129982,129983],{},"边框的合写分写",[83,129985,129986],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[88,129987,129988,129992,129998,130014],{"__ignoreMap":10},[91,129989,129990],{"class":93,"line":94},[91,129991,129898],{"class":160},[91,129993,129994,129996],{"class":93,"line":11},[91,129995,51586],{"class":51275},[91,129997,15551],{"class":101},[91,129999,130000,130002,130004,130006,130008,130010,130012],{"class":93,"line":1157},[91,130001,70871],{"class":150},[91,130003,51412],{"class":101},[91,130005,319],{"class":150},[91,130007,51467],{"class":97},[91,130009,51496],{"class":150},[91,130011,129919],{"class":150},[91,130013,1268],{"class":101},[91,130015,130016],{"class":93,"line":1172},[91,130017,1543],{"class":101},[38,130019,130020],{},"边框分开写法：",[83,130022,130024],{"className":126527,"code":130023,"language":126529,"meta":10,"style":10},"\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",[88,130025,130026,130031,130037,130055,130073,130092,130110],{"__ignoreMap":10},[91,130027,130028],{"class":93,"line":94},[91,130029,130030],{"class":160},"\u002F* 边框分开写法 *\u002F\n",[91,130032,130033,130035],{"class":93,"line":11},[91,130034,51586],{"class":51275},[91,130036,15551],{"class":101},[91,130038,130039,130042,130044,130046,130048,130050,130053],{"class":93,"line":1157},[91,130040,130041],{"class":150},"  border-top",[91,130043,51412],{"class":101},[91,130045,319],{"class":150},[91,130047,51467],{"class":97},[91,130049,51496],{"class":150},[91,130051,130052],{"class":150}," #000",[91,130054,1268],{"class":101},[91,130056,130057,130060,130062,130064,130066,130068,130071],{"class":93,"line":1172},[91,130058,130059],{"class":150},"  border-right",[91,130061,51412],{"class":101},[91,130063,179],{"class":150},[91,130065,51467],{"class":97},[91,130067,62216],{"class":150},[91,130069,130070],{"class":150}," #333",[91,130072,1268],{"class":101},[91,130074,130075,130078,130080,130082,130084,130087,130090],{"class":93,"line":1178},[91,130076,130077],{"class":150},"  border-bottom",[91,130079,51412],{"class":101},[91,130081,173],{"class":150},[91,130083,51467],{"class":97},[91,130085,130086],{"class":150}," dotted",[91,130088,130089],{"class":150}," #666",[91,130091,1268],{"class":101},[91,130093,130094,130097,130099,130101,130103,130105,130108],{"class":93,"line":1192},[91,130095,130096],{"class":150},"  border-left",[91,130098,51412],{"class":101},[91,130100,319],{"class":150},[91,130102,51467],{"class":97},[91,130104,51496],{"class":150},[91,130106,130107],{"class":150}," #999",[91,130109,1268],{"class":101},[91,130111,130112],{"class":93,"line":1198},[91,130113,1543],{"class":101},[46,130115,130116],{"start":1172},[49,130117,130118],{},"表格的细线边框",[38,130120,130121],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[83,130123,130125],{"className":126527,"code":130124,"language":126529,"meta":10,"style":10},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[88,130126,130127,130132,130138,130148],{"__ignoreMap":10},[91,130128,130129],{"class":93,"line":94},[91,130130,130131],{"class":160},"\u002F* 表格细线边框合并 *\u002F\n",[91,130133,130134,130136],{"class":93,"line":11},[91,130135,239],{"class":51275},[91,130137,15551],{"class":101},[91,130139,130140,130142,130144,130146],{"class":93,"line":1157},[91,130141,70553],{"class":150},[91,130143,51412],{"class":101},[91,130145,65010],{"class":150},[91,130147,1268],{"class":101},[91,130149,130150],{"class":93,"line":1172},[91,130151,1543],{"class":101},[38,130153,130154],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[46,130156,130157],{"start":1178},[49,130158,130159],{},"解决边框额外增加盒子的实际大小的方法：",[1109,130161,130162,130165],{},[49,130163,130164],{},"测量盒子大小的时候,不量边框",[49,130166,130167],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[63,130169,130171],{"id":130170},"_912-内边距","9.1.2 内边距",[46,130173,130174,130177],{},[49,130175,130176],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[49,130178,129888],{},[239,130180,130181,130191],{},[242,130182,130183],{},[245,130184,130185,130188],{},[248,130186,130187],{"align":23710},"值的个数",[248,130189,130190],{"align":23710},"表达意思",[286,130192,130193,130201,130209,130217],{},[245,130194,130195,130198],{},[291,130196,130197],{"align":23710},"padding: 5px;",[291,130199,130200],{"align":23710},"1个值，代表上下左右都有5个元素",[245,130202,130203,130206],{},[291,130204,130205],{"align":23710},"padding: 5px 10px;",[291,130207,130208],{"align":23710},"2个值，代表上下内边距为5像素，左右内边距为10像素",[245,130210,130211,130214],{},[291,130212,130213],{"align":23710},"padding: 5px 10px 20px;",[291,130215,130216],{"align":23710},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[245,130218,130219,130222],{},[291,130220,130221],{"align":23710},"padding: 5px 10px 20px 30px;",[291,130223,130224],{"align":23710},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[239,130226,130227,130235],{},[242,130228,130229],{},[245,130230,130231,130233],{},[248,130232,129129],{"align":23710},[248,130234,102671],{"align":23710},[286,130236,130237,130245,130253,130261],{},[245,130238,130239,130242],{},[291,130240,130241],{"align":23710},"padding-left",[291,130243,130244],{"align":23710},"左内边距",[245,130246,130247,130250],{},[291,130248,130249],{"align":23710},"padding-right",[291,130251,130252],{"align":23710},"右内边距",[245,130254,130255,130258],{},[291,130256,130257],{"align":23710},"padding-top",[291,130259,130260],{"align":23710},"上内边距",[245,130262,130263,130266],{},[291,130264,130265],{"align":23710},"padding-bottom",[291,130267,130268],{"align":23710},"下内边距",[46,130270,130271],{"start":1157},[49,130272,130273],{},"内边距会影响盒子的实际大小",[38,130275,130276],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[38,130278,130279],{},"①内容和边框有了距离，添加了内边距",[38,130281,130282],{},"②padding影响了盒子实际大小",[38,130284,130285],{},"内边距对盒子大小的影响：",[38,130287,130288],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[38,130290,130291],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[38,130293,95195],{},[38,130295,130296],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[63,130298,130300],{"id":130299},"_913-外边距","9.1.3 外边距",[46,130302,130303],{},[49,130304,130305],{},"控制盒子与盒子之间的距离",[239,130307,130308,130316],{},[242,130309,130310],{},[245,130311,130312,130314],{},[248,130313,129129],{"align":23710},[248,130315,102671],{"align":23710},[286,130317,130318,130326,130334,130342],{},[245,130319,130320,130323],{},[291,130321,130322],{"align":23710},"margin-left",[291,130324,130325],{"align":23710},"左外边距",[245,130327,130328,130331],{},[291,130329,130330],{"align":23710},"margin-right",[291,130332,130333],{"align":23710},"右外边距",[245,130335,130336,130339],{},[291,130337,130338],{"align":23710},"margin-top",[291,130340,130341],{"align":23710},"上外边距",[245,130343,130344,130347],{},[291,130345,130346],{"align":23710},"margin-bottom",[291,130348,130349],{"align":23710},"下外边距",[46,130351,130352],{"start":11},[49,130353,130354],{},"外边距可以让块级盒子水平居中的两个条件：",[38,130356,130357],{},"①盒子必须指定了宽度（width）",[38,130359,130360],{},"②盒子左右的外边距都设置为 auto",[83,130362,130364],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[88,130365,130366,130371,130378,130394],{"__ignoreMap":10},[91,130367,130368],{"class":93,"line":94},[91,130369,130370],{"class":160},"\u002F* margin 复合写法（同上） *\u002F\n",[91,130372,130373,130376],{"class":93,"line":11},[91,130374,130375],{"class":1941},".box",[91,130377,15551],{"class":101},[91,130379,130380,130382,130384,130386,130388,130391],{"class":93,"line":1157},[91,130381,70445],{"class":150},[91,130383,51412],{"class":101},[91,130385,293],{"class":150},[91,130387,51531],{"class":150},[91,130389,130390],{"class":101},";  ",[91,130392,130393],{"class":160},"\u002F* 块级盒子水平居中 *\u002F\n",[91,130395,130396],{"class":93,"line":1172},[91,130397,1543],{"class":101},[46,130399,130400],{"start":1157},[49,130401,130402],{},"外边距塌陷问题",[38,130404,130405],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1440,130407],{"style":126383,"src":130408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[38,130410,130411],{},"解决方案：",[38,130413,130414],{},"①可以为父亲元素定义上边距",[83,130416,130417],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[88,130418,130419,130423,130429,130443],{"__ignoreMap":10},[91,130420,130421],{"class":93,"line":94},[91,130422,130370],{"class":160},[91,130424,130425,130427],{"class":93,"line":11},[91,130426,130375],{"class":1941},[91,130428,15551],{"class":101},[91,130430,130431,130433,130435,130437,130439,130441],{"class":93,"line":1157},[91,130432,70445],{"class":150},[91,130434,51412],{"class":101},[91,130436,293],{"class":150},[91,130438,51531],{"class":150},[91,130440,130390],{"class":101},[91,130442,130393],{"class":160},[91,130444,130445],{"class":93,"line":1172},[91,130446,1543],{"class":101},[38,130448,130449],{},"②可以为父亲元素定义上内边距",[38,130451,130452],{},"③可以为父亲元素添加overflow:hidden",[1440,130454],{"style":126383,"src":130455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[83,130457,130458],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[88,130459,130460,130464,130470,130484],{"__ignoreMap":10},[91,130461,130462],{"class":93,"line":94},[91,130463,130370],{"class":160},[91,130465,130466,130468],{"class":93,"line":11},[91,130467,130375],{"class":1941},[91,130469,15551],{"class":101},[91,130471,130472,130474,130476,130478,130480,130482],{"class":93,"line":1157},[91,130473,70445],{"class":150},[91,130475,51412],{"class":101},[91,130477,293],{"class":150},[91,130479,51531],{"class":150},[91,130481,130390],{"class":101},[91,130483,130393],{"class":160},[91,130485,130486],{"class":93,"line":1172},[91,130487,1543],{"class":101},[1440,130489],{"style":126383,"src":130490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[38,130492,130493],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[38,130495,130496],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[63,130498,130500],{"id":130499},"_914-清除内外边距","9.1.4 清除内外边距",[38,130502,130503],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[83,130505,130506],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[88,130507,130508,130512,130518,130532],{"__ignoreMap":10},[91,130509,130510],{"class":93,"line":94},[91,130511,130370],{"class":160},[91,130513,130514,130516],{"class":93,"line":11},[91,130515,130375],{"class":1941},[91,130517,15551],{"class":101},[91,130519,130520,130522,130524,130526,130528,130530],{"class":93,"line":1157},[91,130521,70445],{"class":150},[91,130523,51412],{"class":101},[91,130525,293],{"class":150},[91,130527,51531],{"class":150},[91,130529,130390],{"class":101},[91,130531,130393],{"class":160},[91,130533,130534],{"class":93,"line":1172},[91,130535,1543],{"class":101},[38,130537,130538],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[63,130540,130542],{"id":130541},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1109,130544,130545,130548,130551,130554,130557,130560],{},[49,130546,130547],{},"文件→打开 ：可以打开我们要测量的图片",[49,130549,130550],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[49,130552,130553],{},"右击标尺，把里面的单位改为像素",[49,130555,130556],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[49,130558,130559],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[49,130561,130562],{},"用选区拖动 可以测量大小",[1440,130564],{"style":126383,"src":130565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1109,130567,130568,130571],{},[49,130569,130570],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[49,130572,130573],{},"吸管取色工具",[1440,130575],{"style":126383,"src":130576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[63,130578,130580],{"id":130579},"_916-案例","9.1.6 案例",[46,130582,130583],{},[49,130584,130585],{},"小米商品",[1440,130587],{"style":126383,"src":130588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[83,130590,130591],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[88,130592,130593,130597,130603,130617],{"__ignoreMap":10},[91,130594,130595],{"class":93,"line":94},[91,130596,130370],{"class":160},[91,130598,130599,130601],{"class":93,"line":11},[91,130600,130375],{"class":1941},[91,130602,15551],{"class":101},[91,130604,130605,130607,130609,130611,130613,130615],{"class":93,"line":1157},[91,130606,70445],{"class":150},[91,130608,51412],{"class":101},[91,130610,293],{"class":150},[91,130612,51531],{"class":150},[91,130614,130390],{"class":101},[91,130616,130393],{"class":160},[91,130618,130619],{"class":93,"line":1172},[91,130620,1543],{"class":101},[46,130622,130623],{"start":11},[49,130624,130625],{},"快报模块",[1440,130627],{"style":126383,"src":130628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[83,130630,130632],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[88,130633,130634,130639,130654,130659],{"__ignoreMap":10},[91,130635,130636],{"class":93,"line":94},[91,130637,130638],{"class":160},"\u003C!-- HTML 代码示例 -->\n",[91,130640,130641,130643,130645,130647,130649,130652],{"class":93,"line":11},[91,130642,1012],{"class":101},[91,130644,51586],{"class":51275},[91,130646,53461],{"class":1941},[91,130648,147],{"class":101},[91,130650,130651],{"class":206},"\"example\"",[91,130653,51282],{"class":101},[91,130655,130656],{"class":93,"line":1157},[91,130657,130658],{"class":101},"  示例内容\n",[91,130660,130661,130663,130665],{"class":93,"line":1172},[91,130662,51760],{"class":101},[91,130664,51586],{"class":51275},[91,130666,51282],{"class":101},[63,130668,130670],{"id":130669},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[46,130672,130673],{},[49,130674,130675],{},"圆角边框",[38,130677,130678],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1440,130680],{"style":126383,"src":130681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[83,130683,130685],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},"div {\n  border: 1px solid #ccc;\n}\n",[88,130686,130687,130693,130709],{"__ignoreMap":10},[91,130688,130689,130691],{"class":93,"line":94},[91,130690,51586],{"class":51275},[91,130692,15551],{"class":101},[91,130694,130695,130697,130699,130701,130703,130705,130707],{"class":93,"line":11},[91,130696,70871],{"class":150},[91,130698,51412],{"class":101},[91,130700,319],{"class":150},[91,130702,51467],{"class":97},[91,130704,51496],{"class":150},[91,130706,129919],{"class":150},[91,130708,1268],{"class":101},[91,130710,130711],{"class":93,"line":1157},[91,130712,1543],{"class":101},[38,130714,130715],{},"解释:",[1109,130717,130718,130721,130724,130727,130730],{},[49,130719,130720],{},"参数值可以为数值或百分比的形式",[49,130722,130723],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[49,130725,130726],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[49,130728,130729],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[49,130731,130732],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[46,130734,130735],{"start":11},[49,130736,130737],{},"盒子阴影",[83,130739,130741],{"className":126527,"code":130740,"language":126529,"meta":10,"style":10},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[88,130742,130743,130749,130786],{"__ignoreMap":10},[91,130744,130745,130747],{"class":93,"line":94},[91,130746,51586],{"class":51275},[91,130748,15551],{"class":101},[91,130750,130751,130754,130756,130758,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784],{"class":93,"line":11},[91,130752,130753],{"class":150},"  box-shadow",[91,130755,51412],{"class":101},[91,130757,293],{"class":150},[91,130759,14734],{"class":150},[91,130761,51467],{"class":97},[91,130763,2016],{"class":150},[91,130765,51467],{"class":97},[91,130767,78742],{"class":150},[91,130769,102],{"class":101},[91,130771,293],{"class":150},[91,130773,12414],{"class":101},[91,130775,293],{"class":150},[91,130777,12414],{"class":101},[91,130779,293],{"class":150},[91,130781,12414],{"class":101},[91,130783,86185],{"class":150},[91,130785,2697],{"class":101},[91,130787,130788],{"class":93,"line":1157},[91,130789,1543],{"class":101},[239,130791,130792,130800],{},[242,130793,130794],{},[245,130795,130796,130798],{},[248,130797,254],{"align":23710},[248,130799,27464],{"align":23710},[286,130801,130802,130810,130818,130826,130834,130842],{},[245,130803,130804,130807],{},[291,130805,130806],{"align":23710},"h-shadow",[291,130808,130809],{"align":23710},"必需,水平阴影的位置,允许负值",[245,130811,130812,130815],{},[291,130813,130814],{"align":23710},"v-shadow",[291,130816,130817],{"align":23710},"必需,垂直阴影的位置,允许负值",[245,130819,130820,130823],{},[291,130821,130822],{"align":23710},"blur",[291,130824,130825],{"align":23710},"可选,模糊距离,就是影子的虚实",[245,130827,130828,130831],{},[291,130829,130830],{"align":23710},"spread",[291,130832,130833],{"align":23710},"可选,阴影尺寸",[245,130835,130836,130839],{},[291,130837,130838],{"align":23710},"color",[291,130840,130841],{"align":23710},"可选,阴影的颜色",[245,130843,130844,130847],{},[291,130845,130846],{"align":23710},"inset",[291,130848,130849],{"align":23710},"可选,将外部阴影(outset)改为内部阴影",[46,130851,130852],{"start":1157},[49,130853,130854],{},"文字阴影",[83,130856,130858],{"className":126527,"code":130857,"language":126529,"meta":10,"style":10},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[88,130859,130860,130866,130905],{"__ignoreMap":10},[91,130861,130862,130864],{"class":93,"line":94},[91,130863,38],{"class":51275},[91,130865,15551],{"class":101},[91,130867,130868,130871,130873,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903],{"class":93,"line":11},[91,130869,130870],{"class":150},"  text-shadow",[91,130872,51412],{"class":101},[91,130874,319],{"class":150},[91,130876,51467],{"class":97},[91,130878,25093],{"class":150},[91,130880,51467],{"class":97},[91,130882,14734],{"class":150},[91,130884,51467],{"class":97},[91,130886,78742],{"class":150},[91,130888,102],{"class":101},[91,130890,293],{"class":150},[91,130892,12414],{"class":101},[91,130894,293],{"class":150},[91,130896,12414],{"class":101},[91,130898,293],{"class":150},[91,130900,12414],{"class":101},[91,130902,100496],{"class":150},[91,130904,2697],{"class":101},[91,130906,130907],{"class":93,"line":1157},[91,130908,1543],{"class":101},[239,130910,130911,130919],{},[242,130912,130913],{},[245,130914,130915,130917],{},[248,130916,254],{"align":23710},[248,130918,27464],{"align":23710},[286,130920,130921,130927,130934,130941],{},[245,130922,130923,130925],{},[291,130924,130806],{"align":23710},[291,130926,130809],{"align":23710},[245,130928,130929,130931],{},[291,130930,130814],{"align":23710},[291,130932,130933],{"align":23710},"必需,垂直阴影位置,允许负值",[245,130935,130936,130938],{},[291,130937,130822],{"align":23710},[291,130939,130940],{"align":23710},"可选,模糊的距离",[245,130942,130943,130945],{},[291,130944,130838],{"align":23710},[291,130946,130841],{"align":23710},[33,130948,130950],{"id":130949},"_92-浮动","9.2 浮动",[63,130952,130954],{"id":130953},"_921-浮动介绍","9.2.1 浮动介绍",[38,130956,130957],{},"在16.2中详细介绍",[63,130959,130961],{"id":130960},"_922-清除浮动","9.2.2 清除浮动",[46,130963,130964,130967],{},[49,130965,130966],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[49,130968,130969],{},"清除浮动的本质",[38,130971,130972],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[38,130974,9004],{},[1109,130976,130977,130980,130983],{},[49,130978,130979],{},"如果父盒子本身有高度，则不需要清除浮动",[49,130981,130982],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[49,130984,130985],{},"父级有了高度，就不会影响下面的标准流了",[46,130987,130988],{"start":1157},[49,130989,130990],{},"清除浮动样式",[83,130992,130994],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[88,130995,130996,131003,131014,131018,131025,131035],{"__ignoreMap":10},[91,130997,130998,131001],{"class":93,"line":94},[91,130999,131000],{"class":1941},".left",[91,131002,15551],{"class":101},[91,131004,131005,131008,131010,131012],{"class":93,"line":11},[91,131006,131007],{"class":150},"  float",[91,131009,51412],{"class":101},[91,131011,23710],{"class":150},[91,131013,1268],{"class":101},[91,131015,131016],{"class":93,"line":1157},[91,131017,1543],{"class":101},[91,131019,131020,131023],{"class":93,"line":1172},[91,131021,131022],{"class":1941},".right",[91,131024,15551],{"class":101},[91,131026,131027,131029,131031,131033],{"class":93,"line":1178},[91,131028,131007],{"class":150},[91,131030,51412],{"class":101},[91,131032,72497],{"class":150},[91,131034,1268],{"class":101},[91,131036,131037],{"class":93,"line":1192},[91,131038,1543],{"class":101},[239,131040,131041,131049],{},[242,131042,131043],{},[245,131044,131045,131047],{},[248,131046,126991],{"align":23710},[248,131048,27464],{"align":23710},[286,131050,131051,131058,131065],{},[245,131052,131053,131055],{},[291,131054,23710],{"align":23710},[291,131056,131057],{"align":23710},"不允许左侧有浮动元素（清除左侧浮动的影响）",[245,131059,131060,131062],{},[291,131061,72497],{"align":23710},[291,131063,131064],{"align":23710},"不允许右侧有浮动元素（清除右侧浮动的影响）",[245,131066,131067,131070],{},[291,131068,131069],{"align":23710},"both",[291,131071,131072],{"align":23710},"同时清除左右侧浮动的影响",[38,131074,131075],{},"法一",[38,131077,131078],{},"额外标签法也称为隔墙法",[38,131080,131081],{},"使用方式：",[38,131083,131084],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[83,131086,131087],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,131088,131089,131095,131105,131109,131115,131125],{"__ignoreMap":10},[91,131090,131091,131093],{"class":93,"line":94},[91,131092,131000],{"class":1941},[91,131094,15551],{"class":101},[91,131096,131097,131099,131101,131103],{"class":93,"line":11},[91,131098,131007],{"class":150},[91,131100,51412],{"class":101},[91,131102,23710],{"class":150},[91,131104,1268],{"class":101},[91,131106,131107],{"class":93,"line":1157},[91,131108,1543],{"class":101},[91,131110,131111,131113],{"class":93,"line":1172},[91,131112,131022],{"class":1941},[91,131114,15551],{"class":101},[91,131116,131117,131119,131121,131123],{"class":93,"line":1178},[91,131118,131007],{"class":150},[91,131120,51412],{"class":101},[91,131122,72497],{"class":150},[91,131124,1268],{"class":101},[91,131126,131127],{"class":93,"line":1192},[91,131128,1543],{"class":101},[38,131130,131131],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[38,131133,131134],{},"优点： 通俗易懂，书写方便",[38,131136,131137],{},"缺点： 添加许多无意义的标签，结构化较差",[38,131139,131140],{},"注意： 要求这个新的空标签必须是块级元素。",[38,131142,131143],{},"法二",[38,131145,131146],{},"父级添加overflow属性",[83,131148,131149],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,131150,131151,131157,131167,131171,131177,131187],{"__ignoreMap":10},[91,131152,131153,131155],{"class":93,"line":94},[91,131154,131000],{"class":1941},[91,131156,15551],{"class":101},[91,131158,131159,131161,131163,131165],{"class":93,"line":11},[91,131160,131007],{"class":150},[91,131162,51412],{"class":101},[91,131164,23710],{"class":150},[91,131166,1268],{"class":101},[91,131168,131169],{"class":93,"line":1157},[91,131170,1543],{"class":101},[91,131172,131173,131175],{"class":93,"line":1172},[91,131174,131022],{"class":1941},[91,131176,15551],{"class":101},[91,131178,131179,131181,131183,131185],{"class":93,"line":1178},[91,131180,131007],{"class":150},[91,131182,51412],{"class":101},[91,131184,72497],{"class":150},[91,131186,1268],{"class":101},[91,131188,131189],{"class":93,"line":1192},[91,131190,1543],{"class":101},[38,131192,131193],{},"overflow: hidden;",[38,131195,131196],{},"优点：代码简洁",[38,131198,131199],{},"缺点：无法显示溢出的部分",[38,131201,131202],{},"注意：是给父元素添加代码",[38,131204,131205],{},"法三",[38,131207,131208],{},"父级添加after伪元素",[38,131210,131211,131214],{},[131212,131213],"after",{}," 方式是额外标签法的升级版",[38,131216,131217],{},"使用的时候复制就可以",[83,131219,131220],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,131221,131222,131228,131238,131242,131248,131258],{"__ignoreMap":10},[91,131223,131224,131226],{"class":93,"line":94},[91,131225,131000],{"class":1941},[91,131227,15551],{"class":101},[91,131229,131230,131232,131234,131236],{"class":93,"line":11},[91,131231,131007],{"class":150},[91,131233,51412],{"class":101},[91,131235,23710],{"class":150},[91,131237,1268],{"class":101},[91,131239,131240],{"class":93,"line":1157},[91,131241,1543],{"class":101},[91,131243,131244,131246],{"class":93,"line":1172},[91,131245,131022],{"class":1941},[91,131247,15551],{"class":101},[91,131249,131250,131252,131254,131256],{"class":93,"line":1178},[91,131251,131007],{"class":150},[91,131253,51412],{"class":101},[91,131255,72497],{"class":150},[91,131257,1268],{"class":101},[91,131259,131260],{"class":93,"line":1192},[91,131261,1543],{"class":101},[38,131263,131264],{},"优点：没有增加标签，结构更简单",[38,131266,131267],{},"缺点：照顾低版本浏览器",[38,131269,131270],{},"代表网站： 百度、淘宝网、网易等",[38,131272,131273],{},"法四",[38,131275,131276],{},"父级添加双伪元素",[83,131278,131279],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,131280,131281,131287,131297,131301,131307,131317],{"__ignoreMap":10},[91,131282,131283,131285],{"class":93,"line":94},[91,131284,131000],{"class":1941},[91,131286,15551],{"class":101},[91,131288,131289,131291,131293,131295],{"class":93,"line":11},[91,131290,131007],{"class":150},[91,131292,51412],{"class":101},[91,131294,23710],{"class":150},[91,131296,1268],{"class":101},[91,131298,131299],{"class":93,"line":1157},[91,131300,1543],{"class":101},[91,131302,131303,131305],{"class":93,"line":1172},[91,131304,131022],{"class":1941},[91,131306,15551],{"class":101},[91,131308,131309,131311,131313,131315],{"class":93,"line":1178},[91,131310,131007],{"class":150},[91,131312,51412],{"class":101},[91,131314,72497],{"class":150},[91,131316,1268],{"class":101},[91,131318,131319],{"class":93,"line":1192},[91,131320,1543],{"class":101},[38,131322,131323],{},"优点：代码更简洁",[38,131325,131267],{},[38,131327,131328],{},"代表网站：小米、腾讯等",[33,131330,131332],{"id":131331},"_93-ps切图","9.3 PS切图",[63,131334,131336],{"id":131335},"_931-常见图片格式","9.3.1 常见图片格式",[239,131338,131339,131349],{},[242,131340,131341],{},[245,131342,131343,131346],{},[248,131344,131345],{"align":23710},"jpg图像格式",[248,131347,131348],{"align":23710},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[286,131350,131351,131359,131367],{},[245,131352,131353,131356],{},[291,131354,131355],{"align":23710},"gif图像格式",[291,131357,131358],{"align":23710},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[245,131360,131361,131364],{},[291,131362,131363],{"align":23710},"png图像格式",[291,131365,131366],{"align":23710},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[245,131368,131369,131372],{},[291,131370,131371],{"align":23710},"PSD图像格式",[291,131373,131374],{"align":23710},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[63,131376,131378],{"id":131377},"_932-图层切图","9.3.2 图层切图",[38,131380,131381],{},"最简单的切图方式：右击图层 → 导出 → 切片",[38,131383,131384],{},"按住shift选中两个图层->图层菜单->合并图层",[63,131386,131388],{"id":131387},"_933-切片切图","9.3.3 切片切图",[1109,131390,131391,131394],{},[49,131392,131393],{},"利用切片工具手动划出",[49,131395,131396],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[63,131398,131400],{"id":131399},"_934-切图步骤","9.3.4 切图步骤",[38,131402,131403],{},"用切片工具选中：",[1440,131405],{"style":126383,"src":131406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[38,131408,131409],{},"文件 -> 导出",[1440,131411],{"style":126383,"src":131412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5105,131414,131415],{},"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":10,"searchDepth":11,"depth":11,"links":131417},[131418,131427,131431],{"id":129854,"depth":11,"text":129855,"children":131419},[131420,131421,131422,131423,131424,131425,131426],{"id":129879,"depth":1157,"text":129880},{"id":130170,"depth":1157,"text":130171},{"id":130299,"depth":1157,"text":130300},{"id":130499,"depth":1157,"text":130500},{"id":130541,"depth":1157,"text":130542},{"id":130579,"depth":1157,"text":130580},{"id":130669,"depth":1157,"text":130670},{"id":130949,"depth":11,"text":130950,"children":131428},[131429,131430],{"id":130953,"depth":1157,"text":130954},{"id":130960,"depth":1157,"text":130961},{"id":131331,"depth":11,"text":131332,"children":131432},[131433,131434,131435,131436],{"id":131335,"depth":1157,"text":131336},{"id":131377,"depth":1157,"text":131378},{"id":131387,"depth":1157,"text":131388},{"id":131399,"depth":1157,"text":131400},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129846,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131443,"title":131444,"body":131445,"description":13,"extension":14,"meta":132086,"navigation":17,"path":132087,"seo":132088,"stem":132089,"__hash__":132090},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131446,"toc":132074},[131447,131450,131454,131480,131514,131518,131522,131525,131567,131574,131584,131592,131594,131597,131600,131603,131610,131624,131628,131631,131660,131664,131667,131681,131685,131688,131716,131720,131723,131749,131753,131758,131791,131796,131824,131828,131845,131891,131896,131940,131957,132064,132072],[29,131448,131444],{"id":131449},"_10-css规范与学成在线案例",[33,131451,131453],{"id":131452},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[46,131455,131456,131462,131468,131474],{},[49,131457,131458,131461],{},[251,131459,131460],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[49,131463,131464,131467],{},[251,131465,131466],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[49,131469,131470,131473],{},[251,131471,131472],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[49,131475,131476,131479],{},[251,131477,131478],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[83,131481,131482],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[88,131483,131484,131488,131494,131510],{"__ignoreMap":10},[91,131485,131486],{"class":93,"line":94},[91,131487,129898],{"class":160},[91,131489,131490,131492],{"class":93,"line":11},[91,131491,51586],{"class":51275},[91,131493,15551],{"class":101},[91,131495,131496,131498,131500,131502,131504,131506,131508],{"class":93,"line":1157},[91,131497,70871],{"class":150},[91,131499,51412],{"class":101},[91,131501,319],{"class":150},[91,131503,51467],{"class":97},[91,131505,51496],{"class":150},[91,131507,129919],{"class":150},[91,131509,1268],{"class":101},[91,131511,131512],{"class":93,"line":1172},[91,131513,1543],{"class":101},[33,131515,131517],{"id":131516},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[63,131519,131521],{"id":131520},"_1021-header头部制作","10.2.1 header头部制作",[1440,131523],{"style":126383,"src":131524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1109,131526,131527,131534,131541,131547,131554,131561],{},[49,131528,131529,131530,131533],{},"1号是版心盒子 ",[251,131531,131532],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[49,131535,131536,131537,131540],{},"版心盒子 里面包含 2号盒子 ",[251,131538,131539],{},"logo"," 图标",[49,131542,131543,131544,131546],{},"版心盒子 里面包含 3号盒子 ",[251,131545,53688],{}," 导航栏",[49,131548,131549,131550,131553],{},"版心盒子 里面包含 4号盒子 ",[251,131551,131552],{},"search"," 搜索框",[49,131555,131556,131557,131560],{},"版心盒子 里面包含 5号盒子 ",[251,131558,131559],{},"user"," 个人信息",[49,131562,131563,131564],{},"注意，要求里面的 ",[251,131565,131566],{},"4个子盒子 必须都浮动",[46,131568,131569],{},[49,131570,131571],{},[251,131572,131573],{},"导航栏注意点:",[38,131575,131576,131577,131580,131581],{},"实际开发中， ",[251,131578,131579],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[251,131582,131583],{},"用 li 包含链接(li+a)的做法",[1109,131585,131586,131589],{},[49,131587,131588],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[49,131590,131591],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[38,131593,9004],{},[38,131595,131596],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[38,131598,131599],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[38,131601,131602],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[46,131604,131605],{"start":11},[49,131606,131607],{},[251,131608,131609],{},"4号盒子search的细节：",[1109,131611,131612,131615,131618],{},[49,131613,131614],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[49,131616,131617],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[49,131619,131620,131623],{},[88,131621,131622],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[63,131625,131627],{"id":131626},"_1022-banner制作","10.2.2 banner制作",[1440,131629],{"style":126383,"src":131630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1109,131632,131633,131640,131646,131653],{},[49,131634,131635,131636,131639],{},"1号盒子是通栏的大盒子 ",[251,131637,131638],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[49,131641,131642,131643,131645],{},"2号盒子是版心 ",[251,131644,897],{}," ， 要水平居中对齐",[49,131647,131648,131649,131652],{},"3号盒子版心内，左对齐 ",[251,131650,131651],{},"subnav"," 侧导航栏",[49,131654,131655,131656,131659],{},"4号盒子版心内，右对齐 ",[251,131657,131658],{},"course"," 课程",[63,131661,131663],{"id":131662},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1440,131665],{"style":126383,"src":131666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1109,131668,131669,131672,131675,131678],{},[49,131670,131671],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[49,131673,131674],{},"1号盒子是标题 H3 左侧浮动",[49,131676,131677],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[49,131679,131680],{},"3号盒子 右浮动 mod 修改",[63,131682,131684],{"id":131683},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1440,131686],{"style":126383,"src":131687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1109,131689,131690,131696,131703,131710,131713],{},[49,131691,131692,131693,131695],{},"1号盒子为最大的盒子 ",[251,131694,53689],{}," 版心水平居中对齐",[49,131697,131698,131699,131702],{},"2号盒子为上面部分 ",[251,131700,131701],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[49,131704,131705,131706,131709],{},"3号盒子为底下部分 ",[251,131707,131708],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[49,131711,131712],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[49,131714,131715],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[63,131717,131719],{"id":131718},"_1025-底部模块制作","10.2.5 底部模块制作",[1440,131721],{"style":126383,"src":131722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1109,131724,131725,131732,131735,131742],{},[49,131726,131727,131728,131731],{},"1号盒子通栏大盒子 底部 ",[251,131729,131730],{},"footer"," 给高度 底色是白色",[49,131733,131734],{},"2号盒子版心水平居中",[49,131736,131737,131738,131741],{},"3号盒子版权 ",[251,131739,131740],{},"copyright"," 左对齐",[49,131743,131744,131745,131748],{},"4号盒子 链接组 ",[251,131746,131747],{},"links"," 右对齐",[63,131750,131752],{"id":131751},"_1026-代码模块","10.2.6 代码模块",[46,131754,131755],{},[49,131756,131757],{},"html部分",[83,131759,131761],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[88,131762,131763],{"__ignoreMap":10},[91,131764,131765,131767,131769,131771,131773,131776,131779,131781,131784,131787,131789],{"class":93,"line":94},[91,131766,1012],{"class":101},[91,131768,340],{"class":51275},[91,131770,61032],{"class":1941},[91,131772,147],{"class":101},[91,131774,131775],{"class":206},"\"https:\u002F\u002Fexample.com\"",[91,131777,131778],{"class":1941}," target",[91,131780,147],{"class":101},[91,131782,131783],{"class":206},"\"_blank\"",[91,131785,131786],{"class":101},">链接文字\u003C\u002F",[91,131788,340],{"class":51275},[91,131790,51282],{"class":101},[46,131792,131793],{"start":11},[49,131794,131795],{},"css部分",[83,131797,131798],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},[88,131799,131800],{"__ignoreMap":10},[91,131801,131802,131804,131806,131808,131810,131812,131814,131816,131818,131820,131822],{"class":93,"line":94},[91,131803,1012],{"class":101},[91,131805,340],{"class":51275},[91,131807,61032],{"class":1941},[91,131809,147],{"class":101},[91,131811,131775],{"class":206},[91,131813,131778],{"class":1941},[91,131815,147],{"class":101},[91,131817,131783],{"class":206},[91,131819,131786],{"class":101},[91,131821,340],{"class":51275},[91,131823,51282],{"class":101},[63,131825,131827],{"id":131826},"_1027-收获","10.2.7 收获",[46,131829,131830,131833,131836,131839,131842],{},[49,131831,131832],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[49,131834,131835],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[49,131837,131838],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[49,131840,131841],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[49,131843,131844],{},"遗忘代码",[83,131846,131848],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[88,131849,131850,131872,131877,131887],{"__ignoreMap":10},[91,131851,131852,131854,131856,131858,131860,131862,131864,131866,131868,131870],{"class":93,"line":94},[91,131853,51586],{"class":51275},[91,131855,12414],{"class":101},[91,131857,38],{"class":51275},[91,131859,12414],{"class":101},[91,131861,29],{"class":51275},[91,131863,12414],{"class":101},[91,131865,1109],{"class":51275},[91,131867,12414],{"class":101},[91,131869,49],{"class":51275},[91,131871,15551],{"class":101},[91,131873,131874],{"class":93,"line":11},[91,131875,131876],{"class":160},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[91,131878,131879,131881,131883,131885],{"class":93,"line":1157},[91,131880,128143],{"class":150},[91,131882,51412],{"class":101},[91,131884,60844],{"class":150},[91,131886,1268],{"class":101},[91,131888,131889],{"class":93,"line":1172},[91,131890,1543],{"class":101},[46,131892,131893],{"start":1192},[49,131894,131895],{},"html引css的程序",[83,131897,131898],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},[88,131899,131900,131922,131926,131936],{"__ignoreMap":10},[91,131901,131902,131904,131906,131908,131910,131912,131914,131916,131918,131920],{"class":93,"line":94},[91,131903,51586],{"class":51275},[91,131905,12414],{"class":101},[91,131907,38],{"class":51275},[91,131909,12414],{"class":101},[91,131911,29],{"class":51275},[91,131913,12414],{"class":101},[91,131915,1109],{"class":51275},[91,131917,12414],{"class":101},[91,131919,49],{"class":51275},[91,131921,15551],{"class":101},[91,131923,131924],{"class":93,"line":11},[91,131925,131876],{"class":160},[91,131927,131928,131930,131932,131934],{"class":93,"line":1157},[91,131929,128143],{"class":150},[91,131931,51412],{"class":101},[91,131933,60844],{"class":150},[91,131935,1268],{"class":101},[91,131937,131938],{"class":93,"line":1172},[91,131939,1543],{"class":101},[46,131941,131942,131945,131948,131951,131954],{"start":1198},[49,131943,131944],{},"浮动的盒子不会有外边距合并问题",[49,131946,131947],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[49,131949,131950],{},"ctrl+g快速定位行；shift+alt多个光标",[49,131952,131953],{},"学习上方各个模块的选择器起名方法，以后就这样用",[49,131955,131956],{},"在写选择器时尽量写全一些，例如",[83,131958,131960],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},"\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",[88,131961,131962,131967,131983,131988,132003,132008,132023,132028,132043,132048],{"__ignoreMap":10},[91,131963,131964],{"class":93,"line":94},[91,131965,131966],{"class":160},"\u002F* 静态定位（默认） *\u002F\n",[91,131968,131969,131972,131974,131976,131978,131981],{"class":93,"line":11},[91,131970,131971],{"class":1941},".static",[91,131973,79782],{"class":101},[91,131975,128887],{"class":150},[91,131977,51412],{"class":101},[91,131979,131980],{"class":150},"static",[91,131982,129457],{"class":101},[91,131984,131985],{"class":93,"line":1157},[91,131986,131987],{"class":160},"\u002F* 相对定位 *\u002F\n",[91,131989,131990,131993,131995,131997,131999,132001],{"class":93,"line":1172},[91,131991,131992],{"class":1941},".relative",[91,131994,79782],{"class":101},[91,131996,128887],{"class":150},[91,131998,51412],{"class":101},[91,132000,54739],{"class":150},[91,132002,129457],{"class":101},[91,132004,132005],{"class":93,"line":1178},[91,132006,132007],{"class":160},"\u002F* 绝对定位 *\u002F\n",[91,132009,132010,132013,132015,132017,132019,132021],{"class":93,"line":1192},[91,132011,132012],{"class":1941},".absolute",[91,132014,79782],{"class":101},[91,132016,128887],{"class":150},[91,132018,51412],{"class":101},[91,132020,54806],{"class":150},[91,132022,129457],{"class":101},[91,132024,132025],{"class":93,"line":1198},[91,132026,132027],{"class":160},"\u002F* 固定定位 *\u002F\n",[91,132029,132030,132033,132035,132037,132039,132041],{"class":93,"line":1289},[91,132031,132032],{"class":1941},".fixed",[91,132034,79782],{"class":101},[91,132036,128887],{"class":150},[91,132038,51412],{"class":101},[91,132040,86208],{"class":150},[91,132042,129457],{"class":101},[91,132044,132045],{"class":93,"line":1295},[91,132046,132047],{"class":160},"\u002F* 粘性定位 *\u002F\n",[91,132049,132050,132053,132055,132057,132059,132062],{"class":93,"line":1307},[91,132051,132052],{"class":1941},".sticky",[91,132054,79782],{"class":101},[91,132056,128887],{"class":150},[91,132058,51412],{"class":101},[91,132060,132061],{"class":150},"sticky",[91,132063,129457],{"class":101},[46,132065,132066,132069],{"start":1595},[49,132067,132068],{},"一定要用好注释",[49,132070,132071],{},"浮动的盒子不会有外边距合并的问题",[5105,132073,131415],{},{"title":10,"searchDepth":11,"depth":11,"links":132075},[132076,132077],{"id":131452,"depth":11,"text":131453},{"id":131516,"depth":11,"text":131517,"children":132078},[132079,132080,132081,132082,132083,132084,132085],{"id":131520,"depth":1157,"text":131521},{"id":131626,"depth":1157,"text":131627},{"id":131662,"depth":1157,"text":131663},{"id":131683,"depth":1157,"text":131684},{"id":131718,"depth":1157,"text":131719},{"id":131751,"depth":1157,"text":131752},{"id":131826,"depth":1157,"text":131827},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131444,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132092,"title":132093,"body":132094,"description":13,"extension":14,"meta":133580,"navigation":17,"path":133581,"seo":133582,"stem":133583,"__hash__":133584},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132095,"toc":133572},[132096,132099,132103,132107,132118,132122,132139,132183,132216,132219,132236,132239,132242,132286,132290,132294,132297,132300,132304,132307,132318,132381,132422,132425,132440,132494,132502,132505,132516,132570,132596,132599,132612,132666,132698,132752,132775,132829,132832,132835,132842,132896,132917,132971,132974,132977,133062,133070,133127,133150,133154,133157,133175,133179,133198,133252,133290,133294,133297,133300,133322,133326,133334,133337,133342,133353,133356,133360,133374,133418,133421,133425,133428,133433,133459,133464,133541,133544,133548,133551,133554,133557,133560,133563,133566,133569],[29,132097,132093],{"id":132098},"_11-传统布局与定位体系",[33,132100,132102],{"id":132101},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[63,132104,132106],{"id":132105},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1109,132108,132109,132112,132115],{},[49,132110,132111],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[49,132113,132114],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[49,132116,132117],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[63,132119,132121],{"id":132120},"_1112-浮动","11.1.2 浮动",[1109,132123,132124,132127,132130,132133,132136],{},[49,132125,132126],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[49,132128,132129],{},"浮动可以改变元素标签默认的排列方式",[49,132131,132132],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[49,132134,132135],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[49,132137,132138],{},"在使用行内块转换时盒子之间是有空隙的",[83,132140,132141],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,132142,132143,132149,132159,132163,132169,132179],{"__ignoreMap":10},[91,132144,132145,132147],{"class":93,"line":94},[91,132146,131000],{"class":1941},[91,132148,15551],{"class":101},[91,132150,132151,132153,132155,132157],{"class":93,"line":11},[91,132152,131007],{"class":150},[91,132154,51412],{"class":101},[91,132156,23710],{"class":150},[91,132158,1268],{"class":101},[91,132160,132161],{"class":93,"line":1157},[91,132162,1543],{"class":101},[91,132164,132165,132167],{"class":93,"line":1172},[91,132166,131022],{"class":1941},[91,132168,15551],{"class":101},[91,132170,132171,132173,132175,132177],{"class":93,"line":1178},[91,132172,131007],{"class":150},[91,132174,51412],{"class":101},[91,132176,72497],{"class":150},[91,132178,1268],{"class":101},[91,132180,132181],{"class":93,"line":1192},[91,132182,1543],{"class":101},[239,132184,132185,132193],{},[242,132186,132187],{},[245,132188,132189,132191],{},[248,132190,126991],{"align":23710},[248,132192,27464],{"align":23710},[286,132194,132195,132202,132209],{},[245,132196,132197,132199],{},[291,132198,54712],{"align":23710},[291,132200,132201],{"align":23710},"元素不浮动（默认值）",[245,132203,132204,132206],{},[291,132205,23710],{"align":23710},[291,132207,132208],{"align":23710},"元素向左浮动",[245,132210,132211,132213],{},[291,132212,72497],{"align":23710},[291,132214,132215],{"align":23710},"元素向右浮动",[38,132217,132218],{},"浮动重点：",[1109,132220,132221,132224,132227,132230,132233],{},[49,132222,132223],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[49,132225,132226],{},"浮动的元素会一行内显示并且元素顶部对齐",[49,132228,132229],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[49,132231,132232],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[49,132234,132235],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[38,132237,132238],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[38,132240,132241],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[83,132243,132244],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,132245,132246,132252,132262,132266,132272,132282],{"__ignoreMap":10},[91,132247,132248,132250],{"class":93,"line":94},[91,132249,131000],{"class":1941},[91,132251,15551],{"class":101},[91,132253,132254,132256,132258,132260],{"class":93,"line":11},[91,132255,131007],{"class":150},[91,132257,51412],{"class":101},[91,132259,23710],{"class":150},[91,132261,1268],{"class":101},[91,132263,132264],{"class":93,"line":1157},[91,132265,1543],{"class":101},[91,132267,132268,132270],{"class":93,"line":1172},[91,132269,131022],{"class":1941},[91,132271,15551],{"class":101},[91,132273,132274,132276,132278,132280],{"class":93,"line":1178},[91,132275,131007],{"class":150},[91,132277,51412],{"class":101},[91,132279,72497],{"class":150},[91,132281,1268],{"class":101},[91,132283,132284],{"class":93,"line":1192},[91,132285,1543],{"class":101},[63,132287,132289],{"id":132288},"_1113-定位","11.1.3 定位",[21977,132291,132293],{"id":132292},"_11131-使用场景","11.1.3.1 使用场景",[38,132295,132296],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[38,132298,132299],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21977,132301,132303],{"id":132302},"_11132-定位组成","11.1.3.2 定位组成",[38,132305,132306],{},"定位 = 定位模式 + 边偏移",[46,132308,132309],{},[49,132310,132311,132314,132315],{},[251,132312,132313],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[251,132316,132317],{},"定位模式",[83,132319,132321],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[88,132322,132323,132329,132343,132360,132377],{"__ignoreMap":10},[91,132324,132325,132327],{"class":93,"line":94},[91,132326,130375],{"class":1941},[91,132328,15551],{"class":101},[91,132330,132331,132334,132336,132338,132340],{"class":93,"line":11},[91,132332,132333],{"class":150},"  position",[91,132335,51412],{"class":101},[91,132337,54739],{"class":150},[91,132339,130390],{"class":101},[91,132341,132342],{"class":160},"\u002F* 定位模式 *\u002F\n",[91,132344,132345,132348,132350,132352,132354,132357],{"class":93,"line":1157},[91,132346,132347],{"class":150},"  top",[91,132349,51412],{"class":101},[91,132351,548],{"class":150},[91,132353,51467],{"class":97},[91,132355,132356],{"class":101},";           ",[91,132358,132359],{"class":160},"\u002F* 边偏移：上 *\u002F\n",[91,132361,132362,132365,132367,132369,132371,132374],{"class":93,"line":1172},[91,132363,132364],{"class":150},"  left",[91,132366,51412],{"class":101},[91,132368,802],{"class":150},[91,132370,51467],{"class":97},[91,132372,132373],{"class":101},";          ",[91,132375,132376],{"class":160},"\u002F* 边偏移：左 *\u002F\n",[91,132378,132379],{"class":93,"line":1178},[91,132380,1543],{"class":101},[239,132382,132383,132392],{},[242,132384,132385],{},[245,132386,132387,132389],{},[248,132388,254],{"align":23710},[248,132390,132391],{"align":23710},"语义",[286,132393,132394,132401,132408,132415],{},[245,132395,132396,132398],{},[291,132397,131980],{"align":23710},[291,132399,132400],{"align":23710},"静态定位",[245,132402,132403,132405],{},[291,132404,54739],{"align":23710},[291,132406,132407],{"align":23710},"相对定位",[245,132409,132410,132412],{},[291,132411,54806],{"align":23710},[291,132413,132414],{"align":23710},"绝对定位",[245,132416,132417,132419],{},[291,132418,86208],{"align":23710},[291,132420,132421],{"align":23710},"固定定位",[38,132423,132424],{},"（1）静态定位：",[1109,132426,132427,132438],{},[49,132428,132429,132430,132433,132434,132437],{},"静态定位是元素的 ",[251,132431,132432],{},"默认定位方式"," ， ",[251,132435,132436],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[49,132439,5160],{},[83,132441,132442],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132443,132444,132450,132462,132476,132490],{"__ignoreMap":10},[91,132445,132446,132448],{"class":93,"line":94},[91,132447,130375],{"class":1941},[91,132449,15551],{"class":101},[91,132451,132452,132454,132456,132458,132460],{"class":93,"line":11},[91,132453,132333],{"class":150},[91,132455,51412],{"class":101},[91,132457,54739],{"class":150},[91,132459,130390],{"class":101},[91,132461,132342],{"class":160},[91,132463,132464,132466,132468,132470,132472,132474],{"class":93,"line":1157},[91,132465,132347],{"class":150},[91,132467,51412],{"class":101},[91,132469,548],{"class":150},[91,132471,51467],{"class":97},[91,132473,132356],{"class":101},[91,132475,132359],{"class":160},[91,132477,132478,132480,132482,132484,132486,132488],{"class":93,"line":1172},[91,132479,132364],{"class":150},[91,132481,51412],{"class":101},[91,132483,802],{"class":150},[91,132485,51467],{"class":97},[91,132487,132373],{"class":101},[91,132489,132376],{"class":160},[91,132491,132492],{"class":93,"line":1178},[91,132493,1543],{"class":101},[1109,132495,132496,132499],{},[49,132497,132498],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[49,132500,132501],{},"静态定位在布局时我们几乎不用的",[38,132503,132504],{},"（2）相对定位",[1109,132506,132507,132514],{},[49,132508,132509,132510,132513],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[251,132511,132512],{},"原来的位置"," 来说的（自恋型）",[49,132515,5160],{},[83,132517,132518],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132519,132520,132526,132538,132552,132566],{"__ignoreMap":10},[91,132521,132522,132524],{"class":93,"line":94},[91,132523,130375],{"class":1941},[91,132525,15551],{"class":101},[91,132527,132528,132530,132532,132534,132536],{"class":93,"line":11},[91,132529,132333],{"class":150},[91,132531,51412],{"class":101},[91,132533,54739],{"class":150},[91,132535,130390],{"class":101},[91,132537,132342],{"class":160},[91,132539,132540,132542,132544,132546,132548,132550],{"class":93,"line":1157},[91,132541,132347],{"class":150},[91,132543,51412],{"class":101},[91,132545,548],{"class":150},[91,132547,51467],{"class":97},[91,132549,132356],{"class":101},[91,132551,132359],{"class":160},[91,132553,132554,132556,132558,132560,132562,132564],{"class":93,"line":1172},[91,132555,132364],{"class":150},[91,132557,51412],{"class":101},[91,132559,802],{"class":150},[91,132561,51467],{"class":97},[91,132563,132373],{"class":101},[91,132565,132376],{"class":160},[91,132567,132568],{"class":93,"line":1178},[91,132569,1543],{"class":101},[1109,132571,132572],{},[49,132573,132574,132575,132577,132578,132580,132581,132584,132585,132588,132589,132591,132592,132595],{},"相对定位的特点：",[53691,132576],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53691,132579],{},"  ② ",[251,132582,132583],{},"原来"," 在标准流的 ",[251,132586,132587],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53691,132590],{},"  ③因此， ",[251,132593,132594],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[38,132597,132598],{},"（3）绝对定位",[1109,132600,132601,132610],{},[49,132602,132603,132605,132606,132609],{},[251,132604,132414],{}," 是元素在移动位置的时候，是相对于它 ",[251,132607,132608],{},"祖先元素"," 来说的（拼爹型）",[49,132611,5160],{},[83,132613,132614],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132615,132616,132622,132634,132648,132662],{"__ignoreMap":10},[91,132617,132618,132620],{"class":93,"line":94},[91,132619,130375],{"class":1941},[91,132621,15551],{"class":101},[91,132623,132624,132626,132628,132630,132632],{"class":93,"line":11},[91,132625,132333],{"class":150},[91,132627,51412],{"class":101},[91,132629,54739],{"class":150},[91,132631,130390],{"class":101},[91,132633,132342],{"class":160},[91,132635,132636,132638,132640,132642,132644,132646],{"class":93,"line":1157},[91,132637,132347],{"class":150},[91,132639,51412],{"class":101},[91,132641,548],{"class":150},[91,132643,51467],{"class":97},[91,132645,132356],{"class":101},[91,132647,132359],{"class":160},[91,132649,132650,132652,132654,132656,132658,132660],{"class":93,"line":1172},[91,132651,132364],{"class":150},[91,132653,51412],{"class":101},[91,132655,802],{"class":150},[91,132657,51467],{"class":97},[91,132659,132373],{"class":101},[91,132661,132376],{"class":160},[91,132663,132664],{"class":93,"line":1178},[91,132665,1543],{"class":101},[1109,132667,132668,132683,132692,132695],{},[49,132669,132670,132671,132673,132674,132676,132677,132679,132680,132682],{},"绝对定位的特点：",[53691,132672],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53691,132675],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53691,132678],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53691,132681],{},"  (4)固定定位",[49,132684,132685,132687,132688,132691],{},[251,132686,132421],{}," 是元素 ",[251,132689,132690],{},"固定于浏览器可视区的位置"," 。（认死理型）",[49,132693,132694],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[49,132696,132697],{},"语法:",[83,132699,132700],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132701,132702,132708,132720,132734,132748],{"__ignoreMap":10},[91,132703,132704,132706],{"class":93,"line":94},[91,132705,130375],{"class":1941},[91,132707,15551],{"class":101},[91,132709,132710,132712,132714,132716,132718],{"class":93,"line":11},[91,132711,132333],{"class":150},[91,132713,51412],{"class":101},[91,132715,54739],{"class":150},[91,132717,130390],{"class":101},[91,132719,132342],{"class":160},[91,132721,132722,132724,132726,132728,132730,132732],{"class":93,"line":1157},[91,132723,132347],{"class":150},[91,132725,51412],{"class":101},[91,132727,548],{"class":150},[91,132729,51467],{"class":97},[91,132731,132356],{"class":101},[91,132733,132359],{"class":160},[91,132735,132736,132738,132740,132742,132744,132746],{"class":93,"line":1172},[91,132737,132364],{"class":150},[91,132739,51412],{"class":101},[91,132741,802],{"class":150},[91,132743,51467],{"class":97},[91,132745,132373],{"class":101},[91,132747,132376],{"class":160},[91,132749,132750],{"class":93,"line":1178},[91,132751,1543],{"class":101},[1109,132753,132754,132763],{},[49,132755,132756,132757,132759,132760,132762],{},"特点:",[53691,132758],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53691,132761],{},"  ②固定定位不再占有原先的位置,完全脱标",[49,132764,132765,132766,132768,132769,132771,132772,132774],{},"固定在版心位置的方法:",[53691,132767],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53691,132770],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53691,132773],{},"  实例：",[83,132776,132777],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132778,132779,132785,132797,132811,132825],{"__ignoreMap":10},[91,132780,132781,132783],{"class":93,"line":94},[91,132782,130375],{"class":1941},[91,132784,15551],{"class":101},[91,132786,132787,132789,132791,132793,132795],{"class":93,"line":11},[91,132788,132333],{"class":150},[91,132790,51412],{"class":101},[91,132792,54739],{"class":150},[91,132794,130390],{"class":101},[91,132796,132342],{"class":160},[91,132798,132799,132801,132803,132805,132807,132809],{"class":93,"line":1157},[91,132800,132347],{"class":150},[91,132802,51412],{"class":101},[91,132804,548],{"class":150},[91,132806,51467],{"class":97},[91,132808,132356],{"class":101},[91,132810,132359],{"class":160},[91,132812,132813,132815,132817,132819,132821,132823],{"class":93,"line":1172},[91,132814,132364],{"class":150},[91,132816,51412],{"class":101},[91,132818,802],{"class":150},[91,132820,51467],{"class":97},[91,132822,132373],{"class":101},[91,132824,132376],{"class":160},[91,132826,132827],{"class":93,"line":1178},[91,132828,1543],{"class":101},[1440,132830],{"style":126383,"src":132831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[38,132833,132834],{},"(5)粘性定位",[1109,132836,132837,132840],{},[49,132838,132839],{},"粘性定位可以被认为是相对定位和固定定位的混合",[49,132841,5160],{},[83,132843,132844],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132845,132846,132852,132864,132878,132892],{"__ignoreMap":10},[91,132847,132848,132850],{"class":93,"line":94},[91,132849,130375],{"class":1941},[91,132851,15551],{"class":101},[91,132853,132854,132856,132858,132860,132862],{"class":93,"line":11},[91,132855,132333],{"class":150},[91,132857,51412],{"class":101},[91,132859,54739],{"class":150},[91,132861,130390],{"class":101},[91,132863,132342],{"class":160},[91,132865,132866,132868,132870,132872,132874,132876],{"class":93,"line":1157},[91,132867,132347],{"class":150},[91,132869,51412],{"class":101},[91,132871,548],{"class":150},[91,132873,51467],{"class":97},[91,132875,132356],{"class":101},[91,132877,132359],{"class":160},[91,132879,132880,132882,132884,132886,132888,132890],{"class":93,"line":1172},[91,132881,132364],{"class":150},[91,132883,51412],{"class":101},[91,132885,802],{"class":150},[91,132887,51467],{"class":97},[91,132889,132373],{"class":101},[91,132891,132376],{"class":160},[91,132893,132894],{"class":93,"line":1178},[91,132895,1543],{"class":101},[1109,132897,132898],{},[49,132899,132900,132901,132903,132904,132906,132907,132909,132910,132913,132914,132916],{},"粘性定位的特点：",[53691,132902],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53691,132905],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53691,132908],{},"  ③必须添加 top 、left、right、bottom ",[251,132911,132912],{},"其中一个"," 才有效",[53691,132915],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[83,132918,132919],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,132920,132921,132927,132939,132953,132967],{"__ignoreMap":10},[91,132922,132923,132925],{"class":93,"line":94},[91,132924,130375],{"class":1941},[91,132926,15551],{"class":101},[91,132928,132929,132931,132933,132935,132937],{"class":93,"line":11},[91,132930,132333],{"class":150},[91,132932,51412],{"class":101},[91,132934,54739],{"class":150},[91,132936,130390],{"class":101},[91,132938,132342],{"class":160},[91,132940,132941,132943,132945,132947,132949,132951],{"class":93,"line":1157},[91,132942,132347],{"class":150},[91,132944,51412],{"class":101},[91,132946,548],{"class":150},[91,132948,51467],{"class":97},[91,132950,132356],{"class":101},[91,132952,132359],{"class":160},[91,132954,132955,132957,132959,132961,132963,132965],{"class":93,"line":1172},[91,132956,132364],{"class":150},[91,132958,51412],{"class":101},[91,132960,802],{"class":150},[91,132962,51467],{"class":97},[91,132964,132373],{"class":101},[91,132966,132376],{"class":160},[91,132968,132969],{"class":93,"line":1178},[91,132970,1543],{"class":101},[1440,132972],{"style":126383,"src":132973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[38,132975,132976],{},"(6)总结",[239,132978,132979,132994],{},[242,132980,132981],{},[245,132982,132983,132985,132988,132991],{},[248,132984,132317],{"align":23710},[248,132986,132987],{"align":23710},"是否脱标",[248,132989,132990],{"align":23710},"移动位置",[248,132992,132993],{"align":23710},"是否常用",[286,132995,132996,133009,133023,133037,133050],{},[245,132997,132998,133001,133003,133006],{},[291,132999,133000],{"align":23710},"Static 静态定位",[291,133002,104653],{"align":23710},[291,133004,133005],{"align":23710},"不能使用边偏移",[291,133007,133008],{"align":23710},"很少",[245,133010,133011,133014,133017,133020],{},[291,133012,133013],{"align":23710},"Relative 相对定位",[291,133015,133016],{"align":23710},"否(占有位置)",[291,133018,133019],{"align":23710},"相对于自身位置移动",[291,133021,133022],{"align":23710},"基本单独使用",[245,133024,133025,133028,133031,133034],{},[291,133026,133027],{"align":23710},"Absolute 绝对定位",[291,133029,133030],{"align":23710},"是(不占有位置)",[291,133032,133033],{"align":23710},"带有定位的父级",[291,133035,133036],{"align":23710},"要和定位父级元素搭配使用",[245,133038,133039,133042,133044,133047],{},[291,133040,133041],{"align":23710},"Fixed 固定定位",[291,133043,133030],{"align":23710},[291,133045,133046],{"align":23710},"浏览器可视区",[291,133048,133049],{"align":23710},"单独使用,不需要父级",[245,133051,133052,133055,133057,133059],{},[291,133053,133054],{"align":23710},"Sticky 粘性定位",[291,133056,133016],{"align":23710},[291,133058,133046],{"align":23710},[291,133060,133061],{"align":23710},"当前阶段少",[46,133063,133064],{"start":11},[49,133065,133066,133069],{},[251,133067,133068],{},"边偏移"," 则决定了该元素的最终位置",[239,133071,133072,133083],{},[242,133073,133074],{},[245,133075,133076,133079,133081],{},[248,133077,133078],{"align":23710},"边偏移属性",[248,133080,27467],{"align":23710},[248,133082,27464],{"align":23710},[286,133084,133085,133096,133107,133117],{},[245,133086,133087,133090,133093],{},[291,133088,133089],{"align":23710},"top",[291,133091,133092],{"align":23710},"top: 80px;",[291,133094,133095],{"align":23710},"顶端偏移量，定义元素相对于父元素上边线的距离",[245,133097,133098,133101,133104],{},[291,133099,133100],{"align":23710},"bottom",[291,133102,133103],{"align":23710},"bottom: 80px ;",[291,133105,133106],{"align":23710},"底部偏移量，定义元素相对于其父元素下边线的距离",[245,133108,133109,133111,133114],{},[291,133110,23710],{"align":23710},[291,133112,133113],{"align":23710},"left: 80px ;",[291,133115,133116],{"align":23710},"左侧偏移量，定义元素相对于其父元素左边线的距离",[245,133118,133119,133121,133124],{},[291,133120,72497],{"align":23710},[291,133122,133123],{"align":23710},"right: 80px ;",[291,133125,133126],{"align":23710},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1109,133128,133129],{},[49,133130,9004,133131,133133,133134,133136,133137,133139,133140,133143,133144,133146,133147,133149],{},[53691,133132],{},"  ① ",[251,133135,133068],{}," 需要和 ",[251,133138,132317],{}," 联合使用， ",[251,133141,133142],{},"单独使用无效"," ；",[53691,133145],{},"  ②top和bottom不要同时使用",[53691,133148],{},"  ③left和right不要同时使用",[21977,133151,133153],{"id":133152},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[38,133155,133156],{},"子级是绝对定位的话，父级要用相对定位",[1109,133158,133159,133162,133165,133168],{},[49,133160,133161],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[49,133163,133164],{},"父盒子需要加定位限制子盒子在父盒子内显示",[49,133166,133167],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[49,133169,133170,133171,133174],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[251,133172,133173],{},"子绝父绝"," 也会遇到",[21977,133176,133178],{"id":133177},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1109,133180,133181,133196],{},[49,133182,133183,133184,133187,133188,133191,133192,133195],{},"在使用 ",[251,133185,133186],{},"定位"," 布局时，可能会 ",[251,133189,133190],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[251,133193,133194],{},"z-index"," 来控制盒子的前后次序 (z轴)",[49,133197,5160],{},[83,133199,133200],{"className":126527,"code":132320,"language":126529,"meta":10,"style":10},[88,133201,133202,133208,133220,133234,133248],{"__ignoreMap":10},[91,133203,133204,133206],{"class":93,"line":94},[91,133205,130375],{"class":1941},[91,133207,15551],{"class":101},[91,133209,133210,133212,133214,133216,133218],{"class":93,"line":11},[91,133211,132333],{"class":150},[91,133213,51412],{"class":101},[91,133215,54739],{"class":150},[91,133217,130390],{"class":101},[91,133219,132342],{"class":160},[91,133221,133222,133224,133226,133228,133230,133232],{"class":93,"line":1157},[91,133223,132347],{"class":150},[91,133225,51412],{"class":101},[91,133227,548],{"class":150},[91,133229,51467],{"class":97},[91,133231,132356],{"class":101},[91,133233,132359],{"class":160},[91,133235,133236,133238,133240,133242,133244,133246],{"class":93,"line":1172},[91,133237,132364],{"class":150},[91,133239,51412],{"class":101},[91,133241,802],{"class":150},[91,133243,51467],{"class":97},[91,133245,132373],{"class":101},[91,133247,132376],{"class":160},[91,133249,133250],{"class":93,"line":1178},[91,133251,1543],{"class":101},[1109,133253,133254],{},[49,133255,133256,133257,133133,133259,133261,133262,127690,133265,82514,133268,133270,133271,133273,133274,133277,133278,133143,133281,133283,133284,133287,133289],{},"z-index的特性",[53691,133258],{},[251,133260,126991],{}," ： ",[251,133263,133264],{},"正整数",[251,133266,133267],{},"负整数",[251,133269,293],{}," ，默认值是 0，数值越大，盒子越靠上；",[53691,133272],{},"  ②如果 ",[251,133275,133276],{},"属性值相同"," ，则按照书写顺序， ",[251,133279,133280],{},"后来居上",[53691,133282],{},"  ③数字后面 ",[251,133285,133286],{},"不能加单位",[53691,133288],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21977,133291,133293],{"id":133292},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[38,133295,133296],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[38,133298,133299],{},"方法:",[1109,133301,133302,133312],{},[49,133303,133304,133305,133308,133309],{},"left: 50%; 让 ",[251,133306,133307],{},"盒子的左侧"," 移动到 ",[251,133310,133311],{},"父级元素的水平中心位置",[49,133313,133314,133315,133318,133319],{},"margin-left: -100px; 让盒子 ",[251,133316,133317],{},"向左"," 移动 ",[251,133320,133321],{},"自身宽度的一半",[21977,133323,133325],{"id":133324},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[46,133327,133328,133331],{},[49,133329,133330],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[49,133332,133333],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[38,133335,133336],{},"也就是说绝对定位和固定定位和浮动类似",[46,133338,133339],{"start":1157},[49,133340,133341],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1109,133343,133344,133347,133350],{},[49,133345,133346],{},"可以用inline-block 转换为行内块",[49,133348,133349],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[49,133351,133352],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[38,133354,133355],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21977,133357,133359],{"id":133358},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[46,133361,133362,133365,133368,133371],{},[49,133363,133364],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[49,133366,133367],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[49,133369,133370],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[49,133372,133373],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[83,133375,133376],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,133377,133378,133384,133394,133398,133404,133414],{"__ignoreMap":10},[91,133379,133380,133382],{"class":93,"line":94},[91,133381,131000],{"class":1941},[91,133383,15551],{"class":101},[91,133385,133386,133388,133390,133392],{"class":93,"line":11},[91,133387,131007],{"class":150},[91,133389,51412],{"class":101},[91,133391,23710],{"class":150},[91,133393,1268],{"class":101},[91,133395,133396],{"class":93,"line":1157},[91,133397,1543],{"class":101},[91,133399,133400,133402],{"class":93,"line":1172},[91,133401,131022],{"class":1941},[91,133403,15551],{"class":101},[91,133405,133406,133408,133410,133412],{"class":93,"line":1178},[91,133407,131007],{"class":150},[91,133409,51412],{"class":101},[91,133411,72497],{"class":150},[91,133413,1268],{"class":101},[91,133415,133416],{"class":93,"line":1192},[91,133417,1543],{"class":101},[1440,133419],{"style":126383,"src":133420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21977,133422,133424],{"id":133423},"_11138-轮播图","11.1.3.8 轮播图",[1440,133426],{"style":126383,"src":133427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[46,133429,133430],{},[49,133431,133432],{},"制作顺序:",[1109,133434,133435,133438,133441,133450],{},[49,133436,133437],{},"大盒子我们类名为： tb-promo 淘宝广告",[49,133439,133440],{},"里面先放一张图片",[49,133442,133443,133444,133446,133447,133449],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53691,133445],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53691,133448],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[49,133451,133452,133453,133455,133456,133458],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53691,133454],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53691,133457],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[46,133460,133461],{"start":11},[49,133462,133463],{},"代码模块",[83,133465,133467],{"className":126527,"code":133466,"language":126529,"meta":10,"style":10},"\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",[88,133468,133469,133474,133481,133491,133501,133511,133515,133520,133527,133537],{"__ignoreMap":10},[91,133470,133471],{"class":93,"line":94},[91,133472,133473],{"class":160},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[91,133475,133476,133479],{"class":93,"line":11},[91,133477,133478],{"class":1941},".son",[91,133480,15551],{"class":101},[91,133482,133483,133485,133487,133489],{"class":93,"line":1157},[91,133484,132333],{"class":150},[91,133486,51412],{"class":101},[91,133488,54806],{"class":150},[91,133490,1268],{"class":101},[91,133492,133493,133495,133497,133499],{"class":93,"line":1172},[91,133494,132347],{"class":150},[91,133496,51412],{"class":101},[91,133498,293],{"class":150},[91,133500,1268],{"class":101},[91,133502,133503,133505,133507,133509],{"class":93,"line":1178},[91,133504,132364],{"class":150},[91,133506,51412],{"class":101},[91,133508,293],{"class":150},[91,133510,1268],{"class":101},[91,133512,133513],{"class":93,"line":1192},[91,133514,1543],{"class":101},[91,133516,133517],{"class":93,"line":1198},[91,133518,133519],{"class":160},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[91,133521,133522,133525],{"class":93,"line":1289},[91,133523,133524],{"class":1941},".father",[91,133526,15551],{"class":101},[91,133528,133529,133531,133533,133535],{"class":93,"line":1295},[91,133530,132333],{"class":150},[91,133532,51412],{"class":101},[91,133534,54739],{"class":150},[91,133536,1268],{"class":101},[91,133538,133539],{"class":93,"line":1307},[91,133540,1543],{"class":101},[38,133542,133543],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[63,133545,133547],{"id":133546},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1440,133549],{"style":126383,"src":133550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[38,133552,133553],{},"✨ 黄金口诀：",[38,133555,133556],{},"\"TOP正下负上，LEFT正右负左\"",[38,133558,133559],{},"\"RIGHT正左负右，BOTTOM正上负下",[38,133561,133562],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[38,133564,133565],{},"✨ 简单记：",[38,133567,133568],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5105,133570,133571],{},"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":10,"searchDepth":11,"depth":11,"links":133573},[133574],{"id":132101,"depth":11,"text":132102,"children":133575},[133576,133577,133578,133579],{"id":132105,"depth":1157,"text":132106},{"id":132120,"depth":1157,"text":132121},{"id":132288,"depth":1157,"text":132289},{"id":133546,"depth":1157,"text":133547},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132093,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133586,"title":133587,"body":133588,"description":13,"extension":14,"meta":135011,"navigation":17,"path":135012,"seo":135013,"stem":135014,"__hash__":135015},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133589,"toc":134990},[133590,133593,133597,133605,133609,133614,133622,133634,133638,133643,133651,133662,133666,133671,133712,133720,133724,133727,133730,133733,133827,133830,133924,133927,134021,134024,134027,134062,134065,134068,134098,134101,134104,134107,134110,134113,134116,134119,134189,134192,134196,134200,134241,134245,134251,134254,134257,134261,134264,134267,134270,134351,134354,134357,134361,134365,134368,134371,134374,134377,134380,134386,134395,134399,134418,134422,134432,134435,134438,134441,134444,134447,134450,134453,134456,134465,134469,134478,134481,134486,134539,134544,134710,134713,134716,134721,134724,134727,134730,134733,134738,134886,134889,134892,134897,134900,134905,134939,134942,134945,134949,134952,134959,134962,134965,134968,134971,134974,134977,134980,134984,134987],[29,133591,133587],{"id":133592},"_12-显示隐藏与图形资源",[33,133594,133596],{"id":133595},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1109,133598,133599,133602],{},[49,133600,133601],{},"目的:让一个元素在页面中消失或者显示出来",[49,133603,133604],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[63,133606,133608],{"id":133607},"_1211-display-显示","12.1.1 display 显示",[46,133610,133611],{},[49,133612,133613],{},"display 设置或检索对象是否及如何显示",[1109,133615,133616,133619],{},[49,133617,133618],{},"display: none;隐藏对象",[49,133620,133621],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[46,133623,133624,133631],{"start":11},[49,133625,133626,133627,133630],{},"特点： display 隐藏元素后， ",[251,133628,133629],{},"不再占"," 有原来的位置",[49,133632,133633],{},"在js中使用非常的广泛",[63,133635,133637],{"id":133636},"_1212-visibility可见性","12.1.2 visibility可见性",[46,133639,133640],{},[49,133641,133642],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1109,133644,133645,133648],{},[49,133646,133647],{},"visibility： visible；元素可见",[49,133649,133650],{},"visibility：hidden；元素隐藏",[46,133652,133653,133656,133659],{"start":11},[49,133654,133655],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[49,133657,133658],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[49,133660,133661],{},"隐藏后继续占有原有位置",[63,133663,133665],{"id":133664},"_1213-overflow溢出","12.1.3 overflow溢出",[1109,133667,133668],{},[49,133669,133670],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[239,133672,133673,133681],{},[242,133674,133675],{},[245,133676,133677,133679],{},[248,133678,126991],{"align":23710},[248,133680,27464],{"align":23710},[286,133682,133683,133691,133698,133705],{},[245,133684,133685,133688],{},[291,133686,133687],{"align":23710},"visible",[291,133689,133690],{"align":23710},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[245,133692,133693,133695],{},[291,133694,61689],{"align":23710},[291,133696,133697],{"align":23710},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[245,133699,133700,133702],{},[291,133701,128947],{"align":23710},[291,133703,133704],{"align":23710},"不管超出内容否，总是显示滚动条",[245,133706,133707,133709],{},[291,133708,72638],{"align":23710},[291,133710,133711],{"align":23710},"超出自动显示滚动条，不超出不显示滚动条",[1109,133713,133714,133717],{},[49,133715,133716],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[49,133718,133719],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[63,133721,133723],{"id":133722},"_1214-案例收获","12.1.4 案例收获",[1440,133725],{"style":126383,"src":133726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[38,133728,133729],{},"问题：没做出来动态效果，使用hover没实现",[38,133731,133732],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[83,133734,133735],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,133736,133737,133741,133755,133759,133773,133777,133791,133795,133809,133813],{"__ignoreMap":10},[91,133738,133739],{"class":93,"line":94},[91,133740,131966],{"class":160},[91,133742,133743,133745,133747,133749,133751,133753],{"class":93,"line":11},[91,133744,131971],{"class":1941},[91,133746,79782],{"class":101},[91,133748,128887],{"class":150},[91,133750,51412],{"class":101},[91,133752,131980],{"class":150},[91,133754,129457],{"class":101},[91,133756,133757],{"class":93,"line":1157},[91,133758,131987],{"class":160},[91,133760,133761,133763,133765,133767,133769,133771],{"class":93,"line":1172},[91,133762,131992],{"class":1941},[91,133764,79782],{"class":101},[91,133766,128887],{"class":150},[91,133768,51412],{"class":101},[91,133770,54739],{"class":150},[91,133772,129457],{"class":101},[91,133774,133775],{"class":93,"line":1178},[91,133776,132007],{"class":160},[91,133778,133779,133781,133783,133785,133787,133789],{"class":93,"line":1192},[91,133780,132012],{"class":1941},[91,133782,79782],{"class":101},[91,133784,128887],{"class":150},[91,133786,51412],{"class":101},[91,133788,54806],{"class":150},[91,133790,129457],{"class":101},[91,133792,133793],{"class":93,"line":1198},[91,133794,132027],{"class":160},[91,133796,133797,133799,133801,133803,133805,133807],{"class":93,"line":1289},[91,133798,132032],{"class":1941},[91,133800,79782],{"class":101},[91,133802,128887],{"class":150},[91,133804,51412],{"class":101},[91,133806,86208],{"class":150},[91,133808,129457],{"class":101},[91,133810,133811],{"class":93,"line":1295},[91,133812,132047],{"class":160},[91,133814,133815,133817,133819,133821,133823,133825],{"class":93,"line":1307},[91,133816,132052],{"class":1941},[91,133818,79782],{"class":101},[91,133820,128887],{"class":150},[91,133822,51412],{"class":101},[91,133824,132061],{"class":150},[91,133826,129457],{"class":101},[38,133828,133829],{},"完整代码：",[83,133831,133832],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,133833,133834,133838,133852,133856,133870,133874,133888,133892,133906,133910],{"__ignoreMap":10},[91,133835,133836],{"class":93,"line":94},[91,133837,131966],{"class":160},[91,133839,133840,133842,133844,133846,133848,133850],{"class":93,"line":11},[91,133841,131971],{"class":1941},[91,133843,79782],{"class":101},[91,133845,128887],{"class":150},[91,133847,51412],{"class":101},[91,133849,131980],{"class":150},[91,133851,129457],{"class":101},[91,133853,133854],{"class":93,"line":1157},[91,133855,131987],{"class":160},[91,133857,133858,133860,133862,133864,133866,133868],{"class":93,"line":1172},[91,133859,131992],{"class":1941},[91,133861,79782],{"class":101},[91,133863,128887],{"class":150},[91,133865,51412],{"class":101},[91,133867,54739],{"class":150},[91,133869,129457],{"class":101},[91,133871,133872],{"class":93,"line":1178},[91,133873,132007],{"class":160},[91,133875,133876,133878,133880,133882,133884,133886],{"class":93,"line":1192},[91,133877,132012],{"class":1941},[91,133879,79782],{"class":101},[91,133881,128887],{"class":150},[91,133883,51412],{"class":101},[91,133885,54806],{"class":150},[91,133887,129457],{"class":101},[91,133889,133890],{"class":93,"line":1198},[91,133891,132027],{"class":160},[91,133893,133894,133896,133898,133900,133902,133904],{"class":93,"line":1289},[91,133895,132032],{"class":1941},[91,133897,79782],{"class":101},[91,133899,128887],{"class":150},[91,133901,51412],{"class":101},[91,133903,86208],{"class":150},[91,133905,129457],{"class":101},[91,133907,133908],{"class":93,"line":1295},[91,133909,132047],{"class":160},[91,133911,133912,133914,133916,133918,133920,133922],{"class":93,"line":1307},[91,133913,132052],{"class":1941},[91,133915,79782],{"class":101},[91,133917,128887],{"class":150},[91,133919,51412],{"class":101},[91,133921,132061],{"class":150},[91,133923,129457],{"class":101},[38,133925,133926],{},"分布思路重点详解：",[83,133928,133929],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,133930,133931,133935,133949,133953,133967,133971,133985,133989,134003,134007],{"__ignoreMap":10},[91,133932,133933],{"class":93,"line":94},[91,133934,131966],{"class":160},[91,133936,133937,133939,133941,133943,133945,133947],{"class":93,"line":11},[91,133938,131971],{"class":1941},[91,133940,79782],{"class":101},[91,133942,128887],{"class":150},[91,133944,51412],{"class":101},[91,133946,131980],{"class":150},[91,133948,129457],{"class":101},[91,133950,133951],{"class":93,"line":1157},[91,133952,131987],{"class":160},[91,133954,133955,133957,133959,133961,133963,133965],{"class":93,"line":1172},[91,133956,131992],{"class":1941},[91,133958,79782],{"class":101},[91,133960,128887],{"class":150},[91,133962,51412],{"class":101},[91,133964,54739],{"class":150},[91,133966,129457],{"class":101},[91,133968,133969],{"class":93,"line":1178},[91,133970,132007],{"class":160},[91,133972,133973,133975,133977,133979,133981,133983],{"class":93,"line":1192},[91,133974,132012],{"class":1941},[91,133976,79782],{"class":101},[91,133978,128887],{"class":150},[91,133980,51412],{"class":101},[91,133982,54806],{"class":150},[91,133984,129457],{"class":101},[91,133986,133987],{"class":93,"line":1198},[91,133988,132027],{"class":160},[91,133990,133991,133993,133995,133997,133999,134001],{"class":93,"line":1289},[91,133992,132032],{"class":1941},[91,133994,79782],{"class":101},[91,133996,128887],{"class":150},[91,133998,51412],{"class":101},[91,134000,86208],{"class":150},[91,134002,129457],{"class":101},[91,134004,134005],{"class":93,"line":1295},[91,134006,132047],{"class":160},[91,134008,134009,134011,134013,134015,134017,134019],{"class":93,"line":1307},[91,134010,132052],{"class":1941},[91,134012,79782],{"class":101},[91,134014,128887],{"class":150},[91,134016,51412],{"class":101},[91,134018,132061],{"class":150},[91,134020,129457],{"class":101},[1440,134022],{"style":126383,"src":134023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[38,134025,134026],{},"图片太大，盒子太小，此时需要修改图片的大小",[83,134028,134030],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[88,134031,134032],{"__ignoreMap":10},[91,134033,134034,134036,134038,134040,134042,134045,134047,134049,134052,134055,134057,134060],{"class":93,"line":94},[91,134035,1012],{"class":101},[91,134037,1440],{"class":51275},[91,134039,55214],{"class":1941},[91,134041,147],{"class":101},[91,134043,134044],{"class":206},"\"images\u002Fpic.jpg\"",[91,134046,55222],{"class":1941},[91,134048,147],{"class":101},[91,134050,134051],{"class":206},"\"描述文字\"",[91,134053,134054],{"class":1941}," title",[91,134056,147],{"class":101},[91,134058,134059],{"class":206},"\"悬停提示\"",[91,134061,51282],{"class":101},[1440,134063],{"style":126383,"src":134064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[38,134066,134067],{},"制造遮罩层",[83,134069,134070],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,134071,134072],{"__ignoreMap":10},[91,134073,134074,134076,134078,134080,134082,134084,134086,134088,134090,134092,134094,134096],{"class":93,"line":94},[91,134075,1012],{"class":101},[91,134077,1440],{"class":51275},[91,134079,55214],{"class":1941},[91,134081,147],{"class":101},[91,134083,134044],{"class":206},[91,134085,55222],{"class":1941},[91,134087,147],{"class":101},[91,134089,134051],{"class":206},[91,134091,134054],{"class":1941},[91,134093,147],{"class":101},[91,134095,134059],{"class":206},[91,134097,51282],{"class":101},[38,134099,134100],{},"此时是这样的为标准流",[1440,134102],{"style":126383,"src":134103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[38,134105,134106],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[38,134108,134109],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[38,134111,134112],{},"让他在中间，用center(background-position)",[38,134114,134115],{},"将需要变的尽可能放到一个盒子中",[38,134117,134118],{},"放大盒子上内部盒子发生变化",[83,134120,134122],{"className":126527,"code":134121,"language":126529,"meta":10,"style":10},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[88,134123,134124,134130,134140,134144,134151,134161,134173,134185],{"__ignoreMap":10},[91,134125,134126,134128],{"class":93,"line":94},[91,134127,127594],{"class":1941},[91,134129,15551],{"class":101},[91,134131,134132,134134,134136,134138],{"class":93,"line":11},[91,134133,132333],{"class":150},[91,134135,51412],{"class":101},[91,134137,54739],{"class":150},[91,134139,1268],{"class":101},[91,134141,134142],{"class":93,"line":1157},[91,134143,1543],{"class":101},[91,134145,134146,134149],{"class":93,"line":1172},[91,134147,134148],{"class":1941},".child",[91,134150,15551],{"class":101},[91,134152,134153,134155,134157,134159],{"class":93,"line":1178},[91,134154,132333],{"class":150},[91,134156,51412],{"class":101},[91,134158,54806],{"class":150},[91,134160,1268],{"class":101},[91,134162,134163,134165,134167,134169,134171],{"class":93,"line":1192},[91,134164,132347],{"class":150},[91,134166,51412],{"class":101},[91,134168,758],{"class":150},[91,134170,430],{"class":97},[91,134172,1268],{"class":101},[91,134174,134175,134177,134179,134181,134183],{"class":93,"line":1198},[91,134176,132364],{"class":150},[91,134178,51412],{"class":101},[91,134180,758],{"class":150},[91,134182,430],{"class":97},[91,134184,1268],{"class":101},[91,134186,134187],{"class":93,"line":1289},[91,134188,1543],{"class":101},[38,134190,134191],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[33,134193,134195],{"id":134194},"_122-精灵图","12.2 精灵图",[63,134197,134199],{"id":134198},"_1221-理解","12.2.1 理解",[46,134201,134202,134220],{},[49,134203,134204,134205,132433,134208,134211,134212,134215,134216,134219],{},"目的： ",[251,134206,134207],{},"为了有效地减少服务器接收和发送请求的次数",[251,134209,134210],{},"提高"," 页面的 ",[251,134213,134214],{},"加载速度"," ，出现了 ",[251,134217,134218],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[49,134221,134222,134223,134225,134226,134228,134229,134231,134232,134234,134235,134237,134238,134240],{},"使用精灵图核心：",[53691,134224],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53691,134227],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53691,134230],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53691,134233],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53691,134236],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53691,134239],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[63,134242,134244],{"id":134243},"_1222-扒图","12.2.2 扒图",[83,134246,134249],{"className":134247,"code":134248,"language":5166},[5164],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[88,134250,134248],{"__ignoreMap":10},[1440,134252],{"style":126383,"src":134253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1440,134255],{"style":126383,"src":134256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[63,134258,134260],{"id":134259},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1440,134262],{"style":126383,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[38,134265,134266],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1440,134268],{"style":126383,"src":134269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[83,134271,134273],{"className":126527,"code":134272,"language":126529,"meta":10,"style":10},"\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",[88,134274,134275,134280,134287,134299,134311,134330,134347],{"__ignoreMap":10},[91,134276,134277],{"class":93,"line":94},[91,134278,134279],{"class":160},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[91,134281,134282,134285],{"class":93,"line":11},[91,134283,134284],{"class":1941},".icon",[91,134286,15551],{"class":101},[91,134288,134289,134291,134293,134295,134297],{"class":93,"line":1157},[91,134290,70543],{"class":150},[91,134292,51412],{"class":101},[91,134294,802],{"class":150},[91,134296,51467],{"class":97},[91,134298,1268],{"class":101},[91,134300,134301,134303,134305,134307,134309],{"class":93,"line":1172},[91,134302,70763],{"class":150},[91,134304,51412],{"class":101},[91,134306,802],{"class":150},[91,134308,51467],{"class":97},[91,134310,1268],{"class":101},[91,134312,134313,134315,134317,134319,134321,134324,134326,134328],{"class":93,"line":1178},[91,134314,70586],{"class":150},[91,134316,51412],{"class":101},[91,134318,61701],{"class":150},[91,134320,102],{"class":101},[91,134322,134323],{"class":5195},"sprites.png",[91,134325,13693],{"class":101},[91,134327,61711],{"class":150},[91,134329,1268],{"class":101},[91,134331,134332,134334,134336,134338,134340,134343,134345],{"class":93,"line":1192},[91,134333,128787],{"class":150},[91,134335,51412],{"class":101},[91,134337,51738],{"class":150},[91,134339,51467],{"class":97},[91,134341,134342],{"class":150}," -20",[91,134344,51467],{"class":97},[91,134346,1268],{"class":101},[91,134348,134349],{"class":93,"line":1198},[91,134350,1543],{"class":101},[1440,134352],{"style":126383,"src":134353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[38,134355,134356],{},"在前端中坐标轴的正方向是右和下",[33,134358,134360],{"id":134359},"_123-字体图标","12.3 字体图标",[63,134362,134364],{"id":134363},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[38,134366,134367],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[38,134369,134370],{},"精灵图是有诸多优点的，但是缺点很明显。",[38,134372,134373],{},"1.图片文件还是比较大的。",[38,134375,134376],{},"2.图片本身放大和缩小会失真。",[38,134378,134379],{},"3.一旦图片制作完毕想要更换非常复杂。",[38,134381,134382,134383,25715],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[251,134384,134385],{},"字体图标 iconfont",[38,134387,134388,134391,134392,28360],{},[251,134389,134390],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[251,134393,134394],{},"展示的是图标，本质属于字体",[63,134396,134398],{"id":134397},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1109,134400,134401,134406,134409,134412,134415],{},[49,134402,134403,134405],{},[251,134404,25851],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[49,134407,134408],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[49,134410,134411],{},"兼容性：几乎支持所有的浏览器，请放心使用",[49,134413,134414],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[49,134416,134417],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[63,134419,134421],{"id":134420},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1109,134423,134424],{},[49,134425,134426,134427],{},"icomoon字体库：",[340,134428,134431],{"href":134429,"rel":134430},"http:\u002F\u002Ficomoon.io\u002F",[23839],"http:\u002F\u002Ficomoon.io",[38,134433,134434],{},"进去之后点icomoon app",[1440,134436],{"style":126383,"src":134437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[38,134439,134440],{},"可以对其编辑：",[1440,134442],{"style":126383,"src":134443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[38,134445,134446],{},"生成字体：",[1440,134448],{"style":126383,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[38,134451,134452],{},"下载：",[1440,134454],{"style":126383,"src":134455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1109,134457,134458],{},[49,134459,134460,134461],{},"阿里iconfont字体库： ",[340,134462,134463],{"href":134463,"rel":134464},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23839],[63,134466,134468],{"id":134467},"_1234-字体图标的引入","12.3.4 字体图标的引入",[46,134470,134471],{},[49,134472,134473,134474,134477],{},"把下载包里面的 ",[251,134475,134476],{},"fonts"," 文件夹放入页面根目录下",[1440,134479],{"style":126383,"src":134480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[46,134482,134483],{"start":11},[49,134484,134485],{},"字体文件格式",[239,134487,134488,134497],{},[242,134489,134490],{},[245,134491,134492,134495],{},[248,134493,134494],{"align":23710},"格式",[248,134496,23714],{"align":23710},[286,134498,134499,134509,134519,134529],{},[245,134500,134501,134506],{},[291,134502,134503],{"align":23710},[251,134504,134505],{},".ttf",[291,134507,134508],{"align":23710},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[245,134510,134511,134516],{},[291,134512,134513],{"align":23710},[251,134514,134515],{},".woff",[291,134517,134518],{"align":23710},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[245,134520,134521,134526],{},[291,134522,134523],{"align":23710},[251,134524,134525],{},".eot",[291,134527,134528],{"align":23710},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[245,134530,134531,134536],{},[291,134532,134533],{"align":23710},[251,134534,134535],{},"svg",[291,134537,134538],{"align":23710},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[46,134540,134541],{"start":1157},[49,134542,134543],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[83,134545,134547],{"className":126527,"code":134546,"language":126529,"meta":10,"style":10},"\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",[88,134548,134549,134554,134561,134573,134589,134614,134635,134655,134675,134679,134685,134695,134706],{"__ignoreMap":10},[91,134550,134551],{"class":93,"line":94},[91,134552,134553],{"class":160},"\u002F* 引入字体图标 *\u002F\n",[91,134555,134556,134559],{"class":93,"line":11},[91,134557,134558],{"class":97},"@font-face",[91,134560,15551],{"class":101},[91,134562,134563,134566,134568,134571],{"class":93,"line":1157},[91,134564,134565],{"class":150},"  font-family",[91,134567,51412],{"class":101},[91,134569,134570],{"class":206},"'icomoon'",[91,134572,1268],{"class":101},[91,134574,134575,134578,134580,134582,134584,134587],{"class":93,"line":1172},[91,134576,134577],{"class":150},"  src",[91,134579,51412],{"class":101},[91,134581,61701],{"class":150},[91,134583,102],{"class":101},[91,134585,134586],{"class":206},"'fonts\u002Ficomoon.eot'",[91,134588,2697],{"class":101},[91,134590,134591,134593,134595,134597,134599,134602,134604,134607,134609,134612],{"class":93,"line":1178},[91,134592,134577],{"class":150},[91,134594,51412],{"class":101},[91,134596,61701],{"class":150},[91,134598,102],{"class":101},[91,134600,134601],{"class":206},"'fonts\u002Ficomoon.eot?#iefix'",[91,134603,13693],{"class":101},[91,134605,134606],{"class":150},"format",[91,134608,102],{"class":101},[91,134610,134611],{"class":206},"'embedded-opentype'",[91,134613,38022],{"class":101},[91,134615,134616,134619,134621,134624,134626,134628,134630,134633],{"class":93,"line":1192},[91,134617,134618],{"class":150},"       url",[91,134620,102],{"class":101},[91,134622,134623],{"class":206},"'fonts\u002Ficomoon.woff'",[91,134625,13693],{"class":101},[91,134627,134606],{"class":150},[91,134629,102],{"class":101},[91,134631,134632],{"class":206},"'woff'",[91,134634,38022],{"class":101},[91,134636,134637,134639,134641,134644,134646,134648,134650,134653],{"class":93,"line":1198},[91,134638,134618],{"class":150},[91,134640,102],{"class":101},[91,134642,134643],{"class":206},"'fonts\u002Ficomoon.ttf'",[91,134645,13693],{"class":101},[91,134647,134606],{"class":150},[91,134649,102],{"class":101},[91,134651,134652],{"class":206},"'truetype'",[91,134654,38022],{"class":101},[91,134656,134657,134659,134661,134664,134666,134668,134670,134673],{"class":93,"line":1289},[91,134658,134618],{"class":150},[91,134660,102],{"class":101},[91,134662,134663],{"class":206},"'fonts\u002Ficomoon.svg#icomoon'",[91,134665,13693],{"class":101},[91,134667,134606],{"class":150},[91,134669,102],{"class":101},[91,134671,134672],{"class":206},"'svg'",[91,134674,2697],{"class":101},[91,134676,134677],{"class":93,"line":1295},[91,134678,1543],{"class":101},[91,134680,134681,134683],{"class":93,"line":1307},[91,134682,134284],{"class":1941},[91,134684,15551],{"class":101},[91,134686,134687,134689,134691,134693],{"class":93,"line":1590},[91,134688,134565],{"class":150},[91,134690,51412],{"class":101},[91,134692,134570],{"class":206},[91,134694,1268],{"class":101},[91,134696,134697,134700,134702,134704],{"class":93,"line":1595},[91,134698,134699],{"class":150},"  font-style",[91,134701,51412],{"class":101},[91,134703,63816],{"class":150},[91,134705,1268],{"class":101},[91,134707,134708],{"class":93,"line":1601},[91,134709,1543],{"class":101},[38,134711,134712],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1440,134714],{"style":126383,"src":134715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[46,134717,134718],{"start":1172},[49,134719,134720],{},"添加字体",[1440,134722],{"style":126383,"src":134723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[38,134725,134726],{},"复制：",[1440,134728],{"style":126383,"src":134729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[38,134731,134732],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[46,134734,134735],{"start":1178},[49,134736,134737],{},"代码展示：",[83,134739,134740],{"className":126527,"code":134546,"language":126529,"meta":10,"style":10},[88,134741,134742,134746,134752,134762,134776,134798,134816,134834,134852,134856,134862,134872,134882],{"__ignoreMap":10},[91,134743,134744],{"class":93,"line":94},[91,134745,134553],{"class":160},[91,134747,134748,134750],{"class":93,"line":11},[91,134749,134558],{"class":97},[91,134751,15551],{"class":101},[91,134753,134754,134756,134758,134760],{"class":93,"line":1157},[91,134755,134565],{"class":150},[91,134757,51412],{"class":101},[91,134759,134570],{"class":206},[91,134761,1268],{"class":101},[91,134763,134764,134766,134768,134770,134772,134774],{"class":93,"line":1172},[91,134765,134577],{"class":150},[91,134767,51412],{"class":101},[91,134769,61701],{"class":150},[91,134771,102],{"class":101},[91,134773,134586],{"class":206},[91,134775,2697],{"class":101},[91,134777,134778,134780,134782,134784,134786,134788,134790,134792,134794,134796],{"class":93,"line":1178},[91,134779,134577],{"class":150},[91,134781,51412],{"class":101},[91,134783,61701],{"class":150},[91,134785,102],{"class":101},[91,134787,134601],{"class":206},[91,134789,13693],{"class":101},[91,134791,134606],{"class":150},[91,134793,102],{"class":101},[91,134795,134611],{"class":206},[91,134797,38022],{"class":101},[91,134799,134800,134802,134804,134806,134808,134810,134812,134814],{"class":93,"line":1192},[91,134801,134618],{"class":150},[91,134803,102],{"class":101},[91,134805,134623],{"class":206},[91,134807,13693],{"class":101},[91,134809,134606],{"class":150},[91,134811,102],{"class":101},[91,134813,134632],{"class":206},[91,134815,38022],{"class":101},[91,134817,134818,134820,134822,134824,134826,134828,134830,134832],{"class":93,"line":1198},[91,134819,134618],{"class":150},[91,134821,102],{"class":101},[91,134823,134643],{"class":206},[91,134825,13693],{"class":101},[91,134827,134606],{"class":150},[91,134829,102],{"class":101},[91,134831,134652],{"class":206},[91,134833,38022],{"class":101},[91,134835,134836,134838,134840,134842,134844,134846,134848,134850],{"class":93,"line":1289},[91,134837,134618],{"class":150},[91,134839,102],{"class":101},[91,134841,134663],{"class":206},[91,134843,13693],{"class":101},[91,134845,134606],{"class":150},[91,134847,102],{"class":101},[91,134849,134672],{"class":206},[91,134851,2697],{"class":101},[91,134853,134854],{"class":93,"line":1295},[91,134855,1543],{"class":101},[91,134857,134858,134860],{"class":93,"line":1307},[91,134859,134284],{"class":1941},[91,134861,15551],{"class":101},[91,134863,134864,134866,134868,134870],{"class":93,"line":1590},[91,134865,134565],{"class":150},[91,134867,51412],{"class":101},[91,134869,134570],{"class":206},[91,134871,1268],{"class":101},[91,134873,134874,134876,134878,134880],{"class":93,"line":1595},[91,134875,134699],{"class":150},[91,134877,51412],{"class":101},[91,134879,63816],{"class":150},[91,134881,1268],{"class":101},[91,134883,134884],{"class":93,"line":1601},[91,134885,1543],{"class":101},[1440,134887],{"style":126383,"src":134888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[38,134890,134891],{},"更加细节展示：",[46,134893,134894],{},[49,134895,134896],{},"html 标签内添加小图标",[1440,134898],{"style":126383,"src":134899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[46,134901,134902],{"start":11},[49,134903,134904],{},"给标签定义字体",[83,134906,134907],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,134908,134909,134913,134927,134931],{"__ignoreMap":10},[91,134910,134911],{"class":93,"line":94},[91,134912,130638],{"class":160},[91,134914,134915,134917,134919,134921,134923,134925],{"class":93,"line":11},[91,134916,1012],{"class":101},[91,134918,51586],{"class":51275},[91,134920,53461],{"class":1941},[91,134922,147],{"class":101},[91,134924,130651],{"class":206},[91,134926,51282],{"class":101},[91,134928,134929],{"class":93,"line":1157},[91,134930,130658],{"class":101},[91,134932,134933,134935,134937],{"class":93,"line":1172},[91,134934,51760],{"class":101},[91,134936,51586],{"class":51275},[91,134938,51282],{"class":101},[38,134940,134941],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1440,134943],{"style":126383,"src":134944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[63,134946,134948],{"id":134947},"_1235-字体图标的追加","12.3.5 字体图标的追加",[38,134950,134951],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[38,134953,134954,134955,134958],{},"把压缩包里面的 ",[251,134956,134957],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[38,134960,134961],{},"打开网站，点下方：",[1440,134963],{"style":126383,"src":134964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1440,134966],{"style":126383,"src":134967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1440,134969],{"style":126383,"src":134970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[38,134972,134973],{},"点yes重新加载",[38,134975,134976],{},"然后重复之前的操作就可以实现了",[38,134978,134979],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[63,134981,134983],{"id":134982},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1440,134985],{"style":126383,"src":134986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5105,134988,134989],{},"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":10,"searchDepth":11,"depth":11,"links":134991},[134992,134998,135003],{"id":133595,"depth":11,"text":133596,"children":134993},[134994,134995,134996,134997],{"id":133607,"depth":1157,"text":133608},{"id":133636,"depth":1157,"text":133637},{"id":133664,"depth":1157,"text":133665},{"id":133722,"depth":1157,"text":133723},{"id":134194,"depth":11,"text":134195,"children":134999},[135000,135001,135002],{"id":134198,"depth":1157,"text":134199},{"id":134243,"depth":1157,"text":134244},{"id":134259,"depth":1157,"text":134260},{"id":134359,"depth":11,"text":134360,"children":135004},[135005,135006,135007,135008,135009,135010],{"id":134363,"depth":1157,"text":134364},{"id":134397,"depth":1157,"text":134398},{"id":134420,"depth":1157,"text":134421},{"id":134467,"depth":1157,"text":134468},{"id":134947,"depth":1157,"text":134948},{"id":134982,"depth":1157,"text":134983},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133587,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135017,"title":135018,"body":135019,"description":13,"extension":14,"meta":136246,"navigation":17,"path":136247,"seo":136248,"stem":136249,"__hash__":136250},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135020,"toc":136227},[135021,135024,135028,135031,135045,135113,135143,135146,135150,135154,135256,135303,135307,135310,135313,135347,135350,135353,135356,135359,135362,135365,135368,135370,135373,135376,135379,135382,135385,135388,135391,135419,135422,135426,135429,135436,135439,135442,135468,135471,135475,135478,135481,135488,135492,135495,135497,135529,135532,135535,135547,135553,135556,135559,135562,135564,135568,135571,135574,135577,135622,135626,135628,135631,135638,135680,135683,135687,135692,135706,135710,135713,135716,135719,135722,135725,135759,135762,135765,135819,135822,135825,135828,135831,135883,135886,135889,135938,135942,135944,135947,135950,135953,135956,135959,136017,136020,136026,136029,136032,136064,136067,136071,136075,136078,136110,136114,136117,136161,136165,136168,136171,136174,136177,136180,136183,136186,136188,136191,136193,136196,136199,136202,136205,136210,136213,136215,136218,136221,136224],[29,135022,135018],{"id":135023},"_13-界面样式与布局技巧",[33,135025,135027],{"id":135026},"_131-css三角","13.1 css三角",[38,135029,135030],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1109,135032,135033,135036,135039,135042],{},[49,135034,135035],{},"用css 边框可以模拟三角效果",[49,135037,135038],{},"宽度高度为0",[49,135040,135041],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[49,135043,135044],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[83,135046,135048],{"className":126527,"code":135047,"language":126529,"meta":10,"style":10},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[88,135049,135050,135055,135062,135072,135082,135098,135109],{"__ignoreMap":10},[91,135051,135052],{"class":93,"line":94},[91,135053,135054],{"class":160},"\u002F* CSS 实现三角形 *\u002F\n",[91,135056,135057,135060],{"class":93,"line":11},[91,135058,135059],{"class":1941},".triangle",[91,135061,15551],{"class":101},[91,135063,135064,135066,135068,135070],{"class":93,"line":1157},[91,135065,70543],{"class":150},[91,135067,51412],{"class":101},[91,135069,293],{"class":150},[91,135071,1268],{"class":101},[91,135073,135074,135076,135078,135080],{"class":93,"line":1172},[91,135075,70763],{"class":150},[91,135077,51412],{"class":101},[91,135079,293],{"class":150},[91,135081,1268],{"class":101},[91,135083,135084,135086,135088,135090,135092,135094,135096],{"class":93,"line":1178},[91,135085,70871],{"class":150},[91,135087,51412],{"class":101},[91,135089,548],{"class":150},[91,135091,51467],{"class":97},[91,135093,51496],{"class":150},[91,135095,63966],{"class":150},[91,135097,1268],{"class":101},[91,135099,135100,135103,135105,135107],{"class":93,"line":1192},[91,135101,135102],{"class":150},"  border-bottom-color",[91,135104,51412],{"class":101},[91,135106,62344],{"class":150},[91,135108,1268],{"class":101},[91,135110,135111],{"class":93,"line":1198},[91,135112,1543],{"class":101},[83,135114,135115],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[88,135116,135117,135123,135139],{"__ignoreMap":10},[91,135118,135119,135121],{"class":93,"line":94},[91,135120,51586],{"class":51275},[91,135122,15551],{"class":101},[91,135124,135125,135127,135129,135131,135133,135135,135137],{"class":93,"line":11},[91,135126,70871],{"class":150},[91,135128,51412],{"class":101},[91,135130,319],{"class":150},[91,135132,51467],{"class":97},[91,135134,51496],{"class":150},[91,135136,129919],{"class":150},[91,135138,1268],{"class":101},[91,135140,135141],{"class":93,"line":1157},[91,135142,1543],{"class":101},[1440,135144],{"style":126383,"src":135145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[33,135147,135149],{"id":135148},"_132-css用户界面样式","13.2 css用户界面样式",[63,135151,135153],{"id":135152},"_1321-鼠标样式","13.2.1 鼠标样式",[83,135155,135157],{"className":126527,"code":135156,"language":126529,"meta":10,"style":10},"\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",[88,135158,135159,135164,135183,135201,135220,135237],{"__ignoreMap":10},[91,135160,135161],{"class":93,"line":94},[91,135162,135163],{"class":160},"\u002F* 鼠标样式 *\u002F\n",[91,135165,135166,135168,135170,135173,135175,135177,135180],{"class":93,"line":11},[91,135167,51586],{"class":51275},[91,135169,79782],{"class":101},[91,135171,135172],{"class":150},"cursor",[91,135174,51412],{"class":101},[91,135176,62005],{"class":150},[91,135178,135179],{"class":101},"; }   ",[91,135181,135182],{"class":160},"\u002F* 手型 *\u002F\n",[91,135184,135185,135187,135189,135191,135193,135196,135198],{"class":93,"line":1157},[91,135186,51586],{"class":51275},[91,135188,79782],{"class":101},[91,135190,135172],{"class":150},[91,135192,51412],{"class":101},[91,135194,135195],{"class":150},"default",[91,135197,135179],{"class":101},[91,135199,135200],{"class":160},"\u002F* 默认 *\u002F\n",[91,135202,135203,135205,135207,135209,135211,135214,135217],{"class":93,"line":1172},[91,135204,51586],{"class":51275},[91,135206,79782],{"class":101},[91,135208,135172],{"class":150},[91,135210,51412],{"class":101},[91,135212,135213],{"class":150},"move",[91,135215,135216],{"class":101},"; }      ",[91,135218,135219],{"class":160},"\u002F* 移动 *\u002F\n",[91,135221,135222,135224,135226,135228,135230,135232,135234],{"class":93,"line":1178},[91,135223,51586],{"class":51275},[91,135225,79782],{"class":101},[91,135227,135172],{"class":150},[91,135229,51412],{"class":101},[91,135231,5166],{"class":150},[91,135233,135216],{"class":101},[91,135235,135236],{"class":160},"\u002F* 文本 *\u002F\n",[91,135238,135239,135241,135243,135245,135247,135250,135253],{"class":93,"line":1192},[91,135240,51586],{"class":51275},[91,135242,79782],{"class":101},[91,135244,135172],{"class":150},[91,135246,51412],{"class":101},[91,135248,135249],{"class":150},"not-allowed",[91,135251,135252],{"class":101},"; } ",[91,135254,135255],{"class":160},"\u002F* 禁止 *\u002F\n",[239,135257,135258,135266],{},[242,135259,135260],{},[245,135261,135262,135264],{},[248,135263,126991],{"align":23710},[248,135265,27464],{"align":23710},[286,135267,135268,135275,135282,135289,135296],{},[245,135269,135270,135272],{},[291,135271,135195],{"align":23710},[291,135273,135274],{"align":23710},"小白 默认",[245,135276,135277,135279],{},[291,135278,62005],{"align":23710},[291,135280,135281],{"align":23710},"小手",[245,135283,135284,135286],{},[291,135285,135213],{"align":23710},[291,135287,135288],{"align":23710},"移动",[245,135290,135291,135293],{},[291,135292,5166],{"align":23710},[291,135294,135295],{"align":23710},"文本",[245,135297,135298,135300],{},[291,135299,135249],{"align":23710},[291,135301,135302],{"align":23710},"禁止",[63,135304,135306],{"id":135305},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[38,135308,135309],{},"去除表单轮廓线",[38,135311,135312],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[83,135314,135315],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[88,135316,135317,135321,135327,135343],{"__ignoreMap":10},[91,135318,135319],{"class":93,"line":94},[91,135320,129898],{"class":160},[91,135322,135323,135325],{"class":93,"line":11},[91,135324,51586],{"class":51275},[91,135326,15551],{"class":101},[91,135328,135329,135331,135333,135335,135337,135339,135341],{"class":93,"line":1157},[91,135330,70871],{"class":150},[91,135332,51412],{"class":101},[91,135334,319],{"class":150},[91,135336,51467],{"class":97},[91,135338,51496],{"class":150},[91,135340,129919],{"class":150},[91,135342,1268],{"class":101},[91,135344,135345],{"class":93,"line":1172},[91,135346,1543],{"class":101},[38,135348,135349],{},"文本域：",[1440,135351],{"style":126383,"src":135352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[38,135354,135355],{},"此时会有一个空白区域",[1440,135357],{"style":126383,"src":135358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[38,135360,135361],{},"写在同一行就不会出现这个问题",[1440,135363],{"style":126383,"src":135364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[38,135366,135367],{},"文本域是行内块元素，一定记住！！！",[38,135369,98208],{},[1440,135371],{"style":126383,"src":135372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[38,135374,135375],{},"文本域尽量放在一行",[38,135377,135378],{},"知识回顾：cols是列，rols是行",[1440,135380],{"style":126383,"src":135381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[38,135383,135384],{},"它可以进行拖动，显然这是我们不愿意看到的",[1440,135386],{"style":126383,"src":135387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[38,135389,135390],{},"使用resize进行解决",[83,135392,135394],{"className":126527,"code":135393,"language":126529,"meta":10,"style":10},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[88,135395,135396,135402,135415],{"__ignoreMap":10},[91,135397,135398,135400],{"class":93,"line":94},[91,135399,53796],{"class":51275},[91,135401,15551],{"class":101},[91,135403,135404,135406,135408,135410,135412],{"class":93,"line":11},[91,135405,70773],{"class":150},[91,135407,51412],{"class":101},[91,135409,54712],{"class":150},[91,135411,130390],{"class":101},[91,135413,135414],{"class":160},"\u002F* 取消表单轮廓线 *\u002F\n",[91,135416,135417],{"class":93,"line":1157},[91,135418,1543],{"class":101},[38,135420,135421],{},"此时就无法通过右下方实现拖动了",[63,135423,135425],{"id":135424},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[38,135427,135428],{},"实现一个盒子中的文字和图片对齐",[38,135430,135431,135432,135435],{},"用于设置一个元素的 ",[251,135433,135434],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[38,135437,135438],{},"图片和文字默认是基线对齐",[1440,135440],{"style":126383,"src":135441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[83,135443,135444],{"className":126527,"code":135393,"language":126529,"meta":10,"style":10},[88,135445,135446,135452,135464],{"__ignoreMap":10},[91,135447,135448,135450],{"class":93,"line":94},[91,135449,53796],{"class":51275},[91,135451,15551],{"class":101},[91,135453,135454,135456,135458,135460,135462],{"class":93,"line":11},[91,135455,70773],{"class":150},[91,135457,51412],{"class":101},[91,135459,54712],{"class":150},[91,135461,130390],{"class":101},[91,135463,135414],{"class":160},[91,135465,135466],{"class":93,"line":1157},[91,135467,1543],{"class":101},[1440,135469],{"style":126383,"src":135470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21977,135472,135474],{"id":135473},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[38,135476,135477],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1440,135479],{"style":126383,"src":135480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[38,135482,135483,135484,135487],{},"此时可以给图片、表单这些行内块元素的 ",[251,135485,135486],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21977,135489,135491],{"id":135490},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[38,135493,135494],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[38,135496,14612],{},[83,135498,135500],{"className":126527,"code":135499,"language":126529,"meta":10,"style":10},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[88,135501,135502,135507,135513,135525],{"__ignoreMap":10},[91,135503,135504],{"class":93,"line":94},[91,135505,135506],{"class":160},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[91,135508,135509,135511],{"class":93,"line":11},[91,135510,1440],{"class":51275},[91,135512,15551],{"class":101},[91,135514,135515,135518,135520,135523],{"class":93,"line":1157},[91,135516,135517],{"class":150},"  vertical-align",[91,135519,51412],{"class":101},[91,135521,135522],{"class":150},"middle",[91,135524,1268],{"class":101},[91,135526,135527],{"class":93,"line":1172},[91,135528,1543],{"class":101},[1440,135530],{"style":126383,"src":135531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[38,135533,135534],{},"主要解决方法有两种：",[46,135536,135537],{},[49,135538,135539,135542,135543,135546],{},[251,135540,135541],{},"给图片"," 添加 ",[251,135544,135545],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[38,135548,135549,135550],{},"2.把图片转换为块级元素 ",[251,135551,135552],{},"display: block",[38,135554,135555],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[38,135557,135558],{},"img {",[38,135560,135561],{},"vertical-align:middle;",[38,135563,1048],{},[63,135565,135567],{"id":135566},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[38,135569,135570],{},"效果：",[1440,135572],{"style":126383,"src":135573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[38,135575,135576],{},"单行文本溢出显示省略号--必须满足三个条件：",[83,135578,135580],{"className":126527,"code":135579,"language":126529,"meta":10,"style":10},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[88,135581,135582,135587,135593,135603,135608,135618],{"__ignoreMap":10},[91,135583,135584],{"class":93,"line":94},[91,135585,135586],{"class":160},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[91,135588,135589,135591],{"class":93,"line":11},[91,135590,1440],{"class":51275},[91,135592,15551],{"class":101},[91,135594,135595,135597,135599,135601],{"class":93,"line":1157},[91,135596,135517],{"class":150},[91,135598,51412],{"class":101},[91,135600,135522],{"class":150},[91,135602,1268],{"class":101},[91,135604,135605],{"class":93,"line":1172},[91,135606,135607],{"class":160},"  \u002F* 或 *\u002F\n",[91,135609,135610,135612,135614,135616],{"class":93,"line":1178},[91,135611,128143],{"class":150},[91,135613,51412],{"class":101},[91,135615,60844],{"class":150},[91,135617,1268],{"class":101},[91,135619,135620],{"class":93,"line":1192},[91,135621,1543],{"class":101},[63,135623,135625],{"id":135624},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[38,135627,135570],{},[1440,135629],{"style":126383,"src":135630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[38,135632,135633,135634,135637],{},"多行文本溢出显示省略号， ",[251,135635,135636],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[83,135639,135640],{"className":126527,"code":135579,"language":126529,"meta":10,"style":10},[88,135641,135642,135646,135652,135662,135666,135676],{"__ignoreMap":10},[91,135643,135644],{"class":93,"line":94},[91,135645,135586],{"class":160},[91,135647,135648,135650],{"class":93,"line":11},[91,135649,1440],{"class":51275},[91,135651,15551],{"class":101},[91,135653,135654,135656,135658,135660],{"class":93,"line":1157},[91,135655,135517],{"class":150},[91,135657,51412],{"class":101},[91,135659,135522],{"class":150},[91,135661,1268],{"class":101},[91,135663,135664],{"class":93,"line":1172},[91,135665,135607],{"class":160},[91,135667,135668,135670,135672,135674],{"class":93,"line":1178},[91,135669,128143],{"class":150},[91,135671,51412],{"class":101},[91,135673,60844],{"class":150},[91,135675,1268],{"class":101},[91,135677,135678],{"class":93,"line":1192},[91,135679,1543],{"class":101},[38,135681,135682],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[33,135684,135686],{"id":135685},"_133-常见布局技巧","13.3 常见布局技巧",[38,135688,135689],{},[251,135690,135691],{},"巧妙利用一个技术更快更好的布局：",[46,135693,135694,135697,135700,135703],{},[49,135695,135696],{},"margin负值的运用",[49,135698,135699],{},"文字围绕浮动元素",[49,135701,135702],{},"行内块的巧妙运用",[49,135704,135705],{},"CSS三角强化",[63,135707,135709],{"id":135708},"_1331-margin负值的运用","13.3.1 margin负值的运用",[38,135711,135712],{},"应用场景：",[1440,135714],{"style":126383,"src":135715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1440,135717],{"style":126383,"src":135718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[38,135720,135721],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[38,135723,135724],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[83,135726,135727],{"className":126527,"code":129891,"language":126529,"meta":10,"style":10},[88,135728,135729,135733,135739,135755],{"__ignoreMap":10},[91,135730,135731],{"class":93,"line":94},[91,135732,129898],{"class":160},[91,135734,135735,135737],{"class":93,"line":11},[91,135736,51586],{"class":51275},[91,135738,15551],{"class":101},[91,135740,135741,135743,135745,135747,135749,135751,135753],{"class":93,"line":1157},[91,135742,70871],{"class":150},[91,135744,51412],{"class":101},[91,135746,319],{"class":150},[91,135748,51467],{"class":97},[91,135750,51496],{"class":150},[91,135752,129919],{"class":150},[91,135754,1268],{"class":101},[91,135756,135757],{"class":93,"line":1172},[91,135758,1543],{"class":101},[1440,135760],{"style":126383,"src":135761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[38,135763,135764],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[83,135766,135768],{"className":126527,"code":135767,"language":126529,"meta":10,"style":10},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[88,135769,135770,135775,135781,135791,135803,135815],{"__ignoreMap":10},[91,135771,135772],{"class":93,"line":94},[91,135773,135774],{"class":160},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[91,135776,135777,135779],{"class":93,"line":11},[91,135778,130375],{"class":1941},[91,135780,15551],{"class":101},[91,135782,135783,135785,135787,135789],{"class":93,"line":1157},[91,135784,132333],{"class":150},[91,135786,51412],{"class":101},[91,135788,54739],{"class":150},[91,135790,1268],{"class":101},[91,135792,135793,135795,135797,135799,135801],{"class":93,"line":1172},[91,135794,132347],{"class":150},[91,135796,51412],{"class":101},[91,135798,548],{"class":150},[91,135800,51467],{"class":97},[91,135802,1268],{"class":101},[91,135804,135805,135807,135809,135811,135813],{"class":93,"line":1178},[91,135806,132364],{"class":150},[91,135808,51412],{"class":101},[91,135810,802],{"class":150},[91,135812,51467],{"class":97},[91,135814,1268],{"class":101},[91,135816,135817],{"class":93,"line":1192},[91,135818,1543],{"class":101},[38,135820,135821],{},"加上上述代码会发现：",[1440,135823],{"style":126383,"src":135824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[38,135826,135827],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[38,135829,135830],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[83,135832,135833],{"className":126527,"code":135767,"language":126529,"meta":10,"style":10},[88,135834,135835,135839,135845,135855,135867,135879],{"__ignoreMap":10},[91,135836,135837],{"class":93,"line":94},[91,135838,135774],{"class":160},[91,135840,135841,135843],{"class":93,"line":11},[91,135842,130375],{"class":1941},[91,135844,15551],{"class":101},[91,135846,135847,135849,135851,135853],{"class":93,"line":1157},[91,135848,132333],{"class":150},[91,135850,51412],{"class":101},[91,135852,54739],{"class":150},[91,135854,1268],{"class":101},[91,135856,135857,135859,135861,135863,135865],{"class":93,"line":1172},[91,135858,132347],{"class":150},[91,135860,51412],{"class":101},[91,135862,548],{"class":150},[91,135864,51467],{"class":97},[91,135866,1268],{"class":101},[91,135868,135869,135871,135873,135875,135877],{"class":93,"line":1178},[91,135870,132364],{"class":150},[91,135872,51412],{"class":101},[91,135874,802],{"class":150},[91,135876,51467],{"class":97},[91,135878,1268],{"class":101},[91,135880,135881],{"class":93,"line":1192},[91,135882,1543],{"class":101},[38,135884,135885],{},"解决方式2：",[38,135887,135888],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[83,135890,135892],{"className":126527,"code":135891,"language":126529,"meta":10,"style":10},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[88,135893,135894,135900,135910,135922,135934],{"__ignoreMap":10},[91,135895,135896,135898],{"class":93,"line":94},[91,135897,51586],{"class":51275},[91,135899,15551],{"class":101},[91,135901,135902,135904,135906,135908],{"class":93,"line":11},[91,135903,132333],{"class":150},[91,135905,51412],{"class":101},[91,135907,54739],{"class":150},[91,135909,1268],{"class":101},[91,135911,135912,135914,135916,135918,135920],{"class":93,"line":1157},[91,135913,132347],{"class":150},[91,135915,51412],{"class":101},[91,135917,548],{"class":150},[91,135919,51467],{"class":97},[91,135921,1268],{"class":101},[91,135923,135924,135926,135928,135930,135932],{"class":93,"line":1172},[91,135925,132364],{"class":150},[91,135927,51412],{"class":101},[91,135929,802],{"class":150},[91,135931,51467],{"class":97},[91,135933,1268],{"class":101},[91,135935,135936],{"class":93,"line":1178},[91,135937,1543],{"class":101},[63,135939,135941],{"id":135940},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[38,135943,135712],{},[1440,135945],{"style":126383,"src":135946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[38,135948,135949],{},"实现结构图：",[1440,135951],{"style":126383,"src":135952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[38,135954,135955],{},"巧妙运用浮动元素不会压住文字的特性",[38,135957,135958],{},"代码显示：",[83,135960,135962],{"className":126527,"code":135961,"language":126529,"meta":10,"style":10},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[88,135963,135964,135970,135980,135984,135989,135993,135999,136013],{"__ignoreMap":10},[91,135965,135966,135968],{"class":93,"line":94},[91,135967,130375],{"class":1941},[91,135969,15551],{"class":101},[91,135971,135972,135974,135976,135978],{"class":93,"line":11},[91,135973,131007],{"class":150},[91,135975,51412],{"class":101},[91,135977,23710],{"class":150},[91,135979,1268],{"class":101},[91,135981,135982],{"class":93,"line":1157},[91,135983,1543],{"class":101},[91,135985,135986],{"class":93,"line":1172},[91,135987,135988],{"class":101},"```Css\n",[91,135990,135991],{"class":93,"line":1178},[91,135992,130370],{"class":160},[91,135994,135995,135997],{"class":93,"line":1192},[91,135996,130375],{"class":1941},[91,135998,15551],{"class":101},[91,136000,136001,136003,136005,136007,136009,136011],{"class":93,"line":1198},[91,136002,70445],{"class":150},[91,136004,51412],{"class":101},[91,136006,293],{"class":150},[91,136008,51531],{"class":150},[91,136010,130390],{"class":101},[91,136012,130393],{"class":160},[91,136014,136015],{"class":93,"line":1289},[91,136016,1543],{"class":101},[38,136018,136019],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[83,136021,136024],{"className":136022,"code":136023,"language":5166},[5164],"\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",[88,136025,136023],{"__ignoreMap":10},[1440,136027],{"style":126383,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[38,136030,136031],{},"最终展示结果：",[83,136033,136034],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[88,136035,136036,136040,136046,136060],{"__ignoreMap":10},[91,136037,136038],{"class":93,"line":94},[91,136039,130370],{"class":160},[91,136041,136042,136044],{"class":93,"line":11},[91,136043,130375],{"class":1941},[91,136045,15551],{"class":101},[91,136047,136048,136050,136052,136054,136056,136058],{"class":93,"line":1157},[91,136049,70445],{"class":150},[91,136051,51412],{"class":101},[91,136053,293],{"class":150},[91,136055,51531],{"class":150},[91,136057,130390],{"class":101},[91,136059,130393],{"class":160},[91,136061,136062],{"class":93,"line":1172},[91,136063,1543],{"class":101},[1440,136065],{"style":126383,"src":136066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[33,136068,136070],{"id":136069},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[63,136072,136074],{"id":136073},"_1341-原理","13.4.1 原理",[1440,136076],{"style":126383,"src":136077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[83,136079,136080],{"className":126527,"code":130363,"language":126529,"meta":10,"style":10},[88,136081,136082,136086,136092,136106],{"__ignoreMap":10},[91,136083,136084],{"class":93,"line":94},[91,136085,130370],{"class":160},[91,136087,136088,136090],{"class":93,"line":11},[91,136089,130375],{"class":1941},[91,136091,15551],{"class":101},[91,136093,136094,136096,136098,136100,136102,136104],{"class":93,"line":1157},[91,136095,70445],{"class":150},[91,136097,51412],{"class":101},[91,136099,293],{"class":150},[91,136101,51531],{"class":150},[91,136103,130390],{"class":101},[91,136105,130393],{"class":160},[91,136107,136108],{"class":93,"line":1172},[91,136109,1543],{"class":101},[63,136111,136113],{"id":136112},"_1342-实例","13.4.2 实例",[1440,136115],{"style":126383,"src":136116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[83,136118,136119],{"className":126527,"code":130993,"language":126529,"meta":10,"style":10},[88,136120,136121,136127,136137,136141,136147,136157],{"__ignoreMap":10},[91,136122,136123,136125],{"class":93,"line":94},[91,136124,131000],{"class":1941},[91,136126,15551],{"class":101},[91,136128,136129,136131,136133,136135],{"class":93,"line":11},[91,136130,131007],{"class":150},[91,136132,51412],{"class":101},[91,136134,23710],{"class":150},[91,136136,1268],{"class":101},[91,136138,136139],{"class":93,"line":1157},[91,136140,1543],{"class":101},[91,136142,136143,136145],{"class":93,"line":1172},[91,136144,131022],{"class":1941},[91,136146,15551],{"class":101},[91,136148,136149,136151,136153,136155],{"class":93,"line":1178},[91,136150,131007],{"class":150},[91,136152,51412],{"class":101},[91,136154,72497],{"class":150},[91,136156,1268],{"class":101},[91,136158,136159],{"class":93,"line":1192},[91,136160,1543],{"class":101},[33,136162,136164],{"id":136163},"_135-css的初始化","13.5 css的初始化",[38,136166,136167],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[38,136169,136170],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[38,136172,136173],{},"每个网页都必须首先进行 CSS初始化。",[38,136175,136176],{},"这里我们以 京东CSS初始化代码为例。",[38,136178,136179],{},"在网页右键查看网页源代码",[38,136181,136182],{},"找到css的link引入语句",[38,136184,136185],{},"然后ctrl+f 输入body",[38,136187,77201],{},[1440,136189],{"style":126383,"src":136190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[38,136192,77224],{},[1440,136194],{"style":126383,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[38,136197,136198],{},"③打开了网页上传压缩的代码",[1440,136200],{"style":126383,"src":136201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[38,136203,136204],{},"④从body前可以查看这个网页的初始化代码",[38,136206,136207],{},[251,136208,136209],{},"Unicode编码字体：",[38,136211,136212],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[38,136214,83182],{},[38,136216,136217],{},"黑体 \\9ED1\\4F53",[38,136219,136220],{},"宋体 \\5B8B\\4F53",[38,136222,136223],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5105,136225,136226],{},"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":10,"searchDepth":11,"depth":11,"links":136228},[136229,136230,136237,136241,136245],{"id":135026,"depth":11,"text":135027},{"id":135148,"depth":11,"text":135149,"children":136231},[136232,136233,136234,136235,136236],{"id":135152,"depth":1157,"text":135153},{"id":135305,"depth":1157,"text":135306},{"id":135424,"depth":1157,"text":135425},{"id":135566,"depth":1157,"text":135567},{"id":135624,"depth":1157,"text":135625},{"id":135685,"depth":11,"text":135686,"children":136238},[136239,136240],{"id":135708,"depth":1157,"text":135709},{"id":135940,"depth":1157,"text":135941},{"id":136069,"depth":11,"text":136070,"children":136242},[136243,136244],{"id":136073,"depth":1157,"text":136074},{"id":136112,"depth":1157,"text":136113},{"id":136163,"depth":11,"text":136164},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135018,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136252,"title":136253,"body":136254,"description":13,"extension":14,"meta":137940,"navigation":17,"path":137941,"seo":137942,"stem":137943,"__hash__":137944},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136255,"toc":137929},[136256,136259,136263,136267,136270,136277,136280,136283,136321,136324,136326,136340,136344,136353,136357,136362,136365,136368,136371,136406,136411,136414,136444,136447,136452,136455,136458,136488,136491,136545,136548,136552,136557,136569,136572,136576,136606,136609,136614,136617,136647,136650,136654,136671,136675,136679,136682,136715,136718,136722,136725,136728,136731,136734,136737,136848,136851,136854,136857,136959,136962,136966,136970,136974,136977,137017,137020,137022,137038,137042,137045,137050,137131,137134,137137,137263,137268,137271,137279,137282,137287,137372,137375,137379,137382,137385,137389,137409,137414,137498,137501,137506,137509,137512,137590,137593,137596,137599,137602,137605,137610,137613,137616,137688,137691,137696,137699,137796,137799,137805,137808,137811,137814,137817,137820,137823,137826,137829,137833,137838,137841,137874,137879,137882,137923,137926],[29,136257,136253],{"id":136258},"_14-html5与css3新特性",[33,136260,136262],{"id":136261},"_141-html5的新特性","14.1 HTML5的新特性",[63,136264,136266],{"id":136265},"_1411-基本标签","14.1.1 基本标签",[38,136268,136269],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[38,136271,136272,136273,136276],{},"这些新特性都有兼容性问题，基本是 ",[251,136274,136275],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[38,136278,136279],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[38,136281,136282],{},"现在使用的是新特性：",[1109,136284,136285,136291,136297,136303,136309,136315],{},[49,136286,136287,136290],{},[88,136288,136289],{},"\u003Cheader>"," 头部标签",[49,136292,136293,136296],{},[88,136294,136295],{},"\u003Cnav>"," 导航标签",[49,136298,136299,136302],{},[88,136300,136301],{},"\u003Carticle>"," 内容标签",[49,136304,136305,136308],{},[88,136306,136307],{},"\u003Csection>"," 定义文档某个区域",[49,136310,136311,136314],{},[88,136312,136313],{},"\u003Caside>"," 侧边栏标签",[49,136316,136317,136320],{},[88,136318,136319],{},"\u003Cfooter>"," 尾部标签",[1440,136322],{"style":126383,"src":136323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[38,136325,131],{},[1109,136327,136328,136331,136334,136337],{},[49,136329,136330],{},"这种语义化标准主要是针对搜索引擎的",[49,136332,136333],{},"这些标签页面中可以经常使用",[49,136335,136336],{},"在IE9中，需要把这些元素转换为块级元素",[49,136338,136339],{},"移动端更喜欢使用这些标签",[63,136341,136343],{"id":136342},"_1412-多媒体标签","14.1.2 多媒体标签",[38,136345,136346,136347,136349,136350,136352],{},"音频 ",[251,136348,28149],{}," 和视频 ",[251,136351,28158],{}," 两个标签",[21977,136354,136356],{"id":136355},"_14121-视频标签-video","14.1.2.1 视频标签- video",[46,136358,136359],{},[49,136360,136361],{},"支持格式：",[1440,136363],{"style":126383,"src":136364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[38,136366,136367],{},"尽量使用MP4，兼容性好",[38,136369,136370],{},"用MP4就可以",[83,136372,136374],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[88,136375,136376],{"__ignoreMap":10},[91,136377,136378,136380,136382,136384,136386,136389,136391,136394,136397,136400,136402,136404],{"class":93,"line":94},[91,136379,1012],{"class":101},[91,136381,28158],{"class":51275},[91,136383,55214],{"class":1941},[91,136385,147],{"class":101},[91,136387,136388],{"class":206},"\"movie.mp4\"",[91,136390,92398],{"class":1941},[91,136392,136393],{"class":1941}," autoplay",[91,136395,136396],{"class":1941}," muted",[91,136398,136399],{"class":1941}," loop",[91,136401,55289],{"class":101},[91,136403,28158],{"class":51275},[91,136405,51282],{"class":101},[46,136407,136408],{"start":11},[49,136409,136410],{},"兼容写法",[38,136412,136413],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[83,136415,136416],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},[88,136417,136418],{"__ignoreMap":10},[91,136419,136420,136422,136424,136426,136428,136430,136432,136434,136436,136438,136440,136442],{"class":93,"line":94},[91,136421,1012],{"class":101},[91,136423,28158],{"class":51275},[91,136425,55214],{"class":1941},[91,136427,147],{"class":101},[91,136429,136388],{"class":206},[91,136431,92398],{"class":1941},[91,136433,136393],{"class":1941},[91,136435,136396],{"class":1941},[91,136437,136399],{"class":1941},[91,136439,55289],{"class":101},[91,136441,28158],{"class":51275},[91,136443,51282],{"class":101},[38,136445,136446],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[46,136448,136449],{"start":1157},[49,136450,136451],{},"video常用属性",[1440,136453],{"style":126383,"src":136454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[38,136456,136457],{},"poster属性后面是跟的等待加载图片的地址",[83,136459,136460],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,136461,136462],{"__ignoreMap":10},[91,136463,136464,136466,136468,136470,136472,136474,136476,136478,136480,136482,136484,136486],{"class":93,"line":94},[91,136465,1012],{"class":101},[91,136467,1440],{"class":51275},[91,136469,55214],{"class":1941},[91,136471,147],{"class":101},[91,136473,134044],{"class":206},[91,136475,55222],{"class":1941},[91,136477,147],{"class":101},[91,136479,134051],{"class":206},[91,136481,134054],{"class":1941},[91,136483,147],{"class":101},[91,136485,134059],{"class":206},[91,136487,51282],{"class":101},[38,136489,136490],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[83,136492,136494],{"className":126527,"code":136493,"language":126529,"meta":10,"style":10},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[88,136495,136496,136501,136507,136531,136536,136541],{"__ignoreMap":10},[91,136497,136498],{"class":93,"line":94},[91,136499,136500],{"class":160},"\u002F* 2D 位移 *\u002F\n",[91,136502,136503,136505],{"class":93,"line":11},[91,136504,51586],{"class":51275},[91,136506,15551],{"class":101},[91,136508,136509,136512,136514,136517,136519,136521,136523,136525,136527,136529],{"class":93,"line":1157},[91,136510,136511],{"class":150},"  transform",[91,136513,51412],{"class":101},[91,136515,136516],{"class":150},"translate",[91,136518,102],{"class":101},[91,136520,413],{"class":150},[91,136522,51467],{"class":97},[91,136524,12414],{"class":101},[91,136526,758],{"class":150},[91,136528,51467],{"class":97},[91,136530,2697],{"class":101},[91,136532,136533],{"class":93,"line":1172},[91,136534,136535],{"class":160},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[91,136537,136538],{"class":93,"line":1178},[91,136539,136540],{"class":160},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[91,136542,136543],{"class":93,"line":1192},[91,136544,1543],{"class":101},[38,136546,136547],{},"muted:自动静音属性",[21977,136549,136551],{"id":136550},"_14122-音频标签audio","14.1.2.2 音频标签audio",[46,136553,136554],{},[49,136555,136556],{},"基本使用",[38,136558,136559,136560,136565,136566],{},"当前 ",[251,136561,136562],{},[88,136563,136564],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[251,136567,136568],{},"mp3格式",[1440,136570],{"style":126383,"src":136571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[46,136573,136574],{"start":11},[49,136575,136410],{},[83,136577,136578],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},[88,136579,136580],{"__ignoreMap":10},[91,136581,136582,136584,136586,136588,136590,136592,136594,136596,136598,136600,136602,136604],{"class":93,"line":94},[91,136583,1012],{"class":101},[91,136585,28158],{"class":51275},[91,136587,55214],{"class":1941},[91,136589,147],{"class":101},[91,136591,136388],{"class":206},[91,136593,92398],{"class":1941},[91,136595,136393],{"class":1941},[91,136597,136396],{"class":1941},[91,136599,136399],{"class":1941},[91,136601,55289],{"class":101},[91,136603,28158],{"class":51275},[91,136605,51282],{"class":101},[38,136607,136608],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[46,136610,136611],{"start":1157},[49,136612,136613],{},"常用属性",[1440,136615],{"style":126383,"src":136616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[83,136618,136619],{"className":127274,"code":136373,"language":127276,"meta":10,"style":10},[88,136620,136621],{"__ignoreMap":10},[91,136622,136623,136625,136627,136629,136631,136633,136635,136637,136639,136641,136643,136645],{"class":93,"line":94},[91,136624,1012],{"class":101},[91,136626,28158],{"class":51275},[91,136628,55214],{"class":1941},[91,136630,147],{"class":101},[91,136632,136388],{"class":206},[91,136634,92398],{"class":1941},[91,136636,136393],{"class":1941},[91,136638,136396],{"class":1941},[91,136640,136399],{"class":1941},[91,136642,55289],{"class":101},[91,136644,28158],{"class":51275},[91,136646,51282],{"class":101},[38,136648,136649],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21977,136651,136653],{"id":136652},"_14123-总结","14.1.2.3 总结",[1109,136655,136656,136659,136662,136665,136668],{},[49,136657,136658],{},"音频标签和视频标签使用方式基本一致",[49,136660,136661],{},"浏览器支持情况不同",[49,136663,136664],{},"谷歌浏览器把音频和视频自动播放禁止了",[49,136666,136667],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[49,136669,136670],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[63,136672,136674],{"id":136673},"_1413-表单元素","14.1.3 表单元素",[21977,136676,136678],{"id":136677},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1440,136680],{"style":126383,"src":136681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[83,136683,136685],{"className":127274,"code":136684,"language":127276,"meta":10,"style":10},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[88,136686,136687],{"__ignoreMap":10},[91,136688,136689,136691,136693,136695,136697,136699,136701,136703,136706,136708,136710,136713],{"class":93,"line":94},[91,136690,1012],{"class":101},[91,136692,53796],{"class":51275},[91,136694,53799],{"class":1941},[91,136696,147],{"class":101},[91,136698,62674],{"class":206},[91,136700,14899],{"class":1941},[91,136702,147],{"class":101},[91,136704,136705],{"class":206},"\"username\"",[91,136707,60995],{"class":1941},[91,136709,147],{"class":101},[91,136711,136712],{"class":206},"\"请输入用户名\"",[91,136714,51282],{"class":101},[1440,136716],{"style":126383,"src":136717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21977,136719,136721],{"id":136720},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1440,136723],{"style":126383,"src":136724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[38,136726,136727],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[38,136729,136730],{},"快捷操作：",[1440,136732],{"style":126383,"src":136733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[38,136735,136736],{},"例子1：",[83,136738,136740],{"className":127274,"code":136739,"language":127276,"meta":10,"style":10},"\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",[88,136741,136742,136765,136792,136821,136840],{"__ignoreMap":10},[91,136743,136744,136746,136748,136750,136752,136755,136758,136760,136763],{"class":93,"line":94},[91,136745,1012],{"class":101},[91,136747,66600],{"class":51275},[91,136749,66603],{"class":1941},[91,136751,147],{"class":101},[91,136753,136754],{"class":206},"\"\u002Fsubmit\"",[91,136756,136757],{"class":1941}," method",[91,136759,147],{"class":101},[91,136761,136762],{"class":206},"\"post\"",[91,136764,51282],{"class":101},[91,136766,136767,136769,136771,136773,136775,136777,136779,136781,136783,136785,136787,136790],{"class":93,"line":11},[91,136768,52119],{"class":101},[91,136770,53796],{"class":51275},[91,136772,53799],{"class":1941},[91,136774,147],{"class":101},[91,136776,62674],{"class":206},[91,136778,14899],{"class":1941},[91,136780,147],{"class":101},[91,136782,136705],{"class":206},[91,136784,60995],{"class":1941},[91,136786,147],{"class":101},[91,136788,136789],{"class":206},"\"用户名\"",[91,136791,51282],{"class":101},[91,136793,136794,136796,136798,136800,136802,136805,136807,136809,136812,136814,136816,136819],{"class":93,"line":1157},[91,136795,52119],{"class":101},[91,136797,53796],{"class":51275},[91,136799,53799],{"class":1941},[91,136801,147],{"class":101},[91,136803,136804],{"class":206},"\"password\"",[91,136806,14899],{"class":1941},[91,136808,147],{"class":101},[91,136810,136811],{"class":206},"\"pwd\"",[91,136813,60995],{"class":1941},[91,136815,147],{"class":101},[91,136817,136818],{"class":206},"\"密码\"",[91,136820,51282],{"class":101},[91,136822,136823,136825,136827,136829,136831,136833,136836,136838],{"class":93,"line":1172},[91,136824,52119],{"class":101},[91,136826,53862],{"class":51275},[91,136828,53799],{"class":1941},[91,136830,147],{"class":101},[91,136832,66623],{"class":206},[91,136834,136835],{"class":101},">提交\u003C\u002F",[91,136837,53862],{"class":51275},[91,136839,51282],{"class":101},[91,136841,136842,136844,136846],{"class":93,"line":1178},[91,136843,51760],{"class":101},[91,136845,66600],{"class":51275},[91,136847,51282],{"class":101},[1440,136849],{"style":126383,"src":136850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[38,136852,136853],{},"value是表单域的内容",[38,136855,136856],{},"例子2：",[83,136858,136859],{"className":127274,"code":136739,"language":127276,"meta":10,"style":10},[88,136860,136861,136881,136907,136933,136951],{"__ignoreMap":10},[91,136862,136863,136865,136867,136869,136871,136873,136875,136877,136879],{"class":93,"line":94},[91,136864,1012],{"class":101},[91,136866,66600],{"class":51275},[91,136868,66603],{"class":1941},[91,136870,147],{"class":101},[91,136872,136754],{"class":206},[91,136874,136757],{"class":1941},[91,136876,147],{"class":101},[91,136878,136762],{"class":206},[91,136880,51282],{"class":101},[91,136882,136883,136885,136887,136889,136891,136893,136895,136897,136899,136901,136903,136905],{"class":93,"line":11},[91,136884,52119],{"class":101},[91,136886,53796],{"class":51275},[91,136888,53799],{"class":1941},[91,136890,147],{"class":101},[91,136892,62674],{"class":206},[91,136894,14899],{"class":1941},[91,136896,147],{"class":101},[91,136898,136705],{"class":206},[91,136900,60995],{"class":1941},[91,136902,147],{"class":101},[91,136904,136789],{"class":206},[91,136906,51282],{"class":101},[91,136908,136909,136911,136913,136915,136917,136919,136921,136923,136925,136927,136929,136931],{"class":93,"line":1157},[91,136910,52119],{"class":101},[91,136912,53796],{"class":51275},[91,136914,53799],{"class":1941},[91,136916,147],{"class":101},[91,136918,136804],{"class":206},[91,136920,14899],{"class":1941},[91,136922,147],{"class":101},[91,136924,136811],{"class":206},[91,136926,60995],{"class":1941},[91,136928,147],{"class":101},[91,136930,136818],{"class":206},[91,136932,51282],{"class":101},[91,136934,136935,136937,136939,136941,136943,136945,136947,136949],{"class":93,"line":1172},[91,136936,52119],{"class":101},[91,136938,53862],{"class":51275},[91,136940,53799],{"class":1941},[91,136942,147],{"class":101},[91,136944,66623],{"class":206},[91,136946,136835],{"class":101},[91,136948,53862],{"class":51275},[91,136950,51282],{"class":101},[91,136952,136953,136955,136957],{"class":93,"line":1178},[91,136954,51760],{"class":101},[91,136956,66600],{"class":51275},[91,136958,51282],{"class":101},[1440,136960],{"style":126383,"src":136961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[33,136963,136965],{"id":136964},"_142-css新特性","14.2 CSS新特性",[63,136967,136969],{"id":136968},"_1421-新增选择器","14.2.1 新增选择器",[21977,136971,136973],{"id":136972},"_14211-属性选择器","14.2.1.1 属性选择器",[1440,136975],{"style":126383,"src":136976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[83,136978,136980],{"className":126527,"code":136979,"language":126529,"meta":10,"style":10},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[88,136981,136982,136997,137013],{"__ignoreMap":10},[91,136983,136984,136986,136988,136990,136992,136994],{"class":93,"line":94},[91,136985,53796],{"class":51275},[91,136987,992],{"class":101},[91,136989,103082],{"class":1941},[91,136991,147],{"class":97},[91,136993,62674],{"class":206},[91,136995,136996],{"class":101},"] {\n",[91,136998,136999,137001,137003,137005,137007,137009,137011],{"class":93,"line":11},[91,137000,70871],{"class":150},[91,137002,51412],{"class":101},[91,137004,319],{"class":150},[91,137006,51467],{"class":97},[91,137008,51496],{"class":150},[91,137010,130107],{"class":150},[91,137012,1268],{"class":101},[91,137014,137015],{"class":93,"line":1157},[91,137016,1543],{"class":101},[1440,137018],{"style":126383,"src":137019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[38,137021,131],{},[1109,137023,137024,137027,137030,137033],{},[49,137025,137026],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[49,137028,137029],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[49,137031,137032],{},"属性选择器也可以选择出来自定义的属性",[49,137034,137035,137037],{},[251,137036,9004],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21977,137039,137041],{"id":137040},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1440,137043],{"style":126383,"src":137044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[46,137046,137047],{},[49,137048,137049],{},"fist-child",[83,137051,137053],{"className":126527,"code":137052,"language":126529,"meta":10,"style":10},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[88,137054,137055,137060,137075,137095,137113],{"__ignoreMap":10},[91,137056,137057],{"class":93,"line":94},[91,137058,137059],{"class":160},"\u002F* 属性选择器 *\u002F\n",[91,137061,137062,137064,137066,137068,137070,137072],{"class":93,"line":11},[91,137063,53796],{"class":51275},[91,137065,992],{"class":101},[91,137067,103082],{"class":1941},[91,137069,147],{"class":97},[91,137071,62674],{"class":206},[91,137073,137074],{"class":101},"] { }\n",[91,137076,137077,137079,137081,137083,137086,137089,137092],{"class":93,"line":1157},[91,137078,53796],{"class":51275},[91,137080,992],{"class":101},[91,137082,14673],{"class":1941},[91,137084,137085],{"class":97},"^=",[91,137087,137088],{"class":206},"\"icon\"",[91,137090,137091],{"class":101},"] { }  ",[91,137093,137094],{"class":160},"\u002F* 以 icon 开头 *\u002F\n",[91,137096,137097,137099,137101,137103,137106,137108,137110],{"class":93,"line":1172},[91,137098,53796],{"class":51275},[91,137100,992],{"class":101},[91,137102,14673],{"class":1941},[91,137104,137105],{"class":97},"$=",[91,137107,137088],{"class":206},[91,137109,137091],{"class":101},[91,137111,137112],{"class":160},"\u002F* 以 icon 结尾 *\u002F\n",[91,137114,137115,137117,137119,137121,137124,137126,137128],{"class":93,"line":1178},[91,137116,53796],{"class":51275},[91,137118,992],{"class":101},[91,137120,14673],{"class":1941},[91,137122,137123],{"class":97},"*=",[91,137125,137088],{"class":206},[91,137127,137091],{"class":101},[91,137129,137130],{"class":160},"\u002F* 包含 icon *\u002F\n",[38,137132,137133],{},"ul的第一个儿子文本为红色",[38,137135,137136],{},"一定要在冒号前加空格，不然就是选中所有的了",[83,137138,137140],{"className":126527,"code":137139,"language":126529,"meta":10,"style":10},".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",[88,137141,137142,137148,137158,137162,137166,137171,137184,137197,137213,137230,137247],{"__ignoreMap":10},[91,137143,137144,137146],{"class":93,"line":94},[91,137145,126818],{"class":1941},[91,137147,15551],{"class":101},[91,137149,137150,137152,137154,137156],{"class":93,"line":11},[91,137151,70880],{"class":150},[91,137153,51412],{"class":101},[91,137155,57396],{"class":150},[91,137157,1268],{"class":101},[91,137159,137160],{"class":93,"line":1157},[91,137161,1543],{"class":101},[91,137163,137164],{"class":93,"line":1172},[91,137165,135988],{"class":101},[91,137167,137168],{"class":93,"line":1178},[91,137169,137170],{"class":160},"\u002F* 结构伪类选择器 *\u002F\n",[91,137172,137173,137175,137178,137181],{"class":93,"line":1192},[91,137174,49],{"class":51275},[91,137176,137177],{"class":1941},":first-child",[91,137179,137180],{"class":101}," { }           ",[91,137182,137183],{"class":160},"\u002F* 第一个 *\u002F\n",[91,137185,137186,137188,137191,137194],{"class":93,"line":1198},[91,137187,49],{"class":51275},[91,137189,137190],{"class":1941},":last-child",[91,137192,137193],{"class":101}," { }            ",[91,137195,137196],{"class":160},"\u002F* 最后一个 *\u002F\n",[91,137198,137199,137201,137203,137205,137207,137210],{"class":93,"line":1289},[91,137200,49],{"class":51275},[91,137202,129441],{"class":1941},[91,137204,102],{"class":101},[91,137206,179],{"class":150},[91,137208,137209],{"class":101},") { }          ",[91,137211,137212],{"class":160},"\u002F* 第2个 *\u002F\n",[91,137214,137215,137217,137219,137221,137224,137227],{"class":93,"line":1295},[91,137216,49],{"class":51275},[91,137218,129441],{"class":1941},[91,137220,102],{"class":101},[91,137222,137223],{"class":150},"2n",[91,137225,137226],{"class":101},") { }         ",[91,137228,137229],{"class":160},"\u002F* 偶数 *\u002F\n",[91,137231,137232,137234,137236,137238,137241,137244],{"class":93,"line":1307},[91,137233,49],{"class":51275},[91,137235,129441],{"class":1941},[91,137237,102],{"class":101},[91,137239,137240],{"class":150},"2n+1",[91,137242,137243],{"class":101},") { }       ",[91,137245,137246],{"class":160},"\u002F* 奇数 *\u002F\n",[91,137248,137249,137251,137253,137255,137258,137260],{"class":93,"line":1590},[91,137250,49],{"class":51275},[91,137252,129441],{"class":1941},[91,137254,102],{"class":101},[91,137256,137257],{"class":150},"-n+3",[91,137259,137243],{"class":101},[91,137261,137262],{"class":160},"\u002F* 前3个 *\u002F\n",[51586,137264,137267],{"className":137265},[137266],"example","\n  示例内容\n",[38,137269,137270],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1109,137272,137273],{},[49,137274,137275,137278],{},[88,137276,137277],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[38,137280,137281],{},"也就是说它选择的是熊大",[46,137283,137284],{"start":1192},[49,137285,137286],{},"权重",[83,137288,137290],{"className":126527,"code":137289,"language":126529,"meta":10,"style":10},"\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",[88,137291,137292,137296,137306,137316,137330,137344,137358],{"__ignoreMap":10},[91,137293,137294],{"class":93,"line":94},[91,137295,137170],{"class":160},[91,137297,137298,137300,137302,137304],{"class":93,"line":11},[91,137299,49],{"class":51275},[91,137301,137177],{"class":1941},[91,137303,137180],{"class":101},[91,137305,137183],{"class":160},[91,137307,137308,137310,137312,137314],{"class":93,"line":1157},[91,137309,49],{"class":51275},[91,137311,137190],{"class":1941},[91,137313,137193],{"class":101},[91,137315,137196],{"class":160},[91,137317,137318,137320,137322,137324,137326,137328],{"class":93,"line":1172},[91,137319,49],{"class":51275},[91,137321,129441],{"class":1941},[91,137323,102],{"class":101},[91,137325,179],{"class":150},[91,137327,137209],{"class":101},[91,137329,137212],{"class":160},[91,137331,137332,137334,137336,137338,137340,137342],{"class":93,"line":1178},[91,137333,49],{"class":51275},[91,137335,129441],{"class":1941},[91,137337,102],{"class":101},[91,137339,137223],{"class":150},[91,137341,137226],{"class":101},[91,137343,137229],{"class":160},[91,137345,137346,137348,137350,137352,137354,137356],{"class":93,"line":1192},[91,137347,49],{"class":51275},[91,137349,129441],{"class":1941},[91,137351,102],{"class":101},[91,137353,137240],{"class":150},[91,137355,137243],{"class":101},[91,137357,137246],{"class":160},[91,137359,137360,137362,137364,137366,137368,137370],{"class":93,"line":1198},[91,137361,49],{"class":51275},[91,137363,129441],{"class":1941},[91,137365,102],{"class":101},[91,137367,137257],{"class":150},[91,137369,137243],{"class":101},[91,137371,137262],{"class":160},[38,137373,137374],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21977,137376,137378],{"id":137377},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[38,137380,137381],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1440,137383],{"style":126383,"src":137384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[46,137386,137387],{},[49,137388,131],{},[1109,137390,137391,137394,137397,137400,137403,137406],{},[49,137392,137393],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[49,137395,137396],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[49,137398,137399],{},"语法： element::before {}",[49,137401,137402],{},"before 和 after 必须有 content 属性",[49,137404,137405],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[49,137407,137408],{},"伪元素选择器和标签选择器一样，权重为 1",[46,137410,137411],{"start":11},[49,137412,137413],{},"实例",[83,137415,137416],{"className":126527,"code":137289,"language":126529,"meta":10,"style":10},[88,137417,137418,137422,137432,137442,137456,137470,137484],{"__ignoreMap":10},[91,137419,137420],{"class":93,"line":94},[91,137421,137170],{"class":160},[91,137423,137424,137426,137428,137430],{"class":93,"line":11},[91,137425,49],{"class":51275},[91,137427,137177],{"class":1941},[91,137429,137180],{"class":101},[91,137431,137183],{"class":160},[91,137433,137434,137436,137438,137440],{"class":93,"line":1157},[91,137435,49],{"class":51275},[91,137437,137190],{"class":1941},[91,137439,137193],{"class":101},[91,137441,137196],{"class":160},[91,137443,137444,137446,137448,137450,137452,137454],{"class":93,"line":1172},[91,137445,49],{"class":51275},[91,137447,129441],{"class":1941},[91,137449,102],{"class":101},[91,137451,179],{"class":150},[91,137453,137209],{"class":101},[91,137455,137212],{"class":160},[91,137457,137458,137460,137462,137464,137466,137468],{"class":93,"line":1178},[91,137459,49],{"class":51275},[91,137461,129441],{"class":1941},[91,137463,102],{"class":101},[91,137465,137223],{"class":150},[91,137467,137226],{"class":101},[91,137469,137229],{"class":160},[91,137471,137472,137474,137476,137478,137480,137482],{"class":93,"line":1192},[91,137473,49],{"class":51275},[91,137475,129441],{"class":1941},[91,137477,102],{"class":101},[91,137479,137240],{"class":150},[91,137481,137243],{"class":101},[91,137483,137246],{"class":160},[91,137485,137486,137488,137490,137492,137494,137496],{"class":93,"line":1198},[91,137487,49],{"class":51275},[91,137489,129441],{"class":1941},[91,137491,102],{"class":101},[91,137493,137257],{"class":150},[91,137495,137243],{"class":101},[91,137497,137262],{"class":160},[1440,137499],{"style":126383,"src":137500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[46,137502,137503],{"start":1157},[49,137504,137505],{},"使用场景1",[1440,137507],{"style":126383,"src":137508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[38,137510,137511],{},"不需要再加盒子来整红色那部分了",[83,137513,137515],{"className":126527,"code":137514,"language":126529,"meta":10,"style":10},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[88,137516,137517,137522,137531,137542,137552,137556,137565,137576,137586],{"__ignoreMap":10},[91,137518,137519],{"class":93,"line":94},[91,137520,137521],{"class":160},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[91,137523,137524,137526,137529],{"class":93,"line":11},[91,137525,51586],{"class":51275},[91,137527,137528],{"class":1941},"::before",[91,137530,15551],{"class":101},[91,137532,137533,137536,137538,137540],{"class":93,"line":1157},[91,137534,137535],{"class":150},"  content",[91,137537,51412],{"class":101},[91,137539,7631],{"class":206},[91,137541,1268],{"class":101},[91,137543,137544,137546,137548,137550],{"class":93,"line":1172},[91,137545,128143],{"class":150},[91,137547,51412],{"class":101},[91,137549,60844],{"class":150},[91,137551,1268],{"class":101},[91,137553,137554],{"class":93,"line":1178},[91,137555,1543],{"class":101},[91,137557,137558,137560,137563],{"class":93,"line":1192},[91,137559,51586],{"class":51275},[91,137561,137562],{"class":1941},"::after",[91,137564,15551],{"class":101},[91,137566,137567,137569,137571,137574],{"class":93,"line":1198},[91,137568,137535],{"class":150},[91,137570,51412],{"class":101},[91,137572,137573],{"class":206},"\"→\"",[91,137575,1268],{"class":101},[91,137577,137578,137580,137582,137584],{"class":93,"line":1289},[91,137579,70880],{"class":150},[91,137581,51412],{"class":101},[91,137583,62045],{"class":150},[91,137585,1268],{"class":101},[91,137587,137588],{"class":93,"line":1295},[91,137589,1543],{"class":101},[1440,137591],{"style":126383,"src":137592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[38,137594,137595],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1440,137597],{"style":126383,"src":137598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[38,137600,137601],{},"但是在引用时需要先转义一下",[38,137603,137604],{},"content='\\e930'",[46,137606,137607],{"start":1172},[49,137608,137609],{},"使用场景2",[38,137611,137612],{},"仿土豆效果",[38,137614,137615],{},"通过使用伪元素选择器可以减少body中盒子的数量",[83,137617,137618],{"className":126527,"code":137514,"language":126529,"meta":10,"style":10},[88,137619,137620,137624,137632,137642,137652,137656,137664,137674,137684],{"__ignoreMap":10},[91,137621,137622],{"class":93,"line":94},[91,137623,137521],{"class":160},[91,137625,137626,137628,137630],{"class":93,"line":11},[91,137627,51586],{"class":51275},[91,137629,137528],{"class":1941},[91,137631,15551],{"class":101},[91,137633,137634,137636,137638,137640],{"class":93,"line":1157},[91,137635,137535],{"class":150},[91,137637,51412],{"class":101},[91,137639,7631],{"class":206},[91,137641,1268],{"class":101},[91,137643,137644,137646,137648,137650],{"class":93,"line":1172},[91,137645,128143],{"class":150},[91,137647,51412],{"class":101},[91,137649,60844],{"class":150},[91,137651,1268],{"class":101},[91,137653,137654],{"class":93,"line":1178},[91,137655,1543],{"class":101},[91,137657,137658,137660,137662],{"class":93,"line":1192},[91,137659,51586],{"class":51275},[91,137661,137562],{"class":1941},[91,137663,15551],{"class":101},[91,137665,137666,137668,137670,137672],{"class":93,"line":1198},[91,137667,137535],{"class":150},[91,137669,51412],{"class":101},[91,137671,137573],{"class":206},[91,137673,1268],{"class":101},[91,137675,137676,137678,137680,137682],{"class":93,"line":1289},[91,137677,70880],{"class":150},[91,137679,51412],{"class":101},[91,137681,62045],{"class":150},[91,137683,1268],{"class":101},[91,137685,137686],{"class":93,"line":1295},[91,137687,1543],{"class":101},[1440,137689],{"style":126383,"src":137690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[46,137692,137693],{"start":1178},[49,137694,137695],{},"使用场景3",[38,137697,137698],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[83,137700,137702],{"className":126527,"code":137701,"language":126529,"meta":10,"style":10},".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",[88,137703,137704,137710,137720,137724,137728,137732,137740,137750,137760,137764,137772,137782,137792],{"__ignoreMap":10},[91,137705,137706,137708],{"class":93,"line":94},[91,137707,130375],{"class":1941},[91,137709,15551],{"class":101},[91,137711,137712,137714,137716,137718],{"class":93,"line":11},[91,137713,131007],{"class":150},[91,137715,51412],{"class":101},[91,137717,23710],{"class":150},[91,137719,1268],{"class":101},[91,137721,137722],{"class":93,"line":1157},[91,137723,1543],{"class":101},[91,137725,137726],{"class":93,"line":1172},[91,137727,135988],{"class":101},[91,137729,137730],{"class":93,"line":1178},[91,137731,137521],{"class":160},[91,137733,137734,137736,137738],{"class":93,"line":1192},[91,137735,51586],{"class":51275},[91,137737,137528],{"class":1941},[91,137739,15551],{"class":101},[91,137741,137742,137744,137746,137748],{"class":93,"line":1198},[91,137743,137535],{"class":150},[91,137745,51412],{"class":101},[91,137747,7631],{"class":206},[91,137749,1268],{"class":101},[91,137751,137752,137754,137756,137758],{"class":93,"line":1289},[91,137753,128143],{"class":150},[91,137755,51412],{"class":101},[91,137757,60844],{"class":150},[91,137759,1268],{"class":101},[91,137761,137762],{"class":93,"line":1295},[91,137763,1543],{"class":101},[91,137765,137766,137768,137770],{"class":93,"line":1307},[91,137767,51586],{"class":51275},[91,137769,137562],{"class":1941},[91,137771,15551],{"class":101},[91,137773,137774,137776,137778,137780],{"class":93,"line":1590},[91,137775,137535],{"class":150},[91,137777,51412],{"class":101},[91,137779,137573],{"class":206},[91,137781,1268],{"class":101},[91,137783,137784,137786,137788,137790],{"class":93,"line":1595},[91,137785,70880],{"class":150},[91,137787,51412],{"class":101},[91,137789,62045],{"class":150},[91,137791,1268],{"class":101},[91,137793,137794],{"class":93,"line":1601},[91,137795,1543],{"class":101},[38,137797,137798],{},"div {\nmargin: 0 auto;\n}",[83,137800,137803],{"className":137801,"code":137802,"language":5166},[5164],"\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",[88,137804,137802],{"__ignoreMap":10},[38,137806,137807],{},"如果想让多个元素都发生变化",[38,137809,137810],{},"不能如下操作：",[38,137812,137813],{},"transition: width 2s ease 0.5s;",[38,137815,137816],{},"transition: height 2s ease 0.5s;不对！！！",[38,137818,137819],{},"上方会样式冲突，导致不显示任何过渡效果",[38,137821,137822],{},"使用如下：加逗号隔开",[38,137824,137825],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[38,137827,137828],{},"transition all 2s ease;",[63,137830,137832],{"id":137831},"_1426-过渡练习","14.2.6 过渡练习",[46,137834,137835],{},[49,137836,137837],{},"进度条",[1440,137839],{"style":126383,"src":137840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[83,137842,137844],{"className":126527,"code":137843,"language":126529,"meta":10,"style":10},"div {\n  transition: all 0.3s ease;\n}\n",[88,137845,137846,137852,137870],{"__ignoreMap":10},[91,137847,137848,137850],{"class":93,"line":94},[91,137849,51586],{"class":51275},[91,137851,15551],{"class":101},[91,137853,137854,137857,137859,137861,137864,137866,137868],{"class":93,"line":11},[91,137855,137856],{"class":150},"  transition",[91,137858,51412],{"class":101},[91,137860,28096],{"class":150},[91,137862,137863],{"class":150}," 0.3",[91,137865,797],{"class":97},[91,137867,78655],{"class":150},[91,137869,1268],{"class":101},[91,137871,137872],{"class":93,"line":1157},[91,137873,1543],{"class":101},[46,137875,137876],{"start":11},[49,137877,137878],{},"小米logo",[38,137880,137881],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[83,137883,137885],{"className":126527,"code":137884,"language":126529,"meta":10,"style":10},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[88,137886,137887,137892,137898,137914,137919],{"__ignoreMap":10},[91,137888,137889],{"class":93,"line":94},[91,137890,137891],{"class":160},"\u002F* CSS3 过渡 *\u002F\n",[91,137893,137894,137896],{"class":93,"line":11},[91,137895,51586],{"class":51275},[91,137897,15551],{"class":101},[91,137899,137900,137902,137904,137906,137908,137910,137912],{"class":93,"line":1157},[91,137901,137856],{"class":150},[91,137903,51412],{"class":101},[91,137905,28096],{"class":150},[91,137907,137863],{"class":150},[91,137909,797],{"class":97},[91,137911,78655],{"class":150},[91,137913,1268],{"class":101},[91,137915,137916],{"class":93,"line":1172},[91,137917,137918],{"class":160},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[91,137920,137921],{"class":93,"line":1178},[91,137922,1543],{"class":101},[38,137924,137925],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5105,137927,137928],{},"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":10,"searchDepth":11,"depth":11,"links":137930},[137931,137936],{"id":136261,"depth":11,"text":136262,"children":137932},[137933,137934,137935],{"id":136265,"depth":1157,"text":136266},{"id":136342,"depth":1157,"text":136343},{"id":136673,"depth":1157,"text":136674},{"id":136964,"depth":11,"text":136965,"children":137937},[137938,137939],{"id":136968,"depth":1157,"text":136969},{"id":137831,"depth":1157,"text":137832},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136253,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137946,"title":137947,"body":137948,"description":13,"extension":14,"meta":139692,"navigation":17,"path":139693,"seo":139694,"stem":139695,"__hash__":139696},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137949,"toc":139673},[137950,137953,137957,137960,137966,137972,137976,137978,137981,137984,137987,137990,137993,137996,137999,138003,138007,138010,138013,138016,138020,138023,138026,138031,138034,138037,138040,138044,138047,138056,138059,138062,138066,138069,138072,138077,138084,138098,138106,138113,138118,138121,138124,138127,138134,138138,138144,138150,138153,138156,138161,138167,138169,138177,138182,138185,138191,138193,138198,138203,138206,138208,138213,138216,138221,138226,138260,138264,138268,138271,138275,138278,138364,138367,138404,138407,138443,138447,138452,138465,138519,138521,138549,138551,138579,138585,138599,138601,138645,138647,138691,138694,138701,138712,138714,138741,138743,138769,138776,138792,138794,138888,138890,138984,138991,138994,138999,139005,139079,139082,139084,139120,139122,139158,139161,139168,139187,139190,139193,139195,139220,139222,139246,139249,139252,139282,139286,139289,139352,139354,139420,139422,139486,139489,139521,139523,139549,139551,139577,139580,139611,139613,139639,139641,139667,139670],[29,137951,137947],{"id":137952},"_15-品优购项目上篇-搭建与公共模块",[33,137954,137956],{"id":137955},"_151-项目规划","15.1 项目规划",[1440,137958],{"style":126383,"src":137959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[38,137961,137962,137965],{},[251,137963,137964],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[38,137967,137968,137971],{},[251,137969,137970],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[33,137973,137975],{"id":137974},"_152-项目介绍","15.2 项目介绍",[38,137977,137964],{},[1440,137979],{"style":126383,"src":137980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[38,137982,137983],{},"主页：",[1440,137985],{"style":126383,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[38,137988,137989],{},"列表页：",[1440,137991],{"style":126383,"src":137992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[38,137994,137995],{},"注册页：",[1440,137997],{"style":126383,"src":137998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[33,138000,138002],{"id":138001},"_153-项目搭建工作","15.3 项目搭建工作",[63,138004,138006],{"id":138005},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1440,138008],{"style":126383,"src":138009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[38,138011,138012],{},"经常更换的图片要放到upload文件夹中",[38,138014,138015],{},"不经常换的放到images文件夹中",[63,138017,138019],{"id":138018},"_1532-创建文件如下","15.3.2 创建文件如下",[1440,138021],{"style":126383,"src":138022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1440,138024],{"style":126383,"src":138025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[38,138027,138028],{},[251,138029,138030],{},"初始化样式：",[38,138032,138033],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[38,138035,138036],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[38,138038,138039],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[63,138041,138043],{"id":138042},"_1533-项目模块化开发","15.3.3 项目模块化开发",[38,138045,138046],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[38,138048,138049,138050,138055],{},"这里最典型的应用就是 ",[251,138051,138052],{},[88,138053,138054],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1440,138057],{"style":126383,"src":138058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[38,138060,138061],{},"通过link方法来引入",[63,138063,138065],{"id":138064},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1440,138067],{"style":126383,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[38,138070,138071],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[46,138073,138074],{},[49,138075,138076],{},"制作favicon图标",[38,138078,138079,138080,138083],{},"①把品优购图标切成 ",[88,138081,138082],{},"png"," 图片",[38,138085,138086,138087,138089,138090,138093,138094],{},"②把 ",[88,138088,138082],{}," 图片转换为 ",[88,138091,138092],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[340,138095,138096],{"href":138096,"rel":138097},"http:\u002F\u002Fwww.bitbug.net\u002F",[23839],[46,138099,138100,138103],{"start":11},[49,138101,138102],{},"favicon图标放到网站根目录下",[49,138104,138105],{},"HTML页面引入favicon",[38,138107,138108,138109,138112],{},"在html 页面里面的 ",[88,138110,138111],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[38,138114,138115],{},[88,138116,138117],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[38,138119,138120],{},"复制这行代码或者在生成这个的网站进行复制",[1440,138122],{"style":126383,"src":138123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[38,138125,138126],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[38,138128,138129,138130],{},"例如:",[340,138131,138132],{"href":138132,"rel":138133},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23839],[63,138135,138137],{"id":138136},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[38,138139,138140,138143],{},[251,138141,138142],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[38,138145,138146,138149],{},[251,138147,138148],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[38,138151,138152],{},"页面必须有三个标签用来符合 SEO 优化",[1440,138154],{"style":126383,"src":138155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[46,138157,138158],{},[49,138159,138160],{},"title网站标题",[38,138162,138163,138166],{},[251,138164,138165],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[38,138168,68765],{},[1109,138170,138171,138174],{},[49,138172,138173],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[49,138175,138176],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[46,138178,138179],{"start":11},[49,138180,138181],{},"description网站描述",[38,138183,138184],{},"简要说明我们网站主要是做什么的",[38,138186,138187,138190],{},[251,138188,138189],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[38,138192,68765],{},[38,138194,138195],{},[88,138196,138197],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[46,138199,138200],{"start":1157},[49,138201,138202],{},"keywords关键词",[38,138204,138205],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[38,138207,68765],{},[38,138209,138210],{},[88,138211,138212],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[38,138214,138215],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[38,138217,138218],{},[251,138219,138220],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[46,138222,138223],{"start":1172},[49,138224,138225],{},"代码总结",[83,138227,138228],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,138229,138230,138234,138248,138252],{"__ignoreMap":10},[91,138231,138232],{"class":93,"line":94},[91,138233,130638],{"class":160},[91,138235,138236,138238,138240,138242,138244,138246],{"class":93,"line":11},[91,138237,1012],{"class":101},[91,138239,51586],{"class":51275},[91,138241,53461],{"class":1941},[91,138243,147],{"class":101},[91,138245,130651],{"class":206},[91,138247,51282],{"class":101},[91,138249,138250],{"class":93,"line":1157},[91,138251,130658],{"class":101},[91,138253,138254,138256,138258],{"class":93,"line":1172},[91,138255,51760],{"class":101},[91,138257,51586],{"class":51275},[91,138259,51282],{"class":101},[33,138261,138263],{"id":138262},"_154-项目公共部分制作","15.4 项目公共部分制作",[63,138265,138267],{"id":138266},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1440,138269],{"style":126383,"src":138270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[63,138272,138274],{"id":138273},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[38,138276,138277],{},"布局思路：",[1109,138279,138280,138283,138286,138308,138341],{},[49,138281,138282],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[49,138284,138285],{},"里面包含版心的盒子",[49,138287,138288,138289],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1109,138290,138291,138299,138305],{},[49,138292,138293,138294,21479,138296,138298],{},"1 号盒子 里面包含一个",[88,138295,1109],{},[88,138297,1109],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[49,138300,138301,138302,138304],{},"里面的内容是水平排列，所以需要给",[88,138303,49],{},"设置浮动",[49,138306,138307],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[49,138309,138310,138311],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1109,138312,138313,138327,138332],{},[49,138314,138315,138316,21479,138318,138320,138321,138323,138324,138326],{},"2 号盒子 里面包含一个",[88,138317,1109],{},[88,138319,1109],{},"包裹",[88,138322,49],{},"，中间的",[88,138325,1023],{},"可以用样式去设置，也可以用字符 |",[49,138328,138329,138330,138304],{},"里面内容水平排列，给",[88,138331,49],{},[49,138333,138334,138335,138337,138338,138340],{},"找到里面所有偶数的 ",[88,138336,49],{}," 设置样式（偶数的 ",[88,138339,49],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[49,138342,138343,138344],{},"需要用到字体图标",[1109,138345,138346,138352,138355,138358,138361],{},[49,138347,138348,138349],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[88,138350,138351],{},"arrow-icon",[49,138353,138354],{},"先要引入字体图片的资源",[49,138356,138357],{},"在样式里面利用 font-face 来进行声明",[49,138359,138360],{},"在伪元素的 content属性设置 图标的编码",[49,138362,138363],{},"给伪元素设置font-family属性",[38,138365,138366],{},"结构实例代码：",[83,138368,138370],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},"div::before {\n  content: \"\";\n  display: block;\n}\n",[88,138371,138372,138380,138390,138400],{"__ignoreMap":10},[91,138373,138374,138376,138378],{"class":93,"line":94},[91,138375,51586],{"class":51275},[91,138377,137528],{"class":1941},[91,138379,15551],{"class":101},[91,138381,138382,138384,138386,138388],{"class":93,"line":11},[91,138383,137535],{"class":150},[91,138385,51412],{"class":101},[91,138387,7631],{"class":206},[91,138389,1268],{"class":101},[91,138391,138392,138394,138396,138398],{"class":93,"line":1157},[91,138393,128143],{"class":150},[91,138395,51412],{"class":101},[91,138397,60844],{"class":150},[91,138399,1268],{"class":101},[91,138401,138402],{"class":93,"line":1172},[91,138403,1543],{"class":101},[38,138405,138406],{},"样式实例代码：",[83,138408,138409],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,138410,138411,138419,138429,138439],{"__ignoreMap":10},[91,138412,138413,138415,138417],{"class":93,"line":94},[91,138414,51586],{"class":51275},[91,138416,137528],{"class":1941},[91,138418,15551],{"class":101},[91,138420,138421,138423,138425,138427],{"class":93,"line":11},[91,138422,137535],{"class":150},[91,138424,51412],{"class":101},[91,138426,7631],{"class":206},[91,138428,1268],{"class":101},[91,138430,138431,138433,138435,138437],{"class":93,"line":1157},[91,138432,128143],{"class":150},[91,138434,51412],{"class":101},[91,138436,60844],{"class":150},[91,138438,1268],{"class":101},[91,138440,138441],{"class":93,"line":1172},[91,138442,1543],{"class":101},[63,138444,138446],{"id":138445},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1109,138448,138449],{},[49,138450,138451],{},"header 盒子必须要有高度",[38,138453,138454,138455,138457,138458],{},"1 号盒子是 ",[88,138456,131539],{}," 标志定位，在正常开发过程中， ",[251,138459,138460,138461,138464],{},"logo的布局其实是有讲究的，需要进行 ",[88,138462,138463],{},"logoSEO","的优化 （★★★）",[1109,138466,138467,138475,138483,138510],{},[49,138468,138469,138471,138472,138474],{},[88,138470,131539],{}," 里面首先放一个 ",[88,138473,29],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[49,138476,138477,138479,138480,138482],{},[88,138478,29],{}," 里面再放一个链接，可以返回首页的，把 ",[88,138481,131539],{}," 的背景图片给链接即可",[49,138484,138485,138486],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1109,138487,138488,138503],{},[49,138489,138490,138491,138494,138495,138498,138499,138502],{},"方法1：",[88,138492,138493],{},"text-indent"," 移到盒子外面（",[88,138496,138497],{},"text-indent: -9999px",") ，然后 ",[88,138500,138501],{},"overflow:hidden"," ，淘宝的做法",[49,138504,138505,138506,138509],{},"方法2：直接给 ",[88,138507,138508],{},"font-size: 0;"," 就看不到文字了，京东的做法",[49,138511,138512,138513,138515,138516,138518],{},"最后给链接一个 ",[88,138514,51382],{}," 属性，这样鼠标放到 ",[88,138517,131539],{}," 上就可以看到提示文字了",[38,138520,138366],{},[83,138522,138523],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},[88,138524,138525],{"__ignoreMap":10},[91,138526,138527,138529,138531,138533,138535,138537,138539,138541,138543,138545,138547],{"class":93,"line":94},[91,138528,1012],{"class":101},[91,138530,340],{"class":51275},[91,138532,61032],{"class":1941},[91,138534,147],{"class":101},[91,138536,131775],{"class":206},[91,138538,131778],{"class":1941},[91,138540,147],{"class":101},[91,138542,131783],{"class":206},[91,138544,131786],{"class":101},[91,138546,340],{"class":51275},[91,138548,51282],{"class":101},[38,138550,138406],{},[83,138552,138553],{"className":127274,"code":131760,"language":127276,"meta":10,"style":10},[88,138554,138555],{"__ignoreMap":10},[91,138556,138557,138559,138561,138563,138565,138567,138569,138571,138573,138575,138577],{"class":93,"line":94},[91,138558,1012],{"class":101},[91,138560,340],{"class":51275},[91,138562,61032],{"class":1941},[91,138564,147],{"class":101},[91,138566,131775],{"class":206},[91,138568,131778],{"class":1941},[91,138570,147],{"class":101},[91,138572,131783],{"class":206},[91,138574,131786],{"class":101},[91,138576,340],{"class":51275},[91,138578,51282],{"class":101},[38,138580,138581,138582,138584],{},"2 号盒子是 ",[88,138583,131552],{}," 搜索模块定位",[1109,138586,138587,138590,138593,138596],{},[49,138588,138589],{},"search盒子利用定位的方式放在对应的位置",[49,138591,138592],{},"search盒子设置绝对定位，header盒子设置相对定位",[49,138594,138595],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[49,138597,138598],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[38,138600,138366],{},[83,138602,138603],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},[88,138604,138605,138627,138631,138641],{"__ignoreMap":10},[91,138606,138607,138609,138611,138613,138615,138617,138619,138621,138623,138625],{"class":93,"line":94},[91,138608,51586],{"class":51275},[91,138610,12414],{"class":101},[91,138612,38],{"class":51275},[91,138614,12414],{"class":101},[91,138616,29],{"class":51275},[91,138618,12414],{"class":101},[91,138620,1109],{"class":51275},[91,138622,12414],{"class":101},[91,138624,49],{"class":51275},[91,138626,15551],{"class":101},[91,138628,138629],{"class":93,"line":11},[91,138630,131876],{"class":160},[91,138632,138633,138635,138637,138639],{"class":93,"line":1157},[91,138634,128143],{"class":150},[91,138636,51412],{"class":101},[91,138638,60844],{"class":150},[91,138640,1268],{"class":101},[91,138642,138643],{"class":93,"line":1172},[91,138644,1543],{"class":101},[38,138646,138406],{},[83,138648,138649],{"className":126527,"code":131847,"language":126529,"meta":10,"style":10},[88,138650,138651,138673,138677,138687],{"__ignoreMap":10},[91,138652,138653,138655,138657,138659,138661,138663,138665,138667,138669,138671],{"class":93,"line":94},[91,138654,51586],{"class":51275},[91,138656,12414],{"class":101},[91,138658,38],{"class":51275},[91,138660,12414],{"class":101},[91,138662,29],{"class":51275},[91,138664,12414],{"class":101},[91,138666,1109],{"class":51275},[91,138668,12414],{"class":101},[91,138670,49],{"class":51275},[91,138672,15551],{"class":101},[91,138674,138675],{"class":93,"line":11},[91,138676,131876],{"class":160},[91,138678,138679,138681,138683,138685],{"class":93,"line":1157},[91,138680,128143],{"class":150},[91,138682,51412],{"class":101},[91,138684,60844],{"class":150},[91,138686,1268],{"class":101},[91,138688,138689],{"class":93,"line":1172},[91,138690,1543],{"class":101},[38,138692,138693],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[38,138695,138696,138697,138700],{},"3 号盒子是 ",[88,138698,138699],{},"hotwords"," 热词模块定位",[1109,138702,138703,138706,138709],{},[49,138704,138705],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[49,138707,138708],{},"给里面所有的a标签设置 左右10px的外边距",[49,138710,138711],{},"给第一个a标签设置文字变红色（#c81623）",[38,138713,138366],{},[83,138715,138717],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},"div {\n  margin: 0 auto;\n}\n",[88,138718,138719,138725,138737],{"__ignoreMap":10},[91,138720,138721,138723],{"class":93,"line":94},[91,138722,51586],{"class":51275},[91,138724,15551],{"class":101},[91,138726,138727,138729,138731,138733,138735],{"class":93,"line":11},[91,138728,70445],{"class":150},[91,138730,51412],{"class":101},[91,138732,293],{"class":150},[91,138734,51531],{"class":150},[91,138736,1268],{"class":101},[91,138738,138739],{"class":93,"line":1157},[91,138740,1543],{"class":101},[38,138742,138406],{},[83,138744,138745],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,138746,138747,138753,138765],{"__ignoreMap":10},[91,138748,138749,138751],{"class":93,"line":94},[91,138750,51586],{"class":51275},[91,138752,15551],{"class":101},[91,138754,138755,138757,138759,138761,138763],{"class":93,"line":11},[91,138756,70445],{"class":150},[91,138758,51412],{"class":101},[91,138760,293],{"class":150},[91,138762,51531],{"class":150},[91,138764,1268],{"class":101},[91,138766,138767],{"class":93,"line":1157},[91,138768,1543],{"class":101},[38,138770,138771,138772,138775],{},"4 号盒子是 ",[88,138773,138774],{},"shopcar"," 购物车模块",[1109,138777,138778,138783,138786,138789],{},[49,138779,123310,138780,138782],{},[88,138781,138774],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[49,138784,138785],{},"count 统计部分用绝对定位做",[49,138787,138788],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[49,138790,138791],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[38,138793,138366],{},[83,138795,138796],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,138797,138798,138802,138816,138820,138834,138838,138852,138856,138870,138874],{"__ignoreMap":10},[91,138799,138800],{"class":93,"line":94},[91,138801,131966],{"class":160},[91,138803,138804,138806,138808,138810,138812,138814],{"class":93,"line":11},[91,138805,131971],{"class":1941},[91,138807,79782],{"class":101},[91,138809,128887],{"class":150},[91,138811,51412],{"class":101},[91,138813,131980],{"class":150},[91,138815,129457],{"class":101},[91,138817,138818],{"class":93,"line":1157},[91,138819,131987],{"class":160},[91,138821,138822,138824,138826,138828,138830,138832],{"class":93,"line":1172},[91,138823,131992],{"class":1941},[91,138825,79782],{"class":101},[91,138827,128887],{"class":150},[91,138829,51412],{"class":101},[91,138831,54739],{"class":150},[91,138833,129457],{"class":101},[91,138835,138836],{"class":93,"line":1178},[91,138837,132007],{"class":160},[91,138839,138840,138842,138844,138846,138848,138850],{"class":93,"line":1192},[91,138841,132012],{"class":1941},[91,138843,79782],{"class":101},[91,138845,128887],{"class":150},[91,138847,51412],{"class":101},[91,138849,54806],{"class":150},[91,138851,129457],{"class":101},[91,138853,138854],{"class":93,"line":1198},[91,138855,132027],{"class":160},[91,138857,138858,138860,138862,138864,138866,138868],{"class":93,"line":1289},[91,138859,132032],{"class":1941},[91,138861,79782],{"class":101},[91,138863,128887],{"class":150},[91,138865,51412],{"class":101},[91,138867,86208],{"class":150},[91,138869,129457],{"class":101},[91,138871,138872],{"class":93,"line":1295},[91,138873,132047],{"class":160},[91,138875,138876,138878,138880,138882,138884,138886],{"class":93,"line":1307},[91,138877,132052],{"class":1941},[91,138879,79782],{"class":101},[91,138881,128887],{"class":150},[91,138883,51412],{"class":101},[91,138885,132061],{"class":150},[91,138887,129457],{"class":101},[38,138889,138406],{},[83,138891,138892],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,138893,138894,138898,138912,138916,138930,138934,138948,138952,138966,138970],{"__ignoreMap":10},[91,138895,138896],{"class":93,"line":94},[91,138897,131966],{"class":160},[91,138899,138900,138902,138904,138906,138908,138910],{"class":93,"line":11},[91,138901,131971],{"class":1941},[91,138903,79782],{"class":101},[91,138905,128887],{"class":150},[91,138907,51412],{"class":101},[91,138909,131980],{"class":150},[91,138911,129457],{"class":101},[91,138913,138914],{"class":93,"line":1157},[91,138915,131987],{"class":160},[91,138917,138918,138920,138922,138924,138926,138928],{"class":93,"line":1172},[91,138919,131992],{"class":1941},[91,138921,79782],{"class":101},[91,138923,128887],{"class":150},[91,138925,51412],{"class":101},[91,138927,54739],{"class":150},[91,138929,129457],{"class":101},[91,138931,138932],{"class":93,"line":1178},[91,138933,132007],{"class":160},[91,138935,138936,138938,138940,138942,138944,138946],{"class":93,"line":1192},[91,138937,132012],{"class":1941},[91,138939,79782],{"class":101},[91,138941,128887],{"class":150},[91,138943,51412],{"class":101},[91,138945,54806],{"class":150},[91,138947,129457],{"class":101},[91,138949,138950],{"class":93,"line":1198},[91,138951,132027],{"class":160},[91,138953,138954,138956,138958,138960,138962,138964],{"class":93,"line":1289},[91,138955,132032],{"class":1941},[91,138957,79782],{"class":101},[91,138959,128887],{"class":150},[91,138961,51412],{"class":101},[91,138963,86208],{"class":150},[91,138965,129457],{"class":101},[91,138967,138968],{"class":93,"line":1295},[91,138969,132047],{"class":160},[91,138971,138972,138974,138976,138978,138980,138982],{"class":93,"line":1307},[91,138973,132052],{"class":1941},[91,138975,79782],{"class":101},[91,138977,128887],{"class":150},[91,138979,51412],{"class":101},[91,138981,132061],{"class":150},[91,138983,129457],{"class":101},[63,138985,138987,138988,138990],{"id":138986},"_1544-nav导航模块制作","15.4.4 ",[88,138989,53688],{},"导航模块制作",[1440,138992],{"style":126383,"src":138993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[38,138995,138996,138998],{},[88,138997,53688],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[38,139000,139001,139002],{},"1 号盒子左侧浮动，",[88,139003,139004],{},"dropdown",[1109,139006,139007,139017,139025,139031,139039,139049,139057,139068],{},[49,139008,139009,139010,100993,139013,139016],{},"1号盒子有讲究，根据相关性 里面包含 ",[88,139011,139012],{},".dt",[88,139014,139015],{},".dd"," 两个盒子",[49,139018,139019,139021,139022,139024],{},[88,139020,139012],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[88,139023,139015],{}," 挤到下面去了",[49,139026,139027,139028,139030],{},"给 ",[88,139029,139015],{}," 盒子设置宽度 和 高度，以及背景颜色",[49,139032,139027,139033,139035,139036,120212],{},[88,139034,139015],{}," 盒子里面定义 无序列表 （",[88,139037,139038],{},"ul > li > a",[49,139040,139041,139042,139044,139045,139048],{},"每个 ",[88,139043,49],{}," 都有一个高度（",[88,139046,139047],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[49,139050,139027,139051,139053,139054,120212],{},[88,139052,49],{}," 里面的a设置文字大小（",[88,139055,139056],{},"14px",[49,139058,139027,139059,139061,139062,139064,139065,139067],{},[88,139060,49],{}," 设置 ",[88,139063,127688],{},"，当鼠标移入的时候，让",[88,139066,49],{},"的背景变成白色，让里面的文字变成红色",[49,139069,139070,139072,139073,139075,139076,139078],{},[88,139071,49],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[88,139074,49],{},"的右侧，那么给",[88,139077,49],{},"设置相对定位",[38,139080,139081],{},"一定要注意相关性",[38,139083,138366],{},[83,139085,139086],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,139087,139088,139096,139106,139116],{"__ignoreMap":10},[91,139089,139090,139092,139094],{"class":93,"line":94},[91,139091,51586],{"class":51275},[91,139093,137528],{"class":1941},[91,139095,15551],{"class":101},[91,139097,139098,139100,139102,139104],{"class":93,"line":11},[91,139099,137535],{"class":150},[91,139101,51412],{"class":101},[91,139103,7631],{"class":206},[91,139105,1268],{"class":101},[91,139107,139108,139110,139112,139114],{"class":93,"line":1157},[91,139109,128143],{"class":150},[91,139111,51412],{"class":101},[91,139113,60844],{"class":150},[91,139115,1268],{"class":101},[91,139117,139118],{"class":93,"line":1172},[91,139119,1543],{"class":101},[38,139121,138406],{},[83,139123,139124],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,139125,139126,139134,139144,139154],{"__ignoreMap":10},[91,139127,139128,139130,139132],{"class":93,"line":94},[91,139129,51586],{"class":51275},[91,139131,137528],{"class":1941},[91,139133,15551],{"class":101},[91,139135,139136,139138,139140,139142],{"class":93,"line":11},[91,139137,137535],{"class":150},[91,139139,51412],{"class":101},[91,139141,7631],{"class":206},[91,139143,1268],{"class":101},[91,139145,139146,139148,139150,139152],{"class":93,"line":1157},[91,139147,128143],{"class":150},[91,139149,51412],{"class":101},[91,139151,60844],{"class":150},[91,139153,1268],{"class":101},[91,139155,139156],{"class":93,"line":1172},[91,139157,1543],{"class":101},[38,139159,139160],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[38,139162,139163,139164,139167],{},"2 号盒子左侧浮动，",[88,139165,139166],{},"navitems"," 导航栏组",[1109,139169,139170,139175,139184],{},[49,139171,139172,139173],{},"里面结构是 ",[88,139174,139038],{},[49,139176,139177,139178,139180,139181,139183],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[88,139179,340],{},"左右的",[88,139182,30858],{},"把两侧撑开",[49,139185,139186],{},"让文字垂直居中（行高等于高度）",[1440,139188],{"style":126383,"src":139189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[38,139191,139192],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[38,139194,138366],{},[83,139196,139198],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},".box {\n  float: left;\n}\n",[88,139199,139200,139206,139216],{"__ignoreMap":10},[91,139201,139202,139204],{"class":93,"line":94},[91,139203,130375],{"class":1941},[91,139205,15551],{"class":101},[91,139207,139208,139210,139212,139214],{"class":93,"line":11},[91,139209,131007],{"class":150},[91,139211,51412],{"class":101},[91,139213,23710],{"class":150},[91,139215,1268],{"class":101},[91,139217,139218],{"class":93,"line":1157},[91,139219,1543],{"class":101},[38,139221,138406],{},[83,139223,139224],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,139225,139226,139232,139242],{"__ignoreMap":10},[91,139227,139228,139230],{"class":93,"line":94},[91,139229,130375],{"class":1941},[91,139231,15551],{"class":101},[91,139233,139234,139236,139238,139240],{"class":93,"line":11},[91,139235,131007],{"class":150},[91,139237,51412],{"class":101},[91,139239,23710],{"class":150},[91,139241,1268],{"class":101},[91,139243,139244],{"class":93,"line":1157},[91,139245,1543],{"class":101},[38,139247,139248],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1440,139250],{"style":126383,"src":139251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[83,139253,139254],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[88,139255,139256,139262,139278],{"__ignoreMap":10},[91,139257,139258,139260],{"class":93,"line":94},[91,139259,51586],{"class":51275},[91,139261,15551],{"class":101},[91,139263,139264,139266,139268,139270,139272,139274,139276],{"class":93,"line":11},[91,139265,70871],{"class":150},[91,139267,51412],{"class":101},[91,139269,319],{"class":150},[91,139271,51467],{"class":97},[91,139273,51496],{"class":150},[91,139275,129919],{"class":150},[91,139277,1268],{"class":101},[91,139279,139280],{"class":93,"line":1157},[91,139281,1543],{"class":101},[63,139283,139285],{"id":139284},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1440,139287],{"style":126383,"src":139288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1109,139290,139291,139296,139301],{},[49,139292,139293,139295],{},[88,139294,131730],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[49,139297,139298,139300],{},[88,139299,131730],{}," 里面有一个大的版心",[49,139302,139303,139304,139307,139308],{},"版心里面包含 1 号盒子，",[88,139305,139306],{},"mod_service"," 是服务模块，mod 是模块的意思",[1109,139309,139310,139315,139328,139344,139349],{},[49,139311,139027,139312,139314],{},[88,139313,139306],{}," 设置高度（80px）和下边框",[49,139316,139317,139318,139321,139322,139324,139325,139327],{},"在里面定义 ",[88,139319,139320],{},"ul > li"," ,每个",[88,139323,49],{}," 宽度是300px 高度是 50px，给每个",[88,139326,49],{},"设置35px的左内边距",[49,139329,139330,139331,139333,139334,139336,139337,139339,139340,18389,139342,120212],{},"在每个",[88,139332,49],{},"里面，放一个 ",[88,139335,22889],{},"（里面放图标），一个",[88,139338,51586],{},"（里面放",[88,139341,51586],{},[88,139343,38],{},[49,139345,139027,139346,139348],{},[88,139347,22889],{},"设置浮动，让h5与这个div左右排列",[49,139350,139351],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[38,139353,138366],{},[83,139355,139357],{"className":126527,"code":139356,"language":126529,"meta":10,"style":10},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[88,139358,139359,139365,139377,139389,139416],{"__ignoreMap":10},[91,139360,139361,139363],{"class":93,"line":94},[91,139362,134284],{"class":1941},[91,139364,15551],{"class":101},[91,139366,139367,139369,139371,139373,139375],{"class":93,"line":11},[91,139368,70543],{"class":150},[91,139370,51412],{"class":101},[91,139372,802],{"class":150},[91,139374,51467],{"class":97},[91,139376,1268],{"class":101},[91,139378,139379,139381,139383,139385,139387],{"class":93,"line":1157},[91,139380,70763],{"class":150},[91,139382,51412],{"class":101},[91,139384,802],{"class":150},[91,139386,51467],{"class":97},[91,139388,1268],{"class":101},[91,139390,139391,139393,139395,139397,139399,139401,139403,139405,139408,139410,139412,139414],{"class":93,"line":1172},[91,139392,70586],{"class":150},[91,139394,51412],{"class":101},[91,139396,61701],{"class":150},[91,139398,102],{"class":101},[91,139400,134323],{"class":5195},[91,139402,13693],{"class":101},[91,139404,61711],{"class":150},[91,139406,139407],{"class":150}," -10",[91,139409,51467],{"class":97},[91,139411,134342],{"class":150},[91,139413,51467],{"class":97},[91,139415,1268],{"class":101},[91,139417,139418],{"class":93,"line":1178},[91,139419,1543],{"class":101},[38,139421,138406],{},[83,139423,139424],{"className":126527,"code":139356,"language":126529,"meta":10,"style":10},[88,139425,139426,139432,139444,139456,139482],{"__ignoreMap":10},[91,139427,139428,139430],{"class":93,"line":94},[91,139429,134284],{"class":1941},[91,139431,15551],{"class":101},[91,139433,139434,139436,139438,139440,139442],{"class":93,"line":11},[91,139435,70543],{"class":150},[91,139437,51412],{"class":101},[91,139439,802],{"class":150},[91,139441,51467],{"class":97},[91,139443,1268],{"class":101},[91,139445,139446,139448,139450,139452,139454],{"class":93,"line":1157},[91,139447,70763],{"class":150},[91,139449,51412],{"class":101},[91,139451,802],{"class":150},[91,139453,51467],{"class":97},[91,139455,1268],{"class":101},[91,139457,139458,139460,139462,139464,139466,139468,139470,139472,139474,139476,139478,139480],{"class":93,"line":1172},[91,139459,70586],{"class":150},[91,139461,51412],{"class":101},[91,139463,61701],{"class":150},[91,139465,102],{"class":101},[91,139467,134323],{"class":5195},[91,139469,13693],{"class":101},[91,139471,61711],{"class":150},[91,139473,139407],{"class":150},[91,139475,51467],{"class":97},[91,139477,134342],{"class":150},[91,139479,51467],{"class":97},[91,139481,1268],{"class":101},[91,139483,139484],{"class":93,"line":1178},[91,139485,1543],{"class":101},[38,139487,139488],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1109,139490,139491,139494,139500,139506,139518],{},[49,139492,139493],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[49,139495,139496,139497,120212],{},"里面的布局利用 自定义列表来实现（",[88,139498,139499],{},"dl > dt + dd",[49,139501,139027,139502,139505],{},[88,139503,139504],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[49,139507,139027,139508,139511,139512,18389,139514,139517],{},[88,139509,139510],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[88,139513,139510],{},[88,139515,139516],{},"dd","之间有些距离",[49,139519,139520],{},"最后一个 dl 结构和样式不一样，需要单独设置",[38,139522,138366],{},[83,139524,139525],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,139526,139527,139533,139545],{"__ignoreMap":10},[91,139528,139529,139531],{"class":93,"line":94},[91,139530,51586],{"class":51275},[91,139532,15551],{"class":101},[91,139534,139535,139537,139539,139541,139543],{"class":93,"line":11},[91,139536,70445],{"class":150},[91,139538,51412],{"class":101},[91,139540,293],{"class":150},[91,139542,51531],{"class":150},[91,139544,1268],{"class":101},[91,139546,139547],{"class":93,"line":1157},[91,139548,1543],{"class":101},[38,139550,138406],{},[83,139552,139553],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,139554,139555,139561,139573],{"__ignoreMap":10},[91,139556,139557,139559],{"class":93,"line":94},[91,139558,51586],{"class":51275},[91,139560,15551],{"class":101},[91,139562,139563,139565,139567,139569,139571],{"class":93,"line":11},[91,139564,70445],{"class":150},[91,139566,51412],{"class":101},[91,139568,293],{"class":150},[91,139570,51531],{"class":150},[91,139572,1268],{"class":101},[91,139574,139575],{"class":93,"line":1157},[91,139576,1543],{"class":101},[38,139578,139579],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1109,139581,139582,139591,139594,139605],{},[49,139583,139584,139585,139587,139588,139590],{},"分为上下两块，上面是 ",[88,139586,131747],{}," 友情链接，下面是 ",[88,139589,131740],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[49,139592,139593],{},"把内容分别复制到相应模块中",[49,139595,139027,139596,139598,139599,139601,139602,139604],{},[88,139597,131747],{}," 设置 15px 的下外边距，给",[88,139600,131747],{}," 里面 的 ",[88,139603,340],{}," 标签设置 左右 3px 的外边距",[49,139606,139607,139608,139610],{},"给",[88,139609,131740],{}," 设置 20px 的行高",[38,139612,138366],{},[83,139614,139615],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,139616,139617,139623,139635],{"__ignoreMap":10},[91,139618,139619,139621],{"class":93,"line":94},[91,139620,51586],{"class":51275},[91,139622,15551],{"class":101},[91,139624,139625,139627,139629,139631,139633],{"class":93,"line":11},[91,139626,70445],{"class":150},[91,139628,51412],{"class":101},[91,139630,293],{"class":150},[91,139632,51531],{"class":150},[91,139634,1268],{"class":101},[91,139636,139637],{"class":93,"line":1157},[91,139638,1543],{"class":101},[38,139640,138406],{},[83,139642,139643],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,139644,139645,139651,139663],{"__ignoreMap":10},[91,139646,139647,139649],{"class":93,"line":94},[91,139648,51586],{"class":51275},[91,139650,15551],{"class":101},[91,139652,139653,139655,139657,139659,139661],{"class":93,"line":11},[91,139654,70445],{"class":150},[91,139656,51412],{"class":101},[91,139658,293],{"class":150},[91,139660,51531],{"class":150},[91,139662,1268],{"class":101},[91,139664,139665],{"class":93,"line":1157},[91,139666,1543],{"class":101},[38,139668,139669],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5105,139671,139672],{},"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":10,"searchDepth":11,"depth":11,"links":139674},[139675,139676,139677,139684],{"id":137955,"depth":11,"text":137956},{"id":137974,"depth":11,"text":137975},{"id":138001,"depth":11,"text":138002,"children":139678},[139679,139680,139681,139682,139683],{"id":138005,"depth":1157,"text":138006},{"id":138018,"depth":1157,"text":138019},{"id":138042,"depth":1157,"text":138043},{"id":138064,"depth":1157,"text":138065},{"id":138136,"depth":1157,"text":138137},{"id":138262,"depth":11,"text":138263,"children":139685},[139686,139687,139688,139689,139691],{"id":138266,"depth":1157,"text":138267},{"id":138273,"depth":1157,"text":138274},{"id":138445,"depth":1157,"text":138446},{"id":138986,"depth":1157,"text":139690},"15.4.4 nav导航模块制作",{"id":139284,"depth":1157,"text":139285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137947,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139698,"title":139699,"body":139700,"description":13,"extension":14,"meta":142102,"navigation":17,"path":142103,"seo":142104,"stem":142105,"__hash__":142106},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139701,"toc":142079},[139702,139705,139709,139713,139725,139728,139731,139734,139745,139747,139771,139773,139797,139802,139805,139807,139843,139845,139881,139884,139889,139892,139895,139898,139928,139935,139938,139948,139950,139984,139987,140021,140027,140044,140046,140082,140084,140120,140125,140150,140152,140178,140180,140204,140211,140214,140278,140280,140322,140324,140364,140371,140376,140378,140408,140410,140440,140444,140447,140454,140466,140468,140494,140496,140520,140523,140525,140549,140555,140565,140567,140597,140599,140629,140636,140677,140679,140715,140717,140753,140757,140760,140763,140766,140772,140777,140780,140803,140806,140830,140833,140857,140862,140865,140868,140871,140874,140877,140951,140953,140983,140985,141015,141018,141021,141053,141057,141061,141075,141084,141087,141092,141094,141188,141190,141284,141307,141309,141333,141335,141359,141366,141369,141379,141381,141405,141410,141418,141420,141450,141455,141495,141497,141523,141525,141551,141555,141558,141563,141566,141570,141578,141585,141593,141595,141625,141627,141657,141665,141668,141671,141673,141703,141705,141735,141738,141743,141745,141769,141771,141795,141798,141883,141885,141909,141911,141935,141939,141941,141965,141967,142001,142005,142019,142022,142027,142030,142035,142038,142068,142076],[29,139703,139699],{"id":139704},"_16-品优购项目下篇-主体与页面开发",[33,139706,139708],{"id":139707},"_161-项目主体模块制作","16.1 项目主体模块制作",[63,139710,139712],{"id":139711},"_1611-首页制作","16.1.1 首页制作",[38,139714,139715,139717,139718,139720,139721,139724],{},[251,139716,102033],{}," 主体模块是 ",[251,139719,74033],{}," 里面专有的，注意需要新的样式文件 ",[251,139722,139723],{},"index.css，"," 就不要写在common.css中了",[1440,139726],{"style":126383,"src":139727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1440,139729],{"style":126383,"src":139730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[38,139732,139733],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1109,139735,139736,139739,139742],{},[49,139737,139738],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[49,139740,139741],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[49,139743,139744],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[38,139746,138366],{},[83,139748,139749],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,139750,139751,139757,139767],{"__ignoreMap":10},[91,139752,139753,139755],{"class":93,"line":94},[91,139754,130375],{"class":1941},[91,139756,15551],{"class":101},[91,139758,139759,139761,139763,139765],{"class":93,"line":11},[91,139760,131007],{"class":150},[91,139762,51412],{"class":101},[91,139764,23710],{"class":150},[91,139766,1268],{"class":101},[91,139768,139769],{"class":93,"line":1157},[91,139770,1543],{"class":101},[38,139772,138406],{},[83,139774,139775],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,139776,139777,139783,139793],{"__ignoreMap":10},[91,139778,139779,139781],{"class":93,"line":94},[91,139780,130375],{"class":1941},[91,139782,15551],{"class":101},[91,139784,139785,139787,139789,139791],{"class":93,"line":11},[91,139786,131007],{"class":150},[91,139788,51412],{"class":101},[91,139790,23710],{"class":150},[91,139792,1268],{"class":101},[91,139794,139795],{"class":93,"line":1157},[91,139796,1543],{"class":101},[46,139798,139799],{},[49,139800,139801],{},"左侧focus模块制作",[1440,139803],{"style":126383,"src":139804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[38,139806,138366],{},[83,139808,139809],{"className":126527,"code":127850,"language":126529,"meta":10,"style":10},[88,139810,139811,139819,139829,139839],{"__ignoreMap":10},[91,139812,139813,139815,139817],{"class":93,"line":94},[91,139814,53796],{"class":51275},[91,139816,61875],{"class":1941},[91,139818,15551],{"class":101},[91,139820,139821,139823,139825,139827],{"class":93,"line":11},[91,139822,127865],{"class":150},[91,139824,51412],{"class":101},[91,139826,54864],{"class":150},[91,139828,1268],{"class":101},[91,139830,139831,139833,139835,139837],{"class":93,"line":1157},[91,139832,70773],{"class":150},[91,139834,51412],{"class":101},[91,139836,54712],{"class":150},[91,139838,1268],{"class":101},[91,139840,139841],{"class":93,"line":1172},[91,139842,1543],{"class":101},[38,139844,138406],{},[83,139846,139847],{"className":126527,"code":127850,"language":126529,"meta":10,"style":10},[88,139848,139849,139857,139867,139877],{"__ignoreMap":10},[91,139850,139851,139853,139855],{"class":93,"line":94},[91,139852,53796],{"class":51275},[91,139854,61875],{"class":1941},[91,139856,15551],{"class":101},[91,139858,139859,139861,139863,139865],{"class":93,"line":11},[91,139860,127865],{"class":150},[91,139862,51412],{"class":101},[91,139864,54864],{"class":150},[91,139866,1268],{"class":101},[91,139868,139869,139871,139873,139875],{"class":93,"line":1157},[91,139870,70773],{"class":150},[91,139872,51412],{"class":101},[91,139874,54712],{"class":150},[91,139876,1268],{"class":101},[91,139878,139879],{"class":93,"line":1172},[91,139880,1543],{"class":101},[38,139882,139883],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[46,139885,139886],{"start":11},[49,139887,139888],{},"右侧newsflash模块制作",[1440,139890],{"style":126383,"src":139891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[38,139893,139894],{},"右侧的模块 分为上中下三个盒子",[38,139896,139897],{},"结构代码：",[83,139899,139900],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,139901,139902],{"__ignoreMap":10},[91,139903,139904,139906,139908,139910,139912,139914,139916,139918,139920,139922,139924,139926],{"class":93,"line":94},[91,139905,1012],{"class":101},[91,139907,1440],{"class":51275},[91,139909,55214],{"class":1941},[91,139911,147],{"class":101},[91,139913,134044],{"class":206},[91,139915,55222],{"class":1941},[91,139917,147],{"class":101},[91,139919,134051],{"class":206},[91,139921,134054],{"class":1941},[91,139923,147],{"class":101},[91,139925,134059],{"class":206},[91,139927,51282],{"class":101},[38,139929,139930,139931,139934],{},"1 号盒子为 ",[88,139932,139933],{},"news"," 新闻模块 高度为 165px",[1440,139936],{"style":126383,"src":139937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[38,139939,139940,139941,139944,139945],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[88,139942,139943],{},"news-hd","，下面是 ",[88,139946,139947],{},"news-bd",[38,139949,139897],{},[83,139951,139952],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,139953,139954,139958,139972,139976],{"__ignoreMap":10},[91,139955,139956],{"class":93,"line":94},[91,139957,130638],{"class":160},[91,139959,139960,139962,139964,139966,139968,139970],{"class":93,"line":11},[91,139961,1012],{"class":101},[91,139963,51586],{"class":51275},[91,139965,53461],{"class":1941},[91,139967,147],{"class":101},[91,139969,130651],{"class":206},[91,139971,51282],{"class":101},[91,139973,139974],{"class":93,"line":1157},[91,139975,130658],{"class":101},[91,139977,139978,139980,139982],{"class":93,"line":1172},[91,139979,51760],{"class":101},[91,139981,51586],{"class":51275},[91,139983,51282],{"class":101},[38,139985,139986],{},"样式代码：",[83,139988,139989],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,139990,139991,139995,140009,140013],{"__ignoreMap":10},[91,139992,139993],{"class":93,"line":94},[91,139994,130638],{"class":160},[91,139996,139997,139999,140001,140003,140005,140007],{"class":93,"line":11},[91,139998,1012],{"class":101},[91,140000,51586],{"class":51275},[91,140002,53461],{"class":1941},[91,140004,147],{"class":101},[91,140006,130651],{"class":206},[91,140008,51282],{"class":101},[91,140010,140011],{"class":93,"line":1157},[91,140012,130658],{"class":101},[91,140014,140015,140017,140019],{"class":93,"line":1172},[91,140016,51760],{"class":101},[91,140018,51586],{"class":51275},[91,140020,51282],{"class":101},[38,140022,140023,140024,140026],{},"上面是",[88,140025,139943],{},"，设置高度是 33px，设置下边框",[1109,140028,140029,140035],{},[49,140030,140031,140032,140034],{},"里面放一个",[88,140033,22889],{}," 标题",[49,140036,140037,140038,140040,140041,140043],{},"放一个a",[88,140039,102668],{},"，内容是 更多，然后让 ",[88,140042,340],{}," 进行右浮动，三角用伪元素设置字体图标就好",[38,140045,139897],{},[83,140047,140048],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,140049,140050,140058,140068,140078],{"__ignoreMap":10},[91,140051,140052,140054,140056],{"class":93,"line":94},[91,140053,51586],{"class":51275},[91,140055,137528],{"class":1941},[91,140057,15551],{"class":101},[91,140059,140060,140062,140064,140066],{"class":93,"line":11},[91,140061,137535],{"class":150},[91,140063,51412],{"class":101},[91,140065,7631],{"class":206},[91,140067,1268],{"class":101},[91,140069,140070,140072,140074,140076],{"class":93,"line":1157},[91,140071,128143],{"class":150},[91,140073,51412],{"class":101},[91,140075,60844],{"class":150},[91,140077,1268],{"class":101},[91,140079,140080],{"class":93,"line":1172},[91,140081,1543],{"class":101},[38,140083,139986],{},[83,140085,140086],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,140087,140088,140096,140106,140116],{"__ignoreMap":10},[91,140089,140090,140092,140094],{"class":93,"line":94},[91,140091,51586],{"class":51275},[91,140093,137528],{"class":1941},[91,140095,15551],{"class":101},[91,140097,140098,140100,140102,140104],{"class":93,"line":11},[91,140099,137535],{"class":150},[91,140101,51412],{"class":101},[91,140103,7631],{"class":206},[91,140105,1268],{"class":101},[91,140107,140108,140110,140112,140114],{"class":93,"line":1157},[91,140109,128143],{"class":150},[91,140111,51412],{"class":101},[91,140113,60844],{"class":150},[91,140115,1268],{"class":101},[91,140117,140118],{"class":93,"line":1172},[91,140119,1543],{"class":101},[38,140121,140122,140123],{},"下面是",[88,140124,139947],{},[1109,140126,140127,140135],{},[49,140128,140129,140130,100993,140132,140134],{},"里面包含 ",[88,140131,1109],{},[88,140133,49],{}," 还有链接",[49,140136,139607,140137,140139,140140,140142,140143,140146,140147],{},[88,140138,49],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[88,140141,131193],{}," 2.设置 ",[88,140144,140145],{},"white-space: nowrap;"," 3. 设置 ",[88,140148,140149],{},"text-overflow: ellipsis;",[38,140151,139897],{},[83,140153,140155],{"className":126527,"code":140154,"language":126529,"meta":10,"style":10},"div {\n  overflow: hidden;\n}\n",[88,140156,140157,140163,140174],{"__ignoreMap":10},[91,140158,140159,140161],{"class":93,"line":94},[91,140160,51586],{"class":51275},[91,140162,15551],{"class":101},[91,140164,140165,140168,140170,140172],{"class":93,"line":11},[91,140166,140167],{"class":150},"  overflow",[91,140169,51412],{"class":101},[91,140171,61689],{"class":150},[91,140173,1268],{"class":101},[91,140175,140176],{"class":93,"line":1157},[91,140177,1543],{"class":101},[38,140179,139986],{},[83,140181,140182],{"className":126527,"code":140154,"language":126529,"meta":10,"style":10},[88,140183,140184,140190,140200],{"__ignoreMap":10},[91,140185,140186,140188],{"class":93,"line":94},[91,140187,51586],{"class":51275},[91,140189,15551],{"class":101},[91,140191,140192,140194,140196,140198],{"class":93,"line":11},[91,140193,140167],{"class":150},[91,140195,51412],{"class":101},[91,140197,61689],{"class":150},[91,140199,1268],{"class":101},[91,140201,140202],{"class":93,"line":1157},[91,140203,1543],{"class":101},[38,140205,140206,140207,140210],{},"2 号盒子为 ",[88,140208,140209],{},"lifeservice"," 生活服务模块 高度为 209px",[1440,140212],{"style":126383,"src":140213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1109,140215,140216,140219,140229,140253,140264],{},[49,140217,140218],{},"设置边框（左右下边框）",[49,140220,140221,140222,140225,140226,140228],{},"里面的内容 是 ",[88,140223,140224],{},"ul > 12*li","，给",[88,140227,49],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[49,140230,140231,140232],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1109,140233,140234,140239,140248],{},[49,140235,140236,140238],{},[88,140237,140209],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[49,140240,140241,140242,140244,140245,140247],{},"可以让 ",[88,140243,140209],{}," 里面的 ",[88,140246,1109],{}," 宽度为 252，就可以装的下 4 个 小 li",[49,140249,140250,140252],{},[88,140251,140209],{}," 盒子 overflow 隐藏多余的部分就可以了",[49,140254,116442,140255,140257,140258,140260,140261,140263],{},[88,140256,49],{}," 里面放一个 ",[88,140259,543],{},"（里面放图标），下面的文本用 ",[88,140262,38],{}," 标签包裹",[49,140265,139027,140266,140268,140269,140271,140272,139061,140274,140277],{},[88,140267,543],{}," 设置 24px宽和28px的高（注意 ",[88,140270,543],{}," 是行内元素， 转成行内块），给 ",[88,140273,49],{},[88,140275,140276],{},"text-align:center"," 让里面内容居中显示",[38,140279,139897],{},[83,140281,140283],{"className":126527,"code":140282,"language":126529,"meta":10,"style":10},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[88,140284,140285,140303,140308,140318],{"__ignoreMap":10},[91,140286,140287,140289,140291,140293,140295,140297,140299,140301],{"class":93,"line":94},[91,140288,91],{"class":51275},[91,140290,12414],{"class":101},[91,140292,340],{"class":51275},[91,140294,12414],{"class":101},[91,140296,23527],{"class":51275},[91,140298,12414],{"class":101},[91,140300,251],{"class":51275},[91,140302,15551],{"class":101},[91,140304,140305],{"class":93,"line":11},[91,140306,140307],{"class":160},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[91,140309,140310,140312,140314,140316],{"class":93,"line":1157},[91,140311,128143],{"class":150},[91,140313,51412],{"class":101},[91,140315,128205],{"class":150},[91,140317,1268],{"class":101},[91,140319,140320],{"class":93,"line":1172},[91,140321,1543],{"class":101},[38,140323,139986],{},[83,140325,140326],{"className":126527,"code":140282,"language":126529,"meta":10,"style":10},[88,140327,140328,140346,140350,140360],{"__ignoreMap":10},[91,140329,140330,140332,140334,140336,140338,140340,140342,140344],{"class":93,"line":94},[91,140331,91],{"class":51275},[91,140333,12414],{"class":101},[91,140335,340],{"class":51275},[91,140337,12414],{"class":101},[91,140339,23527],{"class":51275},[91,140341,12414],{"class":101},[91,140343,251],{"class":51275},[91,140345,15551],{"class":101},[91,140347,140348],{"class":93,"line":11},[91,140349,140307],{"class":160},[91,140351,140352,140354,140356,140358],{"class":93,"line":1157},[91,140353,128143],{"class":150},[91,140355,51412],{"class":101},[91,140357,128205],{"class":150},[91,140359,1268],{"class":101},[91,140361,140362],{"class":93,"line":1172},[91,140363,1543],{"class":101},[38,140365,140366,140367,140370],{},"3 号盒子为 ",[88,140368,140369],{},"bargain"," 特价商品",[1109,140372,140373],{},[49,140374,140375],{},"这个比较简单，直接插入一张图片即可",[38,140377,139897],{},[83,140379,140380],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,140381,140382],{"__ignoreMap":10},[91,140383,140384,140386,140388,140390,140392,140394,140396,140398,140400,140402,140404,140406],{"class":93,"line":94},[91,140385,1012],{"class":101},[91,140387,1440],{"class":51275},[91,140389,55214],{"class":1941},[91,140391,147],{"class":101},[91,140393,134044],{"class":206},[91,140395,55222],{"class":1941},[91,140397,147],{"class":101},[91,140399,134051],{"class":206},[91,140401,134054],{"class":1941},[91,140403,147],{"class":101},[91,140405,134059],{"class":206},[91,140407,51282],{"class":101},[38,140409,139986],{},[83,140411,140412],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,140413,140414],{"__ignoreMap":10},[91,140415,140416,140418,140420,140422,140424,140426,140428,140430,140432,140434,140436,140438],{"class":93,"line":94},[91,140417,1012],{"class":101},[91,140419,1440],{"class":51275},[91,140421,55214],{"class":1941},[91,140423,147],{"class":101},[91,140425,134044],{"class":206},[91,140427,55222],{"class":1941},[91,140429,147],{"class":101},[91,140431,134051],{"class":206},[91,140433,134054],{"class":1941},[91,140435,147],{"class":101},[91,140437,134059],{"class":206},[91,140439,51282],{"class":101},[63,140441,140443],{"id":140442},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1440,140445],{"style":126383,"src":140446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[38,140448,140449,140450,140453],{},"大盒子 ",[88,140451,140452],{},"recom"," 推荐模块 recommend",[1109,140455,140456],{},[49,140457,140458,140459,140461,140462,140465],{},"给这个 ",[88,140460,140452],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[88,140463,140464],{},"#ebebeb","），设置距离上边 12px",[38,140467,139897],{},[83,140469,140471],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},"div {\n  background-color: #f0f0f0;\n}\n",[88,140472,140473,140479,140490],{"__ignoreMap":10},[91,140474,140475,140477],{"class":93,"line":94},[91,140476,51586],{"class":51275},[91,140478,15551],{"class":101},[91,140480,140481,140483,140485,140488],{"class":93,"line":11},[91,140482,70853],{"class":150},[91,140484,51412],{"class":101},[91,140486,140487],{"class":150},"#f0f0f0",[91,140489,1268],{"class":101},[91,140491,140492],{"class":93,"line":1157},[91,140493,1543],{"class":101},[38,140495,139986],{},[83,140497,140498],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[88,140499,140500,140506,140516],{"__ignoreMap":10},[91,140501,140502,140504],{"class":93,"line":94},[91,140503,51586],{"class":51275},[91,140505,15551],{"class":101},[91,140507,140508,140510,140512,140514],{"class":93,"line":11},[91,140509,70853],{"class":150},[91,140511,51412],{"class":101},[91,140513,140487],{"class":150},[91,140515,1268],{"class":101},[91,140517,140518],{"class":93,"line":1157},[91,140519,1543],{"class":101},[38,140521,140522],{},"里面包含 2 个盒子， 浮动即可",[38,140524,139897],{},[83,140526,140527],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,140528,140529,140535,140545],{"__ignoreMap":10},[91,140530,140531,140533],{"class":93,"line":94},[91,140532,130375],{"class":1941},[91,140534,15551],{"class":101},[91,140536,140537,140539,140541,140543],{"class":93,"line":11},[91,140538,131007],{"class":150},[91,140540,51412],{"class":101},[91,140542,23710],{"class":150},[91,140544,1268],{"class":101},[91,140546,140547],{"class":93,"line":1157},[91,140548,1543],{"class":101},[38,140550,140551,140552],{},"1 号盒子 ",[88,140553,140554],{},"recom_hd",[1109,140556,140557,140560],{},[49,140558,140559],{},"设置宽度205px，高度163px",[49,140561,140031,140562,140564],{},[88,140563,1440],{},"标签，插入图片即可",[38,140566,139897],{},[83,140568,140569],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,140570,140571],{"__ignoreMap":10},[91,140572,140573,140575,140577,140579,140581,140583,140585,140587,140589,140591,140593,140595],{"class":93,"line":94},[91,140574,1012],{"class":101},[91,140576,1440],{"class":51275},[91,140578,55214],{"class":1941},[91,140580,147],{"class":101},[91,140582,134044],{"class":206},[91,140584,55222],{"class":1941},[91,140586,147],{"class":101},[91,140588,134051],{"class":206},[91,140590,134054],{"class":1941},[91,140592,147],{"class":101},[91,140594,134059],{"class":206},[91,140596,51282],{"class":101},[38,140598,139986],{},[83,140600,140601],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,140602,140603],{"__ignoreMap":10},[91,140604,140605,140607,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627],{"class":93,"line":94},[91,140606,1012],{"class":101},[91,140608,1440],{"class":51275},[91,140610,55214],{"class":1941},[91,140612,147],{"class":101},[91,140614,134044],{"class":206},[91,140616,55222],{"class":1941},[91,140618,147],{"class":101},[91,140620,134051],{"class":206},[91,140622,134054],{"class":1941},[91,140624,147],{"class":101},[91,140626,134059],{"class":206},[91,140628,51282],{"class":101},[38,140630,140631,140632,140635],{},"2 号盒子 ",[88,140633,140634],{},"recom_bd"," ，注意里面的小竖线",[1109,140637,140638,140649,140652,140657,140662],{},[49,140639,140640,140641,140643,140644,140646,140647],{},"右侧结构里面放 ",[88,140642,1109],{}," 包含 4个 ",[88,140645,49],{},"，每个li里面包含一个",[88,140648,1440],{},[49,140650,140651],{},"直接利用切片工具把里面的内容当成一张图片",[49,140653,139027,140654,140656],{},[88,140655,49],{}," 设置浮动",[49,140658,139027,140659,140661],{},[88,140660,1440],{}," 设置宽高，宽度 248px，高度 163px",[49,140663,140664,140665,140225,140668,140670,140671,140673,140674],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[88,140666,140667],{},"top 10px",[88,140669,49],{},"设置相对定位（注意，最后一个",[88,140672,49],{},"不用设置伪元素），可以利用 ",[88,140675,140676],{},"nth-child(-n+3){...}",[38,140678,139897],{},[83,140680,140681],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,140682,140683,140691,140701,140711],{"__ignoreMap":10},[91,140684,140685,140687,140689],{"class":93,"line":94},[91,140686,51586],{"class":51275},[91,140688,137528],{"class":1941},[91,140690,15551],{"class":101},[91,140692,140693,140695,140697,140699],{"class":93,"line":11},[91,140694,137535],{"class":150},[91,140696,51412],{"class":101},[91,140698,7631],{"class":206},[91,140700,1268],{"class":101},[91,140702,140703,140705,140707,140709],{"class":93,"line":1157},[91,140704,128143],{"class":150},[91,140706,51412],{"class":101},[91,140708,60844],{"class":150},[91,140710,1268],{"class":101},[91,140712,140713],{"class":93,"line":1172},[91,140714,1543],{"class":101},[38,140716,139986],{},[83,140718,140719],{"className":126527,"code":138369,"language":126529,"meta":10,"style":10},[88,140720,140721,140729,140739,140749],{"__ignoreMap":10},[91,140722,140723,140725,140727],{"class":93,"line":94},[91,140724,51586],{"class":51275},[91,140726,137528],{"class":1941},[91,140728,15551],{"class":101},[91,140730,140731,140733,140735,140737],{"class":93,"line":11},[91,140732,137535],{"class":150},[91,140734,51412],{"class":101},[91,140736,7631],{"class":206},[91,140738,1268],{"class":101},[91,140740,140741,140743,140745,140747],{"class":93,"line":1157},[91,140742,128143],{"class":150},[91,140744,51412],{"class":101},[91,140746,60844],{"class":150},[91,140748,1268],{"class":101},[91,140750,140751],{"class":93,"line":1172},[91,140752,1543],{"class":101},[63,140754,140756],{"id":140755},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1440,140758],{"style":126383,"src":140759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[38,140761,140762],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[38,140764,140765],{},"第一楼是家用电器模块： 里面包含两个盒子",[38,140767,140768,140771],{},[88,140769,140770],{},"box_hd"," 制作",[38,140773,140551,140774,140776],{},[88,140775,140770],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1440,140778],{"style":126383,"src":140779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1109,140781,140782,140787,140792,140795],{},[49,140783,140784,140786],{},[88,140785,140770],{}," 给 30px 的高度，2个像素的下边框",[49,140788,140789,140790],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[88,140791,139038],{},[49,140793,140794],{},"左侧盒左浮动，右侧盒子右浮动",[49,140796,140797,140799,140800,140802],{},[88,140798,340],{},"标签之间的距离用左右的",[88,140801,30858],{},"撑开即可",[38,140804,140805],{},"结构代码",[83,140807,140808],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,140809,140810,140816,140826],{"__ignoreMap":10},[91,140811,140812,140814],{"class":93,"line":94},[91,140813,130375],{"class":1941},[91,140815,15551],{"class":101},[91,140817,140818,140820,140822,140824],{"class":93,"line":11},[91,140819,131007],{"class":150},[91,140821,51412],{"class":101},[91,140823,23710],{"class":150},[91,140825,1268],{"class":101},[91,140827,140828],{"class":93,"line":1157},[91,140829,1543],{"class":101},[38,140831,140832],{},"样式代码",[83,140834,140835],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,140836,140837,140843,140853],{"__ignoreMap":10},[91,140838,140839,140841],{"class":93,"line":94},[91,140840,130375],{"class":1941},[91,140842,15551],{"class":101},[91,140844,140845,140847,140849,140851],{"class":93,"line":11},[91,140846,131007],{"class":150},[91,140848,51412],{"class":101},[91,140850,23710],{"class":150},[91,140852,1268],{"class":101},[91,140854,140855],{"class":93,"line":1157},[91,140856,1543],{"class":101},[38,140858,140859,140771],{},[88,140860,140861],{},"box_bd",[38,140863,140864],{},"2 号盒子 box_bd，不要给高度",[1440,140866],{"style":126383,"src":140867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[38,140869,140870],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[38,140872,140873],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[38,140875,140876],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1109,140878,140879,140891,140907],{},[49,140880,140881,140883,140884,140887,140888,140890],{},[88,140882,140861],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[88,140885,140886],{},"tab_content","，在",[88,140889,140886],{}," 里面包裹tab选项卡对应的内容",[49,140892,140893,140894,140897,140898,140900,140901,140903,140904,140906],{},"内容被一个大盒子包裹（",[88,140895,140896],{},"tab_list_item","），里面是 ",[88,140899,1109],{}," 包裹 5个 ",[88,140902,49],{},"，每个",[88,140905,49],{},"设置对应的宽度，然后设置浮动",[49,140908,140909,140910,140912,140913,140915,140916],{},"而这5个",[88,140911,49],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[88,140914,49],{},"设置",[1109,140917,140918,140936,140939],{},[49,140919,140920,140921,140923,140924,140926,140927,140929,140930,140932,140933,140935],{},"第一个小 ",[88,140922,49],{}," 分为上下结构，上面是 ",[88,140925,1109],{}," 包裹 ",[88,140928,49],{}," ，",[88,140931,49],{},"里面包裹 ",[88,140934,340],{},"，下面插入一张图片",[49,140937,140938],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[49,140940,140941,140942,140944,140945,140947,140948,140950],{},"后面的小 ",[88,140943,49],{}," 里面先放一个",[88,140946,340],{},"标签，然后在",[88,140949,340],{},"标签里面插入图片即可",[38,140952,140805],{},[83,140954,140955],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,140956,140957],{"__ignoreMap":10},[91,140958,140959,140961,140963,140965,140967,140969,140971,140973,140975,140977,140979,140981],{"class":93,"line":94},[91,140960,1012],{"class":101},[91,140962,1440],{"class":51275},[91,140964,55214],{"class":1941},[91,140966,147],{"class":101},[91,140968,134044],{"class":206},[91,140970,55222],{"class":1941},[91,140972,147],{"class":101},[91,140974,134051],{"class":206},[91,140976,134054],{"class":1941},[91,140978,147],{"class":101},[91,140980,134059],{"class":206},[91,140982,51282],{"class":101},[38,140984,140832],{},[83,140986,140987],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,140988,140989],{"__ignoreMap":10},[91,140990,140991,140993,140995,140997,140999,141001,141003,141005,141007,141009,141011,141013],{"class":93,"line":94},[91,140992,1012],{"class":101},[91,140994,1440],{"class":51275},[91,140996,55214],{"class":1941},[91,140998,147],{"class":101},[91,141000,134044],{"class":206},[91,141002,55222],{"class":1941},[91,141004,147],{"class":101},[91,141006,134051],{"class":206},[91,141008,134054],{"class":1941},[91,141010,147],{"class":101},[91,141012,134059],{"class":206},[91,141014,51282],{"class":101},[38,141016,141017],{},"tab栏切换需求！！！！！！介绍：",[1440,141019],{"style":126383,"src":141020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1109,141022,141023,141031,141037,141040],{},[49,141024,141025,141028,141029],{},[88,141026,141027],{},"tab","栏的布局是 ",[88,141030,139038],{},[49,141032,141033,141034,141036],{},"有多少个",[88,141035,141027],{},"选项卡，那么对应就有多少个内容",[49,141038,141039],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[49,141041,141042,141043,141046,141047,141049,141050,141052],{},"等后面我们学习了",[88,141044,141045],{},"js","之后，我们就会配合",[88,141048,141045],{},"来实现，",[88,141051,141027],{},"栏的切换",[33,141054,141056],{"id":141055},"_162-列表制作","16.2 列表制作",[63,141058,141060],{"id":141059},"_1621-准备工作","16.2.1 准备工作",[1109,141062,141063,141066,141069,141072],{},[49,141064,141065],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[49,141067,141068],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[49,141070,141071],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[49,141073,141074],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[63,141076,141078,141079,100993,141081,141083],{"id":141077},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[88,141080,131532],{},[88,141082,53688],{}," 修改",[1440,141085],{"style":126383,"src":141086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1109,141088,141089],{},[49,141090,141091],{},"秒杀盒子 sk（ second kill ） 定位即可",[38,141093,139897],{},[83,141095,141096],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,141097,141098,141102,141116,141120,141134,141138,141152,141156,141170,141174],{"__ignoreMap":10},[91,141099,141100],{"class":93,"line":94},[91,141101,131966],{"class":160},[91,141103,141104,141106,141108,141110,141112,141114],{"class":93,"line":11},[91,141105,131971],{"class":1941},[91,141107,79782],{"class":101},[91,141109,128887],{"class":150},[91,141111,51412],{"class":101},[91,141113,131980],{"class":150},[91,141115,129457],{"class":101},[91,141117,141118],{"class":93,"line":1157},[91,141119,131987],{"class":160},[91,141121,141122,141124,141126,141128,141130,141132],{"class":93,"line":1172},[91,141123,131992],{"class":1941},[91,141125,79782],{"class":101},[91,141127,128887],{"class":150},[91,141129,51412],{"class":101},[91,141131,54739],{"class":150},[91,141133,129457],{"class":101},[91,141135,141136],{"class":93,"line":1178},[91,141137,132007],{"class":160},[91,141139,141140,141142,141144,141146,141148,141150],{"class":93,"line":1192},[91,141141,132012],{"class":1941},[91,141143,79782],{"class":101},[91,141145,128887],{"class":150},[91,141147,51412],{"class":101},[91,141149,54806],{"class":150},[91,141151,129457],{"class":101},[91,141153,141154],{"class":93,"line":1198},[91,141155,132027],{"class":160},[91,141157,141158,141160,141162,141164,141166,141168],{"class":93,"line":1289},[91,141159,132032],{"class":1941},[91,141161,79782],{"class":101},[91,141163,128887],{"class":150},[91,141165,51412],{"class":101},[91,141167,86208],{"class":150},[91,141169,129457],{"class":101},[91,141171,141172],{"class":93,"line":1295},[91,141173,132047],{"class":160},[91,141175,141176,141178,141180,141182,141184,141186],{"class":93,"line":1307},[91,141177,132052],{"class":1941},[91,141179,79782],{"class":101},[91,141181,128887],{"class":150},[91,141183,51412],{"class":101},[91,141185,132061],{"class":150},[91,141187,129457],{"class":101},[38,141189,139986],{},[83,141191,141192],{"className":126527,"code":131959,"language":126529,"meta":10,"style":10},[88,141193,141194,141198,141212,141216,141230,141234,141248,141252,141266,141270],{"__ignoreMap":10},[91,141195,141196],{"class":93,"line":94},[91,141197,131966],{"class":160},[91,141199,141200,141202,141204,141206,141208,141210],{"class":93,"line":11},[91,141201,131971],{"class":1941},[91,141203,79782],{"class":101},[91,141205,128887],{"class":150},[91,141207,51412],{"class":101},[91,141209,131980],{"class":150},[91,141211,129457],{"class":101},[91,141213,141214],{"class":93,"line":1157},[91,141215,131987],{"class":160},[91,141217,141218,141220,141222,141224,141226,141228],{"class":93,"line":1172},[91,141219,131992],{"class":1941},[91,141221,79782],{"class":101},[91,141223,128887],{"class":150},[91,141225,51412],{"class":101},[91,141227,54739],{"class":150},[91,141229,129457],{"class":101},[91,141231,141232],{"class":93,"line":1178},[91,141233,132007],{"class":160},[91,141235,141236,141238,141240,141242,141244,141246],{"class":93,"line":1192},[91,141237,132012],{"class":1941},[91,141239,79782],{"class":101},[91,141241,128887],{"class":150},[91,141243,51412],{"class":101},[91,141245,54806],{"class":150},[91,141247,129457],{"class":101},[91,141249,141250],{"class":93,"line":1198},[91,141251,132027],{"class":160},[91,141253,141254,141256,141258,141260,141262,141264],{"class":93,"line":1289},[91,141255,132032],{"class":1941},[91,141257,79782],{"class":101},[91,141259,128887],{"class":150},[91,141261,51412],{"class":101},[91,141263,86208],{"class":150},[91,141265,129457],{"class":101},[91,141267,141268],{"class":93,"line":1295},[91,141269,132047],{"class":160},[91,141271,141272,141274,141276,141278,141280,141282],{"class":93,"line":1307},[91,141273,132052],{"class":1941},[91,141275,79782],{"class":101},[91,141277,128887],{"class":150},[91,141279,51412],{"class":101},[91,141281,132061],{"class":150},[91,141283,129457],{"class":101},[1109,141285,141286,141297],{},[49,141287,141288,141289,141292,141293,100993,141295],{},"1 号盒子左侧浮动 ",[88,141290,141291],{},"sk_list"," 里面包含 ",[88,141294,1109],{},[88,141296,49],{},[49,141298,141299,141300,141292,141303,100993,141305],{},"2 号盒子左侧浮动 ",[88,141301,141302],{},"sk_con",[88,141304,1109],{},[88,141306,49],{},[38,141308,139897],{},[83,141310,141311],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,141312,141313,141319,141329],{"__ignoreMap":10},[91,141314,141315,141317],{"class":93,"line":94},[91,141316,130375],{"class":1941},[91,141318,15551],{"class":101},[91,141320,141321,141323,141325,141327],{"class":93,"line":11},[91,141322,131007],{"class":150},[91,141324,51412],{"class":101},[91,141326,23710],{"class":150},[91,141328,1268],{"class":101},[91,141330,141331],{"class":93,"line":1157},[91,141332,1543],{"class":101},[38,141334,139986],{},[83,141336,141337],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,141338,141339,141345,141355],{"__ignoreMap":10},[91,141340,141341,141343],{"class":93,"line":94},[91,141342,130375],{"class":1941},[91,141344,15551],{"class":101},[91,141346,141347,141349,141351,141353],{"class":93,"line":11},[91,141348,131007],{"class":150},[91,141350,51412],{"class":101},[91,141352,23710],{"class":150},[91,141354,1268],{"class":101},[91,141356,141357],{"class":93,"line":1157},[91,141358,1543],{"class":101},[63,141360,141362,141363],{"id":141361},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[88,141364,141365],{},"sk_container",[1440,141367],{"style":126383,"src":141368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1109,141370,141371,141376],{},[49,141372,140551,141373,141375],{},[88,141374,141365],{}," 给宽度 1200，不要给高度",[49,141377,141378],{},"一定不要忘记清除浮动",[38,141380,139897],{},[83,141382,141383],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,141384,141385,141391,141401],{"__ignoreMap":10},[91,141386,141387,141389],{"class":93,"line":94},[91,141388,130375],{"class":1941},[91,141390,15551],{"class":101},[91,141392,141393,141395,141397,141399],{"class":93,"line":11},[91,141394,131007],{"class":150},[91,141396,51412],{"class":101},[91,141398,23710],{"class":150},[91,141400,1268],{"class":101},[91,141402,141403],{"class":93,"line":1157},[91,141404,1543],{"class":101},[46,141406,141407],{},[49,141408,141409],{},"sk_hd制作",[1109,141411,141412],{},[49,141413,140631,141414,141417],{},[88,141415,141416],{},"sk_hd"," ，插入图片即可",[38,141419,139897],{},[83,141421,141422],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,141423,141424],{"__ignoreMap":10},[91,141425,141426,141428,141430,141432,141434,141436,141438,141440,141442,141444,141446,141448],{"class":93,"line":94},[91,141427,1012],{"class":101},[91,141429,1440],{"class":51275},[91,141431,55214],{"class":1941},[91,141433,147],{"class":101},[91,141435,134044],{"class":206},[91,141437,55222],{"class":1941},[91,141439,147],{"class":101},[91,141441,134051],{"class":206},[91,141443,134054],{"class":1941},[91,141445,147],{"class":101},[91,141447,134059],{"class":206},[91,141449,51282],{"class":101},[46,141451,141452],{"start":11},[49,141453,141454],{},"sk_bd制作",[1109,141456,141457],{},[49,141458,141459,141460,141463,141464,100993,141466,141468],{},"3 号盒子 ",[88,141461,141462],{},"sk_bd"," ，里面包含很多的 ",[88,141465,1109],{},[88,141467,49],{},[1109,141469,141470,141479],{},[49,141471,141472,141473,141475,141476,141478],{},"当鼠标移入到 ",[88,141474,49],{}," 上面的时候显示红色的边框，在这里先给 ",[88,141477,49],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[49,141480,141481,141482,141484,141485,141487,141488,141491,141492,141494],{},"由于给每个 ",[88,141483,49],{}," 都设置了外边距，导致一行的最后一个 ",[88,141486,49],{}," 掉了下来，在这里我们利用 ",[88,141489,141490],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[88,141493,49],{},"，去掉外边距就好了",[38,141496,139897],{},[83,141498,141499],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,141500,141501,141507,141519],{"__ignoreMap":10},[91,141502,141503,141505],{"class":93,"line":94},[91,141504,51586],{"class":51275},[91,141506,15551],{"class":101},[91,141508,141509,141511,141513,141515,141517],{"class":93,"line":11},[91,141510,70445],{"class":150},[91,141512,51412],{"class":101},[91,141514,293],{"class":150},[91,141516,51531],{"class":150},[91,141518,1268],{"class":101},[91,141520,141521],{"class":93,"line":1157},[91,141522,1543],{"class":101},[38,141524,139986],{},[83,141526,141527],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,141528,141529,141535,141547],{"__ignoreMap":10},[91,141530,141531,141533],{"class":93,"line":94},[91,141532,51586],{"class":51275},[91,141534,15551],{"class":101},[91,141536,141537,141539,141541,141543,141545],{"class":93,"line":11},[91,141538,70445],{"class":150},[91,141540,51412],{"class":101},[91,141542,293],{"class":150},[91,141544,51531],{"class":150},[91,141546,1268],{"class":101},[91,141548,141549],{"class":93,"line":1157},[91,141550,1543],{"class":101},[33,141552,141554],{"id":141553},"_163-注册页面制作","16.3 注册页面制作",[1440,141556],{"style":126383,"src":141557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[38,141559,141560,141562],{},[251,141561,9004],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1440,141564],{"style":126383,"src":141565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[63,141567,141569],{"id":141568},"_1631-准备工作","16.3.1 准备工作",[1109,141571,141572,141575],{},[49,141573,141574],{},"创建register.html，引入 base.css，引入favicon图标",[49,141576,141577],{},"创建register.css ，在html页面进行引入",[63,141579,141581,141582,141584],{"id":141580},"_1632-header-头部实现","16.3.2 ",[88,141583,131532],{}," 头部实现",[1109,141586,141587,141590],{},[49,141588,141589],{},"整个内容用 版心 进行包裹",[49,141591,141592],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[38,141594,139897],{},[83,141596,141597],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,141598,141599],{"__ignoreMap":10},[91,141600,141601,141603,141605,141607,141609,141611,141613,141615,141617,141619,141621,141623],{"class":93,"line":94},[91,141602,1012],{"class":101},[91,141604,1440],{"class":51275},[91,141606,55214],{"class":1941},[91,141608,147],{"class":101},[91,141610,134044],{"class":206},[91,141612,55222],{"class":1941},[91,141614,147],{"class":101},[91,141616,134051],{"class":206},[91,141618,134054],{"class":1941},[91,141620,147],{"class":101},[91,141622,134059],{"class":206},[91,141624,51282],{"class":101},[38,141626,139986],{},[83,141628,141629],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,141630,141631],{"__ignoreMap":10},[91,141632,141633,141635,141637,141639,141641,141643,141645,141647,141649,141651,141653,141655],{"class":93,"line":94},[91,141634,1012],{"class":101},[91,141636,1440],{"class":51275},[91,141638,55214],{"class":1941},[91,141640,147],{"class":101},[91,141642,134044],{"class":206},[91,141644,55222],{"class":1941},[91,141646,147],{"class":101},[91,141648,134051],{"class":206},[91,141650,134054],{"class":1941},[91,141652,147],{"class":101},[91,141654,134059],{"class":206},[91,141656,51282],{"class":101},[63,141658,141660,141661,141664],{"id":141659},"_1633-registerarea-主体模块实现","16.3.3 ",[88,141662,141663],{},"registerarea"," 主体模块实现",[1440,141666],{"style":126383,"src":141667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[38,141669,141670],{},"整个大盒子 高度为 522px，设置4个边框",[38,141672,139897],{},[83,141674,141675],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[88,141676,141677,141683,141699],{"__ignoreMap":10},[91,141678,141679,141681],{"class":93,"line":94},[91,141680,51586],{"class":51275},[91,141682,15551],{"class":101},[91,141684,141685,141687,141689,141691,141693,141695,141697],{"class":93,"line":11},[91,141686,70871],{"class":150},[91,141688,51412],{"class":101},[91,141690,319],{"class":150},[91,141692,51467],{"class":97},[91,141694,51496],{"class":150},[91,141696,129919],{"class":150},[91,141698,1268],{"class":101},[91,141700,141701],{"class":93,"line":1157},[91,141702,1543],{"class":101},[38,141704,139986],{},[83,141706,141707],{"className":126527,"code":130684,"language":126529,"meta":10,"style":10},[88,141708,141709,141715,141731],{"__ignoreMap":10},[91,141710,141711,141713],{"class":93,"line":94},[91,141712,51586],{"class":51275},[91,141714,15551],{"class":101},[91,141716,141717,141719,141721,141723,141725,141727,141729],{"class":93,"line":11},[91,141718,70871],{"class":150},[91,141720,51412],{"class":101},[91,141722,319],{"class":150},[91,141724,51467],{"class":97},[91,141726,51496],{"class":150},[91,141728,129919],{"class":150},[91,141730,1268],{"class":101},[91,141732,141733],{"class":93,"line":1157},[91,141734,1543],{"class":101},[38,141736,141737],{},"1号盒子 是一个 h3 标签，放标题",[1109,141739,141740],{},[49,141741,141742],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[38,141744,139897],{},[83,141746,141747],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,141748,141749,141755,141765],{"__ignoreMap":10},[91,141750,141751,141753],{"class":93,"line":94},[91,141752,130375],{"class":1941},[91,141754,15551],{"class":101},[91,141756,141757,141759,141761,141763],{"class":93,"line":11},[91,141758,131007],{"class":150},[91,141760,51412],{"class":101},[91,141762,23710],{"class":150},[91,141764,1268],{"class":101},[91,141766,141767],{"class":93,"line":1157},[91,141768,1543],{"class":101},[38,141770,139986],{},[83,141772,141773],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,141774,141775,141781,141791],{"__ignoreMap":10},[91,141776,141777,141779],{"class":93,"line":94},[91,141778,130375],{"class":1941},[91,141780,15551],{"class":101},[91,141782,141783,141785,141787,141789],{"class":93,"line":11},[91,141784,131007],{"class":150},[91,141786,51412],{"class":101},[91,141788,23710],{"class":150},[91,141790,1268],{"class":101},[91,141792,141793],{"class":93,"line":1157},[91,141794,1543],{"class":101},[38,141796,141797],{},"2号盒子 里面放注册的内容",[1109,141799,141800,141803,141812,141826,141839,141842,141845,141863,141877],{},[49,141801,141802],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[49,141804,141805,141806,141808,141809,141811],{},"里面的内容利用 ",[88,141807,1109],{}," 包含 ",[88,141810,49],{}," 来实现的（不需要用表格）",[49,141813,139041,141814,141816,141817,141819,141820,141822,141823,141825],{},[88,141815,49],{}," 里面，左侧放 ",[88,141818,33583],{}," 标签， 中间放",[88,141821,53796],{}," 标签， 右侧放 ",[88,141824,91],{}," 提示信息",[49,141827,141828,141829,141831,141832,141834,141835,141838],{},"左侧 ",[88,141830,33583],{},"里面的文字都是右对齐，我们可以给",[88,141833,33583],{},"设置一个宽度（88px），然后利用",[88,141836,141837],{},"text-align"," 来设置右对齐",[49,141840,141841],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[49,141843,141844],{},"右侧 span修饰一下文字颜色",[49,141846,141847,141848],{},"提示信息的样式优化",[1109,141849,141850,141853,141856],{},[49,141851,141852],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[49,141854,141855],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[49,141857,141858,141859,141862],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[88,141860,141861],{},"vertical-algin"," 来设置 图片与文字对齐方式",[49,141864,141865,141866],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1109,141867,141868,141874],{},[49,141869,141870,141871,141873],{},"设置 ",[88,141872,23527],{}," 的 左右 12px 的内边距，设置一下文字颜色",[49,141875,141876],{},"分别设置 背景颜色",[49,141878,141879,141880,141882],{},"同意协议 和 完成注册 都是用 ",[88,141881,49],{}," 进行包裹",[38,141884,139897],{},[83,141886,141887],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[88,141888,141889,141895,141905],{"__ignoreMap":10},[91,141890,141891,141893],{"class":93,"line":94},[91,141892,51586],{"class":51275},[91,141894,15551],{"class":101},[91,141896,141897,141899,141901,141903],{"class":93,"line":11},[91,141898,70853],{"class":150},[91,141900,51412],{"class":101},[91,141902,140487],{"class":150},[91,141904,1268],{"class":101},[91,141906,141907],{"class":93,"line":1157},[91,141908,1543],{"class":101},[38,141910,139986],{},[83,141912,141913],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[88,141914,141915,141921,141931],{"__ignoreMap":10},[91,141916,141917,141919],{"class":93,"line":94},[91,141918,51586],{"class":51275},[91,141920,15551],{"class":101},[91,141922,141923,141925,141927,141929],{"class":93,"line":11},[91,141924,70853],{"class":150},[91,141926,51412],{"class":101},[91,141928,140487],{"class":150},[91,141930,1268],{"class":101},[91,141932,141933],{"class":93,"line":1157},[91,141934,1543],{"class":101},[63,141936,141938],{"id":141937},"_1634-底部实现","16.3.4 底部实现",[38,141940,139897],{},[83,141942,141943],{"className":126527,"code":140470,"language":126529,"meta":10,"style":10},[88,141944,141945,141951,141961],{"__ignoreMap":10},[91,141946,141947,141949],{"class":93,"line":94},[91,141948,51586],{"class":51275},[91,141950,15551],{"class":101},[91,141952,141953,141955,141957,141959],{"class":93,"line":11},[91,141954,70853],{"class":150},[91,141956,51412],{"class":101},[91,141958,140487],{"class":150},[91,141960,1268],{"class":101},[91,141962,141963],{"class":93,"line":1157},[91,141964,1543],{"class":101},[38,141966,139986],{},[83,141968,141969],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,141970,141971,141975,141989,141993],{"__ignoreMap":10},[91,141972,141973],{"class":93,"line":94},[91,141974,130638],{"class":160},[91,141976,141977,141979,141981,141983,141985,141987],{"class":93,"line":11},[91,141978,1012],{"class":101},[91,141980,51586],{"class":51275},[91,141982,53461],{"class":1941},[91,141984,147],{"class":101},[91,141986,130651],{"class":206},[91,141988,51282],{"class":101},[91,141990,141991],{"class":93,"line":1157},[91,141992,130658],{"class":101},[91,141994,141995,141997,141999],{"class":93,"line":1172},[91,141996,51760],{"class":101},[91,141998,51586],{"class":51275},[91,142000,51282],{"class":101},[33,142002,142004],{"id":142003},"_164-项目总结","16.4 项目总结",[46,142006,142007,142010,142013,142016],{},[49,142008,142009],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[49,142011,142012],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[49,142014,142015],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[49,142017,142018],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1440,142020],{"style":126383,"src":142021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[46,142023,142024],{"start":1178},[49,142025,142026],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1440,142028],{"style":126383,"src":142029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[46,142031,142032],{"start":1192},[49,142033,142034],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1440,142036],{"style":126383,"src":142037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[83,142039,142040],{"className":127274,"code":136684,"language":127276,"meta":10,"style":10},[88,142041,142042],{"__ignoreMap":10},[91,142043,142044,142046,142048,142050,142052,142054,142056,142058,142060,142062,142064,142066],{"class":93,"line":94},[91,142045,1012],{"class":101},[91,142047,53796],{"class":51275},[91,142049,53799],{"class":1941},[91,142051,147],{"class":101},[91,142053,62674],{"class":206},[91,142055,14899],{"class":1941},[91,142057,147],{"class":101},[91,142059,136705],{"class":206},[91,142061,60995],{"class":1941},[91,142063,147],{"class":101},[91,142065,136712],{"class":206},[91,142067,51282],{"class":101},[46,142069,142070,142073],{"start":1198},[49,142071,142072],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[49,142074,142075],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5105,142077,142078],{},"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":10,"searchDepth":11,"depth":11,"links":142080},[142081,142086,142093,142101],{"id":139707,"depth":11,"text":139708,"children":142082},[142083,142084,142085],{"id":139711,"depth":1157,"text":139712},{"id":140442,"depth":1157,"text":140443},{"id":140755,"depth":1157,"text":140756},{"id":141055,"depth":11,"text":141056,"children":142087},[142088,142089,142091],{"id":141059,"depth":1157,"text":141060},{"id":141077,"depth":1157,"text":142090},"16.2.2 列表页 header 和 nav 修改",{"id":141361,"depth":1157,"text":142092},"16.2.3 列表页主体 sk_container",{"id":141553,"depth":11,"text":141554,"children":142094},[142095,142096,142098,142100],{"id":141568,"depth":1157,"text":141569},{"id":141580,"depth":1157,"text":142097},"16.3.2 header 头部实现",{"id":141659,"depth":1157,"text":142099},"16.3.3 registerarea 主体模块实现",{"id":141937,"depth":1157,"text":141938},{"id":142003,"depth":11,"text":142004},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139699,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142108,"title":142109,"body":142110,"description":13,"extension":14,"meta":142218,"navigation":17,"path":142219,"seo":142220,"stem":142221,"__hash__":142222},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142111,"toc":142213},[142112,142115,142119,142122,142125,142134,142143,142147,142152,142159,142177,142180,142183,142186,142189,142192,142195,142198,142201,142204,142207,142210],[29,142113,142109],{"id":142114},"_17-web服务器与网站发布",[33,142116,142118],{"id":142117},"_171-web服务器","17.1 Web服务器",[38,142120,142121],{},"把自己网站上传到服务器上，可以让其他人访问",[1440,142123],{"style":126383,"src":142124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[38,142126,142127,142130,142131],{},[251,142128,142129],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[251,142132,142133],{},"Web 服务器等",[38,142135,142136,142137,100993,142140,25715],{},"根据服务器在网络中所在的位置不同，又可分为 ",[251,142138,142139],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[251,142141,142142],{},"远程服务器",[63,142144,142146],{"id":142145},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[38,142148,142149],{},[251,142150,142151],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[38,142153,142154,142155],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[340,142156,142157],{"href":142157,"rel":142158},"http:\u002F\u002Ffree.3v.do\u002F",[23839],[1109,142160,142161,142164,142167,142174],{},[49,142162,142163],{},"去免费空间网站注册账号。",[49,142165,142166],{},"记录下主机名、用户名、密码、域名。",[49,142168,142169,142170,142173],{},"利用 ",[88,142171,142172],{},"utftp"," 软件 上传网站到远程服务器",[49,142175,142176],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[38,142178,142179],{},"使用软件上传，对上传软件文件进行解压",[1440,142181],{"style":126383,"src":142182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1440,142184],{"style":126383,"src":142185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[38,142187,142188],{},"输入刚刚申请的服务器账号信息：",[1440,142190],{"style":126383,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1440,142193],{"style":126383,"src":142194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1440,142196],{"style":126383,"src":142197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1440,142199],{"style":126383,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[38,142202,142203],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1440,142205],{"style":126383,"src":142206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[38,142208,142209],{},"浏览器输入域名即可访问",[38,142211,142212],{},"首页一定必须是index",{"title":10,"searchDepth":11,"depth":11,"links":142214},[142215],{"id":142117,"depth":11,"text":142118,"children":142216},[142217],{"id":142145,"depth":1157,"text":142146},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142109,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142224,"title":142225,"body":142226,"description":13,"extension":14,"meta":143153,"navigation":17,"path":143154,"seo":143155,"stem":143156,"__hash__":143157},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142227,"toc":143136},[142228,142231,142235,142238,142241,142252,142255,142259,142263,142268,142271,142274,142277,142280,142284,142310,142314,142318,142321,142324,142328,142361,142365,142368,142371,142435,142439,142443,142446,142449,142452,142456,142501,142505,142508,142538,142542,142546,142549,142552,142556,142559,142628,142631,142739,142741,142747,142751,142754,142757,142853,142856,142860,142884,142888,142891,142895,142898,142902,142905,142908,142911,142914,142918,142921,142924,142928,142932,142935,142938,142941,142944,142948,142951,142955,142958,142961,143006,143010,143014,143017,143020,143023,143055,143059,143062,143096,143100,143103,143133],[29,142229,142225],{"id":142230},"_18-2d动画与3d转换",[33,142232,142234],{"id":142233},"_181-css3-2d转换","18.1 CSS3 2D转换",[38,142236,142237],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[38,142239,142240],{},"转换（transform）你可以简单理解为变形",[1109,142242,142243,142246,142249],{},[49,142244,142245],{},"移动：translate",[49,142247,142248],{},"旋转：rotate",[49,142250,142251],{},"缩放：scale",[1440,142253],{"style":126383,"src":142254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[63,142256,142258],{"id":142257},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21977,142260,142262],{"id":142261},"_18111-translate介绍","18.1.1.1 translate介绍",[38,142264,142265,142266],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[251,142267,133186],{},[1440,142269],{"style":126383,"src":142270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[38,142272,142273],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[38,142275,142276],{},"对于行内元素无效",[38,142278,142279],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21977,142281,142283],{"id":142282},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[83,142285,142286],{"className":126527,"code":138716,"language":126529,"meta":10,"style":10},[88,142287,142288,142294,142306],{"__ignoreMap":10},[91,142289,142290,142292],{"class":93,"line":94},[91,142291,51586],{"class":51275},[91,142293,15551],{"class":101},[91,142295,142296,142298,142300,142302,142304],{"class":93,"line":11},[91,142297,70445],{"class":150},[91,142299,51412],{"class":101},[91,142301,293],{"class":150},[91,142303,51531],{"class":150},[91,142305,1268],{"class":101},[91,142307,142308],{"class":93,"line":1157},[91,142309,1543],{"class":101},[63,142311,142313],{"id":142312},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21977,142315,142317],{"id":142316},"_18121-rotate介绍","18.1.2.1 rotate介绍",[38,142319,142320],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1440,142322],{"style":126383,"src":142323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21977,142325,142327],{"id":142326},"_18122-旋转效果","18.1.2.2 旋转效果",[83,142329,142331],{"className":126527,"code":142330,"language":126529,"meta":10,"style":10},"div {\n  transform: rotate(45deg);\n}\n",[88,142332,142333,142339,142357],{"__ignoreMap":10},[91,142334,142335,142337],{"class":93,"line":94},[91,142336,51586],{"class":51275},[91,142338,15551],{"class":101},[91,142340,142341,142343,142345,142348,142350,142352,142355],{"class":93,"line":11},[91,142342,136511],{"class":150},[91,142344,51412],{"class":101},[91,142346,142347],{"class":150},"rotate",[91,142349,102],{"class":101},[91,142351,631],{"class":150},[91,142353,142354],{"class":97},"deg",[91,142356,2697],{"class":101},[91,142358,142359],{"class":93,"line":1157},[91,142360,1543],{"class":101},[21977,142362,142364],{"id":142363},"_18123-三角做法","18.1.2.3 三角做法",[38,142366,142367],{},"该下标当经过最外层大盒子时会实现向上反转",[1440,142369],{"style":126383,"src":142370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[83,142372,142373],{"className":126527,"code":135047,"language":126529,"meta":10,"style":10},[88,142374,142375,142379,142385,142395,142405,142421,142431],{"__ignoreMap":10},[91,142376,142377],{"class":93,"line":94},[91,142378,135054],{"class":160},[91,142380,142381,142383],{"class":93,"line":11},[91,142382,135059],{"class":1941},[91,142384,15551],{"class":101},[91,142386,142387,142389,142391,142393],{"class":93,"line":1157},[91,142388,70543],{"class":150},[91,142390,51412],{"class":101},[91,142392,293],{"class":150},[91,142394,1268],{"class":101},[91,142396,142397,142399,142401,142403],{"class":93,"line":1172},[91,142398,70763],{"class":150},[91,142400,51412],{"class":101},[91,142402,293],{"class":150},[91,142404,1268],{"class":101},[91,142406,142407,142409,142411,142413,142415,142417,142419],{"class":93,"line":1178},[91,142408,70871],{"class":150},[91,142410,51412],{"class":101},[91,142412,548],{"class":150},[91,142414,51467],{"class":97},[91,142416,51496],{"class":150},[91,142418,63966],{"class":150},[91,142420,1268],{"class":101},[91,142422,142423,142425,142427,142429],{"class":93,"line":1192},[91,142424,135102],{"class":150},[91,142426,51412],{"class":101},[91,142428,62344],{"class":150},[91,142430,1268],{"class":101},[91,142432,142433],{"class":93,"line":1198},[91,142434,1543],{"class":101},[63,142436,142438],{"id":142437},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21977,142440,142442],{"id":142441},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[38,142444,142445],{},"设置中心点",[1440,142447],{"style":126383,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[38,142450,142451],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21977,142453,142455],{"id":142454},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[83,142457,142459],{"className":126527,"code":142458,"language":126529,"meta":10,"style":10},"\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",[88,142460,142461,142466,142472,142487,142492,142497],{"__ignoreMap":10},[91,142462,142463],{"class":93,"line":94},[91,142464,142465],{"class":160},"\u002F* 转换中心点 *\u002F\n",[91,142467,142468,142470],{"class":93,"line":11},[91,142469,51586],{"class":51275},[91,142471,15551],{"class":101},[91,142473,142474,142477,142479,142481,142483,142485],{"class":93,"line":1157},[91,142475,142476],{"class":150},"  transform-origin",[91,142478,51412],{"class":101},[91,142480,51567],{"class":150},[91,142482,17123],{"class":150},[91,142484,130390],{"class":101},[91,142486,135200],{"class":160},[91,142488,142489],{"class":93,"line":1172},[91,142490,142491],{"class":160},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[91,142493,142494],{"class":93,"line":1178},[91,142495,142496],{"class":160},"  \u002F* transform-origin: left top; *\u002F\n",[91,142498,142499],{"class":93,"line":1192},[91,142500,1543],{"class":101},[21977,142502,142504],{"id":142503},"_18133-旋转案例","18.1.3.3 旋转案例",[1440,142506],{"style":126383,"src":142507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[83,142509,142510],{"className":126527,"code":142330,"language":126529,"meta":10,"style":10},[88,142511,142512,142518,142534],{"__ignoreMap":10},[91,142513,142514,142516],{"class":93,"line":94},[91,142515,51586],{"class":51275},[91,142517,15551],{"class":101},[91,142519,142520,142522,142524,142526,142528,142530,142532],{"class":93,"line":11},[91,142521,136511],{"class":150},[91,142523,51412],{"class":101},[91,142525,142347],{"class":150},[91,142527,102],{"class":101},[91,142529,631],{"class":150},[91,142531,142354],{"class":97},[91,142533,2697],{"class":101},[91,142535,142536],{"class":93,"line":1157},[91,142537,1543],{"class":101},[63,142539,142541],{"id":142540},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21977,142543,142545],{"id":142544},"_18141-scale介绍","18.1.4.1 scale介绍",[38,142547,142548],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1440,142550],{"style":126383,"src":142551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21977,142553,142555],{"id":142554},"_18142-分页按钮","18.1.4.2 分页按钮",[1440,142557],{"style":126383,"src":142558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[83,142560,142562],{"className":126527,"code":142561,"language":126529,"meta":10,"style":10},"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",[88,142563,142564,142570,142586,142590,142594,142599,142605,142619,142624],{"__ignoreMap":10},[91,142565,142566,142568],{"class":93,"line":94},[91,142567,51586],{"class":51275},[91,142569,15551],{"class":101},[91,142571,142572,142574,142576,142579,142581,142584],{"class":93,"line":11},[91,142573,136511],{"class":150},[91,142575,51412],{"class":101},[91,142577,142578],{"class":150},"scale",[91,142580,102],{"class":101},[91,142582,142583],{"class":150},"1.2",[91,142585,2697],{"class":101},[91,142587,142588],{"class":93,"line":1157},[91,142589,1543],{"class":101},[91,142591,142592],{"class":93,"line":1172},[91,142593,135988],{"class":101},[91,142595,142596],{"class":93,"line":1178},[91,142597,142598],{"class":160},"\u002F* 2D 缩放 *\u002F\n",[91,142600,142601,142603],{"class":93,"line":1192},[91,142602,51586],{"class":51275},[91,142604,15551],{"class":101},[91,142606,142607,142609,142611,142613,142615,142617],{"class":93,"line":1198},[91,142608,136511],{"class":150},[91,142610,51412],{"class":101},[91,142612,142578],{"class":150},[91,142614,102],{"class":101},[91,142616,142583],{"class":150},[91,142618,2697],{"class":101},[91,142620,142621],{"class":93,"line":1289},[91,142622,142623],{"class":160},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[91,142625,142626],{"class":93,"line":1295},[91,142627,1543],{"class":101},[38,142629,142630],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[83,142632,142634],{"className":126527,"code":142633,"language":126529,"meta":10,"style":10},"\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",[88,142635,142636,142641,142651,142672,142693,142697,142702,142708,142735],{"__ignoreMap":10},[91,142637,142638],{"class":93,"line":94},[91,142639,142640],{"class":160},"\u002F* 定义动画 *\u002F\n",[91,142642,142643,142646,142649],{"class":93,"line":11},[91,142644,142645],{"class":97},"@keyframes",[91,142647,142648],{"class":5195}," move",[91,142650,15551],{"class":101},[91,142652,142653,142656,142658,142660,142662,142665,142667,142669],{"class":93,"line":1157},[91,142654,142655],{"class":1941},"  0%",[91,142657,79782],{"class":101},[91,142659,48109],{"class":150},[91,142661,51412],{"class":101},[91,142663,142664],{"class":150},"translateX",[91,142666,102],{"class":101},[91,142668,293],{"class":150},[91,142670,142671],{"class":101},"); }\n",[91,142673,142674,142677,142679,142681,142683,142685,142687,142689,142691],{"class":93,"line":1172},[91,142675,142676],{"class":1941},"  100%",[91,142678,79782],{"class":101},[91,142680,48109],{"class":150},[91,142682,51412],{"class":101},[91,142684,142664],{"class":150},[91,142686,102],{"class":101},[91,142688,413],{"class":150},[91,142690,51467],{"class":97},[91,142692,142671],{"class":101},[91,142694,142695],{"class":93,"line":1178},[91,142696,1543],{"class":101},[91,142698,142699],{"class":93,"line":1192},[91,142700,142701],{"class":160},"\u002F* 调用动画 *\u002F\n",[91,142703,142704,142706],{"class":93,"line":1198},[91,142705,51586],{"class":51275},[91,142707,15551],{"class":101},[91,142709,142710,142713,142715,142717,142719,142721,142723,142725,142727,142730,142733],{"class":93,"line":1289},[91,142711,142712],{"class":150},"  animation",[91,142714,51412],{"class":101},[91,142716,135213],{"class":150},[91,142718,25093],{"class":150},[91,142720,797],{"class":97},[91,142722,78655],{"class":150},[91,142724,4071],{"class":150},[91,142726,797],{"class":97},[91,142728,142729],{"class":150}," infinite",[91,142731,142732],{"class":150}," alternate",[91,142734,1268],{"class":101},[91,142736,142737],{"class":93,"line":1295},[91,142738,1543],{"class":101},[38,142740,142630],{},[83,142742,142745],{"className":142743,"code":142744,"language":5166},[5164],"\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",[88,142746,142744],{"__ignoreMap":10},[21977,142748,142750],{"id":142749},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[38,142752,142753],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1440,142755],{"style":126383,"src":142756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[83,142758,142759],{"className":126527,"code":142633,"language":126529,"meta":10,"style":10},[88,142760,142761,142765,142773,142791,142811,142815,142819,142825,142849],{"__ignoreMap":10},[91,142762,142763],{"class":93,"line":94},[91,142764,142640],{"class":160},[91,142766,142767,142769,142771],{"class":93,"line":11},[91,142768,142645],{"class":97},[91,142770,142648],{"class":5195},[91,142772,15551],{"class":101},[91,142774,142775,142777,142779,142781,142783,142785,142787,142789],{"class":93,"line":1157},[91,142776,142655],{"class":1941},[91,142778,79782],{"class":101},[91,142780,48109],{"class":150},[91,142782,51412],{"class":101},[91,142784,142664],{"class":150},[91,142786,102],{"class":101},[91,142788,293],{"class":150},[91,142790,142671],{"class":101},[91,142792,142793,142795,142797,142799,142801,142803,142805,142807,142809],{"class":93,"line":1172},[91,142794,142676],{"class":1941},[91,142796,79782],{"class":101},[91,142798,48109],{"class":150},[91,142800,51412],{"class":101},[91,142802,142664],{"class":150},[91,142804,102],{"class":101},[91,142806,413],{"class":150},[91,142808,51467],{"class":97},[91,142810,142671],{"class":101},[91,142812,142813],{"class":93,"line":1178},[91,142814,1543],{"class":101},[91,142816,142817],{"class":93,"line":1192},[91,142818,142701],{"class":160},[91,142820,142821,142823],{"class":93,"line":1198},[91,142822,51586],{"class":51275},[91,142824,15551],{"class":101},[91,142826,142827,142829,142831,142833,142835,142837,142839,142841,142843,142845,142847],{"class":93,"line":1289},[91,142828,142712],{"class":150},[91,142830,51412],{"class":101},[91,142832,135213],{"class":150},[91,142834,25093],{"class":150},[91,142836,797],{"class":97},[91,142838,78655],{"class":150},[91,142840,4071],{"class":150},[91,142842,797],{"class":97},[91,142844,142729],{"class":150},[91,142846,142732],{"class":150},[91,142848,1268],{"class":101},[91,142850,142851],{"class":93,"line":1295},[91,142852,1543],{"class":101},[38,142854,142855],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[63,142857,142859],{"id":142858},"_1823-知识点回顾","18.2.3 知识点回顾",[83,142861,142862],{"className":126527,"code":128696,"language":126529,"meta":10,"style":10},[88,142863,142864,142870,142880],{"__ignoreMap":10},[91,142865,142866,142868],{"class":93,"line":94},[91,142867,51586],{"class":51275},[91,142869,15551],{"class":101},[91,142871,142872,142874,142876,142878],{"class":93,"line":11},[91,142873,128709],{"class":150},[91,142875,51412],{"class":101},[91,142877,61711],{"class":150},[91,142879,1268],{"class":101},[91,142881,142882],{"class":93,"line":1157},[91,142883,1543],{"class":101},[33,142885,142887],{"id":142886},"_183-3d-转换","18.3 3D 转换",[38,142889,142890],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[63,142892,142894],{"id":142893},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1440,142896],{"style":126383,"src":142897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[63,142899,142901],{"id":142900},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1440,142903],{"style":126383,"src":142904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[38,142906,142907],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[38,142909,142910],{},"translate3d的效果需要搭配透视perspective来使用",[1440,142912],{"style":126383,"src":142913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[63,142915,142917],{"id":142916},"_1833-透视-perspective","18.3.3 透视 perspective",[1440,142919],{"style":126383,"src":142920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[38,142922,142923],{},"透视写在父盒子上，单位为像素",[63,142925,142927],{"id":142926},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21977,142929,142931],{"id":142930},"_18341-分开解释","18.3.4.1 分开解释",[1440,142933],{"style":126383,"src":142934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1440,142936],{"style":126383,"src":142937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1440,142939],{"style":126383,"src":142940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[38,142942,142943],{},"总结来说就是左手原则",[21977,142945,142947],{"id":142946},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1440,142949],{"style":126383,"src":142950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[63,142952,142954],{"id":142953},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1440,142956],{"style":126383,"src":142957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1440,142959],{"style":126383,"src":142960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[83,142962,142964],{"className":126527,"code":142963,"language":126529,"meta":10,"style":10},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[88,142965,142966,142972,142985,143002],{"__ignoreMap":10},[91,142967,142968,142970],{"class":93,"line":94},[91,142969,51586],{"class":51275},[91,142971,15551],{"class":101},[91,142973,142974,142977,142979,142981,142983],{"class":93,"line":11},[91,142975,142976],{"class":150},"  perspective",[91,142978,51412],{"class":101},[91,142980,65049],{"class":150},[91,142982,51467],{"class":97},[91,142984,1268],{"class":101},[91,142986,142987,142989,142991,142994,142996,142998,143000],{"class":93,"line":1157},[91,142988,136511],{"class":150},[91,142990,51412],{"class":101},[91,142992,142993],{"class":150},"rotateX",[91,142995,102],{"class":101},[91,142997,631],{"class":150},[91,142999,142354],{"class":97},[91,143001,2697],{"class":101},[91,143003,143004],{"class":93,"line":1172},[91,143005,1543],{"class":101},[63,143007,143009],{"id":143008},"_1836-案例","18.3.6 案例",[21977,143011,143013],{"id":143012},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1440,143015],{"style":126383,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1440,143018],{"style":126383,"src":143019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1440,143021],{"style":126383,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[83,143024,143026],{"className":126527,"code":143025,"language":126529,"meta":10,"style":10},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[88,143027,143028,143033,143039,143051],{"__ignoreMap":10},[91,143029,143030],{"class":93,"line":94},[91,143031,143032],{"class":160},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[91,143034,143035,143037],{"class":93,"line":11},[91,143036,133524],{"class":1941},[91,143038,15551],{"class":101},[91,143040,143041,143043,143045,143047,143049],{"class":93,"line":1157},[91,143042,142976],{"class":150},[91,143044,51412],{"class":101},[91,143046,65049],{"class":150},[91,143048,51467],{"class":97},[91,143050,1268],{"class":101},[91,143052,143053],{"class":93,"line":1172},[91,143054,1543],{"class":101},[21977,143056,143058],{"id":143057},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1440,143060],{"style":126383,"src":143061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[83,143063,143064],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,143065,143066,143070,143084,143088],{"__ignoreMap":10},[91,143067,143068],{"class":93,"line":94},[91,143069,130638],{"class":160},[91,143071,143072,143074,143076,143078,143080,143082],{"class":93,"line":11},[91,143073,1012],{"class":101},[91,143075,51586],{"class":51275},[91,143077,53461],{"class":1941},[91,143079,147],{"class":101},[91,143081,130651],{"class":206},[91,143083,51282],{"class":101},[91,143085,143086],{"class":93,"line":1157},[91,143087,130658],{"class":101},[91,143089,143090,143092,143094],{"class":93,"line":1172},[91,143091,51760],{"class":101},[91,143093,51586],{"class":51275},[91,143095,51282],{"class":101},[21977,143097,143099],{"id":143098},"_18363-旋转木马","18.3.6.3 旋转木马",[1440,143101],{"style":126383,"src":143102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[83,143104,143105],{"className":126527,"code":142330,"language":126529,"meta":10,"style":10},[88,143106,143107,143113,143129],{"__ignoreMap":10},[91,143108,143109,143111],{"class":93,"line":94},[91,143110,51586],{"class":51275},[91,143112,15551],{"class":101},[91,143114,143115,143117,143119,143121,143123,143125,143127],{"class":93,"line":11},[91,143116,136511],{"class":150},[91,143118,51412],{"class":101},[91,143120,142347],{"class":150},[91,143122,102],{"class":101},[91,143124,631],{"class":150},[91,143126,142354],{"class":97},[91,143128,2697],{"class":101},[91,143130,143131],{"class":93,"line":1157},[91,143132,1543],{"class":101},[5105,143134,143135],{},"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":10,"searchDepth":11,"depth":11,"links":143137},[143138,143145],{"id":142233,"depth":11,"text":142234,"children":143139},[143140,143141,143142,143143,143144],{"id":142257,"depth":1157,"text":142258},{"id":142312,"depth":1157,"text":142313},{"id":142437,"depth":1157,"text":142438},{"id":142540,"depth":1157,"text":142541},{"id":142858,"depth":1157,"text":142859},{"id":142886,"depth":11,"text":142887,"children":143146},[143147,143148,143149,143150,143151,143152],{"id":142893,"depth":1157,"text":142894},{"id":142900,"depth":1157,"text":142901},{"id":142916,"depth":1157,"text":142917},{"id":142926,"depth":1157,"text":142927},{"id":142953,"depth":1157,"text":142954},{"id":143008,"depth":1157,"text":143009},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142225,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143159,"title":143160,"body":143161,"description":13,"extension":14,"meta":143364,"navigation":17,"path":143365,"seo":143366,"stem":143367,"__hash__":143368},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143162,"toc":143353},[143163,143166,143170,143173,143176,143180,143183,143186,143189,143193,143196,143200,143203,143207,143210,143214,143228,143232,143257,143260,143263,143280,143284,143288,143291,143294,143298,143301,143304,143322,143326,143329,143343,143347,143350],[29,143164,143160],{"id":143165},"_19-移动端基础-前缀现状与视口",[33,143167,143169],{"id":143168},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1440,143171],{"style":126383,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[38,143174,143175],{},"意思就是加个前缀，增加兼容性",[33,143177,143179],{"id":143178},"_192-移动端现状认识","19.2 移动端现状认识",[1440,143181],{"style":126383,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[38,143184,143185],{},"调试方法：",[1440,143187],{"style":126383,"src":143188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[33,143190,143192],{"id":143191},"_193-视口","19.3 视口",[38,143194,143195],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[63,143197,143199],{"id":143198},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1440,143201],{"style":126383,"src":143202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[63,143204,143206],{"id":143205},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1440,143208],{"style":126383,"src":143209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[63,143211,143213],{"id":143212},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1109,143215,143216,143219,143222,143225],{},[49,143217,143218],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[49,143220,143221],{},"理想视口，对设备来讲，是最理想的视口尺寸",[49,143223,143224],{},"需要手动添写meta视口标签通知浏览器操作",[49,143226,143227],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[63,143229,143231],{"id":143230},"_1934-meta视口标签","19.3.4 meta视口标签",[83,143233,143235],{"className":127274,"code":143234,"language":127276,"meta":10,"style":10},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[88,143236,143237],{"__ignoreMap":10},[91,143238,143239,143241,143243,143245,143247,143249,143251,143253,143255],{"class":93,"line":94},[91,143240,1012],{"class":101},[91,143242,51319],{"class":51275},[91,143244,14899],{"class":1941},[91,143246,147],{"class":101},[91,143248,51366],{"class":206},[91,143250,51346],{"class":1941},[91,143252,147],{"class":101},[91,143254,51373],{"class":206},[91,143256,51282],{"class":101},[1440,143258],{"style":126383,"src":143259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[38,143261,143262],{},"标准视口设置：",[46,143264,143265,143268,143271,143274,143277],{},[49,143266,143267],{},"视口宽度和设备保持一致",[49,143269,143270],{},"视口的默认缩放比例1.0",[49,143272,143273],{},"不允许用户自行缩放",[49,143275,143276],{},"最大允许的缩放比例1.0",[49,143278,143279],{},"最小允许的缩放比例1.0",[63,143281,143283],{"id":143282},"_1935-二倍图","19.3.5 二倍图",[21977,143285,143287],{"id":143286},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1440,143289],{"style":126383,"src":143290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1440,143292],{"style":126383,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21977,143295,143297],{"id":143296},"_19352-多倍图","19.3.5.2 多倍图",[1440,143299],{"style":126383,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[38,143302,143303],{},"二倍图法，代码如下：",[83,143305,143307],{"className":126527,"code":143306,"language":126529,"meta":10,"style":10},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[88,143308,143309,143314],{"__ignoreMap":10},[91,143310,143311],{"class":93,"line":94},[91,143312,143313],{"class":160},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[91,143315,143316,143319],{"class":93,"line":11},[91,143317,143318],{"class":51275},"background-size",[91,143320,143321],{"class":101},": 50% 50%;\n",[21977,143323,143325],{"id":143324},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1440,143327],{"style":126383,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[46,143330,143331,143334,143337,143340],{},[49,143332,143333],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[49,143335,143336],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[49,143338,143339],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[49,143341,143342],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21977,143344,143346],{"id":143345},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1440,143348],{"style":126383,"src":143349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5105,143351,143352],{},"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":10,"searchDepth":11,"depth":11,"links":143354},[143355,143356,143357],{"id":143168,"depth":11,"text":143169},{"id":143178,"depth":11,"text":143179},{"id":143191,"depth":11,"text":143192,"children":143358},[143359,143360,143361,143362,143363],{"id":143198,"depth":1157,"text":143199},{"id":143205,"depth":1157,"text":143206},{"id":143212,"depth":1157,"text":143213},{"id":143230,"depth":1157,"text":143231},{"id":143282,"depth":1157,"text":143283},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143160,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143370,"title":143371,"body":143372,"description":13,"extension":14,"meta":144249,"navigation":17,"path":144250,"seo":144251,"stem":144252,"__hash__":144253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143373,"toc":144233},[143374,143377,143381,143388,143391,143398,143401,143406,143409,143413,143417,143424,143427,143430,143434,143437,143440,143443,143446,143449,143453,143456,143460,143462,143465,143468,143471,143474,143476,143479,143481,143511,143513,143543,143547,143550,143554,143557,143574,143577,143580,143656,143658,143661,143664,143667,143670,143672,143675,143678,143682,143704,143707,143710,143714,143717,143723,143726,143730,143733,143736,143740,143743,143746,143749,143753,143756,143759,143762,143765,143769,143772,143776,143783,143786,143789,143792,143795,143805,143808,143811,143818,143821,143825,143828,143831,143835,143838,143841,143844,143889,143892,143895,143898,143900,144029,144031,144069,144072,144075,144077,144195,144197,144231],[29,143375,143371],{"id":143376},"_20-移动端布局实战上篇",[33,143378,143380],{"id":143379},"_201-移动端主流方案","20.1 移动端主流方案",[46,143382,143383],{},[49,143384,143385],{},[251,143386,143387],{},"单独移动端页面（主流）",[1440,143389],{"style":126383,"src":143390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[46,143392,143393],{"start":11},[49,143394,143395],{},[251,143396,143397],{},"响应式兼容PC移动端",[1440,143399],{"style":126383,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[46,143402,143403],{"start":1157},[49,143404,143405],{},"两种页面选型布局方式",[1440,143407],{"style":126383,"src":143408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[33,143410,143412],{"id":143411},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[63,143414,143416],{"id":143415},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[38,143418,143419,143420],{},"官网地址： ",[340,143421,143422],{"href":143422,"rel":143423},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23839],[1440,143425],{"style":126383,"src":143426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1440,143428],{"style":126383,"src":143429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[63,143431,143433],{"id":143432},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1440,143435],{"style":126383,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1440,143438],{"style":126383,"src":143439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[38,143441,143442],{},"去除高亮：",[38,143444,143445],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[38,143447,143448],{},"-webkit- tap-highlight-color: transparent;",[33,143450,143452],{"id":143451},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1440,143454],{"style":126383,"src":143455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[33,143457,143459],{"id":143458},"_204-流式布局案例","20.4 流式布局案例",[38,143461,131],{},[38,143463,143464],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[38,143466,143467],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[38,143469,143470],{},"图片格式：",[1440,143472],{"style":126383,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[38,143475,135570],{},[1440,143477],{"style":126383,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[38,143480,139897],{},[83,143482,143483],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,143484,143485],{"__ignoreMap":10},[91,143486,143487,143489,143491,143493,143495,143497,143499,143501,143503,143505,143507,143509],{"class":93,"line":94},[91,143488,1012],{"class":101},[91,143490,1440],{"class":51275},[91,143492,55214],{"class":1941},[91,143494,147],{"class":101},[91,143496,134044],{"class":206},[91,143498,55222],{"class":1941},[91,143500,147],{"class":101},[91,143502,134051],{"class":206},[91,143504,134054],{"class":1941},[91,143506,147],{"class":101},[91,143508,134059],{"class":206},[91,143510,51282],{"class":101},[38,143512,139986],{},[83,143514,143515],{"className":127274,"code":134029,"language":127276,"meta":10,"style":10},[88,143516,143517],{"__ignoreMap":10},[91,143518,143519,143521,143523,143525,143527,143529,143531,143533,143535,143537,143539,143541],{"class":93,"line":94},[91,143520,1012],{"class":101},[91,143522,1440],{"class":51275},[91,143524,55214],{"class":1941},[91,143526,147],{"class":101},[91,143528,134044],{"class":206},[91,143530,55222],{"class":1941},[91,143532,147],{"class":101},[91,143534,134051],{"class":206},[91,143536,134054],{"class":1941},[91,143538,147],{"class":101},[91,143540,134059],{"class":206},[91,143542,51282],{"class":101},[33,143544,143546],{"id":143545},"_205-flex布局","20.5 flex布局",[1440,143548],{"style":126383,"src":143549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[63,143551,143553],{"id":143552},"_2051-布局原理","20.5.1 布局原理",[38,143555,143556],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1109,143558,143559,143562,143565,143568,143571],{},[49,143560,143561],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[49,143563,143564],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[49,143566,143567],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[49,143569,143570],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[49,143572,143573],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[38,143575,143576],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[38,143578,143579],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[83,143581,143583],{"className":126527,"code":143582,"language":126529,"meta":10,"style":10},"\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",[88,143584,143585,143590,143597,143607,143619,143630,143641,143652],{"__ignoreMap":10},[91,143586,143587],{"class":93,"line":94},[91,143588,143589],{"class":160},"\u002F* Flex 弹性布局 *\u002F\n",[91,143591,143592,143595],{"class":93,"line":11},[91,143593,143594],{"class":1941},".container",[91,143596,15551],{"class":101},[91,143598,143599,143601,143603,143605],{"class":93,"line":1157},[91,143600,128143],{"class":150},[91,143602,51412],{"class":101},[91,143604,51452],{"class":150},[91,143606,1268],{"class":101},[91,143608,143609,143612,143614,143617],{"class":93,"line":1172},[91,143610,143611],{"class":150},"  flex-direction",[91,143613,51412],{"class":101},[91,143615,143616],{"class":150},"row",[91,143618,1268],{"class":101},[91,143620,143621,143624,143626,143628],{"class":93,"line":1178},[91,143622,143623],{"class":150},"  justify-content",[91,143625,51412],{"class":101},[91,143627,51643],{"class":150},[91,143629,1268],{"class":101},[91,143631,143632,143635,143637,143639],{"class":93,"line":1192},[91,143633,143634],{"class":150},"  align-items",[91,143636,51412],{"class":101},[91,143638,51567],{"class":150},[91,143640,1268],{"class":101},[91,143642,143643,143646,143648,143650],{"class":93,"line":1198},[91,143644,143645],{"class":150},"  flex-wrap",[91,143647,51412],{"class":101},[91,143649,78585],{"class":150},[91,143651,1268],{"class":101},[91,143653,143654],{"class":93,"line":1289},[91,143655,1543],{"class":101},[38,143657,70428],{},[38,143659,143660],{},".form-item .male-label {",[38,143662,143663],{},"   margin-right: 20px;",[38,143665,143666],{},"   display: inline-flex;",[38,143668,143669],{},"   align-items: center;",[38,143671,1048],{},[1440,143673],{"style":126383,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1440,143676],{"style":126383,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[63,143679,143681],{"id":143680},"_2052-常见父项属性","20.5.2 常见父项属性",[46,143683,143684,143687,143690,143693,143696,143699,143702],{},[49,143685,143686],{},"flex-direction：设置主轴的方向",[49,143688,143689],{},"justify-content：设置主轴上的子元素排列方式",[49,143691,143692],{},"flex-wrap：设置子元素是否换行",[49,143694,143695],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[49,143697,143698],{},"align-items：设置侧轴上的子元素排列方式（单行）",[49,143700,143701],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[49,143703,143686],{},[1440,143705],{"style":126383,"src":143706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1440,143708],{"style":126383,"src":143709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[46,143711,143712],{"start":11},[49,143713,143689],{},[1440,143715],{"style":126383,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[38,143718,143719,143722],{},[88,143720,143721],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[38,143724,143725],{},"跟着主轴走",[46,143727,143728],{"start":1157},[49,143729,143692],{},[1440,143731],{"style":126383,"src":143732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[38,143734,143735],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[46,143737,143738],{"start":1172},[49,143739,143695],{},[1440,143741],{"style":126383,"src":143742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[38,143744,143745],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[38,143747,143748],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[46,143750,143751],{"start":1178},[49,143752,143698],{},[1440,143754],{"style":126383,"src":143755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[38,143757,143758],{},"align-items与align-content之间的区别：",[38,143760,143761],{},"单找items，多找content",[1440,143763],{"style":126383,"src":143764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[46,143766,143767],{"start":1192},[49,143768,143701],{},[1440,143770],{"style":126383,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[63,143773,143775],{"id":143774},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[46,143777,143778],{},[49,143779,143780],{},[251,143781,143782],{},"flex 属性",[38,143784,143785],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1440,143787],{"style":126383,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[38,143790,143791],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[38,143793,143794],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[46,143796,143797],{"start":11},[49,143798,143799,13774,143802],{},[251,143800,143801],{},"align-self",[251,143803,143804],{},"控制子项自己在侧轴上的排列方式",[1440,143806],{"style":126383,"src":143807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[38,143809,143810],{},"单个子盒子在父盒子侧轴上的排列方式",[46,143812,143813],{"start":1157},[49,143814,143815,143817],{},[251,143816,95272],{}," 属性定义项目的排列顺序",[1440,143819],{"style":126383,"src":143820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[63,143822,143824],{"id":143823},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1440,143826],{"style":126383,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[38,143829,143830],{},"必须要添加浏览器的私有前缀",[63,143832,143834],{"id":143833},"_2055-携程网首页案例","20.5.5 携程网首页案例",[38,143836,143837],{},"学到最重要的知识：",[38,143839,143840],{},"flex处理这样的布局思路",[1440,143842],{"style":126383,"src":143843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[83,143845,143847],{"className":126527,"code":143846,"language":126529,"meta":10,"style":10},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[88,143848,143849,143855,143865,143875,143885],{"__ignoreMap":10},[91,143850,143851,143853],{"class":93,"line":94},[91,143852,143594],{"class":1941},[91,143854,15551],{"class":101},[91,143856,143857,143859,143861,143863],{"class":93,"line":11},[91,143858,128143],{"class":150},[91,143860,51412],{"class":101},[91,143862,51452],{"class":150},[91,143864,1268],{"class":101},[91,143866,143867,143869,143871,143873],{"class":93,"line":1157},[91,143868,143623],{"class":150},[91,143870,51412],{"class":101},[91,143872,51567],{"class":150},[91,143874,1268],{"class":101},[91,143876,143877,143879,143881,143883],{"class":93,"line":1172},[91,143878,143634],{"class":150},[91,143880,51412],{"class":101},[91,143882,51567],{"class":150},[91,143884,1268],{"class":101},[91,143886,143887],{"class":93,"line":1178},[91,143888,1543],{"class":101},[38,143890,143891],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[38,143893,143894],{},"使用属性选择器",[1440,143896],{"style":126383,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[38,143899,68864],{},[83,143901,143903],{"className":127274,"code":143902,"language":127276,"meta":10,"style":10},"\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",[88,143904,143905,143910,143924,143929,143949,143954,143973,143978,143997,144002,144021],{"__ignoreMap":10},[91,143906,143907],{"class":93,"line":94},[91,143908,143909],{"class":160},"\u003C!-- 携程网移动端案例结构 -->\n",[91,143911,143912,143914,143916,143918,143920,143922],{"class":93,"line":11},[91,143913,1012],{"class":101},[91,143915,51586],{"class":51275},[91,143917,53461],{"class":1941},[91,143919,147],{"class":101},[91,143921,92298],{"class":206},[91,143923,51282],{"class":101},[91,143925,143926],{"class":93,"line":1157},[91,143927,143928],{"class":160},"  \u003C!-- 搜索栏 -->\n",[91,143930,143931,143933,143935,143937,143939,143942,143945,143947],{"class":93,"line":1172},[91,143932,52119],{"class":101},[91,143934,51586],{"class":51275},[91,143936,53461],{"class":1941},[91,143938,147],{"class":101},[91,143940,143941],{"class":206},"\"search-index\"",[91,143943,143944],{"class":101},">...\u003C\u002F",[91,143946,51586],{"class":51275},[91,143948,51282],{"class":101},[91,143950,143951],{"class":93,"line":1178},[91,143952,143953],{"class":160},"  \u003C!-- 焦点图 -->\n",[91,143955,143956,143958,143960,143962,143964,143967,143969,143971],{"class":93,"line":1192},[91,143957,52119],{"class":101},[91,143959,51586],{"class":51275},[91,143961,53461],{"class":1941},[91,143963,147],{"class":101},[91,143965,143966],{"class":206},"\"focus\"",[91,143968,143944],{"class":101},[91,143970,51586],{"class":51275},[91,143972,51282],{"class":101},[91,143974,143975],{"class":93,"line":1198},[91,143976,143977],{"class":160},"  \u003C!-- 主导航 -->\n",[91,143979,143980,143982,143984,143986,143988,143991,143993,143995],{"class":93,"line":1289},[91,143981,52119],{"class":101},[91,143983,51586],{"class":51275},[91,143985,53461],{"class":1941},[91,143987,147],{"class":101},[91,143989,143990],{"class":206},"\"local-nav\"",[91,143992,143944],{"class":101},[91,143994,51586],{"class":51275},[91,143996,51282],{"class":101},[91,143998,143999],{"class":93,"line":1295},[91,144000,144001],{"class":160},"  \u003C!-- 子导航 -->\n",[91,144003,144004,144006,144008,144010,144012,144015,144017,144019],{"class":93,"line":1307},[91,144005,52119],{"class":101},[91,144007,51586],{"class":51275},[91,144009,53461],{"class":1941},[91,144011,147],{"class":101},[91,144013,144014],{"class":206},"\"nav-common\"",[91,144016,143944],{"class":101},[91,144018,51586],{"class":51275},[91,144020,51282],{"class":101},[91,144022,144023,144025,144027],{"class":93,"line":1590},[91,144024,51760],{"class":101},[91,144026,51586],{"class":51275},[91,144028,51282],{"class":101},[38,144030,70428],{},[83,144032,144033],{"className":126527,"code":136979,"language":126529,"meta":10,"style":10},[88,144034,144035,144049,144065],{"__ignoreMap":10},[91,144036,144037,144039,144041,144043,144045,144047],{"class":93,"line":94},[91,144038,53796],{"class":51275},[91,144040,992],{"class":101},[91,144042,103082],{"class":1941},[91,144044,147],{"class":97},[91,144046,62674],{"class":206},[91,144048,136996],{"class":101},[91,144050,144051,144053,144055,144057,144059,144061,144063],{"class":93,"line":11},[91,144052,70871],{"class":150},[91,144054,51412],{"class":101},[91,144056,319],{"class":150},[91,144058,51467],{"class":97},[91,144060,51496],{"class":150},[91,144062,130107],{"class":150},[91,144064,1268],{"class":101},[91,144066,144067],{"class":93,"line":1157},[91,144068,1543],{"class":101},[38,144070,144071],{},"总代码和效果展示：",[1440,144073],{"style":126383,"src":144074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[38,144076,68864],{},[83,144078,144079],{"className":127274,"code":143902,"language":127276,"meta":10,"style":10},[88,144080,144081,144085,144099,144103,144121,144125,144143,144147,144165,144169,144187],{"__ignoreMap":10},[91,144082,144083],{"class":93,"line":94},[91,144084,143909],{"class":160},[91,144086,144087,144089,144091,144093,144095,144097],{"class":93,"line":11},[91,144088,1012],{"class":101},[91,144090,51586],{"class":51275},[91,144092,53461],{"class":1941},[91,144094,147],{"class":101},[91,144096,92298],{"class":206},[91,144098,51282],{"class":101},[91,144100,144101],{"class":93,"line":1157},[91,144102,143928],{"class":160},[91,144104,144105,144107,144109,144111,144113,144115,144117,144119],{"class":93,"line":1172},[91,144106,52119],{"class":101},[91,144108,51586],{"class":51275},[91,144110,53461],{"class":1941},[91,144112,147],{"class":101},[91,144114,143941],{"class":206},[91,144116,143944],{"class":101},[91,144118,51586],{"class":51275},[91,144120,51282],{"class":101},[91,144122,144123],{"class":93,"line":1178},[91,144124,143953],{"class":160},[91,144126,144127,144129,144131,144133,144135,144137,144139,144141],{"class":93,"line":1192},[91,144128,52119],{"class":101},[91,144130,51586],{"class":51275},[91,144132,53461],{"class":1941},[91,144134,147],{"class":101},[91,144136,143966],{"class":206},[91,144138,143944],{"class":101},[91,144140,51586],{"class":51275},[91,144142,51282],{"class":101},[91,144144,144145],{"class":93,"line":1198},[91,144146,143977],{"class":160},[91,144148,144149,144151,144153,144155,144157,144159,144161,144163],{"class":93,"line":1289},[91,144150,52119],{"class":101},[91,144152,51586],{"class":51275},[91,144154,53461],{"class":1941},[91,144156,147],{"class":101},[91,144158,143990],{"class":206},[91,144160,143944],{"class":101},[91,144162,51586],{"class":51275},[91,144164,51282],{"class":101},[91,144166,144167],{"class":93,"line":1295},[91,144168,144001],{"class":160},[91,144170,144171,144173,144175,144177,144179,144181,144183,144185],{"class":93,"line":1307},[91,144172,52119],{"class":101},[91,144174,51586],{"class":51275},[91,144176,53461],{"class":1941},[91,144178,147],{"class":101},[91,144180,144014],{"class":206},[91,144182,143944],{"class":101},[91,144184,51586],{"class":51275},[91,144186,51282],{"class":101},[91,144188,144189,144191,144193],{"class":93,"line":1590},[91,144190,51760],{"class":101},[91,144192,51586],{"class":51275},[91,144194,51282],{"class":101},[38,144196,70428],{},[83,144198,144199],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,144200,144201,144205,144219,144223],{"__ignoreMap":10},[91,144202,144203],{"class":93,"line":94},[91,144204,130638],{"class":160},[91,144206,144207,144209,144211,144213,144215,144217],{"class":93,"line":11},[91,144208,1012],{"class":101},[91,144210,51586],{"class":51275},[91,144212,53461],{"class":1941},[91,144214,147],{"class":101},[91,144216,130651],{"class":206},[91,144218,51282],{"class":101},[91,144220,144221],{"class":93,"line":1157},[91,144222,130658],{"class":101},[91,144224,144225,144227,144229],{"class":93,"line":1172},[91,144226,51760],{"class":101},[91,144228,51586],{"class":51275},[91,144230,51282],{"class":101},[5105,144232,137928],{},{"title":10,"searchDepth":11,"depth":11,"links":144234},[144235,144236,144240,144241,144242],{"id":143379,"depth":11,"text":143380},{"id":143411,"depth":11,"text":143412,"children":144237},[144238,144239],{"id":143415,"depth":1157,"text":143416},{"id":143432,"depth":1157,"text":143433},{"id":143451,"depth":11,"text":143452},{"id":143458,"depth":11,"text":143459},{"id":143545,"depth":11,"text":143546,"children":144243},[144244,144245,144246,144247,144248],{"id":143552,"depth":1157,"text":143553},{"id":143680,"depth":1157,"text":143681},{"id":143774,"depth":1157,"text":143775},{"id":143823,"depth":1157,"text":143824},{"id":143833,"depth":1157,"text":143834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143371,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144255,"title":144256,"body":144257,"description":13,"extension":14,"meta":145484,"navigation":17,"path":145485,"seo":145486,"stem":145487,"__hash__":145488},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144258,"toc":145462},[144259,144262,144266,144270,144273,144276,144280,144285,144288,144291,144294,144297,144300,144357,144360,144365,144368,144371,144375,144386,144390,144393,144396,144403,144408,144412,144415,144421,144424,144428,144431,144438,144441,144444,144451,144454,144461,144464,144467,144474,144477,144480,144482,144499,144503,144506,144509,144512,144516,144519,144522,144525,144528,144531,144534,144536,144539,144542,144604,144607,144717,144724,144730,144733,144736,144740,144743,144747,144752,144755,144762,144765,144771,144776,144779,144782,144785,144788,144791,144794,144797,144800,144856,144858,144884,144888,144891,144894,144897,144905,144908,144911,144915,144971,144974,144978,144984,144995,144998,145003,145006,145009,145015,145018,145021,145024,145027,145030,145033,145036,145039,145064,145070,145073,145076,145079,145082,145085,145088,145093,145096,145099,145102,145110,145113,145120,145123,145126,145128,145152,145154,145157,145160,145163,145166,145169,145172,145175,145209,145212,145215,145249,145256,145259,145262,145265,145268,145271,145274,145281,145284,145287,145290,145293,145300,145303,145306,145313,145316,145319,145323,145326,145329,145332,145335,145338,145341,145344,145347,145349,145373,145375,145399,145403,145414,145417,145420,145423,145426,145429,145432,145435,145438,145441,145444,145447,145450,145453,145456,145459],[29,144260,144256],{"id":144261},"_21-移动端布局实战下篇",[33,144263,144265],{"id":144264},"_211-rem适配布局","21.1 rem适配布局",[63,144267,144269],{"id":144268},"_2111-rem单位","21.1.1 rem单位",[1440,144271],{"style":126383,"src":144272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[38,144274,144275],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[63,144277,144279],{"id":144278},"_2112-媒体查询","21.1.2 媒体查询",[46,144281,144282],{},[49,144283,144284],{},"参数介绍",[1440,144286],{"style":126383,"src":144287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1440,144289],{"style":126383,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1440,144292],{"style":126383,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1440,144295],{"style":126383,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1440,144298],{"style":126383,"src":144299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[83,144301,144303],{"className":126527,"code":144302,"language":126529,"meta":10,"style":10},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[88,144304,144305,144310,144329,144336,144349,144353],{"__ignoreMap":10},[91,144306,144307],{"class":93,"line":94},[91,144308,144309],{"class":160},"\u002F* 媒体查询 *\u002F\n",[91,144311,144312,144315,144317,144320,144322,144325,144327],{"class":93,"line":11},[91,144313,144314],{"class":97},"@media",[91,144316,1636],{"class":101},[91,144318,144319],{"class":150},"max-width",[91,144321,51412],{"class":101},[91,144323,144324],{"class":150},"768",[91,144326,51467],{"class":97},[91,144328,12421],{"class":101},[91,144330,144331,144334],{"class":93,"line":1157},[91,144332,144333],{"class":1941},"  .container",[91,144335,15551],{"class":101},[91,144337,144338,144341,144343,144345,144347],{"class":93,"line":1172},[91,144339,144340],{"class":150},"    width",[91,144342,51412],{"class":101},[91,144344,413],{"class":150},[91,144346,430],{"class":97},[91,144348,1268],{"class":101},[91,144350,144351],{"class":93,"line":1178},[91,144352,127323],{"class":101},[91,144354,144355],{"class":93,"line":1192},[91,144356,1543],{"class":101},[38,144358,144359],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[46,144361,144362],{"start":11},[49,144363,144364],{},"引入资源",[1440,144366],{"style":126383,"src":144367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[38,144369,144370],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[63,144372,144374],{"id":144373},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1109,144376,144377,144380,144383],{},[49,144378,144379],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[49,144381,144382],{},"媒体查询可以根据不同设备宽度来修改样式",[49,144384,144385],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[33,144387,144389],{"id":144388},"_212-less基础","21.2 Less基础",[38,144391,144392],{},"css冗余度较高，不利于复用，没有很好的计算能力",[38,144394,144395],{},"Less可以解决该问题，它是css的扩展语言",[38,144397,144398,144399],{},"Less中文网址： ",[340,144400,144401],{"href":144401,"rel":144402},"http:\u002F\u002Flesscss.cn\u002F",[23839],[38,144404,144405],{},[251,144406,144407],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[63,144409,144411],{"id":144410},"_2121-less安装","21.2.1 less安装",[38,144413,144414],{},"如果使用vscode，则无需进行下方安装步骤",[38,144416,144417],{},[340,144418,144419],{"href":144419,"rel":144420},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23839],[1440,144422],{"style":126383,"src":144423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[63,144425,144427],{"id":144426},"_2122-less使用","21.2.2 less使用",[38,144429,144430],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[46,144432,144433],{},[49,144434,144435],{},[251,144436,144437],{},"Less 变量",[1440,144439],{"style":126383,"src":144440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1440,144442],{"style":126383,"src":144443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[46,144445,144446],{"start":11},[49,144447,144448],{},[251,144449,144450],{},"Less 编译",[1440,144452],{"style":126383,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[46,144455,144456],{"start":1157},[49,144457,144458],{},[251,144459,144460],{},"Less 嵌套",[1440,144462],{"style":126383,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1440,144465],{"style":126383,"src":144466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[46,144468,144469],{"start":1172},[49,144470,144471],{},[251,144472,144473],{},"Less 运算",[1440,144475],{"style":126383,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[38,144478,144479],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[38,144481,131],{},[1109,144483,144484,144487,144490,144493,144496],{},[49,144485,144486],{},"乘号（*）和除号（\u002F）的写法",[49,144488,144489],{},"运算符中间左右有个空格隔开 1px + 5",[49,144491,144492],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[49,144494,144495],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[49,144497,144498],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[33,144500,144502],{"id":144501},"_213-rem-适配方案","21.3 rem 适配方案",[38,144504,144505],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[38,144507,144508],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1440,144510],{"style":126383,"src":144511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[63,144513,144515],{"id":144514},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[38,144517,144518],{},"rem + 媒体查询 + less 技术",[1440,144520],{"style":126383,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[38,144523,144524],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[38,144526,144527],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1440,144529],{"style":126383,"src":144530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[38,144532,144533],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[38,144535,14612],{},[1440,144537],{"style":126383,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[38,144540,144541],{},"index.html:",[83,144543,144545],{"className":126527,"code":144544,"language":126529,"meta":10,"style":10},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[88,144546,144547,144552,144558,144574,144578,144584,144600],{"__ignoreMap":10},[91,144548,144549],{"class":93,"line":94},[91,144550,144551],{"class":160},"\u002F* rem 适配方案 *\u002F\n",[91,144553,144554,144556],{"class":93,"line":11},[91,144555,50610],{"class":51275},[91,144557,15551],{"class":101},[91,144559,144560,144562,144564,144567,144569,144571],{"class":93,"line":1157},[91,144561,70601],{"class":150},[91,144563,51412],{"class":101},[91,144565,144566],{"class":150},"62.5",[91,144568,430],{"class":97},[91,144570,130390],{"class":101},[91,144572,144573],{"class":160},"\u002F* 1rem = 10px *\u002F\n",[91,144575,144576],{"class":93,"line":1172},[91,144577,1543],{"class":101},[91,144579,144580,144582],{"class":93,"line":1178},[91,144581,130375],{"class":1941},[91,144583,15551],{"class":101},[91,144585,144586,144588,144590,144592,144595,144597],{"class":93,"line":1192},[91,144587,70543],{"class":150},[91,144589,51412],{"class":101},[91,144591,548],{"class":150},[91,144593,144594],{"class":97},"rem",[91,144596,130390],{"class":101},[91,144598,144599],{"class":160},"\u002F* 100px *\u002F\n",[91,144601,144602],{"class":93,"line":1198},[91,144603,1543],{"class":101},[38,144605,144606],{},"common.less",[83,144608,144610],{"className":126527,"code":144609,"language":126529,"meta":10,"style":10},"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",[88,144611,144612,144618,144633,144637,144643,144657,144661,144665,144669,144675,144689,144693,144699,144713],{"__ignoreMap":10},[91,144613,144614,144616],{"class":93,"line":94},[91,144615,50610],{"class":51275},[91,144617,15551],{"class":101},[91,144619,144620,144622,144624,144626,144628,144630],{"class":93,"line":11},[91,144621,70601],{"class":150},[91,144623,51412],{"class":101},[91,144625,144566],{"class":150},[91,144627,430],{"class":97},[91,144629,26042],{"class":101},[91,144631,144632],{"class":160},"\u002F* 10px *\u002F\n",[91,144634,144635],{"class":93,"line":1157},[91,144636,1543],{"class":101},[91,144638,144639,144641],{"class":93,"line":1172},[91,144640,51586],{"class":51275},[91,144642,15551],{"class":101},[91,144644,144645,144647,144649,144651,144653,144655],{"class":93,"line":1178},[91,144646,70543],{"class":150},[91,144648,51412],{"class":101},[91,144650,548],{"class":150},[91,144652,144594],{"class":97},[91,144654,26042],{"class":101},[91,144656,144599],{"class":160},[91,144658,144659],{"class":93,"line":1192},[91,144660,1543],{"class":101},[91,144662,144663],{"class":93,"line":1198},[91,144664,135988],{"class":101},[91,144666,144667],{"class":93,"line":1289},[91,144668,144551],{"class":160},[91,144670,144671,144673],{"class":93,"line":1295},[91,144672,50610],{"class":51275},[91,144674,15551],{"class":101},[91,144676,144677,144679,144681,144683,144685,144687],{"class":93,"line":1307},[91,144678,70601],{"class":150},[91,144680,51412],{"class":101},[91,144682,144566],{"class":150},[91,144684,430],{"class":97},[91,144686,130390],{"class":101},[91,144688,144573],{"class":160},[91,144690,144691],{"class":93,"line":1590},[91,144692,1543],{"class":101},[91,144694,144695,144697],{"class":93,"line":1595},[91,144696,130375],{"class":1941},[91,144698,15551],{"class":101},[91,144700,144701,144703,144705,144707,144709,144711],{"class":93,"line":1601},[91,144702,70543],{"class":150},[91,144704,51412],{"class":101},[91,144706,548],{"class":150},[91,144708,144594],{"class":97},[91,144710,130390],{"class":101},[91,144712,144599],{"class":160},[91,144714,144715],{"class":93,"line":1606},[91,144716,1543],{"class":101},[38,144718,144719,144720,144723],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23527,144721,144722],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[83,144725,144728],{"className":144726,"code":144727,"language":5166},[5164],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[88,144729,144727],{"__ignoreMap":10},[38,144731,144732],{},"less保存时会自动变成.css文件",[38,144734,144735],{},"好好搞懂上述代码写法",[63,144737,144739],{"id":144738},"_2132-样式导入样式","21.3.2 样式导入样式",[1440,144741],{"style":126383,"src":144742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[63,144744,144746],{"id":144745},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[46,144748,144749],{},[49,144750,144751],{},"准备工作",[1440,144753],{"style":126383,"src":144754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[38,144756,144757,144758],{},"github地址：",[340,144759,144760],{"href":144760,"rel":144761},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23839],[38,144763,144764],{},"下载之后，将index.js文件拖到项目中就可以了",[38,144766,144767,144768],{},"js文件引入到index.html中使用的是",[88,144769,144770],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[46,144772,144773],{"start":11},[49,144774,144775],{},"vscode插件",[1440,144777],{"style":126383,"src":144778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[38,144780,144781],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[38,144783,144784],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1440,144786],{"style":126383,"src":144787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[38,144789,144790],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1440,144792],{"style":126383,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[38,144795,144796],{},"修改成75就可以，alt+z为快捷键",[38,144798,144799],{},"index.css：",[83,144801,144802],{"className":126527,"code":144544,"language":126529,"meta":10,"style":10},[88,144803,144804,144808,144814,144828,144832,144838,144852],{"__ignoreMap":10},[91,144805,144806],{"class":93,"line":94},[91,144807,144551],{"class":160},[91,144809,144810,144812],{"class":93,"line":11},[91,144811,50610],{"class":51275},[91,144813,15551],{"class":101},[91,144815,144816,144818,144820,144822,144824,144826],{"class":93,"line":1157},[91,144817,70601],{"class":150},[91,144819,51412],{"class":101},[91,144821,144566],{"class":150},[91,144823,430],{"class":97},[91,144825,130390],{"class":101},[91,144827,144573],{"class":160},[91,144829,144830],{"class":93,"line":1172},[91,144831,1543],{"class":101},[91,144833,144834,144836],{"class":93,"line":1178},[91,144835,130375],{"class":1941},[91,144837,15551],{"class":101},[91,144839,144840,144842,144844,144846,144848,144850],{"class":93,"line":1192},[91,144841,70543],{"class":150},[91,144843,51412],{"class":101},[91,144845,548],{"class":150},[91,144847,144594],{"class":97},[91,144849,130390],{"class":101},[91,144851,144599],{"class":160},[91,144853,144854],{"class":93,"line":1198},[91,144855,1543],{"class":101},[38,144857,144541],{},[83,144859,144860],{"className":126527,"code":126931,"language":126529,"meta":10,"style":10},[88,144861,144862,144868,144880],{"__ignoreMap":10},[91,144863,144864,144866],{"class":93,"line":94},[91,144865,51775],{"class":51275},[91,144867,15551],{"class":101},[91,144869,144870,144872,144874,144876,144878],{"class":93,"line":11},[91,144871,70601],{"class":150},[91,144873,51412],{"class":101},[91,144875,703],{"class":150},[91,144877,51467],{"class":97},[91,144879,1268],{"class":101},[91,144881,144882],{"class":93,"line":1157},[91,144883,1543],{"class":101},[33,144885,144887],{"id":144886},"_214-响应式开发","21.4 响应式开发",[38,144889,144890],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1440,144892],{"style":126383,"src":144893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[38,144895,144896],{},"做法：",[1109,144898,144899,144902],{},[49,144900,144901],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[49,144903,144904],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1440,144906],{"style":126383,"src":144907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[38,144909,144910],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[63,144912,144914],{"id":144913},"_2141-简单代码示范","21.4.1 简单代码示范",[83,144916,144917],{"className":126527,"code":144544,"language":126529,"meta":10,"style":10},[88,144918,144919,144923,144929,144943,144947,144953,144967],{"__ignoreMap":10},[91,144920,144921],{"class":93,"line":94},[91,144922,144551],{"class":160},[91,144924,144925,144927],{"class":93,"line":11},[91,144926,50610],{"class":51275},[91,144928,15551],{"class":101},[91,144930,144931,144933,144935,144937,144939,144941],{"class":93,"line":1157},[91,144932,70601],{"class":150},[91,144934,51412],{"class":101},[91,144936,144566],{"class":150},[91,144938,430],{"class":97},[91,144940,130390],{"class":101},[91,144942,144573],{"class":160},[91,144944,144945],{"class":93,"line":1172},[91,144946,1543],{"class":101},[91,144948,144949,144951],{"class":93,"line":1178},[91,144950,130375],{"class":1941},[91,144952,15551],{"class":101},[91,144954,144955,144957,144959,144961,144963,144965],{"class":93,"line":1192},[91,144956,70543],{"class":150},[91,144958,51412],{"class":101},[91,144960,548],{"class":150},[91,144962,144594],{"class":97},[91,144964,130390],{"class":101},[91,144966,144599],{"class":160},[91,144968,144969],{"class":93,"line":1198},[91,144970,1543],{"class":101},[38,144972,144973],{},"父盒子一般命名为container",[63,144975,144977],{"id":144976},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[38,144979,144980,144981],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[251,144982,144983],{},"使得 Web 开发更加快捷",[1109,144985,144986],{},[49,144987,144988,144989],{},"官网：",[251,144990,144991],{},[340,144992,144993],{"href":144993,"rel":144994},"http:\u002F\u002Fgetbootstrap.com\u002F",[23839],[38,144996,144997],{},"可以直接去官网拿现成的东西",[46,144999,145000],{},[49,145001,145002],{},"Bootstrap的使用",[38,145004,145005],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[38,145007,145008],{},"Bootstrap 使用四步曲：",[38,145010,145011,145014],{},[251,145012,145013],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1440,145016],{"style":126383,"src":145017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[38,145019,145020],{},"打开Bootstrap官网，然后下载",[1440,145022],{"style":126383,"src":145023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1440,145025],{"style":126383,"src":145026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[38,145028,145029],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[38,145031,145032],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[38,145034,145035],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1440,145037],{"style":126383,"src":145038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[83,145040,145042],{"className":126527,"code":145041,"language":126529,"meta":10,"style":10},".center {\n  color: red;\n}\n",[88,145043,145044,145050,145060],{"__ignoreMap":10},[91,145045,145046,145048],{"class":93,"line":94},[91,145047,126818],{"class":1941},[91,145049,15551],{"class":101},[91,145051,145052,145054,145056,145058],{"class":93,"line":11},[91,145053,70880],{"class":150},[91,145055,51412],{"class":101},[91,145057,57396],{"class":150},[91,145059,1268],{"class":101},[91,145061,145062],{"class":93,"line":1157},[91,145063,1543],{"class":101},[38,145065,145066,145069],{},[88,145067,145068],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1440,145071],{"style":126383,"src":145072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1440,145074],{"style":126383,"src":145075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1440,145077],{"style":126383,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[38,145080,145081],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1440,145083],{"style":126383,"src":145084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[38,145086,145087],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[46,145089,145090],{"start":11},[49,145091,145092],{},"布局容器",[1440,145094],{"style":126383,"src":145095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[38,145097,145098],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[38,145100,145101],{},"container-fluid用于移动式布局比较方便",[46,145103,145104],{"start":1157},[49,145105,145106,145107],{},"bootstrap ",[251,145108,145109],{},"栅格系统原理",[1440,145111],{"style":126383,"src":145112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[46,145114,145115],{"start":1172},[49,145116,145117],{},[251,145118,145119],{},"栅格选项参数",[1440,145121],{"style":126383,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[38,145124,145125],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[38,145127,14612],{},[83,145129,145130],{"className":126527,"code":145041,"language":126529,"meta":10,"style":10},[88,145131,145132,145138,145148],{"__ignoreMap":10},[91,145133,145134,145136],{"class":93,"line":94},[91,145135,126818],{"class":1941},[91,145137,15551],{"class":101},[91,145139,145140,145142,145144,145146],{"class":93,"line":11},[91,145141,70880],{"class":150},[91,145143,51412],{"class":101},[91,145145,57396],{"class":150},[91,145147,1268],{"class":101},[91,145149,145150],{"class":93,"line":1157},[91,145151,1543],{"class":101},[38,145153,135570],{},[1440,145155],{"style":126383,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[38,145158,145159],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[38,145161,145162],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[38,145164,145165],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[38,145167,145168],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[38,145170,145171],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[38,145173,145174],{},"汇总展示说明：",[83,145176,145177],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,145178,145179,145183,145197,145201],{"__ignoreMap":10},[91,145180,145181],{"class":93,"line":94},[91,145182,130638],{"class":160},[91,145184,145185,145187,145189,145191,145193,145195],{"class":93,"line":11},[91,145186,1012],{"class":101},[91,145188,51586],{"class":51275},[91,145190,53461],{"class":1941},[91,145192,147],{"class":101},[91,145194,130651],{"class":206},[91,145196,51282],{"class":101},[91,145198,145199],{"class":93,"line":1157},[91,145200,130658],{"class":101},[91,145202,145203,145205,145207],{"class":93,"line":1172},[91,145204,51760],{"class":101},[91,145206,51586],{"class":51275},[91,145208,51282],{"class":101},[1440,145210],{"style":126383,"src":145211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[38,145213,145214],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[83,145216,145217],{"className":127274,"code":130631,"language":127276,"meta":10,"style":10},[88,145218,145219,145223,145237,145241],{"__ignoreMap":10},[91,145220,145221],{"class":93,"line":94},[91,145222,130638],{"class":160},[91,145224,145225,145227,145229,145231,145233,145235],{"class":93,"line":11},[91,145226,1012],{"class":101},[91,145228,51586],{"class":51275},[91,145230,53461],{"class":1941},[91,145232,147],{"class":101},[91,145234,130651],{"class":206},[91,145236,51282],{"class":101},[91,145238,145239],{"class":93,"line":1157},[91,145240,130658],{"class":101},[91,145242,145243,145245,145247],{"class":93,"line":1172},[91,145244,51760],{"class":101},[91,145246,51586],{"class":51275},[91,145248,51282],{"class":101},[46,145250,145251],{"start":1178},[49,145252,145253],{},[251,145254,145255],{},"列嵌套",[1440,145257],{"style":126383,"src":145258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[38,145260,145261],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[38,145263,145264],{},"没加row内部这样：",[1440,145266],{"style":126383,"src":145267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[38,145269,145270],{},"加上row之后内部为：",[1440,145272],{"style":126383,"src":145273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[46,145275,145276],{"start":1192},[49,145277,145278],{},[251,145279,145280],{},"列偏移",[1440,145282],{"style":126383,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[38,145285,145286],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[38,145288,145289],{},"要加偏移量，即偏移份数",[38,145291,145292],{},"偏移的份数=12-两个盒子的份数",[46,145294,145295],{"start":1198},[49,145296,145297],{},[251,145298,145299],{},"列排序",[1440,145301],{"style":126383,"src":145302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[38,145304,145305],{},"pull拉左；push推右",[46,145307,145308],{"start":1289},[49,145309,145310],{},[251,145311,145312],{},"响应式工具",[1440,145314],{"style":126383,"src":145315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[38,145317,145318],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[63,145320,145322],{"id":145321},"_2143-响应式小项目","21.4.3 响应式小项目",[38,145324,145325],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[38,145327,145328],{},"ul {",[38,145330,145331],{},"list-style: none;",[38,145333,145334],{},"margin:0;",[38,145336,145337],{},"padding:0; }",[1440,145339],{"style":126383,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1440,145342],{"style":126383,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[38,145345,145346],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[38,145348,68864],{},[83,145350,145351],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,145352,145353,145359,145369],{"__ignoreMap":10},[91,145354,145355,145357],{"class":93,"line":94},[91,145356,130375],{"class":1941},[91,145358,15551],{"class":101},[91,145360,145361,145363,145365,145367],{"class":93,"line":11},[91,145362,131007],{"class":150},[91,145364,51412],{"class":101},[91,145366,23710],{"class":150},[91,145368,1268],{"class":101},[91,145370,145371],{"class":93,"line":1157},[91,145372,1543],{"class":101},[38,145374,70428],{},[83,145376,145377],{"className":126527,"code":139197,"language":126529,"meta":10,"style":10},[88,145378,145379,145385,145395],{"__ignoreMap":10},[91,145380,145381,145383],{"class":93,"line":94},[91,145382,130375],{"class":1941},[91,145384,15551],{"class":101},[91,145386,145387,145389,145391,145393],{"class":93,"line":11},[91,145388,131007],{"class":150},[91,145390,51412],{"class":101},[91,145392,23710],{"class":150},[91,145394,1268],{"class":101},[91,145396,145397],{"class":93,"line":1157},[91,145398,1543],{"class":101},[33,145400,145402],{"id":145401},"_215-swiper-插件使用","21.5 swiper 插件使用",[1109,145404,145405,145408,145411],{},[49,145406,145407],{},"下载需要的css和js文件html页面中 引入相关文件",[49,145409,145410],{},"官网找到类似案例，复制html结构，css样式 js 语法",[49,145412,145413],{},"根据需求定制修改模块",[1440,145415],{"style":126383,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[38,145418,145419],{},"解压后将这两部分放到项目中",[1440,145421],{"style":126383,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[38,145424,145425],{},"这个插件可以帮助我们实现轮播图效果",[38,145427,145428],{},"用法：",[1440,145430],{"style":126383,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[38,145433,145434],{},"找到自己喜欢的",[1440,145436],{"style":126383,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[38,145439,145440],{},"右键，查看网页源代码",[1440,145442],{"style":126383,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[38,145445,145446],{},"复制人家的结构内容",[38,145448,145449],{},"然后去看API文档：",[1440,145451],{"style":126383,"src":145452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[38,145454,145455],{},"可以看看如何修改样式",[38,145457,145458],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5105,145460,145461],{},"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":10,"searchDepth":11,"depth":11,"links":145463},[145464,145469,145473,145478,145483],{"id":144264,"depth":11,"text":144265,"children":145465},[145466,145467,145468],{"id":144268,"depth":1157,"text":144269},{"id":144278,"depth":1157,"text":144279},{"id":144373,"depth":1157,"text":144374},{"id":144388,"depth":11,"text":144389,"children":145470},[145471,145472],{"id":144410,"depth":1157,"text":144411},{"id":144426,"depth":1157,"text":144427},{"id":144501,"depth":11,"text":144502,"children":145474},[145475,145476,145477],{"id":144514,"depth":1157,"text":144515},{"id":144738,"depth":1157,"text":144739},{"id":144745,"depth":1157,"text":144746},{"id":144886,"depth":11,"text":144887,"children":145479},[145480,145481,145482],{"id":144913,"depth":1157,"text":144914},{"id":144976,"depth":1157,"text":144977},{"id":145321,"depth":1157,"text":145322},{"id":145401,"depth":11,"text":145402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144256,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145490,"title":145491,"body":145492,"description":13,"extension":14,"meta":145712,"navigation":17,"path":145713,"seo":145714,"stem":145715,"__hash__":145716},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145493,"toc":145708},[145494,145497,145501,145504,145519,145524,145527,145532,145567,145572,145584,145589,145602,145607,145624,145629,145649,145654,145672,145675,145678,145681,145684,145688,145691,145694,145697,145700,145703,145706],[29,145495,145491],{"id":145496},"_22-代码提交与新型相对单位",[33,145498,145500],{"id":145499},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[38,145502,145503],{},"法1：",[46,145505,145506,145513,145516],{},[49,145507,145508,145509],{},"登录网站注册：",[340,145510,145511],{"href":145511,"rel":145512},"https:\u002F\u002Fgitee.com\u002F",[23839],[49,145514,145515],{},"码云创建新的仓库",[49,145517,145518],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1109,145520,145521],{},[49,145522,145523],{},"在网站根目录右键-- Git Bash Here",[1440,145525],{"style":126383,"src":145526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1109,145528,145529],{},[49,145530,145531],{},"如果是第一次利用git提交，请配置好全局选项",[83,145533,145535],{"className":117271,"code":145534,"language":117273,"meta":10,"style":10},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[88,145536,145537,145553],{"__ignoreMap":10},[91,145538,145539,145542,145544,145547,145550],{"class":93,"line":94},[91,145540,145541],{"class":1941},"git",[91,145543,119694],{"class":206},[91,145545,145546],{"class":150}," --global",[91,145548,145549],{"class":206}," user.name",[91,145551,145552],{"class":206}," \"你的名字\"\n",[91,145554,145555,145557,145559,145561,145564],{"class":93,"line":11},[91,145556,145541],{"class":1941},[91,145558,119694],{"class":206},[91,145560,145546],{"class":150},[91,145562,145563],{"class":206}," user.email",[91,145565,145566],{"class":206}," \"你的邮箱\"\n",[1109,145568,145569],{},[49,145570,145571],{},"初始化仓库",[83,145573,145575],{"className":117271,"code":145574,"language":117273,"meta":10,"style":10},"git init\n",[88,145576,145577],{"__ignoreMap":10},[91,145578,145579,145581],{"class":93,"line":94},[91,145580,145541],{"class":1941},[91,145582,145583],{"class":206}," init\n",[1109,145585,145586],{},[49,145587,145588],{},"把本地文件放到暂存区",[83,145590,145592],{"className":117271,"code":145591,"language":117273,"meta":10,"style":10},"git add .\n",[88,145593,145594],{"__ignoreMap":10},[91,145595,145596,145598,145600],{"class":93,"line":94},[91,145597,145541],{"class":1941},[91,145599,5188],{"class":206},[91,145601,28716],{"class":206},[1109,145603,145604],{},[49,145605,145606],{},"把本地文件放到本地仓库里面",[83,145608,145610],{"className":117271,"code":145609,"language":117273,"meta":10,"style":10},"git commit -m \"first commit\"\n",[88,145611,145612],{"__ignoreMap":10},[91,145613,145614,145616,145619,145621],{"class":93,"line":94},[91,145615,145541],{"class":1941},[91,145617,145618],{"class":206}," commit",[91,145620,100857],{"class":150},[91,145622,145623],{"class":206}," \"first commit\"\n",[1109,145625,145626],{},[49,145627,145628],{},"链接远程仓库",[83,145630,145632],{"className":117271,"code":145631,"language":117273,"meta":10,"style":10},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[88,145633,145634],{"__ignoreMap":10},[91,145635,145636,145638,145641,145643,145646],{"class":93,"line":94},[91,145637,145541],{"class":1941},[91,145639,145640],{"class":206}," remote",[91,145642,5188],{"class":206},[91,145644,145645],{"class":206}," origin",[91,145647,145648],{"class":206}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1109,145650,145651],{},[49,145652,145653],{},"把本地仓库的文件推送到远程仓库 push",[83,145655,145657],{"className":117271,"code":145656,"language":117273,"meta":10,"style":10},"git push -u origin master\n",[88,145658,145659],{"__ignoreMap":10},[91,145660,145661,145663,145665,145667,145669],{"class":93,"line":94},[91,145662,145541],{"class":1941},[91,145664,28991],{"class":206},[91,145666,28265],{"class":150},[91,145668,145645],{"class":206},[91,145670,145671],{"class":206}," master\n",[1440,145673],{"style":126383,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[38,145676,145677],{},"上方方法暂未实现，后边学完git后在整",[38,145679,145680],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1440,145682],{"style":126383,"src":145683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[33,145685,145687],{"id":145686},"_222-新型相对单位","22.2 新型相对单位",[1440,145689],{"style":126383,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1440,145692],{"style":126383,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[38,145695,145696],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[38,145698,145699],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1440,145701],{"style":126383,"src":145702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[38,145704,145705],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5105,145707,23932],{},{"title":10,"searchDepth":11,"depth":11,"links":145709},[145710,145711],{"id":145499,"depth":11,"text":145500},{"id":145686,"depth":11,"text":145687},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145491,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145718,"title":145719,"body":145720,"description":145724,"extension":14,"meta":145725,"navigation":17,"path":145726,"seo":145727,"stem":145728,"__hash__":145729},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145721,"toc":145722},[],{"title":10,"searchDepth":11,"depth":11,"links":145723},[],"自己正经开始学编程的第一门语言！",{"category":92814},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145719,"description":145724},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145731,"title":145732,"body":145733,"description":13,"extension":14,"meta":146880,"navigation":17,"path":146881,"seo":146882,"stem":146883,"__hash__":146884},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145734,"toc":146856},[145735,145738,145742,145745,145748,145773,145776,145782,145786,145789,145816,145819,145859,145862,145874,145877,145883,145887,145891,145918,145935,145942,145946,145949,145975,145978,145982,145985,146025,146028,146045,146051,146055,146060,146104,146107,146125,146128,146196,146200,146207,146210,146225,146228,146237,146240,146251,146254,146263,146266,146283,146286,146301,146305,146309,146312,146314,146334,146338,146341,146344,146355,146358,146364,146368,146374,146401,146404,146416,146419,146430,146433,146439,146443,146449,146499,146502,146544,146547,146580,146583,146617,146621,146624,146644,146647,146683,146686,146699,146703,146707,146713,146716,146729,146733,146736,146742,146745,146749,146752,146755,146804,146808,146824,146830,146837,146843,146853],[29,145736,145732],{"id":145737},"_1-python环境与第一个程序",[33,145739,145741],{"id":145740},"_11-什么是python","1.1 什么是Python",[38,145743,145744],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[38,145746,145747],{},"理解 Python 时抓住三个关键词：",[46,145749,145750,145753,145756],{},[49,145751,145752],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[49,145754,145755],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[49,145757,145758,145759,314,145762,314,145765,314,145768,314,145770,28360],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[88,145760,145761],{},"os",[88,145763,145764],{},"sys",[88,145766,145767],{},"json",[88,145769,57835],{},[88,145771,145772],{},"datetime",[38,145774,145775],{},"Python 程序的运行链路：",[83,145777,145780],{"className":145778,"code":145779,"language":5166,"meta":10},[5164],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[88,145781,145779],{"__ignoreMap":10},[33,145783,145785],{"id":145784},"_12-python解释器","1.2 Python解释器",[38,145787,145788],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[83,145790,145792],{"className":23796,"code":145791,"language":23798,"meta":10,"style":10},"python --version\npython3 --version\npython\npython3\n",[88,145793,145794,145800,145806,145811],{"__ignoreMap":10},[91,145795,145796,145798],{"class":93,"line":94},[91,145797,30355],{"class":1941},[91,145799,26268],{"class":150},[91,145801,145802,145804],{"class":93,"line":11},[91,145803,100854],{"class":1941},[91,145805,26268],{"class":150},[91,145807,145808],{"class":93,"line":1157},[91,145809,145810],{"class":1941},"python\n",[91,145812,145813],{"class":93,"line":1172},[91,145814,145815],{"class":1941},"python3\n",[38,145817,145818],{},"进入交互模式后，可以直接输入表达式：",[83,145820,145822],{"className":30353,"code":145821,"language":30355,"meta":10,"style":10},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[88,145823,145824,145835,145840,145854],{"__ignoreMap":10},[91,145825,145826,145829,145831,145833],{"class":93,"line":94},[91,145827,145828],{"class":97},">>>",[91,145830,25093],{"class":150},[91,145832,45541],{"class":97},[91,145834,47698],{"class":150},[91,145836,145837],{"class":93,"line":11},[91,145838,145839],{"class":150},"3\n",[91,145841,145842,145844,145847,145849,145852],{"class":93,"line":1157},[91,145843,145828],{"class":97},[91,145845,145846],{"class":150}," print",[91,145848,102],{"class":101},[91,145850,145851],{"class":206},"\"hello python\"",[91,145853,108],{"class":101},[91,145855,145856],{"class":93,"line":1172},[91,145857,145858],{"class":101},"hello python\n",[38,145860,145861],{},"退出交互模式：",[83,145863,145865],{"className":30353,"code":145864,"language":30355,"meta":10,"style":10},"exit()\n",[88,145866,145867],{"__ignoreMap":10},[91,145868,145869,145872],{"class":93,"line":94},[91,145870,145871],{"class":150},"exit",[91,145873,1954],{"class":101},[38,145875,145876],{},"或使用快捷键：",[83,145878,145881],{"className":145879,"code":145880,"language":5166,"meta":10},[5164],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[88,145882,145880],{"__ignoreMap":10},[33,145884,145886],{"id":145885},"_13-安装python","1.3 安装Python",[63,145888,145890],{"id":145889},"_131-windows安装","1.3.1 Windows安装",[46,145892,145893,145900,145903,145909,145915],{},[49,145894,145895,145896],{},"打开 Python 官网：",[340,145897,145898],{"href":145898,"rel":145899},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23839],[49,145901,145902],{},"下载 Windows Installer。",[49,145904,145905,145906,28360],{},"安装时勾选 ",[88,145907,145908],{},"Add Python to PATH",[49,145910,145911,145912,28360],{},"点击 ",[88,145913,145914],{},"Install Now",[49,145916,145917],{},"安装完成后打开命令提示符验证：",[83,145919,145921],{"className":23796,"code":145920,"language":23798,"meta":10,"style":10},"python --version\npip --version\n",[88,145922,145923,145929],{"__ignoreMap":10},[91,145924,145925,145927],{"class":93,"line":94},[91,145926,30355],{"class":1941},[91,145928,26268],{"class":150},[91,145930,145931,145933],{"class":93,"line":11},[91,145932,23805],{"class":1941},[91,145934,26268],{"class":150},[38,145936,145937,145938,145941],{},"如果提示 ",[88,145939,145940],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[63,145943,145945],{"id":145944},"_132-macos安装","1.3.2 macOS安装",[38,145947,145948],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[83,145950,145952],{"className":23796,"code":145951,"language":23798,"meta":10,"style":10},"brew install python\npython3 --version\npip3 --version\n",[88,145953,145954,145963,145969],{"__ignoreMap":10},[91,145955,145956,145959,145961],{"class":93,"line":94},[91,145957,145958],{"class":1941},"brew",[91,145960,23808],{"class":206},[91,145962,124293],{"class":206},[91,145964,145965,145967],{"class":93,"line":11},[91,145966,100854],{"class":1941},[91,145968,26268],{"class":150},[91,145970,145971,145973],{"class":93,"line":1157},[91,145972,119675],{"class":1941},[91,145974,26268],{"class":150},[38,145976,145977],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[63,145979,145981],{"id":145980},"_133-linux安装","1.3.3 Linux安装",[38,145983,145984],{},"Ubuntu\u002FDebian：",[83,145986,145988],{"className":23796,"code":145987,"language":23798,"meta":10,"style":10},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[88,145989,145990,145998,146013,146019],{"__ignoreMap":10},[91,145991,145992,145994,145996],{"class":93,"line":94},[91,145993,24551],{"class":1941},[91,145995,117292],{"class":206},[91,145997,26217],{"class":206},[91,145999,146000,146002,146004,146006,146008,146010],{"class":93,"line":11},[91,146001,24551],{"class":1941},[91,146003,117292],{"class":206},[91,146005,23808],{"class":206},[91,146007,104378],{"class":206},[91,146009,100773],{"class":206},[91,146011,146012],{"class":206}," python3-venv\n",[91,146014,146015,146017],{"class":93,"line":1157},[91,146016,100854],{"class":1941},[91,146018,26268],{"class":150},[91,146020,146021,146023],{"class":93,"line":1172},[91,146022,119675],{"class":1941},[91,146024,26268],{"class":150},[38,146026,146027],{},"Fedora：",[83,146029,146031],{"className":23796,"code":146030,"language":23798,"meta":10,"style":10},"sudo dnf install python3 python3-pip\n",[88,146032,146033],{"__ignoreMap":10},[91,146034,146035,146037,146039,146041,146043],{"class":93,"line":94},[91,146036,24551],{"class":1941},[91,146038,26290],{"class":206},[91,146040,23808],{"class":206},[91,146042,104378],{"class":206},[91,146044,119740],{"class":206},[38,146046,146047,146048,146050],{},"Linux 上通常使用 ",[88,146049,100854],{}," 命令，避免和系统旧版本 Python 冲突。",[33,146052,146054],{"id":146053},"_14-pip包管理器","1.4 pip包管理器",[38,146056,146057,146059],{},[88,146058,23805],{}," 用来安装第三方库。",[83,146061,146063],{"className":23796,"code":146062,"language":23798,"meta":10,"style":10},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[88,146064,146065,146074,146083,146091,146097],{"__ignoreMap":10},[91,146066,146067,146069,146071],{"class":93,"line":94},[91,146068,23805],{"class":1941},[91,146070,23808],{"class":206},[91,146072,146073],{"class":206}," requests\n",[91,146075,146076,146078,146081],{"class":93,"line":11},[91,146077,23805],{"class":1941},[91,146079,146080],{"class":206}," uninstall",[91,146082,146073],{"class":206},[91,146084,146085,146087,146089],{"class":93,"line":1157},[91,146086,23805],{"class":1941},[91,146088,117549],{"class":206},[91,146090,146073],{"class":206},[91,146092,146093,146095],{"class":93,"line":1172},[91,146094,23805],{"class":1941},[91,146096,118930],{"class":206},[91,146098,146099,146101],{"class":93,"line":1178},[91,146100,23805],{"class":1941},[91,146102,146103],{"class":206}," freeze\n",[38,146105,146106],{},"国内网络较慢时可以临时使用镜像：",[83,146108,146110],{"className":23796,"code":146109,"language":23798,"meta":10,"style":10},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[88,146111,146112],{"__ignoreMap":10},[91,146113,146114,146116,146118,146121,146123],{"class":93,"line":94},[91,146115,23805],{"class":1941},[91,146117,23808],{"class":206},[91,146119,146120],{"class":206}," requests",[91,146122,26405],{"class":150},[91,146124,119703],{"class":206},[38,146126,146127],{},"常见第三方库：",[239,146129,146130,146139],{},[242,146131,146132],{},[245,146133,146134,146137],{},[248,146135,146136],{},"库",[248,146138,102671],{},[286,146140,146141,146149,146156,146164,146172,146180,146188],{},[245,146142,146143,146146],{},[291,146144,146145],{},"requests",[291,146147,146148],{},"网络请求",[245,146150,146151,146153],{},[291,146152,100601],{},[291,146154,146155],{},"数值计算",[245,146157,146158,146161],{},[291,146159,146160],{},"pandas",[291,146162,146163],{},"表格数据处理",[245,146165,146166,146169],{},[291,146167,146168],{},"matplotlib",[291,146170,146171],{},"绘图",[245,146173,146174,146177],{},[291,146175,146176],{},"pyecharts",[291,146178,146179],{},"ECharts 图表",[245,146181,146182,146185],{},[291,146183,146184],{},"flask",[291,146186,146187],{},"Web 后端",[245,146189,146190,146193],{},[291,146191,146192],{},"pytest",[291,146194,146195],{},"自动化测试",[33,146197,146199],{"id":146198},"_15-虚拟环境","1.5 虚拟环境",[38,146201,146202,146203,146206],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[88,146204,146205],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[38,146208,146209],{},"创建虚拟环境：",[83,146211,146213],{"className":23796,"code":146212,"language":23798,"meta":10,"style":10},"python -m venv .venv\n",[88,146214,146215],{"__ignoreMap":10},[91,146216,146217,146219,146221,146223],{"class":93,"line":94},[91,146218,30355],{"class":1941},[91,146220,100857],{"class":150},[91,146222,100860],{"class":206},[91,146224,100863],{"class":206},[38,146226,146227],{},"Windows 激活：",[83,146229,146231],{"className":23796,"code":146230,"language":23798,"meta":10,"style":10},".venv\\Scripts\\activate\n",[88,146232,146233],{"__ignoreMap":10},[91,146234,146235],{"class":93,"line":94},[91,146236,146230],{"class":1941},[38,146238,146239],{},"macOS\u002FLinux 激活：",[83,146241,146243],{"className":23796,"code":146242,"language":23798,"meta":10,"style":10},"source .venv\u002Fbin\u002Factivate\n",[88,146244,146245],{"__ignoreMap":10},[91,146246,146247,146249],{"class":93,"line":94},[91,146248,100868],{"class":150},[91,146250,100871],{"class":206},[38,146252,146253],{},"退出虚拟环境：",[83,146255,146257],{"className":23796,"code":146256,"language":23798,"meta":10,"style":10},"deactivate\n",[88,146258,146259],{"__ignoreMap":10},[91,146260,146261],{"class":93,"line":94},[91,146262,146256],{"class":1941},[38,146264,146265],{},"保存依赖：",[83,146267,146269],{"className":23796,"code":146268,"language":23798,"meta":10,"style":10},"pip freeze > requirements.txt\n",[88,146270,146271],{"__ignoreMap":10},[91,146272,146273,146275,146278,146280],{"class":93,"line":94},[91,146274,23805],{"class":1941},[91,146276,146277],{"class":206}," freeze",[91,146279,26197],{"class":97},[91,146281,146282],{"class":206}," requirements.txt\n",[38,146284,146285],{},"安装依赖：",[83,146287,146289],{"className":23796,"code":146288,"language":23798,"meta":10,"style":10},"pip install -r requirements.txt\n",[88,146290,146291],{"__ignoreMap":10},[91,146292,146293,146295,146297,146299],{"class":93,"line":94},[91,146294,23805],{"class":1941},[91,146296,23808],{"class":206},[91,146298,119614],{"class":150},[91,146300,146282],{"class":206},[33,146302,146304],{"id":146303},"_16-开发工具","1.6 开发工具",[63,146306,146308],{"id":146307},"_161-pycharm","1.6.1 PyCharm",[38,146310,146311],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[38,146313,122037],{},[46,146315,146316,146319,146322,146328,146331],{},[49,146317,146318],{},"New Project：创建项目。",[49,146320,146321],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[49,146323,146324,146325,125958],{},"New Python File：创建 ",[88,146326,146327],{},".py",[49,146329,146330],{},"Run：运行当前文件。",[49,146332,146333],{},"Debug：断点调试。",[63,146335,146337],{"id":146336},"_162-vs-code","1.6.2 VS Code",[38,146339,146340],{},"VS Code 轻量，适合后续多语言开发。",[38,146342,146343],{},"建议安装插件：",[46,146345,146346,146349,146352],{},[49,146347,146348],{},"Python。",[49,146350,146351],{},"Pylance。",[49,146353,146354],{},"Jupyter。",[38,146356,146357],{},"选择解释器：",[83,146359,146362],{"className":146360,"code":146361,"language":5166,"meta":10},[5164],"Ctrl + Shift + P -> Python: Select Interpreter\n",[88,146363,146361],{"__ignoreMap":10},[33,146365,146367],{"id":146366},"_17-第一个python程序","1.7 第一个Python程序",[38,146369,146370,146371,24593],{},"创建文件 ",[88,146372,146373],{},"hello.py",[83,146375,146377],{"className":30353,"code":146376,"language":30355,"meta":10,"style":10},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[88,146378,146379,146390],{"__ignoreMap":10},[91,146380,146381,146383,146385,146388],{"class":93,"line":94},[91,146382,30390],{"class":150},[91,146384,102],{"class":101},[91,146386,146387],{"class":206},"\"Hello World\"",[91,146389,108],{"class":101},[91,146391,146392,146394,146396,146399],{"class":93,"line":11},[91,146393,30390],{"class":150},[91,146395,102],{"class":101},[91,146397,146398],{"class":206},"\"你好，Python\"",[91,146400,108],{"class":101},[38,146402,146403],{},"在终端运行：",[83,146405,146407],{"className":23796,"code":146406,"language":23798,"meta":10,"style":10},"python hello.py\n",[88,146408,146409],{"__ignoreMap":10},[91,146410,146411,146413],{"class":93,"line":94},[91,146412,30355],{"class":1941},[91,146414,146415],{"class":206}," hello.py\n",[38,146417,146418],{},"或：",[83,146420,146422],{"className":23796,"code":146421,"language":23798,"meta":10,"style":10},"python3 hello.py\n",[88,146423,146424],{"__ignoreMap":10},[91,146425,146426,146428],{"class":93,"line":94},[91,146427,100854],{"class":1941},[91,146429,146415],{"class":206},[38,146431,146432],{},"输出：",[83,146434,146437],{"className":146435,"code":146436,"language":5166,"meta":10},[5164],"Hello World\n你好，Python\n",[88,146438,146436],{"__ignoreMap":10},[33,146440,146442],{"id":146441},"_18-print函数","1.8 print函数",[38,146444,146445,146448],{},[88,146446,146447],{},"print()"," 用来输出内容。",[83,146450,146452],{"className":30353,"code":146451,"language":30355,"meta":10,"style":10},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[88,146453,146454,146464,146474,146484],{"__ignoreMap":10},[91,146455,146456,146458,146460,146462],{"class":93,"line":94},[91,146457,30390],{"class":150},[91,146459,102],{"class":101},[91,146461,5823],{"class":206},[91,146463,108],{"class":101},[91,146465,146466,146468,146470,146472],{"class":93,"line":11},[91,146467,30390],{"class":150},[91,146469,102],{"class":101},[91,146471,413],{"class":150},[91,146473,108],{"class":101},[91,146475,146476,146478,146480,146482],{"class":93,"line":1157},[91,146477,30390],{"class":150},[91,146479,102],{"class":101},[91,146481,151],{"class":150},[91,146483,108],{"class":101},[91,146485,146486,146488,146490,146493,146495,146497],{"class":93,"line":1172},[91,146487,30390],{"class":150},[91,146489,102],{"class":101},[91,146491,146492],{"class":206},"\"年龄:\"",[91,146494,12414],{"class":101},[91,146496,752],{"class":150},[91,146498,108],{"class":101},[38,146500,146501],{},"多个内容用逗号隔开，默认中间加空格：",[83,146503,146505],{"className":30353,"code":146504,"language":30355,"meta":10,"style":10},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[88,146506,146507,146517,146527],{"__ignoreMap":10},[91,146508,146509,146512,146514],{"class":93,"line":94},[91,146510,146511],{"class":101},"name ",[91,146513,147],{"class":97},[91,146515,146516],{"class":206}," \"张三\"\n",[91,146518,146519,146522,146524],{"class":93,"line":11},[91,146520,146521],{"class":101},"age ",[91,146523,147],{"class":97},[91,146525,146526],{"class":150}," 18\n",[91,146528,146529,146531,146533,146536,146539,146541],{"class":93,"line":1157},[91,146530,30390],{"class":150},[91,146532,102],{"class":101},[91,146534,146535],{"class":206},"\"姓名:\"",[91,146537,146538],{"class":101},", name, ",[91,146540,146492],{"class":206},[91,146542,146543],{"class":101},", age)\n",[38,146545,146546],{},"修改分隔符：",[83,146548,146550],{"className":30353,"code":146549,"language":30355,"meta":10,"style":10},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[88,146551,146552],{"__ignoreMap":10},[91,146553,146554,146556,146558,146561,146563,146565,146567,146569,146571,146574,146576,146578],{"class":93,"line":94},[91,146555,30390],{"class":150},[91,146557,102],{"class":101},[91,146559,146560],{"class":206},"\"2024\"",[91,146562,12414],{"class":101},[91,146564,54291],{"class":206},[91,146566,12414],{"class":101},[91,146568,54291],{"class":206},[91,146570,12414],{"class":101},[91,146572,146573],{"class":5195},"sep",[91,146575,147],{"class":97},[91,146577,32458],{"class":206},[91,146579,108],{"class":101},[38,146581,146582],{},"修改结尾符：",[83,146584,146586],{"className":30353,"code":146585,"language":30355,"meta":10,"style":10},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[88,146587,146588,146606],{"__ignoreMap":10},[91,146589,146590,146592,146594,146596,146598,146600,146602,146604],{"class":93,"line":94},[91,146591,30390],{"class":150},[91,146593,102],{"class":101},[91,146595,5823],{"class":206},[91,146597,12414],{"class":101},[91,146599,45776],{"class":5195},[91,146601,147],{"class":97},[91,146603,4337],{"class":206},[91,146605,108],{"class":101},[91,146607,146608,146610,146612,146615],{"class":93,"line":11},[91,146609,30390],{"class":150},[91,146611,102],{"class":101},[91,146613,146614],{"class":206},"\"python\"",[91,146616,108],{"class":101},[33,146618,146620],{"id":146619},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[38,146622,146623],{},"交互运行适合临时验证：",[83,146625,146627],{"className":30353,"code":146626,"language":30355,"meta":10,"style":10},">>> 10 * 3\n30\n",[88,146628,146629,146639],{"__ignoreMap":10},[91,146630,146631,146633,146635,146637],{"class":93,"line":94},[91,146632,145828],{"class":97},[91,146634,2016],{"class":150},[91,146636,6497],{"class":97},[91,146638,120011],{"class":150},[91,146640,146641],{"class":93,"line":11},[91,146642,146643],{"class":150},"30\n",[38,146645,146646],{},"脚本运行适合保存程序：",[83,146648,146650],{"className":30353,"code":146649,"language":30355,"meta":10,"style":10},"price = 8\ncount = 5\nprint(price * count)\n",[88,146651,146652,146662,146671],{"__ignoreMap":10},[91,146653,146654,146657,146659],{"class":93,"line":94},[91,146655,146656],{"class":101},"price ",[91,146658,147],{"class":97},[91,146660,146661],{"class":150}," 8\n",[91,146663,146664,146667,146669],{"class":93,"line":11},[91,146665,146666],{"class":101},"count ",[91,146668,147],{"class":97},[91,146670,54402],{"class":150},[91,146672,146673,146675,146678,146680],{"class":93,"line":1157},[91,146674,30390],{"class":150},[91,146676,146677],{"class":101},"(price ",[91,146679,557],{"class":97},[91,146681,146682],{"class":101}," count)\n",[38,146684,146685],{},"实际学习中推荐：",[46,146687,146688,146691,146696],{},[49,146689,146690],{},"临时试一个语法，用交互模式。",[49,146692,146693,146694,125958],{},"写完整练习，用 ",[88,146695,146327],{},[49,146697,146698],{},"写项目，用独立目录和虚拟环境。",[33,146700,146702],{"id":146701},"_110-常见错误","1.10 常见错误",[63,146704,146706],{"id":146705},"_1101-命令找不到","1.10.1 命令找不到",[83,146708,146711],{"className":146709,"code":146710,"language":5166,"meta":10},[5164],"python: command not found\n",[88,146712,146710],{"__ignoreMap":10},[38,146714,146715],{},"原因：",[46,146717,146718,146721,146724],{},[49,146719,146720],{},"没安装 Python。",[49,146722,146723],{},"PATH 没配置。",[49,146725,146726,146727,28360],{},"Linux\u002FmacOS 应该使用 ",[88,146728,100854],{},[63,146730,146732],{"id":146731},"_1102-文件名冲突","1.10.2 文件名冲突",[38,146734,146735],{},"不要把文件命名为：",[83,146737,146740],{"className":146738,"code":146739,"language":5166,"meta":10},[5164],"random.py\njson.py\ntime.py\nrequests.py\n",[88,146741,146739],{"__ignoreMap":10},[38,146743,146744],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[63,146746,146748],{"id":146747},"_1103-中文乱码","1.10.3 中文乱码",[38,146750,146751],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[38,146753,146754],{},"如果读写文件出现乱码，要明确指定编码：",[83,146756,146758],{"className":30353,"code":146757,"language":30355,"meta":10,"style":10},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[88,146759,146760,146794],{"__ignoreMap":10},[91,146761,146762,146764,146767,146769,146772,146774,146777,146779,146782,146784,146787,146789,146791],{"class":93,"line":94},[91,146763,107808],{"class":97},[91,146765,146766],{"class":150}," open",[91,146768,102],{"class":101},[91,146770,146771],{"class":206},"\"data.txt\"",[91,146773,12414],{"class":101},[91,146775,146776],{"class":206},"\"r\"",[91,146778,12414],{"class":101},[91,146780,146781],{"class":5195},"encoding",[91,146783,147],{"class":97},[91,146785,146786],{"class":206},"\"utf-8\"",[91,146788,13693],{"class":101},[91,146790,31358],{"class":97},[91,146792,146793],{"class":101}," f:\n",[91,146795,146796,146799,146801],{"class":93,"line":11},[91,146797,146798],{"class":101},"    content ",[91,146800,147],{"class":97},[91,146802,146803],{"class":101}," f.read()\n",[33,146805,146807],{"id":146806},"_111-本章练习","1.11 本章练习",[46,146809,146810,146813,146819],{},[49,146811,146812],{},"安装 Python，并在终端输出版本号。",[49,146814,146815,146816,146818],{},"新建 ",[88,146817,146373],{},"，输出自己的姓名、年龄、学习目标。",[49,146820,104341,146821,146823],{},[88,146822,146447],{}," 输出下面格式：",[83,146825,146828],{"className":146826,"code":146827,"language":5166,"meta":10},[5164],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[88,146829,146827],{"__ignoreMap":10},[46,146831,146832],{"start":1172},[49,146833,104341,146834,146836],{},[88,146835,146573],{}," 输出日期：",[83,146838,146841],{"className":146839,"code":146840,"language":5166,"meta":10},[5164],"2024-10-10\n",[88,146842,146840],{"__ignoreMap":10},[46,146844,146845],{"start":1178},[49,146846,104341,146847,146849,146850,146852],{},[88,146848,45776],{}," 让两次 ",[88,146851,146447],{}," 输出在同一行。",[5105,146854,146855],{},"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":10,"searchDepth":11,"depth":11,"links":146857},[146858,146859,146860,146865,146866,146867,146871,146872,146873,146874,146879],{"id":145740,"depth":11,"text":145741},{"id":145784,"depth":11,"text":145785},{"id":145885,"depth":11,"text":145886,"children":146861},[146862,146863,146864],{"id":145889,"depth":1157,"text":145890},{"id":145944,"depth":1157,"text":145945},{"id":145980,"depth":1157,"text":145981},{"id":146053,"depth":11,"text":146054},{"id":146198,"depth":11,"text":146199},{"id":146303,"depth":11,"text":146304,"children":146868},[146869,146870],{"id":146307,"depth":1157,"text":146308},{"id":146336,"depth":1157,"text":146337},{"id":146366,"depth":11,"text":146367},{"id":146441,"depth":11,"text":146442},{"id":146619,"depth":11,"text":146620},{"id":146701,"depth":11,"text":146702,"children":146875},[146876,146877,146878],{"id":146705,"depth":1157,"text":146706},{"id":146731,"depth":1157,"text":146732},{"id":146747,"depth":1157,"text":146748},{"id":146806,"depth":11,"text":146807},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145732,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146886,"title":146887,"body":146888,"description":13,"extension":14,"meta":149292,"navigation":17,"path":149293,"seo":149294,"stem":149295,"__hash__":149296},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146889,"toc":149277},[146890,146893,146897,146900,146903,146920,146923,146965,146968,146972,146975,146978,147015,147018,147052,147055,147147,147151,147165,147168,147195,147198,147202,147305,147312,147315,147332,147336,147343,147532,147535,147608,147612,147615,147699,147702,147734,147738,147942,147945,147949,147955,148057,148060,148316,148320,148323,148326,148340,148342,148528,148532,148894,148900,148904,148907,149031,149034,149213,149216,149220,149253,149257,149274],[29,146891,146887],{"id":146892},"_10-json与pyecharts折线图",[33,146894,146896],{"id":146895},"_101-数据可视化","10.1 数据可视化",[38,146898,146899],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[38,146901,146902],{},"常见图表：",[46,146904,146905,146908,146911,146914,146917],{},[49,146906,146907],{},"折线图：看趋势。",[49,146909,146910],{},"柱状图：看分类对比。",[49,146912,146913],{},"饼图：看占比。",[49,146915,146916],{},"地图：看地域分布。",[49,146918,146919],{},"散点图：看两个变量之间的关系。",[38,146921,146922],{},"Python 可视化常用库：",[239,146924,146925,146933],{},[242,146926,146927],{},[245,146928,146929,146931],{},[248,146930,146136],{},[248,146932,23714],{},[286,146934,146935,146942,146950,146957],{},[245,146936,146937,146939],{},[291,146938,146168],{},[291,146940,146941],{},"基础、经典、可定制",[245,146943,146944,146947],{},[291,146945,146946],{},"seaborn",[291,146948,146949],{},"统计图表更美观",[245,146951,146952,146954],{},[291,146953,146176],{},[291,146955,146956],{},"生成交互式网页图表",[245,146958,146959,146962],{},[291,146960,146961],{},"plotly",[291,146963,146964],{},"交互图表能力强",[38,146966,146967],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[33,146969,146971],{"id":146970},"_102-json回顾","10.2 JSON回顾",[38,146973,146974],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[38,146976,146977],{},"Python 字典：",[83,146979,146981],{"className":30353,"code":146980,"language":30355,"meta":10,"style":10},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[88,146982,146983,146991,147002,147011],{"__ignoreMap":10},[91,146984,146985,146987,146989],{"class":93,"line":94},[91,146986,101633],{"class":101},[91,146988,147],{"class":97},[91,146990,15551],{"class":101},[91,146992,146993,146996,146998,147000],{"class":93,"line":11},[91,146994,146995],{"class":206},"    \"name\"",[91,146997,51412],{"class":101},[91,146999,69244],{"class":206},[91,147001,31441],{"class":101},[91,147003,147004,147007,147009],{"class":93,"line":1157},[91,147005,147006],{"class":206},"    \"value\"",[91,147008,51412],{"class":101},[91,147010,97433],{"class":150},[91,147012,147013],{"class":93,"line":1172},[91,147014,1543],{"class":101},[38,147016,147017],{},"JSON 字符串：",[83,147019,147022],{"className":147020,"code":147021,"language":145767,"meta":10,"style":10},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[88,147023,147024,147028,147039,147048],{"__ignoreMap":10},[91,147025,147026],{"class":93,"line":94},[91,147027,1524],{"class":101},[91,147029,147030,147033,147035,147037],{"class":93,"line":11},[91,147031,147032],{"class":150},"  \"name\"",[91,147034,51412],{"class":101},[91,147036,69244],{"class":206},[91,147038,31441],{"class":101},[91,147040,147041,147044,147046],{"class":93,"line":1157},[91,147042,147043],{"class":150},"  \"value\"",[91,147045,51412],{"class":101},[91,147047,97433],{"class":150},[91,147049,147050],{"class":93,"line":1172},[91,147051,1543],{"class":101},[38,147053,147054],{},"Python 与 JSON 的转换：",[83,147056,147058],{"className":30353,"code":147057,"language":30355,"meta":10,"style":10},"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",[88,147059,147060,147067,147071,147096,147100,147119,147126,147130,147140],{"__ignoreMap":10},[91,147061,147062,147064],{"class":93,"line":94},[91,147063,30367],{"class":97},[91,147065,147066],{"class":101}," json\n",[91,147068,147069],{"class":93,"line":11},[91,147070,2378],{"emptyLinePlaceholder":17},[91,147072,147073,147075,147077,147079,147081,147083,147085,147087,147090,147092,147094],{"class":93,"line":1157},[91,147074,101633],{"class":101},[91,147076,147],{"class":97},[91,147078,4426],{"class":101},[91,147080,62654],{"class":206},[91,147082,51412],{"class":101},[91,147084,69244],{"class":206},[91,147086,12414],{"class":101},[91,147088,147089],{"class":206},"\"value\"",[91,147091,51412],{"class":101},[91,147093,413],{"class":150},[91,147095,1543],{"class":101},[91,147097,147098],{"class":93,"line":1172},[91,147099,2378],{"emptyLinePlaceholder":17},[91,147101,147102,147105,147107,147110,147113,147115,147117],{"class":93,"line":1178},[91,147103,147104],{"class":101},"json_text ",[91,147106,147],{"class":97},[91,147108,147109],{"class":101}," json.dumps(data, ",[91,147111,147112],{"class":5195},"ensure_ascii",[91,147114,147],{"class":97},[91,147116,33962],{"class":150},[91,147118,108],{"class":101},[91,147120,147121,147123],{"class":93,"line":1192},[91,147122,30390],{"class":150},[91,147124,147125],{"class":101},"(json_text)\n",[91,147127,147128],{"class":93,"line":1198},[91,147129,2378],{"emptyLinePlaceholder":17},[91,147131,147132,147135,147137],{"class":93,"line":1289},[91,147133,147134],{"class":101},"new_data ",[91,147136,147],{"class":97},[91,147138,147139],{"class":101}," json.loads(json_text)\n",[91,147141,147142,147144],{"class":93,"line":1295},[91,147143,30390],{"class":150},[91,147145,147146],{"class":101},"(new_data)\n",[33,147148,147150],{"id":147149},"_103-安装pyecharts","10.3 安装pyecharts",[83,147152,147154],{"className":23796,"code":147153,"language":23798,"meta":10,"style":10},"pip install pyecharts\n",[88,147155,147156],{"__ignoreMap":10},[91,147157,147158,147160,147162],{"class":93,"line":94},[91,147159,23805],{"class":1941},[91,147161,23808],{"class":206},[91,147163,147164],{"class":206}," pyecharts\n",[38,147166,147167],{},"验证：",[83,147169,147171],{"className":30353,"code":147170,"language":30355,"meta":10,"style":10},"import pyecharts\n\nprint(pyecharts.__version__)\n",[88,147172,147173,147179,147183],{"__ignoreMap":10},[91,147174,147175,147177],{"class":93,"line":94},[91,147176,30367],{"class":97},[91,147178,147164],{"class":101},[91,147180,147181],{"class":93,"line":11},[91,147182,2378],{"emptyLinePlaceholder":17},[91,147184,147185,147187,147190,147193],{"class":93,"line":1157},[91,147186,30390],{"class":150},[91,147188,147189],{"class":101},"(pyecharts.",[91,147191,147192],{"class":150},"__version__",[91,147194,108],{"class":101},[38,147196,147197],{},"如果使用虚拟环境，要先激活环境再安装。",[33,147199,147201],{"id":147200},"_104-第一个折线图","10.4 第一个折线图",[83,147203,147205],{"className":30353,"code":147204,"language":30355,"meta":10,"style":10},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[88,147206,147207,147219,147223,147233,147263,147295],{"__ignoreMap":10},[91,147208,147209,147211,147214,147216],{"class":93,"line":94},[91,147210,30712],{"class":97},[91,147212,147213],{"class":101}," pyecharts.charts ",[91,147215,30367],{"class":97},[91,147217,147218],{"class":101}," Line\n",[91,147220,147221],{"class":93,"line":11},[91,147222,2378],{"emptyLinePlaceholder":17},[91,147224,147225,147228,147230],{"class":93,"line":1157},[91,147226,147227],{"class":101},"line ",[91,147229,147],{"class":97},[91,147231,147232],{"class":101}," Line()\n",[91,147234,147235,147238,147241,147243,147246,147248,147251,147253,147256,147258,147261],{"class":93,"line":1172},[91,147236,147237],{"class":101},"line.add_xaxis([",[91,147239,147240],{"class":206},"\"周一\"",[91,147242,12414],{"class":101},[91,147244,147245],{"class":206},"\"周二\"",[91,147247,12414],{"class":101},[91,147249,147250],{"class":206},"\"周三\"",[91,147252,12414],{"class":101},[91,147254,147255],{"class":206},"\"周四\"",[91,147257,12414],{"class":101},[91,147259,147260],{"class":206},"\"周五\"",[91,147262,4635],{"class":101},[91,147264,147265,147268,147271,147273,147275,147277,147279,147281,147283,147285,147288,147290,147293],{"class":93,"line":1178},[91,147266,147267],{"class":101},"line.add_yaxis(",[91,147269,147270],{"class":206},"\"销售额\"",[91,147272,77493],{"class":101},[91,147274,413],{"class":150},[91,147276,12414],{"class":101},[91,147278,919],{"class":150},[91,147280,12414],{"class":101},[91,147282,964],{"class":150},[91,147284,12414],{"class":101},[91,147286,147287],{"class":150},"150",[91,147289,12414],{"class":101},[91,147291,147292],{"class":150},"180",[91,147294,4635],{"class":101},[91,147296,147297,147300,147303],{"class":93,"line":1192},[91,147298,147299],{"class":101},"line.render(",[91,147301,147302],{"class":206},"\"line.html\"",[91,147304,108],{"class":101},[38,147306,147307,147308,147311],{},"运行后会生成 ",[88,147309,147310],{},"line.html","，用浏览器打开即可看到图表。",[38,147313,147314],{},"核心步骤：",[46,147316,147317,147320,147323,147326,147329],{},[49,147318,147319],{},"导入图表类。",[49,147321,147322],{},"创建图表对象。",[49,147324,147325],{},"添加 x 轴数据。",[49,147327,147328],{},"添加 y 轴数据。",[49,147330,147331],{},"渲染为 HTML。",[33,147333,147335],{"id":147334},"_105-全局配置","10.5 全局配置",[38,147337,147338,147339,147342],{},"常用配置在 ",[88,147340,147341],{},"pyecharts.options"," 中。",[83,147344,147346],{"className":30353,"code":147345,"language":30355,"meta":10,"style":10},"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",[88,147347,147348,147365,147375,147379,147387,147411,147439,147444,147463,147482,147500,147520,147524],{"__ignoreMap":10},[91,147349,147350,147352,147355,147357,147360,147362],{"class":93,"line":94},[91,147351,30712],{"class":97},[91,147353,147354],{"class":101}," pyecharts ",[91,147356,30367],{"class":97},[91,147358,147359],{"class":101}," options ",[91,147361,31358],{"class":97},[91,147363,147364],{"class":101}," opts\n",[91,147366,147367,147369,147371,147373],{"class":93,"line":11},[91,147368,30712],{"class":97},[91,147370,147213],{"class":101},[91,147372,30367],{"class":97},[91,147374,147218],{"class":101},[91,147376,147377],{"class":93,"line":1157},[91,147378,2378],{"emptyLinePlaceholder":17},[91,147380,147381,147383,147385],{"class":93,"line":1172},[91,147382,147227],{"class":101},[91,147384,147],{"class":97},[91,147386,147232],{"class":101},[91,147388,147389,147391,147393,147395,147397,147399,147401,147403,147405,147407,147409],{"class":93,"line":1178},[91,147390,147237],{"class":101},[91,147392,147240],{"class":206},[91,147394,12414],{"class":101},[91,147396,147245],{"class":206},[91,147398,12414],{"class":101},[91,147400,147250],{"class":206},[91,147402,12414],{"class":101},[91,147404,147255],{"class":206},[91,147406,12414],{"class":101},[91,147408,147260],{"class":206},[91,147410,4635],{"class":101},[91,147412,147413,147415,147417,147419,147421,147423,147425,147427,147429,147431,147433,147435,147437],{"class":93,"line":1192},[91,147414,147267],{"class":101},[91,147416,147270],{"class":206},[91,147418,77493],{"class":101},[91,147420,413],{"class":150},[91,147422,12414],{"class":101},[91,147424,919],{"class":150},[91,147426,12414],{"class":101},[91,147428,964],{"class":150},[91,147430,12414],{"class":101},[91,147432,147287],{"class":150},[91,147434,12414],{"class":101},[91,147436,147292],{"class":150},[91,147438,4635],{"class":101},[91,147440,147441],{"class":93,"line":1198},[91,147442,147443],{"class":101},"line.set_global_opts(\n",[91,147445,147446,147449,147451,147454,147456,147458,147461],{"class":93,"line":1289},[91,147447,147448],{"class":5195},"    title_opts",[91,147450,147],{"class":97},[91,147452,147453],{"class":101},"opts.TitleOpts(",[91,147455,51382],{"class":5195},[91,147457,147],{"class":97},[91,147459,147460],{"class":206},"\"一周销售额\"",[91,147462,38022],{"class":101},[91,147464,147465,147468,147470,147473,147475,147477,147480],{"class":93,"line":1295},[91,147466,147467],{"class":5195},"    xaxis_opts",[91,147469,147],{"class":97},[91,147471,147472],{"class":101},"opts.AxisOpts(",[91,147474,79785],{"class":5195},[91,147476,147],{"class":97},[91,147478,147479],{"class":206},"\"日期\"",[91,147481,38022],{"class":101},[91,147483,147484,147487,147489,147491,147493,147495,147498],{"class":93,"line":1307},[91,147485,147486],{"class":5195},"    yaxis_opts",[91,147488,147],{"class":97},[91,147490,147472],{"class":101},[91,147492,79785],{"class":5195},[91,147494,147],{"class":97},[91,147496,147497],{"class":206},"\"金额\"",[91,147499,38022],{"class":101},[91,147501,147502,147505,147507,147510,147513,147515,147518],{"class":93,"line":1590},[91,147503,147504],{"class":5195},"    tooltip_opts",[91,147506,147],{"class":97},[91,147508,147509],{"class":101},"opts.TooltipOpts(",[91,147511,147512],{"class":5195},"trigger",[91,147514,147],{"class":97},[91,147516,147517],{"class":206},"\"axis\"",[91,147519,38022],{"class":101},[91,147521,147522],{"class":93,"line":1595},[91,147523,108],{"class":101},[91,147525,147526,147528,147530],{"class":93,"line":1601},[91,147527,147299],{"class":101},[91,147529,147302],{"class":206},[91,147531,108],{"class":101},[38,147533,147534],{},"常见全局配置：",[239,147536,147537,147546],{},[242,147538,147539],{},[245,147540,147541,147544],{},[248,147542,147543],{},"配置",[248,147545,102671],{},[286,147547,147548,147558,147568,147578,147588,147598],{},[245,147549,147550,147555],{},[291,147551,147552],{},[88,147553,147554],{},"TitleOpts",[291,147556,147557],{},"标题",[245,147559,147560,147565],{},[291,147561,147562],{},[88,147563,147564],{},"LegendOpts",[291,147566,147567],{},"图例",[245,147569,147570,147575],{},[291,147571,147572],{},[88,147573,147574],{},"TooltipOpts",[291,147576,147577],{},"提示框",[245,147579,147580,147585],{},[291,147581,147582],{},[88,147583,147584],{},"AxisOpts",[291,147586,147587],{},"坐标轴",[245,147589,147590,147595],{},[291,147591,147592],{},[88,147593,147594],{},"VisualMapOpts",[291,147596,147597],{},"视觉映射",[245,147599,147600,147605],{},[291,147601,147602],{},[88,147603,147604],{},"DataZoomOpts",[291,147606,147607],{},"区域缩放",[33,147609,147611],{"id":147610},"_106-系列配置","10.6 系列配置",[38,147613,147614],{},"系列配置作用于某一组数据。",[83,147616,147618],{"className":30353,"code":147617,"language":30355,"meta":10,"style":10},"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",[88,147619,147620,147625,147636,147665,147676,147695],{"__ignoreMap":10},[91,147621,147622],{"class":93,"line":94},[91,147623,147624],{"class":101},"line.add_yaxis(\n",[91,147626,147627,147630,147632,147634],{"class":93,"line":11},[91,147628,147629],{"class":5195},"    series_name",[91,147631,147],{"class":97},[91,147633,147270],{"class":206},[91,147635,31441],{"class":101},[91,147637,147638,147641,147643,147645,147647,147649,147651,147653,147655,147657,147659,147661,147663],{"class":93,"line":1157},[91,147639,147640],{"class":5195},"    y_axis",[91,147642,147],{"class":97},[91,147644,992],{"class":101},[91,147646,413],{"class":150},[91,147648,12414],{"class":101},[91,147650,919],{"class":150},[91,147652,12414],{"class":101},[91,147654,964],{"class":150},[91,147656,12414],{"class":101},[91,147658,147287],{"class":150},[91,147660,12414],{"class":101},[91,147662,147292],{"class":150},[91,147664,87811],{"class":101},[91,147666,147667,147670,147672,147674],{"class":93,"line":1172},[91,147668,147669],{"class":5195},"    is_smooth",[91,147671,147],{"class":97},[91,147673,31451],{"class":150},[91,147675,31441],{"class":101},[91,147677,147678,147681,147683,147686,147689,147691,147693],{"class":93,"line":1178},[91,147679,147680],{"class":5195},"    label_opts",[91,147682,147],{"class":97},[91,147684,147685],{"class":101},"opts.LabelOpts(",[91,147687,147688],{"class":5195},"is_show",[91,147690,147],{"class":97},[91,147692,31451],{"class":150},[91,147694,38022],{"class":101},[91,147696,147697],{"class":93,"line":1192},[91,147698,108],{"class":101},[38,147700,147701],{},"常用参数：",[46,147703,147704,147710,147716,147722,147728],{},[49,147705,147706,147709],{},[88,147707,147708],{},"series_name","：系列名称。",[49,147711,147712,147715],{},[88,147713,147714],{},"y_axis","：y 轴数据。",[49,147717,147718,147721],{},[88,147719,147720],{},"is_smooth","：是否平滑曲线。",[49,147723,147724,147727],{},[88,147725,147726],{},"label_opts","：标签配置。",[49,147729,147730,147733],{},[88,147731,147732],{},"symbol_size","：标记点大小。",[33,147735,147737],{"id":147736},"_107-多条折线","10.7 多条折线",[83,147739,147741],{"className":30353,"code":147740,"language":30355,"meta":10,"style":10},"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",[88,147742,147743,147757,147767,147771,147800,147804,147812,147817,147855,147892,147896,147913,147929,147933],{"__ignoreMap":10},[91,147744,147745,147747,147749,147751,147753,147755],{"class":93,"line":94},[91,147746,30712],{"class":97},[91,147748,147354],{"class":101},[91,147750,30367],{"class":97},[91,147752,147359],{"class":101},[91,147754,31358],{"class":97},[91,147756,147364],{"class":101},[91,147758,147759,147761,147763,147765],{"class":93,"line":11},[91,147760,30712],{"class":97},[91,147762,147213],{"class":101},[91,147764,30367],{"class":97},[91,147766,147218],{"class":101},[91,147768,147769],{"class":93,"line":1157},[91,147770,2378],{"emptyLinePlaceholder":17},[91,147772,147773,147776,147778,147780,147782,147784,147786,147788,147790,147792,147794,147796,147798],{"class":93,"line":1172},[91,147774,147775],{"class":101},"dates ",[91,147777,147],{"class":97},[91,147779,52201],{"class":101},[91,147781,147240],{"class":206},[91,147783,12414],{"class":101},[91,147785,147245],{"class":206},[91,147787,12414],{"class":101},[91,147789,147250],{"class":206},[91,147791,12414],{"class":101},[91,147793,147255],{"class":206},[91,147795,12414],{"class":101},[91,147797,147260],{"class":206},[91,147799,33221],{"class":101},[91,147801,147802],{"class":93,"line":1178},[91,147803,2378],{"emptyLinePlaceholder":17},[91,147805,147806,147808,147810],{"class":93,"line":1192},[91,147807,147227],{"class":101},[91,147809,147],{"class":97},[91,147811,147232],{"class":101},[91,147813,147814],{"class":93,"line":1198},[91,147815,147816],{"class":101},"line.add_xaxis(dates)\n",[91,147818,147819,147821,147824,147826,147828,147830,147833,147835,147837,147839,147841,147843,147845,147847,147849,147851,147853],{"class":93,"line":1289},[91,147820,147267],{"class":101},[91,147822,147823],{"class":206},"\"线上销售\"",[91,147825,77493],{"class":101},[91,147827,413],{"class":150},[91,147829,12414],{"class":101},[91,147831,147832],{"class":150},"130",[91,147834,12414],{"class":101},[91,147836,919],{"class":150},[91,147838,12414],{"class":101},[91,147840,21027],{"class":150},[91,147842,12414],{"class":101},[91,147844,1700],{"class":150},[91,147846,112177],{"class":101},[91,147848,147720],{"class":5195},[91,147850,147],{"class":97},[91,147852,31451],{"class":150},[91,147854,108],{"class":101},[91,147856,147857,147859,147862,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890],{"class":93,"line":1295},[91,147858,147267],{"class":101},[91,147860,147861],{"class":206},"\"线下销售\"",[91,147863,77493],{"class":101},[91,147865,714],{"class":150},[91,147867,12414],{"class":101},[91,147869,964],{"class":150},[91,147871,12414],{"class":101},[91,147873,413],{"class":150},[91,147875,12414],{"class":101},[91,147877,919],{"class":150},[91,147879,12414],{"class":101},[91,147881,147287],{"class":150},[91,147883,112177],{"class":101},[91,147885,147720],{"class":5195},[91,147887,147],{"class":97},[91,147889,31451],{"class":150},[91,147891,108],{"class":101},[91,147893,147894],{"class":93,"line":1307},[91,147895,147443],{"class":101},[91,147897,147898,147900,147902,147904,147906,147908,147911],{"class":93,"line":1590},[91,147899,147448],{"class":5195},[91,147901,147],{"class":97},[91,147903,147453],{"class":101},[91,147905,51382],{"class":5195},[91,147907,147],{"class":97},[91,147909,147910],{"class":206},"\"线上线下销售趋势\"",[91,147912,38022],{"class":101},[91,147914,147915,147917,147919,147921,147923,147925,147927],{"class":93,"line":1595},[91,147916,147504],{"class":5195},[91,147918,147],{"class":97},[91,147920,147509],{"class":101},[91,147922,147512],{"class":5195},[91,147924,147],{"class":97},[91,147926,147517],{"class":206},[91,147928,38022],{"class":101},[91,147930,147931],{"class":93,"line":1601},[91,147932,108],{"class":101},[91,147934,147935,147937,147940],{"class":93,"line":1606},[91,147936,147299],{"class":101},[91,147938,147939],{"class":206},"\"sales.html\"",[91,147941,108],{"class":101},[38,147943,147944],{},"多条折线适合比较不同指标或不同地区。",[33,147946,147948],{"id":147947},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[38,147950,147951,147952,24593],{},"假设 ",[88,147953,147954],{},"sales.json",[83,147956,147958],{"className":147020,"code":147957,"language":145767,"meta":10,"style":10},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[88,147959,147960,147965,147997,148025,148053],{"__ignoreMap":10},[91,147961,147962],{"class":93,"line":94},[91,147963,147964],{"class":101},"[\n",[91,147966,147967,147970,147973,147975,147977,147979,147982,147984,147986,147988,147991,147993,147995],{"class":93,"line":11},[91,147968,147969],{"class":101},"  {",[91,147971,147972],{"class":150},"\"date\"",[91,147974,51412],{"class":101},[91,147976,147240],{"class":206},[91,147978,12414],{"class":101},[91,147980,147981],{"class":150},"\"online\"",[91,147983,51412],{"class":101},[91,147985,413],{"class":150},[91,147987,12414],{"class":101},[91,147989,147990],{"class":150},"\"offline\"",[91,147992,51412],{"class":101},[91,147994,714],{"class":150},[91,147996,4908],{"class":101},[91,147998,147999,148001,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023],{"class":93,"line":1157},[91,148000,147969],{"class":101},[91,148002,147972],{"class":150},[91,148004,51412],{"class":101},[91,148006,147245],{"class":206},[91,148008,12414],{"class":101},[91,148010,147981],{"class":150},[91,148012,51412],{"class":101},[91,148014,147832],{"class":150},[91,148016,12414],{"class":101},[91,148018,147990],{"class":150},[91,148020,51412],{"class":101},[91,148022,964],{"class":150},[91,148024,4908],{"class":101},[91,148026,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051],{"class":93,"line":1172},[91,148028,147969],{"class":101},[91,148030,147972],{"class":150},[91,148032,51412],{"class":101},[91,148034,147250],{"class":206},[91,148036,12414],{"class":101},[91,148038,147981],{"class":150},[91,148040,51412],{"class":101},[91,148042,919],{"class":150},[91,148044,12414],{"class":101},[91,148046,147990],{"class":150},[91,148048,51412],{"class":101},[91,148050,413],{"class":150},[91,148052,1543],{"class":101},[91,148054,148055],{"class":93,"line":1178},[91,148056,33221],{"class":101},[38,148058,148059],{},"读取并绘图：",[83,148061,148063],{"className":30353,"code":148062,"language":30355,"meta":10,"style":10},"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",[88,148064,148065,148071,148085,148095,148099,148131,148144,148148,148156,148165,148174,148178,148190,148199,148208,148217,148221,148229,148233,148250,148267,148271,148288,148304,148308],{"__ignoreMap":10},[91,148066,148067,148069],{"class":93,"line":94},[91,148068,30367],{"class":97},[91,148070,147066],{"class":101},[91,148072,148073,148075,148077,148079,148081,148083],{"class":93,"line":11},[91,148074,30712],{"class":97},[91,148076,147354],{"class":101},[91,148078,30367],{"class":97},[91,148080,147359],{"class":101},[91,148082,31358],{"class":97},[91,148084,147364],{"class":101},[91,148086,148087,148089,148091,148093],{"class":93,"line":1157},[91,148088,30712],{"class":97},[91,148090,147213],{"class":101},[91,148092,30367],{"class":97},[91,148094,147218],{"class":101},[91,148096,148097],{"class":93,"line":1172},[91,148098,2378],{"emptyLinePlaceholder":17},[91,148100,148101,148103,148105,148107,148110,148112,148114,148116,148118,148120,148122,148124,148126,148129],{"class":93,"line":1178},[91,148102,107808],{"class":97},[91,148104,146766],{"class":150},[91,148106,102],{"class":101},[91,148108,148109],{"class":206},"\"sales.json\"",[91,148111,12414],{"class":101},[91,148113,146776],{"class":206},[91,148115,12414],{"class":101},[91,148117,146781],{"class":5195},[91,148119,147],{"class":97},[91,148121,146786],{"class":206},[91,148123,13693],{"class":101},[91,148125,31358],{"class":97},[91,148127,148128],{"class":5195}," file",[91,148130,3717],{"class":101},[91,148132,148133,148135,148137,148140,148142],{"class":93,"line":1192},[91,148134,101396],{"class":101},[91,148136,147],{"class":97},[91,148138,148139],{"class":101}," json.load(",[91,148141,45329],{"class":5195},[91,148143,108],{"class":101},[91,148145,148146],{"class":93,"line":1198},[91,148147,2378],{"emptyLinePlaceholder":17},[91,148149,148150,148152,148154],{"class":93,"line":1289},[91,148151,147775],{"class":101},[91,148153,147],{"class":97},[91,148155,51813],{"class":101},[91,148157,148158,148161,148163],{"class":93,"line":1295},[91,148159,148160],{"class":101},"online_sales ",[91,148162,147],{"class":97},[91,148164,51813],{"class":101},[91,148166,148167,148170,148172],{"class":93,"line":1307},[91,148168,148169],{"class":101},"offline_sales ",[91,148171,147],{"class":97},[91,148173,51813],{"class":101},[91,148175,148176],{"class":93,"line":1590},[91,148177,2378],{"emptyLinePlaceholder":17},[91,148179,148180,148182,148185,148187],{"class":93,"line":1595},[91,148181,3003],{"class":97},[91,148183,148184],{"class":101}," item ",[91,148186,26018],{"class":97},[91,148188,148189],{"class":101}," data:\n",[91,148191,148192,148195,148197],{"class":93,"line":1601},[91,148193,148194],{"class":101},"    dates.append(item[",[91,148196,147972],{"class":206},[91,148198,4635],{"class":101},[91,148200,148201,148204,148206],{"class":93,"line":1606},[91,148202,148203],{"class":101},"    online_sales.append(item[",[91,148205,147981],{"class":206},[91,148207,4635],{"class":101},[91,148209,148210,148213,148215],{"class":93,"line":1620},[91,148211,148212],{"class":101},"    offline_sales.append(item[",[91,148214,147990],{"class":206},[91,148216,4635],{"class":101},[91,148218,148219],{"class":93,"line":1625},[91,148220,2378],{"emptyLinePlaceholder":17},[91,148222,148223,148225,148227],{"class":93,"line":1631},[91,148224,147227],{"class":101},[91,148226,147],{"class":97},[91,148228,147232],{"class":101},[91,148230,148231],{"class":93,"line":1652},[91,148232,147816],{"class":101},[91,148234,148235,148237,148239,148242,148244,148246,148248],{"class":93,"line":1657},[91,148236,147267],{"class":101},[91,148238,147823],{"class":206},[91,148240,148241],{"class":101},", online_sales, ",[91,148243,147720],{"class":5195},[91,148245,147],{"class":97},[91,148247,31451],{"class":150},[91,148249,108],{"class":101},[91,148251,148252,148254,148256,148259,148261,148263,148265],{"class":93,"line":1671},[91,148253,147267],{"class":101},[91,148255,147861],{"class":206},[91,148257,148258],{"class":101},", offline_sales, ",[91,148260,147720],{"class":5195},[91,148262,147],{"class":97},[91,148264,31451],{"class":150},[91,148266,108],{"class":101},[91,148268,148269],{"class":93,"line":1676},[91,148270,147443],{"class":101},[91,148272,148273,148275,148277,148279,148281,148283,148286],{"class":93,"line":1705},[91,148274,147448],{"class":5195},[91,148276,147],{"class":97},[91,148278,147453],{"class":101},[91,148280,51382],{"class":5195},[91,148282,147],{"class":97},[91,148284,148285],{"class":206},"\"销售趋势\"",[91,148287,38022],{"class":101},[91,148289,148290,148292,148294,148296,148298,148300,148302],{"class":93,"line":1710},[91,148291,147504],{"class":5195},[91,148293,147],{"class":97},[91,148295,147509],{"class":101},[91,148297,147512],{"class":5195},[91,148299,147],{"class":97},[91,148301,147517],{"class":206},[91,148303,38022],{"class":101},[91,148305,148306],{"class":93,"line":1727},[91,148307,108],{"class":101},[91,148309,148310,148312,148314],{"class":93,"line":1732},[91,148311,147299],{"class":101},[91,148313,147939],{"class":206},[91,148315,108],{"class":101},[33,148317,148319],{"id":148318},"_109-数据清洗","10.9 数据清洗",[38,148321,148322],{},"真实数据经常不整齐，需要清洗。",[38,148324,148325],{},"常见问题：",[46,148327,148328,148331,148334,148337],{},[49,148329,148330],{},"数字是字符串。",[49,148332,148333],{},"字段缺失。",[49,148335,148336],{},"空值。",[49,148338,148339],{},"日期格式不统一。",[38,148341,15114],{},[83,148343,148345],{"className":30353,"code":148344,"language":30355,"meta":10,"style":10},"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",[88,148346,148347,148356,148379,148399,148420,148424,148428,148436,148445,148449,148460,148474,148483,148488,148492,148500,148510,148514,148521],{"__ignoreMap":10},[91,148348,148349,148352,148354],{"class":93,"line":94},[91,148350,148351],{"class":101},"raw_data ",[91,148353,147],{"class":97},[91,148355,55422],{"class":101},[91,148357,148358,148361,148363,148365,148367,148369,148372,148374,148377],{"class":93,"line":11},[91,148359,148360],{"class":101},"    {",[91,148362,147972],{"class":206},[91,148364,51412],{"class":101},[91,148366,147240],{"class":206},[91,148368,12414],{"class":101},[91,148370,148371],{"class":206},"\"sales\"",[91,148373,51412],{"class":101},[91,148375,148376],{"class":206},"\"100\"",[91,148378,4908],{"class":101},[91,148380,148381,148383,148385,148387,148389,148391,148393,148395,148397],{"class":93,"line":1157},[91,148382,148360],{"class":101},[91,148384,147972],{"class":206},[91,148386,51412],{"class":101},[91,148388,147245],{"class":206},[91,148390,12414],{"class":101},[91,148392,148371],{"class":206},[91,148394,51412],{"class":101},[91,148396,7631],{"class":206},[91,148398,4908],{"class":101},[91,148400,148401,148403,148405,148407,148409,148411,148413,148415,148418],{"class":93,"line":1172},[91,148402,148360],{"class":101},[91,148404,147972],{"class":206},[91,148406,51412],{"class":101},[91,148408,147250],{"class":206},[91,148410,12414],{"class":101},[91,148412,148371],{"class":206},[91,148414,51412],{"class":101},[91,148416,148417],{"class":206},"\"120\"",[91,148419,4908],{"class":101},[91,148421,148422],{"class":93,"line":1178},[91,148423,33221],{"class":101},[91,148425,148426],{"class":93,"line":1192},[91,148427,2378],{"emptyLinePlaceholder":17},[91,148429,148430,148432,148434],{"class":93,"line":1198},[91,148431,147775],{"class":101},[91,148433,147],{"class":97},[91,148435,51813],{"class":101},[91,148437,148438,148441,148443],{"class":93,"line":1289},[91,148439,148440],{"class":101},"sales ",[91,148442,147],{"class":97},[91,148444,51813],{"class":101},[91,148446,148447],{"class":93,"line":1295},[91,148448,2378],{"emptyLinePlaceholder":17},[91,148450,148451,148453,148455,148457],{"class":93,"line":1307},[91,148452,3003],{"class":97},[91,148454,148184],{"class":101},[91,148456,26018],{"class":97},[91,148458,148459],{"class":101}," raw_data:\n",[91,148461,148462,148465,148467,148470,148472],{"class":93,"line":1590},[91,148463,148464],{"class":101},"    value ",[91,148466,147],{"class":97},[91,148468,148469],{"class":101}," item.get(",[91,148471,148371],{"class":206},[91,148473,108],{"class":101},[91,148475,148476,148478,148480],{"class":93,"line":1595},[91,148477,3079],{"class":97},[91,148479,38905],{"class":97},[91,148481,148482],{"class":101}," value:\n",[91,148484,148485],{"class":93,"line":1601},[91,148486,148487],{"class":97},"        continue\n",[91,148489,148490],{"class":93,"line":1606},[91,148491,2378],{"emptyLinePlaceholder":17},[91,148493,148494,148496,148498],{"class":93,"line":1620},[91,148495,148194],{"class":101},[91,148497,147972],{"class":206},[91,148499,4635],{"class":101},[91,148501,148502,148505,148507],{"class":93,"line":1625},[91,148503,148504],{"class":101},"    sales.append(",[91,148506,105],{"class":150},[91,148508,148509],{"class":101},"(value))\n",[91,148511,148512],{"class":93,"line":1631},[91,148513,2378],{"emptyLinePlaceholder":17},[91,148515,148516,148518],{"class":93,"line":1652},[91,148517,30390],{"class":150},[91,148519,148520],{"class":101},"(dates)\n",[91,148522,148523,148525],{"class":93,"line":1657},[91,148524,30390],{"class":150},[91,148526,148527],{"class":101},"(sales)\n",[33,148529,148531],{"id":148530},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[83,148533,148535],{"className":30353,"code":148534,"language":30355,"meta":10,"style":10},"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",[88,148536,148537,148551,148561,148565,148573,148594,148616,148638,148660,148682,148686,148690,148712,148733,148737,148745,148749,148753,148763,148772,148782,148798,148802,148806,148823,148839,148855,148871,148881,148885],{"__ignoreMap":10},[91,148538,148539,148541,148543,148545,148547,148549],{"class":93,"line":94},[91,148540,30712],{"class":97},[91,148542,147354],{"class":101},[91,148544,30367],{"class":97},[91,148546,147359],{"class":101},[91,148548,31358],{"class":97},[91,148550,147364],{"class":101},[91,148552,148553,148555,148557,148559],{"class":93,"line":11},[91,148554,30712],{"class":97},[91,148556,147213],{"class":101},[91,148558,30367],{"class":97},[91,148560,147218],{"class":101},[91,148562,148563],{"class":93,"line":1157},[91,148564,2378],{"emptyLinePlaceholder":17},[91,148566,148567,148569,148571],{"class":93,"line":1172},[91,148568,148440],{"class":101},[91,148570,147],{"class":97},[91,148572,55422],{"class":101},[91,148574,148575,148577,148579,148581,148584,148586,148588,148590,148592],{"class":93,"line":1178},[91,148576,148360],{"class":101},[91,148578,147972],{"class":206},[91,148580,51412],{"class":101},[91,148582,148583],{"class":206},"\"2024-10-01\"",[91,148585,12414],{"class":101},[91,148587,84059],{"class":206},[91,148589,51412],{"class":101},[91,148591,91998],{"class":150},[91,148593,4908],{"class":101},[91,148595,148596,148598,148600,148602,148605,148607,148609,148611,148614],{"class":93,"line":1192},[91,148597,148360],{"class":101},[91,148599,147972],{"class":206},[91,148601,51412],{"class":101},[91,148603,148604],{"class":206},"\"2024-10-02\"",[91,148606,12414],{"class":101},[91,148608,84059],{"class":206},[91,148610,51412],{"class":101},[91,148612,148613],{"class":150},"1800",[91,148615,4908],{"class":101},[91,148617,148618,148620,148622,148624,148627,148629,148631,148633,148636],{"class":93,"line":1198},[91,148619,148360],{"class":101},[91,148621,147972],{"class":206},[91,148623,51412],{"class":101},[91,148625,148626],{"class":206},"\"2024-10-03\"",[91,148628,12414],{"class":101},[91,148630,84059],{"class":206},[91,148632,51412],{"class":101},[91,148634,148635],{"class":150},"1500",[91,148637,4908],{"class":101},[91,148639,148640,148642,148644,148646,148649,148651,148653,148655,148658],{"class":93,"line":1289},[91,148641,148360],{"class":101},[91,148643,147972],{"class":206},[91,148645,51412],{"class":101},[91,148647,148648],{"class":206},"\"2024-10-04\"",[91,148650,12414],{"class":101},[91,148652,84059],{"class":206},[91,148654,51412],{"class":101},[91,148656,148657],{"class":150},"2100",[91,148659,4908],{"class":101},[91,148661,148662,148664,148666,148668,148671,148673,148675,148677,148680],{"class":93,"line":1295},[91,148663,148360],{"class":101},[91,148665,147972],{"class":206},[91,148667,51412],{"class":101},[91,148669,148670],{"class":206},"\"2024-10-05\"",[91,148672,12414],{"class":101},[91,148674,84059],{"class":206},[91,148676,51412],{"class":101},[91,148678,148679],{"class":150},"2600",[91,148681,4908],{"class":101},[91,148683,148684],{"class":93,"line":1307},[91,148685,33221],{"class":101},[91,148687,148688],{"class":93,"line":1590},[91,148689,2378],{"emptyLinePlaceholder":17},[91,148691,148692,148694,148696,148699,148701,148703,148705,148707,148709],{"class":93,"line":1595},[91,148693,147775],{"class":101},[91,148695,147],{"class":97},[91,148697,148698],{"class":101}," [item[",[91,148700,147972],{"class":206},[91,148702,4421],{"class":101},[91,148704,3003],{"class":97},[91,148706,148184],{"class":101},[91,148708,26018],{"class":97},[91,148710,148711],{"class":101}," sales]\n",[91,148713,148714,148717,148719,148721,148723,148725,148727,148729,148731],{"class":93,"line":1601},[91,148715,148716],{"class":101},"amounts ",[91,148718,147],{"class":97},[91,148720,148698],{"class":101},[91,148722,84059],{"class":206},[91,148724,4421],{"class":101},[91,148726,3003],{"class":97},[91,148728,148184],{"class":101},[91,148730,26018],{"class":97},[91,148732,148711],{"class":101},[91,148734,148735],{"class":93,"line":1606},[91,148736,2378],{"emptyLinePlaceholder":17},[91,148738,148739,148741,148743],{"class":93,"line":1620},[91,148740,147227],{"class":101},[91,148742,147],{"class":97},[91,148744,147232],{"class":101},[91,148746,148747],{"class":93,"line":1625},[91,148748,147816],{"class":101},[91,148750,148751],{"class":93,"line":1631},[91,148752,147624],{"class":101},[91,148754,148755,148757,148759,148761],{"class":93,"line":1652},[91,148756,147629],{"class":5195},[91,148758,147],{"class":97},[91,148760,147270],{"class":206},[91,148762,31441],{"class":101},[91,148764,148765,148767,148769],{"class":93,"line":1657},[91,148766,147640],{"class":5195},[91,148768,147],{"class":97},[91,148770,148771],{"class":101},"amounts,\n",[91,148773,148774,148776,148778,148780],{"class":93,"line":1671},[91,148775,147669],{"class":5195},[91,148777,147],{"class":97},[91,148779,31451],{"class":150},[91,148781,31441],{"class":101},[91,148783,148784,148786,148788,148790,148792,148794,148796],{"class":93,"line":1676},[91,148785,147680],{"class":5195},[91,148787,147],{"class":97},[91,148789,147685],{"class":101},[91,148791,147688],{"class":5195},[91,148793,147],{"class":97},[91,148795,31451],{"class":150},[91,148797,38022],{"class":101},[91,148799,148800],{"class":93,"line":1705},[91,148801,108],{"class":101},[91,148803,148804],{"class":93,"line":1710},[91,148805,147443],{"class":101},[91,148807,148808,148810,148812,148814,148816,148818,148821],{"class":93,"line":1727},[91,148809,147448],{"class":5195},[91,148811,147],{"class":97},[91,148813,147453],{"class":101},[91,148815,51382],{"class":5195},[91,148817,147],{"class":97},[91,148819,148820],{"class":206},"\"每日销售额\"",[91,148822,38022],{"class":101},[91,148824,148825,148827,148829,148831,148833,148835,148837],{"class":93,"line":1732},[91,148826,147467],{"class":5195},[91,148828,147],{"class":97},[91,148830,147472],{"class":101},[91,148832,79785],{"class":5195},[91,148834,147],{"class":97},[91,148836,147479],{"class":206},[91,148838,38022],{"class":101},[91,148840,148841,148843,148845,148847,148849,148851,148853],{"class":93,"line":1737},[91,148842,147486],{"class":5195},[91,148844,147],{"class":97},[91,148846,147472],{"class":101},[91,148848,79785],{"class":5195},[91,148850,147],{"class":97},[91,148852,147497],{"class":206},[91,148854,38022],{"class":101},[91,148856,148857,148859,148861,148863,148865,148867,148869],{"class":93,"line":1742},[91,148858,147504],{"class":5195},[91,148860,147],{"class":97},[91,148862,147509],{"class":101},[91,148864,147512],{"class":5195},[91,148866,147],{"class":97},[91,148868,147517],{"class":206},[91,148870,38022],{"class":101},[91,148872,148873,148876,148878],{"class":93,"line":1756},[91,148874,148875],{"class":5195},"    datazoom_opts",[91,148877,147],{"class":97},[91,148879,148880],{"class":101},"[opts.DataZoomOpts()],\n",[91,148882,148883],{"class":93,"line":1761},[91,148884,108],{"class":101},[91,148886,148887,148889,148892],{"class":93,"line":2555},[91,148888,147299],{"class":101},[91,148890,148891],{"class":206},"\"daily_sales.html\"",[91,148893,108],{"class":101},[38,148895,148896,148899],{},[88,148897,148898],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[33,148901,148903],{"id":148902},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[38,148905,148906],{},"如果数据结构如下：",[83,148908,148910],{"className":30353,"code":148909,"language":30355,"meta":10,"style":10},"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",[88,148911,148912,148920,148928,148950,148971,148976,148983,149003,149023,149027],{"__ignoreMap":10},[91,148913,148914,148916,148918],{"class":93,"line":94},[91,148915,101633],{"class":101},[91,148917,147],{"class":97},[91,148919,15551],{"class":101},[91,148921,148922,148925],{"class":93,"line":11},[91,148923,148924],{"class":206},"    \"北京\"",[91,148926,148927],{"class":101},": [\n",[91,148929,148930,148932,148934,148936,148939,148941,148944,148946,148948],{"class":93,"line":1157},[91,148931,4895],{"class":101},[91,148933,147972],{"class":206},[91,148935,51412],{"class":101},[91,148937,148938],{"class":206},"\"2024-01-01\"",[91,148940,12414],{"class":101},[91,148942,148943],{"class":206},"\"confirm\"",[91,148945,51412],{"class":101},[91,148947,548],{"class":150},[91,148949,4908],{"class":101},[91,148951,148952,148954,148956,148958,148961,148963,148965,148967,148969],{"class":93,"line":1172},[91,148953,4895],{"class":101},[91,148955,147972],{"class":206},[91,148957,51412],{"class":101},[91,148959,148960],{"class":206},"\"2024-01-02\"",[91,148962,12414],{"class":101},[91,148964,148943],{"class":206},[91,148966,51412],{"class":101},[91,148968,600],{"class":150},[91,148970,4908],{"class":101},[91,148972,148973],{"class":93,"line":1178},[91,148974,148975],{"class":101},"    ],\n",[91,148977,148978,148981],{"class":93,"line":1192},[91,148979,148980],{"class":206},"    \"上海\"",[91,148982,148927],{"class":101},[91,148984,148985,148987,148989,148991,148993,148995,148997,148999,149001],{"class":93,"line":1198},[91,148986,4895],{"class":101},[91,148988,147972],{"class":206},[91,148990,51412],{"class":101},[91,148992,148938],{"class":206},[91,148994,12414],{"class":101},[91,148996,148943],{"class":206},[91,148998,51412],{"class":101},[91,149000,497],{"class":150},[91,149002,4908],{"class":101},[91,149004,149005,149007,149009,149011,149013,149015,149017,149019,149021],{"class":93,"line":1289},[91,149006,4895],{"class":101},[91,149008,147972],{"class":206},[91,149010,51412],{"class":101},[91,149012,148960],{"class":206},[91,149014,12414],{"class":101},[91,149016,148943],{"class":206},[91,149018,51412],{"class":101},[91,149020,625],{"class":150},[91,149022,4908],{"class":101},[91,149024,149025],{"class":93,"line":1295},[91,149026,148975],{"class":101},[91,149028,149029],{"class":93,"line":1307},[91,149030,1543],{"class":101},[38,149032,149033],{},"绘制多地区趋势：",[83,149035,149037],{"className":30353,"code":149036,"language":30355,"meta":10,"style":10},"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",[88,149038,149039,149053,149063,149067,149092,149096,149104,149108,149112,149124,149146,149159,149163,149167,149184,149200,149204],{"__ignoreMap":10},[91,149040,149041,149043,149045,149047,149049,149051],{"class":93,"line":94},[91,149042,30712],{"class":97},[91,149044,147354],{"class":101},[91,149046,30367],{"class":97},[91,149048,147359],{"class":101},[91,149050,31358],{"class":97},[91,149052,147364],{"class":101},[91,149054,149055,149057,149059,149061],{"class":93,"line":11},[91,149056,30712],{"class":97},[91,149058,147213],{"class":101},[91,149060,30367],{"class":97},[91,149062,147218],{"class":101},[91,149064,149065],{"class":93,"line":1157},[91,149066,2378],{"emptyLinePlaceholder":17},[91,149068,149069,149071,149073,149075,149077,149079,149081,149083,149085,149088,149090],{"class":93,"line":1172},[91,149070,147775],{"class":101},[91,149072,147],{"class":97},[91,149074,148698],{"class":101},[91,149076,147972],{"class":206},[91,149078,4421],{"class":101},[91,149080,3003],{"class":97},[91,149082,148184],{"class":101},[91,149084,26018],{"class":97},[91,149086,149087],{"class":101}," data[",[91,149089,69244],{"class":206},[91,149091,77502],{"class":101},[91,149093,149094],{"class":93,"line":1178},[91,149095,2378],{"emptyLinePlaceholder":17},[91,149097,149098,149100,149102],{"class":93,"line":1192},[91,149099,147227],{"class":101},[91,149101,147],{"class":97},[91,149103,147232],{"class":101},[91,149105,149106],{"class":93,"line":1198},[91,149107,147816],{"class":101},[91,149109,149110],{"class":93,"line":1289},[91,149111,2378],{"emptyLinePlaceholder":17},[91,149113,149114,149116,149119,149121],{"class":93,"line":1295},[91,149115,3003],{"class":97},[91,149117,149118],{"class":101}," city, records ",[91,149120,26018],{"class":97},[91,149122,149123],{"class":101}," data.items():\n",[91,149125,149126,149129,149131,149133,149135,149137,149139,149141,149143],{"class":93,"line":1307},[91,149127,149128],{"class":101},"    values ",[91,149130,147],{"class":97},[91,149132,148698],{"class":101},[91,149134,148943],{"class":206},[91,149136,4421],{"class":101},[91,149138,3003],{"class":97},[91,149140,148184],{"class":101},[91,149142,26018],{"class":97},[91,149144,149145],{"class":101}," records]\n",[91,149147,149148,149151,149153,149155,149157],{"class":93,"line":1590},[91,149149,149150],{"class":101},"    line.add_yaxis(city, values, ",[91,149152,147720],{"class":5195},[91,149154,147],{"class":97},[91,149156,31451],{"class":150},[91,149158,108],{"class":101},[91,149160,149161],{"class":93,"line":1595},[91,149162,2378],{"emptyLinePlaceholder":17},[91,149164,149165],{"class":93,"line":1601},[91,149166,147443],{"class":101},[91,149168,149169,149171,149173,149175,149177,149179,149182],{"class":93,"line":1606},[91,149170,147448],{"class":5195},[91,149172,147],{"class":97},[91,149174,147453],{"class":101},[91,149176,51382],{"class":5195},[91,149178,147],{"class":97},[91,149180,149181],{"class":206},"\"多地区趋势图\"",[91,149183,38022],{"class":101},[91,149185,149186,149188,149190,149192,149194,149196,149198],{"class":93,"line":1620},[91,149187,147504],{"class":5195},[91,149189,147],{"class":97},[91,149191,147509],{"class":101},[91,149193,147512],{"class":5195},[91,149195,147],{"class":97},[91,149197,147517],{"class":206},[91,149199,38022],{"class":101},[91,149201,149202],{"class":93,"line":1625},[91,149203,108],{"class":101},[91,149205,149206,149208,149211],{"class":93,"line":1631},[91,149207,147299],{"class":101},[91,149209,149210],{"class":206},"\"trend.html\"",[91,149212,108],{"class":101},[38,149214,149215],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[33,149217,149219],{"id":149218},"_1012-易错点","10.12 易错点",[46,149221,149222,149228,149234,149244,149250],{},[49,149223,149224,149227],{},[88,149225,149226],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[49,149229,149230,149233],{},[88,149231,149232],{},"render()"," 生成的是 HTML，不是图片。",[49,149235,149236,149237,149240,149241,28360],{},"JSON 字符串用 ",[88,149238,149239],{},"json.loads()","，JSON 文件用 ",[88,149242,149243],{},"json.load()",[49,149245,149246,149247,28360],{},"中文 JSON 保存时加 ",[88,149248,149249],{},"ensure_ascii=False",[49,149251,149252],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[33,149254,149256],{"id":149255},"_1013-本章练习","10.13 本章练习",[46,149258,149259,149262,149265,149268,149271],{},[49,149260,149261],{},"安装 pyecharts 并生成第一个折线图。",[49,149263,149264],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[49,149266,149267],{},"绘制两条折线，对比线上和线下销售额。",[49,149269,149270],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[49,149272,149273],{},"对含有空值的销售数据进行清洗后再绘图。",[5105,149275,149276],{},"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":10,"searchDepth":11,"depth":11,"links":149278},[149279,149280,149281,149282,149283,149284,149285,149286,149287,149288,149289,149290,149291],{"id":146895,"depth":11,"text":146896},{"id":146970,"depth":11,"text":146971},{"id":147149,"depth":11,"text":147150},{"id":147200,"depth":11,"text":147201},{"id":147334,"depth":11,"text":147335},{"id":147610,"depth":11,"text":147611},{"id":147736,"depth":11,"text":147737},{"id":147947,"depth":11,"text":147948},{"id":148318,"depth":11,"text":148319},{"id":148530,"depth":11,"text":148531},{"id":148902,"depth":11,"text":148903},{"id":149218,"depth":11,"text":149219},{"id":149255,"depth":11,"text":149256},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146887,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149298,"title":149299,"body":149300,"description":13,"extension":14,"meta":151660,"navigation":17,"path":151661,"seo":151662,"stem":151663,"__hash__":151664},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149301,"toc":151637},[149302,149305,149309,149312,149315,149391,149394,149485,149488,149492,149495,149539,149552,149556,149559,149626,149629,149633,149636,149720,149728,149732,149737,149878,149881,149892,149898,149904,150018,150022,150025,150028,150281,150284,150288,150291,150395,150398,150402,150553,150557,150564,150677,150681,150684,150790,150793,150797,150800,150831,150834,150939,150942,150946,150950,150960,151028,151032,151039,151103,151106,151110,151116,151212,151221,151225,151549,151558,151562,151590,151594,151634],[29,149303,149299],{"id":149304},"_11-面向对象基础",[33,149306,149308],{"id":149307},"_111-什么是面向对象","11.1 什么是面向对象",[38,149310,149311],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[38,149313,149314],{},"面向过程：",[83,149316,149318],{"className":30353,"code":149317,"language":30355,"meta":10,"style":10},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[88,149319,149320,149329,149337,149341,149351,149382,149386],{"__ignoreMap":10},[91,149321,149322,149324,149326],{"class":93,"line":94},[91,149323,146511],{"class":101},[91,149325,147],{"class":97},[91,149327,149328],{"class":206}," \"小明\"\n",[91,149330,149331,149333,149335],{"class":93,"line":11},[91,149332,146521],{"class":101},[91,149334,147],{"class":97},[91,149336,146526],{"class":150},[91,149338,149339],{"class":93,"line":1157},[91,149340,2378],{"emptyLinePlaceholder":17},[91,149342,149343,149345,149348],{"class":93,"line":1172},[91,149344,31922],{"class":97},[91,149346,149347],{"class":1941}," introduce",[91,149349,149350],{"class":101},"(name, age):\n",[91,149352,149353,149355,149357,149359,149362,149364,149366,149368,149371,149373,149375,149377,149380],{"class":93,"line":1178},[91,149354,31274],{"class":150},[91,149356,102],{"class":101},[91,149358,154],{"class":97},[91,149360,149361],{"class":206},"\"我叫",[91,149363,998],{"class":150},[91,149365,79785],{"class":101},[91,149367,1048],{"class":150},[91,149369,149370],{"class":206},"，今年",[91,149372,998],{"class":150},[91,149374,70196],{"class":101},[91,149376,1048],{"class":150},[91,149378,149379],{"class":206},"岁\"",[91,149381,108],{"class":101},[91,149383,149384],{"class":93,"line":1192},[91,149385,2378],{"emptyLinePlaceholder":17},[91,149387,149388],{"class":93,"line":1198},[91,149389,149390],{"class":101},"introduce(name, age)\n",[38,149392,149393],{},"面向对象：",[83,149395,149397],{"className":30353,"code":149396,"language":30355,"meta":10,"style":10},"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",[88,149398,149399,149407,149415,149444,149448,149452,149462,149471,149480],{"__ignoreMap":10},[91,149400,149401,149403,149405],{"class":93,"line":94},[91,149402,14673],{"class":97},[91,149404,7877],{"class":1941},[91,149406,3717],{"class":101},[91,149408,149409,149411,149413],{"class":93,"line":11},[91,149410,30776],{"class":97},[91,149412,149347],{"class":1941},[91,149414,30782],{"class":101},[91,149416,149417,149419,149421,149423,149425,149428,149430,149432,149434,149436,149438,149440,149442],{"class":93,"line":1157},[91,149418,32426],{"class":150},[91,149420,102],{"class":101},[91,149422,154],{"class":97},[91,149424,149361],{"class":206},[91,149426,149427],{"class":150},"{self",[91,149429,80276],{"class":101},[91,149431,1048],{"class":150},[91,149433,149370],{"class":206},[91,149435,149427],{"class":150},[91,149437,80288],{"class":101},[91,149439,1048],{"class":150},[91,149441,149379],{"class":206},[91,149443,108],{"class":101},[91,149445,149446],{"class":93,"line":1172},[91,149447,2378],{"emptyLinePlaceholder":17},[91,149449,149450],{"class":93,"line":1178},[91,149451,2378],{"emptyLinePlaceholder":17},[91,149453,149454,149457,149459],{"class":93,"line":1192},[91,149455,149456],{"class":101},"student ",[91,149458,147],{"class":97},[91,149460,149461],{"class":101}," Student()\n",[91,149463,149464,149467,149469],{"class":93,"line":1198},[91,149465,149466],{"class":101},"student.name ",[91,149468,147],{"class":97},[91,149470,149328],{"class":206},[91,149472,149473,149476,149478],{"class":93,"line":1289},[91,149474,149475],{"class":101},"student.age ",[91,149477,147],{"class":97},[91,149479,146526],{"class":150},[91,149481,149482],{"class":93,"line":1295},[91,149483,149484],{"class":101},"student.introduce()\n",[38,149486,149487],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[33,149489,149491],{"id":149490},"_112-类和对象","11.2 类和对象",[38,149493,149494],{},"类是模板，对象是根据模板创建出来的具体实例。",[83,149496,149498],{"className":30353,"code":149497,"language":30355,"meta":10,"style":10},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[88,149499,149500,149508,149513,149517,149521,149530],{"__ignoreMap":10},[91,149501,149502,149504,149506],{"class":93,"line":94},[91,149503,14673],{"class":97},[91,149505,7877],{"class":1941},[91,149507,3717],{"class":101},[91,149509,149510],{"class":93,"line":11},[91,149511,149512],{"class":97},"    pass\n",[91,149514,149515],{"class":93,"line":1157},[91,149516,2378],{"emptyLinePlaceholder":17},[91,149518,149519],{"class":93,"line":1172},[91,149520,2378],{"emptyLinePlaceholder":17},[91,149522,149523,149526,149528],{"class":93,"line":1178},[91,149524,149525],{"class":101},"student1 ",[91,149527,147],{"class":97},[91,149529,149461],{"class":101},[91,149531,149532,149535,149537],{"class":93,"line":1192},[91,149533,149534],{"class":101},"student2 ",[91,149536,147],{"class":97},[91,149538,149461],{"class":101},[38,149540,149541,149544,149545,100993,149548,149551],{},[88,149542,149543],{},"Student"," 是类，",[88,149546,149547],{},"student1",[88,149549,149550],{},"student2"," 是对象。",[33,149553,149555],{"id":149554},"_113-属性","11.3 属性",[38,149557,149558],{},"属性是对象保存的数据。",[83,149560,149562],{"className":30353,"code":149561,"language":30355,"meta":10,"style":10},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[88,149563,149564,149572,149576,149580,149584,149592,149600,149608,149612,149619],{"__ignoreMap":10},[91,149565,149566,149568,149570],{"class":93,"line":94},[91,149567,14673],{"class":97},[91,149569,7877],{"class":1941},[91,149571,3717],{"class":101},[91,149573,149574],{"class":93,"line":11},[91,149575,149512],{"class":97},[91,149577,149578],{"class":93,"line":1157},[91,149579,2378],{"emptyLinePlaceholder":17},[91,149581,149582],{"class":93,"line":1172},[91,149583,2378],{"emptyLinePlaceholder":17},[91,149585,149586,149588,149590],{"class":93,"line":1178},[91,149587,149456],{"class":101},[91,149589,147],{"class":97},[91,149591,149461],{"class":101},[91,149593,149594,149596,149598],{"class":93,"line":1192},[91,149595,149466],{"class":101},[91,149597,147],{"class":97},[91,149599,149328],{"class":206},[91,149601,149602,149604,149606],{"class":93,"line":1198},[91,149603,149475],{"class":101},[91,149605,147],{"class":97},[91,149607,146526],{"class":150},[91,149609,149610],{"class":93,"line":1289},[91,149611,2378],{"emptyLinePlaceholder":17},[91,149613,149614,149616],{"class":93,"line":1295},[91,149615,30390],{"class":150},[91,149617,149618],{"class":101},"(student.name)\n",[91,149620,149621,149623],{"class":93,"line":1307},[91,149622,30390],{"class":150},[91,149624,149625],{"class":101},"(student.age)\n",[38,149627,149628],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[33,149630,149632],{"id":149631},"_114-方法","11.4 方法",[38,149634,149635],{},"类中的函数叫方法。",[83,149637,149638],{"className":30353,"code":149396,"language":30355,"meta":10,"style":10},[88,149639,149640,149648,149656,149684,149688,149692,149700,149708,149716],{"__ignoreMap":10},[91,149641,149642,149644,149646],{"class":93,"line":94},[91,149643,14673],{"class":97},[91,149645,7877],{"class":1941},[91,149647,3717],{"class":101},[91,149649,149650,149652,149654],{"class":93,"line":11},[91,149651,30776],{"class":97},[91,149653,149347],{"class":1941},[91,149655,30782],{"class":101},[91,149657,149658,149660,149662,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682],{"class":93,"line":1157},[91,149659,32426],{"class":150},[91,149661,102],{"class":101},[91,149663,154],{"class":97},[91,149665,149361],{"class":206},[91,149667,149427],{"class":150},[91,149669,80276],{"class":101},[91,149671,1048],{"class":150},[91,149673,149370],{"class":206},[91,149675,149427],{"class":150},[91,149677,80288],{"class":101},[91,149679,1048],{"class":150},[91,149681,149379],{"class":206},[91,149683,108],{"class":101},[91,149685,149686],{"class":93,"line":1172},[91,149687,2378],{"emptyLinePlaceholder":17},[91,149689,149690],{"class":93,"line":1178},[91,149691,2378],{"emptyLinePlaceholder":17},[91,149693,149694,149696,149698],{"class":93,"line":1192},[91,149695,149456],{"class":101},[91,149697,147],{"class":97},[91,149699,149461],{"class":101},[91,149701,149702,149704,149706],{"class":93,"line":1198},[91,149703,149466],{"class":101},[91,149705,147],{"class":97},[91,149707,149328],{"class":206},[91,149709,149710,149712,149714],{"class":93,"line":1289},[91,149711,149475],{"class":101},[91,149713,147],{"class":97},[91,149715,146526],{"class":150},[91,149717,149718],{"class":93,"line":1295},[91,149719,149484],{"class":101},[38,149721,149722,149724,149725,149727],{},[88,149723,30798],{}," 表示当前对象。调用方法时不需要手动传入 ",[88,149726,30798],{},"，Python 会自动传。",[33,149729,149731],{"id":149730},"_115-构造方法__init__","11.5 构造方法__init__",[38,149733,149734,149736],{},[88,149735,30804],{}," 在对象创建时自动执行，用于初始化属性。",[83,149738,149740],{"className":30353,"code":149739,"language":30355,"meta":10,"style":10},"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",[88,149741,149742,149750,149759,149771,149783,149794,149798,149806,149844,149848,149852,149874],{"__ignoreMap":10},[91,149743,149744,149746,149748],{"class":93,"line":94},[91,149745,14673],{"class":97},[91,149747,7877],{"class":1941},[91,149749,3717],{"class":101},[91,149751,149752,149754,149756],{"class":93,"line":11},[91,149753,30776],{"class":97},[91,149755,30779],{"class":150},[91,149757,149758],{"class":101},"(self, name, age, score):\n",[91,149760,149761,149763,149766,149768],{"class":93,"line":1157},[91,149762,30820],{"class":150},[91,149764,149765],{"class":101},".name ",[91,149767,147],{"class":97},[91,149769,149770],{"class":101}," name\n",[91,149772,149773,149775,149778,149780],{"class":93,"line":1172},[91,149774,30820],{"class":150},[91,149776,149777],{"class":101},".age ",[91,149779,147],{"class":97},[91,149781,149782],{"class":101}," age\n",[91,149784,149785,149787,149790,149792],{"class":93,"line":1178},[91,149786,30820],{"class":150},[91,149788,149789],{"class":101},".score ",[91,149791,147],{"class":97},[91,149793,1557],{"class":101},[91,149795,149796],{"class":93,"line":1192},[91,149797,2378],{"emptyLinePlaceholder":17},[91,149799,149800,149802,149804],{"class":93,"line":1198},[91,149801,30776],{"class":97},[91,149803,149347],{"class":1941},[91,149805,30782],{"class":101},[91,149807,149808,149810,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830,149833,149835,149838,149840,149842],{"class":93,"line":1289},[91,149809,32426],{"class":150},[91,149811,102],{"class":101},[91,149813,154],{"class":97},[91,149815,149361],{"class":206},[91,149817,149427],{"class":150},[91,149819,80276],{"class":101},[91,149821,1048],{"class":150},[91,149823,149370],{"class":206},[91,149825,149427],{"class":150},[91,149827,80288],{"class":101},[91,149829,1048],{"class":150},[91,149831,149832],{"class":206},"岁，成绩",[91,149834,149427],{"class":150},[91,149836,149837],{"class":101},".score",[91,149839,1048],{"class":150},[91,149841,353],{"class":206},[91,149843,108],{"class":101},[91,149845,149846],{"class":93,"line":1295},[91,149847,2378],{"emptyLinePlaceholder":17},[91,149849,149850],{"class":93,"line":1307},[91,149851,2378],{"emptyLinePlaceholder":17},[91,149853,149854,149856,149858,149861,149864,149866,149868,149870,149872],{"class":93,"line":1590},[91,149855,149456],{"class":101},[91,149857,147],{"class":97},[91,149859,149860],{"class":101}," Student(",[91,149862,149863],{"class":206},"\"小明\"",[91,149865,12414],{"class":101},[91,149867,752],{"class":150},[91,149869,12414],{"class":101},[91,149871,1091],{"class":150},[91,149873,108],{"class":101},[91,149875,149876],{"class":93,"line":1595},[91,149877,149484],{"class":101},[38,149879,149880],{},"构造方法的好处：",[46,149882,149883,149886,149889],{},[49,149884,149885],{},"创建对象时必须提供必要数据。",[49,149887,149888],{},"属性初始化集中，不容易漏。",[49,149890,149891],{},"对象状态更完整。",[33,149893,149895,149896],{"id":149894},"_116-str","11.6 ",[251,149897,1277],{},[38,149899,149900,149901,28360],{},"直接打印对象时，默认输出不直观。可以定义 ",[88,149902,149903],{},"__str__",[83,149905,149907],{"className":30353,"code":149906,"language":30355,"meta":10,"style":10},"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",[88,149908,149909,149917,149926,149936,149946,149950,149959,149987,149991,149995,150011],{"__ignoreMap":10},[91,149910,149911,149913,149915],{"class":93,"line":94},[91,149912,14673],{"class":97},[91,149914,7877],{"class":1941},[91,149916,3717],{"class":101},[91,149918,149919,149921,149923],{"class":93,"line":11},[91,149920,30776],{"class":97},[91,149922,30779],{"class":150},[91,149924,149925],{"class":101},"(self, name, age):\n",[91,149927,149928,149930,149932,149934],{"class":93,"line":1157},[91,149929,30820],{"class":150},[91,149931,149765],{"class":101},[91,149933,147],{"class":97},[91,149935,149770],{"class":101},[91,149937,149938,149940,149942,149944],{"class":93,"line":1172},[91,149939,30820],{"class":150},[91,149941,149777],{"class":101},[91,149943,147],{"class":97},[91,149945,149782],{"class":101},[91,149947,149948],{"class":93,"line":1178},[91,149949,2378],{"emptyLinePlaceholder":17},[91,149951,149952,149954,149957],{"class":93,"line":1192},[91,149953,30776],{"class":97},[91,149955,149956],{"class":150}," __str__",[91,149958,30782],{"class":101},[91,149960,149961,149963,149966,149969,149971,149973,149975,149978,149980,149982,149984],{"class":93,"line":1198},[91,149962,14731],{"class":97},[91,149964,149965],{"class":97}," f",[91,149967,149968],{"class":206},"\"Student(name=",[91,149970,149427],{"class":150},[91,149972,80276],{"class":101},[91,149974,1048],{"class":150},[91,149976,149977],{"class":206},", age=",[91,149979,149427],{"class":150},[91,149981,80288],{"class":101},[91,149983,1048],{"class":150},[91,149985,149986],{"class":206},")\"\n",[91,149988,149989],{"class":93,"line":1289},[91,149990,2378],{"emptyLinePlaceholder":17},[91,149992,149993],{"class":93,"line":1295},[91,149994,2378],{"emptyLinePlaceholder":17},[91,149996,149997,149999,150001,150003,150005,150007,150009],{"class":93,"line":1307},[91,149998,149456],{"class":101},[91,150000,147],{"class":97},[91,150002,149860],{"class":101},[91,150004,149863],{"class":206},[91,150006,12414],{"class":101},[91,150008,752],{"class":150},[91,150010,108],{"class":101},[91,150012,150013,150015],{"class":93,"line":1590},[91,150014,30390],{"class":150},[91,150016,150017],{"class":101},"(student)\n",[33,150019,150021],{"id":150020},"_117-封装","11.7 封装",[38,150023,150024],{},"封装就是把数据和方法放到类中，并控制访问方式。",[38,150026,150027],{},"Python 中以双下划线开头的属性通常视为私有属性。",[83,150029,150031],{"className":30353,"code":150030,"language":30355,"meta":10,"style":10},"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",[88,150032,150033,150042,150051,150063,150075,150079,150088,150097,150101,150111,150124,150135,150140,150151,150155,150164,150176,150187,150191,150204,150215,150219,150230,150234,150238,150256,150265,150274],{"__ignoreMap":10},[91,150034,150035,150037,150040],{"class":93,"line":94},[91,150036,14673],{"class":97},[91,150038,150039],{"class":1941}," Account",[91,150041,3717],{"class":101},[91,150043,150044,150046,150048],{"class":93,"line":11},[91,150045,30776],{"class":97},[91,150047,30779],{"class":150},[91,150049,150050],{"class":101},"(self, owner, balance):\n",[91,150052,150053,150055,150058,150060],{"class":93,"line":1157},[91,150054,30820],{"class":150},[91,150056,150057],{"class":101},".owner ",[91,150059,147],{"class":97},[91,150061,150062],{"class":101}," owner\n",[91,150064,150065,150067,150070,150072],{"class":93,"line":1172},[91,150066,30820],{"class":150},[91,150068,150069],{"class":101},".__balance ",[91,150071,147],{"class":97},[91,150073,150074],{"class":101}," balance\n",[91,150076,150077],{"class":93,"line":1178},[91,150078,2378],{"emptyLinePlaceholder":17},[91,150080,150081,150083,150086],{"class":93,"line":1192},[91,150082,30776],{"class":97},[91,150084,150085],{"class":1941}," get_balance",[91,150087,30782],{"class":101},[91,150089,150090,150092,150094],{"class":93,"line":1198},[91,150091,14731],{"class":97},[91,150093,38848],{"class":150},[91,150095,150096],{"class":101},".__balance\n",[91,150098,150099],{"class":93,"line":1289},[91,150100,2378],{"emptyLinePlaceholder":17},[91,150102,150103,150105,150108],{"class":93,"line":1295},[91,150104,30776],{"class":97},[91,150106,150107],{"class":1941}," deposit",[91,150109,150110],{"class":101},"(self, money):\n",[91,150112,150113,150115,150118,150120,150122],{"class":93,"line":1307},[91,150114,2475],{"class":97},[91,150116,150117],{"class":101}," money ",[91,150119,1566],{"class":97},[91,150121,4071],{"class":150},[91,150123,3717],{"class":101},[91,150125,150126,150128,150130,150133],{"class":93,"line":1590},[91,150127,34625],{"class":150},[91,150129,102],{"class":101},[91,150131,150132],{"class":206},"\"存款金额必须大于0\"",[91,150134,108],{"class":101},[91,150136,150137],{"class":93,"line":1595},[91,150138,150139],{"class":97},"            return\n",[91,150141,150142,150144,150146,150148],{"class":93,"line":1601},[91,150143,30820],{"class":150},[91,150145,150069],{"class":101},[91,150147,9456],{"class":97},[91,150149,150150],{"class":101}," money\n",[91,150152,150153],{"class":93,"line":1606},[91,150154,2378],{"emptyLinePlaceholder":17},[91,150156,150157,150159,150162],{"class":93,"line":1620},[91,150158,30776],{"class":97},[91,150160,150161],{"class":1941}," withdraw",[91,150163,150110],{"class":101},[91,150165,150166,150168,150170,150172,150174],{"class":93,"line":1625},[91,150167,2475],{"class":97},[91,150169,150117],{"class":101},[91,150171,1566],{"class":97},[91,150173,4071],{"class":150},[91,150175,3717],{"class":101},[91,150177,150178,150180,150182,150185],{"class":93,"line":1631},[91,150179,34625],{"class":150},[91,150181,102],{"class":101},[91,150183,150184],{"class":206},"\"取款金额必须大于0\"",[91,150186,108],{"class":101},[91,150188,150189],{"class":93,"line":1652},[91,150190,150139],{"class":97},[91,150192,150193,150195,150197,150199,150201],{"class":93,"line":1657},[91,150194,2475],{"class":97},[91,150196,150117],{"class":101},[91,150198,1062],{"class":97},[91,150200,38848],{"class":150},[91,150202,150203],{"class":101},".__balance:\n",[91,150205,150206,150208,150210,150213],{"class":93,"line":1671},[91,150207,34625],{"class":150},[91,150209,102],{"class":101},[91,150211,150212],{"class":206},"\"余额不足\"",[91,150214,108],{"class":101},[91,150216,150217],{"class":93,"line":1676},[91,150218,150139],{"class":97},[91,150220,150221,150223,150225,150228],{"class":93,"line":1705},[91,150222,30820],{"class":150},[91,150224,150069],{"class":101},[91,150226,150227],{"class":97},"-=",[91,150229,150150],{"class":101},[91,150231,150232],{"class":93,"line":1710},[91,150233,2378],{"emptyLinePlaceholder":17},[91,150235,150236],{"class":93,"line":1727},[91,150237,2378],{"emptyLinePlaceholder":17},[91,150239,150240,150243,150245,150248,150250,150252,150254],{"class":93,"line":1732},[91,150241,150242],{"class":101},"account ",[91,150244,147],{"class":97},[91,150246,150247],{"class":101}," Account(",[91,150249,149863],{"class":206},[91,150251,12414],{"class":101},[91,150253,6389],{"class":150},[91,150255,108],{"class":101},[91,150257,150258,150261,150263],{"class":93,"line":1737},[91,150259,150260],{"class":101},"account.deposit(",[91,150262,1700],{"class":150},[91,150264,108],{"class":101},[91,150266,150267,150270,150272],{"class":93,"line":1742},[91,150268,150269],{"class":101},"account.withdraw(",[91,150271,413],{"class":150},[91,150273,108],{"class":101},[91,150275,150276,150278],{"class":93,"line":1756},[91,150277,30390],{"class":150},[91,150279,150280],{"class":101},"(account.get_balance())\n",[38,150282,150283],{},"封装的意义是避免外部随意修改内部状态。",[33,150285,150287],{"id":150286},"_118-继承","11.8 继承",[38,150289,150290],{},"继承可以让子类复用父类的属性和方法。",[83,150292,150294],{"className":30353,"code":150293,"language":30355,"meta":10,"style":10},"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",[88,150295,150296,150305,150314,150325,150329,150333,150347,150356,150367,150371,150375,150385,150390],{"__ignoreMap":10},[91,150297,150298,150300,150303],{"class":93,"line":94},[91,150299,14673],{"class":97},[91,150301,150302],{"class":1941}," Animal",[91,150304,3717],{"class":101},[91,150306,150307,150309,150312],{"class":93,"line":11},[91,150308,30776],{"class":97},[91,150310,150311],{"class":1941}," eat",[91,150313,30782],{"class":101},[91,150315,150316,150318,150320,150323],{"class":93,"line":1157},[91,150317,32426],{"class":150},[91,150319,102],{"class":101},[91,150321,150322],{"class":206},"\"吃东西\"",[91,150324,108],{"class":101},[91,150326,150327],{"class":93,"line":1172},[91,150328,2378],{"emptyLinePlaceholder":17},[91,150330,150331],{"class":93,"line":1178},[91,150332,2378],{"emptyLinePlaceholder":17},[91,150334,150335,150337,150340,150342,150345],{"class":93,"line":1192},[91,150336,14673],{"class":97},[91,150338,150339],{"class":1941}," Dog",[91,150341,102],{"class":101},[91,150343,150344],{"class":1941},"Animal",[91,150346,30761],{"class":101},[91,150348,150349,150351,150354],{"class":93,"line":1198},[91,150350,30776],{"class":97},[91,150352,150353],{"class":1941}," bark",[91,150355,30782],{"class":101},[91,150357,150358,150360,150362,150365],{"class":93,"line":1289},[91,150359,32426],{"class":150},[91,150361,102],{"class":101},[91,150363,150364],{"class":206},"\"汪汪\"",[91,150366,108],{"class":101},[91,150368,150369],{"class":93,"line":1295},[91,150370,2378],{"emptyLinePlaceholder":17},[91,150372,150373],{"class":93,"line":1307},[91,150374,2378],{"emptyLinePlaceholder":17},[91,150376,150377,150380,150382],{"class":93,"line":1590},[91,150378,150379],{"class":101},"dog ",[91,150381,147],{"class":97},[91,150383,150384],{"class":101}," Dog()\n",[91,150386,150387],{"class":93,"line":1595},[91,150388,150389],{"class":101},"dog.eat()\n",[91,150391,150392],{"class":93,"line":1601},[91,150393,150394],{"class":101},"dog.bark()\n",[38,150396,150397],{},"子类可以扩展新方法，也可以重写父类方法。",[33,150399,150401],{"id":150400},"_119-方法重写","11.9 方法重写",[83,150403,150405],{"className":30353,"code":150404,"language":30355,"meta":10,"style":10},"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",[88,150406,150407,150415,150424,150435,150439,150443,150455,150463,150473,150477,150481,150494,150502,150513,150517,150521,150529,150539,150543,150548],{"__ignoreMap":10},[91,150408,150409,150411,150413],{"class":93,"line":94},[91,150410,14673],{"class":97},[91,150412,150302],{"class":1941},[91,150414,3717],{"class":101},[91,150416,150417,150419,150422],{"class":93,"line":11},[91,150418,30776],{"class":97},[91,150420,150421],{"class":1941}," speak",[91,150423,30782],{"class":101},[91,150425,150426,150428,150430,150433],{"class":93,"line":1157},[91,150427,32426],{"class":150},[91,150429,102],{"class":101},[91,150431,150432],{"class":206},"\"动物叫\"",[91,150434,108],{"class":101},[91,150436,150437],{"class":93,"line":1172},[91,150438,2378],{"emptyLinePlaceholder":17},[91,150440,150441],{"class":93,"line":1178},[91,150442,2378],{"emptyLinePlaceholder":17},[91,150444,150445,150447,150449,150451,150453],{"class":93,"line":1192},[91,150446,14673],{"class":97},[91,150448,150339],{"class":1941},[91,150450,102],{"class":101},[91,150452,150344],{"class":1941},[91,150454,30761],{"class":101},[91,150456,150457,150459,150461],{"class":93,"line":1198},[91,150458,30776],{"class":97},[91,150460,150421],{"class":1941},[91,150462,30782],{"class":101},[91,150464,150465,150467,150469,150471],{"class":93,"line":1289},[91,150466,32426],{"class":150},[91,150468,102],{"class":101},[91,150470,150364],{"class":206},[91,150472,108],{"class":101},[91,150474,150475],{"class":93,"line":1295},[91,150476,2378],{"emptyLinePlaceholder":17},[91,150478,150479],{"class":93,"line":1307},[91,150480,2378],{"emptyLinePlaceholder":17},[91,150482,150483,150485,150488,150490,150492],{"class":93,"line":1590},[91,150484,14673],{"class":97},[91,150486,150487],{"class":1941}," Cat",[91,150489,102],{"class":101},[91,150491,150344],{"class":1941},[91,150493,30761],{"class":101},[91,150495,150496,150498,150500],{"class":93,"line":1595},[91,150497,30776],{"class":97},[91,150499,150421],{"class":1941},[91,150501,30782],{"class":101},[91,150503,150504,150506,150508,150511],{"class":93,"line":1601},[91,150505,32426],{"class":150},[91,150507,102],{"class":101},[91,150509,150510],{"class":206},"\"喵喵\"",[91,150512,108],{"class":101},[91,150514,150515],{"class":93,"line":1606},[91,150516,2378],{"emptyLinePlaceholder":17},[91,150518,150519],{"class":93,"line":1620},[91,150520,2378],{"emptyLinePlaceholder":17},[91,150522,150523,150525,150527],{"class":93,"line":1625},[91,150524,150379],{"class":101},[91,150526,147],{"class":97},[91,150528,150384],{"class":101},[91,150530,150531,150534,150536],{"class":93,"line":1631},[91,150532,150533],{"class":101},"cat ",[91,150535,147],{"class":97},[91,150537,150538],{"class":101}," Cat()\n",[91,150540,150541],{"class":93,"line":1652},[91,150542,2378],{"emptyLinePlaceholder":17},[91,150544,150545],{"class":93,"line":1657},[91,150546,150547],{"class":101},"dog.speak()\n",[91,150549,150550],{"class":93,"line":1671},[91,150551,150552],{"class":101},"cat.speak()\n",[33,150554,150556],{"id":150555},"_1110-super","11.10 super",[38,150558,150559,150560,150563],{},"子类可以通过 ",[88,150561,150562],{},"super()"," 调用父类方法。",[83,150565,150567],{"className":30353,"code":150566,"language":30355,"meta":10,"style":10},"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",[88,150568,150569,150577,150586,150596,150600,150604,150616,150625,150636,150646,150650,150654,150670],{"__ignoreMap":10},[91,150570,150571,150573,150575],{"class":93,"line":94},[91,150572,14673],{"class":97},[91,150574,15548],{"class":1941},[91,150576,3717],{"class":101},[91,150578,150579,150581,150583],{"class":93,"line":11},[91,150580,30776],{"class":97},[91,150582,30779],{"class":150},[91,150584,150585],{"class":101},"(self, name):\n",[91,150587,150588,150590,150592,150594],{"class":93,"line":1157},[91,150589,30820],{"class":150},[91,150591,149765],{"class":101},[91,150593,147],{"class":97},[91,150595,149770],{"class":101},[91,150597,150598],{"class":93,"line":1172},[91,150599,2378],{"emptyLinePlaceholder":17},[91,150601,150602],{"class":93,"line":1178},[91,150603,2378],{"emptyLinePlaceholder":17},[91,150605,150606,150608,150610,150612,150614],{"class":93,"line":1192},[91,150607,14673],{"class":97},[91,150609,7877],{"class":1941},[91,150611,102],{"class":101},[91,150613,19025],{"class":1941},[91,150615,30761],{"class":101},[91,150617,150618,150620,150622],{"class":93,"line":1198},[91,150619,30776],{"class":97},[91,150621,30779],{"class":150},[91,150623,150624],{"class":101},"(self, name, score):\n",[91,150626,150627,150629,150631,150633],{"class":93,"line":1289},[91,150628,30792],{"class":150},[91,150630,17240],{"class":101},[91,150632,30804],{"class":150},[91,150634,150635],{"class":101},"(name)\n",[91,150637,150638,150640,150642,150644],{"class":93,"line":1295},[91,150639,30820],{"class":150},[91,150641,149789],{"class":101},[91,150643,147],{"class":97},[91,150645,1557],{"class":101},[91,150647,150648],{"class":93,"line":1307},[91,150649,2378],{"emptyLinePlaceholder":17},[91,150651,150652],{"class":93,"line":1590},[91,150653,2378],{"emptyLinePlaceholder":17},[91,150655,150656,150658,150660,150662,150664,150666,150668],{"class":93,"line":1595},[91,150657,149456],{"class":101},[91,150659,147],{"class":97},[91,150661,149860],{"class":101},[91,150663,149863],{"class":206},[91,150665,12414],{"class":101},[91,150667,1091],{"class":150},[91,150669,108],{"class":101},[91,150671,150672,150674],{"class":93,"line":1601},[91,150673,30390],{"class":150},[91,150675,150676],{"class":101},"(student.name, student.score)\n",[33,150678,150680],{"id":150679},"_1111-多态","11.11 多态",[38,150682,150683],{},"多态指不同对象响应同一个方法，表现出不同结果。",[83,150685,150687],{"className":30353,"code":150686,"language":30355,"meta":10,"style":10},"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",[88,150688,150689,150697,150705,150715,150719,150723,150731,150739,150749,150753,150757,150767,150772,150776,150780,150785],{"__ignoreMap":10},[91,150690,150691,150693,150695],{"class":93,"line":94},[91,150692,14673],{"class":97},[91,150694,150339],{"class":1941},[91,150696,3717],{"class":101},[91,150698,150699,150701,150703],{"class":93,"line":11},[91,150700,30776],{"class":97},[91,150702,150421],{"class":1941},[91,150704,30782],{"class":101},[91,150706,150707,150709,150711,150713],{"class":93,"line":1157},[91,150708,32426],{"class":150},[91,150710,102],{"class":101},[91,150712,150364],{"class":206},[91,150714,108],{"class":101},[91,150716,150717],{"class":93,"line":1172},[91,150718,2378],{"emptyLinePlaceholder":17},[91,150720,150721],{"class":93,"line":1178},[91,150722,2378],{"emptyLinePlaceholder":17},[91,150724,150725,150727,150729],{"class":93,"line":1192},[91,150726,14673],{"class":97},[91,150728,150487],{"class":1941},[91,150730,3717],{"class":101},[91,150732,150733,150735,150737],{"class":93,"line":1198},[91,150734,30776],{"class":97},[91,150736,150421],{"class":1941},[91,150738,30782],{"class":101},[91,150740,150741,150743,150745,150747],{"class":93,"line":1289},[91,150742,32426],{"class":150},[91,150744,102],{"class":101},[91,150746,150510],{"class":206},[91,150748,108],{"class":101},[91,150750,150751],{"class":93,"line":1295},[91,150752,2378],{"emptyLinePlaceholder":17},[91,150754,150755],{"class":93,"line":1307},[91,150756,2378],{"emptyLinePlaceholder":17},[91,150758,150759,150761,150764],{"class":93,"line":1590},[91,150760,31922],{"class":97},[91,150762,150763],{"class":1941}," make_sound",[91,150765,150766],{"class":101},"(animal):\n",[91,150768,150769],{"class":93,"line":1595},[91,150770,150771],{"class":101},"    animal.speak()\n",[91,150773,150774],{"class":93,"line":1601},[91,150775,2378],{"emptyLinePlaceholder":17},[91,150777,150778],{"class":93,"line":1606},[91,150779,2378],{"emptyLinePlaceholder":17},[91,150781,150782],{"class":93,"line":1620},[91,150783,150784],{"class":101},"make_sound(Dog())\n",[91,150786,150787],{"class":93,"line":1625},[91,150788,150789],{"class":101},"make_sound(Cat())\n",[38,150791,150792],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[33,150794,150796],{"id":150795},"_1112-类属性和实例属性","11.12 类属性和实例属性",[38,150798,150799],{},"实例属性属于对象：",[83,150801,150803],{"className":30353,"code":150802,"language":30355,"meta":10,"style":10},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[88,150804,150805,150813,150821],{"__ignoreMap":10},[91,150806,150807,150809,150811],{"class":93,"line":94},[91,150808,14673],{"class":97},[91,150810,7877],{"class":1941},[91,150812,3717],{"class":101},[91,150814,150815,150817,150819],{"class":93,"line":11},[91,150816,30776],{"class":97},[91,150818,30779],{"class":150},[91,150820,150585],{"class":101},[91,150822,150823,150825,150827,150829],{"class":93,"line":1157},[91,150824,30820],{"class":150},[91,150826,149765],{"class":101},[91,150828,147],{"class":97},[91,150830,149770],{"class":101},[38,150832,150833],{},"类属性属于类，所有对象共享：",[83,150835,150837],{"className":30353,"code":150836,"language":30355,"meta":10,"style":10},"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",[88,150838,150839,150847,150857,150861,150869,150879,150883,150887,150900,150914,150918,150925,150932],{"__ignoreMap":10},[91,150840,150841,150843,150845],{"class":93,"line":94},[91,150842,14673],{"class":97},[91,150844,7877],{"class":1941},[91,150846,3717],{"class":101},[91,150848,150849,150852,150854],{"class":93,"line":11},[91,150850,150851],{"class":101},"    school ",[91,150853,147],{"class":97},[91,150855,150856],{"class":206}," \"黑马学校\"\n",[91,150858,150859],{"class":93,"line":1157},[91,150860,2378],{"emptyLinePlaceholder":17},[91,150862,150863,150865,150867],{"class":93,"line":1172},[91,150864,30776],{"class":97},[91,150866,30779],{"class":150},[91,150868,150585],{"class":101},[91,150870,150871,150873,150875,150877],{"class":93,"line":1178},[91,150872,30820],{"class":150},[91,150874,149765],{"class":101},[91,150876,147],{"class":97},[91,150878,149770],{"class":101},[91,150880,150881],{"class":93,"line":1192},[91,150882,2378],{"emptyLinePlaceholder":17},[91,150884,150885],{"class":93,"line":1198},[91,150886,2378],{"emptyLinePlaceholder":17},[91,150888,150889,150892,150894,150896,150898],{"class":93,"line":1289},[91,150890,150891],{"class":101},"s1 ",[91,150893,147],{"class":97},[91,150895,149860],{"class":101},[91,150897,149863],{"class":206},[91,150899,108],{"class":101},[91,150901,150902,150905,150907,150909,150912],{"class":93,"line":1295},[91,150903,150904],{"class":101},"s2 ",[91,150906,147],{"class":97},[91,150908,149860],{"class":101},[91,150910,150911],{"class":206},"\"小红\"",[91,150913,108],{"class":101},[91,150915,150916],{"class":93,"line":1307},[91,150917,2378],{"emptyLinePlaceholder":17},[91,150919,150920,150922],{"class":93,"line":1590},[91,150921,30390],{"class":150},[91,150923,150924],{"class":101},"(s1.school)\n",[91,150926,150927,150929],{"class":93,"line":1595},[91,150928,30390],{"class":150},[91,150930,150931],{"class":101},"(s2.school)\n",[91,150933,150934,150936],{"class":93,"line":1601},[91,150935,30390],{"class":150},[91,150937,150938],{"class":101},"(Student.school)\n",[38,150940,150941],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[33,150943,150945],{"id":150944},"_1113-类方法和静态方法","11.13 类方法和静态方法",[63,150947,150949],{"id":150948},"_11131-类方法","11.13.1 类方法",[38,150951,150952,150953,150956,150957,28360],{},"类方法使用 ",[88,150954,150955],{},"@classmethod","，第一个参数通常是 ",[88,150958,150959],{},"cls",[83,150961,150963],{"className":30353,"code":150962,"language":30355,"meta":10,"style":10},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[88,150964,150965,150973,150981,150985,150993,151003,151013,151017,151021],{"__ignoreMap":10},[91,150966,150967,150969,150971],{"class":93,"line":94},[91,150968,14673],{"class":97},[91,150970,7877],{"class":1941},[91,150972,3717],{"class":101},[91,150974,150975,150977,150979],{"class":93,"line":11},[91,150976,150851],{"class":101},[91,150978,147],{"class":97},[91,150980,150856],{"class":206},[91,150982,150983],{"class":93,"line":1157},[91,150984,2378],{"emptyLinePlaceholder":17},[91,150986,150987,150990],{"class":93,"line":1172},[91,150988,150989],{"class":1941},"    @",[91,150991,150992],{"class":150},"classmethod\n",[91,150994,150995,150997,151000],{"class":93,"line":1178},[91,150996,30776],{"class":97},[91,150998,150999],{"class":1941}," get_school",[91,151001,151002],{"class":101},"(cls):\n",[91,151004,151005,151007,151010],{"class":93,"line":1192},[91,151006,14731],{"class":97},[91,151008,151009],{"class":150}," cls",[91,151011,151012],{"class":101},".school\n",[91,151014,151015],{"class":93,"line":1198},[91,151016,2378],{"emptyLinePlaceholder":17},[91,151018,151019],{"class":93,"line":1289},[91,151020,2378],{"emptyLinePlaceholder":17},[91,151022,151023,151025],{"class":93,"line":1295},[91,151024,30390],{"class":150},[91,151026,151027],{"class":101},"(Student.get_school())\n",[63,151029,151031],{"id":151030},"_11132-静态方法","11.13.2 静态方法",[38,151033,151034,151035,151038],{},"静态方法使用 ",[88,151036,151037],{},"@staticmethod","，不需要访问实例和类。",[83,151040,151042],{"className":30353,"code":151041,"language":30355,"meta":10,"style":10},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[88,151043,151044,151053,151060,151069,151080,151084,151088],{"__ignoreMap":10},[91,151045,151046,151048,151051],{"class":93,"line":94},[91,151047,14673],{"class":97},[91,151049,151050],{"class":1941}," MathUtils",[91,151052,3717],{"class":101},[91,151054,151055,151057],{"class":93,"line":11},[91,151056,150989],{"class":1941},[91,151058,151059],{"class":150},"staticmethod\n",[91,151061,151062,151064,151066],{"class":93,"line":1157},[91,151063,30776],{"class":97},[91,151065,5188],{"class":1941},[91,151067,151068],{"class":101},"(a, b):\n",[91,151070,151071,151073,151075,151077],{"class":93,"line":1172},[91,151072,14731],{"class":97},[91,151074,10848],{"class":101},[91,151076,583],{"class":97},[91,151078,151079],{"class":101}," b\n",[91,151081,151082],{"class":93,"line":1178},[91,151083,2378],{"emptyLinePlaceholder":17},[91,151085,151086],{"class":93,"line":1192},[91,151087,2378],{"emptyLinePlaceholder":17},[91,151089,151090,151092,151095,151097,151099,151101],{"class":93,"line":1198},[91,151091,30390],{"class":150},[91,151093,151094],{"class":101},"(MathUtils.add(",[91,151096,319],{"class":150},[91,151098,12414],{"class":101},[91,151100,179],{"class":150},[91,151102,30472],{"class":101},[38,151104,151105],{},"静态方法本质上是放在类命名空间里的普通函数。",[33,151107,151109],{"id":151108},"_1114-dataclass","11.14 dataclass",[38,151111,151112,151115],{},[88,151113,151114],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[83,151117,151119],{"className":30353,"code":151118,"language":30355,"meta":10,"style":10},"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",[88,151120,151121,151133,151137,151141,151146,151154,151162,151170,151178,151182,151186,151206],{"__ignoreMap":10},[91,151122,151123,151125,151128,151130],{"class":93,"line":94},[91,151124,30712],{"class":97},[91,151126,151127],{"class":101}," dataclasses ",[91,151129,30367],{"class":97},[91,151131,151132],{"class":101}," dataclass\n",[91,151134,151135],{"class":93,"line":11},[91,151136,2378],{"emptyLinePlaceholder":17},[91,151138,151139],{"class":93,"line":1157},[91,151140,2378],{"emptyLinePlaceholder":17},[91,151142,151143],{"class":93,"line":1172},[91,151144,151145],{"class":1941},"@dataclass\n",[91,151147,151148,151150,151152],{"class":93,"line":1178},[91,151149,14673],{"class":97},[91,151151,7877],{"class":1941},[91,151153,3717],{"class":101},[91,151155,151156,151159],{"class":93,"line":1192},[91,151157,151158],{"class":101},"    name: ",[91,151160,151161],{"class":150},"str\n",[91,151163,151164,151167],{"class":93,"line":1198},[91,151165,151166],{"class":101},"    age: ",[91,151168,151169],{"class":150},"int\n",[91,151171,151172,151175],{"class":93,"line":1289},[91,151173,151174],{"class":101},"    score: ",[91,151176,151177],{"class":150},"float\n",[91,151179,151180],{"class":93,"line":1295},[91,151181,2378],{"emptyLinePlaceholder":17},[91,151183,151184],{"class":93,"line":1307},[91,151185,2378],{"emptyLinePlaceholder":17},[91,151187,151188,151190,151192,151194,151196,151198,151200,151202,151204],{"class":93,"line":1590},[91,151189,149456],{"class":101},[91,151191,147],{"class":97},[91,151193,149860],{"class":101},[91,151195,149863],{"class":206},[91,151197,12414],{"class":101},[91,151199,752],{"class":150},[91,151201,12414],{"class":101},[91,151203,1091],{"class":150},[91,151205,108],{"class":101},[91,151207,151208,151210],{"class":93,"line":1595},[91,151209,30390],{"class":150},[91,151211,150017],{"class":101},[38,151213,151214,151215,314,151217,151220],{},"它会自动生成 ",[88,151216,30804],{},[88,151218,151219],{},"__repr__"," 等方法。适合数据模型类。",[33,151222,151224],{"id":151223},"_1115-小案例学生类","11.15 小案例：学生类",[83,151226,151228],{"className":30353,"code":151227,"language":30355,"meta":10,"style":10},"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",[88,151229,151230,151238,151247,151259,151269,151279,151289,151293,151302,151315,151319,151328,151334,151346,151358,151370,151382,151386,151390,151396,151406,151415,151425,151433,151441,151450,151454,151458,151466,151502,151506,151510,151535,151542],{"__ignoreMap":10},[91,151231,151232,151234,151236],{"class":93,"line":94},[91,151233,14673],{"class":97},[91,151235,7877],{"class":1941},[91,151237,3717],{"class":101},[91,151239,151240,151242,151244],{"class":93,"line":11},[91,151241,30776],{"class":97},[91,151243,30779],{"class":150},[91,151245,151246],{"class":101},"(self, student_id, name, age, score):\n",[91,151248,151249,151251,151254,151256],{"class":93,"line":1157},[91,151250,30820],{"class":150},[91,151252,151253],{"class":101},".student_id ",[91,151255,147],{"class":97},[91,151257,151258],{"class":101}," student_id\n",[91,151260,151261,151263,151265,151267],{"class":93,"line":1172},[91,151262,30820],{"class":150},[91,151264,149765],{"class":101},[91,151266,147],{"class":97},[91,151268,149770],{"class":101},[91,151270,151271,151273,151275,151277],{"class":93,"line":1178},[91,151272,30820],{"class":150},[91,151274,149777],{"class":101},[91,151276,147],{"class":97},[91,151278,149782],{"class":101},[91,151280,151281,151283,151285,151287],{"class":93,"line":1192},[91,151282,30820],{"class":150},[91,151284,149789],{"class":101},[91,151286,147],{"class":97},[91,151288,1557],{"class":101},[91,151290,151291],{"class":93,"line":1198},[91,151292,2378],{"emptyLinePlaceholder":17},[91,151294,151295,151297,151300],{"class":93,"line":1289},[91,151296,30776],{"class":97},[91,151298,151299],{"class":1941}," is_passed",[91,151301,30782],{"class":101},[91,151303,151304,151306,151308,151310,151312],{"class":93,"line":1295},[91,151305,14731],{"class":97},[91,151307,38848],{"class":150},[91,151309,149789],{"class":101},[91,151311,1688],{"class":97},[91,151313,151314],{"class":150}," 60\n",[91,151316,151317],{"class":93,"line":1307},[91,151318,2378],{"emptyLinePlaceholder":17},[91,151320,151321,151323,151326],{"class":93,"line":1590},[91,151322,30776],{"class":97},[91,151324,151325],{"class":1941}," to_dict",[91,151327,30782],{"class":101},[91,151329,151330,151332],{"class":93,"line":1595},[91,151331,14731],{"class":97},[91,151333,15551],{"class":101},[91,151335,151336,151339,151341,151343],{"class":93,"line":1601},[91,151337,151338],{"class":206},"            \"student_id\"",[91,151340,51412],{"class":101},[91,151342,30798],{"class":150},[91,151344,151345],{"class":101},".student_id,\n",[91,151347,151348,151351,151353,151355],{"class":93,"line":1606},[91,151349,151350],{"class":206},"            \"name\"",[91,151352,51412],{"class":101},[91,151354,30798],{"class":150},[91,151356,151357],{"class":101},".name,\n",[91,151359,151360,151363,151365,151367],{"class":93,"line":1620},[91,151361,151362],{"class":206},"            \"age\"",[91,151364,51412],{"class":101},[91,151366,30798],{"class":150},[91,151368,151369],{"class":101},".age,\n",[91,151371,151372,151375,151377,151379],{"class":93,"line":1625},[91,151373,151374],{"class":206},"            \"score\"",[91,151376,51412],{"class":101},[91,151378,30798],{"class":150},[91,151380,151381],{"class":101},".score,\n",[91,151383,151384],{"class":93,"line":1631},[91,151385,2507],{"class":101},[91,151387,151388],{"class":93,"line":1652},[91,151389,2378],{"emptyLinePlaceholder":17},[91,151391,151392,151394],{"class":93,"line":1657},[91,151393,150989],{"class":1941},[91,151395,150992],{"class":150},[91,151397,151398,151400,151403],{"class":93,"line":1671},[91,151399,30776],{"class":97},[91,151401,151402],{"class":1941}," from_dict",[91,151404,151405],{"class":101},"(cls, data):\n",[91,151407,151408,151410,151412],{"class":93,"line":1676},[91,151409,14731],{"class":97},[91,151411,151009],{"class":150},[91,151413,151414],{"class":101},"(\n",[91,151416,151417,151420,151423],{"class":93,"line":1705},[91,151418,151419],{"class":101},"            data[",[91,151421,151422],{"class":206},"\"student_id\"",[91,151424,87811],{"class":101},[91,151426,151427,151429,151431],{"class":93,"line":1710},[91,151428,151419],{"class":101},[91,151430,62654],{"class":206},[91,151432,87811],{"class":101},[91,151434,151435,151437,151439],{"class":93,"line":1727},[91,151436,151419],{"class":101},[91,151438,69099],{"class":206},[91,151440,87811],{"class":101},[91,151442,151443,151445,151448],{"class":93,"line":1732},[91,151444,151419],{"class":101},[91,151446,151447],{"class":206},"\"score\"",[91,151449,87811],{"class":101},[91,151451,151452],{"class":93,"line":1737},[91,151453,38101],{"class":101},[91,151455,151456],{"class":93,"line":1742},[91,151457,2378],{"emptyLinePlaceholder":17},[91,151459,151460,151462,151464],{"class":93,"line":1756},[91,151461,30776],{"class":97},[91,151463,149956],{"class":150},[91,151465,30782],{"class":101},[91,151467,151468,151470,151472,151474,151476,151479,151481,151484,151486,151488,151490,151492,151494,151496,151498,151500],{"class":93,"line":1761},[91,151469,14731],{"class":97},[91,151471,149965],{"class":97},[91,151473,353],{"class":206},[91,151475,149427],{"class":150},[91,151477,151478],{"class":101},".student_id",[91,151480,1048],{"class":150},[91,151482,151483],{"class":150}," {self",[91,151485,80276],{"class":101},[91,151487,1048],{"class":150},[91,151489,151483],{"class":150},[91,151491,80288],{"class":101},[91,151493,1048],{"class":150},[91,151495,151483],{"class":150},[91,151497,149837],{"class":101},[91,151499,1048],{"class":150},[91,151501,25108],{"class":206},[91,151503,151504],{"class":93,"line":2555},[91,151505,2378],{"emptyLinePlaceholder":17},[91,151507,151508],{"class":93,"line":2569},[91,151509,2378],{"emptyLinePlaceholder":17},[91,151511,151512,151514,151516,151518,151521,151523,151525,151527,151529,151531,151533],{"class":93,"line":2577},[91,151513,149456],{"class":101},[91,151515,147],{"class":97},[91,151517,149860],{"class":101},[91,151519,151520],{"class":206},"\"001\"",[91,151522,12414],{"class":101},[91,151524,149863],{"class":206},[91,151526,12414],{"class":101},[91,151528,752],{"class":150},[91,151530,12414],{"class":101},[91,151532,1091],{"class":150},[91,151534,108],{"class":101},[91,151536,151537,151539],{"class":93,"line":2582},[91,151538,30390],{"class":150},[91,151540,151541],{"class":101},"(student.is_passed())\n",[91,151543,151544,151546],{"class":93,"line":2588},[91,151545,30390],{"class":150},[91,151547,151548],{"class":101},"(student.to_dict())\n",[38,151550,151551,100993,151554,151557],{},[88,151552,151553],{},"to_dict()",[88,151555,151556],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[33,151559,151561],{"id":151560},"_1116-易错点","11.16 易错点",[46,151563,151564,151570,151576,151581,151584,151587],{},[49,151565,151566,151567,28360],{},"类名推荐使用大驼峰，如 ",[88,151568,151569],{},"StudentManager",[49,151571,151572,151573,151575],{},"方法第一个参数必须写 ",[88,151574,30798],{},"，调用时不用传。",[49,151577,151578,151580],{},[88,151579,30804],{}," 不是普通方法，它在创建对象时自动执行。",[49,151582,151583],{},"私有属性不是绝对安全，只是约定和名称改写。",[49,151585,151586],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[49,151588,151589],{},"类中方法太多时，说明职责可能过重。",[33,151591,151593],{"id":151592},"_1117-本章练习","11.17 本章练习",[46,151595,151596,151602,151608,151613,151626],{},[49,151597,151598,151599,151601],{},"定义 ",[88,151600,149543],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[49,151603,151598,151604,151607],{},[88,151605,151606],{},"Account"," 类，实现存款、取款、查询余额。",[49,151609,151598,151610,151612],{},[88,151611,17205],{}," 类，计算圆的周长和面积。",[49,151614,151598,151615,314,151618,151621,151622,151625],{},[88,151616,151617],{},"Dog",[88,151619,151620],{},"Cat"," 类，并用同一个函数调用它们的 ",[88,151623,151624],{},"speak()"," 方法。",[49,151627,104341,151628,151630,151631,28360],{},[88,151629,151114],{}," 定义一个商品类 ",[88,151632,151633],{},"Product",[5105,151635,151636],{},"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":10,"searchDepth":11,"depth":11,"links":151638},[151639,151640,151641,151642,151643,151644,151646,151647,151648,151649,151650,151651,151652,151656,151657,151658,151659],{"id":149307,"depth":11,"text":149308},{"id":149490,"depth":11,"text":149491},{"id":149554,"depth":11,"text":149555},{"id":149631,"depth":11,"text":149632},{"id":149730,"depth":11,"text":149731},{"id":149894,"depth":11,"text":151645},"11.6 str",{"id":150020,"depth":11,"text":150021},{"id":150286,"depth":11,"text":150287},{"id":150400,"depth":11,"text":150401},{"id":150555,"depth":11,"text":150556},{"id":150679,"depth":11,"text":150680},{"id":150795,"depth":11,"text":150796},{"id":150944,"depth":11,"text":150945,"children":151653},[151654,151655],{"id":150948,"depth":1157,"text":150949},{"id":151030,"depth":1157,"text":151031},{"id":151108,"depth":11,"text":151109},{"id":151223,"depth":11,"text":151224},{"id":151560,"depth":11,"text":151561},{"id":151592,"depth":11,"text":151593},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149299,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151666,"title":151667,"body":151668,"description":13,"extension":14,"meta":154981,"navigation":17,"path":154982,"seo":154983,"stem":154984,"__hash__":154985},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151669,"toc":154957},[151670,151673,151677,151680,151683,151712,151715,151723,151727,151731,151734,151757,151760,151766,151770,153216,153219,153240,153244,153247,153259,153262,153446,153449,153575,153578,153582,153586,153722,153726,153812,153816,153898,153902,153939,153943,154132,154136,154139,154369,154373,154376,154557,154560,154564,154567,154573,154576,154602,154606,154609,154623,154626,154651,154654,154668,154671,154688,154691,154708,154711,154728,154732,154758,154762,154785,154789,154792,154794,154800,154802,154823,154826,154832,154838,154842,154845,154921,154924,154928,154954],[29,151671,151667],{"id":151672},"_12-综合案例与复习路线",[33,151674,151676],{"id":151675},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[38,151678,151679],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[38,151681,151682],{},"一个合格的入门综合项目最好覆盖：",[46,151684,151685,151688,151691,151694,151697,151700,151703,151706,151709],{},[49,151686,151687],{},"输入输出。",[49,151689,151690],{},"判断和循环。",[49,151692,151693],{},"函数拆分。",[49,151695,151696],{},"列表、字典等容器。",[49,151698,151699],{},"文件持久化。",[49,151701,151702],{},"异常处理。",[49,151704,151705],{},"模块拆分。",[49,151707,151708],{},"可选：面向对象。",[49,151710,151711],{},"可选：数据可视化。",[38,151713,151714],{},"本章整理两个方向：",[46,151716,151717,151720],{},[49,151718,151719],{},"学生管理系统。",[49,151721,151722],{},"销售数据统计和可视化。",[33,151724,151726],{"id":151725},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[63,151728,151730],{"id":151729},"_1221-需求","12.2.1 需求",[38,151732,151733],{},"实现一个命令行学生管理系统：",[46,151735,151736,151739,151742,151745,151748,151751,151754],{},[49,151737,151738],{},"添加学生。",[49,151740,151741],{},"删除学生。",[49,151743,151744],{},"修改学生。",[49,151746,151747],{},"查询学生。",[49,151749,151750],{},"显示所有学生。",[49,151752,151753],{},"保存到 JSON 文件。",[49,151755,151756],{},"程序启动时自动读取 JSON 文件。",[38,151758,151759],{},"学生字段：",[83,151761,151764],{"className":151762,"code":151763,"language":5166,"meta":10},[5164],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[88,151765,151763],{"__ignoreMap":10},[33,151767,151769],{"id":151768},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[83,151771,151773],{"className":30353,"code":151772,"language":30355,"meta":10,"style":10},"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",[88,151774,151775,151781,151791,151795,151809,151813,151817,151826,151838,151844,151848,151854,151885,151895,151902,151913,151919,151923,151927,151937,151968,151994,151998,152002,152011,152022,152033,152044,152055,152066,152077,152088,152092,152096,152106,152118,152134,152141,152148,152152,152156,152166,152174,152181,152194,152204,152215,152219,152223,152232,152240,152246,152258,152266,152277,152281,152285,152294,152310,152314,152321,152332,152337,152341,152357,152372,152387,152391,152396,152404,152412,152420,152428,152432,152437,152448,152452,152456,152465,152480,152490,152494,152506,152517,152521,152525,152530,152534,152545,152549,152553,152562,152577,152585,152589,152601,152611,152615,152619,152634,152647,152660,152664,152677,152689,152701,152705,152709,152720,152724,152728,152737,152752,152760,152764,152776,152786,152790,152794,152799,152803,152807,152817,152823,152845,152864,152883,152902,152907,152911,152915,152924,152932,152943,152947,152951,152977,152987,152992,152996,153000,153008,153018,153022,153030,153035,153051,153055,153069,153074,153088,153093,153106,153111,153124,153129,153142,153147,153160,153171,153175,153181,153192,153196,153200,153212],{"__ignoreMap":10},[91,151776,151777,151779],{"class":93,"line":94},[91,151778,30367],{"class":97},[91,151780,147066],{"class":101},[91,151782,151783,151785,151787,151789],{"class":93,"line":11},[91,151784,30712],{"class":97},[91,151786,108286],{"class":101},[91,151788,30367],{"class":97},[91,151790,108291],{"class":101},[91,151792,151793],{"class":93,"line":1157},[91,151794,2378],{"emptyLinePlaceholder":17},[91,151796,151797,151800,151802,151804,151807],{"class":93,"line":1172},[91,151798,151799],{"class":150},"DATA_FILE",[91,151801,13543],{"class":97},[91,151803,108520],{"class":101},[91,151805,151806],{"class":206},"\"students.json\"",[91,151808,108],{"class":101},[91,151810,151811],{"class":93,"line":1178},[91,151812,2378],{"emptyLinePlaceholder":17},[91,151814,151815],{"class":93,"line":1192},[91,151816,2378],{"emptyLinePlaceholder":17},[91,151818,151819,151821,151824],{"class":93,"line":1198},[91,151820,31922],{"class":97},[91,151822,151823],{"class":1941}," load_students",[91,151825,31928],{"class":101},[91,151827,151828,151830,151832,151835],{"class":93,"line":1289},[91,151829,3079],{"class":97},[91,151831,38905],{"class":97},[91,151833,151834],{"class":150}," DATA_FILE",[91,151836,151837],{"class":101},".exists():\n",[91,151839,151840,151842],{"class":93,"line":1295},[91,151841,14731],{"class":97},[91,151843,51813],{"class":101},[91,151845,151846],{"class":93,"line":1307},[91,151847,2378],{"emptyLinePlaceholder":17},[91,151849,151850,151852],{"class":93,"line":1590},[91,151851,125759],{"class":97},[91,151853,3717],{"class":101},[91,151855,151856,151859,151861,151863,151865,151867,151869,151871,151873,151875,151877,151879,151881,151883],{"class":93,"line":1595},[91,151857,151858],{"class":97},"        with",[91,151860,146766],{"class":150},[91,151862,102],{"class":101},[91,151864,151799],{"class":150},[91,151866,12414],{"class":101},[91,151868,146776],{"class":206},[91,151870,12414],{"class":101},[91,151872,146781],{"class":5195},[91,151874,147],{"class":97},[91,151876,146786],{"class":206},[91,151878,13693],{"class":101},[91,151880,31358],{"class":97},[91,151882,148128],{"class":5195},[91,151884,3717],{"class":101},[91,151886,151887,151889,151891,151893],{"class":93,"line":1601},[91,151888,15711],{"class":97},[91,151890,148139],{"class":101},[91,151892,45329],{"class":5195},[91,151894,108],{"class":101},[91,151896,151897,151899],{"class":93,"line":1606},[91,151898,125787],{"class":97},[91,151900,151901],{"class":101}," json.JSONDecodeError:\n",[91,151903,151904,151906,151908,151911],{"class":93,"line":1620},[91,151905,32426],{"class":150},[91,151907,102],{"class":101},[91,151909,151910],{"class":206},"\"数据文件格式错误，已使用空数据启动\"",[91,151912,108],{"class":101},[91,151914,151915,151917],{"class":93,"line":1625},[91,151916,14731],{"class":97},[91,151918,51813],{"class":101},[91,151920,151921],{"class":93,"line":1631},[91,151922,2378],{"emptyLinePlaceholder":17},[91,151924,151925],{"class":93,"line":1652},[91,151926,2378],{"emptyLinePlaceholder":17},[91,151928,151929,151931,151934],{"class":93,"line":1657},[91,151930,31922],{"class":97},[91,151932,151933],{"class":1941}," save_students",[91,151935,151936],{"class":101},"(students):\n",[91,151938,151939,151941,151943,151945,151947,151949,151952,151954,151956,151958,151960,151962,151964,151966],{"class":93,"line":1671},[91,151940,34153],{"class":97},[91,151942,146766],{"class":150},[91,151944,102],{"class":101},[91,151946,151799],{"class":150},[91,151948,12414],{"class":101},[91,151950,151951],{"class":206},"\"w\"",[91,151953,12414],{"class":101},[91,151955,146781],{"class":5195},[91,151957,147],{"class":97},[91,151959,146786],{"class":206},[91,151961,13693],{"class":101},[91,151963,31358],{"class":97},[91,151965,148128],{"class":5195},[91,151967,3717],{"class":101},[91,151969,151970,151973,151975,151977,151979,151981,151983,151985,151988,151990,151992],{"class":93,"line":1676},[91,151971,151972],{"class":101},"        json.dump(students, ",[91,151974,45329],{"class":5195},[91,151976,12414],{"class":101},[91,151978,147112],{"class":5195},[91,151980,147],{"class":97},[91,151982,33962],{"class":150},[91,151984,12414],{"class":101},[91,151986,151987],{"class":5195},"indent",[91,151989,147],{"class":97},[91,151991,179],{"class":150},[91,151993,108],{"class":101},[91,151995,151996],{"class":93,"line":1705},[91,151997,2378],{"emptyLinePlaceholder":17},[91,151999,152000],{"class":93,"line":1710},[91,152001,2378],{"emptyLinePlaceholder":17},[91,152003,152004,152006,152009],{"class":93,"line":1727},[91,152005,31922],{"class":97},[91,152007,152008],{"class":1941}," show_menu",[91,152010,31928],{"class":101},[91,152012,152013,152015,152017,152020],{"class":93,"line":1732},[91,152014,31274],{"class":150},[91,152016,102],{"class":101},[91,152018,152019],{"class":206},"\"====== 学生管理系统 ======\"",[91,152021,108],{"class":101},[91,152023,152024,152026,152028,152031],{"class":93,"line":1737},[91,152025,31274],{"class":150},[91,152027,102],{"class":101},[91,152029,152030],{"class":206},"\"1. 添加学生\"",[91,152032,108],{"class":101},[91,152034,152035,152037,152039,152042],{"class":93,"line":1742},[91,152036,31274],{"class":150},[91,152038,102],{"class":101},[91,152040,152041],{"class":206},"\"2. 删除学生\"",[91,152043,108],{"class":101},[91,152045,152046,152048,152050,152053],{"class":93,"line":1756},[91,152047,31274],{"class":150},[91,152049,102],{"class":101},[91,152051,152052],{"class":206},"\"3. 修改学生\"",[91,152054,108],{"class":101},[91,152056,152057,152059,152061,152064],{"class":93,"line":1761},[91,152058,31274],{"class":150},[91,152060,102],{"class":101},[91,152062,152063],{"class":206},"\"4. 查询学生\"",[91,152065,108],{"class":101},[91,152067,152068,152070,152072,152075],{"class":93,"line":2555},[91,152069,31274],{"class":150},[91,152071,102],{"class":101},[91,152073,152074],{"class":206},"\"5. 显示所有学生\"",[91,152076,108],{"class":101},[91,152078,152079,152081,152083,152086],{"class":93,"line":2569},[91,152080,31274],{"class":150},[91,152082,102],{"class":101},[91,152084,152085],{"class":206},"\"0. 退出系统\"",[91,152087,108],{"class":101},[91,152089,152090],{"class":93,"line":2577},[91,152091,2378],{"emptyLinePlaceholder":17},[91,152093,152094],{"class":93,"line":2582},[91,152095,2378],{"emptyLinePlaceholder":17},[91,152097,152098,152100,152103],{"class":93,"line":2588},[91,152099,31922],{"class":97},[91,152101,152102],{"class":1941}," find_student",[91,152104,152105],{"class":101},"(students, student_id):\n",[91,152107,152108,152110,152113,152115],{"class":93,"line":2594},[91,152109,3179],{"class":97},[91,152111,152112],{"class":101}," student ",[91,152114,26018],{"class":97},[91,152116,152117],{"class":101}," students:\n",[91,152119,152120,152122,152125,152127,152129,152131],{"class":93,"line":2599},[91,152121,2475],{"class":97},[91,152123,152124],{"class":101}," student[",[91,152126,151422],{"class":206},[91,152128,4421],{"class":101},[91,152130,2927],{"class":97},[91,152132,152133],{"class":101}," student_id:\n",[91,152135,152136,152138],{"class":93,"line":7927},[91,152137,15711],{"class":97},[91,152139,152140],{"class":101}," student\n",[91,152142,152143,152145],{"class":93,"line":7951},[91,152144,4068],{"class":97},[91,152146,152147],{"class":150}," None\n",[91,152149,152150],{"class":93,"line":7956},[91,152151,2378],{"emptyLinePlaceholder":17},[91,152153,152154],{"class":93,"line":7962},[91,152155,2378],{"emptyLinePlaceholder":17},[91,152157,152158,152160,152163],{"class":93,"line":7989},[91,152159,31922],{"class":97},[91,152161,152162],{"class":1941}," input_int",[91,152164,152165],{"class":101},"(prompt):\n",[91,152167,152168,152170,152172],{"class":93,"line":7994},[91,152169,2229],{"class":97},[91,152171,95267],{"class":150},[91,152173,3717],{"class":101},[91,152175,152176,152179],{"class":93,"line":8000},[91,152177,152178],{"class":97},"        try",[91,152180,3717],{"class":101},[91,152182,152183,152185,152187,152189,152191],{"class":93,"line":8012},[91,152184,15711],{"class":97},[91,152186,2360],{"class":150},[91,152188,102],{"class":101},[91,152190,53796],{"class":150},[91,152192,152193],{"class":101},"(prompt))\n",[91,152195,152196,152199,152202],{"class":93,"line":8024},[91,152197,152198],{"class":97},"        except",[91,152200,152201],{"class":150}," ValueError",[91,152203,3717],{"class":101},[91,152205,152206,152208,152210,152213],{"class":93,"line":8036},[91,152207,34625],{"class":150},[91,152209,102],{"class":101},[91,152211,152212],{"class":206},"\"请输入整数\"",[91,152214,108],{"class":101},[91,152216,152217],{"class":93,"line":9695},[91,152218,2378],{"emptyLinePlaceholder":17},[91,152220,152221],{"class":93,"line":9720},[91,152222,2378],{"emptyLinePlaceholder":17},[91,152224,152225,152227,152230],{"class":93,"line":9743},[91,152226,31922],{"class":97},[91,152228,152229],{"class":1941}," input_float",[91,152231,152165],{"class":101},[91,152233,152234,152236,152238],{"class":93,"line":9767},[91,152235,2229],{"class":97},[91,152237,95267],{"class":150},[91,152239,3717],{"class":101},[91,152241,152242,152244],{"class":93,"line":9772},[91,152243,152178],{"class":97},[91,152245,3717],{"class":101},[91,152247,152248,152250,152252,152254,152256],{"class":93,"line":9777},[91,152249,15711],{"class":97},[91,152251,109772],{"class":150},[91,152253,102],{"class":101},[91,152255,53796],{"class":150},[91,152257,152193],{"class":101},[91,152259,152260,152262,152264],{"class":93,"line":9782},[91,152261,152198],{"class":97},[91,152263,152201],{"class":150},[91,152265,3717],{"class":101},[91,152267,152268,152270,152272,152275],{"class":93,"line":9791},[91,152269,34625],{"class":150},[91,152271,102],{"class":101},[91,152273,152274],{"class":206},"\"请输入数字\"",[91,152276,108],{"class":101},[91,152278,152279],{"class":93,"line":9796},[91,152280,2378],{"emptyLinePlaceholder":17},[91,152282,152283],{"class":93,"line":9802},[91,152284,2378],{"emptyLinePlaceholder":17},[91,152286,152287,152289,152292],{"class":93,"line":9823},[91,152288,31922],{"class":97},[91,152290,152291],{"class":1941}," add_student",[91,152293,151936],{"class":101},[91,152295,152296,152299,152301,152303,152305,152308],{"class":93,"line":9829},[91,152297,152298],{"class":101},"    student_id ",[91,152300,147],{"class":97},[91,152302,60580],{"class":150},[91,152304,102],{"class":101},[91,152306,152307],{"class":206},"\"请输入学号:\"",[91,152309,108],{"class":101},[91,152311,152312],{"class":93,"line":9843},[91,152313,2378],{"emptyLinePlaceholder":17},[91,152315,152316,152318],{"class":93,"line":9849},[91,152317,3079],{"class":97},[91,152319,152320],{"class":101}," find_student(students, student_id):\n",[91,152322,152323,152325,152327,152330],{"class":93,"line":9876},[91,152324,32426],{"class":150},[91,152326,102],{"class":101},[91,152328,152329],{"class":206},"\"学号已存在\"",[91,152331,108],{"class":101},[91,152333,152334],{"class":93,"line":9885},[91,152335,152336],{"class":97},"        return\n",[91,152338,152339],{"class":93,"line":9891},[91,152340,2378],{"emptyLinePlaceholder":17},[91,152342,152343,152346,152348,152350,152352,152355],{"class":93,"line":9899},[91,152344,152345],{"class":101},"    name ",[91,152347,147],{"class":97},[91,152349,60580],{"class":150},[91,152351,102],{"class":101},[91,152353,152354],{"class":206},"\"请输入姓名:\"",[91,152356,108],{"class":101},[91,152358,152359,152362,152364,152367,152370],{"class":93,"line":9904},[91,152360,152361],{"class":101},"    age ",[91,152363,147],{"class":97},[91,152365,152366],{"class":101}," input_int(",[91,152368,152369],{"class":206},"\"请输入年龄:\"",[91,152371,108],{"class":101},[91,152373,152374,152377,152379,152382,152385],{"class":93,"line":16583},[91,152375,152376],{"class":101},"    score ",[91,152378,147],{"class":97},[91,152380,152381],{"class":101}," input_float(",[91,152383,152384],{"class":206},"\"请输入成绩:\"",[91,152386,108],{"class":101},[91,152388,152389],{"class":93,"line":16589},[91,152390,2378],{"emptyLinePlaceholder":17},[91,152392,152393],{"class":93,"line":16612},[91,152394,152395],{"class":101},"    students.append({\n",[91,152397,152398,152401],{"class":93,"line":16618},[91,152399,152400],{"class":206},"        \"student_id\"",[91,152402,152403],{"class":101},": student_id,\n",[91,152405,152406,152409],{"class":93,"line":16641},[91,152407,152408],{"class":206},"        \"name\"",[91,152410,152411],{"class":101},": name,\n",[91,152413,152414,152417],{"class":93,"line":16655},[91,152415,152416],{"class":206},"        \"age\"",[91,152418,152419],{"class":101},": age,\n",[91,152421,152422,152425],{"class":93,"line":16675},[91,152423,152424],{"class":206},"        \"score\"",[91,152426,152427],{"class":101},": score,\n",[91,152429,152430],{"class":93,"line":16681},[91,152431,33436],{"class":101},[91,152433,152434],{"class":93,"line":16692},[91,152435,152436],{"class":101},"    save_students(students)\n",[91,152438,152439,152441,152443,152446],{"class":93,"line":16715},[91,152440,31274],{"class":150},[91,152442,102],{"class":101},[91,152444,152445],{"class":206},"\"添加成功\"",[91,152447,108],{"class":101},[91,152449,152450],{"class":93,"line":16737},[91,152451,2378],{"emptyLinePlaceholder":17},[91,152453,152454],{"class":93,"line":16742},[91,152455,2378],{"emptyLinePlaceholder":17},[91,152457,152458,152460,152463],{"class":93,"line":16748},[91,152459,31922],{"class":97},[91,152461,152462],{"class":1941}," delete_student",[91,152464,151936],{"class":101},[91,152466,152467,152469,152471,152473,152475,152478],{"class":93,"line":16762},[91,152468,152298],{"class":101},[91,152470,147],{"class":97},[91,152472,60580],{"class":150},[91,152474,102],{"class":101},[91,152476,152477],{"class":206},"\"请输入要删除的学号:\"",[91,152479,108],{"class":101},[91,152481,152482,152485,152487],{"class":93,"line":16775},[91,152483,152484],{"class":101},"    student ",[91,152486,147],{"class":97},[91,152488,152489],{"class":101}," find_student(students, student_id)\n",[91,152491,152492],{"class":93,"line":16780},[91,152493,2378],{"emptyLinePlaceholder":17},[91,152495,152496,152498,152500,152502,152504],{"class":93,"line":16794},[91,152497,3079],{"class":97},[91,152499,152112],{"class":101},[91,152501,38902],{"class":97},[91,152503,38908],{"class":150},[91,152505,3717],{"class":101},[91,152507,152508,152510,152512,152515],{"class":93,"line":16799},[91,152509,32426],{"class":150},[91,152511,102],{"class":101},[91,152513,152514],{"class":206},"\"学生不存在\"",[91,152516,108],{"class":101},[91,152518,152519],{"class":93,"line":16805},[91,152520,152336],{"class":97},[91,152522,152523],{"class":93,"line":16810},[91,152524,2378],{"emptyLinePlaceholder":17},[91,152526,152527],{"class":93,"line":16824},[91,152528,152529],{"class":101},"    students.remove(student)\n",[91,152531,152532],{"class":93,"line":16829},[91,152533,152436],{"class":101},[91,152535,152536,152538,152540,152543],{"class":93,"line":16834},[91,152537,31274],{"class":150},[91,152539,102],{"class":101},[91,152541,152542],{"class":206},"\"删除成功\"",[91,152544,108],{"class":101},[91,152546,152547],{"class":93,"line":16848},[91,152548,2378],{"emptyLinePlaceholder":17},[91,152550,152551],{"class":93,"line":16860},[91,152552,2378],{"emptyLinePlaceholder":17},[91,152554,152555,152557,152560],{"class":93,"line":16865},[91,152556,31922],{"class":97},[91,152558,152559],{"class":1941}," update_student",[91,152561,151936],{"class":101},[91,152563,152564,152566,152568,152570,152572,152575],{"class":93,"line":16878},[91,152565,152298],{"class":101},[91,152567,147],{"class":97},[91,152569,60580],{"class":150},[91,152571,102],{"class":101},[91,152573,152574],{"class":206},"\"请输入要修改的学号:\"",[91,152576,108],{"class":101},[91,152578,152579,152581,152583],{"class":93,"line":16883},[91,152580,152484],{"class":101},[91,152582,147],{"class":97},[91,152584,152489],{"class":101},[91,152586,152587],{"class":93,"line":16888},[91,152588,2378],{"emptyLinePlaceholder":17},[91,152590,152591,152593,152595,152597,152599],{"class":93,"line":16893},[91,152592,3079],{"class":97},[91,152594,152112],{"class":101},[91,152596,38902],{"class":97},[91,152598,38908],{"class":150},[91,152600,3717],{"class":101},[91,152602,152603,152605,152607,152609],{"class":93,"line":16906},[91,152604,32426],{"class":150},[91,152606,102],{"class":101},[91,152608,152514],{"class":206},[91,152610,108],{"class":101},[91,152612,152613],{"class":93,"line":16911},[91,152614,152336],{"class":97},[91,152616,152617],{"class":93,"line":32608},[91,152618,2378],{"emptyLinePlaceholder":17},[91,152620,152621,152623,152625,152627,152629,152632],{"class":93,"line":32614},[91,152622,152345],{"class":101},[91,152624,147],{"class":97},[91,152626,60580],{"class":150},[91,152628,102],{"class":101},[91,152630,152631],{"class":206},"\"请输入新姓名:\"",[91,152633,108],{"class":101},[91,152635,152636,152638,152640,152642,152645],{"class":93,"line":32620},[91,152637,152361],{"class":101},[91,152639,147],{"class":97},[91,152641,152366],{"class":101},[91,152643,152644],{"class":206},"\"请输入新年龄:\"",[91,152646,108],{"class":101},[91,152648,152649,152651,152653,152655,152658],{"class":93,"line":32626},[91,152650,152376],{"class":101},[91,152652,147],{"class":97},[91,152654,152381],{"class":101},[91,152656,152657],{"class":206},"\"请输入新成绩:\"",[91,152659,108],{"class":101},[91,152661,152662],{"class":93,"line":32632},[91,152663,2378],{"emptyLinePlaceholder":17},[91,152665,152666,152669,152671,152673,152675],{"class":93,"line":32643},[91,152667,152668],{"class":101},"    student[",[91,152670,62654],{"class":206},[91,152672,4421],{"class":101},[91,152674,147],{"class":97},[91,152676,149770],{"class":101},[91,152678,152679,152681,152683,152685,152687],{"class":93,"line":32649},[91,152680,152668],{"class":101},[91,152682,69099],{"class":206},[91,152684,4421],{"class":101},[91,152686,147],{"class":97},[91,152688,149782],{"class":101},[91,152690,152691,152693,152695,152697,152699],{"class":93,"line":32669},[91,152692,152668],{"class":101},[91,152694,151447],{"class":206},[91,152696,4421],{"class":101},[91,152698,147],{"class":97},[91,152700,1557],{"class":101},[91,152702,152703],{"class":93,"line":32675},[91,152704,2378],{"emptyLinePlaceholder":17},[91,152706,152707],{"class":93,"line":32686},[91,152708,152436],{"class":101},[91,152710,152711,152713,152715,152718],{"class":93,"line":32692},[91,152712,31274],{"class":150},[91,152714,102],{"class":101},[91,152716,152717],{"class":206},"\"修改成功\"",[91,152719,108],{"class":101},[91,152721,152722],{"class":93,"line":32698},[91,152723,2378],{"emptyLinePlaceholder":17},[91,152725,152726],{"class":93,"line":32704},[91,152727,2378],{"emptyLinePlaceholder":17},[91,152729,152730,152732,152735],{"class":93,"line":32710},[91,152731,31922],{"class":97},[91,152733,152734],{"class":1941}," query_student",[91,152736,151936],{"class":101},[91,152738,152739,152741,152743,152745,152747,152750],{"class":93,"line":32716},[91,152740,152298],{"class":101},[91,152742,147],{"class":97},[91,152744,60580],{"class":150},[91,152746,102],{"class":101},[91,152748,152749],{"class":206},"\"请输入要查询的学号:\"",[91,152751,108],{"class":101},[91,152753,152754,152756,152758],{"class":93,"line":32722},[91,152755,152484],{"class":101},[91,152757,147],{"class":97},[91,152759,152489],{"class":101},[91,152761,152762],{"class":93,"line":32728},[91,152763,2378],{"emptyLinePlaceholder":17},[91,152765,152766,152768,152770,152772,152774],{"class":93,"line":32748},[91,152767,3079],{"class":97},[91,152769,152112],{"class":101},[91,152771,38902],{"class":97},[91,152773,38908],{"class":150},[91,152775,3717],{"class":101},[91,152777,152778,152780,152782,152784],{"class":93,"line":32754},[91,152779,32426],{"class":150},[91,152781,102],{"class":101},[91,152783,152514],{"class":206},[91,152785,108],{"class":101},[91,152787,152788],{"class":93,"line":32770},[91,152789,152336],{"class":97},[91,152791,152792],{"class":93,"line":32776},[91,152793,2378],{"emptyLinePlaceholder":17},[91,152795,152796],{"class":93,"line":32790},[91,152797,152798],{"class":101},"    print_student(student)\n",[91,152800,152801],{"class":93,"line":32796},[91,152802,2378],{"emptyLinePlaceholder":17},[91,152804,152805],{"class":93,"line":32811},[91,152806,2378],{"emptyLinePlaceholder":17},[91,152808,152809,152811,152814],{"class":93,"line":32817},[91,152810,31922],{"class":97},[91,152812,152813],{"class":1941}," print_student",[91,152815,152816],{"class":101},"(student):\n",[91,152818,152819,152821],{"class":93,"line":32826},[91,152820,31274],{"class":150},[91,152822,151414],{"class":101},[91,152824,152825,152828,152830,152832,152835,152838,152840,152843],{"class":93,"line":32832},[91,152826,152827],{"class":97},"        f",[91,152829,353],{"class":206},[91,152831,998],{"class":150},[91,152833,152834],{"class":101},"student[",[91,152836,152837],{"class":206},"'student_id'",[91,152839,1042],{"class":101},[91,152841,152842],{"class":150},"}\\t",[91,152844,25108],{"class":206},[91,152846,152847,152849,152851,152853,152855,152858,152860,152862],{"class":93,"line":32841},[91,152848,152827],{"class":97},[91,152850,353],{"class":206},[91,152852,998],{"class":150},[91,152854,152834],{"class":101},[91,152856,152857],{"class":206},"'name'",[91,152859,1042],{"class":101},[91,152861,152842],{"class":150},[91,152863,25108],{"class":206},[91,152865,152866,152868,152870,152872,152874,152877,152879,152881],{"class":93,"line":32847},[91,152867,152827],{"class":97},[91,152869,353],{"class":206},[91,152871,998],{"class":150},[91,152873,152834],{"class":101},[91,152875,152876],{"class":206},"'age'",[91,152878,1042],{"class":101},[91,152880,152842],{"class":150},[91,152882,25108],{"class":206},[91,152884,152885,152887,152889,152891,152893,152896,152898,152900],{"class":93,"line":32853},[91,152886,152827],{"class":97},[91,152888,353],{"class":206},[91,152890,998],{"class":150},[91,152892,152834],{"class":101},[91,152894,152895],{"class":206},"'score'",[91,152897,1042],{"class":101},[91,152899,1048],{"class":150},[91,152901,25108],{"class":206},[91,152903,152904],{"class":93,"line":32862},[91,152905,152906],{"class":101},"    )\n",[91,152908,152909],{"class":93,"line":32868},[91,152910,2378],{"emptyLinePlaceholder":17},[91,152912,152913],{"class":93,"line":32879},[91,152914,2378],{"emptyLinePlaceholder":17},[91,152916,152917,152919,152922],{"class":93,"line":32885},[91,152918,31922],{"class":97},[91,152920,152921],{"class":1941}," show_all_students",[91,152923,151936],{"class":101},[91,152925,152926,152928,152930],{"class":93,"line":32904},[91,152927,3079],{"class":97},[91,152929,38905],{"class":97},[91,152931,152117],{"class":101},[91,152933,152934,152936,152938,152941],{"class":93,"line":32910},[91,152935,32426],{"class":150},[91,152937,102],{"class":101},[91,152939,152940],{"class":206},"\"暂无学生\"",[91,152942,108],{"class":101},[91,152944,152945],{"class":93,"line":32921},[91,152946,152336],{"class":97},[91,152948,152949],{"class":93,"line":32927},[91,152950,2378],{"emptyLinePlaceholder":17},[91,152952,152953,152955,152957,152960,152962,152965,152967,152970,152972,152975],{"class":93,"line":32947},[91,152954,31274],{"class":150},[91,152956,102],{"class":101},[91,152958,152959],{"class":206},"\"学号",[91,152961,1208],{"class":150},[91,152963,152964],{"class":206},"姓名",[91,152966,1208],{"class":150},[91,152968,152969],{"class":206},"年龄",[91,152971,1208],{"class":150},[91,152973,152974],{"class":206},"成绩\"",[91,152976,108],{"class":101},[91,152978,152979,152981,152983,152985],{"class":93,"line":32963},[91,152980,3179],{"class":97},[91,152982,152112],{"class":101},[91,152984,26018],{"class":97},[91,152986,152117],{"class":101},[91,152988,152989],{"class":93,"line":32969},[91,152990,152991],{"class":101},"        print_student(student)\n",[91,152993,152994],{"class":93,"line":32983},[91,152995,2378],{"emptyLinePlaceholder":17},[91,152997,152998],{"class":93,"line":32989},[91,152999,2378],{"emptyLinePlaceholder":17},[91,153001,153002,153004,153006],{"class":93,"line":32995},[91,153003,31922],{"class":97},[91,153005,1951],{"class":1941},[91,153007,31928],{"class":101},[91,153009,153010,153013,153015],{"class":93,"line":33006},[91,153011,153012],{"class":101},"    students ",[91,153014,147],{"class":97},[91,153016,153017],{"class":101}," load_students()\n",[91,153019,153020],{"class":93,"line":33012},[91,153021,2378],{"emptyLinePlaceholder":17},[91,153023,153024,153026,153028],{"class":93,"line":33018},[91,153025,2229],{"class":97},[91,153027,95267],{"class":150},[91,153029,3717],{"class":101},[91,153031,153032],{"class":93,"line":33028},[91,153033,153034],{"class":101},"        show_menu()\n",[91,153036,153037,153040,153042,153044,153046,153049],{"class":93,"line":33034},[91,153038,153039],{"class":101},"        choice ",[91,153041,147],{"class":97},[91,153043,60580],{"class":150},[91,153045,102],{"class":101},[91,153047,153048],{"class":206},"\"请输入操作:\"",[91,153050,108],{"class":101},[91,153052,153053],{"class":93,"line":33045},[91,153054,2378],{"emptyLinePlaceholder":17},[91,153056,153057,153059,153062,153064,153067],{"class":93,"line":33051},[91,153058,2475],{"class":97},[91,153060,153061],{"class":101}," choice ",[91,153063,2927],{"class":97},[91,153065,153066],{"class":206}," \"1\"",[91,153068,3717],{"class":101},[91,153070,153071],{"class":93,"line":33061},[91,153072,153073],{"class":101},"            add_student(students)\n",[91,153075,153076,153079,153081,153083,153086],{"class":93,"line":33066},[91,153077,153078],{"class":97},"        elif",[91,153080,153061],{"class":101},[91,153082,2927],{"class":97},[91,153084,153085],{"class":206}," \"2\"",[91,153087,3717],{"class":101},[91,153089,153090],{"class":93,"line":33072},[91,153091,153092],{"class":101},"            delete_student(students)\n",[91,153094,153095,153097,153099,153101,153104],{"class":93,"line":33121},[91,153096,153078],{"class":97},[91,153098,153061],{"class":101},[91,153100,2927],{"class":97},[91,153102,153103],{"class":206}," \"3\"",[91,153105,3717],{"class":101},[91,153107,153108],{"class":93,"line":33168},[91,153109,153110],{"class":101},"            update_student(students)\n",[91,153112,153113,153115,153117,153119,153122],{"class":93,"line":33173},[91,153114,153078],{"class":97},[91,153116,153061],{"class":101},[91,153118,2927],{"class":97},[91,153120,153121],{"class":206}," \"4\"",[91,153123,3717],{"class":101},[91,153125,153126],{"class":93,"line":33179},[91,153127,153128],{"class":101},"            query_student(students)\n",[91,153130,153131,153133,153135,153137,153140],{"class":93,"line":33198},[91,153132,153078],{"class":97},[91,153134,153061],{"class":101},[91,153136,2927],{"class":97},[91,153138,153139],{"class":206}," \"5\"",[91,153141,3717],{"class":101},[91,153143,153144],{"class":93,"line":33204},[91,153145,153146],{"class":101},"            show_all_students(students)\n",[91,153148,153149,153151,153153,153155,153158],{"class":93,"line":33224},[91,153150,153078],{"class":97},[91,153152,153061],{"class":101},[91,153154,2927],{"class":97},[91,153156,153157],{"class":206}," \"0\"",[91,153159,3717],{"class":101},[91,153161,153162,153164,153166,153169],{"class":93,"line":33230},[91,153163,34625],{"class":150},[91,153165,102],{"class":101},[91,153167,153168],{"class":206},"\"退出系统\"",[91,153170,108],{"class":101},[91,153172,153173],{"class":93,"line":33236},[91,153174,115073],{"class":97},[91,153176,153177,153179],{"class":93,"line":33246},[91,153178,2512],{"class":97},[91,153180,3717],{"class":101},[91,153182,153183,153185,153187,153190],{"class":93,"line":33251},[91,153184,34625],{"class":150},[91,153186,102],{"class":101},[91,153188,153189],{"class":206},"\"输入错误\"",[91,153191,108],{"class":101},[91,153193,153194],{"class":93,"line":33257},[91,153195,2378],{"emptyLinePlaceholder":17},[91,153197,153198],{"class":93,"line":33273},[91,153199,2378],{"emptyLinePlaceholder":17},[91,153201,153202,153204,153206,153208,153210],{"class":93,"line":33318},[91,153203,1509],{"class":97},[91,153205,31195],{"class":150},[91,153207,101534],{"class":97},[91,153209,101537],{"class":206},[91,153211,3717],{"class":101},[91,153213,153214],{"class":93,"line":33324},[91,153215,101544],{"class":101},[38,153217,153218],{},"这个项目串联了：",[46,153220,153221,153224,153227,153230,153233,153235],{},[49,153222,153223],{},"菜单循环。",[49,153225,153226],{},"函数封装。",[49,153228,153229],{},"列表字典。",[49,153231,153232],{},"JSON 读写。",[49,153234,151702],{},[49,153236,153237,28360],{},[88,153238,153239],{},"if __name__ == \"__main__\"",[33,153241,153243],{"id":153242},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[38,153245,153246],{},"可以进一步拆成两个类：",[46,153248,153249,153254],{},[49,153250,153251,153253],{},[88,153252,149543],{},"：表示单个学生。",[49,153255,153256,153258],{},[88,153257,151569],{},"：负责学生增删改查和文件保存。",[38,153260,153261],{},"示意代码：",[83,153263,153265],{"className":30353,"code":153264,"language":30355,"meta":10,"style":10},"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",[88,153266,153267,153277,153281,153285,153289,153297,153304,153310,153316,153322,153326,153334,153340,153350,153360,153370,153380,153384,153388,153394,153402,153410,153418,153426,153434,153442],{"__ignoreMap":10},[91,153268,153269,153271,153273,153275],{"class":93,"line":94},[91,153270,30712],{"class":97},[91,153272,151127],{"class":101},[91,153274,30367],{"class":97},[91,153276,151132],{"class":101},[91,153278,153279],{"class":93,"line":11},[91,153280,2378],{"emptyLinePlaceholder":17},[91,153282,153283],{"class":93,"line":1157},[91,153284,2378],{"emptyLinePlaceholder":17},[91,153286,153287],{"class":93,"line":1172},[91,153288,151145],{"class":1941},[91,153290,153291,153293,153295],{"class":93,"line":1178},[91,153292,14673],{"class":97},[91,153294,7877],{"class":1941},[91,153296,3717],{"class":101},[91,153298,153299,153302],{"class":93,"line":1192},[91,153300,153301],{"class":101},"    student_id: ",[91,153303,151161],{"class":150},[91,153305,153306,153308],{"class":93,"line":1198},[91,153307,151158],{"class":101},[91,153309,151161],{"class":150},[91,153311,153312,153314],{"class":93,"line":1289},[91,153313,151166],{"class":101},[91,153315,151169],{"class":150},[91,153317,153318,153320],{"class":93,"line":1295},[91,153319,151174],{"class":101},[91,153321,151177],{"class":150},[91,153323,153324],{"class":93,"line":1307},[91,153325,2378],{"emptyLinePlaceholder":17},[91,153327,153328,153330,153332],{"class":93,"line":1590},[91,153329,30776],{"class":97},[91,153331,151325],{"class":1941},[91,153333,30782],{"class":101},[91,153335,153336,153338],{"class":93,"line":1595},[91,153337,14731],{"class":97},[91,153339,15551],{"class":101},[91,153341,153342,153344,153346,153348],{"class":93,"line":1601},[91,153343,151338],{"class":206},[91,153345,51412],{"class":101},[91,153347,30798],{"class":150},[91,153349,151345],{"class":101},[91,153351,153352,153354,153356,153358],{"class":93,"line":1606},[91,153353,151350],{"class":206},[91,153355,51412],{"class":101},[91,153357,30798],{"class":150},[91,153359,151357],{"class":101},[91,153361,153362,153364,153366,153368],{"class":93,"line":1620},[91,153363,151362],{"class":206},[91,153365,51412],{"class":101},[91,153367,30798],{"class":150},[91,153369,151369],{"class":101},[91,153371,153372,153374,153376,153378],{"class":93,"line":1625},[91,153373,151374],{"class":206},[91,153375,51412],{"class":101},[91,153377,30798],{"class":150},[91,153379,151381],{"class":101},[91,153381,153382],{"class":93,"line":1631},[91,153383,2507],{"class":101},[91,153385,153386],{"class":93,"line":1652},[91,153387,2378],{"emptyLinePlaceholder":17},[91,153389,153390,153392],{"class":93,"line":1657},[91,153391,150989],{"class":1941},[91,153393,150992],{"class":150},[91,153395,153396,153398,153400],{"class":93,"line":1671},[91,153397,30776],{"class":97},[91,153399,151402],{"class":1941},[91,153401,151405],{"class":101},[91,153403,153404,153406,153408],{"class":93,"line":1676},[91,153405,14731],{"class":97},[91,153407,151009],{"class":150},[91,153409,151414],{"class":101},[91,153411,153412,153414,153416],{"class":93,"line":1705},[91,153413,151419],{"class":101},[91,153415,151422],{"class":206},[91,153417,87811],{"class":101},[91,153419,153420,153422,153424],{"class":93,"line":1710},[91,153421,151419],{"class":101},[91,153423,62654],{"class":206},[91,153425,87811],{"class":101},[91,153427,153428,153430,153432],{"class":93,"line":1727},[91,153429,151419],{"class":101},[91,153431,69099],{"class":206},[91,153433,87811],{"class":101},[91,153435,153436,153438,153440],{"class":93,"line":1732},[91,153437,151419],{"class":101},[91,153439,151447],{"class":206},[91,153441,87811],{"class":101},[91,153443,153444],{"class":93,"line":1737},[91,153445,38101],{"class":101},[38,153447,153448],{},"管理器示意：",[83,153450,153452],{"className":30353,"code":153451,"language":30355,"meta":10,"style":10},"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",[88,153453,153454,153463,153471,153482,153486,153496,153509,153520,153527,153533,153537,153546,153555,153561,153568],{"__ignoreMap":10},[91,153455,153456,153458,153461],{"class":93,"line":94},[91,153457,14673],{"class":97},[91,153459,153460],{"class":1941}," StudentManager",[91,153462,3717],{"class":101},[91,153464,153465,153467,153469],{"class":93,"line":11},[91,153466,30776],{"class":97},[91,153468,30779],{"class":150},[91,153470,30782],{"class":101},[91,153472,153473,153475,153478,153480],{"class":93,"line":1157},[91,153474,30820],{"class":150},[91,153476,153477],{"class":101},".students ",[91,153479,147],{"class":97},[91,153481,51813],{"class":101},[91,153483,153484],{"class":93,"line":1172},[91,153485,2378],{"emptyLinePlaceholder":17},[91,153487,153488,153490,153493],{"class":93,"line":1178},[91,153489,30776],{"class":97},[91,153491,153492],{"class":1941}," find_by_id",[91,153494,153495],{"class":101},"(self, student_id):\n",[91,153497,153498,153500,153502,153504,153506],{"class":93,"line":1192},[91,153499,3381],{"class":97},[91,153501,152112],{"class":101},[91,153503,26018],{"class":97},[91,153505,38848],{"class":150},[91,153507,153508],{"class":101},".students:\n",[91,153510,153511,153513,153516,153518],{"class":93,"line":1198},[91,153512,4620],{"class":97},[91,153514,153515],{"class":101}," student.student_id ",[91,153517,2927],{"class":97},[91,153519,152133],{"class":101},[91,153521,153522,153525],{"class":93,"line":1289},[91,153523,153524],{"class":97},"                return",[91,153526,152140],{"class":101},[91,153528,153529,153531],{"class":93,"line":1295},[91,153530,14731],{"class":97},[91,153532,152147],{"class":150},[91,153534,153535],{"class":93,"line":1307},[91,153536,2378],{"emptyLinePlaceholder":17},[91,153538,153539,153541,153543],{"class":93,"line":1590},[91,153540,30776],{"class":97},[91,153542,5188],{"class":1941},[91,153544,153545],{"class":101},"(self, student):\n",[91,153547,153548,153550,153552],{"class":93,"line":1595},[91,153549,2475],{"class":97},[91,153551,38848],{"class":150},[91,153553,153554],{"class":101},".find_by_id(student.student_id):\n",[91,153556,153557,153559],{"class":93,"line":1601},[91,153558,15711],{"class":97},[91,153560,125782],{"class":150},[91,153562,153563,153565],{"class":93,"line":1606},[91,153564,30820],{"class":150},[91,153566,153567],{"class":101},".students.append(student)\n",[91,153569,153570,153572],{"class":93,"line":1620},[91,153571,14731],{"class":97},[91,153573,153574],{"class":150}," True\n",[38,153576,153577],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[33,153579,153581],{"id":153580},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[63,153583,153585],{"id":153584},"_1251-数据结构","12.5.1 数据结构",[83,153587,153589],{"className":30353,"code":153588,"language":30355,"meta":10,"style":10},"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",[88,153590,153591,153599,153630,153660,153689,153718],{"__ignoreMap":10},[91,153592,153593,153595,153597],{"class":93,"line":94},[91,153594,148440],{"class":101},[91,153596,147],{"class":97},[91,153598,55422],{"class":101},[91,153600,153601,153603,153605,153607,153609,153611,153614,153616,153619,153621,153623,153625,153628],{"class":93,"line":11},[91,153602,148360],{"class":101},[91,153604,147972],{"class":206},[91,153606,51412],{"class":101},[91,153608,148583],{"class":206},[91,153610,12414],{"class":101},[91,153612,153613],{"class":206},"\"category\"",[91,153615,51412],{"class":101},[91,153617,153618],{"class":206},"\"手机\"",[91,153620,12414],{"class":101},[91,153622,84059],{"class":206},[91,153624,51412],{"class":101},[91,153626,153627],{"class":150},"12000",[91,153629,4908],{"class":101},[91,153631,153632,153634,153636,153638,153640,153642,153644,153646,153649,153651,153653,153655,153658],{"class":93,"line":1157},[91,153633,148360],{"class":101},[91,153635,147972],{"class":206},[91,153637,51412],{"class":101},[91,153639,148583],{"class":206},[91,153641,12414],{"class":101},[91,153643,153613],{"class":206},[91,153645,51412],{"class":101},[91,153647,153648],{"class":206},"\"电脑\"",[91,153650,12414],{"class":101},[91,153652,84059],{"class":206},[91,153654,51412],{"class":101},[91,153656,153657],{"class":150},"18000",[91,153659,4908],{"class":101},[91,153661,153662,153664,153666,153668,153670,153672,153674,153676,153678,153680,153682,153684,153687],{"class":93,"line":1172},[91,153663,148360],{"class":101},[91,153665,147972],{"class":206},[91,153667,51412],{"class":101},[91,153669,148604],{"class":206},[91,153671,12414],{"class":101},[91,153673,153613],{"class":206},[91,153675,51412],{"class":101},[91,153677,153618],{"class":206},[91,153679,12414],{"class":101},[91,153681,84059],{"class":206},[91,153683,51412],{"class":101},[91,153685,153686],{"class":150},"15000",[91,153688,4908],{"class":101},[91,153690,153691,153693,153695,153697,153699,153701,153703,153705,153707,153709,153711,153713,153716],{"class":93,"line":1178},[91,153692,148360],{"class":101},[91,153694,147972],{"class":206},[91,153696,51412],{"class":101},[91,153698,148604],{"class":206},[91,153700,12414],{"class":101},[91,153702,153613],{"class":206},[91,153704,51412],{"class":101},[91,153706,153648],{"class":206},[91,153708,12414],{"class":101},[91,153710,84059],{"class":206},[91,153712,51412],{"class":101},[91,153714,153715],{"class":150},"16000",[91,153717,4908],{"class":101},[91,153719,153720],{"class":93,"line":1192},[91,153721,33221],{"class":101},[63,153723,153725],{"id":153724},"_1252-按日期统计","12.5.2 按日期统计",[83,153727,153729],{"className":30353,"code":153728,"language":30355,"meta":10,"style":10},"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",[88,153730,153731,153740,153744,153755,153769,153782,153801,153805],{"__ignoreMap":10},[91,153732,153733,153736,153738],{"class":93,"line":94},[91,153734,153735],{"class":101},"daily_total ",[91,153737,147],{"class":97},[91,153739,87843],{"class":101},[91,153741,153742],{"class":93,"line":11},[91,153743,2378],{"emptyLinePlaceholder":17},[91,153745,153746,153748,153750,153752],{"class":93,"line":1157},[91,153747,3003],{"class":97},[91,153749,148184],{"class":101},[91,153751,26018],{"class":97},[91,153753,153754],{"class":101}," sales:\n",[91,153756,153757,153760,153762,153765,153767],{"class":93,"line":1172},[91,153758,153759],{"class":101},"    date ",[91,153761,147],{"class":97},[91,153763,153764],{"class":101}," item[",[91,153766,147972],{"class":206},[91,153768,33221],{"class":101},[91,153770,153771,153774,153776,153778,153780],{"class":93,"line":1178},[91,153772,153773],{"class":101},"    amount ",[91,153775,147],{"class":97},[91,153777,153764],{"class":101},[91,153779,84059],{"class":206},[91,153781,33221],{"class":101},[91,153783,153784,153787,153789,153792,153794,153796,153798],{"class":93,"line":1192},[91,153785,153786],{"class":101},"    daily_total[date] ",[91,153788,147],{"class":97},[91,153790,153791],{"class":101}," daily_total.get(date, ",[91,153793,293],{"class":150},[91,153795,13693],{"class":101},[91,153797,583],{"class":97},[91,153799,153800],{"class":101}," amount\n",[91,153802,153803],{"class":93,"line":1198},[91,153804,2378],{"emptyLinePlaceholder":17},[91,153806,153807,153809],{"class":93,"line":1289},[91,153808,30390],{"class":150},[91,153810,153811],{"class":101},"(daily_total)\n",[63,153813,153815],{"id":153814},"_1253-按类别统计","12.5.3 按类别统计",[83,153817,153819],{"className":30353,"code":153818,"language":30355,"meta":10,"style":10},"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",[88,153820,153821,153830,153834,153844,153857,153869,153887,153891],{"__ignoreMap":10},[91,153822,153823,153826,153828],{"class":93,"line":94},[91,153824,153825],{"class":101},"category_total ",[91,153827,147],{"class":97},[91,153829,87843],{"class":101},[91,153831,153832],{"class":93,"line":11},[91,153833,2378],{"emptyLinePlaceholder":17},[91,153835,153836,153838,153840,153842],{"class":93,"line":1157},[91,153837,3003],{"class":97},[91,153839,148184],{"class":101},[91,153841,26018],{"class":97},[91,153843,153754],{"class":101},[91,153845,153846,153849,153851,153853,153855],{"class":93,"line":1172},[91,153847,153848],{"class":101},"    category ",[91,153850,147],{"class":97},[91,153852,153764],{"class":101},[91,153854,153613],{"class":206},[91,153856,33221],{"class":101},[91,153858,153859,153861,153863,153865,153867],{"class":93,"line":1178},[91,153860,153773],{"class":101},[91,153862,147],{"class":97},[91,153864,153764],{"class":101},[91,153866,84059],{"class":206},[91,153868,33221],{"class":101},[91,153870,153871,153874,153876,153879,153881,153883,153885],{"class":93,"line":1192},[91,153872,153873],{"class":101},"    category_total[category] ",[91,153875,147],{"class":97},[91,153877,153878],{"class":101}," category_total.get(category, ",[91,153880,293],{"class":150},[91,153882,13693],{"class":101},[91,153884,583],{"class":97},[91,153886,153800],{"class":101},[91,153888,153889],{"class":93,"line":1198},[91,153890,2378],{"emptyLinePlaceholder":17},[91,153892,153893,153895],{"class":93,"line":1289},[91,153894,30390],{"class":150},[91,153896,153897],{"class":101},"(category_total)\n",[63,153899,153901],{"id":153900},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[83,153903,153905],{"className":30353,"code":153904,"language":30355,"meta":10,"style":10},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[88,153906,153907,153932],{"__ignoreMap":10},[91,153908,153909,153912,153914,153916,153919,153922,153925,153928,153930],{"class":93,"line":94},[91,153910,153911],{"class":101},"top_date, top_amount ",[91,153913,147],{"class":97},[91,153915,5930],{"class":150},[91,153917,153918],{"class":101},"(daily_total.items(), ",[91,153920,153921],{"class":5195},"key",[91,153923,153924],{"class":97},"=lambda",[91,153926,153927],{"class":101}," item: item[",[91,153929,319],{"class":150},[91,153931,4635],{"class":101},[91,153933,153934,153936],{"class":93,"line":11},[91,153935,30390],{"class":150},[91,153937,153938],{"class":101},"(top_date, top_amount)\n",[33,153940,153942],{"id":153941},"_126-绘制柱状图","12.6 绘制柱状图",[83,153944,153946],{"className":30353,"code":153945,"language":30355,"meta":10,"style":10},"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",[88,153947,153948,153962,153973,153977,153985,153997,154009,154020,154024,154028,154038,154049,154063,154068,154085,154102,154118,154122],{"__ignoreMap":10},[91,153949,153950,153952,153954,153956,153958,153960],{"class":93,"line":94},[91,153951,30712],{"class":97},[91,153953,147354],{"class":101},[91,153955,30367],{"class":97},[91,153957,147359],{"class":101},[91,153959,31358],{"class":97},[91,153961,147364],{"class":101},[91,153963,153964,153966,153968,153970],{"class":93,"line":11},[91,153965,30712],{"class":97},[91,153967,147213],{"class":101},[91,153969,30367],{"class":97},[91,153971,153972],{"class":101}," Bar\n",[91,153974,153975],{"class":93,"line":1157},[91,153976,2378],{"emptyLinePlaceholder":17},[91,153978,153979,153981,153983],{"class":93,"line":1172},[91,153980,153825],{"class":101},[91,153982,147],{"class":97},[91,153984,15551],{"class":101},[91,153986,153987,153990,153992,153995],{"class":93,"line":1178},[91,153988,153989],{"class":206},"    \"手机\"",[91,153991,51412],{"class":101},[91,153993,153994],{"class":150},"27000",[91,153996,31441],{"class":101},[91,153998,153999,154002,154004,154007],{"class":93,"line":1192},[91,154000,154001],{"class":206},"    \"电脑\"",[91,154003,51412],{"class":101},[91,154005,154006],{"class":150},"34000",[91,154008,31441],{"class":101},[91,154010,154011,154014,154016,154018],{"class":93,"line":1198},[91,154012,154013],{"class":206},"    \"耳机\"",[91,154015,51412],{"class":101},[91,154017,124374],{"class":150},[91,154019,31441],{"class":101},[91,154021,154022],{"class":93,"line":1289},[91,154023,1543],{"class":101},[91,154025,154026],{"class":93,"line":1295},[91,154027,2378],{"emptyLinePlaceholder":17},[91,154029,154030,154033,154035],{"class":93,"line":1307},[91,154031,154032],{"class":101},"bar ",[91,154034,147],{"class":97},[91,154036,154037],{"class":101}," Bar()\n",[91,154039,154040,154043,154046],{"class":93,"line":1590},[91,154041,154042],{"class":101},"bar.add_xaxis(",[91,154044,154045],{"class":150},"list",[91,154047,154048],{"class":101},"(category_total.keys()))\n",[91,154050,154051,154054,154056,154058,154060],{"class":93,"line":1595},[91,154052,154053],{"class":101},"bar.add_yaxis(",[91,154055,147270],{"class":206},[91,154057,12414],{"class":101},[91,154059,154045],{"class":150},[91,154061,154062],{"class":101},"(category_total.values()))\n",[91,154064,154065],{"class":93,"line":1601},[91,154066,154067],{"class":101},"bar.set_global_opts(\n",[91,154069,154070,154072,154074,154076,154078,154080,154083],{"class":93,"line":1606},[91,154071,147448],{"class":5195},[91,154073,147],{"class":97},[91,154075,147453],{"class":101},[91,154077,51382],{"class":5195},[91,154079,147],{"class":97},[91,154081,154082],{"class":206},"\"品类销售额\"",[91,154084,38022],{"class":101},[91,154086,154087,154089,154091,154093,154095,154097,154100],{"class":93,"line":1620},[91,154088,147467],{"class":5195},[91,154090,147],{"class":97},[91,154092,147472],{"class":101},[91,154094,79785],{"class":5195},[91,154096,147],{"class":97},[91,154098,154099],{"class":206},"\"品类\"",[91,154101,38022],{"class":101},[91,154103,154104,154106,154108,154110,154112,154114,154116],{"class":93,"line":1625},[91,154105,147486],{"class":5195},[91,154107,147],{"class":97},[91,154109,147472],{"class":101},[91,154111,79785],{"class":5195},[91,154113,147],{"class":97},[91,154115,147270],{"class":206},[91,154117,38022],{"class":101},[91,154119,154120],{"class":93,"line":1631},[91,154121,108],{"class":101},[91,154123,154124,154127,154130],{"class":93,"line":1652},[91,154125,154126],{"class":101},"bar.render(",[91,154128,154129],{"class":206},"\"category_sales.html\"",[91,154131,108],{"class":101},[33,154133,154135],{"id":154134},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[38,154137,154138],{},"时间线适合展示不同日期、月份、年份的数据变化。",[83,154140,154142],{"className":30353,"code":154141,"language":30355,"meta":10,"style":10},"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",[88,154143,154144,154158,154169,154173,154181,154205,154228,154253,154257,154261,154271,154275,154286,154295,154305,154319,154350,154355,154359],{"__ignoreMap":10},[91,154145,154146,154148,154150,154152,154154,154156],{"class":93,"line":94},[91,154147,30712],{"class":97},[91,154149,147354],{"class":101},[91,154151,30367],{"class":97},[91,154153,147359],{"class":101},[91,154155,31358],{"class":97},[91,154157,147364],{"class":101},[91,154159,154160,154162,154164,154166],{"class":93,"line":11},[91,154161,30712],{"class":97},[91,154163,147213],{"class":101},[91,154165,30367],{"class":97},[91,154167,154168],{"class":101}," Bar, Timeline\n",[91,154170,154171],{"class":93,"line":1157},[91,154172,2378],{"emptyLinePlaceholder":17},[91,154174,154175,154177,154179],{"class":93,"line":1172},[91,154176,101633],{"class":101},[91,154178,147],{"class":97},[91,154180,15551],{"class":101},[91,154182,154183,154186,154189,154191,154193,154195,154197,154199,154201,154203],{"class":93,"line":1178},[91,154184,154185],{"class":206},"    \"2024-10-01\"",[91,154187,154188],{"class":101},": {",[91,154190,153618],{"class":206},[91,154192,51412],{"class":101},[91,154194,153627],{"class":150},[91,154196,12414],{"class":101},[91,154198,153648],{"class":206},[91,154200,51412],{"class":101},[91,154202,153657],{"class":150},[91,154204,4908],{"class":101},[91,154206,154207,154210,154212,154214,154216,154218,154220,154222,154224,154226],{"class":93,"line":1192},[91,154208,154209],{"class":206},"    \"2024-10-02\"",[91,154211,154188],{"class":101},[91,154213,153618],{"class":206},[91,154215,51412],{"class":101},[91,154217,153686],{"class":150},[91,154219,12414],{"class":101},[91,154221,153648],{"class":206},[91,154223,51412],{"class":101},[91,154225,153715],{"class":150},[91,154227,4908],{"class":101},[91,154229,154230,154233,154235,154237,154239,154242,154244,154246,154248,154251],{"class":93,"line":1198},[91,154231,154232],{"class":206},"    \"2024-10-03\"",[91,154234,154188],{"class":101},[91,154236,153618],{"class":206},[91,154238,51412],{"class":101},[91,154240,154241],{"class":150},"17000",[91,154243,12414],{"class":101},[91,154245,153648],{"class":206},[91,154247,51412],{"class":101},[91,154249,154250],{"class":150},"19000",[91,154252,4908],{"class":101},[91,154254,154255],{"class":93,"line":1289},[91,154256,1543],{"class":101},[91,154258,154259],{"class":93,"line":1295},[91,154260,2378],{"emptyLinePlaceholder":17},[91,154262,154263,154266,154268],{"class":93,"line":1307},[91,154264,154265],{"class":101},"timeline ",[91,154267,147],{"class":97},[91,154269,154270],{"class":101}," Timeline()\n",[91,154272,154273],{"class":93,"line":1590},[91,154274,2378],{"emptyLinePlaceholder":17},[91,154276,154277,154279,154282,154284],{"class":93,"line":1595},[91,154278,3003],{"class":97},[91,154280,154281],{"class":101}," date, category_data ",[91,154283,26018],{"class":97},[91,154285,149123],{"class":101},[91,154287,154288,154291,154293],{"class":93,"line":1601},[91,154289,154290],{"class":101},"    bar ",[91,154292,147],{"class":97},[91,154294,154037],{"class":101},[91,154296,154297,154300,154302],{"class":93,"line":1606},[91,154298,154299],{"class":101},"    bar.add_xaxis(",[91,154301,154045],{"class":150},[91,154303,154304],{"class":101},"(category_data.keys()))\n",[91,154306,154307,154310,154312,154314,154316],{"class":93,"line":1620},[91,154308,154309],{"class":101},"    bar.add_yaxis(",[91,154311,147270],{"class":206},[91,154313,12414],{"class":101},[91,154315,154045],{"class":150},[91,154317,154318],{"class":101},"(category_data.values()))\n",[91,154320,154321,154324,154327,154329,154331,154333,154335,154337,154339,154341,154343,154345,154348],{"class":93,"line":1625},[91,154322,154323],{"class":101},"    bar.set_global_opts(",[91,154325,154326],{"class":5195},"title_opts",[91,154328,147],{"class":97},[91,154330,147453],{"class":101},[91,154332,51382],{"class":5195},[91,154334,147],{"class":97},[91,154336,154],{"class":97},[91,154338,353],{"class":206},[91,154340,998],{"class":150},[91,154342,73901],{"class":101},[91,154344,1048],{"class":150},[91,154346,154347],{"class":206},"销售额\"",[91,154349,30472],{"class":101},[91,154351,154352],{"class":93,"line":1631},[91,154353,154354],{"class":101},"    timeline.add(bar, date)\n",[91,154356,154357],{"class":93,"line":1652},[91,154358,2378],{"emptyLinePlaceholder":17},[91,154360,154361,154364,154367],{"class":93,"line":1657},[91,154362,154363],{"class":101},"timeline.render(",[91,154365,154366],{"class":206},"\"timeline_sales.html\"",[91,154368,108],{"class":101},[33,154370,154372],{"id":154371},"_128-绘制地图","12.8 绘制地图",[38,154374,154375],{},"地图适合展示地区数据。",[83,154377,154379],{"className":30353,"code":154378,"language":30355,"meta":10,"style":10},"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",[88,154380,154381,154395,154406,154410,154418,154431,154443,154456,154469,154473,154477,154487,154502,154507,154524,154543,154547],{"__ignoreMap":10},[91,154382,154383,154385,154387,154389,154391,154393],{"class":93,"line":94},[91,154384,30712],{"class":97},[91,154386,147354],{"class":101},[91,154388,30367],{"class":97},[91,154390,147359],{"class":101},[91,154392,31358],{"class":97},[91,154394,147364],{"class":101},[91,154396,154397,154399,154401,154403],{"class":93,"line":11},[91,154398,30712],{"class":97},[91,154400,147213],{"class":101},[91,154402,30367],{"class":97},[91,154404,154405],{"class":101}," Map\n",[91,154407,154408],{"class":93,"line":1157},[91,154409,2378],{"emptyLinePlaceholder":17},[91,154411,154412,154414,154416],{"class":93,"line":1172},[91,154413,101633],{"class":101},[91,154415,147],{"class":97},[91,154417,55422],{"class":101},[91,154419,154420,154423,154425,154427,154429],{"class":93,"line":1178},[91,154421,154422],{"class":101},"    (",[91,154424,69244],{"class":206},[91,154426,12414],{"class":101},[91,154428,919],{"class":150},[91,154430,38022],{"class":101},[91,154432,154433,154435,154437,154439,154441],{"class":93,"line":1192},[91,154434,154422],{"class":101},[91,154436,69264],{"class":206},[91,154438,12414],{"class":101},[91,154440,147287],{"class":150},[91,154442,38022],{"class":101},[91,154444,154445,154447,154450,154452,154454],{"class":93,"line":1198},[91,154446,154422],{"class":101},[91,154448,154449],{"class":206},"\"广东\"",[91,154451,12414],{"class":101},[91,154453,1700],{"class":150},[91,154455,38022],{"class":101},[91,154457,154458,154460,154463,154465,154467],{"class":93,"line":1289},[91,154459,154422],{"class":101},[91,154461,154462],{"class":206},"\"浙江\"",[91,154464,12414],{"class":101},[91,154466,147292],{"class":150},[91,154468,38022],{"class":101},[91,154470,154471],{"class":93,"line":1295},[91,154472,33221],{"class":101},[91,154474,154475],{"class":93,"line":1307},[91,154476,2378],{"emptyLinePlaceholder":17},[91,154478,154479,154482,154484],{"class":93,"line":1590},[91,154480,154481],{"class":101},"map_chart ",[91,154483,147],{"class":97},[91,154485,154486],{"class":101}," Map()\n",[91,154488,154489,154492,154494,154497,154500],{"class":93,"line":1595},[91,154490,154491],{"class":101},"map_chart.add(",[91,154493,147270],{"class":206},[91,154495,154496],{"class":101},", data, ",[91,154498,154499],{"class":206},"\"china\"",[91,154501,108],{"class":101},[91,154503,154504],{"class":93,"line":1601},[91,154505,154506],{"class":101},"map_chart.set_global_opts(\n",[91,154508,154509,154511,154513,154515,154517,154519,154522],{"class":93,"line":1606},[91,154510,147448],{"class":5195},[91,154512,147],{"class":97},[91,154514,147453],{"class":101},[91,154516,51382],{"class":5195},[91,154518,147],{"class":97},[91,154520,154521],{"class":206},"\"地区销售额\"",[91,154523,38022],{"class":101},[91,154525,154526,154529,154531,154534,154537,154539,154541],{"class":93,"line":1620},[91,154527,154528],{"class":5195},"    visualmap_opts",[91,154530,147],{"class":97},[91,154532,154533],{"class":101},"opts.VisualMapOpts(",[91,154535,154536],{"class":5195},"max_",[91,154538,147],{"class":97},[91,154540,1700],{"class":150},[91,154542,38022],{"class":101},[91,154544,154545],{"class":93,"line":1625},[91,154546,108],{"class":101},[91,154548,154549,154552,154555],{"class":93,"line":1631},[91,154550,154551],{"class":101},"map_chart.render(",[91,154553,154554],{"class":206},"\"map_sales.html\"",[91,154556,108],{"class":101},[38,154558,154559],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[33,154561,154563],{"id":154562},"_129-项目拆分建议","12.9 项目拆分建议",[38,154565,154566],{},"当代码超过一个文件时，可以这样组织：",[83,154568,154571],{"className":154569,"code":154570,"language":5166,"meta":10},[5164],"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",[88,154572,154570],{"__ignoreMap":10},[38,154574,154575],{},"职责：",[46,154577,154578,154584,154590,154596],{},[49,154579,154580,154583],{},[88,154581,154582],{},"main.py","：程序入口。",[49,154585,154586,154589],{},[88,154587,154588],{},"file_utils.py","：读写 JSON。",[49,154591,154592,154595],{},[88,154593,154594],{},"sales_service.py","：统计销售数据。",[49,154597,154598,154601],{},[88,154599,154600],{},"chart_builder.py","：生成图表。",[33,154603,154605],{"id":154604},"_1210-python基础复习清单","12.10 Python基础复习清单",[38,154607,154608],{},"语法基础：",[46,154610,154611,154614,154617,154620],{},[49,154612,154613],{},"会写变量、注释、输入输出。",[49,154615,154616],{},"会使用 int、float、str、bool。",[49,154618,154619],{},"会做类型转换。",[49,154621,154622],{},"会使用 f-string 格式化输出。",[38,154624,154625],{},"流程控制：",[46,154627,154628,154634,154640,154648],{},[49,154629,154630,154631,28360],{},"会写 ",[88,154632,154633],{},"if elif else",[49,154635,154630,154636,100993,154638,28360],{},[88,154637,108638],{},[88,154639,3003],{},[49,154641,154642,154643,100993,154645,28360],{},"理解 ",[88,154644,2031],{},[88,154646,154647],{},"continue",[49,154649,154650],{},"能写嵌套循环。",[38,154652,154653],{},"函数：",[46,154655,154656,154659,154662,154665],{},[49,154657,154658],{},"会定义和调用函数。",[49,154660,154661],{},"理解参数和返回值。",[49,154663,154664],{},"知道局部变量和全局变量。",[49,154666,154667],{},"会使用默认参数、关键字参数、不定长参数。",[38,154669,154670],{},"容器：",[46,154672,154673,154676,154679,154682,154685],{},[49,154674,154675],{},"会使用列表增删改查。",[49,154677,154678],{},"会遍历列表、字典。",[49,154680,154681],{},"会使用切片。",[49,154683,154684],{},"会用集合去重。",[49,154686,154687],{},"会处理列表嵌套字典。",[38,154689,154690],{},"文件和模块：",[46,154692,154693,154696,154699,154702,154705],{},[49,154694,154695],{},"会读写文本文件。",[49,154697,154698],{},"会读写 JSON。",[49,154700,154701],{},"会捕获常见异常。",[49,154703,154704],{},"会导入模块和第三方包。",[49,154706,154707],{},"会创建简单包结构。",[38,154709,154710],{},"项目能力：",[46,154712,154713,154716,154719,154722,154725],{},[49,154714,154715],{},"能把代码拆成函数。",[49,154717,154718],{},"能把数据保存到文件。",[49,154720,154721],{},"能处理用户输入错误。",[49,154723,154724],{},"能写一个完整菜单程序。",[49,154726,154727],{},"能用 pyecharts 生成图表。",[33,154729,154731],{"id":154730},"_1211-推荐练习顺序","12.11 推荐练习顺序",[46,154733,154734,154737,154740,154743,154746,154749,154752,154755],{},[49,154735,154736],{},"猜数字游戏。",[49,154738,154739],{},"ATM 菜单程序。",[49,154741,154742],{},"学生成绩统计。",[49,154744,154745],{},"学生管理系统函数版。",[49,154747,154748],{},"学生管理系统文件持久化版。",[49,154750,154751],{},"学生管理系统面向对象版。",[49,154753,154754],{},"销售数据统计。",[49,154756,154757],{},"销售数据可视化。",[33,154759,154761],{"id":154760},"_1212-常见学习误区","12.12 常见学习误区",[46,154763,154764,154767,154770,154773,154776,154779,154782],{},[49,154765,154766],{},"只看视频不敲代码。",[49,154768,154769],{},"一报错就复制错误去搜，不先读报错位置。",[49,154771,154772],{},"变量名随便写，后续自己看不懂。",[49,154774,154775],{},"所有代码都写在一个文件一个函数里。",[49,154777,154778],{},"不保存练习代码，复习时没有材料。",[49,154780,154781],{},"还没掌握列表字典就急着学框架。",[49,154783,154784],{},"不会读官方文档，只依赖教程。",[33,154786,154788],{"id":154787},"_1213-如何读报错","12.13 如何读报错",[38,154790,154791],{},"报错通常从下往上看最后几行。",[38,154793,15114],{},[83,154795,154798],{"className":154796,"code":154797,"language":5166,"meta":10},[5164],"ValueError: invalid literal for int() with base 10: 'abc'\n",[88,154799,154797],{"__ignoreMap":10},[38,154801,24574],{},[46,154803,154804,154810,154820],{},[49,154805,154806,154807,28360],{},"异常类型是 ",[88,154808,154809],{},"ValueError",[49,154811,107320,154812,154815,154816,154819],{},[88,154813,154814],{},"int()"," 无法把 ",[88,154817,154818],{},"'abc'"," 转成整数。",[49,154821,154822],{},"应该检查输入内容或增加异常处理。",[38,154824,154825],{},"再看文件名和行号：",[83,154827,154830],{"className":154828,"code":154829,"language":5166,"meta":10},[5164],"File \"main.py\", line 10, in \u003Cmodule>\n",[88,154831,154829],{"__ignoreMap":10},[38,154833,154834,154835,154837],{},"表示错误发生在 ",[88,154836,154582],{}," 第 10 行。",[33,154839,154841],{"id":154840},"_1214-后续学习方向","12.14 后续学习方向",[38,154843,154844],{},"Python 基础完成后，可以按兴趣选择方向：",[46,154846,154847,154859,154868,154880,154891,154900,154910],{},[49,154848,154849,154850,314,154853,314,154856,28360],{},"自动化办公：",[88,154851,154852],{},"openpyxl",[88,154854,154855],{},"python-docx",[88,154857,154858],{},"pdfplumber",[49,154860,154861,154862,314,154864,314,154866,28360],{},"数据分析：",[88,154863,100601],{},[88,154865,146160],{},[88,154867,146168],{},[49,154869,154870,154871,314,154874,314,154877,28360],{},"Web 后端：",[88,154872,154873],{},"Flask",[88,154875,154876],{},"FastAPI",[88,154878,154879],{},"Django",[49,154881,154882,154883,314,154885,314,154888,28360],{},"爬虫：",[88,154884,146145],{},[88,154886,154887],{},"BeautifulSoup",[88,154889,154890],{},"Scrapy",[49,154892,154893,154894,314,154896,154899],{},"测试开发：",[88,154895,146192],{},[88,154897,154898],{},"selenium","、接口测试。",[49,154901,154902,154903,314,154905,314,154907,28360],{},"人工智能：",[88,154904,100601],{},[88,154906,146160],{},[88,154908,154909],{},"pytorch",[49,154911,154912,154913,314,154915,314,154918,28360],{},"运维脚本：",[88,154914,145761],{},[88,154916,154917],{},"subprocess",[88,154919,154920],{},"paramiko",[38,154922,154923],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[33,154925,154927],{"id":154926},"_1215-结课练习","12.15 结课练习",[46,154929,154930,154933,154936,154939,154942,154945,154948,154951],{},[49,154931,154932],{},"完成函数版学生管理系统。",[49,154934,154935],{},"给学生管理系统增加 JSON 持久化。",[49,154937,154938],{},"给学生管理系统增加异常处理。",[49,154940,154941],{},"把学生管理系统改成面向对象版。",[49,154943,154944],{},"使用 pyecharts 绘制学生成绩柱状图。",[49,154946,154947],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[49,154949,154950],{},"按品类统计销售额并绘制柱状图。",[49,154952,154953],{},"写一份自己的 Python 学习路线图。",[5105,154955,154956],{},"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":10,"searchDepth":11,"depth":11,"links":154958},[154959,154960,154963,154964,154965,154971,154972,154973,154974,154975,154976,154977,154978,154979,154980],{"id":151675,"depth":11,"text":151676},{"id":151725,"depth":11,"text":151726,"children":154961},[154962],{"id":151729,"depth":1157,"text":151730},{"id":151768,"depth":11,"text":151769},{"id":153242,"depth":11,"text":153243},{"id":153580,"depth":11,"text":153581,"children":154966},[154967,154968,154969,154970],{"id":153584,"depth":1157,"text":153585},{"id":153724,"depth":1157,"text":153725},{"id":153814,"depth":1157,"text":153815},{"id":153900,"depth":1157,"text":153901},{"id":153941,"depth":11,"text":153942},{"id":154134,"depth":11,"text":154135},{"id":154371,"depth":11,"text":154372},{"id":154562,"depth":11,"text":154563},{"id":154604,"depth":11,"text":154605},{"id":154730,"depth":11,"text":154731},{"id":154760,"depth":11,"text":154761},{"id":154787,"depth":11,"text":154788},{"id":154840,"depth":11,"text":154841},{"id":154926,"depth":11,"text":154927},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151667,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154987,"title":154988,"body":154989,"description":13,"extension":14,"meta":157458,"navigation":17,"path":157459,"seo":157460,"stem":157461,"__hash__":157462},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154990,"toc":157433},[154991,154994,154998,155001,155004,155024,155027,155050,155053,155056,155078,155081,155103,155107,155110,155150,155153,155274,155278,155281,155321,155324,155348,155351,155355,155358,155372,155405,155408,155443,155446,155469,155472,155505,155508,155510,155516,155591,155594,155600,155617,155657,155661,155664,155710,155712,155750,155753,155788,155791,155826,155829,155861,155864,155883,155887,155891,156004,156006,156081,156085,156131,156134,156160,156169,156173,156176,156239,156247,156275,156279,156319,156384,156388,156391,156430,156433,156478,156481,156542,156546,156573,156576,156604,156607,156611,156615,156680,156683,156721,156724,156756,156760,156859,156863,156866,156939,156942,156990,156994,157000,157040,157043,157090,157093,157142,157146,157148,157162,157164,157345,157349,157376,157396,157403,157407,157424,157430],[29,154992,154988],{"id":154993},"_2-基础语法变量与字符串",[33,154995,154997],{"id":154996},"_21-注释","2.1 注释",[38,154999,155000],{},"注释是给人看的说明文字，不会被 Python 执行。",[38,155002,155003],{},"单行注释：",[83,155005,155007],{"className":30353,"code":155006,"language":30355,"meta":10,"style":10},"# 这是单行注释\nprint(\"hello\")\n",[88,155008,155009,155014],{"__ignoreMap":10},[91,155010,155011],{"class":93,"line":94},[91,155012,155013],{"class":160},"# 这是单行注释\n",[91,155015,155016,155018,155020,155022],{"class":93,"line":11},[91,155017,30390],{"class":150},[91,155019,102],{"class":101},[91,155021,5823],{"class":206},[91,155023,108],{"class":101},[38,155025,155026],{},"多行说明常用三引号：",[83,155028,155030],{"className":30353,"code":155029,"language":30355,"meta":10,"style":10},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[88,155031,155032,155036,155041,155046],{"__ignoreMap":10},[91,155033,155034],{"class":93,"line":94},[91,155035,95673],{"class":206},[91,155037,155038],{"class":93,"line":11},[91,155039,155040],{"class":206},"这是多行说明。\n",[91,155042,155043],{"class":93,"line":1157},[91,155044,155045],{"class":206},"常用于文件顶部说明、函数说明等。\n",[91,155047,155048],{"class":93,"line":1172},[91,155049,95673],{"class":206},[38,155051,155052],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[38,155054,155055],{},"不好：",[83,155057,155059],{"className":30353,"code":155058,"language":30355,"meta":10,"style":10},"# age 加 1\nage = age + 1\n",[88,155060,155061,155066],{"__ignoreMap":10},[91,155062,155063],{"class":93,"line":94},[91,155064,155065],{"class":160},"# age 加 1\n",[91,155067,155068,155070,155072,155074,155076],{"class":93,"line":11},[91,155069,146521],{"class":101},[91,155071,147],{"class":97},[91,155073,15686],{"class":101},[91,155075,583],{"class":97},[91,155077,55674],{"class":150},[38,155079,155080],{},"较好：",[83,155082,155084],{"className":30353,"code":155083,"language":30355,"meta":10,"style":10},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[88,155085,155086,155091],{"__ignoreMap":10},[91,155087,155088],{"class":93,"line":94},[91,155089,155090],{"class":160},"# 用户过完生日后，年龄增加一岁\n",[91,155092,155093,155095,155097,155099,155101],{"class":93,"line":11},[91,155094,146521],{"class":101},[91,155096,147],{"class":97},[91,155098,15686],{"class":101},[91,155100,583],{"class":97},[91,155102,55674],{"class":150},[33,155104,155106],{"id":155105},"_22-字面量","2.2 字面量",[38,155108,155109],{},"字面量就是代码中直接写出来的数据。",[83,155111,155113],{"className":30353,"code":155112,"language":30355,"meta":10,"style":10},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[88,155114,155115,155122,155129,155136,155143],{"__ignoreMap":10},[91,155116,155117,155119],{"class":93,"line":94},[91,155118,413],{"class":150},[91,155120,155121],{"class":160},"          # 整数\n",[91,155123,155124,155126],{"class":93,"line":11},[91,155125,151],{"class":150},[91,155127,155128],{"class":160},"         # 小数\n",[91,155130,155131,155133],{"class":93,"line":1157},[91,155132,5823],{"class":206},[91,155134,155135],{"class":160},"      # 字符串\n",[91,155137,155138,155140],{"class":93,"line":1172},[91,155139,31451],{"class":150},[91,155141,155142],{"class":160},"         # 布尔值\n",[91,155144,155145,155147],{"class":93,"line":1178},[91,155146,95661],{"class":150},[91,155148,155149],{"class":160},"         # 空值\n",[38,155151,155152],{},"常见字面量类型：",[239,155154,155155,155165],{},[242,155156,155157],{},[245,155158,155159,155161,155163],{},[248,155160,23711],{},[248,155162,27467],{},[248,155164,25844],{},[286,155166,155167,155178,155189,155200,155212,155224,155236,155249,155261],{},[245,155168,155169,155171,155175],{},[291,155170,105],{},[291,155172,155173],{},[88,155174,413],{},[291,155176,155177],{},"整数",[245,155179,155180,155182,155186],{},[291,155181,141],{},[291,155183,155184],{},[88,155185,151],{},[291,155187,155188],{},"浮点数",[245,155190,155191,155193,155197],{},[291,155192,1277],{},[291,155194,155195],{},[88,155196,5823],{},[291,155198,155199],{},"字符串",[245,155201,155202,155204,155210],{},[291,155203,1332],{},[291,155205,155206,314,155208],{},[88,155207,31451],{},[88,155209,33962],{},[291,155211,65990],{},[245,155213,155214,155217,155221],{},[291,155215,155216],{},"NoneType",[291,155218,155219],{},[88,155220,95661],{},[291,155222,155223],{},"空值",[245,155225,155226,155228,155233],{},[291,155227,154045],{},[291,155229,155230],{},[88,155231,155232],{},"[1, 2, 3]",[291,155234,155235],{},"列表",[245,155237,155238,155241,155246],{},[291,155239,155240],{},"tuple",[291,155242,155243],{},[88,155244,155245],{},"(1, 2, 3)",[291,155247,155248],{},"元组",[245,155250,155251,155253,155258],{},[291,155252,114521],{},[291,155254,155255],{},[88,155256,155257],{},"{\"name\": \"张三\"}",[291,155259,155260],{},"字典",[245,155262,155263,155266,155271],{},[291,155264,155265],{},"set",[291,155267,155268],{},[88,155269,155270],{},"{1, 2, 3}",[291,155272,155273],{},"集合",[33,155275,155277],{"id":155276},"_23-变量","2.3 变量",[38,155279,155280],{},"变量是保存数据的名字。",[83,155282,155284],{"className":30353,"code":155283,"language":30355,"meta":10,"style":10},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[88,155285,155286,155294,155302,155312],{"__ignoreMap":10},[91,155287,155288,155290,155292],{"class":93,"line":94},[91,155289,146511],{"class":101},[91,155291,147],{"class":97},[91,155293,149328],{"class":206},[91,155295,155296,155298,155300],{"class":93,"line":11},[91,155297,146521],{"class":101},[91,155299,147],{"class":97},[91,155301,146526],{"class":150},[91,155303,155304,155307,155309],{"class":93,"line":1157},[91,155305,155306],{"class":101},"height ",[91,155308,147],{"class":97},[91,155310,155311],{"class":150}," 1.75\n",[91,155313,155314,155317,155319],{"class":93,"line":1172},[91,155315,155316],{"class":101},"is_student ",[91,155318,147],{"class":97},[91,155320,153574],{"class":150},[38,155322,155323],{},"Python 的变量不需要提前声明类型：",[83,155325,155327],{"className":30353,"code":155326,"language":30355,"meta":10,"style":10},"score = 100\nscore = \"满分\"\n",[88,155328,155329,155339],{"__ignoreMap":10},[91,155330,155331,155334,155336],{"class":93,"line":94},[91,155332,155333],{"class":101},"score ",[91,155335,147],{"class":97},[91,155337,155338],{"class":150}," 100\n",[91,155340,155341,155343,155345],{"class":93,"line":11},[91,155342,155333],{"class":101},[91,155344,147],{"class":97},[91,155346,155347],{"class":206}," \"满分\"\n",[38,155349,155350],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[33,155352,155354],{"id":155353},"_24-变量命名规则","2.4 变量命名规则",[38,155356,155357],{},"硬性规则：",[46,155359,155360,155363,155366,155369],{},[49,155361,155362],{},"只能由字母、数字、下划线组成。",[49,155364,155365],{},"不能以数字开头。",[49,155367,155368],{},"不能使用 Python 关键字。",[49,155370,155371],{},"区分大小写。",[83,155373,155375],{"className":30353,"code":155374,"language":30355,"meta":10,"style":10},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[88,155376,155377,155386,155395],{"__ignoreMap":10},[91,155378,155379,155382,155384],{"class":93,"line":94},[91,155380,155381],{"class":101},"user_name ",[91,155383,147],{"class":97},[91,155385,146516],{"class":206},[91,155387,155388,155391,155393],{"class":93,"line":11},[91,155389,155390],{"class":101},"age2 ",[91,155392,147],{"class":97},[91,155394,146526],{"class":150},[91,155396,155397,155400,155402],{"class":93,"line":1157},[91,155398,155399],{"class":101},"_token ",[91,155401,147],{"class":97},[91,155403,155404],{"class":206}," \"abc\"\n",[38,155406,155407],{},"错误写法：",[83,155409,155411],{"className":30353,"code":155410,"language":30355,"meta":10,"style":10},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[88,155412,155413,155422,155434],{"__ignoreMap":10},[91,155414,155415,155418,155420],{"class":93,"line":94},[91,155416,155417],{"class":77378},"2age",[91,155419,13543],{"class":97},[91,155421,146526],{"class":150},[91,155423,155424,155426,155428,155430,155432],{"class":93,"line":11},[91,155425,131559],{"class":101},[91,155427,634],{"class":97},[91,155429,146511],{"class":101},[91,155431,147],{"class":97},[91,155433,146516],{"class":206},[91,155435,155436,155438,155440],{"class":93,"line":1157},[91,155437,14673],{"class":97},[91,155439,13543],{"class":97},[91,155441,155442],{"class":206}," \"一班\"\n",[38,155444,155445],{},"查看关键字：",[83,155447,155449],{"className":30353,"code":155448,"language":30355,"meta":10,"style":10},"import keyword\n\nprint(keyword.kwlist)\n",[88,155450,155451,155458,155462],{"__ignoreMap":10},[91,155452,155453,155455],{"class":93,"line":94},[91,155454,30367],{"class":97},[91,155456,155457],{"class":101}," keyword\n",[91,155459,155460],{"class":93,"line":11},[91,155461,2378],{"emptyLinePlaceholder":17},[91,155463,155464,155466],{"class":93,"line":1157},[91,155465,30390],{"class":150},[91,155467,155468],{"class":101},"(keyword.kwlist)\n",[38,155470,155471],{},"推荐命名风格：",[83,155473,155475],{"className":30353,"code":155474,"language":30355,"meta":10,"style":10},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[88,155476,155477,155486,155496],{"__ignoreMap":10},[91,155478,155479,155482,155484],{"class":93,"line":94},[91,155480,155481],{"class":101},"student_name ",[91,155483,147],{"class":97},[91,155485,149328],{"class":206},[91,155487,155488,155491,155493],{"class":93,"line":11},[91,155489,155490],{"class":101},"total_price ",[91,155492,147],{"class":97},[91,155494,155495],{"class":150}," 99.8\n",[91,155497,155498,155501,155503],{"class":93,"line":1157},[91,155499,155500],{"class":101},"is_finished ",[91,155502,147],{"class":97},[91,155504,125782],{"class":150},[38,155506,155507],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[33,155509,50707],{"id":50706},[38,155511,104341,155512,155515],{},[88,155513,155514],{},"type()"," 查看数据类型：",[83,155517,155519],{"className":30353,"code":155518,"language":30355,"meta":10,"style":10},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[88,155520,155521,155535,155549,155563,155577],{"__ignoreMap":10},[91,155522,155523,155525,155527,155529,155531,155533],{"class":93,"line":94},[91,155524,30390],{"class":150},[91,155526,102],{"class":101},[91,155528,103082],{"class":150},[91,155530,102],{"class":101},[91,155532,413],{"class":150},[91,155534,30472],{"class":101},[91,155536,155537,155539,155541,155543,155545,155547],{"class":93,"line":11},[91,155538,30390],{"class":150},[91,155540,102],{"class":101},[91,155542,103082],{"class":150},[91,155544,102],{"class":101},[91,155546,151],{"class":150},[91,155548,30472],{"class":101},[91,155550,155551,155553,155555,155557,155559,155561],{"class":93,"line":1157},[91,155552,30390],{"class":150},[91,155554,102],{"class":101},[91,155556,103082],{"class":150},[91,155558,102],{"class":101},[91,155560,5823],{"class":206},[91,155562,30472],{"class":101},[91,155564,155565,155567,155569,155571,155573,155575],{"class":93,"line":1172},[91,155566,30390],{"class":150},[91,155568,102],{"class":101},[91,155570,103082],{"class":150},[91,155572,102],{"class":101},[91,155574,31451],{"class":150},[91,155576,30472],{"class":101},[91,155578,155579,155581,155583,155585,155587,155589],{"class":93,"line":1178},[91,155580,30390],{"class":150},[91,155582,102],{"class":101},[91,155584,103082],{"class":150},[91,155586,102],{"class":101},[91,155588,95661],{"class":150},[91,155590,30472],{"class":101},[38,155592,155593],{},"输出类似：",[83,155595,155598],{"className":155596,"code":155597,"language":5166,"meta":10},[5164],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[88,155599,155597],{"__ignoreMap":10},[38,155601,9004,155602,107258,155604,155606,155607,155609,155610,21479,155612,155609,155614,155616],{},[88,155603,1332],{},[88,155605,105],{}," 的子类，",[88,155608,31451],{}," 可以当作 ",[88,155611,319],{},[88,155613,33962],{},[88,155615,293],{},"，但业务代码中不要滥用。",[83,155618,155620],{"className":30353,"code":155619,"language":30355,"meta":10,"style":10},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[88,155621,155622,155640],{"__ignoreMap":10},[91,155623,155624,155626,155628,155630,155632,155634,155637],{"class":93,"line":94},[91,155625,30390],{"class":150},[91,155627,102],{"class":101},[91,155629,31451],{"class":150},[91,155631,45541],{"class":97},[91,155633,25093],{"class":150},[91,155635,155636],{"class":101},")   ",[91,155638,155639],{"class":160},"# 2\n",[91,155641,155642,155644,155646,155648,155650,155652,155654],{"class":93,"line":11},[91,155643,30390],{"class":150},[91,155645,102],{"class":101},[91,155647,33962],{"class":150},[91,155649,45541],{"class":97},[91,155651,25093],{"class":150},[91,155653,45783],{"class":101},[91,155655,155656],{"class":160},"# 1\n",[33,155658,155660],{"id":155659},"_26-类型转换","2.6 类型转换",[38,155662,155663],{},"常用转换函数：",[83,155665,155667],{"className":30353,"code":155666,"language":30355,"meta":10,"style":10},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[88,155668,155669,155679,155690,155700],{"__ignoreMap":10},[91,155670,155671,155673,155675,155677],{"class":93,"line":94},[91,155672,105],{"class":150},[91,155674,102],{"class":101},[91,155676,54291],{"class":206},[91,155678,108],{"class":101},[91,155680,155681,155683,155685,155688],{"class":93,"line":11},[91,155682,141],{"class":150},[91,155684,102],{"class":101},[91,155686,155687],{"class":206},"\"3.14\"",[91,155689,108],{"class":101},[91,155691,155692,155694,155696,155698],{"class":93,"line":1157},[91,155693,1277],{"class":150},[91,155695,102],{"class":101},[91,155697,413],{"class":150},[91,155699,108],{"class":101},[91,155701,155702,155704,155706,155708],{"class":93,"line":1172},[91,155703,1332],{"class":150},[91,155705,102],{"class":101},[91,155707,319],{"class":150},[91,155709,108],{"class":101},[38,155711,15114],{},[83,155713,155715],{"className":30353,"code":155714,"language":30355,"meta":10,"style":10},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[88,155716,155717,155726,155737],{"__ignoreMap":10},[91,155718,155719,155721,155723],{"class":93,"line":94},[91,155720,146521],{"class":101},[91,155722,147],{"class":97},[91,155724,155725],{"class":206}," \"18\"\n",[91,155727,155728,155730,155732,155734],{"class":93,"line":11},[91,155729,146521],{"class":101},[91,155731,147],{"class":97},[91,155733,2360],{"class":150},[91,155735,155736],{"class":101},"(age)\n",[91,155738,155739,155741,155744,155746,155748],{"class":93,"line":1157},[91,155740,30390],{"class":150},[91,155742,155743],{"class":101},"(age ",[91,155745,583],{"class":97},[91,155747,25093],{"class":150},[91,155749,108],{"class":101},[38,155751,155752],{},"输入得到的内容永远是字符串：",[83,155754,155756],{"className":30353,"code":155755,"language":30355,"meta":10,"style":10},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[88,155757,155758,155774],{"__ignoreMap":10},[91,155759,155760,155763,155765,155767,155769,155772],{"class":93,"line":94},[91,155761,155762],{"class":101},"num ",[91,155764,147],{"class":97},[91,155766,60580],{"class":150},[91,155768,102],{"class":101},[91,155770,155771],{"class":206},"\"请输入数字:\"",[91,155773,108],{"class":101},[91,155775,155776,155778,155780,155782,155785],{"class":93,"line":11},[91,155777,30390],{"class":150},[91,155779,102],{"class":101},[91,155781,103082],{"class":150},[91,155783,155784],{"class":101},"(num))  ",[91,155786,155787],{"class":160},"# str\n",[38,155789,155790],{},"如果要做数学运算，必须转换：",[83,155792,155794],{"className":30353,"code":155793,"language":30355,"meta":10,"style":10},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[88,155795,155796,155814],{"__ignoreMap":10},[91,155797,155798,155800,155802,155804,155806,155808,155810,155812],{"class":93,"line":94},[91,155799,155762],{"class":101},[91,155801,147],{"class":97},[91,155803,2360],{"class":150},[91,155805,102],{"class":101},[91,155807,53796],{"class":150},[91,155809,102],{"class":101},[91,155811,155771],{"class":206},[91,155813,30472],{"class":101},[91,155815,155816,155818,155820,155822,155824],{"class":93,"line":11},[91,155817,30390],{"class":150},[91,155819,45594],{"class":101},[91,155821,583],{"class":97},[91,155823,2016],{"class":150},[91,155825,108],{"class":101},[38,155827,155828],{},"常见错误：",[83,155830,155832],{"className":30353,"code":155831,"language":30355,"meta":10,"style":10},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[88,155833,155834,155847],{"__ignoreMap":10},[91,155835,155836,155838,155840,155842,155844],{"class":93,"line":94},[91,155837,105],{"class":150},[91,155839,102],{"class":101},[91,155841,155687],{"class":206},[91,155843,155636],{"class":101},[91,155845,155846],{"class":160},"# 错误\n",[91,155848,155849,155851,155853,155856,155859],{"class":93,"line":11},[91,155850,105],{"class":150},[91,155852,102],{"class":101},[91,155854,155855],{"class":206},"\"abc\"",[91,155857,155858],{"class":101},")    ",[91,155860,155846],{"class":160},[38,155862,155863],{},"正确写法：",[83,155865,155867],{"className":30353,"code":155866,"language":30355,"meta":10,"style":10},"num = float(\"3.14\")\n",[88,155868,155869],{"__ignoreMap":10},[91,155870,155871,155873,155875,155877,155879,155881],{"class":93,"line":94},[91,155872,155762],{"class":101},[91,155874,147],{"class":97},[91,155876,109772],{"class":150},[91,155878,102],{"class":101},[91,155880,155687],{"class":206},[91,155882,108],{"class":101},[33,155884,155886],{"id":155885},"_27-运算符","2.7 运算符",[63,155888,155890],{"id":155889},"_271-算术运算符","2.7.1 算术运算符",[239,155892,155893,155904],{},[242,155894,155895],{},[245,155896,155897,155900,155902],{},[248,155898,155899],{},"运算符",[248,155901,25844],{},[248,155903,27467],{},[286,155905,155906,155920,155934,155948,155962,155976,155990],{},[245,155907,155908,155912,155915],{},[291,155909,155910],{},[88,155911,583],{},[291,155913,155914],{},"加法",[291,155916,155917],{},[88,155918,155919],{},"1 + 2",[245,155921,155922,155926,155929],{},[291,155923,155924],{},[88,155925,634],{},[291,155927,155928],{},"减法",[291,155930,155931],{},[88,155932,155933],{},"5 - 3",[245,155935,155936,155940,155943],{},[291,155937,155938],{},[88,155939,557],{},[291,155941,155942],{},"乘法",[291,155944,155945],{},[88,155946,155947],{},"2 * 3",[245,155949,155950,155954,155957],{},[291,155951,155952],{},[88,155953,686],{},[291,155955,155956],{},"除法，结果是浮点数",[291,155958,155959],{},[88,155960,155961],{},"5 \u002F 2",[245,155963,155964,155968,155971],{},[291,155965,155966],{},[88,155967,33304],{},[291,155969,155970],{},"整除",[291,155972,155973],{},[88,155974,155975],{},"5 \u002F\u002F 2",[245,155977,155978,155982,155985],{},[291,155979,155980],{},[88,155981,430],{},[291,155983,155984],{},"取余",[291,155986,155987],{},[88,155988,155989],{},"5 % 2",[245,155991,155992,155996,155999],{},[291,155993,155994],{},[88,155995,10640],{},[291,155997,155998],{},"幂运算",[291,156000,156001],{},[88,156002,156003],{},"2 ** 3",[38,156005,15114],{},[83,156007,156009],{"className":30353,"code":156008,"language":30355,"meta":10,"style":10},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[88,156010,156011,156029,156046,156063],{"__ignoreMap":10},[91,156012,156013,156015,156017,156019,156022,156024,156026],{"class":93,"line":94},[91,156014,30390],{"class":150},[91,156016,102],{"class":101},[91,156018,421],{"class":150},[91,156020,156021],{"class":97}," \u002F",[91,156023,14734],{"class":150},[91,156025,155636],{"class":101},[91,156027,156028],{"class":160},"# 2.5\n",[91,156030,156031,156033,156035,156037,156040,156042,156044],{"class":93,"line":11},[91,156032,30390],{"class":150},[91,156034,102],{"class":101},[91,156036,421],{"class":150},[91,156038,156039],{"class":97}," \u002F\u002F",[91,156041,14734],{"class":150},[91,156043,45783],{"class":101},[91,156045,155639],{"class":160},[91,156047,156048,156050,156052,156054,156057,156059,156061],{"class":93,"line":1157},[91,156049,30390],{"class":150},[91,156051,102],{"class":101},[91,156053,421],{"class":150},[91,156055,156056],{"class":97}," %",[91,156058,14734],{"class":150},[91,156060,155636],{"class":101},[91,156062,155656],{"class":160},[91,156064,156065,156067,156069,156071,156074,156076,156078],{"class":93,"line":1172},[91,156066,30390],{"class":150},[91,156068,102],{"class":101},[91,156070,179],{"class":150},[91,156072,156073],{"class":97}," **",[91,156075,78045],{"class":150},[91,156077,45783],{"class":101},[91,156079,156080],{"class":160},"# 8\n",[63,156082,156084],{"id":156083},"_272-赋值运算符","2.7.2 赋值运算符",[83,156086,156088],{"className":30353,"code":156087,"language":30355,"meta":10,"style":10},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[88,156089,156090,156098,156106,156114,156122],{"__ignoreMap":10},[91,156091,156092,156094,156096],{"class":93,"line":94},[91,156093,155762],{"class":101},[91,156095,147],{"class":97},[91,156097,58403],{"class":150},[91,156099,156100,156102,156104],{"class":93,"line":11},[91,156101,155762],{"class":101},[91,156103,9456],{"class":97},[91,156105,54402],{"class":150},[91,156107,156108,156110,156112],{"class":93,"line":1157},[91,156109,155762],{"class":101},[91,156111,150227],{"class":97},[91,156113,47698],{"class":150},[91,156115,156116,156118,156120],{"class":93,"line":1172},[91,156117,155762],{"class":101},[91,156119,137123],{"class":97},[91,156121,120011],{"class":150},[91,156123,156124,156126,156129],{"class":93,"line":1178},[91,156125,155762],{"class":101},[91,156127,156128],{"class":97},"\u002F=",[91,156130,47698],{"class":150},[38,156132,156133],{},"等价关系：",[83,156135,156137],{"className":30353,"code":156136,"language":30355,"meta":10,"style":10},"num += 1\nnum = num + 1\n",[88,156138,156139,156147],{"__ignoreMap":10},[91,156140,156141,156143,156145],{"class":93,"line":94},[91,156142,155762],{"class":101},[91,156144,9456],{"class":97},[91,156146,55674],{"class":150},[91,156148,156149,156151,156153,156156,156158],{"class":93,"line":11},[91,156150,155762],{"class":101},[91,156152,147],{"class":97},[91,156154,156155],{"class":101}," num ",[91,156157,583],{"class":97},[91,156159,55674],{"class":150},[38,156161,156162,156163,100993,156166,28360],{},"Python 没有 ",[88,156164,156165],{},"num++",[88,156167,156168],{},"num--",[63,156170,156172],{"id":156171},"_273-比较运算符","2.7.3 比较运算符",[38,156174,156175],{},"比较运算结果是布尔值。",[83,156177,156179],{"className":30353,"code":156178,"language":30355,"meta":10,"style":10},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[88,156180,156181,156195,156210,156224],{"__ignoreMap":10},[91,156182,156183,156185,156187,156189,156191,156193],{"class":93,"line":94},[91,156184,30390],{"class":150},[91,156186,102],{"class":101},[91,156188,548],{"class":150},[91,156190,26197],{"class":97},[91,156192,2126],{"class":150},[91,156194,108],{"class":101},[91,156196,156197,156199,156201,156203,156206,156208],{"class":93,"line":11},[91,156198,30390],{"class":150},[91,156200,102],{"class":101},[91,156202,548],{"class":150},[91,156204,156205],{"class":97}," >=",[91,156207,2016],{"class":150},[91,156209,108],{"class":101},[91,156211,156212,156214,156216,156218,156220,156222],{"class":93,"line":1157},[91,156213,30390],{"class":150},[91,156215,102],{"class":101},[91,156217,548],{"class":150},[91,156219,101534],{"class":97},[91,156221,2061],{"class":150},[91,156223,108],{"class":101},[91,156225,156226,156228,156230,156232,156235,156237],{"class":93,"line":1172},[91,156227,30390],{"class":150},[91,156229,102],{"class":101},[91,156231,548],{"class":150},[91,156233,156234],{"class":97}," !=",[91,156236,2061],{"class":150},[91,156238,108],{"class":101},[38,156240,156241,156242,156244,156245,28360],{},"注意：判断相等用 ",[88,156243,2927],{},"，赋值用 ",[88,156246,147],{},[83,156248,156250],{"className":30353,"code":156249,"language":30355,"meta":10,"style":10},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[88,156251,156252,156264],{"__ignoreMap":10},[91,156253,156254,156256,156258,156261],{"class":93,"line":94},[91,156255,146521],{"class":101},[91,156257,147],{"class":97},[91,156259,156260],{"class":150}," 18",[91,156262,156263],{"class":160},"       # 赋值\n",[91,156265,156266,156268,156270,156272],{"class":93,"line":11},[91,156267,146521],{"class":101},[91,156269,2927],{"class":97},[91,156271,156260],{"class":150},[91,156273,156274],{"class":160},"      # 判断是否相等\n",[63,156276,156278],{"id":156277},"_274-逻辑运算符","2.7.4 逻辑运算符",[239,156280,156281,156289],{},[242,156282,156283],{},[245,156284,156285,156287],{},[248,156286,155899],{},[248,156288,25844],{},[286,156290,156291,156300,156309],{},[245,156292,156293,156297],{},[291,156294,156295],{},[88,156296,30437],{},[291,156298,156299],{},"并且",[245,156301,156302,156306],{},[291,156303,156304],{},[88,156305,115065],{},[291,156307,156308],{},"或者",[245,156310,156311,156316],{},[291,156312,156313],{},[88,156314,156315],{},"not",[291,156317,156318],{},"取反",[83,156320,156322],{"className":30353,"code":156321,"language":30355,"meta":10,"style":10},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[88,156323,156324,156332,156341,156345,156360,156374],{"__ignoreMap":10},[91,156325,156326,156328,156330],{"class":93,"line":94},[91,156327,146521],{"class":101},[91,156329,147],{"class":97},[91,156331,88040],{"class":150},[91,156333,156334,156337,156339],{"class":93,"line":11},[91,156335,156336],{"class":101},"has_ticket ",[91,156338,147],{"class":97},[91,156340,153574],{"class":150},[91,156342,156343],{"class":93,"line":1157},[91,156344,2378],{"emptyLinePlaceholder":17},[91,156346,156347,156349,156351,156353,156355,156357],{"class":93,"line":1172},[91,156348,30390],{"class":150},[91,156350,155743],{"class":101},[91,156352,1688],{"class":97},[91,156354,156260],{"class":150},[91,156356,120404],{"class":97},[91,156358,156359],{"class":101}," has_ticket)\n",[91,156361,156362,156364,156366,156368,156370,156372],{"class":93,"line":1178},[91,156363,30390],{"class":150},[91,156365,155743],{"class":101},[91,156367,1012],{"class":97},[91,156369,156260],{"class":150},[91,156371,114176],{"class":97},[91,156373,156359],{"class":101},[91,156375,156376,156378,156380,156382],{"class":93,"line":1192},[91,156377,30390],{"class":150},[91,156379,102],{"class":101},[91,156381,156315],{"class":97},[91,156383,156359],{"class":101},[33,156385,156387],{"id":156386},"_28-字符串定义","2.8 字符串定义",[38,156389,156390],{},"三种常见写法：",[83,156392,156394],{"className":30353,"code":156393,"language":30355,"meta":10,"style":10},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[88,156395,156396,156406,156415,156425],{"__ignoreMap":10},[91,156397,156398,156401,156403],{"class":93,"line":94},[91,156399,156400],{"class":101},"name1 ",[91,156402,147],{"class":97},[91,156404,156405],{"class":206}," '小明'\n",[91,156407,156408,156411,156413],{"class":93,"line":11},[91,156409,156410],{"class":101},"name2 ",[91,156412,147],{"class":97},[91,156414,149328],{"class":206},[91,156416,156417,156420,156422],{"class":93,"line":1157},[91,156418,156419],{"class":101},"text ",[91,156421,147],{"class":97},[91,156423,156424],{"class":206}," \"\"\"这是多行字符串\n",[91,156426,156427],{"class":93,"line":1172},[91,156428,156429],{"class":206},"可以换行\"\"\"\n",[38,156431,156432],{},"字符串中包含引号：",[83,156434,156436],{"className":30353,"code":156435,"language":30355,"meta":10,"style":10},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[88,156437,156438,156448,156458],{"__ignoreMap":10},[91,156439,156440,156443,156445],{"class":93,"line":94},[91,156441,156442],{"class":101},"msg ",[91,156444,147],{"class":97},[91,156446,156447],{"class":206}," \"他说:'你好'\"\n",[91,156449,156450,156453,156455],{"class":93,"line":11},[91,156451,156452],{"class":101},"msg2 ",[91,156454,147],{"class":97},[91,156456,156457],{"class":206}," '他说:\"你好\"'\n",[91,156459,156460,156463,156465,156468,156471,156474,156476],{"class":93,"line":1157},[91,156461,156462],{"class":101},"msg3 ",[91,156464,147],{"class":97},[91,156466,156467],{"class":206}," \"他说:",[91,156469,156470],{"class":150},"\\\"",[91,156472,156473],{"class":206},"你好",[91,156475,156470],{"class":150},[91,156477,25108],{"class":206},[38,156479,156480],{},"常见转义字符：",[239,156482,156483,156492],{},[242,156484,156485],{},[245,156486,156487,156490],{},[248,156488,156489],{},"写法",[248,156491,100675],{},[286,156493,156494,156504,156513,156523,156532],{},[245,156495,156496,156501],{},[291,156497,156498],{},[88,156499,156500],{},"\\n",[291,156502,156503],{},"换行",[245,156505,156506,156510],{},[291,156507,156508],{},[88,156509,1208],{},[291,156511,156512],{},"制表符",[245,156514,156515,156520],{},[291,156516,156517],{},[88,156518,156519],{},"\\\\",[291,156521,156522],{},"反斜杠",[245,156524,156525,156529],{},[291,156526,156527],{},[88,156528,156470],{},[291,156530,156531],{},"双引号",[245,156533,156534,156539],{},[291,156535,156536],{},[88,156537,156538],{},"\\'",[291,156540,156541],{},"单引号",[33,156543,156545],{"id":156544},"_29-字符串拼接","2.9 字符串拼接",[83,156547,156549],{"className":30353,"code":156548,"language":30355,"meta":10,"style":10},"name = \"小明\"\nprint(\"你好，\" + name)\n",[88,156550,156551,156559],{"__ignoreMap":10},[91,156552,156553,156555,156557],{"class":93,"line":94},[91,156554,146511],{"class":101},[91,156556,147],{"class":97},[91,156558,149328],{"class":206},[91,156560,156561,156563,156565,156568,156570],{"class":93,"line":11},[91,156562,30390],{"class":150},[91,156564,102],{"class":101},[91,156566,156567],{"class":206},"\"你好，\"",[91,156569,45541],{"class":97},[91,156571,156572],{"class":101}," name)\n",[38,156574,156575],{},"字符串只能和字符串拼接：",[83,156577,156579],{"className":30353,"code":156578,"language":30355,"meta":10,"style":10},"age = 18\nprint(\"年龄:\" + str(age))\n",[88,156580,156581,156589],{"__ignoreMap":10},[91,156582,156583,156585,156587],{"class":93,"line":94},[91,156584,146521],{"class":101},[91,156586,147],{"class":97},[91,156588,146526],{"class":150},[91,156590,156591,156593,156595,156597,156599,156601],{"class":93,"line":11},[91,156592,30390],{"class":150},[91,156594,102],{"class":101},[91,156596,146492],{"class":206},[91,156598,45541],{"class":97},[91,156600,73894],{"class":150},[91,156602,156603],{"class":101},"(age))\n",[38,156605,156606],{},"更推荐使用格式化字符串。",[33,156608,156610],{"id":156609},"_210-字符串格式化","2.10 字符串格式化",[63,156612,156614],{"id":156613},"_2101-百分号格式化","2.10.1 百分号格式化",[83,156616,156618],{"className":30353,"code":156617,"language":30355,"meta":10,"style":10},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[88,156619,156620,156628,156636,156645,156649],{"__ignoreMap":10},[91,156621,156622,156624,156626],{"class":93,"line":94},[91,156623,146511],{"class":101},[91,156625,147],{"class":97},[91,156627,149328],{"class":206},[91,156629,156630,156632,156634],{"class":93,"line":11},[91,156631,146521],{"class":101},[91,156633,147],{"class":97},[91,156635,146526],{"class":150},[91,156637,156638,156640,156642],{"class":93,"line":1157},[91,156639,155333],{"class":101},[91,156641,147],{"class":97},[91,156643,156644],{"class":150}," 95.5\n",[91,156646,156647],{"class":93,"line":1172},[91,156648,2378],{"emptyLinePlaceholder":17},[91,156650,156651,156653,156655,156658,156661,156664,156667,156670,156673,156675,156677],{"class":93,"line":1178},[91,156652,30390],{"class":150},[91,156654,102],{"class":101},[91,156656,156657],{"class":206},"\"姓名:",[91,156659,156660],{"class":150},"%s",[91,156662,156663],{"class":206}," 年龄:",[91,156665,156666],{"class":150},"%d",[91,156668,156669],{"class":206}," 分数:",[91,156671,156672],{"class":150},"%.1f",[91,156674,353],{"class":206},[91,156676,156056],{"class":97},[91,156678,156679],{"class":101}," (name, age, score))\n",[38,156681,156682],{},"常用占位符：",[239,156684,156685,156694],{},[242,156686,156687],{},[245,156688,156689,156692],{},[248,156690,156691],{},"占位符",[248,156693,25844],{},[286,156695,156696,156704,156712],{},[245,156697,156698,156702],{},[291,156699,156700],{},[88,156701,156660],{},[291,156703,155199],{},[245,156705,156706,156710],{},[291,156707,156708],{},[88,156709,156666],{},[291,156711,155177],{},[245,156713,156714,156719],{},[291,156715,156716],{},[88,156717,156718],{},"%f",[291,156720,155188],{},[38,156722,156723],{},"精度控制：",[83,156725,156727],{"className":30353,"code":156726,"language":30355,"meta":10,"style":10},"price = 12.3456\nprint(\"%.2f\" % price)\n",[88,156728,156729,156738],{"__ignoreMap":10},[91,156730,156731,156733,156735],{"class":93,"line":94},[91,156732,146656],{"class":101},[91,156734,147],{"class":97},[91,156736,156737],{"class":150}," 12.3456\n",[91,156739,156740,156742,156744,156746,156749,156751,156753],{"class":93,"line":11},[91,156741,30390],{"class":150},[91,156743,102],{"class":101},[91,156745,353],{"class":206},[91,156747,156748],{"class":150},"%.2f",[91,156750,353],{"class":206},[91,156752,156056],{"class":97},[91,156754,156755],{"class":101}," price)\n",[63,156757,156759],{"id":156758},"_2102-format方法","2.10.2 format方法",[83,156761,156763],{"className":30353,"code":156762,"language":30355,"meta":10,"style":10},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[88,156764,156765,156773,156781,156785,156804,156824],{"__ignoreMap":10},[91,156766,156767,156769,156771],{"class":93,"line":94},[91,156768,146511],{"class":101},[91,156770,147],{"class":97},[91,156772,149328],{"class":206},[91,156774,156775,156777,156779],{"class":93,"line":11},[91,156776,146521],{"class":101},[91,156778,147],{"class":97},[91,156780,146526],{"class":150},[91,156782,156783],{"class":93,"line":1157},[91,156784,2378],{"emptyLinePlaceholder":17},[91,156786,156787,156789,156791,156793,156795,156797,156799,156801],{"class":93,"line":1172},[91,156788,30390],{"class":150},[91,156790,102],{"class":101},[91,156792,156657],{"class":206},[91,156794,32434],{"class":150},[91,156796,156663],{"class":206},[91,156798,32434],{"class":150},[91,156800,353],{"class":206},[91,156802,156803],{"class":101},".format(name, age))\n",[91,156805,156806,156808,156810,156812,156815,156817,156820,156822],{"class":93,"line":1178},[91,156807,30390],{"class":150},[91,156809,102],{"class":101},[91,156811,156657],{"class":206},[91,156813,156814],{"class":150},"{0}",[91,156816,156663],{"class":206},[91,156818,156819],{"class":150},"{1}",[91,156821,353],{"class":206},[91,156823,156803],{"class":101},[91,156825,156826,156828,156830,156832,156835,156837,156840,156842,156845,156847,156849,156852,156854,156856],{"class":93,"line":1192},[91,156827,30390],{"class":150},[91,156829,102],{"class":101},[91,156831,156657],{"class":206},[91,156833,156834],{"class":150},"{name}",[91,156836,156663],{"class":206},[91,156838,156839],{"class":150},"{age}",[91,156841,353],{"class":206},[91,156843,156844],{"class":101},".format(",[91,156846,79785],{"class":5195},[91,156848,147],{"class":97},[91,156850,156851],{"class":101},"name, ",[91,156853,70196],{"class":5195},[91,156855,147],{"class":97},[91,156857,156858],{"class":101},"age))\n",[63,156860,156862],{"id":156861},"_2103-f-string","2.10.3 f-string",[38,156864,156865],{},"推荐写法：",[83,156867,156869],{"className":30353,"code":156868,"language":30355,"meta":10,"style":10},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[88,156870,156871,156879,156887,156895,156899],{"__ignoreMap":10},[91,156872,156873,156875,156877],{"class":93,"line":94},[91,156874,146511],{"class":101},[91,156876,147],{"class":97},[91,156878,149328],{"class":206},[91,156880,156881,156883,156885],{"class":93,"line":11},[91,156882,146521],{"class":101},[91,156884,147],{"class":97},[91,156886,146526],{"class":150},[91,156888,156889,156891,156893],{"class":93,"line":1157},[91,156890,155333],{"class":101},[91,156892,147],{"class":97},[91,156894,156644],{"class":150},[91,156896,156897],{"class":93,"line":1172},[91,156898,2378],{"emptyLinePlaceholder":17},[91,156900,156901,156903,156905,156907,156909,156911,156913,156915,156917,156919,156921,156923,156925,156927,156930,156933,156935,156937],{"class":93,"line":1178},[91,156902,30390],{"class":150},[91,156904,102],{"class":101},[91,156906,154],{"class":97},[91,156908,156657],{"class":206},[91,156910,998],{"class":150},[91,156912,79785],{"class":101},[91,156914,1048],{"class":150},[91,156916,156663],{"class":206},[91,156918,998],{"class":150},[91,156920,70196],{"class":101},[91,156922,1048],{"class":150},[91,156924,156669],{"class":206},[91,156926,998],{"class":150},[91,156928,156929],{"class":101},"score",[91,156931,156932],{"class":97},":.1f",[91,156934,1048],{"class":150},[91,156936,353],{"class":206},[91,156938,108],{"class":101},[38,156940,156941],{},"表达式也可以放进去：",[83,156943,156945],{"className":30353,"code":156944,"language":30355,"meta":10,"style":10},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[88,156946,156947,156955,156963],{"__ignoreMap":10},[91,156948,156949,156951,156953],{"class":93,"line":94},[91,156950,146656],{"class":101},[91,156952,147],{"class":97},[91,156954,146661],{"class":150},[91,156956,156957,156959,156961],{"class":93,"line":11},[91,156958,146666],{"class":101},[91,156960,147],{"class":97},[91,156962,54402],{"class":150},[91,156964,156965,156967,156969,156971,156974,156976,156978,156980,156983,156985,156988],{"class":93,"line":1157},[91,156966,30390],{"class":150},[91,156968,102],{"class":101},[91,156970,154],{"class":97},[91,156972,156973],{"class":206},"\"总价:",[91,156975,998],{"class":150},[91,156977,146656],{"class":101},[91,156979,557],{"class":97},[91,156981,156982],{"class":101}," count",[91,156984,1048],{"class":150},[91,156986,156987],{"class":206},"元\"",[91,156989,108],{"class":101},[33,156991,156993],{"id":156992},"_211-input输入","2.11 input输入",[38,156995,156996,156999],{},[88,156997,156998],{},"input()"," 会暂停程序，等待用户输入。",[83,157001,157003],{"className":30353,"code":157002,"language":30355,"meta":10,"style":10},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[88,157004,157005,157019],{"__ignoreMap":10},[91,157006,157007,157009,157011,157013,157015,157017],{"class":93,"line":94},[91,157008,146511],{"class":101},[91,157010,147],{"class":97},[91,157012,60580],{"class":150},[91,157014,102],{"class":101},[91,157016,152354],{"class":206},[91,157018,108],{"class":101},[91,157020,157021,157023,157025,157027,157030,157032,157034,157036,157038],{"class":93,"line":11},[91,157022,30390],{"class":150},[91,157024,102],{"class":101},[91,157026,154],{"class":97},[91,157028,157029],{"class":206},"\"你好，",[91,157031,998],{"class":150},[91,157033,79785],{"class":101},[91,157035,1048],{"class":150},[91,157037,353],{"class":206},[91,157039,108],{"class":101},[38,157041,157042],{},"输入整数：",[83,157044,157046],{"className":30353,"code":157045,"language":30355,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[88,157047,157048,157066],{"__ignoreMap":10},[91,157049,157050,157052,157054,157056,157058,157060,157062,157064],{"class":93,"line":94},[91,157051,146521],{"class":101},[91,157053,147],{"class":97},[91,157055,2360],{"class":150},[91,157057,102],{"class":101},[91,157059,53796],{"class":150},[91,157061,102],{"class":101},[91,157063,152369],{"class":206},[91,157065,30472],{"class":101},[91,157067,157068,157070,157072,157074,157077,157079,157081,157083,157086,157088],{"class":93,"line":11},[91,157069,30390],{"class":150},[91,157071,102],{"class":101},[91,157073,154],{"class":97},[91,157075,157076],{"class":206},"\"明年你",[91,157078,998],{"class":150},[91,157080,146521],{"class":101},[91,157082,583],{"class":97},[91,157084,157085],{"class":150}," 1}",[91,157087,149379],{"class":206},[91,157089,108],{"class":101},[38,157091,157092],{},"输入小数：",[83,157094,157096],{"className":30353,"code":157095,"language":30355,"meta":10,"style":10},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[88,157097,157098,157117],{"__ignoreMap":10},[91,157099,157100,157102,157104,157106,157108,157110,157112,157115],{"class":93,"line":94},[91,157101,155306],{"class":101},[91,157103,147],{"class":97},[91,157105,109772],{"class":150},[91,157107,102],{"class":101},[91,157109,53796],{"class":150},[91,157111,102],{"class":101},[91,157113,157114],{"class":206},"\"请输入身高:\"",[91,157116,30472],{"class":101},[91,157118,157119,157121,157123,157125,157128,157130,157132,157135,157137,157140],{"class":93,"line":11},[91,157120,30390],{"class":150},[91,157122,102],{"class":101},[91,157124,154],{"class":97},[91,157126,157127],{"class":206},"\"身高:",[91,157129,998],{"class":150},[91,157131,24956],{"class":101},[91,157133,157134],{"class":97},":.2f",[91,157136,1048],{"class":150},[91,157138,157139],{"class":206},"米\"",[91,157141,108],{"class":101},[33,157143,157145],{"id":157144},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[38,157147,123267],{},[46,157149,157150,157153,157156,157159],{},[49,157151,157152],{},"输入商品单价。",[49,157154,157155],{},"输入购买数量。",[49,157157,157158],{},"输入折扣，例如 0.8 表示八折。",[49,157160,157161],{},"输出最终金额，保留两位小数。",[38,157163,10014],{},[83,157165,157167],{"className":30353,"code":157166,"language":30355,"meta":10,"style":10},"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",[88,157168,157169,157188,157207,157227,157231,157251,157255,157278,157299,157321],{"__ignoreMap":10},[91,157170,157171,157173,157175,157177,157179,157181,157183,157186],{"class":93,"line":94},[91,157172,146656],{"class":101},[91,157174,147],{"class":97},[91,157176,109772],{"class":150},[91,157178,102],{"class":101},[91,157180,53796],{"class":150},[91,157182,102],{"class":101},[91,157184,157185],{"class":206},"\"请输入商品单价:\"",[91,157187,30472],{"class":101},[91,157189,157190,157192,157194,157196,157198,157200,157202,157205],{"class":93,"line":11},[91,157191,146666],{"class":101},[91,157193,147],{"class":97},[91,157195,2360],{"class":150},[91,157197,102],{"class":101},[91,157199,53796],{"class":150},[91,157201,102],{"class":101},[91,157203,157204],{"class":206},"\"请输入购买数量:\"",[91,157206,30472],{"class":101},[91,157208,157209,157212,157214,157216,157218,157220,157222,157225],{"class":93,"line":1157},[91,157210,157211],{"class":101},"discount ",[91,157213,147],{"class":97},[91,157215,109772],{"class":150},[91,157217,102],{"class":101},[91,157219,53796],{"class":150},[91,157221,102],{"class":101},[91,157223,157224],{"class":206},"\"请输入折扣:\"",[91,157226,30472],{"class":101},[91,157228,157229],{"class":93,"line":1172},[91,157230,2378],{"emptyLinePlaceholder":17},[91,157232,157233,157236,157238,157241,157243,157246,157248],{"class":93,"line":1178},[91,157234,157235],{"class":101},"total ",[91,157237,147],{"class":97},[91,157239,157240],{"class":101}," price ",[91,157242,557],{"class":97},[91,157244,157245],{"class":101}," count ",[91,157247,557],{"class":97},[91,157249,157250],{"class":101}," discount\n",[91,157252,157253],{"class":93,"line":1192},[91,157254,2378],{"emptyLinePlaceholder":17},[91,157256,157257,157259,157261,157263,157266,157268,157270,157272,157274,157276],{"class":93,"line":1198},[91,157258,30390],{"class":150},[91,157260,102],{"class":101},[91,157262,154],{"class":97},[91,157264,157265],{"class":206},"\"商品单价:",[91,157267,998],{"class":150},[91,157269,79790],{"class":101},[91,157271,157134],{"class":97},[91,157273,1048],{"class":150},[91,157275,353],{"class":206},[91,157277,108],{"class":101},[91,157279,157280,157282,157284,157286,157289,157291,157293,157295,157297],{"class":93,"line":1289},[91,157281,30390],{"class":150},[91,157283,102],{"class":101},[91,157285,154],{"class":97},[91,157287,157288],{"class":206},"\"购买数量:",[91,157290,998],{"class":150},[91,157292,84409],{"class":101},[91,157294,1048],{"class":150},[91,157296,353],{"class":206},[91,157298,108],{"class":101},[91,157300,157301,157303,157305,157307,157310,157312,157315,157317,157319],{"class":93,"line":1295},[91,157302,30390],{"class":150},[91,157304,102],{"class":101},[91,157306,154],{"class":97},[91,157308,157309],{"class":206},"\"折扣:",[91,157311,998],{"class":150},[91,157313,157314],{"class":101},"discount",[91,157316,1048],{"class":150},[91,157318,353],{"class":206},[91,157320,108],{"class":101},[91,157322,157323,157325,157327,157329,157332,157334,157337,157339,157341,157343],{"class":93,"line":1307},[91,157324,30390],{"class":150},[91,157326,102],{"class":101},[91,157328,154],{"class":97},[91,157330,157331],{"class":206},"\"应付金额:",[91,157333,998],{"class":150},[91,157335,157336],{"class":101},"total",[91,157338,157134],{"class":97},[91,157340,1048],{"class":150},[91,157342,156987],{"class":206},[91,157344,108],{"class":101},[33,157346,157348],{"id":157347},"_213-易错点","2.13 易错点",[46,157350,157351,157356,157362,157370,157373],{},[49,157352,157353,157355],{},[88,157354,156998],{}," 的结果是字符串，做运算前要转换。",[49,157357,157358,157359,28360],{},"字符串拼接时，数字要先 ",[88,157360,157361],{},"str()",[49,157363,157364,157366,157367,157369],{},[88,157365,147],{}," 是赋值，",[88,157368,2927],{}," 是比较。",[49,157371,157372],{},"Python 没有自增自减运算符。",[49,157374,157375],{},"浮点数计算可能有精度误差：",[83,157377,157379],{"className":30353,"code":157378,"language":30355,"meta":10,"style":10},"print(0.1 + 0.2)\n",[88,157380,157381],{"__ignoreMap":10},[91,157382,157383,157385,157387,157389,157391,157394],{"class":93,"line":94},[91,157384,30390],{"class":150},[91,157386,102],{"class":101},[91,157388,86185],{"class":150},[91,157390,45541],{"class":97},[91,157392,157393],{"class":150}," 0.2",[91,157395,108],{"class":101},[38,157397,157398,157399,157402],{},"金额计算如果要求严格，可以后续学习 ",[88,157400,157401],{},"decimal"," 模块。",[33,157404,157406],{"id":157405},"_214-本章练习","2.14 本章练习",[46,157408,157409,157412,157415,157418,157421],{},[49,157410,157411],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[49,157413,157414],{},"输入圆的半径，计算面积，保留两位小数。",[49,157416,157417],{},"输入工资和奖金，计算总收入。",[49,157419,157420],{},"输入摄氏温度，转换为华氏温度。",[49,157422,157423],{},"写一个 BMI 计算程序：",[83,157425,157428],{"className":157426,"code":157427,"language":5166,"meta":10},[5164],"BMI = 体重kg \u002F 身高m ** 2\n",[88,157429,157427],{"__ignoreMap":10},[5105,157431,157432],{},"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":10,"searchDepth":11,"depth":11,"links":157434},[157435,157436,157437,157438,157439,157440,157441,157447,157448,157449,157454,157455,157456,157457],{"id":154996,"depth":11,"text":154997},{"id":155105,"depth":11,"text":155106},{"id":155276,"depth":11,"text":155277},{"id":155353,"depth":11,"text":155354},{"id":50706,"depth":11,"text":50707},{"id":155659,"depth":11,"text":155660},{"id":155885,"depth":11,"text":155886,"children":157442},[157443,157444,157445,157446],{"id":155889,"depth":1157,"text":155890},{"id":156083,"depth":1157,"text":156084},{"id":156171,"depth":1157,"text":156172},{"id":156277,"depth":1157,"text":156278},{"id":156386,"depth":11,"text":156387},{"id":156544,"depth":11,"text":156545},{"id":156609,"depth":11,"text":156610,"children":157450},[157451,157452,157453],{"id":156613,"depth":1157,"text":156614},{"id":156758,"depth":1157,"text":156759},{"id":156861,"depth":1157,"text":156862},{"id":156992,"depth":11,"text":156993},{"id":157144,"depth":11,"text":157145},{"id":157347,"depth":11,"text":157348},{"id":157405,"depth":11,"text":157406},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154988,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157464,"title":157465,"body":157466,"description":13,"extension":14,"meta":159102,"navigation":17,"path":159103,"seo":159104,"stem":159105,"__hash__":159106},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157467,"toc":159083},[157468,157471,157475,157478,157493,157496,157524,157528,157578,157580,157596,157599,157625,157628,157632,157699,157702,157718,157722,157725,157843,157846,157853,157902,157908,157912,157915,158028,158031,158035,158039,158042,158092,158096,158099,158149,158153,158156,158194,158198,158201,158247,158250,158285,158289,158294,158297,158343,158345,158412,158416,158422,158533,158542,158546,158548,158559,158561,158727,158731,158733,158747,158749,158963,158967,158986,159003,159006,159052,159056,159080],[29,157469,157465],{"id":157470},"_3-判断语句",[33,157472,157474],{"id":157473},"_31-布尔值","3.1 布尔值",[38,157476,157477],{},"判断语句依赖布尔值：",[83,157479,157481],{"className":30353,"code":157480,"language":30355,"meta":10,"style":10},"True\nFalse\n",[88,157482,157483,157488],{"__ignoreMap":10},[91,157484,157485],{"class":93,"line":94},[91,157486,157487],{"class":150},"True\n",[91,157489,157490],{"class":93,"line":11},[91,157491,157492],{"class":150},"False\n",[38,157494,157495],{},"比较表达式会产生布尔值：",[83,157497,157499],{"className":30353,"code":157498,"language":30355,"meta":10,"style":10},"age = 18\nprint(age >= 18)  # True\n",[88,157500,157501,157509],{"__ignoreMap":10},[91,157502,157503,157505,157507],{"class":93,"line":94},[91,157504,146521],{"class":101},[91,157506,147],{"class":97},[91,157508,146526],{"class":150},[91,157510,157511,157513,157515,157517,157519,157521],{"class":93,"line":11},[91,157512,30390],{"class":150},[91,157514,155743],{"class":101},[91,157516,1688],{"class":97},[91,157518,156260],{"class":150},[91,157520,45783],{"class":101},[91,157522,157523],{"class":160},"# True\n",[33,157525,157527],{"id":157526},"_32-if基础语法","3.2 if基础语法",[83,157529,157531],{"className":30353,"code":157530,"language":30355,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[88,157532,157533,157551,157555,157567],{"__ignoreMap":10},[91,157534,157535,157537,157539,157541,157543,157545,157547,157549],{"class":93,"line":94},[91,157536,146521],{"class":101},[91,157538,147],{"class":97},[91,157540,2360],{"class":150},[91,157542,102],{"class":101},[91,157544,53796],{"class":150},[91,157546,102],{"class":101},[91,157548,152369],{"class":206},[91,157550,30472],{"class":101},[91,157552,157553],{"class":93,"line":11},[91,157554,2378],{"emptyLinePlaceholder":17},[91,157556,157557,157559,157561,157563,157565],{"class":93,"line":1157},[91,157558,1509],{"class":97},[91,157560,15686],{"class":101},[91,157562,1688],{"class":97},[91,157564,156260],{"class":150},[91,157566,3717],{"class":101},[91,157568,157569,157571,157573,157576],{"class":93,"line":1172},[91,157570,31274],{"class":150},[91,157572,102],{"class":101},[91,157574,157575],{"class":206},"\"可以进入网吧\"",[91,157577,108],{"class":101},[38,157579,9004],{},[46,157581,157582,157587,157590,157593],{},[49,157583,157584,157586],{},[88,157585,1509],{}," 后面是条件表达式。",[49,157588,157589],{},"条件后面必须写冒号。",[49,157591,157592],{},"条件成立时执行缩进代码块。",[49,157594,157595],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[38,157597,157598],{},"错误示例：",[83,157600,157602],{"className":30353,"code":157601,"language":30355,"meta":10,"style":10},"if age >= 18\n    print(\"可以进入\")\n",[88,157603,157604,157614],{"__ignoreMap":10},[91,157605,157606,157608,157610,157612],{"class":93,"line":94},[91,157607,1509],{"class":97},[91,157609,15686],{"class":101},[91,157611,1688],{"class":97},[91,157613,146526],{"class":150},[91,157615,157616,157618,157620,157623],{"class":93,"line":11},[91,157617,31274],{"class":150},[91,157619,102],{"class":101},[91,157621,157622],{"class":206},"\"可以进入\"",[91,157624,108],{"class":101},[38,157626,157627],{},"缺少冒号。",[33,157629,157631],{"id":157630},"_33-if-else","3.3 if else",[83,157633,157635],{"className":30353,"code":157634,"language":30355,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[88,157636,157637,157655,157659,157671,157682,157688],{"__ignoreMap":10},[91,157638,157639,157641,157643,157645,157647,157649,157651,157653],{"class":93,"line":94},[91,157640,146521],{"class":101},[91,157642,147],{"class":97},[91,157644,2360],{"class":150},[91,157646,102],{"class":101},[91,157648,53796],{"class":150},[91,157650,102],{"class":101},[91,157652,152369],{"class":206},[91,157654,30472],{"class":101},[91,157656,157657],{"class":93,"line":11},[91,157658,2378],{"emptyLinePlaceholder":17},[91,157660,157661,157663,157665,157667,157669],{"class":93,"line":1157},[91,157662,1509],{"class":97},[91,157664,15686],{"class":101},[91,157666,1688],{"class":97},[91,157668,156260],{"class":150},[91,157670,3717],{"class":101},[91,157672,157673,157675,157677,157680],{"class":93,"line":1172},[91,157674,31274],{"class":150},[91,157676,102],{"class":101},[91,157678,157679],{"class":206},"\"成年人\"",[91,157681,108],{"class":101},[91,157683,157684,157686],{"class":93,"line":1178},[91,157685,1679],{"class":97},[91,157687,3717],{"class":101},[91,157689,157690,157692,157694,157697],{"class":93,"line":1192},[91,157691,31274],{"class":150},[91,157693,102],{"class":101},[91,157695,157696],{"class":206},"\"未成年人\"",[91,157698,108],{"class":101},[38,157700,157701],{},"执行逻辑：",[46,157703,157704,157710,157715],{},[49,157705,157706,157707,157709],{},"条件成立，执行 ",[88,157708,1509],{}," 代码块。",[49,157711,157712,157713,157709],{},"条件不成立，执行 ",[88,157714,1679],{},[49,157716,157717],{},"两个代码块只会执行其中一个。",[33,157719,157721],{"id":157720},"_34-if-elif-else","3.4 if elif else",[38,157723,157724],{},"多条件判断：",[83,157726,157728],{"className":30353,"code":157727,"language":30355,"meta":10,"style":10},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[88,157729,157730,157748,157752,157766,157777,157791,157802,157815,157826,157832],{"__ignoreMap":10},[91,157731,157732,157734,157736,157738,157740,157742,157744,157746],{"class":93,"line":94},[91,157733,155333],{"class":101},[91,157735,147],{"class":97},[91,157737,2360],{"class":150},[91,157739,102],{"class":101},[91,157741,53796],{"class":150},[91,157743,102],{"class":101},[91,157745,152384],{"class":206},[91,157747,30472],{"class":101},[91,157749,157750],{"class":93,"line":11},[91,157751,2378],{"emptyLinePlaceholder":17},[91,157753,157754,157756,157759,157761,157764],{"class":93,"line":1157},[91,157755,1509],{"class":97},[91,157757,157758],{"class":101}," score ",[91,157760,1688],{"class":97},[91,157762,157763],{"class":150}," 90",[91,157765,3717],{"class":101},[91,157767,157768,157770,157772,157775],{"class":93,"line":1172},[91,157769,31274],{"class":150},[91,157771,102],{"class":101},[91,157773,157774],{"class":206},"\"优秀\"",[91,157776,108],{"class":101},[91,157778,157779,157782,157784,157786,157789],{"class":93,"line":1178},[91,157780,157781],{"class":97},"elif",[91,157783,157758],{"class":101},[91,157785,1688],{"class":97},[91,157787,157788],{"class":150}," 80",[91,157790,3717],{"class":101},[91,157792,157793,157795,157797,157800],{"class":93,"line":1192},[91,157794,31274],{"class":150},[91,157796,102],{"class":101},[91,157798,157799],{"class":206},"\"良好\"",[91,157801,108],{"class":101},[91,157803,157804,157806,157808,157810,157813],{"class":93,"line":1198},[91,157805,157781],{"class":97},[91,157807,157758],{"class":101},[91,157809,1688],{"class":97},[91,157811,157812],{"class":150}," 60",[91,157814,3717],{"class":101},[91,157816,157817,157819,157821,157824],{"class":93,"line":1289},[91,157818,31274],{"class":150},[91,157820,102],{"class":101},[91,157822,157823],{"class":206},"\"及格\"",[91,157825,108],{"class":101},[91,157827,157828,157830],{"class":93,"line":1295},[91,157829,1679],{"class":97},[91,157831,3717],{"class":101},[91,157833,157834,157836,157838,157841],{"class":93,"line":1307},[91,157835,31274],{"class":150},[91,157837,102],{"class":101},[91,157839,157840],{"class":206},"\"不及格\"",[91,157842,108],{"class":101},[38,157844,157845],{},"注意判断顺序很重要。",[38,157847,157848,157849,157852],{},"如果把 ",[88,157850,157851],{},"score >= 60"," 放在最前面：",[83,157854,157856],{"className":30353,"code":157855,"language":30355,"meta":10,"style":10},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[88,157857,157858,157870,157880,157892],{"__ignoreMap":10},[91,157859,157860,157862,157864,157866,157868],{"class":93,"line":94},[91,157861,1509],{"class":97},[91,157863,157758],{"class":101},[91,157865,1688],{"class":97},[91,157867,157812],{"class":150},[91,157869,3717],{"class":101},[91,157871,157872,157874,157876,157878],{"class":93,"line":11},[91,157873,31274],{"class":150},[91,157875,102],{"class":101},[91,157877,157823],{"class":206},[91,157879,108],{"class":101},[91,157881,157882,157884,157886,157888,157890],{"class":93,"line":1157},[91,157883,157781],{"class":97},[91,157885,157758],{"class":101},[91,157887,1688],{"class":97},[91,157889,157763],{"class":150},[91,157891,3717],{"class":101},[91,157893,157894,157896,157898,157900],{"class":93,"line":1172},[91,157895,31274],{"class":150},[91,157897,102],{"class":101},[91,157899,157774],{"class":206},[91,157901,108],{"class":101},[38,157903,157904,157905,157907],{},"成绩 95 会先满足 ",[88,157906,157851],{},"，后面的优秀分支就不会执行。",[33,157909,157911],{"id":157910},"_35-判断语句嵌套","3.5 判断语句嵌套",[38,157913,157914],{},"嵌套判断就是在一个判断内部再写判断。",[83,157916,157918],{"className":30353,"code":157917,"language":30355,"meta":10,"style":10},"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",[88,157919,157920,157938,157953,157957,157969,157983,157993,158000,158011,158017],{"__ignoreMap":10},[91,157921,157922,157924,157926,157928,157930,157932,157934,157936],{"class":93,"line":94},[91,157923,146521],{"class":101},[91,157925,147],{"class":97},[91,157927,2360],{"class":150},[91,157929,102],{"class":101},[91,157931,53796],{"class":150},[91,157933,102],{"class":101},[91,157935,152369],{"class":206},[91,157937,30472],{"class":101},[91,157939,157940,157942,157944,157946,157948,157951],{"class":93,"line":11},[91,157941,156336],{"class":101},[91,157943,147],{"class":97},[91,157945,60580],{"class":150},[91,157947,102],{"class":101},[91,157949,157950],{"class":206},"\"是否有票(y\u002Fn):\"",[91,157952,108],{"class":101},[91,157954,157955],{"class":93,"line":1157},[91,157956,2378],{"emptyLinePlaceholder":17},[91,157958,157959,157961,157963,157965,157967],{"class":93,"line":1172},[91,157960,1509],{"class":97},[91,157962,15686],{"class":101},[91,157964,1688],{"class":97},[91,157966,156260],{"class":150},[91,157968,3717],{"class":101},[91,157970,157971,157973,157976,157978,157981],{"class":93,"line":1178},[91,157972,3079],{"class":97},[91,157974,157975],{"class":101}," has_ticket ",[91,157977,2927],{"class":97},[91,157979,157980],{"class":206}," \"y\"",[91,157982,3717],{"class":101},[91,157984,157985,157987,157989,157991],{"class":93,"line":1192},[91,157986,32426],{"class":150},[91,157988,102],{"class":101},[91,157990,157622],{"class":206},[91,157992,108],{"class":101},[91,157994,157995,157998],{"class":93,"line":1198},[91,157996,157997],{"class":97},"    else",[91,157999,3717],{"class":101},[91,158001,158002,158004,158006,158009],{"class":93,"line":1289},[91,158003,32426],{"class":150},[91,158005,102],{"class":101},[91,158007,158008],{"class":206},"\"请先买票\"",[91,158010,108],{"class":101},[91,158012,158013,158015],{"class":93,"line":1295},[91,158014,1679],{"class":97},[91,158016,3717],{"class":101},[91,158018,158019,158021,158023,158026],{"class":93,"line":1307},[91,158020,31274],{"class":150},[91,158022,102],{"class":101},[91,158024,158025],{"class":206},"\"未成年人禁止进入\"",[91,158027,108],{"class":101},[38,158029,158030],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[33,158032,158034],{"id":158033},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[63,158036,158038],{"id":158037},"_361-and","3.6.1 and",[38,158040,158041],{},"两个条件都成立才成立。",[83,158043,158045],{"className":30353,"code":158044,"language":30355,"meta":10,"style":10},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[88,158046,158047,158055,158063,158067,158082],{"__ignoreMap":10},[91,158048,158049,158051,158053],{"class":93,"line":94},[91,158050,146521],{"class":101},[91,158052,147],{"class":97},[91,158054,88040],{"class":150},[91,158056,158057,158059,158061],{"class":93,"line":11},[91,158058,156336],{"class":101},[91,158060,147],{"class":97},[91,158062,153574],{"class":150},[91,158064,158065],{"class":93,"line":1157},[91,158066,2378],{"emptyLinePlaceholder":17},[91,158068,158069,158071,158073,158075,158077,158079],{"class":93,"line":1172},[91,158070,1509],{"class":97},[91,158072,15686],{"class":101},[91,158074,1688],{"class":97},[91,158076,156260],{"class":150},[91,158078,120404],{"class":97},[91,158080,158081],{"class":101}," has_ticket:\n",[91,158083,158084,158086,158088,158090],{"class":93,"line":1178},[91,158085,31274],{"class":150},[91,158087,102],{"class":101},[91,158089,157622],{"class":206},[91,158091,108],{"class":101},[63,158093,158095],{"id":158094},"_362-or","3.6.2 or",[38,158097,158098],{},"只要一个条件成立就成立。",[83,158100,158102],{"className":30353,"code":158101,"language":30355,"meta":10,"style":10},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[88,158103,158104,158113,158122,158126,158138],{"__ignoreMap":10},[91,158105,158106,158109,158111],{"class":93,"line":94},[91,158107,158108],{"class":101},"is_vip ",[91,158110,147],{"class":97},[91,158112,125782],{"class":150},[91,158114,158115,158118,158120],{"class":93,"line":11},[91,158116,158117],{"class":101},"coupon ",[91,158119,147],{"class":97},[91,158121,153574],{"class":150},[91,158123,158124],{"class":93,"line":1157},[91,158125,2378],{"emptyLinePlaceholder":17},[91,158127,158128,158130,158133,158135],{"class":93,"line":1172},[91,158129,1509],{"class":97},[91,158131,158132],{"class":101}," is_vip ",[91,158134,115065],{"class":97},[91,158136,158137],{"class":101}," coupon:\n",[91,158139,158140,158142,158144,158147],{"class":93,"line":1178},[91,158141,31274],{"class":150},[91,158143,102],{"class":101},[91,158145,158146],{"class":206},"\"可以享受优惠\"",[91,158148,108],{"class":101},[63,158150,158152],{"id":158151},"_363-not","3.6.3 not",[38,158154,158155],{},"取反。",[83,158157,158159],{"className":30353,"code":158158,"language":30355,"meta":10,"style":10},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[88,158160,158161,158170,158174,158183],{"__ignoreMap":10},[91,158162,158163,158166,158168],{"class":93,"line":94},[91,158164,158165],{"class":101},"is_closed ",[91,158167,147],{"class":97},[91,158169,125782],{"class":150},[91,158171,158172],{"class":93,"line":11},[91,158173,2378],{"emptyLinePlaceholder":17},[91,158175,158176,158178,158180],{"class":93,"line":1157},[91,158177,1509],{"class":97},[91,158179,38905],{"class":97},[91,158181,158182],{"class":101}," is_closed:\n",[91,158184,158185,158187,158189,158192],{"class":93,"line":1172},[91,158186,31274],{"class":150},[91,158188,102],{"class":101},[91,158190,158191],{"class":206},"\"店铺营业中\"",[91,158193,108],{"class":101},[33,158195,158197],{"id":158196},"_37-链式比较","3.7 链式比较",[38,158199,158200],{},"Python 支持链式比较：",[83,158202,158204],{"className":30353,"code":158203,"language":30355,"meta":10,"style":10},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[88,158205,158206,158215,158219,158236],{"__ignoreMap":10},[91,158207,158208,158210,158212],{"class":93,"line":94},[91,158209,155333],{"class":101},[91,158211,147],{"class":97},[91,158213,158214],{"class":150}," 85\n",[91,158216,158217],{"class":93,"line":11},[91,158218,2378],{"emptyLinePlaceholder":17},[91,158220,158221,158223,158225,158228,158230,158232,158234],{"class":93,"line":1157},[91,158222,1509],{"class":97},[91,158224,4071],{"class":150},[91,158226,158227],{"class":97}," \u003C=",[91,158229,157758],{"class":101},[91,158231,1566],{"class":97},[91,158233,5733],{"class":150},[91,158235,3717],{"class":101},[91,158237,158238,158240,158242,158245],{"class":93,"line":1172},[91,158239,31274],{"class":150},[91,158241,102],{"class":101},[91,158243,158244],{"class":206},"\"成绩合法\"",[91,158246,108],{"class":101},[38,158248,158249],{},"等价于：",[83,158251,158253],{"className":30353,"code":158252,"language":30355,"meta":10,"style":10},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[88,158254,158255,158275],{"__ignoreMap":10},[91,158256,158257,158259,158261,158263,158265,158267,158269,158271,158273],{"class":93,"line":94},[91,158258,1509],{"class":97},[91,158260,157758],{"class":101},[91,158262,1688],{"class":97},[91,158264,4071],{"class":150},[91,158266,120404],{"class":97},[91,158268,157758],{"class":101},[91,158270,1566],{"class":97},[91,158272,5733],{"class":150},[91,158274,3717],{"class":101},[91,158276,158277,158279,158281,158283],{"class":93,"line":11},[91,158278,31274],{"class":150},[91,158280,102],{"class":101},[91,158282,158244],{"class":206},[91,158284,108],{"class":101},[33,158286,158288],{"id":158287},"_38-真值和假值","3.8 真值和假值",[38,158290,116442,158291,158293],{},[88,158292,1509],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[38,158295,158296],{},"假值：",[83,158298,158300],{"className":30353,"code":158299,"language":30355,"meta":10,"style":10},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[88,158301,158302,158306,158311,158315,158319,158324,158328,158332,158337],{"__ignoreMap":10},[91,158303,158304],{"class":93,"line":94},[91,158305,157492],{"class":150},[91,158307,158308],{"class":93,"line":11},[91,158309,158310],{"class":150},"None\n",[91,158312,158313],{"class":93,"line":1157},[91,158314,3063],{"class":150},[91,158316,158317],{"class":93,"line":1172},[91,158318,32317],{"class":150},[91,158320,158321],{"class":93,"line":1178},[91,158322,158323],{"class":206},"\"\"\n",[91,158325,158326],{"class":93,"line":1192},[91,158327,32332],{"class":101},[91,158329,158330],{"class":93,"line":1198},[91,158331,1954],{"class":101},[91,158333,158334],{"class":93,"line":1289},[91,158335,158336],{"class":101},"{}\n",[91,158338,158339,158341],{"class":93,"line":1295},[91,158340,155265],{"class":150},[91,158342,1954],{"class":101},[38,158344,15114],{},[83,158346,158348],{"className":30353,"code":158347,"language":30355,"meta":10,"style":10},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[88,158349,158350,158364,158368,158375,158395,158401],{"__ignoreMap":10},[91,158351,158352,158354,158356,158358,158360,158362],{"class":93,"line":94},[91,158353,146511],{"class":101},[91,158355,147],{"class":97},[91,158357,60580],{"class":150},[91,158359,102],{"class":101},[91,158361,152354],{"class":206},[91,158363,108],{"class":101},[91,158365,158366],{"class":93,"line":11},[91,158367,2378],{"emptyLinePlaceholder":17},[91,158369,158370,158372],{"class":93,"line":1157},[91,158371,1509],{"class":97},[91,158373,158374],{"class":101}," name:\n",[91,158376,158377,158379,158381,158383,158385,158387,158389,158391,158393],{"class":93,"line":1172},[91,158378,31274],{"class":150},[91,158380,102],{"class":101},[91,158382,154],{"class":97},[91,158384,157029],{"class":206},[91,158386,998],{"class":150},[91,158388,79785],{"class":101},[91,158390,1048],{"class":150},[91,158392,353],{"class":206},[91,158394,108],{"class":101},[91,158396,158397,158399],{"class":93,"line":1178},[91,158398,1679],{"class":97},[91,158400,3717],{"class":101},[91,158402,158403,158405,158407,158410],{"class":93,"line":1192},[91,158404,31274],{"class":150},[91,158406,102],{"class":101},[91,158408,158409],{"class":206},"\"姓名不能为空\"",[91,158411,108],{"class":101},[33,158413,158415],{"id":158414},"_39-match语句","3.9 match语句",[38,158417,158418,158419,158421],{},"Python 3.10 开始支持 ",[88,158420,71240],{},"。它适合处理固定选项。",[83,158423,158425],{"className":30353,"code":158424,"language":30355,"meta":10,"style":10},"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",[88,158426,158427,158443,158447,158454,158464,158475,158484,158495,158504,158515,158522],{"__ignoreMap":10},[91,158428,158429,158432,158434,158436,158438,158441],{"class":93,"line":94},[91,158430,158431],{"class":101},"command ",[91,158433,147],{"class":97},[91,158435,60580],{"class":150},[91,158437,102],{"class":101},[91,158439,158440],{"class":206},"\"请输入命令:\"",[91,158442,108],{"class":101},[91,158444,158445],{"class":93,"line":11},[91,158446,2378],{"emptyLinePlaceholder":17},[91,158448,158449,158451],{"class":93,"line":1157},[91,158450,71240],{"class":97},[91,158452,158453],{"class":101}," command:\n",[91,158455,158456,158459,158462],{"class":93,"line":1172},[91,158457,158458],{"class":97},"    case",[91,158460,158461],{"class":206}," \"start\"",[91,158463,3717],{"class":101},[91,158465,158466,158468,158470,158473],{"class":93,"line":1178},[91,158467,32426],{"class":150},[91,158469,102],{"class":101},[91,158471,158472],{"class":206},"\"启动\"",[91,158474,108],{"class":101},[91,158476,158477,158479,158482],{"class":93,"line":1192},[91,158478,158458],{"class":97},[91,158480,158481],{"class":206}," \"stop\"",[91,158483,3717],{"class":101},[91,158485,158486,158488,158490,158493],{"class":93,"line":1198},[91,158487,32426],{"class":150},[91,158489,102],{"class":101},[91,158491,158492],{"class":206},"\"停止\"",[91,158494,108],{"class":101},[91,158496,158497,158499,158502],{"class":93,"line":1289},[91,158498,158458],{"class":97},[91,158500,158501],{"class":206}," \"restart\"",[91,158503,3717],{"class":101},[91,158505,158506,158508,158510,158513],{"class":93,"line":1295},[91,158507,32426],{"class":150},[91,158509,102],{"class":101},[91,158511,158512],{"class":206},"\"重启\"",[91,158514,108],{"class":101},[91,158516,158517,158519],{"class":93,"line":1307},[91,158518,158458],{"class":97},[91,158520,158521],{"class":101}," _:\n",[91,158523,158524,158526,158528,158531],{"class":93,"line":1590},[91,158525,32426],{"class":150},[91,158527,102],{"class":101},[91,158529,158530],{"class":206},"\"未知命令\"",[91,158532,108],{"class":101},[38,158534,158535,158536,158538,158539,158541],{},"入门阶段掌握 ",[88,158537,154633],{}," 更重要，",[88,158540,71240],{}," 可以作为补充。",[33,158543,158545],{"id":158544},"_310-小案例成绩等级","3.10 小案例：成绩等级",[38,158547,123267],{},[46,158549,158550,158553,158556],{},[49,158551,158552],{},"输入成绩。",[49,158554,158555],{},"判断成绩是否合法。",[49,158557,158558],{},"输出等级。",[38,158560,10014],{},[83,158562,158564],{"className":30353,"code":158563,"language":30355,"meta":10,"style":10},"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",[88,158565,158566,158584,158588,158606,158617,158629,158640,158652,158663,158676,158687,158699,158710,158716],{"__ignoreMap":10},[91,158567,158568,158570,158572,158574,158576,158578,158580,158582],{"class":93,"line":94},[91,158569,155333],{"class":101},[91,158571,147],{"class":97},[91,158573,109772],{"class":150},[91,158575,102],{"class":101},[91,158577,53796],{"class":150},[91,158579,102],{"class":101},[91,158581,152384],{"class":206},[91,158583,30472],{"class":101},[91,158585,158586],{"class":93,"line":11},[91,158587,2378],{"emptyLinePlaceholder":17},[91,158589,158590,158592,158594,158596,158598,158600,158602,158604],{"class":93,"line":1157},[91,158591,1509],{"class":97},[91,158593,38905],{"class":97},[91,158595,4071],{"class":150},[91,158597,158227],{"class":97},[91,158599,157758],{"class":101},[91,158601,1566],{"class":97},[91,158603,5733],{"class":150},[91,158605,3717],{"class":101},[91,158607,158608,158610,158612,158615],{"class":93,"line":1172},[91,158609,31274],{"class":150},[91,158611,102],{"class":101},[91,158613,158614],{"class":206},"\"成绩不合法\"",[91,158616,108],{"class":101},[91,158618,158619,158621,158623,158625,158627],{"class":93,"line":1178},[91,158620,157781],{"class":97},[91,158622,157758],{"class":101},[91,158624,1688],{"class":97},[91,158626,157763],{"class":150},[91,158628,3717],{"class":101},[91,158630,158631,158633,158635,158638],{"class":93,"line":1192},[91,158632,31274],{"class":150},[91,158634,102],{"class":101},[91,158636,158637],{"class":206},"\"等级:A\"",[91,158639,108],{"class":101},[91,158641,158642,158644,158646,158648,158650],{"class":93,"line":1198},[91,158643,157781],{"class":97},[91,158645,157758],{"class":101},[91,158647,1688],{"class":97},[91,158649,157788],{"class":150},[91,158651,3717],{"class":101},[91,158653,158654,158656,158658,158661],{"class":93,"line":1289},[91,158655,31274],{"class":150},[91,158657,102],{"class":101},[91,158659,158660],{"class":206},"\"等级:B\"",[91,158662,108],{"class":101},[91,158664,158665,158667,158669,158671,158674],{"class":93,"line":1295},[91,158666,157781],{"class":97},[91,158668,157758],{"class":101},[91,158670,1688],{"class":97},[91,158672,158673],{"class":150}," 70",[91,158675,3717],{"class":101},[91,158677,158678,158680,158682,158685],{"class":93,"line":1307},[91,158679,31274],{"class":150},[91,158681,102],{"class":101},[91,158683,158684],{"class":206},"\"等级:C\"",[91,158686,108],{"class":101},[91,158688,158689,158691,158693,158695,158697],{"class":93,"line":1590},[91,158690,157781],{"class":97},[91,158692,157758],{"class":101},[91,158694,1688],{"class":97},[91,158696,157812],{"class":150},[91,158698,3717],{"class":101},[91,158700,158701,158703,158705,158708],{"class":93,"line":1595},[91,158702,31274],{"class":150},[91,158704,102],{"class":101},[91,158706,158707],{"class":206},"\"等级:D\"",[91,158709,108],{"class":101},[91,158711,158712,158714],{"class":93,"line":1601},[91,158713,1679],{"class":97},[91,158715,3717],{"class":101},[91,158717,158718,158720,158722,158725],{"class":93,"line":1606},[91,158719,31274],{"class":150},[91,158721,102],{"class":101},[91,158723,158724],{"class":206},"\"等级:E\"",[91,158726,108],{"class":101},[33,158728,158730],{"id":158729},"_311-小案例会员折扣","3.11 小案例：会员折扣",[38,158732,123267],{},[46,158734,158735,158738,158741,158744],{},[49,158736,158737],{},"输入消费金额。",[49,158739,158740],{},"输入会员等级，普通、银卡、金卡。",[49,158742,158743],{},"普通不打折，银卡 9 折，金卡 8 折。",[49,158745,158746],{},"满 500 再减 50。",[38,158748,10014],{},[83,158750,158752],{"className":30353,"code":158751,"language":30355,"meta":10,"style":10},"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",[88,158753,158754,158774,158790,158794,158802,158806,158820,158830,158843,158852,158865,158873,158879,158890,158894,158908,158912,158926,158936,158940],{"__ignoreMap":10},[91,158755,158756,158759,158761,158763,158765,158767,158769,158772],{"class":93,"line":94},[91,158757,158758],{"class":101},"amount ",[91,158760,147],{"class":97},[91,158762,109772],{"class":150},[91,158764,102],{"class":101},[91,158766,53796],{"class":150},[91,158768,102],{"class":101},[91,158770,158771],{"class":206},"\"请输入消费金额:\"",[91,158773,30472],{"class":101},[91,158775,158776,158779,158781,158783,158785,158788],{"class":93,"line":11},[91,158777,158778],{"class":101},"level ",[91,158780,147],{"class":97},[91,158782,60580],{"class":150},[91,158784,102],{"class":101},[91,158786,158787],{"class":206},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[91,158789,108],{"class":101},[91,158791,158792],{"class":93,"line":1157},[91,158793,2378],{"emptyLinePlaceholder":17},[91,158795,158796,158798,158800],{"class":93,"line":1172},[91,158797,157211],{"class":101},[91,158799,147],{"class":97},[91,158801,55674],{"class":150},[91,158803,158804],{"class":93,"line":1178},[91,158805,2378],{"emptyLinePlaceholder":17},[91,158807,158808,158810,158813,158815,158818],{"class":93,"line":1192},[91,158809,1509],{"class":97},[91,158811,158812],{"class":101}," level ",[91,158814,2927],{"class":97},[91,158816,158817],{"class":206}," \"银卡\"",[91,158819,3717],{"class":101},[91,158821,158822,158825,158827],{"class":93,"line":1198},[91,158823,158824],{"class":101},"    discount ",[91,158826,147],{"class":97},[91,158828,158829],{"class":150}," 0.9\n",[91,158831,158832,158834,158836,158838,158841],{"class":93,"line":1289},[91,158833,157781],{"class":97},[91,158835,158812],{"class":101},[91,158837,2927],{"class":97},[91,158839,158840],{"class":206}," \"金卡\"",[91,158842,3717],{"class":101},[91,158844,158845,158847,158849],{"class":93,"line":1295},[91,158846,158824],{"class":101},[91,158848,147],{"class":97},[91,158850,158851],{"class":150}," 0.8\n",[91,158853,158854,158856,158858,158860,158863],{"class":93,"line":1307},[91,158855,157781],{"class":97},[91,158857,158812],{"class":101},[91,158859,2927],{"class":97},[91,158861,158862],{"class":206}," \"普通\"",[91,158864,3717],{"class":101},[91,158866,158867,158869,158871],{"class":93,"line":1590},[91,158868,158824],{"class":101},[91,158870,147],{"class":97},[91,158872,55674],{"class":150},[91,158874,158875,158877],{"class":93,"line":1595},[91,158876,1679],{"class":97},[91,158878,3717],{"class":101},[91,158880,158881,158883,158885,158888],{"class":93,"line":1601},[91,158882,31274],{"class":150},[91,158884,102],{"class":101},[91,158886,158887],{"class":206},"\"会员等级输入错误，按普通会员计算\"",[91,158889,108],{"class":101},[91,158891,158892],{"class":93,"line":1606},[91,158893,2378],{"emptyLinePlaceholder":17},[91,158895,158896,158899,158901,158904,158906],{"class":93,"line":1620},[91,158897,158898],{"class":101},"pay ",[91,158900,147],{"class":97},[91,158902,158903],{"class":101}," amount ",[91,158905,557],{"class":97},[91,158907,157250],{"class":101},[91,158909,158910],{"class":93,"line":1625},[91,158911,2378],{"emptyLinePlaceholder":17},[91,158913,158914,158916,158919,158921,158924],{"class":93,"line":1631},[91,158915,1509],{"class":97},[91,158917,158918],{"class":101}," pay ",[91,158920,1688],{"class":97},[91,158922,158923],{"class":150}," 500",[91,158925,3717],{"class":101},[91,158927,158928,158931,158933],{"class":93,"line":1652},[91,158929,158930],{"class":101},"    pay ",[91,158932,150227],{"class":97},[91,158934,158935],{"class":150}," 50\n",[91,158937,158938],{"class":93,"line":1657},[91,158939,2378],{"emptyLinePlaceholder":17},[91,158941,158942,158944,158946,158948,158950,158952,158955,158957,158959,158961],{"class":93,"line":1671},[91,158943,30390],{"class":150},[91,158945,102],{"class":101},[91,158947,154],{"class":97},[91,158949,157331],{"class":206},[91,158951,998],{"class":150},[91,158953,158954],{"class":101},"pay",[91,158956,157134],{"class":97},[91,158958,1048],{"class":150},[91,158960,156987],{"class":206},[91,158962,108],{"class":101},[33,158964,158966],{"id":158965},"_312-易错点","3.12 易错点",[46,158968,158969,158972,158975,158978,158983],{},[49,158970,158971],{},"冒号不能漏。",[49,158973,158974],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[49,158976,158977],{},"多分支判断要注意顺序。",[49,158979,158980,158981,28360],{},"判断相等用 ",[88,158982,2927],{},[49,158984,158985],{},"字符串比较区分大小写：",[83,158987,158989],{"className":30353,"code":158988,"language":30355,"meta":10,"style":10},"\"Y\" == \"y\"  # False\n",[88,158990,158991],{"__ignoreMap":10},[91,158992,158993,158996,158998,159000],{"class":93,"line":94},[91,158994,158995],{"class":206},"\"Y\"",[91,158997,101534],{"class":97},[91,158999,157980],{"class":206},[91,159001,159002],{"class":160},"  # False\n",[38,159004,159005],{},"可转换后再判断：",[83,159007,159009],{"className":30353,"code":159008,"language":30355,"meta":10,"style":10},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[88,159010,159011,159028,159041],{"__ignoreMap":10},[91,159012,159013,159016,159018,159020,159022,159025],{"class":93,"line":94},[91,159014,159015],{"class":101},"answer ",[91,159017,147],{"class":97},[91,159019,60580],{"class":150},[91,159021,102],{"class":101},[91,159023,159024],{"class":206},"\"是否继续(y\u002Fn):\"",[91,159026,159027],{"class":101},").lower()\n",[91,159029,159030,159032,159035,159037,159039],{"class":93,"line":11},[91,159031,1509],{"class":97},[91,159033,159034],{"class":101}," answer ",[91,159036,2927],{"class":97},[91,159038,157980],{"class":206},[91,159040,3717],{"class":101},[91,159042,159043,159045,159047,159050],{"class":93,"line":1157},[91,159044,31274],{"class":150},[91,159046,102],{"class":101},[91,159048,159049],{"class":206},"\"继续\"",[91,159051,108],{"class":101},[33,159053,159055],{"id":159054},"_313-本章练习","3.13 本章练习",[46,159057,159058,159061,159064,159067,159077],{},[49,159059,159060],{},"输入年龄，判断是否成年。",[49,159062,159063],{},"输入年份，判断是否为闰年。",[49,159065,159066],{},"输入三个数字，输出最大值。",[49,159068,159069,159070,159073,159074,159076],{},"写登录判断：用户名是 ",[88,159071,159072],{},"admin"," 且密码是 ",[88,159075,15063],{}," 才登录成功。",[49,159078,159079],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5105,159081,159082],{},"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":10,"searchDepth":11,"depth":11,"links":159084},[159085,159086,159087,159088,159089,159090,159095,159096,159097,159098,159099,159100,159101],{"id":157473,"depth":11,"text":157474},{"id":157526,"depth":11,"text":157527},{"id":157630,"depth":11,"text":157631},{"id":157720,"depth":11,"text":157721},{"id":157910,"depth":11,"text":157911},{"id":158033,"depth":11,"text":158034,"children":159091},[159092,159093,159094],{"id":158037,"depth":1157,"text":158038},{"id":158094,"depth":1157,"text":158095},{"id":158151,"depth":1157,"text":158152},{"id":158196,"depth":11,"text":158197},{"id":158287,"depth":11,"text":158288},{"id":158414,"depth":11,"text":158415},{"id":158544,"depth":11,"text":158545},{"id":158729,"depth":11,"text":158730},{"id":158965,"depth":11,"text":158966},{"id":159054,"depth":11,"text":159055},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157465,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159108,"title":159109,"body":159110,"description":13,"extension":14,"meta":160879,"navigation":17,"path":160880,"seo":160881,"stem":160882,"__hash__":160883},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159111,"toc":160859},[159112,159115,159119,159125,159128,159145,159149,159151,159168,159170,159215,159217,159234,159238,159241,159307,159310,159328,159332,159493,159502,159506,159510,159515,159562,159564,159570,159574,159579,159626,159628,159634,159638,159643,159679,159682,159729,159733,159739,159797,159802,159833,159838,159842,159897,159900,159972,159975,160034,160038,160041,160116,160119,160123,160229,160232,160258,160262,160274,160343,160346,160438,160442,160444,160455,160457,160587,160591,160793,160801,160805,160835,160839,160856],[29,159113,159109],{"id":159114},"_4-循环语句",[33,159116,159118],{"id":159117},"_41-为什么需要循环","4.1 为什么需要循环",[38,159120,159121,159122,159124],{},"如果要输出 1 到 100，不应该写 100 行 ",[88,159123,146447],{},"，而应该用循环。",[38,159126,159127],{},"循环适合处理重复任务：",[46,159129,159130,159133,159136,159139,159142],{},[49,159131,159132],{},"重复输出。",[49,159134,159135],{},"重复输入。",[49,159137,159138],{},"遍历数据。",[49,159140,159141],{},"持续执行菜单。",[49,159143,159144],{},"批量处理文件或数据。",[33,159146,159148],{"id":159147},"_42-while循环","4.2 while循环",[38,159150,5160],{},[83,159152,159154],{"className":30353,"code":159153,"language":30355,"meta":10,"style":10},"while 条件:\n    循环体\n",[88,159155,159156,159163],{"__ignoreMap":10},[91,159157,159158,159160],{"class":93,"line":94},[91,159159,108638],{"class":97},[91,159161,159162],{"class":101}," 条件:\n",[91,159164,159165],{"class":93,"line":11},[91,159166,159167],{"class":101},"    循环体\n",[38,159169,15114],{},[83,159171,159173],{"className":30353,"code":159172,"language":30355,"meta":10,"style":10},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[88,159174,159175,159183,159187,159199,159206],{"__ignoreMap":10},[91,159176,159177,159179,159181],{"class":93,"line":94},[91,159178,100123],{"class":101},[91,159180,147],{"class":97},[91,159182,55674],{"class":150},[91,159184,159185],{"class":93,"line":11},[91,159186,2378],{"emptyLinePlaceholder":17},[91,159188,159189,159191,159193,159195,159197],{"class":93,"line":1157},[91,159190,108638],{"class":97},[91,159192,9417],{"class":101},[91,159194,1566],{"class":97},[91,159196,2126],{"class":150},[91,159198,3717],{"class":101},[91,159200,159201,159203],{"class":93,"line":1172},[91,159202,31274],{"class":150},[91,159204,159205],{"class":101},"(i)\n",[91,159207,159208,159211,159213],{"class":93,"line":1178},[91,159209,159210],{"class":101},"    i ",[91,159212,9456],{"class":97},[91,159214,55674],{"class":150},[38,159216,80904],{},[46,159218,159219,159225,159228,159231],{},[49,159220,159221,159222,28360],{},"判断条件 ",[88,159223,159224],{},"i \u003C= 5",[49,159226,159227],{},"条件成立，执行循环体。",[49,159229,159230],{},"执行完后回到条件判断。",[49,159232,159233],{},"条件不成立，退出循环。",[33,159235,159237],{"id":159236},"_43-while累加","4.3 while累加",[38,159239,159240],{},"计算 1 到 100 的和：",[83,159242,159244],{"className":30353,"code":159243,"language":30355,"meta":10,"style":10},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[88,159245,159246,159254,159262,159266,159278,159288,159296,159300],{"__ignoreMap":10},[91,159247,159248,159250,159252],{"class":93,"line":94},[91,159249,100123],{"class":101},[91,159251,147],{"class":97},[91,159253,55674],{"class":150},[91,159255,159256,159258,159260],{"class":93,"line":11},[91,159257,157235],{"class":101},[91,159259,147],{"class":97},[91,159261,47308],{"class":150},[91,159263,159264],{"class":93,"line":1157},[91,159265,2378],{"emptyLinePlaceholder":17},[91,159267,159268,159270,159272,159274,159276],{"class":93,"line":1172},[91,159269,108638],{"class":97},[91,159271,9417],{"class":101},[91,159273,1566],{"class":97},[91,159275,5733],{"class":150},[91,159277,3717],{"class":101},[91,159279,159280,159283,159285],{"class":93,"line":1178},[91,159281,159282],{"class":101},"    total ",[91,159284,9456],{"class":97},[91,159286,159287],{"class":101}," i\n",[91,159289,159290,159292,159294],{"class":93,"line":1192},[91,159291,159210],{"class":101},[91,159293,9456],{"class":97},[91,159295,55674],{"class":150},[91,159297,159298],{"class":93,"line":1198},[91,159299,2378],{"emptyLinePlaceholder":17},[91,159301,159302,159304],{"class":93,"line":1289},[91,159303,30390],{"class":150},[91,159305,159306],{"class":101},"(total)\n",[38,159308,159309],{},"核心思想：",[46,159311,159312,159317,159322],{},[49,159313,159314,159316],{},[88,159315,543],{}," 控制循环次数。",[49,159318,159319,159321],{},[88,159320,157336],{}," 保存累加结果。",[49,159323,159324,159325,159327],{},"每轮循环都要更新 ",[88,159326,543],{},"，否则可能死循环。",[33,159329,159331],{"id":159330},"_44-while猜数字","4.4 while猜数字",[83,159333,159335],{"className":30353,"code":159334,"language":30355,"meta":10,"style":10},"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",[88,159336,159337,159343,159347,159364,159372,159376,159384,159404,159413,159417,159429,159440,159450,159461,159467,159489],{"__ignoreMap":10},[91,159338,159339,159341],{"class":93,"line":94},[91,159340,30367],{"class":97},[91,159342,45303],{"class":101},[91,159344,159345],{"class":93,"line":11},[91,159346,2378],{"emptyLinePlaceholder":17},[91,159348,159349,159351,159353,159356,159358,159360,159362],{"class":93,"line":1157},[91,159350,159015],{"class":101},[91,159352,147],{"class":97},[91,159354,159355],{"class":101}," random.randint(",[91,159357,319],{"class":150},[91,159359,12414],{"class":101},[91,159361,413],{"class":150},[91,159363,108],{"class":101},[91,159365,159366,159368,159370],{"class":93,"line":1172},[91,159367,146666],{"class":101},[91,159369,147],{"class":97},[91,159371,47308],{"class":150},[91,159373,159374],{"class":93,"line":1178},[91,159375,2378],{"emptyLinePlaceholder":17},[91,159377,159378,159380,159382],{"class":93,"line":1192},[91,159379,108638],{"class":97},[91,159381,95267],{"class":150},[91,159383,3717],{"class":101},[91,159385,159386,159389,159391,159393,159395,159397,159399,159402],{"class":93,"line":1198},[91,159387,159388],{"class":101},"    guess ",[91,159390,147],{"class":97},[91,159392,2360],{"class":150},[91,159394,102],{"class":101},[91,159396,53796],{"class":150},[91,159398,102],{"class":101},[91,159400,159401],{"class":206},"\"请输入1到100之间的数字:\"",[91,159403,30472],{"class":101},[91,159405,159406,159409,159411],{"class":93,"line":1289},[91,159407,159408],{"class":101},"    count ",[91,159410,9456],{"class":97},[91,159412,55674],{"class":150},[91,159414,159415],{"class":93,"line":1295},[91,159416,2378],{"emptyLinePlaceholder":17},[91,159418,159419,159421,159424,159426],{"class":93,"line":1307},[91,159420,3079],{"class":97},[91,159422,159423],{"class":101}," guess ",[91,159425,1062],{"class":97},[91,159427,159428],{"class":101}," answer:\n",[91,159430,159431,159433,159435,159438],{"class":93,"line":1590},[91,159432,32426],{"class":150},[91,159434,102],{"class":101},[91,159436,159437],{"class":206},"\"猜大了\"",[91,159439,108],{"class":101},[91,159441,159442,159444,159446,159448],{"class":93,"line":1595},[91,159443,39268],{"class":97},[91,159445,159423],{"class":101},[91,159447,1012],{"class":97},[91,159449,159428],{"class":101},[91,159451,159452,159454,159456,159459],{"class":93,"line":1601},[91,159453,32426],{"class":150},[91,159455,102],{"class":101},[91,159457,159458],{"class":206},"\"猜小了\"",[91,159460,108],{"class":101},[91,159462,159463,159465],{"class":93,"line":1606},[91,159464,157997],{"class":97},[91,159466,3717],{"class":101},[91,159468,159469,159471,159473,159475,159478,159480,159482,159484,159487],{"class":93,"line":1620},[91,159470,32426],{"class":150},[91,159472,102],{"class":101},[91,159474,154],{"class":97},[91,159476,159477],{"class":206},"\"猜对了，一共猜了",[91,159479,998],{"class":150},[91,159481,84409],{"class":101},[91,159483,1048],{"class":150},[91,159485,159486],{"class":206},"次\"",[91,159488,108],{"class":101},[91,159490,159491],{"class":93,"line":1625},[91,159492,31602],{"class":97},[38,159494,159495,159498,159499,159501],{},[88,159496,159497],{},"while True"," 表示无限循环，通常配合 ",[88,159500,2031],{}," 使用。",[33,159503,159505],{"id":159504},"_45-break和continue","4.5 break和continue",[63,159507,159509],{"id":159508},"_451-break","4.5.1 break",[38,159511,159512,159514],{},[88,159513,2031],{}," 直接结束整个循环。",[83,159516,159518],{"className":30353,"code":159517,"language":30355,"meta":10,"style":10},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[88,159519,159520,159540,159552,159556],{"__ignoreMap":10},[91,159521,159522,159524,159526,159528,159530,159532,159534,159536,159538],{"class":93,"line":94},[91,159523,3003],{"class":97},[91,159525,9417],{"class":101},[91,159527,26018],{"class":97},[91,159529,32418],{"class":150},[91,159531,102],{"class":101},[91,159533,319],{"class":150},[91,159535,12414],{"class":101},[91,159537,446],{"class":150},[91,159539,30761],{"class":101},[91,159541,159542,159544,159546,159548,159550],{"class":93,"line":11},[91,159543,3079],{"class":97},[91,159545,9417],{"class":101},[91,159547,2927],{"class":97},[91,159549,78045],{"class":150},[91,159551,3717],{"class":101},[91,159553,159554],{"class":93,"line":1157},[91,159555,31602],{"class":97},[91,159557,159558,159560],{"class":93,"line":1172},[91,159559,31274],{"class":150},[91,159561,159205],{"class":101},[38,159563,146432],{},[83,159565,159568],{"className":159566,"code":159567,"language":5166,"meta":10},[5164],"1\n2\n",[88,159569,159567],{"__ignoreMap":10},[63,159571,159573],{"id":159572},"_452-continue","4.5.2 continue",[38,159575,159576,159578],{},[88,159577,154647],{}," 跳过本轮剩余代码，进入下一轮循环。",[83,159580,159582],{"className":30353,"code":159581,"language":30355,"meta":10,"style":10},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[88,159583,159584,159604,159616,159620],{"__ignoreMap":10},[91,159585,159586,159588,159590,159592,159594,159596,159598,159600,159602],{"class":93,"line":94},[91,159587,3003],{"class":97},[91,159589,9417],{"class":101},[91,159591,26018],{"class":97},[91,159593,32418],{"class":150},[91,159595,102],{"class":101},[91,159597,319],{"class":150},[91,159599,12414],{"class":101},[91,159601,446],{"class":150},[91,159603,30761],{"class":101},[91,159605,159606,159608,159610,159612,159614],{"class":93,"line":11},[91,159607,3079],{"class":97},[91,159609,9417],{"class":101},[91,159611,2927],{"class":97},[91,159613,78045],{"class":150},[91,159615,3717],{"class":101},[91,159617,159618],{"class":93,"line":1157},[91,159619,148487],{"class":97},[91,159621,159622,159624],{"class":93,"line":1172},[91,159623,31274],{"class":150},[91,159625,159205],{"class":101},[38,159627,146432],{},[83,159629,159632],{"className":159630,"code":159631,"language":5166,"meta":10},[5164],"1\n2\n4\n5\n",[88,159633,159631],{"__ignoreMap":10},[33,159635,159637],{"id":159636},"_46-for循环","4.6 for循环",[38,159639,159640,159642],{},[88,159641,3003],{}," 常用于遍历序列。",[83,159644,159646],{"className":30353,"code":159645,"language":30355,"meta":10,"style":10},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[88,159647,159648,159657,159661,159672],{"__ignoreMap":10},[91,159649,159650,159652,159654],{"class":93,"line":94},[91,159651,146511],{"class":101},[91,159653,147],{"class":97},[91,159655,159656],{"class":206}," \"python\"\n",[91,159658,159659],{"class":93,"line":11},[91,159660,2378],{"emptyLinePlaceholder":17},[91,159662,159663,159665,159668,159670],{"class":93,"line":1157},[91,159664,3003],{"class":97},[91,159666,159667],{"class":101}," ch ",[91,159669,26018],{"class":97},[91,159671,158374],{"class":101},[91,159673,159674,159676],{"class":93,"line":1172},[91,159675,31274],{"class":150},[91,159677,159678],{"class":101},"(ch)\n",[38,159680,159681],{},"遍历列表：",[83,159683,159685],{"className":30353,"code":159684,"language":30355,"meta":10,"style":10},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[88,159686,159687,159709,159713,159723],{"__ignoreMap":10},[91,159688,159689,159692,159694,159696,159698,159700,159702,159704,159707],{"class":93,"line":94},[91,159690,159691],{"class":101},"students ",[91,159693,147],{"class":97},[91,159695,52201],{"class":101},[91,159697,149863],{"class":206},[91,159699,12414],{"class":101},[91,159701,150911],{"class":206},[91,159703,12414],{"class":101},[91,159705,159706],{"class":206},"\"小刚\"",[91,159708,33221],{"class":101},[91,159710,159711],{"class":93,"line":11},[91,159712,2378],{"emptyLinePlaceholder":17},[91,159714,159715,159717,159719,159721],{"class":93,"line":1157},[91,159716,3003],{"class":97},[91,159718,152112],{"class":101},[91,159720,26018],{"class":97},[91,159722,152117],{"class":101},[91,159724,159725,159727],{"class":93,"line":1172},[91,159726,31274],{"class":150},[91,159728,150017],{"class":101},[33,159730,159732],{"id":159731},"_47-range函数","4.7 range函数",[38,159734,159735,159738],{},[88,159736,159737],{},"range()"," 用于生成整数序列。",[83,159740,159742],{"className":30353,"code":159741,"language":30355,"meta":10,"style":10},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[88,159743,159744,159758,159776],{"__ignoreMap":10},[91,159745,159746,159748,159750,159752,159755],{"class":93,"line":94},[91,159747,33391],{"class":150},[91,159749,102],{"class":101},[91,159751,421],{"class":150},[91,159753,159754],{"class":101},")          ",[91,159756,159757],{"class":160},"# 0,1,2,3,4\n",[91,159759,159760,159762,159764,159766,159768,159770,159773],{"class":93,"line":11},[91,159761,33391],{"class":150},[91,159763,102],{"class":101},[91,159765,319],{"class":150},[91,159767,12414],{"class":101},[91,159769,421],{"class":150},[91,159771,159772],{"class":101},")       ",[91,159774,159775],{"class":160},"# 1,2,3,4\n",[91,159777,159778,159780,159782,159784,159786,159788,159790,159792,159794],{"class":93,"line":1157},[91,159779,33391],{"class":150},[91,159781,102],{"class":101},[91,159783,319],{"class":150},[91,159785,12414],{"class":101},[91,159787,548],{"class":150},[91,159789,12414],{"class":101},[91,159791,179],{"class":150},[91,159793,155636],{"class":101},[91,159795,159796],{"class":160},"# 1,3,5,7,9\n",[38,159798,159799,159800,24593],{},"配合 ",[88,159801,3003],{},[83,159803,159805],{"className":30353,"code":159804,"language":30355,"meta":10,"style":10},"for i in range(1, 6):\n    print(i)\n",[88,159806,159807,159827],{"__ignoreMap":10},[91,159808,159809,159811,159813,159815,159817,159819,159821,159823,159825],{"class":93,"line":94},[91,159810,3003],{"class":97},[91,159812,9417],{"class":101},[91,159814,26018],{"class":97},[91,159816,32418],{"class":150},[91,159818,102],{"class":101},[91,159820,319],{"class":150},[91,159822,12414],{"class":101},[91,159824,446],{"class":150},[91,159826,30761],{"class":101},[91,159828,159829,159831],{"class":93,"line":11},[91,159830,31274],{"class":150},[91,159832,159205],{"class":101},[38,159834,9004,159835,159837],{},[88,159836,33391],{}," 的结束值不包含在内。",[33,159839,159841],{"id":159840},"_48-for循环求和","4.8 for循环求和",[83,159843,159845],{"className":30353,"code":159844,"language":30355,"meta":10,"style":10},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[88,159846,159847,159855,159859,159879,159887,159891],{"__ignoreMap":10},[91,159848,159849,159851,159853],{"class":93,"line":94},[91,159850,157235],{"class":101},[91,159852,147],{"class":97},[91,159854,47308],{"class":150},[91,159856,159857],{"class":93,"line":11},[91,159858,2378],{"emptyLinePlaceholder":17},[91,159860,159861,159863,159865,159867,159869,159871,159873,159875,159877],{"class":93,"line":1157},[91,159862,3003],{"class":97},[91,159864,9417],{"class":101},[91,159866,26018],{"class":97},[91,159868,32418],{"class":150},[91,159870,102],{"class":101},[91,159872,319],{"class":150},[91,159874,12414],{"class":101},[91,159876,439],{"class":150},[91,159878,30761],{"class":101},[91,159880,159881,159883,159885],{"class":93,"line":1172},[91,159882,159282],{"class":101},[91,159884,9456],{"class":97},[91,159886,159287],{"class":101},[91,159888,159889],{"class":93,"line":1178},[91,159890,2378],{"emptyLinePlaceholder":17},[91,159892,159893,159895],{"class":93,"line":1192},[91,159894,30390],{"class":150},[91,159896,159306],{"class":101},[38,159898,159899],{},"求偶数和：",[83,159901,159903],{"className":30353,"code":159902,"language":30355,"meta":10,"style":10},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[88,159904,159905,159913,159917,159937,159953,159962,159966],{"__ignoreMap":10},[91,159906,159907,159909,159911],{"class":93,"line":94},[91,159908,157235],{"class":101},[91,159910,147],{"class":97},[91,159912,47308],{"class":150},[91,159914,159915],{"class":93,"line":11},[91,159916,2378],{"emptyLinePlaceholder":17},[91,159918,159919,159921,159923,159925,159927,159929,159931,159933,159935],{"class":93,"line":1157},[91,159920,3003],{"class":97},[91,159922,9417],{"class":101},[91,159924,26018],{"class":97},[91,159926,32418],{"class":150},[91,159928,102],{"class":101},[91,159930,319],{"class":150},[91,159932,12414],{"class":101},[91,159934,439],{"class":150},[91,159936,30761],{"class":101},[91,159938,159939,159941,159943,159945,159947,159949,159951],{"class":93,"line":1172},[91,159940,3079],{"class":97},[91,159942,9417],{"class":101},[91,159944,430],{"class":97},[91,159946,14734],{"class":150},[91,159948,101534],{"class":97},[91,159950,4071],{"class":150},[91,159952,3717],{"class":101},[91,159954,159955,159958,159960],{"class":93,"line":1178},[91,159956,159957],{"class":101},"        total ",[91,159959,9456],{"class":97},[91,159961,159287],{"class":101},[91,159963,159964],{"class":93,"line":1192},[91,159965,2378],{"emptyLinePlaceholder":17},[91,159967,159968,159970],{"class":93,"line":1198},[91,159969,30390],{"class":150},[91,159971,159306],{"class":101},[38,159973,159974],{},"也可以：",[83,159976,159978],{"className":30353,"code":159977,"language":30355,"meta":10,"style":10},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[88,159979,159980,159988,159992,160016,160024,160028],{"__ignoreMap":10},[91,159981,159982,159984,159986],{"class":93,"line":94},[91,159983,157235],{"class":101},[91,159985,147],{"class":97},[91,159987,47308],{"class":150},[91,159989,159990],{"class":93,"line":11},[91,159991,2378],{"emptyLinePlaceholder":17},[91,159993,159994,159996,159998,160000,160002,160004,160006,160008,160010,160012,160014],{"class":93,"line":1157},[91,159995,3003],{"class":97},[91,159997,9417],{"class":101},[91,159999,26018],{"class":97},[91,160001,32418],{"class":150},[91,160003,102],{"class":101},[91,160005,179],{"class":150},[91,160007,12414],{"class":101},[91,160009,439],{"class":150},[91,160011,12414],{"class":101},[91,160013,179],{"class":150},[91,160015,30761],{"class":101},[91,160017,160018,160020,160022],{"class":93,"line":1172},[91,160019,159282],{"class":101},[91,160021,9456],{"class":97},[91,160023,159287],{"class":101},[91,160025,160026],{"class":93,"line":1178},[91,160027,2378],{"emptyLinePlaceholder":17},[91,160029,160030,160032],{"class":93,"line":1192},[91,160031,30390],{"class":150},[91,160033,159306],{"class":101},[33,160035,160037],{"id":160036},"_49-循环嵌套","4.9 循环嵌套",[38,160039,160040],{},"嵌套循环就是循环里面再写循环。",[83,160042,160044],{"className":30353,"code":160043,"language":30355,"meta":10,"style":10},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[88,160045,160046,160066,160086],{"__ignoreMap":10},[91,160047,160048,160050,160052,160054,160056,160058,160060,160062,160064],{"class":93,"line":94},[91,160049,3003],{"class":97},[91,160051,9417],{"class":101},[91,160053,26018],{"class":97},[91,160055,32418],{"class":150},[91,160057,102],{"class":101},[91,160059,319],{"class":150},[91,160061,12414],{"class":101},[91,160063,395],{"class":150},[91,160065,30761],{"class":101},[91,160067,160068,160070,160072,160074,160076,160078,160080,160082,160084],{"class":93,"line":11},[91,160069,3179],{"class":97},[91,160071,9479],{"class":101},[91,160073,26018],{"class":97},[91,160075,32418],{"class":150},[91,160077,102],{"class":101},[91,160079,319],{"class":150},[91,160081,12414],{"class":101},[91,160083,395],{"class":150},[91,160085,30761],{"class":101},[91,160087,160088,160090,160092,160094,160097,160099,160101,160103,160106,160108,160110,160112,160114],{"class":93,"line":1157},[91,160089,32426],{"class":150},[91,160091,102],{"class":101},[91,160093,154],{"class":97},[91,160095,160096],{"class":206},"\"i=",[91,160098,998],{"class":150},[91,160100,543],{"class":101},[91,160102,1048],{"class":150},[91,160104,160105],{"class":206},", j=",[91,160107,998],{"class":150},[91,160109,569],{"class":101},[91,160111,1048],{"class":150},[91,160113,353],{"class":206},[91,160115,108],{"class":101},[38,160117,160118],{},"外层循环执行一次，内层循环执行完整一轮。",[33,160120,160122],{"id":160121},"_410-九九乘法表","4.10 九九乘法表",[83,160124,160126],{"className":30353,"code":160125,"language":30355,"meta":10,"style":10},"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",[88,160127,160128,160148,160171,160223],{"__ignoreMap":10},[91,160129,160130,160132,160134,160136,160138,160140,160142,160144,160146],{"class":93,"line":94},[91,160131,3003],{"class":97},[91,160133,9417],{"class":101},[91,160135,26018],{"class":97},[91,160137,32418],{"class":150},[91,160139,102],{"class":101},[91,160141,319],{"class":150},[91,160143,12414],{"class":101},[91,160145,548],{"class":150},[91,160147,30761],{"class":101},[91,160149,160150,160152,160154,160156,160158,160160,160162,160165,160167,160169],{"class":93,"line":11},[91,160151,3179],{"class":97},[91,160153,9479],{"class":101},[91,160155,26018],{"class":97},[91,160157,32418],{"class":150},[91,160159,102],{"class":101},[91,160161,319],{"class":150},[91,160163,160164],{"class":101},", i ",[91,160166,583],{"class":97},[91,160168,25093],{"class":150},[91,160170,30761],{"class":101},[91,160172,160173,160175,160177,160179,160181,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221],{"class":93,"line":1157},[91,160174,32426],{"class":150},[91,160176,102],{"class":101},[91,160178,154],{"class":97},[91,160180,353],{"class":206},[91,160182,998],{"class":150},[91,160184,569],{"class":101},[91,160186,1048],{"class":150},[91,160188,557],{"class":206},[91,160190,998],{"class":150},[91,160192,543],{"class":101},[91,160194,1048],{"class":150},[91,160196,147],{"class":206},[91,160198,998],{"class":150},[91,160200,100123],{"class":101},[91,160202,557],{"class":97},[91,160204,3388],{"class":101},[91,160206,1048],{"class":150},[91,160208,353],{"class":206},[91,160210,12414],{"class":101},[91,160212,45776],{"class":5195},[91,160214,147],{"class":97},[91,160216,353],{"class":206},[91,160218,1208],{"class":150},[91,160220,353],{"class":206},[91,160222,108],{"class":101},[91,160224,160225,160227],{"class":93,"line":1172},[91,160226,31274],{"class":150},[91,160228,1954],{"class":101},[38,160230,160231],{},"关键点：",[46,160233,160234,160240,160246,160252],{},[49,160235,160236,160237,160239],{},"外层 ",[88,160238,543],{}," 控制行。",[49,160241,160242,160243,160245],{},"内层 ",[88,160244,569],{}," 控制列。",[49,160247,160248,160249,160251],{},"每行结束后用 ",[88,160250,146447],{}," 换行。",[49,160253,160254,160257],{},[88,160255,160256],{},"end=\"\\t\""," 让同一行的内容横向排列。",[33,160259,160261],{"id":160260},"_411-循环else","4.11 循环else",[38,160263,160264,160265,160267,160268,160270,160271,160273],{},"Python 的循环可以带 ",[88,160266,1679],{},"。当循环正常结束时执行 ",[88,160269,1679],{},"，如果被 ",[88,160272,2031],{}," 打断，则不执行。",[83,160275,160277],{"className":30353,"code":160276,"language":30355,"meta":10,"style":10},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[88,160278,160279,160299,160311,160322,160326,160332],{"__ignoreMap":10},[91,160280,160281,160283,160285,160287,160289,160291,160293,160295,160297],{"class":93,"line":94},[91,160282,3003],{"class":97},[91,160284,9417],{"class":101},[91,160286,26018],{"class":97},[91,160288,32418],{"class":150},[91,160290,102],{"class":101},[91,160292,319],{"class":150},[91,160294,12414],{"class":101},[91,160296,446],{"class":150},[91,160298,30761],{"class":101},[91,160300,160301,160303,160305,160307,160309],{"class":93,"line":11},[91,160302,3079],{"class":97},[91,160304,9417],{"class":101},[91,160306,2927],{"class":97},[91,160308,2016],{"class":150},[91,160310,3717],{"class":101},[91,160312,160313,160315,160317,160320],{"class":93,"line":1157},[91,160314,32426],{"class":150},[91,160316,102],{"class":101},[91,160318,160319],{"class":206},"\"找到了\"",[91,160321,108],{"class":101},[91,160323,160324],{"class":93,"line":1172},[91,160325,31602],{"class":97},[91,160327,160328,160330],{"class":93,"line":1178},[91,160329,1679],{"class":97},[91,160331,3717],{"class":101},[91,160333,160334,160336,160338,160341],{"class":93,"line":1192},[91,160335,31274],{"class":150},[91,160337,102],{"class":101},[91,160339,160340],{"class":206},"\"没找到\"",[91,160342,108],{"class":101},[38,160344,160345],{},"常用于搜索。",[83,160347,160349],{"className":30353,"code":160348,"language":30355,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[88,160350,160351,160372,160381,160385,160397,160408,160418,160422,160428],{"__ignoreMap":10},[91,160352,160353,160356,160358,160360,160362,160364,160366,160368,160370],{"class":93,"line":94},[91,160354,160355],{"class":101},"names ",[91,160357,147],{"class":97},[91,160359,52201],{"class":101},[91,160361,149863],{"class":206},[91,160363,12414],{"class":101},[91,160365,150911],{"class":206},[91,160367,12414],{"class":101},[91,160369,159706],{"class":206},[91,160371,33221],{"class":101},[91,160373,160374,160376,160378],{"class":93,"line":11},[91,160375,111553],{"class":101},[91,160377,147],{"class":97},[91,160379,160380],{"class":206}," \"小李\"\n",[91,160382,160383],{"class":93,"line":1157},[91,160384,2378],{"emptyLinePlaceholder":17},[91,160386,160387,160389,160392,160394],{"class":93,"line":1172},[91,160388,3003],{"class":97},[91,160390,160391],{"class":101}," name ",[91,160393,26018],{"class":97},[91,160395,160396],{"class":101}," names:\n",[91,160398,160399,160401,160403,160405],{"class":93,"line":1178},[91,160400,3079],{"class":97},[91,160402,160391],{"class":101},[91,160404,2927],{"class":97},[91,160406,160407],{"class":101}," target:\n",[91,160409,160410,160412,160414,160416],{"class":93,"line":1192},[91,160411,32426],{"class":150},[91,160413,102],{"class":101},[91,160415,160319],{"class":206},[91,160417,108],{"class":101},[91,160419,160420],{"class":93,"line":1198},[91,160421,31602],{"class":97},[91,160423,160424,160426],{"class":93,"line":1289},[91,160425,1679],{"class":97},[91,160427,3717],{"class":101},[91,160429,160430,160432,160434,160436],{"class":93,"line":1295},[91,160431,31274],{"class":150},[91,160433,102],{"class":101},[91,160435,160340],{"class":206},[91,160437,108],{"class":101},[33,160439,160441],{"id":160440},"_412-小案例登录重试","4.12 小案例：登录重试",[38,160443,123267],{},[46,160445,160446,160449,160452],{},[49,160447,160448],{},"用户最多输入 3 次密码。",[49,160450,160451],{},"密码正确则登录成功。",[49,160453,160454],{},"3 次都错误则锁定账号。",[38,160456,10014],{},[83,160458,160460],{"className":30353,"code":160459,"language":30355,"meta":10,"style":10},"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",[88,160461,160462,160472,160476,160492,160508,160512,160524,160535,160539,160545,160570,160576],{"__ignoreMap":10},[91,160463,160464,160467,160469],{"class":93,"line":94},[91,160465,160466],{"class":101},"password ",[91,160468,147],{"class":97},[91,160470,160471],{"class":206}," \"123456\"\n",[91,160473,160474],{"class":93,"line":11},[91,160475,2378],{"emptyLinePlaceholder":17},[91,160477,160478,160480,160482,160484,160486,160488,160490],{"class":93,"line":1157},[91,160479,3003],{"class":97},[91,160481,9417],{"class":101},[91,160483,26018],{"class":97},[91,160485,32418],{"class":150},[91,160487,102],{"class":101},[91,160489,173],{"class":150},[91,160491,30761],{"class":101},[91,160493,160494,160497,160499,160501,160503,160506],{"class":93,"line":1172},[91,160495,160496],{"class":101},"    user_password ",[91,160498,147],{"class":97},[91,160500,60580],{"class":150},[91,160502,102],{"class":101},[91,160504,160505],{"class":206},"\"请输入密码:\"",[91,160507,108],{"class":101},[91,160509,160510],{"class":93,"line":1178},[91,160511,2378],{"emptyLinePlaceholder":17},[91,160513,160514,160516,160519,160521],{"class":93,"line":1192},[91,160515,3079],{"class":97},[91,160517,160518],{"class":101}," user_password ",[91,160520,2927],{"class":97},[91,160522,160523],{"class":101}," password:\n",[91,160525,160526,160528,160530,160533],{"class":93,"line":1198},[91,160527,32426],{"class":150},[91,160529,102],{"class":101},[91,160531,160532],{"class":206},"\"登录成功\"",[91,160534,108],{"class":101},[91,160536,160537],{"class":93,"line":1289},[91,160538,31602],{"class":97},[91,160540,160541,160543],{"class":93,"line":1295},[91,160542,157997],{"class":97},[91,160544,3717],{"class":101},[91,160546,160547,160549,160551,160553,160556,160559,160561,160563,160565,160568],{"class":93,"line":1307},[91,160548,32426],{"class":150},[91,160550,102],{"class":101},[91,160552,154],{"class":97},[91,160554,160555],{"class":206},"\"密码错误，还剩",[91,160557,160558],{"class":150},"{2",[91,160560,52246],{"class":97},[91,160562,3010],{"class":101},[91,160564,1048],{"class":150},[91,160566,160567],{"class":206},"次机会\"",[91,160569,108],{"class":101},[91,160571,160572,160574],{"class":93,"line":1590},[91,160573,1679],{"class":97},[91,160575,3717],{"class":101},[91,160577,160578,160580,160582,160585],{"class":93,"line":1595},[91,160579,31274],{"class":150},[91,160581,102],{"class":101},[91,160583,160584],{"class":206},"\"账号已锁定\"",[91,160586,108],{"class":101},[33,160588,160590],{"id":160589},"_413-小案例菜单程序","4.13 小案例：菜单程序",[83,160592,160594],{"className":30353,"code":160593,"language":30355,"meta":10,"style":10},"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",[88,160595,160596,160604,160615,160626,160637,160648,160659,160663,160678,160682,160694,160705,160717,160728,160740,160751,160763,160773,160777,160783],{"__ignoreMap":10},[91,160597,160598,160600,160602],{"class":93,"line":94},[91,160599,108638],{"class":97},[91,160601,95267],{"class":150},[91,160603,3717],{"class":101},[91,160605,160606,160608,160610,160613],{"class":93,"line":11},[91,160607,31274],{"class":150},[91,160609,102],{"class":101},[91,160611,160612],{"class":206},"\"====== 菜单 ======\"",[91,160614,108],{"class":101},[91,160616,160617,160619,160621,160624],{"class":93,"line":1157},[91,160618,31274],{"class":150},[91,160620,102],{"class":101},[91,160622,160623],{"class":206},"\"1. 查询余额\"",[91,160625,108],{"class":101},[91,160627,160628,160630,160632,160635],{"class":93,"line":1172},[91,160629,31274],{"class":150},[91,160631,102],{"class":101},[91,160633,160634],{"class":206},"\"2. 存款\"",[91,160636,108],{"class":101},[91,160638,160639,160641,160643,160646],{"class":93,"line":1178},[91,160640,31274],{"class":150},[91,160642,102],{"class":101},[91,160644,160645],{"class":206},"\"3. 取款\"",[91,160647,108],{"class":101},[91,160649,160650,160652,160654,160657],{"class":93,"line":1192},[91,160651,31274],{"class":150},[91,160653,102],{"class":101},[91,160655,160656],{"class":206},"\"0. 退出\"",[91,160658,108],{"class":101},[91,160660,160661],{"class":93,"line":1198},[91,160662,2378],{"emptyLinePlaceholder":17},[91,160664,160665,160668,160670,160672,160674,160676],{"class":93,"line":1289},[91,160666,160667],{"class":101},"    choice ",[91,160669,147],{"class":97},[91,160671,60580],{"class":150},[91,160673,102],{"class":101},[91,160675,153048],{"class":206},[91,160677,108],{"class":101},[91,160679,160680],{"class":93,"line":1295},[91,160681,2378],{"emptyLinePlaceholder":17},[91,160683,160684,160686,160688,160690,160692],{"class":93,"line":1307},[91,160685,3079],{"class":97},[91,160687,153061],{"class":101},[91,160689,2927],{"class":97},[91,160691,153066],{"class":206},[91,160693,3717],{"class":101},[91,160695,160696,160698,160700,160703],{"class":93,"line":1590},[91,160697,32426],{"class":150},[91,160699,102],{"class":101},[91,160701,160702],{"class":206},"\"余额为1000元\"",[91,160704,108],{"class":101},[91,160706,160707,160709,160711,160713,160715],{"class":93,"line":1595},[91,160708,39268],{"class":97},[91,160710,153061],{"class":101},[91,160712,2927],{"class":97},[91,160714,153085],{"class":206},[91,160716,3717],{"class":101},[91,160718,160719,160721,160723,160726],{"class":93,"line":1601},[91,160720,32426],{"class":150},[91,160722,102],{"class":101},[91,160724,160725],{"class":206},"\"存款功能\"",[91,160727,108],{"class":101},[91,160729,160730,160732,160734,160736,160738],{"class":93,"line":1606},[91,160731,39268],{"class":97},[91,160733,153061],{"class":101},[91,160735,2927],{"class":97},[91,160737,153103],{"class":206},[91,160739,3717],{"class":101},[91,160741,160742,160744,160746,160749],{"class":93,"line":1620},[91,160743,32426],{"class":150},[91,160745,102],{"class":101},[91,160747,160748],{"class":206},"\"取款功能\"",[91,160750,108],{"class":101},[91,160752,160753,160755,160757,160759,160761],{"class":93,"line":1625},[91,160754,39268],{"class":97},[91,160756,153061],{"class":101},[91,160758,2927],{"class":97},[91,160760,153157],{"class":206},[91,160762,3717],{"class":101},[91,160764,160765,160767,160769,160771],{"class":93,"line":1631},[91,160766,32426],{"class":150},[91,160768,102],{"class":101},[91,160770,153168],{"class":206},[91,160772,108],{"class":101},[91,160774,160775],{"class":93,"line":1652},[91,160776,31602],{"class":97},[91,160778,160779,160781],{"class":93,"line":1657},[91,160780,157997],{"class":97},[91,160782,3717],{"class":101},[91,160784,160785,160787,160789,160791],{"class":93,"line":1671},[91,160786,32426],{"class":150},[91,160788,102],{"class":101},[91,160790,153189],{"class":206},[91,160792,108],{"class":101},[38,160794,160795,160796,160798,160799,28360],{},"菜单类程序通常使用 ",[88,160797,159497],{},"，用户选择退出时 ",[88,160800,2031],{},[33,160802,160804],{"id":160803},"_414-易错点","4.14 易错点",[46,160806,160807,160812,160818,160826,160832],{},[49,160808,160809,160811],{},[88,160810,108638],{}," 循环必须更新控制变量。",[49,160813,160814,160817],{},[88,160815,160816],{},"range(1, 10)"," 不包含 10。",[49,160819,160820,160822,160823,160825],{},[88,160821,2031],{}," 结束整个循环，",[88,160824,154647],{}," 只跳过本轮。",[49,160827,160828,160829,160831],{},"嵌套循环中，",[88,160830,2031],{}," 只跳出当前所在的一层循环。",[49,160833,160834],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[33,160836,160838],{"id":160837},"_415-本章练习","4.15 本章练习",[46,160840,160841,160844,160847,160850,160853],{},[49,160842,160843],{},"输出 1 到 100。",[49,160845,160846],{},"计算 1 到 100 的偶数和。",[49,160848,160849],{},"输出 100 以内能被 3 和 5 同时整除的数。",[49,160851,160852],{},"编写猜数字游戏，限制最多猜 7 次。",[49,160854,160855],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5105,160857,160858],{},"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":10,"searchDepth":11,"depth":11,"links":160860},[160861,160862,160863,160864,160865,160869,160870,160871,160872,160873,160874,160875,160876,160877,160878],{"id":159117,"depth":11,"text":159118},{"id":159147,"depth":11,"text":159148},{"id":159236,"depth":11,"text":159237},{"id":159330,"depth":11,"text":159331},{"id":159504,"depth":11,"text":159505,"children":160866},[160867,160868],{"id":159508,"depth":1157,"text":159509},{"id":159572,"depth":1157,"text":159573},{"id":159636,"depth":11,"text":159637},{"id":159731,"depth":11,"text":159732},{"id":159840,"depth":11,"text":159841},{"id":160036,"depth":11,"text":160037},{"id":160121,"depth":11,"text":160122},{"id":160260,"depth":11,"text":160261},{"id":160440,"depth":11,"text":160441},{"id":160589,"depth":11,"text":160590},{"id":160803,"depth":11,"text":160804},{"id":160837,"depth":11,"text":160838},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159109,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160885,"title":160886,"body":160887,"description":13,"extension":14,"meta":162892,"navigation":17,"path":162893,"seo":162894,"stem":162895,"__hash__":162896},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160888,"toc":162872},[160889,160892,160896,160899,160902,160916,160919,160933,160937,160939,160958,160960,161007,161009,161023,161027,161101,161104,161108,161111,161170,161178,161181,161234,161237,161241,161246,161301,161309,161359,161363,161368,161376,161475,161481,161485,161490,161493,161504,161545,161558,161562,161565,161601,161604,161617,161620,161680,161684,161688,161691,161742,161746,161749,161796,161802,161868,161871,161875,161878,161994,161997,162001,162004,162110,162114,162117,162155,162158,162200,162203,162263,162266,162270,162734,162737,162741,162768,162774,162835,162839,162869],[29,160890,160886],{"id":160891},"_5-函数基础",[33,160893,160895],{"id":160894},"_51-为什么需要函数","5.1 为什么需要函数",[38,160897,160898],{},"函数用于封装一段可以重复使用的代码。",[38,160900,160901],{},"不使用函数的问题：",[46,160903,160904,160907,160910,160913],{},[49,160905,160906],{},"重复代码多。",[49,160908,160909],{},"修改逻辑时容易漏改。",[49,160911,160912],{},"主流程不清晰。",[49,160914,160915],{},"程序越写越长，难以维护。",[38,160917,160918],{},"使用函数后的好处：",[46,160920,160921,160924,160927,160930],{},[49,160922,160923],{},"提高复用性。",[49,160925,160926],{},"提高可读性。",[49,160928,160929],{},"便于调试。",[49,160931,160932],{},"便于分工。",[33,160934,160936],{"id":160935},"_52-函数定义","5.2 函数定义",[38,160938,5160],{},[83,160940,160942],{"className":30353,"code":160941,"language":30355,"meta":10,"style":10},"def 函数名():\n    函数体\n",[88,160943,160944,160953],{"__ignoreMap":10},[91,160945,160946,160948,160951],{"class":93,"line":94},[91,160947,31922],{"class":97},[91,160949,160950],{"class":1941}," 函数名",[91,160952,31928],{"class":101},[91,160954,160955],{"class":93,"line":11},[91,160956,160957],{"class":101},"    函数体\n",[38,160959,15114],{},[83,160961,160963],{"className":30353,"code":160962,"language":30355,"meta":10,"style":10},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[88,160964,160965,160974,160984,160994,160998,161002],{"__ignoreMap":10},[91,160966,160967,160969,160972],{"class":93,"line":94},[91,160968,31922],{"class":97},[91,160970,160971],{"class":1941}," say_hello",[91,160973,31928],{"class":101},[91,160975,160976,160978,160980,160982],{"class":93,"line":11},[91,160977,31274],{"class":150},[91,160979,102],{"class":101},[91,160981,5823],{"class":206},[91,160983,108],{"class":101},[91,160985,160986,160988,160990,160992],{"class":93,"line":1157},[91,160987,31274],{"class":150},[91,160989,102],{"class":101},[91,160991,146614],{"class":206},[91,160993,108],{"class":101},[91,160995,160996],{"class":93,"line":1172},[91,160997,2378],{"emptyLinePlaceholder":17},[91,160999,161000],{"class":93,"line":1178},[91,161001,2378],{"emptyLinePlaceholder":17},[91,161003,161004],{"class":93,"line":1192},[91,161005,161006],{"class":101},"say_hello()\n",[38,161008,9004],{},[46,161010,161011,161014,161017,161020],{},[49,161012,161013],{},"函数必须先定义，再调用。",[49,161015,161016],{},"函数名遵循变量命名规则。",[49,161018,161019],{},"函数体需要缩进。",[49,161021,161022],{},"函数不调用就不会执行。",[33,161024,161026],{"id":161025},"_53-函数调用","5.3 函数调用",[83,161028,161030],{"className":30353,"code":161029,"language":30355,"meta":10,"style":10},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[88,161031,161032,161041,161052,161063,161074,161084,161088,161092,161097],{"__ignoreMap":10},[91,161033,161034,161036,161039],{"class":93,"line":94},[91,161035,31922],{"class":97},[91,161037,161038],{"class":1941}," print_menu",[91,161040,31928],{"class":101},[91,161042,161043,161045,161047,161050],{"class":93,"line":11},[91,161044,31274],{"class":150},[91,161046,102],{"class":101},[91,161048,161049],{"class":206},"\"1. 查询\"",[91,161051,108],{"class":101},[91,161053,161054,161056,161058,161061],{"class":93,"line":1157},[91,161055,31274],{"class":150},[91,161057,102],{"class":101},[91,161059,161060],{"class":206},"\"2. 添加\"",[91,161062,108],{"class":101},[91,161064,161065,161067,161069,161072],{"class":93,"line":1172},[91,161066,31274],{"class":150},[91,161068,102],{"class":101},[91,161070,161071],{"class":206},"\"3. 删除\"",[91,161073,108],{"class":101},[91,161075,161076,161078,161080,161082],{"class":93,"line":1178},[91,161077,31274],{"class":150},[91,161079,102],{"class":101},[91,161081,160656],{"class":206},[91,161083,108],{"class":101},[91,161085,161086],{"class":93,"line":1192},[91,161087,2378],{"emptyLinePlaceholder":17},[91,161089,161090],{"class":93,"line":1198},[91,161091,2378],{"emptyLinePlaceholder":17},[91,161093,161094],{"class":93,"line":1289},[91,161095,161096],{"class":101},"print_menu()\n",[91,161098,161099],{"class":93,"line":1295},[91,161100,161096],{"class":101},[38,161102,161103],{},"函数可以多次调用，每次调用都会执行函数体。",[33,161105,161107],{"id":161106},"_54-参数","5.4 参数",[38,161109,161110],{},"参数用于向函数传递数据。",[83,161112,161114],{"className":30353,"code":161113,"language":30355,"meta":10,"style":10},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[88,161115,161116,161125,161145,161149,161153,161162],{"__ignoreMap":10},[91,161117,161118,161120,161122],{"class":93,"line":94},[91,161119,31922],{"class":97},[91,161121,160971],{"class":1941},[91,161123,161124],{"class":101},"(name):\n",[91,161126,161127,161129,161131,161133,161135,161137,161139,161141,161143],{"class":93,"line":11},[91,161128,31274],{"class":150},[91,161130,102],{"class":101},[91,161132,154],{"class":97},[91,161134,157029],{"class":206},[91,161136,998],{"class":150},[91,161138,79785],{"class":101},[91,161140,1048],{"class":150},[91,161142,353],{"class":206},[91,161144,108],{"class":101},[91,161146,161147],{"class":93,"line":1157},[91,161148,2378],{"emptyLinePlaceholder":17},[91,161150,161151],{"class":93,"line":1172},[91,161152,2378],{"emptyLinePlaceholder":17},[91,161154,161155,161158,161160],{"class":93,"line":1178},[91,161156,161157],{"class":101},"say_hello(",[91,161159,149863],{"class":206},[91,161161,108],{"class":101},[91,161163,161164,161166,161168],{"class":93,"line":1192},[91,161165,161157],{"class":101},[91,161167,150911],{"class":206},[91,161169,108],{"class":101},[38,161171,161172,161174,161175,161177],{},[88,161173,79785],{}," 是形参，",[88,161176,149863],{}," 是实参。",[38,161179,161180],{},"多个参数：",[83,161182,161184],{"className":30353,"code":161183,"language":30355,"meta":10,"style":10},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[88,161185,161186,161194,161207,161213,161217,161221],{"__ignoreMap":10},[91,161187,161188,161190,161192],{"class":93,"line":94},[91,161189,31922],{"class":97},[91,161191,5188],{"class":1941},[91,161193,151068],{"class":101},[91,161195,161196,161199,161201,161203,161205],{"class":93,"line":11},[91,161197,161198],{"class":101},"    result ",[91,161200,147],{"class":97},[91,161202,10848],{"class":101},[91,161204,583],{"class":97},[91,161206,151079],{"class":101},[91,161208,161209,161211],{"class":93,"line":1157},[91,161210,31274],{"class":150},[91,161212,76560],{"class":101},[91,161214,161215],{"class":93,"line":1172},[91,161216,2378],{"emptyLinePlaceholder":17},[91,161218,161219],{"class":93,"line":1178},[91,161220,2378],{"emptyLinePlaceholder":17},[91,161222,161223,161226,161228,161230,161232],{"class":93,"line":1192},[91,161224,161225],{"class":101},"add(",[91,161227,548],{"class":150},[91,161229,12414],{"class":101},[91,161231,802],{"class":150},[91,161233,108],{"class":101},[38,161235,161236],{},"调用时参数数量必须匹配。",[33,161238,161240],{"id":161239},"_55-返回值","5.5 返回值",[38,161242,161243,161245],{},[88,161244,17025],{}," 用于把函数内部的结果返回给调用者。",[83,161247,161249],{"className":30353,"code":161248,"language":30355,"meta":10,"style":10},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[88,161250,161251,161259,161269,161273,161277,161295],{"__ignoreMap":10},[91,161252,161253,161255,161257],{"class":93,"line":94},[91,161254,31922],{"class":97},[91,161256,5188],{"class":1941},[91,161258,151068],{"class":101},[91,161260,161261,161263,161265,161267],{"class":93,"line":11},[91,161262,4068],{"class":97},[91,161264,10848],{"class":101},[91,161266,583],{"class":97},[91,161268,151079],{"class":101},[91,161270,161271],{"class":93,"line":1157},[91,161272,2378],{"emptyLinePlaceholder":17},[91,161274,161275],{"class":93,"line":1172},[91,161276,2378],{"emptyLinePlaceholder":17},[91,161278,161279,161282,161284,161287,161289,161291,161293],{"class":93,"line":1178},[91,161280,161281],{"class":101},"result ",[91,161283,147],{"class":97},[91,161285,161286],{"class":101}," add(",[91,161288,548],{"class":150},[91,161290,12414],{"class":101},[91,161292,802],{"class":150},[91,161294,108],{"class":101},[91,161296,161297,161299],{"class":93,"line":1192},[91,161298,30390],{"class":150},[91,161300,76560],{"class":101},[38,161302,161303,161304,161306,161307,28360],{},"如果函数没有写 ",[88,161305,17025],{},"，默认返回 ",[88,161308,95661],{},[83,161310,161312],{"className":30353,"code":161311,"language":30355,"meta":10,"style":10},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[88,161313,161314,161322,161332,161336,161340,161349],{"__ignoreMap":10},[91,161315,161316,161318,161320],{"class":93,"line":94},[91,161317,31922],{"class":97},[91,161319,160971],{"class":1941},[91,161321,31928],{"class":101},[91,161323,161324,161326,161328,161330],{"class":93,"line":11},[91,161325,31274],{"class":150},[91,161327,102],{"class":101},[91,161329,5823],{"class":206},[91,161331,108],{"class":101},[91,161333,161334],{"class":93,"line":1157},[91,161335,2378],{"emptyLinePlaceholder":17},[91,161337,161338],{"class":93,"line":1172},[91,161339,2378],{"emptyLinePlaceholder":17},[91,161341,161342,161344,161346],{"class":93,"line":1178},[91,161343,161281],{"class":101},[91,161345,147],{"class":97},[91,161347,161348],{"class":101}," say_hello()\n",[91,161350,161351,161353,161356],{"class":93,"line":1192},[91,161352,30390],{"class":150},[91,161354,161355],{"class":101},"(result)  ",[91,161357,161358],{"class":160},"# None\n",[33,161360,161362],{"id":161361},"_56-return的作用","5.6 return的作用",[38,161364,161365,161367],{},[88,161366,17025],{}," 有两个作用：",[46,161369,161370,161373],{},[49,161371,161372],{},"返回结果。",[49,161374,161375],{},"结束函数。",[83,161377,161379],{"className":30353,"code":161378,"language":30355,"meta":10,"style":10},"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",[88,161380,161381,161391,161403,161410,161414,161426,161433,161437,161444,161448,161452,161463],{"__ignoreMap":10},[91,161382,161383,161385,161388],{"class":93,"line":94},[91,161384,31922],{"class":97},[91,161386,161387],{"class":1941}," check_age",[91,161389,161390],{"class":101},"(age):\n",[91,161392,161393,161395,161397,161399,161401],{"class":93,"line":11},[91,161394,3079],{"class":97},[91,161396,15686],{"class":101},[91,161398,1012],{"class":97},[91,161400,4071],{"class":150},[91,161402,3717],{"class":101},[91,161404,161405,161407],{"class":93,"line":1157},[91,161406,14731],{"class":97},[91,161408,161409],{"class":206}," \"年龄不合法\"\n",[91,161411,161412],{"class":93,"line":1172},[91,161413,2378],{"emptyLinePlaceholder":17},[91,161415,161416,161418,161420,161422,161424],{"class":93,"line":1178},[91,161417,3079],{"class":97},[91,161419,15686],{"class":101},[91,161421,1688],{"class":97},[91,161423,156260],{"class":150},[91,161425,3717],{"class":101},[91,161427,161428,161430],{"class":93,"line":1192},[91,161429,14731],{"class":97},[91,161431,161432],{"class":206}," \"成年人\"\n",[91,161434,161435],{"class":93,"line":1198},[91,161436,2378],{"emptyLinePlaceholder":17},[91,161438,161439,161441],{"class":93,"line":1289},[91,161440,4068],{"class":97},[91,161442,161443],{"class":206}," \"未成年人\"\n",[91,161445,161446],{"class":93,"line":1295},[91,161447,2378],{"emptyLinePlaceholder":17},[91,161449,161450],{"class":93,"line":1307},[91,161451,2378],{"emptyLinePlaceholder":17},[91,161453,161454,161456,161459,161461],{"class":93,"line":1590},[91,161455,30390],{"class":150},[91,161457,161458],{"class":101},"(check_age(",[91,161460,802],{"class":150},[91,161462,30472],{"class":101},[91,161464,161465,161467,161469,161471,161473],{"class":93,"line":1595},[91,161466,30390],{"class":150},[91,161468,161458],{"class":101},[91,161470,634],{"class":97},[91,161472,319],{"class":150},[91,161474,30472],{"class":101},[38,161476,161477,161478,161480],{},"函数执行到 ",[88,161479,17025],{}," 后，后面的代码不会继续执行。",[33,161482,161484],{"id":161483},"_57-none","5.7 None",[38,161486,161487,161489],{},[88,161488,95661],{}," 表示空值或没有结果。",[38,161491,161492],{},"常见使用场景：",[46,161494,161495,161498,161501],{},[49,161496,161497],{},"函数没有返回值。",[49,161499,161500],{},"变量暂时没有具体值。",[49,161502,161503],{},"表示查询不到结果。",[83,161505,161507],{"className":30353,"code":161506,"language":30355,"meta":10,"style":10},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[88,161508,161509,161517,161521,161534],{"__ignoreMap":10},[91,161510,161511,161513,161515],{"class":93,"line":94},[91,161512,161281],{"class":101},[91,161514,147],{"class":97},[91,161516,152147],{"class":150},[91,161518,161519],{"class":93,"line":11},[91,161520,2378],{"emptyLinePlaceholder":17},[91,161522,161523,161525,161528,161530,161532],{"class":93,"line":1157},[91,161524,1509],{"class":97},[91,161526,161527],{"class":101}," result ",[91,161529,38902],{"class":97},[91,161531,38908],{"class":150},[91,161533,3717],{"class":101},[91,161535,161536,161538,161540,161543],{"class":93,"line":1172},[91,161537,31274],{"class":150},[91,161539,102],{"class":101},[91,161541,161542],{"class":206},"\"没有数据\"",[91,161544,108],{"class":101},[38,161546,161547,161548,161550,161551,161554,161555,28360],{},"判断 ",[88,161549,95661],{}," 推荐使用 ",[88,161552,161553],{},"is None","，不要写成 ",[88,161556,161557],{},"== None",[33,161559,161561],{"id":161560},"_58-函数文档字符串","5.8 函数文档字符串",[38,161563,161564],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[83,161566,161568],{"className":30353,"code":161567,"language":30355,"meta":10,"style":10},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[88,161569,161570,161580,161585],{"__ignoreMap":10},[91,161571,161572,161574,161577],{"class":93,"line":94},[91,161573,31922],{"class":97},[91,161575,161576],{"class":1941}," calculate_bmi",[91,161578,161579],{"class":101},"(weight, height):\n",[91,161581,161582],{"class":93,"line":11},[91,161583,161584],{"class":206},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[91,161586,161587,161589,161592,161594,161597,161599],{"class":93,"line":1157},[91,161588,4068],{"class":97},[91,161590,161591],{"class":101}," weight ",[91,161593,686],{"class":97},[91,161595,161596],{"class":101}," height ",[91,161598,10640],{"class":97},[91,161600,47698],{"class":150},[38,161602,161603],{},"查看说明：",[83,161605,161607],{"className":30353,"code":161606,"language":30355,"meta":10,"style":10},"help(calculate_bmi)\n",[88,161608,161609],{"__ignoreMap":10},[91,161610,161611,161614],{"class":93,"line":94},[91,161612,161613],{"class":150},"help",[91,161615,161616],{"class":101},"(calculate_bmi)\n",[38,161618,161619],{},"较完整的写法：",[83,161621,161623],{"className":30353,"code":161622,"language":30355,"meta":10,"style":10},"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",[88,161624,161625,161633,161638,161643,161647,161652,161657,161662,161666],{"__ignoreMap":10},[91,161626,161627,161629,161631],{"class":93,"line":94},[91,161628,31922],{"class":97},[91,161630,161576],{"class":1941},[91,161632,161579],{"class":101},[91,161634,161635],{"class":93,"line":11},[91,161636,161637],{"class":206},"    \"\"\"\n",[91,161639,161640],{"class":93,"line":1157},[91,161641,161642],{"class":206},"    计算BMI。\n",[91,161644,161645],{"class":93,"line":1172},[91,161646,2378],{"emptyLinePlaceholder":17},[91,161648,161649],{"class":93,"line":1178},[91,161650,161651],{"class":206},"    :param weight: 体重，单位kg\n",[91,161653,161654],{"class":93,"line":1192},[91,161655,161656],{"class":206},"    :param height: 身高，单位m\n",[91,161658,161659],{"class":93,"line":1198},[91,161660,161661],{"class":206},"    :return: BMI数值\n",[91,161663,161664],{"class":93,"line":1289},[91,161665,161637],{"class":206},[91,161667,161668,161670,161672,161674,161676,161678],{"class":93,"line":1295},[91,161669,4068],{"class":97},[91,161671,161591],{"class":101},[91,161673,686],{"class":97},[91,161675,161596],{"class":101},[91,161677,10640],{"class":97},[91,161679,47698],{"class":150},[33,161681,161683],{"id":161682},"_59-变量作用域","5.9 变量作用域",[63,161685,161687],{"id":161686},"_591-局部变量","5.9.1 局部变量",[38,161689,161690],{},"在函数内部定义的变量，只能在函数内部使用。",[83,161692,161694],{"className":30353,"code":161693,"language":30355,"meta":10,"style":10},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[88,161695,161696,161705,161713,161719,161723,161727,161732],{"__ignoreMap":10},[91,161697,161698,161700,161703],{"class":93,"line":94},[91,161699,31922],{"class":97},[91,161701,161702],{"class":1941}," test",[91,161704,31928],{"class":101},[91,161706,161707,161709,161711],{"class":93,"line":11},[91,161708,45568],{"class":101},[91,161710,147],{"class":97},[91,161712,58403],{"class":150},[91,161714,161715,161717],{"class":93,"line":1157},[91,161716,31274],{"class":150},[91,161718,115],{"class":101},[91,161720,161721],{"class":93,"line":1172},[91,161722,2378],{"emptyLinePlaceholder":17},[91,161724,161725],{"class":93,"line":1178},[91,161726,2378],{"emptyLinePlaceholder":17},[91,161728,161729],{"class":93,"line":1192},[91,161730,161731],{"class":101},"test()\n",[91,161733,161734,161736,161739],{"class":93,"line":1198},[91,161735,30390],{"class":150},[91,161737,161738],{"class":101},"(num)  ",[91,161740,161741],{"class":160},"# 报错\n",[63,161743,161745],{"id":161744},"_592-全局变量","5.9.2 全局变量",[38,161747,161748],{},"在函数外部定义的变量，可以在函数内部读取。",[83,161750,161752],{"className":30353,"code":161751,"language":30355,"meta":10,"style":10},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[88,161753,161754,161762,161766,161770,161778,161784,161788,161792],{"__ignoreMap":10},[91,161755,161756,161758,161760],{"class":93,"line":94},[91,161757,146511],{"class":101},[91,161759,147],{"class":97},[91,161761,149328],{"class":206},[91,161763,161764],{"class":93,"line":11},[91,161765,2378],{"emptyLinePlaceholder":17},[91,161767,161768],{"class":93,"line":1157},[91,161769,2378],{"emptyLinePlaceholder":17},[91,161771,161772,161774,161776],{"class":93,"line":1172},[91,161773,31922],{"class":97},[91,161775,160971],{"class":1941},[91,161777,31928],{"class":101},[91,161779,161780,161782],{"class":93,"line":1178},[91,161781,31274],{"class":150},[91,161783,150635],{"class":101},[91,161785,161786],{"class":93,"line":1192},[91,161787,2378],{"emptyLinePlaceholder":17},[91,161789,161790],{"class":93,"line":1198},[91,161791,2378],{"emptyLinePlaceholder":17},[91,161793,161794],{"class":93,"line":1289},[91,161795,161006],{"class":101},[38,161797,161798,161799,28360],{},"如果要在函数内部修改全局变量，需要 ",[88,161800,161801],{},"global",[83,161803,161805],{"className":30353,"code":161804,"language":30355,"meta":10,"style":10},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[88,161806,161807,161815,161819,161823,161832,161840,161848,161852,161856,161861],{"__ignoreMap":10},[91,161808,161809,161811,161813],{"class":93,"line":94},[91,161810,146666],{"class":101},[91,161812,147],{"class":97},[91,161814,47308],{"class":150},[91,161816,161817],{"class":93,"line":11},[91,161818,2378],{"emptyLinePlaceholder":17},[91,161820,161821],{"class":93,"line":1157},[91,161822,2378],{"emptyLinePlaceholder":17},[91,161824,161825,161827,161830],{"class":93,"line":1172},[91,161826,31922],{"class":97},[91,161828,161829],{"class":1941}," add_count",[91,161831,31928],{"class":101},[91,161833,161834,161837],{"class":93,"line":1178},[91,161835,161836],{"class":97},"    global",[91,161838,161839],{"class":101}," count\n",[91,161841,161842,161844,161846],{"class":93,"line":1192},[91,161843,159408],{"class":101},[91,161845,9456],{"class":97},[91,161847,55674],{"class":150},[91,161849,161850],{"class":93,"line":1198},[91,161851,2378],{"emptyLinePlaceholder":17},[91,161853,161854],{"class":93,"line":1289},[91,161855,2378],{"emptyLinePlaceholder":17},[91,161857,161858],{"class":93,"line":1295},[91,161859,161860],{"class":101},"add_count()\n",[91,161862,161863,161865],{"class":93,"line":1307},[91,161864,30390],{"class":150},[91,161866,161867],{"class":101},"(count)\n",[38,161869,161870],{},"不建议大量使用全局变量，项目变大后很难维护。",[33,161872,161874],{"id":161873},"_510-函数嵌套调用","5.10 函数嵌套调用",[38,161876,161877],{},"一个函数中可以调用另一个函数。",[83,161879,161881],{"className":30353,"code":161880,"language":30355,"meta":10,"style":10},"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",[88,161882,161883,161892,161906,161910,161914,161923,161928,161948,161969,161973,161977,161981],{"__ignoreMap":10},[91,161884,161885,161887,161890],{"class":93,"line":94},[91,161886,31922],{"class":97},[91,161888,161889],{"class":1941}," print_line",[91,161891,31928],{"class":101},[91,161893,161894,161896,161898,161900,161902,161904],{"class":93,"line":11},[91,161895,31274],{"class":150},[91,161897,102],{"class":101},[91,161899,32458],{"class":206},[91,161901,6497],{"class":97},[91,161903,78640],{"class":150},[91,161905,108],{"class":101},[91,161907,161908],{"class":93,"line":1157},[91,161909,2378],{"emptyLinePlaceholder":17},[91,161911,161912],{"class":93,"line":1172},[91,161913,2378],{"emptyLinePlaceholder":17},[91,161915,161916,161918,161921],{"class":93,"line":1178},[91,161917,31922],{"class":97},[91,161919,161920],{"class":1941}," print_info",[91,161922,149350],{"class":101},[91,161924,161925],{"class":93,"line":1192},[91,161926,161927],{"class":101},"    print_line()\n",[91,161929,161930,161932,161934,161936,161938,161940,161942,161944,161946],{"class":93,"line":1198},[91,161931,31274],{"class":150},[91,161933,102],{"class":101},[91,161935,154],{"class":97},[91,161937,156657],{"class":206},[91,161939,998],{"class":150},[91,161941,79785],{"class":101},[91,161943,1048],{"class":150},[91,161945,353],{"class":206},[91,161947,108],{"class":101},[91,161949,161950,161952,161954,161956,161959,161961,161963,161965,161967],{"class":93,"line":1289},[91,161951,31274],{"class":150},[91,161953,102],{"class":101},[91,161955,154],{"class":97},[91,161957,161958],{"class":206},"\"年龄:",[91,161960,998],{"class":150},[91,161962,70196],{"class":101},[91,161964,1048],{"class":150},[91,161966,353],{"class":206},[91,161968,108],{"class":101},[91,161970,161971],{"class":93,"line":1295},[91,161972,161927],{"class":101},[91,161974,161975],{"class":93,"line":1307},[91,161976,2378],{"emptyLinePlaceholder":17},[91,161978,161979],{"class":93,"line":1590},[91,161980,2378],{"emptyLinePlaceholder":17},[91,161982,161983,161986,161988,161990,161992],{"class":93,"line":1595},[91,161984,161985],{"class":101},"print_info(",[91,161987,149863],{"class":206},[91,161989,12414],{"class":101},[91,161991,752],{"class":150},[91,161993,108],{"class":101},[38,161995,161996],{},"这种方式可以把小功能组合成大功能。",[33,161998,162000],{"id":161999},"_511-参数检查","5.11 参数检查",[38,162002,162003],{},"函数内部可以检查参数是否合法。",[83,162005,162007],{"className":30353,"code":162006,"language":30355,"meta":10,"style":10},"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",[88,162008,162009,162018,162030,162036,162046,162050,162054,162071,162075,162087,162098,162104],{"__ignoreMap":10},[91,162010,162011,162013,162016],{"class":93,"line":94},[91,162012,31922],{"class":97},[91,162014,162015],{"class":1941}," divide",[91,162017,151068],{"class":101},[91,162019,162020,162022,162024,162026,162028],{"class":93,"line":11},[91,162021,3079],{"class":97},[91,162023,10861],{"class":101},[91,162025,2927],{"class":97},[91,162027,4071],{"class":150},[91,162029,3717],{"class":101},[91,162031,162032,162034],{"class":93,"line":1157},[91,162033,14731],{"class":97},[91,162035,152147],{"class":150},[91,162037,162038,162040,162042,162044],{"class":93,"line":1172},[91,162039,4068],{"class":97},[91,162041,10848],{"class":101},[91,162043,686],{"class":97},[91,162045,151079],{"class":101},[91,162047,162048],{"class":93,"line":1178},[91,162049,2378],{"emptyLinePlaceholder":17},[91,162051,162052],{"class":93,"line":1192},[91,162053,2378],{"emptyLinePlaceholder":17},[91,162055,162056,162058,162060,162063,162065,162067,162069],{"class":93,"line":1198},[91,162057,161281],{"class":101},[91,162059,147],{"class":97},[91,162061,162062],{"class":101}," divide(",[91,162064,548],{"class":150},[91,162066,12414],{"class":101},[91,162068,293],{"class":150},[91,162070,108],{"class":101},[91,162072,162073],{"class":93,"line":1289},[91,162074,2378],{"emptyLinePlaceholder":17},[91,162076,162077,162079,162081,162083,162085],{"class":93,"line":1295},[91,162078,1509],{"class":97},[91,162080,161527],{"class":101},[91,162082,38902],{"class":97},[91,162084,38908],{"class":150},[91,162086,3717],{"class":101},[91,162088,162089,162091,162093,162096],{"class":93,"line":1307},[91,162090,31274],{"class":150},[91,162092,102],{"class":101},[91,162094,162095],{"class":206},"\"除数不能为0\"",[91,162097,108],{"class":101},[91,162099,162100,162102],{"class":93,"line":1590},[91,162101,1679],{"class":97},[91,162103,3717],{"class":101},[91,162105,162106,162108],{"class":93,"line":1595},[91,162107,31274],{"class":150},[91,162109,76560],{"class":101},[33,162111,162113],{"id":162112},"_512-类型提示","5.12 类型提示",[38,162115,162116],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[83,162118,162120],{"className":30353,"code":162119,"language":30355,"meta":10,"style":10},"def add(a: int, b: int) -> int:\n    return a + b\n",[88,162121,162122,162145],{"__ignoreMap":10},[91,162123,162124,162126,162128,162131,162133,162136,162138,162141,162143],{"class":93,"line":94},[91,162125,31922],{"class":97},[91,162127,5188],{"class":1941},[91,162129,162130],{"class":101},"(a: ",[91,162132,105],{"class":150},[91,162134,162135],{"class":101},", b: ",[91,162137,105],{"class":150},[91,162139,162140],{"class":101},") -> ",[91,162142,105],{"class":150},[91,162144,3717],{"class":101},[91,162146,162147,162149,162151,162153],{"class":93,"line":11},[91,162148,4068],{"class":97},[91,162150,10848],{"class":101},[91,162152,583],{"class":97},[91,162154,151079],{"class":101},[38,162156,162157],{},"字符串参数：",[83,162159,162161],{"className":30353,"code":162160,"language":30355,"meta":10,"style":10},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[88,162162,162163,162180],{"__ignoreMap":10},[91,162164,162165,162167,162169,162172,162174,162176,162178],{"class":93,"line":94},[91,162166,31922],{"class":97},[91,162168,160971],{"class":1941},[91,162170,162171],{"class":101},"(name: ",[91,162173,1277],{"class":150},[91,162175,162140],{"class":101},[91,162177,95661],{"class":150},[91,162179,3717],{"class":101},[91,162181,162182,162184,162186,162188,162190,162192,162194,162196,162198],{"class":93,"line":11},[91,162183,31274],{"class":150},[91,162185,102],{"class":101},[91,162187,154],{"class":97},[91,162189,157029],{"class":206},[91,162191,998],{"class":150},[91,162193,79785],{"class":101},[91,162195,1048],{"class":150},[91,162197,353],{"class":206},[91,162199,108],{"class":101},[38,162201,162202],{},"列表参数：",[83,162204,162206],{"className":30353,"code":162205,"language":30355,"meta":10,"style":10},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[88,162207,162208,162227,162235,162247,162256],{"__ignoreMap":10},[91,162209,162210,162212,162215,162218,162220,162223,162225],{"class":93,"line":94},[91,162211,31922],{"class":97},[91,162213,162214],{"class":1941}," get_total",[91,162216,162217],{"class":101},"(numbers: list[",[91,162219,105],{"class":150},[91,162221,162222],{"class":101},"]) -> ",[91,162224,105],{"class":150},[91,162226,3717],{"class":101},[91,162228,162229,162231,162233],{"class":93,"line":11},[91,162230,159282],{"class":101},[91,162232,147],{"class":97},[91,162234,47308],{"class":150},[91,162236,162237,162239,162242,162244],{"class":93,"line":1157},[91,162238,3179],{"class":97},[91,162240,162241],{"class":101}," number ",[91,162243,26018],{"class":97},[91,162245,162246],{"class":101}," numbers:\n",[91,162248,162249,162251,162253],{"class":93,"line":1172},[91,162250,159957],{"class":101},[91,162252,9456],{"class":97},[91,162254,162255],{"class":101}," number\n",[91,162257,162258,162260],{"class":93,"line":1178},[91,162259,4068],{"class":97},[91,162261,162262],{"class":101}," total\n",[38,162264,162265],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[33,162267,162269],{"id":162268},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[83,162271,162273],{"className":30353,"code":162272,"language":30355,"meta":10,"style":10},"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",[88,162274,162275,162285,162289,162293,162301,162312,162322,162332,162342,162352,162356,162360,162369,162391,162395,162399,162408,162414,162434,162446,162457,162461,162470,162481,162486,162490,162494,162503,162509,162528,162540,162550,162554,162565,162575,162579,162587,162598,162602,162606,162610,162618,162623,162637,162641,162653,162658,162670,162675,162687,162692,162704,162714,162718,162724],{"__ignoreMap":10},[91,162276,162277,162280,162282],{"class":93,"line":94},[91,162278,162279],{"class":101},"balance ",[91,162281,147],{"class":97},[91,162283,162284],{"class":150}," 1000\n",[91,162286,162287],{"class":93,"line":11},[91,162288,2378],{"emptyLinePlaceholder":17},[91,162290,162291],{"class":93,"line":1157},[91,162292,2378],{"emptyLinePlaceholder":17},[91,162294,162295,162297,162299],{"class":93,"line":1172},[91,162296,31922],{"class":97},[91,162298,152008],{"class":1941},[91,162300,31928],{"class":101},[91,162302,162303,162305,162307,162310],{"class":93,"line":1178},[91,162304,31274],{"class":150},[91,162306,102],{"class":101},[91,162308,162309],{"class":206},"\"====== ATM ======\"",[91,162311,108],{"class":101},[91,162313,162314,162316,162318,162320],{"class":93,"line":1192},[91,162315,31274],{"class":150},[91,162317,102],{"class":101},[91,162319,160623],{"class":206},[91,162321,108],{"class":101},[91,162323,162324,162326,162328,162330],{"class":93,"line":1198},[91,162325,31274],{"class":150},[91,162327,102],{"class":101},[91,162329,160634],{"class":206},[91,162331,108],{"class":101},[91,162333,162334,162336,162338,162340],{"class":93,"line":1289},[91,162335,31274],{"class":150},[91,162337,102],{"class":101},[91,162339,160645],{"class":206},[91,162341,108],{"class":101},[91,162343,162344,162346,162348,162350],{"class":93,"line":1295},[91,162345,31274],{"class":150},[91,162347,102],{"class":101},[91,162349,160656],{"class":206},[91,162351,108],{"class":101},[91,162353,162354],{"class":93,"line":1307},[91,162355,2378],{"emptyLinePlaceholder":17},[91,162357,162358],{"class":93,"line":1590},[91,162359,2378],{"emptyLinePlaceholder":17},[91,162361,162362,162364,162367],{"class":93,"line":1595},[91,162363,31922],{"class":97},[91,162365,162366],{"class":1941}," show_balance",[91,162368,31928],{"class":101},[91,162370,162371,162373,162375,162377,162380,162382,162385,162387,162389],{"class":93,"line":1601},[91,162372,31274],{"class":150},[91,162374,102],{"class":101},[91,162376,154],{"class":97},[91,162378,162379],{"class":206},"\"当前余额:",[91,162381,998],{"class":150},[91,162383,162384],{"class":101},"balance",[91,162386,1048],{"class":150},[91,162388,156987],{"class":206},[91,162390,108],{"class":101},[91,162392,162393],{"class":93,"line":1606},[91,162394,2378],{"emptyLinePlaceholder":17},[91,162396,162397],{"class":93,"line":1620},[91,162398,2378],{"emptyLinePlaceholder":17},[91,162400,162401,162403,162406],{"class":93,"line":1625},[91,162402,31922],{"class":97},[91,162404,162405],{"class":1941}," save_money",[91,162407,31928],{"class":101},[91,162409,162410,162412],{"class":93,"line":1631},[91,162411,161836],{"class":97},[91,162413,150074],{"class":101},[91,162415,162416,162419,162421,162423,162425,162427,162429,162432],{"class":93,"line":1652},[91,162417,162418],{"class":101},"    money ",[91,162420,147],{"class":97},[91,162422,109772],{"class":150},[91,162424,102],{"class":101},[91,162426,53796],{"class":150},[91,162428,102],{"class":101},[91,162430,162431],{"class":206},"\"请输入存款金额:\"",[91,162433,30472],{"class":101},[91,162435,162436,162438,162440,162442,162444],{"class":93,"line":1657},[91,162437,3079],{"class":97},[91,162439,150117],{"class":101},[91,162441,1566],{"class":97},[91,162443,4071],{"class":150},[91,162445,3717],{"class":101},[91,162447,162448,162450,162452,162455],{"class":93,"line":1671},[91,162449,32426],{"class":150},[91,162451,102],{"class":101},[91,162453,162454],{"class":206},"\"金额必须大于0\"",[91,162456,108],{"class":101},[91,162458,162459],{"class":93,"line":1676},[91,162460,152336],{"class":97},[91,162462,162463,162466,162468],{"class":93,"line":1705},[91,162464,162465],{"class":101},"    balance ",[91,162467,9456],{"class":97},[91,162469,150150],{"class":101},[91,162471,162472,162474,162476,162479],{"class":93,"line":1710},[91,162473,31274],{"class":150},[91,162475,102],{"class":101},[91,162477,162478],{"class":206},"\"存款成功\"",[91,162480,108],{"class":101},[91,162482,162483],{"class":93,"line":1727},[91,162484,162485],{"class":101},"    show_balance()\n",[91,162487,162488],{"class":93,"line":1732},[91,162489,2378],{"emptyLinePlaceholder":17},[91,162491,162492],{"class":93,"line":1737},[91,162493,2378],{"emptyLinePlaceholder":17},[91,162495,162496,162498,162501],{"class":93,"line":1742},[91,162497,31922],{"class":97},[91,162499,162500],{"class":1941}," withdraw_money",[91,162502,31928],{"class":101},[91,162504,162505,162507],{"class":93,"line":1756},[91,162506,161836],{"class":97},[91,162508,150074],{"class":101},[91,162510,162511,162513,162515,162517,162519,162521,162523,162526],{"class":93,"line":1761},[91,162512,162418],{"class":101},[91,162514,147],{"class":97},[91,162516,109772],{"class":150},[91,162518,102],{"class":101},[91,162520,53796],{"class":150},[91,162522,102],{"class":101},[91,162524,162525],{"class":206},"\"请输入取款金额:\"",[91,162527,30472],{"class":101},[91,162529,162530,162532,162534,162536,162538],{"class":93,"line":2555},[91,162531,3079],{"class":97},[91,162533,150117],{"class":101},[91,162535,1566],{"class":97},[91,162537,4071],{"class":150},[91,162539,3717],{"class":101},[91,162541,162542,162544,162546,162548],{"class":93,"line":2569},[91,162543,32426],{"class":150},[91,162545,102],{"class":101},[91,162547,162454],{"class":206},[91,162549,108],{"class":101},[91,162551,162552],{"class":93,"line":2577},[91,162553,152336],{"class":97},[91,162555,162556,162558,162560,162562],{"class":93,"line":2582},[91,162557,3079],{"class":97},[91,162559,150117],{"class":101},[91,162561,1062],{"class":97},[91,162563,162564],{"class":101}," balance:\n",[91,162566,162567,162569,162571,162573],{"class":93,"line":2588},[91,162568,32426],{"class":150},[91,162570,102],{"class":101},[91,162572,150212],{"class":206},[91,162574,108],{"class":101},[91,162576,162577],{"class":93,"line":2594},[91,162578,152336],{"class":97},[91,162580,162581,162583,162585],{"class":93,"line":2599},[91,162582,162465],{"class":101},[91,162584,150227],{"class":97},[91,162586,150150],{"class":101},[91,162588,162589,162591,162593,162596],{"class":93,"line":7927},[91,162590,31274],{"class":150},[91,162592,102],{"class":101},[91,162594,162595],{"class":206},"\"取款成功\"",[91,162597,108],{"class":101},[91,162599,162600],{"class":93,"line":7951},[91,162601,162485],{"class":101},[91,162603,162604],{"class":93,"line":7956},[91,162605,2378],{"emptyLinePlaceholder":17},[91,162607,162608],{"class":93,"line":7962},[91,162609,2378],{"emptyLinePlaceholder":17},[91,162611,162612,162614,162616],{"class":93,"line":7989},[91,162613,108638],{"class":97},[91,162615,95267],{"class":150},[91,162617,3717],{"class":101},[91,162619,162620],{"class":93,"line":7994},[91,162621,162622],{"class":101},"    show_menu()\n",[91,162624,162625,162627,162629,162631,162633,162635],{"class":93,"line":8000},[91,162626,160667],{"class":101},[91,162628,147],{"class":97},[91,162630,60580],{"class":150},[91,162632,102],{"class":101},[91,162634,153048],{"class":206},[91,162636,108],{"class":101},[91,162638,162639],{"class":93,"line":8012},[91,162640,2378],{"emptyLinePlaceholder":17},[91,162642,162643,162645,162647,162649,162651],{"class":93,"line":8024},[91,162644,3079],{"class":97},[91,162646,153061],{"class":101},[91,162648,2927],{"class":97},[91,162650,153066],{"class":206},[91,162652,3717],{"class":101},[91,162654,162655],{"class":93,"line":8036},[91,162656,162657],{"class":101},"        show_balance()\n",[91,162659,162660,162662,162664,162666,162668],{"class":93,"line":9695},[91,162661,39268],{"class":97},[91,162663,153061],{"class":101},[91,162665,2927],{"class":97},[91,162667,153085],{"class":206},[91,162669,3717],{"class":101},[91,162671,162672],{"class":93,"line":9720},[91,162673,162674],{"class":101},"        save_money()\n",[91,162676,162677,162679,162681,162683,162685],{"class":93,"line":9743},[91,162678,39268],{"class":97},[91,162680,153061],{"class":101},[91,162682,2927],{"class":97},[91,162684,153103],{"class":206},[91,162686,3717],{"class":101},[91,162688,162689],{"class":93,"line":9767},[91,162690,162691],{"class":101},"        withdraw_money()\n",[91,162693,162694,162696,162698,162700,162702],{"class":93,"line":9772},[91,162695,39268],{"class":97},[91,162697,153061],{"class":101},[91,162699,2927],{"class":97},[91,162701,153157],{"class":206},[91,162703,3717],{"class":101},[91,162705,162706,162708,162710,162712],{"class":93,"line":9777},[91,162707,32426],{"class":150},[91,162709,102],{"class":101},[91,162711,153168],{"class":206},[91,162713,108],{"class":101},[91,162715,162716],{"class":93,"line":9782},[91,162717,31602],{"class":97},[91,162719,162720,162722],{"class":93,"line":9791},[91,162721,157997],{"class":97},[91,162723,3717],{"class":101},[91,162725,162726,162728,162730,162732],{"class":93,"line":9796},[91,162727,32426],{"class":150},[91,162729,102],{"class":101},[91,162731,153189],{"class":206},[91,162733,108],{"class":101},[38,162735,162736],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[33,162738,162740],{"id":162739},"_514-易错点","5.14 易错点",[46,162742,162743,162746,162749,162754,162759,162762],{},[49,162744,162745],{},"函数定义后必须调用才会执行。",[49,162747,162748],{},"函数名后面有括号才是调用。",[49,162750,162751,162753],{},[88,162752,17025],{}," 后面的代码不会执行。",[49,162755,162756,162757,28360],{},"没有返回值的函数默认返回 ",[88,162758,95661],{},[49,162760,162761],{},"局部变量不能在函数外部访问。",[49,162763,162764,162765,162767],{},"不要滥用 ",[88,162766,161801],{},"，更好的方式是让函数返回新值。",[38,162769,162770,162771,162773],{},"例如不用 ",[88,162772,161801],{}," 改写存款：",[83,162775,162777],{"className":30353,"code":162776,"language":30355,"meta":10,"style":10},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[88,162778,162779,162788,162799,162803,162807,162815,162828],{"__ignoreMap":10},[91,162780,162781,162783,162785],{"class":93,"line":94},[91,162782,31922],{"class":97},[91,162784,162405],{"class":1941},[91,162786,162787],{"class":101},"(balance, money):\n",[91,162789,162790,162792,162795,162797],{"class":93,"line":11},[91,162791,4068],{"class":97},[91,162793,162794],{"class":101}," balance ",[91,162796,583],{"class":97},[91,162798,150150],{"class":101},[91,162800,162801],{"class":93,"line":1157},[91,162802,2378],{"emptyLinePlaceholder":17},[91,162804,162805],{"class":93,"line":1172},[91,162806,2378],{"emptyLinePlaceholder":17},[91,162808,162809,162811,162813],{"class":93,"line":1178},[91,162810,162279],{"class":101},[91,162812,147],{"class":97},[91,162814,162284],{"class":150},[91,162816,162817,162819,162821,162824,162826],{"class":93,"line":1192},[91,162818,162279],{"class":101},[91,162820,147],{"class":97},[91,162822,162823],{"class":101}," save_money(balance, ",[91,162825,1700],{"class":150},[91,162827,108],{"class":101},[91,162829,162830,162832],{"class":93,"line":1198},[91,162831,30390],{"class":150},[91,162833,162834],{"class":101},"(balance)\n",[33,162836,162838],{"id":162837},"_515-本章练习","5.15 本章练习",[46,162840,162841,162848,162854,162860,162866],{},[49,162842,162843,162844,162847],{},"定义函数 ",[88,162845,162846],{},"print_student(name, age)","，输出学生信息。",[49,162849,162843,162850,162853],{},[88,162851,162852],{},"get_max(a, b, c)","，返回三个数中的最大值。",[49,162855,162843,162856,162859],{},[88,162857,162858],{},"is_even(num)","，判断一个数是否为偶数。",[49,162861,162843,162862,162865],{},[88,162863,162864],{},"calculate_bmi(weight, height)","，返回 BMI。",[49,162867,162868],{},"把第 4 章的菜单程序拆分成多个函数。",[5105,162870,162871],{},"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":10,"searchDepth":11,"depth":11,"links":162873},[162874,162875,162876,162877,162878,162879,162880,162881,162882,162886,162887,162888,162889,162890,162891],{"id":160894,"depth":11,"text":160895},{"id":160935,"depth":11,"text":160936},{"id":161025,"depth":11,"text":161026},{"id":161106,"depth":11,"text":161107},{"id":161239,"depth":11,"text":161240},{"id":161361,"depth":11,"text":161362},{"id":161483,"depth":11,"text":161484},{"id":161560,"depth":11,"text":161561},{"id":161682,"depth":11,"text":161683,"children":162883},[162884,162885],{"id":161686,"depth":1157,"text":161687},{"id":161744,"depth":1157,"text":161745},{"id":161873,"depth":11,"text":161874},{"id":161999,"depth":11,"text":162000},{"id":162112,"depth":11,"text":162113},{"id":162268,"depth":11,"text":162269},{"id":162739,"depth":11,"text":162740},{"id":162837,"depth":11,"text":162838},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160886,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162898,"title":162899,"body":162900,"description":13,"extension":14,"meta":165944,"navigation":17,"path":165945,"seo":165946,"stem":165947,"__hash__":165948},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162901,"toc":165925},[162902,162905,162909,162912,162915,163019,163022,163026,163029,163109,163112,163116,163119,163179,163182,163218,163221,163236,163240,163313,163316,163371,163374,163444,163447,163531,163541,163599,163603,163648,163651,163677,163680,163786,163790,163793,163835,163838,163902,163905,163909,163912,163973,163976,164006,164009,164047,164051,164054,164063,164066,164190,164193,164234,164238,164241,164252,164292,164295,164310,164315,164318,164385,164388,164478,164482,164485,164533,164536,164563,164565,164595,164598,164618,164621,164652,164655,164688,164692,164695,164719,164722,164746,164749,164773,164777,164780,164910,164913,164993,164996,165071,165075,165078,165128,165131,165173,165176,165200,165202,165226,165229,165284,165287,165353,165357,165360,165363,165401,165404,165457,165460,165506,165509,165542,165545,165549,165868,165872,165901,165905,165922],[29,162903,162899],{"id":162904},"_6-数据容器",[33,162906,162908],{"id":162907},"_61-什么是数据容器","6.1 什么是数据容器",[38,162910,162911],{},"数据容器用于一次保存多个数据。",[38,162913,162914],{},"常见容器：",[239,162916,162917,162934],{},[242,162918,162919],{},[245,162920,162921,162923,162926,162929,162932],{},[248,162922,25746],{},[248,162924,162925],{},"是否有序",[248,162927,162928],{},"是否可变",[248,162930,162931],{},"是否允许重复",[248,162933,27467],{},[286,162935,162936,162954,162970,162985,163002],{},[245,162937,162938,162941,162944,162947,162950],{},[291,162939,162940],{},"list列表",[291,162942,162943],{},"有序",[291,162945,162946],{},"可变",[291,162948,162949],{},"允许",[291,162951,162952],{},[88,162953,155232],{},[245,162955,162956,162959,162961,162964,162966],{},[291,162957,162958],{},"tuple元组",[291,162960,162943],{},[291,162962,162963],{},"不可变",[291,162965,162949],{},[291,162967,162968],{},[88,162969,155245],{},[245,162971,162972,162975,162977,162979,162981],{},[291,162973,162974],{},"str字符串",[291,162976,162943],{},[291,162978,162963],{},[291,162980,162949],{},[291,162982,162983],{},[88,162984,155855],{},[245,162986,162987,162990,162993,162995,162998],{},[291,162988,162989],{},"set集合",[291,162991,162992],{},"无序",[291,162994,162946],{},[291,162996,162997],{},"不允许",[291,162999,163000],{},[88,163001,155270],{},[245,163003,163004,163007,163009,163011,163014],{},[291,163005,163006],{},"dict字典",[291,163008,162943],{},[291,163010,162946],{},[291,163012,163013],{},"key不允许重复",[291,163015,163016],{},[88,163017,163018],{},"{\"name\": \"小明\"}",[38,163020,163021],{},"Python 3.7 之后，字典保持插入顺序。",[33,163023,163025],{"id":163024},"_62-列表list","6.2 列表list",[38,163027,163028],{},"列表用于保存一组有顺序的数据。",[83,163030,163032],{"className":30353,"code":163031,"language":30355,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[88,163033,163034,163054,163079,163100],{"__ignoreMap":10},[91,163035,163036,163038,163040,163042,163044,163046,163048,163050,163052],{"class":93,"line":94},[91,163037,160355],{"class":101},[91,163039,147],{"class":97},[91,163041,52201],{"class":101},[91,163043,149863],{"class":206},[91,163045,12414],{"class":101},[91,163047,150911],{"class":206},[91,163049,12414],{"class":101},[91,163051,159706],{"class":206},[91,163053,33221],{"class":101},[91,163055,163056,163059,163061,163063,163065,163067,163069,163071,163073,163075,163077],{"class":93,"line":11},[91,163057,163058],{"class":101},"numbers ",[91,163060,147],{"class":97},[91,163062,52201],{"class":101},[91,163064,319],{"class":150},[91,163066,12414],{"class":101},[91,163068,179],{"class":150},[91,163070,12414],{"class":101},[91,163072,173],{"class":150},[91,163074,12414],{"class":101},[91,163076,395],{"class":150},[91,163078,33221],{"class":101},[91,163080,163081,163084,163086,163088,163090,163092,163094,163096,163098],{"class":93,"line":1157},[91,163082,163083],{"class":101},"mixed ",[91,163085,147],{"class":97},[91,163087,52201],{"class":101},[91,163089,149863],{"class":206},[91,163091,12414],{"class":101},[91,163093,752],{"class":150},[91,163095,12414],{"class":101},[91,163097,31451],{"class":150},[91,163099,33221],{"class":101},[91,163101,163102,163105,163107],{"class":93,"line":1172},[91,163103,163104],{"class":101},"empty ",[91,163106,147],{"class":97},[91,163108,51813],{"class":101},[38,163110,163111],{},"推荐一个列表中保存同类数据，代码更清晰。",[33,163113,163115],{"id":163114},"_63-列表索引","6.3 列表索引",[38,163117,163118],{},"正向索引从 0 开始：",[83,163120,163122],{"className":30353,"code":163121,"language":30355,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[88,163123,163124,163144,163148,163159,163169],{"__ignoreMap":10},[91,163125,163126,163128,163130,163132,163134,163136,163138,163140,163142],{"class":93,"line":94},[91,163127,160355],{"class":101},[91,163129,147],{"class":97},[91,163131,52201],{"class":101},[91,163133,149863],{"class":206},[91,163135,12414],{"class":101},[91,163137,150911],{"class":206},[91,163139,12414],{"class":101},[91,163141,159706],{"class":206},[91,163143,33221],{"class":101},[91,163145,163146],{"class":93,"line":11},[91,163147,2378],{"emptyLinePlaceholder":17},[91,163149,163150,163152,163155,163157],{"class":93,"line":1157},[91,163151,30390],{"class":150},[91,163153,163154],{"class":101},"(names[",[91,163156,293],{"class":150},[91,163158,4635],{"class":101},[91,163160,163161,163163,163165,163167],{"class":93,"line":1172},[91,163162,30390],{"class":150},[91,163164,163154],{"class":101},[91,163166,319],{"class":150},[91,163168,4635],{"class":101},[91,163170,163171,163173,163175,163177],{"class":93,"line":1178},[91,163172,30390],{"class":150},[91,163174,163154],{"class":101},[91,163176,179],{"class":150},[91,163178,4635],{"class":101},[38,163180,163181],{},"反向索引从 -1 开始：",[83,163183,163185],{"className":30353,"code":163184,"language":30355,"meta":10,"style":10},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[88,163186,163187,163203],{"__ignoreMap":10},[91,163188,163189,163191,163193,163195,163197,163200],{"class":93,"line":94},[91,163190,30390],{"class":150},[91,163192,163154],{"class":101},[91,163194,634],{"class":97},[91,163196,319],{"class":150},[91,163198,163199],{"class":101},"])  ",[91,163201,163202],{"class":160},"# 小刚\n",[91,163204,163205,163207,163209,163211,163213,163215],{"class":93,"line":11},[91,163206,30390],{"class":150},[91,163208,163154],{"class":101},[91,163210,634],{"class":97},[91,163212,179],{"class":150},[91,163214,163199],{"class":101},[91,163216,163217],{"class":160},"# 小红\n",[38,163219,163220],{},"索引越界会报错：",[83,163222,163224],{"className":30353,"code":163223,"language":30355,"meta":10,"style":10},"print(names[3])\n",[88,163225,163226],{"__ignoreMap":10},[91,163227,163228,163230,163232,163234],{"class":93,"line":94},[91,163229,30390],{"class":150},[91,163231,163154],{"class":101},[91,163233,173],{"class":150},[91,163235,4635],{"class":101},[33,163237,163239],{"id":163238},"_64-列表常用方法","6.4 列表常用方法",[83,163241,163243],{"className":30353,"code":163242,"language":30355,"meta":10,"style":10},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[88,163244,163245,163261,163265,163274,163288,163302,163306],{"__ignoreMap":10},[91,163246,163247,163249,163251,163253,163255,163257,163259],{"class":93,"line":94},[91,163248,160355],{"class":101},[91,163250,147],{"class":97},[91,163252,52201],{"class":101},[91,163254,149863],{"class":206},[91,163256,12414],{"class":101},[91,163258,150911],{"class":206},[91,163260,33221],{"class":101},[91,163262,163263],{"class":93,"line":11},[91,163264,2378],{"emptyLinePlaceholder":17},[91,163266,163267,163270,163272],{"class":93,"line":1157},[91,163268,163269],{"class":101},"names.append(",[91,163271,159706],{"class":206},[91,163273,108],{"class":101},[91,163275,163276,163279,163281,163283,163286],{"class":93,"line":1172},[91,163277,163278],{"class":101},"names.insert(",[91,163280,319],{"class":150},[91,163282,12414],{"class":101},[91,163284,163285],{"class":206},"\"小李\"",[91,163287,108],{"class":101},[91,163289,163290,163293,163295,163297,163300],{"class":93,"line":1178},[91,163291,163292],{"class":101},"names.extend([",[91,163294,8662],{"class":206},[91,163296,12414],{"class":101},[91,163298,163299],{"class":206},"\"小赵\"",[91,163301,4635],{"class":101},[91,163303,163304],{"class":93,"line":1192},[91,163305,2378],{"emptyLinePlaceholder":17},[91,163307,163308,163310],{"class":93,"line":1198},[91,163309,30390],{"class":150},[91,163311,163312],{"class":101},"(names)\n",[38,163314,163315],{},"删除元素：",[83,163317,163319],{"className":30353,"code":163318,"language":30355,"meta":10,"style":10},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[88,163320,163321,163330,163340,163354,163366],{"__ignoreMap":10},[91,163322,163323,163326,163328],{"class":93,"line":94},[91,163324,163325],{"class":101},"names.remove(",[91,163327,150911],{"class":206},[91,163329,108],{"class":101},[91,163331,163332,163335,163337],{"class":93,"line":11},[91,163333,163334],{"class":101},"last ",[91,163336,147],{"class":97},[91,163338,163339],{"class":101}," names.pop()\n",[91,163341,163342,163345,163347,163350,163352],{"class":93,"line":1157},[91,163343,163344],{"class":101},"first ",[91,163346,147],{"class":97},[91,163348,163349],{"class":101}," names.pop(",[91,163351,293],{"class":150},[91,163353,108],{"class":101},[91,163355,163356,163359,163362,163364],{"class":93,"line":1172},[91,163357,163358],{"class":97},"del",[91,163360,163361],{"class":101}," names[",[91,163363,293],{"class":150},[91,163365,33221],{"class":101},[91,163367,163368],{"class":93,"line":1178},[91,163369,163370],{"class":101},"names.clear()\n",[38,163372,163373],{},"查询和统计：",[83,163375,163377],{"className":30353,"code":163376,"language":30355,"meta":10,"style":10},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[88,163378,163379,163407,163411,163422,163433],{"__ignoreMap":10},[91,163380,163381,163383,163385,163387,163389,163391,163393,163395,163397,163399,163401,163403,163405],{"class":93,"line":94},[91,163382,163058],{"class":101},[91,163384,147],{"class":97},[91,163386,52201],{"class":101},[91,163388,319],{"class":150},[91,163390,12414],{"class":101},[91,163392,179],{"class":150},[91,163394,12414],{"class":101},[91,163396,173],{"class":150},[91,163398,12414],{"class":101},[91,163400,179],{"class":150},[91,163402,12414],{"class":101},[91,163404,395],{"class":150},[91,163406,33221],{"class":101},[91,163408,163409],{"class":93,"line":11},[91,163410,2378],{"emptyLinePlaceholder":17},[91,163412,163413,163415,163418,163420],{"class":93,"line":1157},[91,163414,30390],{"class":150},[91,163416,163417],{"class":101},"(numbers.index(",[91,163419,173],{"class":150},[91,163421,30472],{"class":101},[91,163423,163424,163426,163429,163431],{"class":93,"line":1172},[91,163425,30390],{"class":150},[91,163427,163428],{"class":101},"(numbers.count(",[91,163430,179],{"class":150},[91,163432,30472],{"class":101},[91,163434,163435,163437,163439,163441],{"class":93,"line":1178},[91,163436,30390],{"class":150},[91,163438,102],{"class":101},[91,163440,7337],{"class":150},[91,163442,163443],{"class":101},"(numbers))\n",[38,163445,163446],{},"排序：",[83,163448,163450],{"className":30353,"code":163449,"language":30355,"meta":10,"style":10},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[88,163451,163452,163476,163480,163485,163492,163496,163510,163516,163520,163525],{"__ignoreMap":10},[91,163453,163454,163456,163458,163460,163462,163464,163466,163468,163470,163472,163474],{"class":93,"line":94},[91,163455,163058],{"class":101},[91,163457,147],{"class":97},[91,163459,52201],{"class":101},[91,163461,173],{"class":150},[91,163463,12414],{"class":101},[91,163465,319],{"class":150},[91,163467,12414],{"class":101},[91,163469,421],{"class":150},[91,163471,12414],{"class":101},[91,163473,179],{"class":150},[91,163475,33221],{"class":101},[91,163477,163478],{"class":93,"line":11},[91,163479,2378],{"emptyLinePlaceholder":17},[91,163481,163482],{"class":93,"line":1157},[91,163483,163484],{"class":101},"numbers.sort()\n",[91,163486,163487,163489],{"class":93,"line":1172},[91,163488,30390],{"class":150},[91,163490,163491],{"class":101},"(numbers)\n",[91,163493,163494],{"class":93,"line":1178},[91,163495,2378],{"emptyLinePlaceholder":17},[91,163497,163498,163501,163504,163506,163508],{"class":93,"line":1192},[91,163499,163500],{"class":101},"numbers.sort(",[91,163502,163503],{"class":5195},"reverse",[91,163505,147],{"class":97},[91,163507,31451],{"class":150},[91,163509,108],{"class":101},[91,163511,163512,163514],{"class":93,"line":1198},[91,163513,30390],{"class":150},[91,163515,163491],{"class":101},[91,163517,163518],{"class":93,"line":1289},[91,163519,2378],{"emptyLinePlaceholder":17},[91,163521,163522],{"class":93,"line":1295},[91,163523,163524],{"class":101},"numbers.reverse()\n",[91,163526,163527,163529],{"class":93,"line":1307},[91,163528,30390],{"class":150},[91,163530,163491],{"class":101},[38,163532,163533,163536,163537,163540],{},[88,163534,163535],{},"sort()"," 会修改原列表，",[88,163538,163539],{},"sorted()"," 返回新列表。",[83,163542,163544],{"className":30353,"code":163543,"language":30355,"meta":10,"style":10},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[88,163545,163546,163570,163582,163586,163592],{"__ignoreMap":10},[91,163547,163548,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568],{"class":93,"line":94},[91,163549,163058],{"class":101},[91,163551,147],{"class":97},[91,163553,52201],{"class":101},[91,163555,173],{"class":150},[91,163557,12414],{"class":101},[91,163559,319],{"class":150},[91,163561,12414],{"class":101},[91,163563,421],{"class":150},[91,163565,12414],{"class":101},[91,163567,179],{"class":150},[91,163569,33221],{"class":101},[91,163571,163572,163575,163577,163580],{"class":93,"line":11},[91,163573,163574],{"class":101},"new_numbers ",[91,163576,147],{"class":97},[91,163578,163579],{"class":150}," sorted",[91,163581,163491],{"class":101},[91,163583,163584],{"class":93,"line":1157},[91,163585,2378],{"emptyLinePlaceholder":17},[91,163587,163588,163590],{"class":93,"line":1172},[91,163589,30390],{"class":150},[91,163591,163491],{"class":101},[91,163593,163594,163596],{"class":93,"line":1178},[91,163595,30390],{"class":150},[91,163597,163598],{"class":101},"(new_numbers)\n",[33,163600,163602],{"id":163601},"_65-列表遍历","6.5 列表遍历",[83,163604,163606],{"className":30353,"code":163605,"language":30355,"meta":10,"style":10},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[88,163607,163608,163628,163632,163642],{"__ignoreMap":10},[91,163609,163610,163612,163614,163616,163618,163620,163622,163624,163626],{"class":93,"line":94},[91,163611,160355],{"class":101},[91,163613,147],{"class":97},[91,163615,52201],{"class":101},[91,163617,149863],{"class":206},[91,163619,12414],{"class":101},[91,163621,150911],{"class":206},[91,163623,12414],{"class":101},[91,163625,159706],{"class":206},[91,163627,33221],{"class":101},[91,163629,163630],{"class":93,"line":11},[91,163631,2378],{"emptyLinePlaceholder":17},[91,163633,163634,163636,163638,163640],{"class":93,"line":1157},[91,163635,3003],{"class":97},[91,163637,160391],{"class":101},[91,163639,26018],{"class":97},[91,163641,160396],{"class":101},[91,163643,163644,163646],{"class":93,"line":1172},[91,163645,31274],{"class":150},[91,163647,150635],{"class":101},[38,163649,163650],{},"需要索引时：",[83,163652,163654],{"className":30353,"code":163653,"language":30355,"meta":10,"style":10},"for index, name in enumerate(names):\n    print(index, name)\n",[88,163655,163656,163670],{"__ignoreMap":10},[91,163657,163658,163660,163663,163665,163667],{"class":93,"line":94},[91,163659,3003],{"class":97},[91,163661,163662],{"class":101}," index, name ",[91,163664,26018],{"class":97},[91,163666,31581],{"class":150},[91,163668,163669],{"class":101},"(names):\n",[91,163671,163672,163674],{"class":93,"line":11},[91,163673,31274],{"class":150},[91,163675,163676],{"class":101},"(index, name)\n",[38,163678,163679],{},"统计总分：",[83,163681,163683],{"className":30353,"code":163682,"language":30355,"meta":10,"style":10},"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",[88,163684,163685,163710,163718,163722,163733,163741,163745,163762],{"__ignoreMap":10},[91,163686,163687,163690,163692,163694,163696,163698,163700,163702,163704,163706,163708],{"class":93,"line":94},[91,163688,163689],{"class":101},"scores ",[91,163691,147],{"class":97},[91,163693,52201],{"class":101},[91,163695,964],{"class":150},[91,163697,12414],{"class":101},[91,163699,838],{"class":150},[91,163701,12414],{"class":101},[91,163703,356],{"class":150},[91,163705,12414],{"class":101},[91,163707,663],{"class":150},[91,163709,33221],{"class":101},[91,163711,163712,163714,163716],{"class":93,"line":11},[91,163713,157235],{"class":101},[91,163715,147],{"class":97},[91,163717,47308],{"class":150},[91,163719,163720],{"class":93,"line":1157},[91,163721,2378],{"emptyLinePlaceholder":17},[91,163723,163724,163726,163728,163730],{"class":93,"line":1172},[91,163725,3003],{"class":97},[91,163727,157758],{"class":101},[91,163729,26018],{"class":97},[91,163731,163732],{"class":101}," scores:\n",[91,163734,163735,163737,163739],{"class":93,"line":1178},[91,163736,159282],{"class":101},[91,163738,9456],{"class":97},[91,163740,1557],{"class":101},[91,163742,163743],{"class":93,"line":1192},[91,163744,2378],{"emptyLinePlaceholder":17},[91,163746,163747,163750,163752,163755,163757,163759],{"class":93,"line":1198},[91,163748,163749],{"class":101},"avg ",[91,163751,147],{"class":97},[91,163753,163754],{"class":101}," total ",[91,163756,686],{"class":97},[91,163758,7310],{"class":150},[91,163760,163761],{"class":101},"(scores)\n",[91,163763,163764,163766,163768,163770,163773,163775,163778,163780,163782,163784],{"class":93,"line":1289},[91,163765,30390],{"class":150},[91,163767,102],{"class":101},[91,163769,154],{"class":97},[91,163771,163772],{"class":206},"\"平均分:",[91,163774,998],{"class":150},[91,163776,163777],{"class":101},"avg",[91,163779,157134],{"class":97},[91,163781,1048],{"class":150},[91,163783,353],{"class":206},[91,163785,108],{"class":101},[33,163787,163789],{"id":163788},"_66-元组tuple","6.6 元组tuple",[38,163791,163792],{},"元组和列表类似，但不可修改。",[83,163794,163796],{"className":30353,"code":163795,"language":30355,"meta":10,"style":10},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[88,163797,163798,163815],{"__ignoreMap":10},[91,163799,163800,163803,163805,163807,163809,163811,163813],{"class":93,"line":94},[91,163801,163802],{"class":101},"point ",[91,163804,147],{"class":97},[91,163806,1636],{"class":101},[91,163808,548],{"class":150},[91,163810,12414],{"class":101},[91,163812,802],{"class":150},[91,163814,108],{"class":101},[91,163816,163817,163819,163821,163823,163825,163827,163829,163831,163833],{"class":93,"line":11},[91,163818,116289],{"class":101},[91,163820,147],{"class":97},[91,163822,1636],{"class":101},[91,163824,149863],{"class":206},[91,163826,12414],{"class":101},[91,163828,752],{"class":150},[91,163830,12414],{"class":101},[91,163832,69244],{"class":206},[91,163834,108],{"class":101},[38,163836,163837],{},"单元素元组必须加逗号：",[83,163839,163841],{"className":30353,"code":163840,"language":30355,"meta":10,"style":10},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[88,163842,163843,163857,163870,163874,163888],{"__ignoreMap":10},[91,163844,163845,163848,163850,163852,163854],{"class":93,"line":94},[91,163846,163847],{"class":101},"t1 ",[91,163849,147],{"class":97},[91,163851,1636],{"class":101},[91,163853,548],{"class":150},[91,163855,163856],{"class":101},",)\n",[91,163858,163859,163862,163864,163866,163868],{"class":93,"line":11},[91,163860,163861],{"class":101},"t2 ",[91,163863,147],{"class":97},[91,163865,1636],{"class":101},[91,163867,548],{"class":150},[91,163869,108],{"class":101},[91,163871,163872],{"class":93,"line":1157},[91,163873,2378],{"emptyLinePlaceholder":17},[91,163875,163876,163878,163880,163882,163885],{"class":93,"line":1172},[91,163877,30390],{"class":150},[91,163879,102],{"class":101},[91,163881,103082],{"class":150},[91,163883,163884],{"class":101},"(t1))  ",[91,163886,163887],{"class":160},"# tuple\n",[91,163889,163890,163892,163894,163896,163899],{"class":93,"line":1178},[91,163891,30390],{"class":150},[91,163893,102],{"class":101},[91,163895,103082],{"class":150},[91,163897,163898],{"class":101},"(t2))  ",[91,163900,163901],{"class":160},"# int\n",[38,163903,163904],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[33,163906,163908],{"id":163907},"_67-字符串str","6.7 字符串str",[38,163910,163911],{},"字符串也是序列，可以索引、切片和遍历。",[83,163913,163915],{"className":30353,"code":163914,"language":30355,"meta":10,"style":10},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[88,163916,163917,163925,163929,163940,163952,163956,163967],{"__ignoreMap":10},[91,163918,163919,163921,163923],{"class":93,"line":94},[91,163920,156419],{"class":101},[91,163922,147],{"class":97},[91,163924,159656],{"class":206},[91,163926,163927],{"class":93,"line":11},[91,163928,2378],{"emptyLinePlaceholder":17},[91,163930,163931,163933,163936,163938],{"class":93,"line":1157},[91,163932,30390],{"class":150},[91,163934,163935],{"class":101},"(text[",[91,163937,293],{"class":150},[91,163939,4635],{"class":101},[91,163941,163942,163944,163946,163948,163950],{"class":93,"line":1172},[91,163943,30390],{"class":150},[91,163945,163935],{"class":101},[91,163947,634],{"class":97},[91,163949,319],{"class":150},[91,163951,4635],{"class":101},[91,163953,163954],{"class":93,"line":1178},[91,163955,2378],{"emptyLinePlaceholder":17},[91,163957,163958,163960,163962,163964],{"class":93,"line":1192},[91,163959,3003],{"class":97},[91,163961,159667],{"class":101},[91,163963,26018],{"class":97},[91,163965,163966],{"class":101}," text:\n",[91,163968,163969,163971],{"class":93,"line":1198},[91,163970,31274],{"class":150},[91,163972,159678],{"class":101},[38,163974,163975],{},"字符串不可变：",[83,163977,163979],{"className":30353,"code":163978,"language":30355,"meta":10,"style":10},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[88,163980,163981,163989],{"__ignoreMap":10},[91,163982,163983,163985,163987],{"class":93,"line":94},[91,163984,156419],{"class":101},[91,163986,147],{"class":97},[91,163988,159656],{"class":206},[91,163990,163991,163994,163996,163998,164000,164003],{"class":93,"line":11},[91,163992,163993],{"class":101},"text[",[91,163995,293],{"class":150},[91,163997,4421],{"class":101},[91,163999,147],{"class":97},[91,164001,164002],{"class":206}," \"P\"",[91,164004,164005],{"class":160},"  # 报错\n",[38,164007,164008],{},"如果要得到新字符串：",[83,164010,164012],{"className":30353,"code":164011,"language":30355,"meta":10,"style":10},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[88,164013,164014,164022,164040],{"__ignoreMap":10},[91,164015,164016,164018,164020],{"class":93,"line":94},[91,164017,156419],{"class":101},[91,164019,147],{"class":97},[91,164021,159656],{"class":206},[91,164023,164024,164026,164028,164030,164032,164035,164037],{"class":93,"line":11},[91,164025,156419],{"class":101},[91,164027,147],{"class":97},[91,164029,164002],{"class":206},[91,164031,45541],{"class":97},[91,164033,164034],{"class":101}," text[",[91,164036,319],{"class":150},[91,164038,164039],{"class":101},":]\n",[91,164041,164042,164044],{"class":93,"line":1157},[91,164043,30390],{"class":150},[91,164045,164046],{"class":101},"(text)\n",[33,164048,164050],{"id":164049},"_68-切片","6.8 切片",[38,164052,164053],{},"切片用于从序列中取一部分。",[83,164055,164057],{"className":30353,"code":164056,"language":30355,"meta":10,"style":10},"序列[开始:结束:步长]\n",[88,164058,164059],{"__ignoreMap":10},[91,164060,164061],{"class":93,"line":94},[91,164062,164056],{"class":101},[38,164064,164065],{},"结束位置不包含。",[83,164067,164069],{"className":30353,"code":164068,"language":30355,"meta":10,"style":10},"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",[88,164070,164071,164108,164112,164131,164146,164160,164174],{"__ignoreMap":10},[91,164072,164073,164076,164078,164080,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106],{"class":93,"line":94},[91,164074,164075],{"class":101},"nums ",[91,164077,147],{"class":97},[91,164079,52201],{"class":101},[91,164081,293],{"class":150},[91,164083,12414],{"class":101},[91,164085,319],{"class":150},[91,164087,12414],{"class":101},[91,164089,179],{"class":150},[91,164091,12414],{"class":101},[91,164093,173],{"class":150},[91,164095,12414],{"class":101},[91,164097,395],{"class":150},[91,164099,12414],{"class":101},[91,164101,421],{"class":150},[91,164103,12414],{"class":101},[91,164105,446],{"class":150},[91,164107,33221],{"class":101},[91,164109,164110],{"class":93,"line":11},[91,164111,2378],{"emptyLinePlaceholder":17},[91,164113,164114,164116,164119,164121,164123,164125,164128],{"class":93,"line":1157},[91,164115,30390],{"class":150},[91,164117,164118],{"class":101},"(nums[",[91,164120,319],{"class":150},[91,164122,961],{"class":101},[91,164124,395],{"class":150},[91,164126,164127],{"class":101},"])    ",[91,164129,164130],{"class":160},"# [1, 2, 3]\n",[91,164132,164133,164135,164138,164140,164143],{"class":93,"line":1172},[91,164134,30390],{"class":150},[91,164136,164137],{"class":101},"(nums[:",[91,164139,173],{"class":150},[91,164141,164142],{"class":101},"])     ",[91,164144,164145],{"class":160},"# [0, 1, 2]\n",[91,164147,164148,164150,164152,164154,164157],{"class":93,"line":1178},[91,164149,30390],{"class":150},[91,164151,164118],{"class":101},[91,164153,173],{"class":150},[91,164155,164156],{"class":101},":])     ",[91,164158,164159],{"class":160},"# [3, 4, 5, 6]\n",[91,164161,164162,164164,164167,164169,164171],{"class":93,"line":1192},[91,164163,30390],{"class":150},[91,164165,164166],{"class":101},"(nums[::",[91,164168,179],{"class":150},[91,164170,164127],{"class":101},[91,164172,164173],{"class":160},"# [0, 2, 4, 6]\n",[91,164175,164176,164178,164180,164182,164184,164187],{"class":93,"line":1198},[91,164177,30390],{"class":150},[91,164179,164166],{"class":101},[91,164181,634],{"class":97},[91,164183,319],{"class":150},[91,164185,164186],{"class":101},"])   ",[91,164188,164189],{"class":160},"# 反转\n",[38,164191,164192],{},"字符串切片：",[83,164194,164196],{"className":30353,"code":164195,"language":30355,"meta":10,"style":10},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[88,164197,164198,164207,164221],{"__ignoreMap":10},[91,164199,164200,164202,164204],{"class":93,"line":94},[91,164201,156419],{"class":101},[91,164203,147],{"class":97},[91,164205,164206],{"class":206}," \"abcdef\"\n",[91,164208,164209,164211,164213,164215,164217,164219],{"class":93,"line":11},[91,164210,30390],{"class":150},[91,164212,163935],{"class":101},[91,164214,319],{"class":150},[91,164216,961],{"class":101},[91,164218,395],{"class":150},[91,164220,4635],{"class":101},[91,164222,164223,164225,164228,164230,164232],{"class":93,"line":1157},[91,164224,30390],{"class":150},[91,164226,164227],{"class":101},"(text[::",[91,164229,634],{"class":97},[91,164231,319],{"class":150},[91,164233,4635],{"class":101},[33,164235,164237],{"id":164236},"_69-集合set","6.9 集合set",[38,164239,164240],{},"集合特点：",[46,164242,164243,164246,164249],{},[49,164244,164245],{},"无序。",[49,164247,164248],{},"元素不重复。",[49,164250,164251],{},"可以做交集、并集、差集。",[83,164253,164255],{"className":30353,"code":164254,"language":30355,"meta":10,"style":10},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[88,164256,164257,164285],{"__ignoreMap":10},[91,164258,164259,164261,164263,164265,164267,164269,164271,164273,164275,164277,164279,164281,164283],{"class":93,"line":94},[91,164260,164075],{"class":101},[91,164262,147],{"class":97},[91,164264,4426],{"class":101},[91,164266,319],{"class":150},[91,164268,12414],{"class":101},[91,164270,179],{"class":150},[91,164272,12414],{"class":101},[91,164274,173],{"class":150},[91,164276,12414],{"class":101},[91,164278,173],{"class":150},[91,164280,12414],{"class":101},[91,164282,395],{"class":150},[91,164284,1543],{"class":101},[91,164286,164287,164289],{"class":93,"line":11},[91,164288,30390],{"class":150},[91,164290,164291],{"class":101},"(nums)\n",[38,164293,164294],{},"创建空集合：",[83,164296,164298],{"className":30353,"code":164297,"language":30355,"meta":10,"style":10},"s = set()\n",[88,164299,164300],{"__ignoreMap":10},[91,164301,164302,164304,164306,164308],{"class":93,"line":94},[91,164303,10558],{"class":101},[91,164305,147],{"class":97},[91,164307,119697],{"class":150},[91,164309,1954],{"class":101},[38,164311,9004,164312,164314],{},[88,164313,32434],{}," 是空字典，不是空集合。",[38,164316,164317],{},"集合常用操作：",[83,164319,164321],{"className":30353,"code":164320,"language":30355,"meta":10,"style":10},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[88,164322,164323,164343,164347,164356,164365,164374],{"__ignoreMap":10},[91,164324,164325,164327,164329,164331,164333,164335,164337,164339,164341],{"class":93,"line":94},[91,164326,10558],{"class":101},[91,164328,147],{"class":97},[91,164330,4426],{"class":101},[91,164332,319],{"class":150},[91,164334,12414],{"class":101},[91,164336,179],{"class":150},[91,164338,12414],{"class":101},[91,164340,173],{"class":150},[91,164342,1543],{"class":101},[91,164344,164345],{"class":93,"line":11},[91,164346,2378],{"emptyLinePlaceholder":17},[91,164348,164349,164352,164354],{"class":93,"line":1157},[91,164350,164351],{"class":101},"s.add(",[91,164353,395],{"class":150},[91,164355,108],{"class":101},[91,164357,164358,164361,164363],{"class":93,"line":1172},[91,164359,164360],{"class":101},"s.remove(",[91,164362,179],{"class":150},[91,164364,108],{"class":101},[91,164366,164367,164370,164372],{"class":93,"line":1178},[91,164368,164369],{"class":101},"s.discard(",[91,164371,548],{"class":150},[91,164373,108],{"class":101},[91,164375,164376,164378,164380,164382],{"class":93,"line":1192},[91,164377,30390],{"class":150},[91,164379,102],{"class":101},[91,164381,7337],{"class":150},[91,164383,164384],{"class":101},"(s))\n",[38,164386,164387],{},"交并差：",[83,164389,164391],{"className":30353,"code":164390,"language":30355,"meta":10,"style":10},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[88,164392,164393,164413,164433,164437,164452,164465],{"__ignoreMap":10},[91,164394,164395,164397,164399,164401,164403,164405,164407,164409,164411],{"class":93,"line":94},[91,164396,10898],{"class":101},[91,164398,147],{"class":97},[91,164400,4426],{"class":101},[91,164402,319],{"class":150},[91,164404,12414],{"class":101},[91,164406,179],{"class":150},[91,164408,12414],{"class":101},[91,164410,173],{"class":150},[91,164412,1543],{"class":101},[91,164414,164415,164417,164419,164421,164423,164425,164427,164429,164431],{"class":93,"line":11},[91,164416,10924],{"class":101},[91,164418,147],{"class":97},[91,164420,4426],{"class":101},[91,164422,173],{"class":150},[91,164424,12414],{"class":101},[91,164426,395],{"class":150},[91,164428,12414],{"class":101},[91,164430,421],{"class":150},[91,164432,1543],{"class":101},[91,164434,164435],{"class":93,"line":1157},[91,164436,2378],{"emptyLinePlaceholder":17},[91,164438,164439,164441,164444,164446,164449],{"class":93,"line":1172},[91,164440,30390],{"class":150},[91,164442,164443],{"class":101},"(a ",[91,164445,455],{"class":97},[91,164447,164448],{"class":101}," b)  ",[91,164450,164451],{"class":160},"# 交集\n",[91,164453,164454,164456,164458,164460,164462],{"class":93,"line":1178},[91,164455,30390],{"class":150},[91,164457,164443],{"class":101},[91,164459,1023],{"class":97},[91,164461,164448],{"class":101},[91,164463,164464],{"class":160},"# 并集\n",[91,164466,164467,164469,164471,164473,164475],{"class":93,"line":1192},[91,164468,30390],{"class":150},[91,164470,164443],{"class":101},[91,164472,634],{"class":97},[91,164474,164448],{"class":101},[91,164476,164477],{"class":160},"# 差集\n",[33,164479,164481],{"id":164480},"_610-字典dict","6.10 字典dict",[38,164483,164484],{},"字典通过 key-value 保存数据。",[83,164486,164488],{"className":30353,"code":164487,"language":30355,"meta":10,"style":10},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[88,164489,164490,164498,164508,164519,164529],{"__ignoreMap":10},[91,164491,164492,164494,164496],{"class":93,"line":94},[91,164493,149456],{"class":101},[91,164495,147],{"class":97},[91,164497,15551],{"class":101},[91,164499,164500,164502,164504,164506],{"class":93,"line":11},[91,164501,146995],{"class":206},[91,164503,51412],{"class":101},[91,164505,149863],{"class":206},[91,164507,31441],{"class":101},[91,164509,164510,164513,164515,164517],{"class":93,"line":1157},[91,164511,164512],{"class":206},"    \"age\"",[91,164514,51412],{"class":101},[91,164516,752],{"class":150},[91,164518,31441],{"class":101},[91,164520,164521,164524,164526],{"class":93,"line":1172},[91,164522,164523],{"class":206},"    \"score\"",[91,164525,51412],{"class":101},[91,164527,164528],{"class":150},"95\n",[91,164530,164531],{"class":93,"line":1178},[91,164532,1543],{"class":101},[38,164534,164535],{},"获取值：",[83,164537,164539],{"className":30353,"code":164538,"language":30355,"meta":10,"style":10},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[88,164540,164541,164552],{"__ignoreMap":10},[91,164542,164543,164545,164548,164550],{"class":93,"line":94},[91,164544,30390],{"class":150},[91,164546,164547],{"class":101},"(student[",[91,164549,62654],{"class":206},[91,164551,4635],{"class":101},[91,164553,164554,164556,164559,164561],{"class":93,"line":11},[91,164555,30390],{"class":150},[91,164557,164558],{"class":101},"(student.get(",[91,164560,62654],{"class":206},[91,164562,30472],{"class":101},[38,164564,15367],{},[83,164566,164568],{"className":30353,"code":164567,"language":30355,"meta":10,"style":10},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[88,164569,164570,164583],{"__ignoreMap":10},[91,164571,164572,164574,164577,164580],{"class":93,"line":94},[91,164573,152834],{"class":101},[91,164575,164576],{"class":206},"\"address\"",[91,164578,164579],{"class":101},"]     ",[91,164581,164582],{"class":160},"# key不存在会报错\n",[91,164584,164585,164588,164590,164592],{"class":93,"line":11},[91,164586,164587],{"class":101},"student.get(",[91,164589,164576],{"class":206},[91,164591,13693],{"class":101},[91,164593,164594],{"class":160},"# key不存在返回None\n",[38,164596,164597],{},"设置默认值：",[83,164599,164601],{"className":30353,"code":164600,"language":30355,"meta":10,"style":10},"print(student.get(\"address\", \"未知\"))\n",[88,164602,164603],{"__ignoreMap":10},[91,164604,164605,164607,164609,164611,164613,164616],{"class":93,"line":94},[91,164606,30390],{"class":150},[91,164608,164558],{"class":101},[91,164610,164576],{"class":206},[91,164612,12414],{"class":101},[91,164614,164615],{"class":206},"\"未知\"",[91,164617,30472],{"class":101},[38,164619,164620],{},"新增和修改：",[83,164622,164624],{"className":30353,"code":164623,"language":30355,"meta":10,"style":10},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[88,164625,164626,164639],{"__ignoreMap":10},[91,164627,164628,164630,164632,164634,164636],{"class":93,"line":94},[91,164629,152834],{"class":101},[91,164631,69099],{"class":206},[91,164633,4421],{"class":101},[91,164635,147],{"class":97},[91,164637,164638],{"class":150}," 19\n",[91,164640,164641,164643,164645,164647,164649],{"class":93,"line":11},[91,164642,152834],{"class":101},[91,164644,164576],{"class":206},[91,164646,4421],{"class":101},[91,164648,147],{"class":97},[91,164650,164651],{"class":206}," \"北京\"\n",[38,164653,164654],{},"删除：",[83,164656,164658],{"className":30353,"code":164657,"language":30355,"meta":10,"style":10},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[88,164659,164660,164673,164683],{"__ignoreMap":10},[91,164661,164662,164664,164666,164669,164671],{"class":93,"line":94},[91,164663,155333],{"class":101},[91,164665,147],{"class":97},[91,164667,164668],{"class":101}," student.pop(",[91,164670,151447],{"class":206},[91,164672,108],{"class":101},[91,164674,164675,164677,164679,164681],{"class":93,"line":11},[91,164676,163358],{"class":97},[91,164678,152124],{"class":101},[91,164680,69099],{"class":206},[91,164682,33221],{"class":101},[91,164684,164685],{"class":93,"line":1157},[91,164686,164687],{"class":101},"student.clear()\n",[33,164689,164691],{"id":164690},"_611-字典遍历","6.11 字典遍历",[38,164693,164694],{},"遍历 key：",[83,164696,164698],{"className":30353,"code":164697,"language":30355,"meta":10,"style":10},"for key in student:\n    print(key, student[key])\n",[88,164699,164700,164712],{"__ignoreMap":10},[91,164701,164702,164704,164707,164709],{"class":93,"line":94},[91,164703,3003],{"class":97},[91,164705,164706],{"class":101}," key ",[91,164708,26018],{"class":97},[91,164710,164711],{"class":101}," student:\n",[91,164713,164714,164716],{"class":93,"line":11},[91,164715,31274],{"class":150},[91,164717,164718],{"class":101},"(key, student[key])\n",[38,164720,164721],{},"遍历 value：",[83,164723,164725],{"className":30353,"code":164724,"language":30355,"meta":10,"style":10},"for value in student.values():\n    print(value)\n",[88,164726,164727,164739],{"__ignoreMap":10},[91,164728,164729,164731,164734,164736],{"class":93,"line":94},[91,164730,3003],{"class":97},[91,164732,164733],{"class":101}," value ",[91,164735,26018],{"class":97},[91,164737,164738],{"class":101}," student.values():\n",[91,164740,164741,164743],{"class":93,"line":11},[91,164742,31274],{"class":150},[91,164744,164745],{"class":101},"(value)\n",[38,164747,164748],{},"遍历 key 和 value：",[83,164750,164752],{"className":30353,"code":164751,"language":30355,"meta":10,"style":10},"for key, value in student.items():\n    print(key, value)\n",[88,164753,164754,164766],{"__ignoreMap":10},[91,164755,164756,164758,164761,164763],{"class":93,"line":94},[91,164757,3003],{"class":97},[91,164759,164760],{"class":101}," key, value ",[91,164762,26018],{"class":97},[91,164764,164765],{"class":101}," student.items():\n",[91,164767,164768,164770],{"class":93,"line":11},[91,164769,31274],{"class":150},[91,164771,164772],{"class":101},"(key, value)\n",[33,164774,164776],{"id":164775},"_612-嵌套容器","6.12 嵌套容器",[38,164778,164779],{},"列表中保存字典，是项目中最常见的结构之一。",[83,164781,164783],{"className":30353,"code":164782,"language":30355,"meta":10,"style":10},"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",[88,164784,164785,164793,164821,164849,164877,164881,164885,164895],{"__ignoreMap":10},[91,164786,164787,164789,164791],{"class":93,"line":94},[91,164788,159691],{"class":101},[91,164790,147],{"class":97},[91,164792,55422],{"class":101},[91,164794,164795,164797,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819],{"class":93,"line":11},[91,164796,148360],{"class":101},[91,164798,62654],{"class":206},[91,164800,51412],{"class":101},[91,164802,149863],{"class":206},[91,164804,12414],{"class":101},[91,164806,69099],{"class":206},[91,164808,51412],{"class":101},[91,164810,752],{"class":150},[91,164812,12414],{"class":101},[91,164814,151447],{"class":206},[91,164816,51412],{"class":101},[91,164818,1091],{"class":150},[91,164820,4908],{"class":101},[91,164822,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847],{"class":93,"line":1157},[91,164824,148360],{"class":101},[91,164826,62654],{"class":206},[91,164828,51412],{"class":101},[91,164830,150911],{"class":206},[91,164832,12414],{"class":101},[91,164834,69099],{"class":206},[91,164836,51412],{"class":101},[91,164838,727],{"class":150},[91,164840,12414],{"class":101},[91,164842,151447],{"class":206},[91,164844,51412],{"class":101},[91,164846,913],{"class":150},[91,164848,4908],{"class":101},[91,164850,164851,164853,164855,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875],{"class":93,"line":1172},[91,164852,148360],{"class":101},[91,164854,62654],{"class":206},[91,164856,51412],{"class":101},[91,164858,159706],{"class":206},[91,164860,12414],{"class":101},[91,164862,69099],{"class":206},[91,164864,51412],{"class":101},[91,164866,777],{"class":150},[91,164868,12414],{"class":101},[91,164870,151447],{"class":206},[91,164872,51412],{"class":101},[91,164874,508],{"class":150},[91,164876,4908],{"class":101},[91,164878,164879],{"class":93,"line":1178},[91,164880,33221],{"class":101},[91,164882,164883],{"class":93,"line":1192},[91,164884,2378],{"emptyLinePlaceholder":17},[91,164886,164887,164889,164891,164893],{"class":93,"line":1198},[91,164888,3003],{"class":97},[91,164890,152112],{"class":101},[91,164892,26018],{"class":97},[91,164894,152117],{"class":101},[91,164896,164897,164899,164901,164903,164906,164908],{"class":93,"line":1289},[91,164898,31274],{"class":150},[91,164900,164547],{"class":101},[91,164902,62654],{"class":206},[91,164904,164905],{"class":101},"], student[",[91,164907,151447],{"class":206},[91,164909,4635],{"class":101},[38,164911,164912],{},"统计平均分：",[83,164914,164916],{"className":30353,"code":164915,"language":30355,"meta":10,"style":10},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[88,164917,164918,164926,164930,164940,164952,164956,164971],{"__ignoreMap":10},[91,164919,164920,164922,164924],{"class":93,"line":94},[91,164921,157235],{"class":101},[91,164923,147],{"class":97},[91,164925,47308],{"class":150},[91,164927,164928],{"class":93,"line":11},[91,164929,2378],{"emptyLinePlaceholder":17},[91,164931,164932,164934,164936,164938],{"class":93,"line":1157},[91,164933,3003],{"class":97},[91,164935,152112],{"class":101},[91,164937,26018],{"class":97},[91,164939,152117],{"class":101},[91,164941,164942,164944,164946,164948,164950],{"class":93,"line":1172},[91,164943,159282],{"class":101},[91,164945,9456],{"class":97},[91,164947,152124],{"class":101},[91,164949,151447],{"class":206},[91,164951,33221],{"class":101},[91,164953,164954],{"class":93,"line":1178},[91,164955,2378],{"emptyLinePlaceholder":17},[91,164957,164958,164960,164962,164964,164966,164968],{"class":93,"line":1192},[91,164959,163749],{"class":101},[91,164961,147],{"class":97},[91,164963,163754],{"class":101},[91,164965,686],{"class":97},[91,164967,7310],{"class":150},[91,164969,164970],{"class":101},"(students)\n",[91,164972,164973,164975,164977,164979,164981,164983,164985,164987,164989,164991],{"class":93,"line":1198},[91,164974,30390],{"class":150},[91,164976,102],{"class":101},[91,164978,154],{"class":97},[91,164980,163772],{"class":206},[91,164982,998],{"class":150},[91,164984,163777],{"class":101},[91,164986,157134],{"class":97},[91,164988,1048],{"class":150},[91,164990,353],{"class":206},[91,164992,108],{"class":101},[38,164994,164995],{},"查找学生：",[83,164997,164999],{"className":30353,"code":164998,"language":30355,"meta":10,"style":10},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[88,165000,165001,165016,165020,165030,165044,165050,165054,165060],{"__ignoreMap":10},[91,165002,165003,165005,165007,165009,165011,165014],{"class":93,"line":94},[91,165004,111553],{"class":101},[91,165006,147],{"class":97},[91,165008,60580],{"class":150},[91,165010,102],{"class":101},[91,165012,165013],{"class":206},"\"请输入学生姓名:\"",[91,165015,108],{"class":101},[91,165017,165018],{"class":93,"line":11},[91,165019,2378],{"emptyLinePlaceholder":17},[91,165021,165022,165024,165026,165028],{"class":93,"line":1157},[91,165023,3003],{"class":97},[91,165025,152112],{"class":101},[91,165027,26018],{"class":97},[91,165029,152117],{"class":101},[91,165031,165032,165034,165036,165038,165040,165042],{"class":93,"line":1172},[91,165033,3079],{"class":97},[91,165035,152124],{"class":101},[91,165037,62654],{"class":206},[91,165039,4421],{"class":101},[91,165041,2927],{"class":97},[91,165043,160407],{"class":101},[91,165045,165046,165048],{"class":93,"line":1178},[91,165047,32426],{"class":150},[91,165049,150017],{"class":101},[91,165051,165052],{"class":93,"line":1192},[91,165053,31602],{"class":97},[91,165055,165056,165058],{"class":93,"line":1198},[91,165057,1679],{"class":97},[91,165059,3717],{"class":101},[91,165061,165062,165064,165066,165069],{"class":93,"line":1289},[91,165063,31274],{"class":150},[91,165065,102],{"class":101},[91,165067,165068],{"class":206},"\"没有找到\"",[91,165070,108],{"class":101},[33,165072,165074],{"id":165073},"_613-容器通用操作","6.13 容器通用操作",[38,165076,165077],{},"长度：",[83,165079,165081],{"className":30353,"code":165080,"language":30355,"meta":10,"style":10},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[88,165082,165083,165102,165112],{"__ignoreMap":10},[91,165084,165085,165087,165090,165092,165094,165096,165098,165100],{"class":93,"line":94},[91,165086,7337],{"class":150},[91,165088,165089],{"class":101},"([",[91,165091,319],{"class":150},[91,165093,12414],{"class":101},[91,165095,179],{"class":150},[91,165097,12414],{"class":101},[91,165099,173],{"class":150},[91,165101,4635],{"class":101},[91,165103,165104,165106,165108,165110],{"class":93,"line":11},[91,165105,7337],{"class":150},[91,165107,102],{"class":101},[91,165109,155855],{"class":206},[91,165111,108],{"class":101},[91,165113,165114,165116,165119,165121,165123,165125],{"class":93,"line":1157},[91,165115,7337],{"class":150},[91,165117,165118],{"class":101},"({",[91,165120,62654],{"class":206},[91,165122,51412],{"class":101},[91,165124,149863],{"class":206},[91,165126,165127],{"class":101},"})\n",[38,165129,165130],{},"最大最小：",[83,165132,165134],{"className":30353,"code":165133,"language":30355,"meta":10,"style":10},"max([1, 2, 3])\nmin([1, 2, 3])\n",[88,165135,165136,165154],{"__ignoreMap":10},[91,165137,165138,165140,165142,165144,165146,165148,165150,165152],{"class":93,"line":94},[91,165139,5994],{"class":150},[91,165141,165089],{"class":101},[91,165143,319],{"class":150},[91,165145,12414],{"class":101},[91,165147,179],{"class":150},[91,165149,12414],{"class":101},[91,165151,173],{"class":150},[91,165153,4635],{"class":101},[91,165155,165156,165159,165161,165163,165165,165167,165169,165171],{"class":93,"line":11},[91,165157,165158],{"class":150},"min",[91,165160,165089],{"class":101},[91,165162,319],{"class":150},[91,165164,12414],{"class":101},[91,165166,179],{"class":150},[91,165168,12414],{"class":101},[91,165170,173],{"class":150},[91,165172,4635],{"class":101},[38,165174,165175],{},"求和：",[83,165177,165179],{"className":30353,"code":165178,"language":30355,"meta":10,"style":10},"sum([1, 2, 3])\n",[88,165180,165181],{"__ignoreMap":10},[91,165182,165183,165186,165188,165190,165192,165194,165196,165198],{"class":93,"line":94},[91,165184,165185],{"class":150},"sum",[91,165187,165089],{"class":101},[91,165189,319],{"class":150},[91,165191,12414],{"class":101},[91,165193,179],{"class":150},[91,165195,12414],{"class":101},[91,165197,173],{"class":150},[91,165199,4635],{"class":101},[38,165201,163446],{},[83,165203,165205],{"className":30353,"code":165204,"language":30355,"meta":10,"style":10},"sorted([3, 1, 2])\n",[88,165206,165207],{"__ignoreMap":10},[91,165208,165209,165212,165214,165216,165218,165220,165222,165224],{"class":93,"line":94},[91,165210,165211],{"class":150},"sorted",[91,165213,165089],{"class":101},[91,165215,173],{"class":150},[91,165217,12414],{"class":101},[91,165219,319],{"class":150},[91,165221,12414],{"class":101},[91,165223,179],{"class":150},[91,165225,4635],{"class":101},[38,165227,165228],{},"类型转换：",[83,165230,165232],{"className":30353,"code":165231,"language":30355,"meta":10,"style":10},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[88,165233,165234,165244,165262],{"__ignoreMap":10},[91,165235,165236,165238,165240,165242],{"class":93,"line":94},[91,165237,154045],{"class":150},[91,165239,102],{"class":101},[91,165241,155855],{"class":206},[91,165243,108],{"class":101},[91,165245,165246,165248,165250,165252,165254,165256,165258,165260],{"class":93,"line":11},[91,165247,155240],{"class":150},[91,165249,165089],{"class":101},[91,165251,319],{"class":150},[91,165253,12414],{"class":101},[91,165255,179],{"class":150},[91,165257,12414],{"class":101},[91,165259,173],{"class":150},[91,165261,4635],{"class":101},[91,165263,165264,165266,165268,165270,165272,165274,165276,165278,165280,165282],{"class":93,"line":1157},[91,165265,155265],{"class":150},[91,165267,165089],{"class":101},[91,165269,319],{"class":150},[91,165271,12414],{"class":101},[91,165273,319],{"class":150},[91,165275,12414],{"class":101},[91,165277,179],{"class":150},[91,165279,12414],{"class":101},[91,165281,173],{"class":150},[91,165283,4635],{"class":101},[38,165285,165286],{},"成员判断：",[83,165288,165290],{"className":30353,"code":165289,"language":30355,"meta":10,"style":10},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[88,165291,165292,165309,165333],{"__ignoreMap":10},[91,165293,165294,165296,165298,165301,165304,165307],{"class":93,"line":94},[91,165295,30390],{"class":150},[91,165297,102],{"class":101},[91,165299,165300],{"class":206},"\"a\"",[91,165302,165303],{"class":97}," in",[91,165305,165306],{"class":206}," \"abc\"",[91,165308,108],{"class":101},[91,165310,165311,165313,165315,165317,165319,165321,165323,165325,165327,165329,165331],{"class":93,"line":11},[91,165312,30390],{"class":150},[91,165314,102],{"class":101},[91,165316,319],{"class":150},[91,165318,165303],{"class":97},[91,165320,52201],{"class":101},[91,165322,319],{"class":150},[91,165324,12414],{"class":101},[91,165326,179],{"class":150},[91,165328,12414],{"class":101},[91,165330,173],{"class":150},[91,165332,4635],{"class":101},[91,165334,165335,165337,165339,165341,165343,165345,165347,165349,165351],{"class":93,"line":1157},[91,165336,30390],{"class":150},[91,165338,102],{"class":101},[91,165340,62654],{"class":206},[91,165342,165303],{"class":97},[91,165344,4426],{"class":101},[91,165346,62654],{"class":206},[91,165348,51412],{"class":101},[91,165350,149863],{"class":206},[91,165352,165127],{"class":101},[33,165354,165356],{"id":165355},"_614-推导式","6.14 推导式",[38,165358,165359],{},"推导式用于快速生成容器。",[38,165361,165362],{},"列表推导式：",[83,165364,165366],{"className":30353,"code":165365,"language":30355,"meta":10,"style":10},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[88,165367,165368,165395],{"__ignoreMap":10},[91,165369,165370,165372,165374,165377,165379,165381,165383,165385,165387,165389,165391,165393],{"class":93,"line":94},[91,165371,164075],{"class":101},[91,165373,147],{"class":97},[91,165375,165376],{"class":101}," [i ",[91,165378,3003],{"class":97},[91,165380,9417],{"class":101},[91,165382,26018],{"class":97},[91,165384,32418],{"class":150},[91,165386,102],{"class":101},[91,165388,319],{"class":150},[91,165390,12414],{"class":101},[91,165392,446],{"class":150},[91,165394,97275],{"class":101},[91,165396,165397,165399],{"class":93,"line":11},[91,165398,30390],{"class":150},[91,165400,164291],{"class":101},[38,165402,165403],{},"带条件：",[83,165405,165407],{"className":30353,"code":165406,"language":30355,"meta":10,"style":10},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[88,165408,165409,165450],{"__ignoreMap":10},[91,165410,165411,165414,165416,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448],{"class":93,"line":94},[91,165412,165413],{"class":101},"even_nums ",[91,165415,147],{"class":97},[91,165417,165376],{"class":101},[91,165419,3003],{"class":97},[91,165421,9417],{"class":101},[91,165423,26018],{"class":97},[91,165425,32418],{"class":150},[91,165427,102],{"class":101},[91,165429,319],{"class":150},[91,165431,12414],{"class":101},[91,165433,439],{"class":150},[91,165435,13693],{"class":101},[91,165437,1509],{"class":97},[91,165439,9417],{"class":101},[91,165441,430],{"class":97},[91,165443,14734],{"class":150},[91,165445,101534],{"class":97},[91,165447,4071],{"class":150},[91,165449,33221],{"class":101},[91,165451,165452,165454],{"class":93,"line":11},[91,165453,30390],{"class":150},[91,165455,165456],{"class":101},"(even_nums)\n",[38,165458,165459],{},"字典推导式：",[83,165461,165463],{"className":30353,"code":165462,"language":30355,"meta":10,"style":10},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[88,165464,165465,165499],{"__ignoreMap":10},[91,165466,165467,165470,165472,165475,165477,165479,165482,165484,165486,165488,165490,165492,165494,165496],{"class":93,"line":94},[91,165468,165469],{"class":101},"squares ",[91,165471,147],{"class":97},[91,165473,165474],{"class":101}," {i: i ",[91,165476,10640],{"class":97},[91,165478,14734],{"class":150},[91,165480,165481],{"class":97}," for",[91,165483,9417],{"class":101},[91,165485,26018],{"class":97},[91,165487,32418],{"class":150},[91,165489,102],{"class":101},[91,165491,319],{"class":150},[91,165493,12414],{"class":101},[91,165495,446],{"class":150},[91,165497,165498],{"class":101},")}\n",[91,165500,165501,165503],{"class":93,"line":11},[91,165502,30390],{"class":150},[91,165504,165505],{"class":101},"(squares)\n",[38,165507,165508],{},"集合推导式：",[83,165510,165512],{"className":30353,"code":165511,"language":30355,"meta":10,"style":10},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[88,165513,165514,165535],{"__ignoreMap":10},[91,165515,165516,165519,165521,165524,165526,165528,165530,165533],{"class":93,"line":94},[91,165517,165518],{"class":101},"chars ",[91,165520,147],{"class":97},[91,165522,165523],{"class":101}," {ch ",[91,165525,3003],{"class":97},[91,165527,159667],{"class":101},[91,165529,26018],{"class":97},[91,165531,165532],{"class":206}," \"hello\"",[91,165534,1543],{"class":101},[91,165536,165537,165539],{"class":93,"line":11},[91,165538,30390],{"class":150},[91,165540,165541],{"class":101},"(chars)\n",[38,165543,165544],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[33,165546,165548],{"id":165547},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[83,165550,165552],{"className":30353,"code":165551,"language":30355,"meta":10,"style":10},"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",[88,165553,165554,165562,165582,165602,165622,165642,165646,165650,165658,165672,165681,165685,165695,165707,165711,165731,165740,165744,165760,165765,165769,165783,165787,165809,165845],{"__ignoreMap":10},[91,165555,165556,165558,165560],{"class":93,"line":94},[91,165557,159691],{"class":101},[91,165559,147],{"class":97},[91,165561,55422],{"class":101},[91,165563,165564,165566,165568,165570,165572,165574,165576,165578,165580],{"class":93,"line":11},[91,165565,148360],{"class":101},[91,165567,62654],{"class":206},[91,165569,51412],{"class":101},[91,165571,149863],{"class":206},[91,165573,12414],{"class":101},[91,165575,151447],{"class":206},[91,165577,51412],{"class":101},[91,165579,1091],{"class":150},[91,165581,4908],{"class":101},[91,165583,165584,165586,165588,165590,165592,165594,165596,165598,165600],{"class":93,"line":1157},[91,165585,148360],{"class":101},[91,165587,62654],{"class":206},[91,165589,51412],{"class":101},[91,165591,150911],{"class":206},[91,165593,12414],{"class":101},[91,165595,151447],{"class":206},[91,165597,51412],{"class":101},[91,165599,913],{"class":150},[91,165601,4908],{"class":101},[91,165603,165604,165606,165608,165610,165612,165614,165616,165618,165620],{"class":93,"line":1172},[91,165605,148360],{"class":101},[91,165607,62654],{"class":206},[91,165609,51412],{"class":101},[91,165611,159706],{"class":206},[91,165613,12414],{"class":101},[91,165615,151447],{"class":206},[91,165617,51412],{"class":101},[91,165619,508],{"class":150},[91,165621,4908],{"class":101},[91,165623,165624,165626,165628,165630,165632,165634,165636,165638,165640],{"class":93,"line":1178},[91,165625,148360],{"class":101},[91,165627,62654],{"class":206},[91,165629,51412],{"class":101},[91,165631,163285],{"class":206},[91,165633,12414],{"class":101},[91,165635,151447],{"class":206},[91,165637,51412],{"class":101},[91,165639,984],{"class":150},[91,165641,4908],{"class":101},[91,165643,165644],{"class":93,"line":1192},[91,165645,33221],{"class":101},[91,165647,165648],{"class":93,"line":1198},[91,165649,2378],{"emptyLinePlaceholder":17},[91,165651,165652,165654,165656],{"class":93,"line":1289},[91,165653,157235],{"class":101},[91,165655,147],{"class":97},[91,165657,47308],{"class":150},[91,165659,165660,165663,165665,165668,165670],{"class":93,"line":1295},[91,165661,165662],{"class":101},"max_student ",[91,165664,147],{"class":97},[91,165666,165667],{"class":101}," students[",[91,165669,293],{"class":150},[91,165671,33221],{"class":101},[91,165673,165674,165677,165679],{"class":93,"line":1307},[91,165675,165676],{"class":101},"passed ",[91,165678,147],{"class":97},[91,165680,51813],{"class":101},[91,165682,165683],{"class":93,"line":1590},[91,165684,2378],{"emptyLinePlaceholder":17},[91,165686,165687,165689,165691,165693],{"class":93,"line":1595},[91,165688,3003],{"class":97},[91,165690,152112],{"class":101},[91,165692,26018],{"class":97},[91,165694,152117],{"class":101},[91,165696,165697,165699,165701,165703,165705],{"class":93,"line":1601},[91,165698,159282],{"class":101},[91,165700,9456],{"class":97},[91,165702,152124],{"class":101},[91,165704,151447],{"class":206},[91,165706,33221],{"class":101},[91,165708,165709],{"class":93,"line":1606},[91,165710,2378],{"emptyLinePlaceholder":17},[91,165712,165713,165715,165717,165719,165721,165723,165726,165728],{"class":93,"line":1620},[91,165714,3079],{"class":97},[91,165716,152124],{"class":101},[91,165718,151447],{"class":206},[91,165720,4421],{"class":101},[91,165722,1062],{"class":97},[91,165724,165725],{"class":101}," max_student[",[91,165727,151447],{"class":206},[91,165729,165730],{"class":101},"]:\n",[91,165732,165733,165736,165738],{"class":93,"line":1625},[91,165734,165735],{"class":101},"        max_student ",[91,165737,147],{"class":97},[91,165739,152140],{"class":101},[91,165741,165742],{"class":93,"line":1631},[91,165743,2378],{"emptyLinePlaceholder":17},[91,165745,165746,165748,165750,165752,165754,165756,165758],{"class":93,"line":1652},[91,165747,3079],{"class":97},[91,165749,152124],{"class":101},[91,165751,151447],{"class":206},[91,165753,4421],{"class":101},[91,165755,1688],{"class":97},[91,165757,157812],{"class":150},[91,165759,3717],{"class":101},[91,165761,165762],{"class":93,"line":1657},[91,165763,165764],{"class":101},"        passed.append(student)\n",[91,165766,165767],{"class":93,"line":1671},[91,165768,2378],{"emptyLinePlaceholder":17},[91,165770,165771,165773,165775,165777,165779,165781],{"class":93,"line":1676},[91,165772,163749],{"class":101},[91,165774,147],{"class":97},[91,165776,163754],{"class":101},[91,165778,686],{"class":97},[91,165780,7310],{"class":150},[91,165782,164970],{"class":101},[91,165784,165785],{"class":93,"line":1705},[91,165786,2378],{"emptyLinePlaceholder":17},[91,165788,165789,165791,165793,165795,165797,165799,165801,165803,165805,165807],{"class":93,"line":1710},[91,165790,30390],{"class":150},[91,165792,102],{"class":101},[91,165794,154],{"class":97},[91,165796,163772],{"class":206},[91,165798,998],{"class":150},[91,165800,163777],{"class":101},[91,165802,157134],{"class":97},[91,165804,1048],{"class":150},[91,165806,353],{"class":206},[91,165808,108],{"class":101},[91,165810,165811,165813,165815,165817,165820,165822,165825,165827,165829,165831,165833,165835,165837,165839,165841,165843],{"class":93,"line":1727},[91,165812,30390],{"class":150},[91,165814,102],{"class":101},[91,165816,154],{"class":97},[91,165818,165819],{"class":206},"\"最高分学生:",[91,165821,998],{"class":150},[91,165823,165824],{"class":101},"max_student[",[91,165826,152857],{"class":206},[91,165828,1042],{"class":101},[91,165830,1048],{"class":150},[91,165832,4426],{"class":150},[91,165834,165824],{"class":101},[91,165836,152895],{"class":206},[91,165838,1042],{"class":101},[91,165840,1048],{"class":150},[91,165842,353],{"class":206},[91,165844,108],{"class":101},[91,165846,165847,165849,165851,165853,165856,165859,165862,165864,165866],{"class":93,"line":1732},[91,165848,30390],{"class":150},[91,165850,102],{"class":101},[91,165852,154],{"class":97},[91,165854,165855],{"class":206},"\"及格人数:",[91,165857,165858],{"class":150},"{len",[91,165860,165861],{"class":101},"(passed)",[91,165863,1048],{"class":150},[91,165865,353],{"class":206},[91,165867,108],{"class":101},[33,165869,165871],{"id":165870},"_616-易错点","6.16 易错点",[46,165873,165874,165877,165880,165883,165889,165898],{},[49,165875,165876],{},"列表可变，元组和字符串不可变。",[49,165878,165879],{},"切片结束位置不包含。",[49,165881,165882],{},"字典通过 key 取值，不是通过索引。",[49,165884,165885,165886,28360],{},"空集合要用 ",[88,165887,165888],{},"set()",[49,165890,104341,165891,165894,165895,28360],{},[88,165892,165893],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[88,165896,165897],{},"get()",[49,165899,165900],{},"嵌套容器要先看清楚每一层是什么类型。",[33,165902,165904],{"id":165903},"_617-本章练习","6.17 本章练习",[46,165906,165907,165910,165913,165916,165919],{},[49,165908,165909],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[49,165911,165912],{},"输入一句话，统计每个字符出现次数。",[49,165914,165915],{},"使用集合去除列表中的重复元素。",[49,165917,165918],{},"使用字典保存一个学生的信息，并实现修改成绩。",[49,165920,165921],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5105,165923,165924],{},"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":10,"searchDepth":11,"depth":11,"links":165926},[165927,165928,165929,165930,165931,165932,165933,165934,165935,165936,165937,165938,165939,165940,165941,165942,165943],{"id":162907,"depth":11,"text":162908},{"id":163024,"depth":11,"text":163025},{"id":163114,"depth":11,"text":163115},{"id":163238,"depth":11,"text":163239},{"id":163601,"depth":11,"text":163602},{"id":163788,"depth":11,"text":163789},{"id":163907,"depth":11,"text":163908},{"id":164049,"depth":11,"text":164050},{"id":164236,"depth":11,"text":164237},{"id":164480,"depth":11,"text":164481},{"id":164690,"depth":11,"text":164691},{"id":164775,"depth":11,"text":164776},{"id":165073,"depth":11,"text":165074},{"id":165355,"depth":11,"text":165356},{"id":165547,"depth":11,"text":165548},{"id":165870,"depth":11,"text":165871},{"id":165903,"depth":11,"text":165904},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162899,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165950,"title":165951,"body":165952,"description":13,"extension":14,"meta":168124,"navigation":17,"path":168125,"seo":168126,"stem":168127,"__hash__":168128},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165953,"toc":168099},[165954,165957,165961,165964,166044,166047,166068,166071,166075,166078,166140,166143,166160,166164,166167,166212,166214,166222,166226,166229,166311,166314,166317,166342,166345,166368,166372,166375,166377,166439,166442,166444,166495,166499,166503,166509,166614,166618,166624,166695,166699,166702,166770,166773,166853,166857,166863,166899,166902,166905,167015,167021,167025,167028,167100,167103,167107,167111,167116,167178,167182,167187,167255,167259,167264,167380,167384,167387,167467,167470,167474,167477,167581,167583,167598,167601,167605,167743,167751,167755,167757,167768,167770,168028,168032,168064,168068,168096],[29,165955,165951],{"id":165956},"_7-函数进阶",[33,165958,165960],{"id":165959},"_71-多返回值","7.1 多返回值",[38,165962,165963],{},"Python 函数可以返回多个值，本质上返回的是元组。",[83,165965,165967],{"className":30353,"code":165966,"language":30355,"meta":10,"style":10},"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",[88,165968,165969,165978,165986,165994,166003,166010,166014,166018,166027,166033],{"__ignoreMap":10},[91,165970,165971,165973,165976],{"class":93,"line":94},[91,165972,31922],{"class":97},[91,165974,165975],{"class":1941}," get_info",[91,165977,31928],{"class":101},[91,165979,165980,165982,165984],{"class":93,"line":11},[91,165981,152345],{"class":101},[91,165983,147],{"class":97},[91,165985,149328],{"class":206},[91,165987,165988,165990,165992],{"class":93,"line":1157},[91,165989,152361],{"class":101},[91,165991,147],{"class":97},[91,165993,146526],{"class":150},[91,165995,165996,165998,166000],{"class":93,"line":1172},[91,165997,152376],{"class":101},[91,165999,147],{"class":97},[91,166001,166002],{"class":150}," 95\n",[91,166004,166005,166007],{"class":93,"line":1178},[91,166006,4068],{"class":97},[91,166008,166009],{"class":101}," name, age, score\n",[91,166011,166012],{"class":93,"line":1192},[91,166013,2378],{"emptyLinePlaceholder":17},[91,166015,166016],{"class":93,"line":1198},[91,166017,2378],{"emptyLinePlaceholder":17},[91,166019,166020,166022,166024],{"class":93,"line":1289},[91,166021,161281],{"class":101},[91,166023,147],{"class":97},[91,166025,166026],{"class":101}," get_info()\n",[91,166028,166029,166031],{"class":93,"line":1295},[91,166030,30390],{"class":150},[91,166032,76560],{"class":101},[91,166034,166035,166037,166039,166041],{"class":93,"line":1307},[91,166036,30390],{"class":150},[91,166038,102],{"class":101},[91,166040,103082],{"class":150},[91,166042,166043],{"class":101},"(result))\n",[38,166045,166046],{},"可以直接解包：",[83,166048,166050],{"className":30353,"code":166049,"language":30355,"meta":10,"style":10},"name, age, score = get_info()\nprint(name, age, score)\n",[88,166051,166052,166061],{"__ignoreMap":10},[91,166053,166054,166057,166059],{"class":93,"line":94},[91,166055,166056],{"class":101},"name, age, score ",[91,166058,147],{"class":97},[91,166060,166026],{"class":101},[91,166062,166063,166065],{"class":93,"line":11},[91,166064,30390],{"class":150},[91,166066,166067],{"class":101},"(name, age, score)\n",[38,166069,166070],{},"返回多个值适合函数需要同时给出多个结果时使用。",[33,166072,166074],{"id":166073},"_72-位置参数","7.2 位置参数",[38,166076,166077],{},"位置参数按顺序传递。",[83,166079,166081],{"className":30353,"code":166080,"language":30355,"meta":10,"style":10},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[88,166082,166083,166091,166119,166123,166127],{"__ignoreMap":10},[91,166084,166085,166087,166089],{"class":93,"line":94},[91,166086,31922],{"class":97},[91,166088,149347],{"class":1941},[91,166090,149350],{"class":101},[91,166092,166093,166095,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":93,"line":11},[91,166094,31274],{"class":150},[91,166096,102],{"class":101},[91,166098,154],{"class":97},[91,166100,149361],{"class":206},[91,166102,998],{"class":150},[91,166104,79785],{"class":101},[91,166106,1048],{"class":150},[91,166108,149370],{"class":206},[91,166110,998],{"class":150},[91,166112,70196],{"class":101},[91,166114,1048],{"class":150},[91,166116,149379],{"class":206},[91,166118,108],{"class":101},[91,166120,166121],{"class":93,"line":1157},[91,166122,2378],{"emptyLinePlaceholder":17},[91,166124,166125],{"class":93,"line":1172},[91,166126,2378],{"emptyLinePlaceholder":17},[91,166128,166129,166132,166134,166136,166138],{"class":93,"line":1178},[91,166130,166131],{"class":101},"introduce(",[91,166133,149863],{"class":206},[91,166135,12414],{"class":101},[91,166137,752],{"class":150},[91,166139,108],{"class":101},[38,166141,166142],{},"顺序错了就会得到错误含义：",[83,166144,166146],{"className":30353,"code":166145,"language":30355,"meta":10,"style":10},"introduce(18, \"小明\")\n",[88,166147,166148],{"__ignoreMap":10},[91,166149,166150,166152,166154,166156,166158],{"class":93,"line":94},[91,166151,166131],{"class":101},[91,166153,752],{"class":150},[91,166155,12414],{"class":101},[91,166157,149863],{"class":206},[91,166159,108],{"class":101},[33,166161,166163],{"id":166162},"_73-关键字参数","7.3 关键字参数",[38,166165,166166],{},"关键字参数按参数名传递。",[83,166168,166170],{"className":30353,"code":166169,"language":30355,"meta":10,"style":10},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[88,166171,166172,166192],{"__ignoreMap":10},[91,166173,166174,166176,166178,166180,166182,166184,166186,166188,166190],{"class":93,"line":94},[91,166175,166131],{"class":101},[91,166177,79785],{"class":5195},[91,166179,147],{"class":97},[91,166181,149863],{"class":206},[91,166183,12414],{"class":101},[91,166185,70196],{"class":5195},[91,166187,147],{"class":97},[91,166189,752],{"class":150},[91,166191,108],{"class":101},[91,166193,166194,166196,166198,166200,166202,166204,166206,166208,166210],{"class":93,"line":11},[91,166195,166131],{"class":101},[91,166197,70196],{"class":5195},[91,166199,147],{"class":97},[91,166201,752],{"class":150},[91,166203,12414],{"class":101},[91,166205,79785],{"class":5195},[91,166207,147],{"class":97},[91,166209,149863],{"class":206},[91,166211,108],{"class":101},[38,166213,117909],{},[46,166215,166216,166219],{},[49,166217,166218],{},"顺序不容易错。",[49,166220,166221],{},"调用时可读性更强。",[33,166223,166225],{"id":166224},"_74-默认参数","7.4 默认参数",[38,166227,166228],{},"默认参数给参数设置默认值。",[83,166230,166232],{"className":30353,"code":166231,"language":30355,"meta":10,"style":10},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[88,166233,166234,166250,166280,166284,166288,166298],{"__ignoreMap":10},[91,166235,166236,166238,166240,166243,166245,166248],{"class":93,"line":94},[91,166237,31922],{"class":97},[91,166239,122068],{"class":1941},[91,166241,166242],{"class":101},"(host, port",[91,166244,147],{"class":97},[91,166246,166247],{"class":150},"3306",[91,166249,30761],{"class":101},[91,166251,166252,166254,166256,166258,166261,166263,166265,166267,166269,166271,166274,166276,166278],{"class":93,"line":11},[91,166253,31274],{"class":150},[91,166255,102],{"class":101},[91,166257,154],{"class":97},[91,166259,166260],{"class":206},"\"连接",[91,166262,998],{"class":150},[91,166264,27370],{"class":101},[91,166266,1048],{"class":150},[91,166268,961],{"class":206},[91,166270,998],{"class":150},[91,166272,166273],{"class":101},"port",[91,166275,1048],{"class":150},[91,166277,353],{"class":206},[91,166279,108],{"class":101},[91,166281,166282],{"class":93,"line":1157},[91,166283,2378],{"emptyLinePlaceholder":17},[91,166285,166286],{"class":93,"line":1172},[91,166287,2378],{"emptyLinePlaceholder":17},[91,166289,166290,166293,166296],{"class":93,"line":1178},[91,166291,166292],{"class":101},"connect(",[91,166294,166295],{"class":206},"\"localhost\"",[91,166297,108],{"class":101},[91,166299,166300,166302,166304,166306,166309],{"class":93,"line":1192},[91,166301,166292],{"class":101},[91,166303,166295],{"class":206},[91,166305,12414],{"class":101},[91,166307,166308],{"class":150},"6379",[91,166310,108],{"class":101},[38,166312,166313],{},"注意：默认参数必须放在非默认参数后面。",[38,166315,166316],{},"错误：",[83,166318,166320],{"className":30353,"code":166319,"language":30355,"meta":10,"style":10},"def connect(port=3306, host):\n    pass\n",[88,166321,166322,166338],{"__ignoreMap":10},[91,166323,166324,166326,166328,166331,166333,166335],{"class":93,"line":94},[91,166325,31922],{"class":97},[91,166327,122068],{"class":1941},[91,166329,166330],{"class":101},"(port",[91,166332,147],{"class":97},[91,166334,166247],{"class":150},[91,166336,166337],{"class":101},", host):\n",[91,166339,166340],{"class":93,"line":11},[91,166341,149512],{"class":97},[38,166343,166344],{},"正确：",[83,166346,166348],{"className":30353,"code":166347,"language":30355,"meta":10,"style":10},"def connect(host, port=3306):\n    pass\n",[88,166349,166350,166364],{"__ignoreMap":10},[91,166351,166352,166354,166356,166358,166360,166362],{"class":93,"line":94},[91,166353,31922],{"class":97},[91,166355,122068],{"class":1941},[91,166357,166242],{"class":101},[91,166359,147],{"class":97},[91,166361,166247],{"class":150},[91,166363,30761],{"class":101},[91,166365,166366],{"class":93,"line":11},[91,166367,149512],{"class":97},[33,166369,166371],{"id":166370},"_75-默认参数的坑","7.5 默认参数的坑",[38,166373,166374],{},"不要使用可变对象作为默认参数。",[38,166376,157598],{},[83,166378,166380],{"className":30353,"code":166379,"language":30355,"meta":10,"style":10},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[88,166381,166382,166397,166402,166409,166413,166417,166428],{"__ignoreMap":10},[91,166383,166384,166386,166389,166392,166394],{"class":93,"line":94},[91,166385,31922],{"class":97},[91,166387,166388],{"class":1941}," add_item",[91,166390,166391],{"class":101},"(item, items",[91,166393,147],{"class":97},[91,166395,166396],{"class":101},"[]):\n",[91,166398,166399],{"class":93,"line":11},[91,166400,166401],{"class":101},"    items.append(item)\n",[91,166403,166404,166406],{"class":93,"line":1157},[91,166405,4068],{"class":97},[91,166407,166408],{"class":101}," items\n",[91,166410,166411],{"class":93,"line":1172},[91,166412,2378],{"emptyLinePlaceholder":17},[91,166414,166415],{"class":93,"line":1178},[91,166416,2378],{"emptyLinePlaceholder":17},[91,166418,166419,166421,166424,166426],{"class":93,"line":1192},[91,166420,30390],{"class":150},[91,166422,166423],{"class":101},"(add_item(",[91,166425,165300],{"class":206},[91,166427,30472],{"class":101},[91,166429,166430,166432,166434,166437],{"class":93,"line":1198},[91,166431,30390],{"class":150},[91,166433,166423],{"class":101},[91,166435,166436],{"class":206},"\"b\"",[91,166438,30472],{"class":101},[38,166440,166441],{},"第二次调用会复用第一次的列表。",[38,166443,155863],{},[83,166445,166447],{"className":30353,"code":166446,"language":30355,"meta":10,"style":10},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[88,166448,166449,166463,166476,166485,166489],{"__ignoreMap":10},[91,166450,166451,166453,166455,166457,166459,166461],{"class":93,"line":94},[91,166452,31922],{"class":97},[91,166454,166388],{"class":1941},[91,166456,166391],{"class":101},[91,166458,147],{"class":97},[91,166460,95661],{"class":150},[91,166462,30761],{"class":101},[91,166464,166465,166467,166470,166472,166474],{"class":93,"line":11},[91,166466,3079],{"class":97},[91,166468,166469],{"class":101}," items ",[91,166471,38902],{"class":97},[91,166473,38908],{"class":150},[91,166475,3717],{"class":101},[91,166477,166478,166481,166483],{"class":93,"line":1157},[91,166479,166480],{"class":101},"        items ",[91,166482,147],{"class":97},[91,166484,51813],{"class":101},[91,166486,166487],{"class":93,"line":1172},[91,166488,166401],{"class":101},[91,166490,166491,166493],{"class":93,"line":1178},[91,166492,4068],{"class":97},[91,166494,166408],{"class":101},[33,166496,166498],{"id":166497},"_76-不定长参数","7.6 不定长参数",[63,166500,166502],{"id":166501},"_761-args","7.6.1 *args",[38,166504,166505,166508],{},[88,166506,166507],{},"*args"," 接收任意数量的位置参数，得到元组。",[83,166510,166512],{"className":30353,"code":166511,"language":30355,"meta":10,"style":10},"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",[88,166513,166514,166527,166535,166546,166555,166561,166565,166569,166588],{"__ignoreMap":10},[91,166515,166516,166518,166520,166522,166524],{"class":93,"line":94},[91,166517,31922],{"class":97},[91,166519,5188],{"class":1941},[91,166521,102],{"class":101},[91,166523,557],{"class":97},[91,166525,166526],{"class":101},"args):\n",[91,166528,166529,166531,166533],{"class":93,"line":11},[91,166530,159282],{"class":101},[91,166532,147],{"class":97},[91,166534,47308],{"class":150},[91,166536,166537,166539,166541,166543],{"class":93,"line":1157},[91,166538,3179],{"class":97},[91,166540,156155],{"class":101},[91,166542,26018],{"class":97},[91,166544,166545],{"class":101}," args:\n",[91,166547,166548,166550,166552],{"class":93,"line":1172},[91,166549,159957],{"class":101},[91,166551,9456],{"class":97},[91,166553,166554],{"class":101}," num\n",[91,166556,166557,166559],{"class":93,"line":1178},[91,166558,4068],{"class":97},[91,166560,162262],{"class":101},[91,166562,166563],{"class":93,"line":1192},[91,166564,2378],{"emptyLinePlaceholder":17},[91,166566,166567],{"class":93,"line":1198},[91,166568,2378],{"emptyLinePlaceholder":17},[91,166570,166571,166573,166576,166578,166580,166582,166584,166586],{"class":93,"line":1289},[91,166572,30390],{"class":150},[91,166574,166575],{"class":101},"(add(",[91,166577,319],{"class":150},[91,166579,12414],{"class":101},[91,166581,179],{"class":150},[91,166583,12414],{"class":101},[91,166585,173],{"class":150},[91,166587,30472],{"class":101},[91,166589,166590,166592,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612],{"class":93,"line":1295},[91,166591,30390],{"class":150},[91,166593,166575],{"class":101},[91,166595,319],{"class":150},[91,166597,12414],{"class":101},[91,166599,179],{"class":150},[91,166601,12414],{"class":101},[91,166603,173],{"class":150},[91,166605,12414],{"class":101},[91,166607,395],{"class":150},[91,166609,12414],{"class":101},[91,166611,421],{"class":150},[91,166613,30472],{"class":101},[63,166615,166617],{"id":166616},"_762-kwargs","7.6.2 **kwargs",[38,166619,166620,166623],{},[88,166621,166622],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[83,166625,166627],{"className":30353,"code":166626,"language":30355,"meta":10,"style":10},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[88,166628,166629,166642,166653,166659,166663,166667],{"__ignoreMap":10},[91,166630,166631,166633,166635,166637,166639],{"class":93,"line":94},[91,166632,31922],{"class":97},[91,166634,161920],{"class":1941},[91,166636,102],{"class":101},[91,166638,10640],{"class":97},[91,166640,166641],{"class":101},"kwargs):\n",[91,166643,166644,166646,166648,166650],{"class":93,"line":11},[91,166645,3179],{"class":97},[91,166647,164760],{"class":101},[91,166649,26018],{"class":97},[91,166651,166652],{"class":101}," kwargs.items():\n",[91,166654,166655,166657],{"class":93,"line":1157},[91,166656,32426],{"class":150},[91,166658,164772],{"class":101},[91,166660,166661],{"class":93,"line":1172},[91,166662,2378],{"emptyLinePlaceholder":17},[91,166664,166665],{"class":93,"line":1178},[91,166666,2378],{"emptyLinePlaceholder":17},[91,166668,166669,166671,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693],{"class":93,"line":1192},[91,166670,161985],{"class":101},[91,166672,79785],{"class":5195},[91,166674,147],{"class":97},[91,166676,149863],{"class":206},[91,166678,12414],{"class":101},[91,166680,70196],{"class":5195},[91,166682,147],{"class":97},[91,166684,752],{"class":150},[91,166686,12414],{"class":101},[91,166688,70247],{"class":5195},[91,166690,147],{"class":97},[91,166692,69244],{"class":206},[91,166694,108],{"class":101},[33,166696,166698],{"id":166697},"_77-参数解包","7.7 参数解包",[38,166700,166701],{},"列表或元组解包为位置参数：",[83,166703,166705],{"className":30353,"code":166704,"language":30355,"meta":10,"style":10},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[88,166706,166707,166716,166731,166735,166739,166759],{"__ignoreMap":10},[91,166708,166709,166711,166713],{"class":93,"line":94},[91,166710,31922],{"class":97},[91,166712,5188],{"class":1941},[91,166714,166715],{"class":101},"(a, b, c):\n",[91,166717,166718,166720,166722,166724,166726,166728],{"class":93,"line":11},[91,166719,4068],{"class":97},[91,166721,10848],{"class":101},[91,166723,583],{"class":97},[91,166725,10861],{"class":101},[91,166727,583],{"class":97},[91,166729,166730],{"class":101}," c\n",[91,166732,166733],{"class":93,"line":1157},[91,166734,2378],{"emptyLinePlaceholder":17},[91,166736,166737],{"class":93,"line":1172},[91,166738,2378],{"emptyLinePlaceholder":17},[91,166740,166741,166743,166745,166747,166749,166751,166753,166755,166757],{"class":93,"line":1178},[91,166742,164075],{"class":101},[91,166744,147],{"class":97},[91,166746,52201],{"class":101},[91,166748,319],{"class":150},[91,166750,12414],{"class":101},[91,166752,179],{"class":150},[91,166754,12414],{"class":101},[91,166756,173],{"class":150},[91,166758,33221],{"class":101},[91,166760,166761,166763,166765,166767],{"class":93,"line":1192},[91,166762,30390],{"class":150},[91,166764,166575],{"class":101},[91,166766,557],{"class":97},[91,166768,166769],{"class":101},"nums))\n",[38,166771,166772],{},"字典解包为关键字参数：",[83,166774,166776],{"className":30353,"code":166775,"language":30355,"meta":10,"style":10},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[88,166777,166778,166786,166812,166816,166820,166844],{"__ignoreMap":10},[91,166779,166780,166782,166784],{"class":93,"line":94},[91,166781,31922],{"class":97},[91,166783,149347],{"class":1941},[91,166785,149350],{"class":101},[91,166787,166788,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810],{"class":93,"line":11},[91,166789,31274],{"class":150},[91,166791,102],{"class":101},[91,166793,154],{"class":97},[91,166795,353],{"class":206},[91,166797,998],{"class":150},[91,166799,79785],{"class":101},[91,166801,1048],{"class":150},[91,166803,4426],{"class":150},[91,166805,70196],{"class":101},[91,166807,1048],{"class":150},[91,166809,353],{"class":206},[91,166811,108],{"class":101},[91,166813,166814],{"class":93,"line":1157},[91,166815,2378],{"emptyLinePlaceholder":17},[91,166817,166818],{"class":93,"line":1172},[91,166819,2378],{"emptyLinePlaceholder":17},[91,166821,166822,166824,166826,166828,166830,166832,166834,166836,166838,166840,166842],{"class":93,"line":1178},[91,166823,116289],{"class":101},[91,166825,147],{"class":97},[91,166827,4426],{"class":101},[91,166829,62654],{"class":206},[91,166831,51412],{"class":101},[91,166833,149863],{"class":206},[91,166835,12414],{"class":101},[91,166837,69099],{"class":206},[91,166839,51412],{"class":101},[91,166841,752],{"class":150},[91,166843,1543],{"class":101},[91,166845,166846,166848,166850],{"class":93,"line":1192},[91,166847,166131],{"class":101},[91,166849,10640],{"class":97},[91,166851,166852],{"class":101},"info)\n",[33,166854,166856],{"id":166855},"_78-匿名函数lambda","7.8 匿名函数lambda",[38,166858,166859,166862],{},[88,166860,166861],{},"lambda"," 用于定义简单匿名函数。",[83,166864,166866],{"className":30353,"code":166865,"language":30355,"meta":10,"style":10},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[88,166867,166868,166885],{"__ignoreMap":10},[91,166869,166870,166873,166875,166878,166881,166883],{"class":93,"line":94},[91,166871,166872],{"class":101},"add ",[91,166874,147],{"class":97},[91,166876,166877],{"class":97}," lambda",[91,166879,166880],{"class":101}," a, b: a ",[91,166882,583],{"class":97},[91,166884,151079],{"class":101},[91,166886,166887,166889,166891,166893,166895,166897],{"class":93,"line":11},[91,166888,30390],{"class":150},[91,166890,166575],{"class":101},[91,166892,319],{"class":150},[91,166894,12414],{"class":101},[91,166896,179],{"class":150},[91,166898,30472],{"class":101},[38,166900,166901],{},"常和排序、过滤等函数一起使用。",[38,166903,166904],{},"按分数排序：",[83,166906,166908],{"className":30353,"code":166907,"language":30355,"meta":10,"style":10},"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",[88,166909,166910,166918,166938,166958,166978,166982,166986,167009],{"__ignoreMap":10},[91,166911,166912,166914,166916],{"class":93,"line":94},[91,166913,159691],{"class":101},[91,166915,147],{"class":97},[91,166917,55422],{"class":101},[91,166919,166920,166922,166924,166926,166928,166930,166932,166934,166936],{"class":93,"line":11},[91,166921,148360],{"class":101},[91,166923,62654],{"class":206},[91,166925,51412],{"class":101},[91,166927,149863],{"class":206},[91,166929,12414],{"class":101},[91,166931,151447],{"class":206},[91,166933,51412],{"class":101},[91,166935,1091],{"class":150},[91,166937,4908],{"class":101},[91,166939,166940,166942,166944,166946,166948,166950,166952,166954,166956],{"class":93,"line":1157},[91,166941,148360],{"class":101},[91,166943,62654],{"class":206},[91,166945,51412],{"class":101},[91,166947,150911],{"class":206},[91,166949,12414],{"class":101},[91,166951,151447],{"class":206},[91,166953,51412],{"class":101},[91,166955,913],{"class":150},[91,166957,4908],{"class":101},[91,166959,166960,166962,166964,166966,166968,166970,166972,166974,166976],{"class":93,"line":1172},[91,166961,148360],{"class":101},[91,166963,62654],{"class":206},[91,166965,51412],{"class":101},[91,166967,159706],{"class":206},[91,166969,12414],{"class":101},[91,166971,151447],{"class":206},[91,166973,51412],{"class":101},[91,166975,508],{"class":150},[91,166977,4908],{"class":101},[91,166979,166980],{"class":93,"line":1178},[91,166981,33221],{"class":101},[91,166983,166984],{"class":93,"line":1192},[91,166985,2378],{"emptyLinePlaceholder":17},[91,166987,166988,166991,166993,166995,166997,166999,167001,167003,167005,167007],{"class":93,"line":1198},[91,166989,166990],{"class":101},"students.sort(",[91,166992,153921],{"class":5195},[91,166994,153924],{"class":97},[91,166996,153927],{"class":101},[91,166998,151447],{"class":206},[91,167000,112177],{"class":101},[91,167002,163503],{"class":5195},[91,167004,147],{"class":97},[91,167006,31451],{"class":150},[91,167008,108],{"class":101},[91,167010,167011,167013],{"class":93,"line":1289},[91,167012,30390],{"class":150},[91,167014,164970],{"class":101},[38,167016,167017,167018,167020],{},"如果逻辑复杂，不要硬写 ",[88,167019,166861],{},"，定义普通函数更清晰。",[33,167022,167024],{"id":167023},"_79-函数作为参数","7.9 函数作为参数",[38,167026,167027],{},"函数可以作为参数传给另一个函数。",[83,167029,167031],{"className":30353,"code":167030,"language":30355,"meta":10,"style":10},"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",[88,167032,167033,167041,167051,167055,167059,167069,167076,167080,167084],{"__ignoreMap":10},[91,167034,167035,167037,167039],{"class":93,"line":94},[91,167036,31922],{"class":97},[91,167038,5188],{"class":1941},[91,167040,151068],{"class":101},[91,167042,167043,167045,167047,167049],{"class":93,"line":11},[91,167044,4068],{"class":97},[91,167046,10848],{"class":101},[91,167048,583],{"class":97},[91,167050,151079],{"class":101},[91,167052,167053],{"class":93,"line":1157},[91,167054,2378],{"emptyLinePlaceholder":17},[91,167056,167057],{"class":93,"line":1172},[91,167058,2378],{"emptyLinePlaceholder":17},[91,167060,167061,167063,167066],{"class":93,"line":1178},[91,167062,31922],{"class":97},[91,167064,167065],{"class":1941}," calculate",[91,167067,167068],{"class":101},"(a, b, func):\n",[91,167070,167071,167073],{"class":93,"line":1192},[91,167072,4068],{"class":97},[91,167074,167075],{"class":101}," func(a, b)\n",[91,167077,167078],{"class":93,"line":1198},[91,167079,2378],{"emptyLinePlaceholder":17},[91,167081,167082],{"class":93,"line":1289},[91,167083,2378],{"emptyLinePlaceholder":17},[91,167085,167086,167088,167091,167093,167095,167097],{"class":93,"line":1295},[91,167087,30390],{"class":150},[91,167089,167090],{"class":101},"(calculate(",[91,167092,548],{"class":150},[91,167094,12414],{"class":101},[91,167096,802],{"class":150},[91,167098,167099],{"class":101},", add))\n",[38,167101,167102],{},"这种思想在排序、回调、框架中经常出现。",[33,167104,167106],{"id":167105},"_710-mapfiltersorted","7.10 map、filter、sorted",[63,167108,167110],{"id":167109},"_7101-map","7.10.1 map",[38,167112,167113,167115],{},[88,167114,74019],{}," 对每个元素执行函数。",[83,167117,167119],{"className":30353,"code":167118,"language":30355,"meta":10,"style":10},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[88,167120,167121,167145,167168],{"__ignoreMap":10},[91,167122,167123,167125,167127,167129,167131,167133,167135,167137,167139,167141,167143],{"class":93,"line":94},[91,167124,164075],{"class":101},[91,167126,147],{"class":97},[91,167128,52201],{"class":101},[91,167130,319],{"class":150},[91,167132,12414],{"class":101},[91,167134,179],{"class":150},[91,167136,12414],{"class":101},[91,167138,173],{"class":150},[91,167140,12414],{"class":101},[91,167142,395],{"class":150},[91,167144,33221],{"class":101},[91,167146,167147,167149,167151,167154,167156,167158,167161,167163,167165],{"class":93,"line":11},[91,167148,161281],{"class":101},[91,167150,147],{"class":97},[91,167152,167153],{"class":150}," map",[91,167155,102],{"class":101},[91,167157,166861],{"class":97},[91,167159,167160],{"class":101}," x: x ",[91,167162,557],{"class":97},[91,167164,14734],{"class":150},[91,167166,167167],{"class":101},", nums)\n",[91,167169,167170,167172,167174,167176],{"class":93,"line":1157},[91,167171,30390],{"class":150},[91,167173,102],{"class":101},[91,167175,154045],{"class":150},[91,167177,166043],{"class":101},[63,167179,167181],{"id":167180},"_7102-filter","7.10.2 filter",[38,167183,167184,167186],{},[88,167185,80026],{}," 保留满足条件的元素。",[83,167188,167190],{"className":30353,"code":167189,"language":30355,"meta":10,"style":10},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[88,167191,167192,167220,167245],{"__ignoreMap":10},[91,167193,167194,167196,167198,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218],{"class":93,"line":94},[91,167195,164075],{"class":101},[91,167197,147],{"class":97},[91,167199,52201],{"class":101},[91,167201,319],{"class":150},[91,167203,12414],{"class":101},[91,167205,179],{"class":150},[91,167207,12414],{"class":101},[91,167209,173],{"class":150},[91,167211,12414],{"class":101},[91,167213,395],{"class":150},[91,167215,12414],{"class":101},[91,167217,421],{"class":150},[91,167219,33221],{"class":101},[91,167221,167222,167224,167226,167229,167231,167233,167235,167237,167239,167241,167243],{"class":93,"line":11},[91,167223,161281],{"class":101},[91,167225,147],{"class":97},[91,167227,167228],{"class":150}," filter",[91,167230,102],{"class":101},[91,167232,166861],{"class":97},[91,167234,167160],{"class":101},[91,167236,430],{"class":97},[91,167238,14734],{"class":150},[91,167240,101534],{"class":97},[91,167242,4071],{"class":150},[91,167244,167167],{"class":101},[91,167246,167247,167249,167251,167253],{"class":93,"line":1157},[91,167248,30390],{"class":150},[91,167250,102],{"class":101},[91,167252,154045],{"class":150},[91,167254,166043],{"class":101},[63,167256,167258],{"id":167257},"_7103-sorted","7.10.3 sorted",[38,167260,167261,167263],{},[88,167262,165211],{}," 返回排序后的新列表。",[83,167265,167267],{"className":30353,"code":167266,"language":30355,"meta":10,"style":10},"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",[88,167268,167269,167277,167297,167317,167337,167341,167345,167374],{"__ignoreMap":10},[91,167270,167271,167273,167275],{"class":93,"line":94},[91,167272,159691],{"class":101},[91,167274,147],{"class":97},[91,167276,55422],{"class":101},[91,167278,167279,167281,167283,167285,167287,167289,167291,167293,167295],{"class":93,"line":11},[91,167280,148360],{"class":101},[91,167282,62654],{"class":206},[91,167284,51412],{"class":101},[91,167286,149863],{"class":206},[91,167288,12414],{"class":101},[91,167290,151447],{"class":206},[91,167292,51412],{"class":101},[91,167294,1091],{"class":150},[91,167296,4908],{"class":101},[91,167298,167299,167301,167303,167305,167307,167309,167311,167313,167315],{"class":93,"line":1157},[91,167300,148360],{"class":101},[91,167302,62654],{"class":206},[91,167304,51412],{"class":101},[91,167306,150911],{"class":206},[91,167308,12414],{"class":101},[91,167310,151447],{"class":206},[91,167312,51412],{"class":101},[91,167314,913],{"class":150},[91,167316,4908],{"class":101},[91,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335],{"class":93,"line":1172},[91,167320,148360],{"class":101},[91,167322,62654],{"class":206},[91,167324,51412],{"class":101},[91,167326,159706],{"class":206},[91,167328,12414],{"class":101},[91,167330,151447],{"class":206},[91,167332,51412],{"class":101},[91,167334,508],{"class":150},[91,167336,4908],{"class":101},[91,167338,167339],{"class":93,"line":1178},[91,167340,33221],{"class":101},[91,167342,167343],{"class":93,"line":1192},[91,167344,2378],{"emptyLinePlaceholder":17},[91,167346,167347,167349,167351,167353,167356,167358,167360,167362,167364,167366,167368,167370,167372],{"class":93,"line":1198},[91,167348,161281],{"class":101},[91,167350,147],{"class":97},[91,167352,163579],{"class":150},[91,167354,167355],{"class":101},"(students, ",[91,167357,153921],{"class":5195},[91,167359,153924],{"class":97},[91,167361,153927],{"class":101},[91,167363,151447],{"class":206},[91,167365,112177],{"class":101},[91,167367,163503],{"class":5195},[91,167369,147],{"class":97},[91,167371,31451],{"class":150},[91,167373,108],{"class":101},[91,167375,167376,167378],{"class":93,"line":1289},[91,167377,30390],{"class":150},[91,167379,76560],{"class":101},[33,167381,167383],{"id":167382},"_711-闭包入门","7.11 闭包入门",[38,167385,167386],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[83,167388,167390],{"className":30353,"code":167389,"language":30355,"meta":10,"style":10},"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",[88,167391,167392,167402,167412,167423,167427,167434,167438,167442,167456],{"__ignoreMap":10},[91,167393,167394,167396,167399],{"class":93,"line":94},[91,167395,31922],{"class":97},[91,167397,167398],{"class":1941}," outer",[91,167400,167401],{"class":101},"(base):\n",[91,167403,167404,167406,167409],{"class":93,"line":11},[91,167405,30776],{"class":97},[91,167407,167408],{"class":1941}," inner",[91,167410,167411],{"class":101},"(num):\n",[91,167413,167414,167416,167419,167421],{"class":93,"line":1157},[91,167415,14731],{"class":97},[91,167417,167418],{"class":101}," base ",[91,167420,583],{"class":97},[91,167422,166554],{"class":101},[91,167424,167425],{"class":93,"line":1172},[91,167426,2378],{"emptyLinePlaceholder":17},[91,167428,167429,167431],{"class":93,"line":1178},[91,167430,4068],{"class":97},[91,167432,167433],{"class":101}," inner\n",[91,167435,167436],{"class":93,"line":1192},[91,167437,2378],{"emptyLinePlaceholder":17},[91,167439,167440],{"class":93,"line":1198},[91,167441,2378],{"emptyLinePlaceholder":17},[91,167443,167444,167447,167449,167452,167454],{"class":93,"line":1289},[91,167445,167446],{"class":101},"add_10 ",[91,167448,147],{"class":97},[91,167450,167451],{"class":101}," outer(",[91,167453,548],{"class":150},[91,167455,108],{"class":101},[91,167457,167458,167460,167463,167465],{"class":93,"line":1295},[91,167459,30390],{"class":150},[91,167461,167462],{"class":101},"(add_10(",[91,167464,421],{"class":150},[91,167466,30472],{"class":101},[38,167468,167469],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[33,167471,167473],{"id":167472},"_712-装饰器入门","7.12 装饰器入门",[38,167475,167476],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[83,167478,167480],{"className":30353,"code":167479,"language":30355,"meta":10,"style":10},"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",[88,167481,167482,167491,167500,167511,167516,167527,167531,167538,167542,167546,167551,167559,167569,167573,167577],{"__ignoreMap":10},[91,167483,167484,167486,167488],{"class":93,"line":94},[91,167485,31922],{"class":97},[91,167487,87166],{"class":1941},[91,167489,167490],{"class":101},"(func):\n",[91,167492,167493,167495,167498],{"class":93,"line":11},[91,167494,30776],{"class":97},[91,167496,167497],{"class":1941}," wrapper",[91,167499,31928],{"class":101},[91,167501,167502,167504,167506,167509],{"class":93,"line":1157},[91,167503,32426],{"class":150},[91,167505,102],{"class":101},[91,167507,167508],{"class":206},"\"函数开始执行\"",[91,167510,108],{"class":101},[91,167512,167513],{"class":93,"line":1172},[91,167514,167515],{"class":101},"        func()\n",[91,167517,167518,167520,167522,167525],{"class":93,"line":1178},[91,167519,32426],{"class":150},[91,167521,102],{"class":101},[91,167523,167524],{"class":206},"\"函数执行结束\"",[91,167526,108],{"class":101},[91,167528,167529],{"class":93,"line":1192},[91,167530,2378],{"emptyLinePlaceholder":17},[91,167532,167533,167535],{"class":93,"line":1198},[91,167534,4068],{"class":97},[91,167536,167537],{"class":101}," wrapper\n",[91,167539,167540],{"class":93,"line":1289},[91,167541,2378],{"emptyLinePlaceholder":17},[91,167543,167544],{"class":93,"line":1295},[91,167545,2378],{"emptyLinePlaceholder":17},[91,167547,167548],{"class":93,"line":1307},[91,167549,167550],{"class":1941},"@log\n",[91,167552,167553,167555,167557],{"class":93,"line":1590},[91,167554,31922],{"class":97},[91,167556,160971],{"class":1941},[91,167558,31928],{"class":101},[91,167560,167561,167563,167565,167567],{"class":93,"line":1595},[91,167562,31274],{"class":150},[91,167564,102],{"class":101},[91,167566,5823],{"class":206},[91,167568,108],{"class":101},[91,167570,167571],{"class":93,"line":1601},[91,167572,2378],{"emptyLinePlaceholder":17},[91,167574,167575],{"class":93,"line":1606},[91,167576,2378],{"emptyLinePlaceholder":17},[91,167578,167579],{"class":93,"line":1620},[91,167580,161006],{"class":101},[38,167582,158249],{},[83,167584,167586],{"className":30353,"code":167585,"language":30355,"meta":10,"style":10},"say_hello = log(say_hello)\n",[88,167587,167588],{"__ignoreMap":10},[91,167589,167590,167593,167595],{"class":93,"line":94},[91,167591,167592],{"class":101},"say_hello ",[91,167594,147],{"class":97},[91,167596,167597],{"class":101}," log(say_hello)\n",[38,167599,167600],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[33,167602,167604],{"id":167603},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[83,167606,167608],{"className":30353,"code":167607,"language":30355,"meta":10,"style":10},"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",[88,167609,167610,167618,167635,167645,167664,167674,167681,167685,167691,167695,167699,167703,167711,167721,167725,167729],{"__ignoreMap":10},[91,167611,167612,167614,167616],{"class":93,"line":94},[91,167613,31922],{"class":97},[91,167615,87166],{"class":1941},[91,167617,167490],{"class":101},[91,167619,167620,167622,167624,167626,167628,167631,167633],{"class":93,"line":11},[91,167621,30776],{"class":97},[91,167623,167497],{"class":1941},[91,167625,102],{"class":101},[91,167627,557],{"class":97},[91,167629,167630],{"class":101},"args, ",[91,167632,10640],{"class":97},[91,167634,166641],{"class":101},[91,167636,167637,167639,167641,167643],{"class":93,"line":1157},[91,167638,32426],{"class":150},[91,167640,102],{"class":101},[91,167642,167508],{"class":206},[91,167644,108],{"class":101},[91,167646,167647,167650,167652,167655,167657,167659,167661],{"class":93,"line":1172},[91,167648,167649],{"class":101},"        result ",[91,167651,147],{"class":97},[91,167653,167654],{"class":101}," func(",[91,167656,557],{"class":97},[91,167658,167630],{"class":101},[91,167660,10640],{"class":97},[91,167662,167663],{"class":101},"kwargs)\n",[91,167665,167666,167668,167670,167672],{"class":93,"line":1178},[91,167667,32426],{"class":150},[91,167669,102],{"class":101},[91,167671,167524],{"class":206},[91,167673,108],{"class":101},[91,167675,167676,167678],{"class":93,"line":1192},[91,167677,14731],{"class":97},[91,167679,167680],{"class":101}," result\n",[91,167682,167683],{"class":93,"line":1198},[91,167684,2378],{"emptyLinePlaceholder":17},[91,167686,167687,167689],{"class":93,"line":1289},[91,167688,4068],{"class":97},[91,167690,167537],{"class":101},[91,167692,167693],{"class":93,"line":1295},[91,167694,2378],{"emptyLinePlaceholder":17},[91,167696,167697],{"class":93,"line":1307},[91,167698,2378],{"emptyLinePlaceholder":17},[91,167700,167701],{"class":93,"line":1590},[91,167702,167550],{"class":1941},[91,167704,167705,167707,167709],{"class":93,"line":1595},[91,167706,31922],{"class":97},[91,167708,5188],{"class":1941},[91,167710,151068],{"class":101},[91,167712,167713,167715,167717,167719],{"class":93,"line":1601},[91,167714,4068],{"class":97},[91,167716,10848],{"class":101},[91,167718,583],{"class":97},[91,167720,151079],{"class":101},[91,167722,167723],{"class":93,"line":1606},[91,167724,2378],{"emptyLinePlaceholder":17},[91,167726,167727],{"class":93,"line":1620},[91,167728,2378],{"emptyLinePlaceholder":17},[91,167730,167731,167733,167735,167737,167739,167741],{"class":93,"line":1625},[91,167732,30390],{"class":150},[91,167734,166575],{"class":101},[91,167736,548],{"class":150},[91,167738,12414],{"class":101},[91,167740,802],{"class":150},[91,167742,30472],{"class":101},[38,167744,167745,167746,100993,167748,167750],{},"这个写法使用 ",[88,167747,166507],{},[88,167749,166622],{}," 接收原函数的所有参数。",[33,167752,167754],{"id":167753},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[38,167756,123267],{},[46,167758,167759,167762,167765],{},[49,167760,167761],{},"给定一组学生数据。",[49,167763,167764],{},"封装函数，根据传入规则筛选学生。",[49,167766,167767],{},"筛选及格、优秀、未成年学生。",[38,167769,10014],{},[83,167771,167773],{"className":30353,"code":167772,"language":30355,"meta":10,"style":10},"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",[88,167774,167775,167783,167811,167839,167867,167871,167875,167879,167889,167897,167907,167914,167919,167925,167929,167933,167957,167980,168003,168007,168014,168021],{"__ignoreMap":10},[91,167776,167777,167779,167781],{"class":93,"line":94},[91,167778,159691],{"class":101},[91,167780,147],{"class":97},[91,167782,55422],{"class":101},[91,167784,167785,167787,167789,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809],{"class":93,"line":11},[91,167786,148360],{"class":101},[91,167788,62654],{"class":206},[91,167790,51412],{"class":101},[91,167792,149863],{"class":206},[91,167794,12414],{"class":101},[91,167796,69099],{"class":206},[91,167798,51412],{"class":101},[91,167800,752],{"class":150},[91,167802,12414],{"class":101},[91,167804,151447],{"class":206},[91,167806,51412],{"class":101},[91,167808,1091],{"class":150},[91,167810,4908],{"class":101},[91,167812,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837],{"class":93,"line":1157},[91,167814,148360],{"class":101},[91,167816,62654],{"class":206},[91,167818,51412],{"class":101},[91,167820,150911],{"class":206},[91,167822,12414],{"class":101},[91,167824,69099],{"class":206},[91,167826,51412],{"class":101},[91,167828,727],{"class":150},[91,167830,12414],{"class":101},[91,167832,151447],{"class":206},[91,167834,51412],{"class":101},[91,167836,913],{"class":150},[91,167838,4908],{"class":101},[91,167840,167841,167843,167845,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865],{"class":93,"line":1172},[91,167842,148360],{"class":101},[91,167844,62654],{"class":206},[91,167846,51412],{"class":101},[91,167848,159706],{"class":206},[91,167850,12414],{"class":101},[91,167852,69099],{"class":206},[91,167854,51412],{"class":101},[91,167856,777],{"class":150},[91,167858,12414],{"class":101},[91,167860,151447],{"class":206},[91,167862,51412],{"class":101},[91,167864,984],{"class":150},[91,167866,4908],{"class":101},[91,167868,167869],{"class":93,"line":1178},[91,167870,33221],{"class":101},[91,167872,167873],{"class":93,"line":1192},[91,167874,2378],{"emptyLinePlaceholder":17},[91,167876,167877],{"class":93,"line":1198},[91,167878,2378],{"emptyLinePlaceholder":17},[91,167880,167881,167883,167886],{"class":93,"line":1289},[91,167882,31922],{"class":97},[91,167884,167885],{"class":1941}," filter_students",[91,167887,167888],{"class":101},"(students, condition):\n",[91,167890,167891,167893,167895],{"class":93,"line":1295},[91,167892,161198],{"class":101},[91,167894,147],{"class":97},[91,167896,51813],{"class":101},[91,167898,167899,167901,167903,167905],{"class":93,"line":1307},[91,167900,3179],{"class":97},[91,167902,152112],{"class":101},[91,167904,26018],{"class":97},[91,167906,152117],{"class":101},[91,167908,167909,167911],{"class":93,"line":1590},[91,167910,2475],{"class":97},[91,167912,167913],{"class":101}," condition(student):\n",[91,167915,167916],{"class":93,"line":1595},[91,167917,167918],{"class":101},"            result.append(student)\n",[91,167920,167921,167923],{"class":93,"line":1601},[91,167922,4068],{"class":97},[91,167924,167680],{"class":101},[91,167926,167927],{"class":93,"line":1606},[91,167928,2378],{"emptyLinePlaceholder":17},[91,167930,167931],{"class":93,"line":1620},[91,167932,2378],{"emptyLinePlaceholder":17},[91,167934,167935,167937,167939,167942,167944,167947,167949,167951,167953,167955],{"class":93,"line":1625},[91,167936,165676],{"class":101},[91,167938,147],{"class":97},[91,167940,167941],{"class":101}," filter_students(students, ",[91,167943,166861],{"class":97},[91,167945,167946],{"class":101}," s: s[",[91,167948,151447],{"class":206},[91,167950,4421],{"class":101},[91,167952,1688],{"class":97},[91,167954,157812],{"class":150},[91,167956,108],{"class":101},[91,167958,167959,167962,167964,167966,167968,167970,167972,167974,167976,167978],{"class":93,"line":1631},[91,167960,167961],{"class":101},"excellent ",[91,167963,147],{"class":97},[91,167965,167941],{"class":101},[91,167967,166861],{"class":97},[91,167969,167946],{"class":101},[91,167971,151447],{"class":206},[91,167973,4421],{"class":101},[91,167975,1688],{"class":97},[91,167977,157763],{"class":150},[91,167979,108],{"class":101},[91,167981,167982,167985,167987,167989,167991,167993,167995,167997,167999,168001],{"class":93,"line":1652},[91,167983,167984],{"class":101},"under_age ",[91,167986,147],{"class":97},[91,167988,167941],{"class":101},[91,167990,166861],{"class":97},[91,167992,167946],{"class":101},[91,167994,69099],{"class":206},[91,167996,4421],{"class":101},[91,167998,1012],{"class":97},[91,168000,156260],{"class":150},[91,168002,108],{"class":101},[91,168004,168005],{"class":93,"line":1657},[91,168006,2378],{"emptyLinePlaceholder":17},[91,168008,168009,168011],{"class":93,"line":1671},[91,168010,30390],{"class":150},[91,168012,168013],{"class":101},"(passed)\n",[91,168015,168016,168018],{"class":93,"line":1676},[91,168017,30390],{"class":150},[91,168019,168020],{"class":101},"(excellent)\n",[91,168022,168023,168025],{"class":93,"line":1705},[91,168024,30390],{"class":150},[91,168026,168027],{"class":101},"(under_age)\n",[33,168029,168031],{"id":168030},"_715-易错点","7.15 易错点",[46,168033,168034,168037,168045,168050,168061],{},[49,168035,168036],{},"默认参数不要写可变对象。",[49,168038,168039,168041,168042,168044],{},[88,168040,166507],{}," 是元组，",[88,168043,166622],{}," 是字典。",[49,168046,168047,168049],{},[88,168048,166861],{}," 只适合简单表达式。",[49,168051,168052,100993,168054,168056,168057,168060],{},[88,168053,74019],{},[88,168055,80026],{}," 的结果是迭代器，常用 ",[88,168058,168059],{},"list()"," 转换查看。",[49,168062,168063],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[33,168065,168067],{"id":168066},"_716-本章练习","7.16 本章练习",[46,168069,168070,168077,168083,168088,168093],{},[49,168071,168072,168073,168076],{},"写函数 ",[88,168074,168075],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[49,168078,168072,168079,168082],{},[88,168080,168081],{},"print_user(**kwargs)","，输出用户所有字段。",[49,168084,104341,168085,168087],{},[88,168086,166861],{}," 对学生列表按年龄排序。",[49,168089,104341,168090,168092],{},[88,168091,80026],{}," 找出成绩不及格的学生。",[49,168094,168095],{},"写一个装饰器，统计函数执行前后的提示信息。",[5105,168097,168098],{},"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":10,"searchDepth":11,"depth":11,"links":168100},[168101,168102,168103,168104,168105,168106,168110,168111,168112,168113,168118,168119,168120,168121,168122,168123],{"id":165959,"depth":11,"text":165960},{"id":166073,"depth":11,"text":166074},{"id":166162,"depth":11,"text":166163},{"id":166224,"depth":11,"text":166225},{"id":166370,"depth":11,"text":166371},{"id":166497,"depth":11,"text":166498,"children":168107},[168108,168109],{"id":166501,"depth":1157,"text":166502},{"id":166616,"depth":1157,"text":166617},{"id":166697,"depth":11,"text":166698},{"id":166855,"depth":11,"text":166856},{"id":167023,"depth":11,"text":167024},{"id":167105,"depth":11,"text":167106,"children":168114},[168115,168116,168117],{"id":167109,"depth":1157,"text":167110},{"id":167180,"depth":1157,"text":167181},{"id":167257,"depth":1157,"text":167258},{"id":167382,"depth":11,"text":167383},{"id":167472,"depth":11,"text":167473},{"id":167603,"depth":11,"text":167604},{"id":167753,"depth":11,"text":167754},{"id":168030,"depth":11,"text":168031},{"id":168066,"depth":11,"text":168067},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165951,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168130,"title":168131,"body":168132,"description":13,"extension":14,"meta":170651,"navigation":17,"path":170652,"seo":170653,"stem":170654,"__hash__":170655},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168133,"toc":170626},[168134,168137,168141,168144,168147,168178,168182,168186,168189,168216,168220,168223,168274,168277,168292,168295,168330,168334,168336,168360,168363,168423,168427,168431,168434,168491,168494,168514,168518,168521,168584,168588,168591,168647,168654,168678,168682,168685,168748,168752,168757,168808,168811,168815,168820,168887,168890,168972,168976,168981,169032,169035,169039,169042,169045,169053,169056,169102,169105,169151,169155,169161,169205,169208,169254,169257,169297,169300,169361,169365,169368,169458,169461,169603,169606,169673,169677,169680,169683,169824,169827,169905,169908,170084,170088,170090,170101,170103,170302,170306,170550,170554,170588,170592,170623],[29,168135,168131],{"id":168136},"_8-文件操作",[33,168138,168140],{"id":168139},"_81-文件操作的意义","8.1 文件操作的意义",[38,168142,168143],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[38,168145,168146],{},"常见文件类型：",[46,168148,168149,168155,168161,168167,168173],{},[49,168150,168151,168154],{},[88,168152,168153],{},".txt","：普通文本。",[49,168156,168157,168160],{},[88,168158,168159],{},".csv","：表格文本。",[49,168162,168163,168166],{},[88,168164,168165],{},".json","：结构化数据。",[49,168168,168169,168172],{},[88,168170,168171],{},".log","：日志文件。",[49,168174,168175,168177],{},[88,168176,146327],{},"：Python 源代码。",[33,168179,168181],{"id":168180},"_82-路径","8.2 路径",[63,168183,168185],{"id":168184},"_821-相对路径","8.2.1 相对路径",[38,168187,168188],{},"相对当前运行目录：",[83,168190,168192],{"className":30353,"code":168191,"language":30355,"meta":10,"style":10},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[88,168193,168194],{"__ignoreMap":10},[91,168195,168196,168198,168200,168202,168204,168206,168208,168210,168212,168214],{"class":93,"line":94},[91,168197,86890],{"class":150},[91,168199,102],{"class":101},[91,168201,146771],{"class":206},[91,168203,12414],{"class":101},[91,168205,146776],{"class":206},[91,168207,12414],{"class":101},[91,168209,146781],{"class":5195},[91,168211,147],{"class":97},[91,168213,146786],{"class":206},[91,168215,108],{"class":101},[63,168217,168219],{"id":168218},"_822-绝对路径","8.2.2 绝对路径",[38,168221,168222],{},"从根目录或盘符开始：",[83,168224,168226],{"className":30353,"code":168225,"language":30355,"meta":10,"style":10},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[88,168227,168228,168251],{"__ignoreMap":10},[91,168229,168230,168232,168234,168237,168239,168241,168243,168245,168247,168249],{"class":93,"line":94},[91,168231,86890],{"class":150},[91,168233,102],{"class":101},[91,168235,168236],{"class":206},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[91,168238,12414],{"class":101},[91,168240,146776],{"class":206},[91,168242,12414],{"class":101},[91,168244,146781],{"class":5195},[91,168246,147],{"class":97},[91,168248,146786],{"class":206},[91,168250,108],{"class":101},[91,168252,168253,168255,168257,168260,168262,168264,168266,168268,168270,168272],{"class":93,"line":11},[91,168254,86890],{"class":150},[91,168256,102],{"class":101},[91,168258,168259],{"class":206},"\"D:\u002Fdata\u002Fdata.txt\"",[91,168261,12414],{"class":101},[91,168263,146776],{"class":206},[91,168265,12414],{"class":101},[91,168267,146781],{"class":5195},[91,168269,147],{"class":97},[91,168271,146786],{"class":206},[91,168273,108],{"class":101},[38,168275,168276],{},"Windows 路径建议写成：",[83,168278,168280],{"className":30353,"code":168279,"language":30355,"meta":10,"style":10},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[88,168281,168282],{"__ignoreMap":10},[91,168283,168284,168287,168289],{"class":93,"line":94},[91,168285,168286],{"class":101},"path ",[91,168288,147],{"class":97},[91,168290,168291],{"class":206}," \"D:\u002Fdata\u002Fdata.txt\"\n",[38,168293,168294],{},"或原始字符串：",[83,168296,168298],{"className":30353,"code":168297,"language":30355,"meta":10,"style":10},"path = r\"D:\\data\\data.txt\"\n",[88,168299,168300],{"__ignoreMap":10},[91,168301,168302,168304,168306,168308,168310,168313,168316,168319,168321,168323,168325,168328],{"class":93,"line":94},[91,168303,168286],{"class":101},[91,168305,147],{"class":97},[91,168307,17100],{"class":97},[91,168309,353],{"class":206},[91,168311,168312],{"class":47952},"D:",[91,168314,168315],{"class":150},"\\d",[91,168317,168318],{"class":47952},"ata",[91,168320,168315],{"class":150},[91,168322,168318],{"class":47952},[91,168324,660],{"class":150},[91,168326,168327],{"class":47952},"txt",[91,168329,25108],{"class":206},[33,168331,168333],{"id":168332},"_83-open函数","8.3 open函数",[38,168335,5160],{},[83,168337,168339],{"className":30353,"code":168338,"language":30355,"meta":10,"style":10},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[88,168340,168341],{"__ignoreMap":10},[91,168342,168343,168345,168347,168349,168352,168354,168356,168358],{"class":93,"line":94},[91,168344,45329],{"class":5195},[91,168346,13543],{"class":97},[91,168348,146766],{"class":150},[91,168350,168351],{"class":101},"(文件路径, 打开模式, ",[91,168353,146781],{"class":5195},[91,168355,147],{"class":97},[91,168357,146786],{"class":206},[91,168359,108],{"class":101},[38,168361,168362],{},"常见模式：",[239,168364,168365,168374],{},[242,168366,168367],{},[245,168368,168369,168372],{},[248,168370,168371],{},"模式",[248,168373,25844],{},[286,168375,168376,168385,168394,168403,168413],{},[245,168377,168378,168382],{},[291,168379,168380],{},[88,168381,772],{},[291,168383,168384],{},"只读，文件不存在会报错",[245,168386,168387,168391],{},[291,168388,168389],{},[88,168390,897],{},[291,168392,168393],{},"只写，文件不存在会创建，存在会清空",[245,168395,168396,168400],{},[291,168397,168398],{},[88,168399,340],{},[291,168401,168402],{},"追加，文件不存在会创建",[245,168404,168405,168410],{},[291,168406,168407],{},[88,168408,168409],{},"rb",[291,168411,168412],{},"二进制只读",[245,168414,168415,168420],{},[291,168416,168417],{},[88,168418,168419],{},"wb",[291,168421,168422],{},"二进制只写",[33,168424,168426],{"id":168425},"_84-读取文件","8.4 读取文件",[63,168428,168430],{"id":168429},"_841-read","8.4.1 read",[38,168432,168433],{},"一次读取全部内容：",[83,168435,168437],{"className":30353,"code":168436,"language":30355,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[88,168438,168439,168465,168477,168484],{"__ignoreMap":10},[91,168440,168441,168443,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463],{"class":93,"line":94},[91,168442,45329],{"class":5195},[91,168444,13543],{"class":97},[91,168446,146766],{"class":150},[91,168448,102],{"class":101},[91,168450,146771],{"class":206},[91,168452,12414],{"class":101},[91,168454,146776],{"class":206},[91,168456,12414],{"class":101},[91,168458,146781],{"class":5195},[91,168460,147],{"class":97},[91,168462,146786],{"class":206},[91,168464,108],{"class":101},[91,168466,168467,168470,168472,168474],{"class":93,"line":11},[91,168468,168469],{"class":101},"content ",[91,168471,147],{"class":97},[91,168473,148128],{"class":5195},[91,168475,168476],{"class":101},".read()\n",[91,168478,168479,168481],{"class":93,"line":1157},[91,168480,30390],{"class":150},[91,168482,168483],{"class":101},"(content)\n",[91,168485,168486,168488],{"class":93,"line":1172},[91,168487,45329],{"class":5195},[91,168489,168490],{"class":101},".close()\n",[38,168492,168493],{},"可以指定读取字符数：",[83,168495,168497],{"className":30353,"code":168496,"language":30355,"meta":10,"style":10},"content = file.read(10)\n",[88,168498,168499],{"__ignoreMap":10},[91,168500,168501,168503,168505,168507,168510,168512],{"class":93,"line":94},[91,168502,168469],{"class":101},[91,168504,147],{"class":97},[91,168506,148128],{"class":5195},[91,168508,168509],{"class":101},".read(",[91,168511,548],{"class":150},[91,168513,108],{"class":101},[63,168515,168517],{"id":168516},"_842-readline","8.4.2 readline",[38,168519,168520],{},"一次读取一行：",[83,168522,168524],{"className":30353,"code":168523,"language":30355,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[88,168525,168526,168552,168556,168567,168574,168578],{"__ignoreMap":10},[91,168527,168528,168530,168532,168534,168536,168538,168540,168542,168544,168546,168548,168550],{"class":93,"line":94},[91,168529,45329],{"class":5195},[91,168531,13543],{"class":97},[91,168533,146766],{"class":150},[91,168535,102],{"class":101},[91,168537,146771],{"class":206},[91,168539,12414],{"class":101},[91,168541,146776],{"class":206},[91,168543,12414],{"class":101},[91,168545,146781],{"class":5195},[91,168547,147],{"class":97},[91,168549,146786],{"class":206},[91,168551,108],{"class":101},[91,168553,168554],{"class":93,"line":11},[91,168555,2378],{"emptyLinePlaceholder":17},[91,168557,168558,168560,168562,168564],{"class":93,"line":1157},[91,168559,147227],{"class":101},[91,168561,147],{"class":97},[91,168563,148128],{"class":5195},[91,168565,168566],{"class":101},".readline()\n",[91,168568,168569,168571],{"class":93,"line":1172},[91,168570,30390],{"class":150},[91,168572,168573],{"class":101},"(line)\n",[91,168575,168576],{"class":93,"line":1178},[91,168577,2378],{"emptyLinePlaceholder":17},[91,168579,168580,168582],{"class":93,"line":1192},[91,168581,45329],{"class":5195},[91,168583,168490],{"class":101},[63,168585,168587],{"id":168586},"_843-readlines","8.4.3 readlines",[38,168589,168590],{},"读取所有行，返回列表：",[83,168592,168594],{"className":30353,"code":168593,"language":30355,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[88,168595,168596,168622,168634,168641],{"__ignoreMap":10},[91,168597,168598,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620],{"class":93,"line":94},[91,168599,45329],{"class":5195},[91,168601,13543],{"class":97},[91,168603,146766],{"class":150},[91,168605,102],{"class":101},[91,168607,146771],{"class":206},[91,168609,12414],{"class":101},[91,168611,146776],{"class":206},[91,168613,12414],{"class":101},[91,168615,146781],{"class":5195},[91,168617,147],{"class":97},[91,168619,146786],{"class":206},[91,168621,108],{"class":101},[91,168623,168624,168627,168629,168631],{"class":93,"line":11},[91,168625,168626],{"class":101},"lines ",[91,168628,147],{"class":97},[91,168630,148128],{"class":5195},[91,168632,168633],{"class":101},".readlines()\n",[91,168635,168636,168638],{"class":93,"line":1157},[91,168637,30390],{"class":150},[91,168639,168640],{"class":101},"(lines)\n",[91,168642,168643,168645],{"class":93,"line":1172},[91,168644,45329],{"class":5195},[91,168646,168490],{"class":101},[38,168648,168649,168650,168653],{},"每一行通常带有换行符，可以用 ",[88,168651,168652],{},"strip()"," 去掉：",[83,168655,168657],{"className":30353,"code":168656,"language":30355,"meta":10,"style":10},"for line in lines:\n    print(line.strip())\n",[88,168658,168659,168671],{"__ignoreMap":10},[91,168660,168661,168663,168666,168668],{"class":93,"line":94},[91,168662,3003],{"class":97},[91,168664,168665],{"class":101}," line ",[91,168667,26018],{"class":97},[91,168669,168670],{"class":101}," lines:\n",[91,168672,168673,168675],{"class":93,"line":11},[91,168674,31274],{"class":150},[91,168676,168677],{"class":101},"(line.strip())\n",[63,168679,168681],{"id":168680},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[38,168683,168684],{},"推荐读取大文件时使用：",[83,168686,168688],{"className":30353,"code":168687,"language":30355,"meta":10,"style":10},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[88,168689,168690,168716,168720,168732,168738,168742],{"__ignoreMap":10},[91,168691,168692,168694,168696,168698,168700,168702,168704,168706,168708,168710,168712,168714],{"class":93,"line":94},[91,168693,45329],{"class":5195},[91,168695,13543],{"class":97},[91,168697,146766],{"class":150},[91,168699,102],{"class":101},[91,168701,146771],{"class":206},[91,168703,12414],{"class":101},[91,168705,146776],{"class":206},[91,168707,12414],{"class":101},[91,168709,146781],{"class":5195},[91,168711,147],{"class":97},[91,168713,146786],{"class":206},[91,168715,108],{"class":101},[91,168717,168718],{"class":93,"line":11},[91,168719,2378],{"emptyLinePlaceholder":17},[91,168721,168722,168724,168726,168728,168730],{"class":93,"line":1157},[91,168723,3003],{"class":97},[91,168725,168665],{"class":101},[91,168727,26018],{"class":97},[91,168729,148128],{"class":5195},[91,168731,3717],{"class":101},[91,168733,168734,168736],{"class":93,"line":1172},[91,168735,31274],{"class":150},[91,168737,168677],{"class":101},[91,168739,168740],{"class":93,"line":1178},[91,168741,2378],{"emptyLinePlaceholder":17},[91,168743,168744,168746],{"class":93,"line":1192},[91,168745,45329],{"class":5195},[91,168747,168490],{"class":101},[33,168749,168751],{"id":168750},"_85-with语句","8.5 with语句",[38,168753,168754,168756],{},[88,168755,107808],{}," 会自动关闭文件，推荐使用。",[83,168758,168760],{"className":30353,"code":168759,"language":30355,"meta":10,"style":10},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[88,168761,168762,168792,168802],{"__ignoreMap":10},[91,168763,168764,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790],{"class":93,"line":94},[91,168765,107808],{"class":97},[91,168767,146766],{"class":150},[91,168769,102],{"class":101},[91,168771,146771],{"class":206},[91,168773,12414],{"class":101},[91,168775,146776],{"class":206},[91,168777,12414],{"class":101},[91,168779,146781],{"class":5195},[91,168781,147],{"class":97},[91,168783,146786],{"class":206},[91,168785,13693],{"class":101},[91,168787,31358],{"class":97},[91,168789,148128],{"class":5195},[91,168791,3717],{"class":101},[91,168793,168794,168796,168798,168800],{"class":93,"line":11},[91,168795,146798],{"class":101},[91,168797,147],{"class":97},[91,168799,148128],{"class":5195},[91,168801,168476],{"class":101},[91,168803,168804,168806],{"class":93,"line":1157},[91,168805,31274],{"class":150},[91,168807,168483],{"class":101},[38,168809,168810],{},"等价于打开文件、读取、最后关闭，但更安全。",[33,168812,168814],{"id":168813},"_86-写入文件","8.6 写入文件",[38,168816,168817,168819],{},[88,168818,897],{}," 模式会清空原文件。",[83,168821,168823],{"className":30353,"code":168822,"language":30355,"meta":10,"style":10},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[88,168824,168825,168855,168872],{"__ignoreMap":10},[91,168826,168827,168829,168831,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853],{"class":93,"line":94},[91,168828,107808],{"class":97},[91,168830,146766],{"class":150},[91,168832,102],{"class":101},[91,168834,146771],{"class":206},[91,168836,12414],{"class":101},[91,168838,151951],{"class":206},[91,168840,12414],{"class":101},[91,168842,146781],{"class":5195},[91,168844,147],{"class":97},[91,168846,146786],{"class":206},[91,168848,13693],{"class":101},[91,168850,31358],{"class":97},[91,168852,148128],{"class":5195},[91,168854,3717],{"class":101},[91,168856,168857,168860,168863,168866,168868,168870],{"class":93,"line":11},[91,168858,168859],{"class":5195},"    file",[91,168861,168862],{"class":101},".write(",[91,168864,168865],{"class":206},"\"hello",[91,168867,156500],{"class":150},[91,168869,353],{"class":206},[91,168871,108],{"class":101},[91,168873,168874,168876,168878,168881,168883,168885],{"class":93,"line":1157},[91,168875,168859],{"class":5195},[91,168877,168862],{"class":101},[91,168879,168880],{"class":206},"\"python",[91,168882,156500],{"class":150},[91,168884,353],{"class":206},[91,168886,108],{"class":101},[38,168888,168889],{},"写入多行：",[83,168891,168893],{"className":30353,"code":168892,"language":30355,"meta":10,"style":10},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[88,168894,168895,168930,168934,168965],{"__ignoreMap":10},[91,168896,168897,168899,168901,168903,168906,168908,168910,168912,168915,168917,168919,168921,168924,168926,168928],{"class":93,"line":94},[91,168898,168626],{"class":101},[91,168900,147],{"class":97},[91,168902,52201],{"class":101},[91,168904,168905],{"class":206},"\"小明,18",[91,168907,156500],{"class":150},[91,168909,353],{"class":206},[91,168911,12414],{"class":101},[91,168913,168914],{"class":206},"\"小红,17",[91,168916,156500],{"class":150},[91,168918,353],{"class":206},[91,168920,12414],{"class":101},[91,168922,168923],{"class":206},"\"小刚,19",[91,168925,156500],{"class":150},[91,168927,353],{"class":206},[91,168929,33221],{"class":101},[91,168931,168932],{"class":93,"line":11},[91,168933,2378],{"emptyLinePlaceholder":17},[91,168935,168936,168938,168940,168942,168945,168947,168949,168951,168953,168955,168957,168959,168961,168963],{"class":93,"line":1157},[91,168937,107808],{"class":97},[91,168939,146766],{"class":150},[91,168941,102],{"class":101},[91,168943,168944],{"class":206},"\"students.txt\"",[91,168946,12414],{"class":101},[91,168948,151951],{"class":206},[91,168950,12414],{"class":101},[91,168952,146781],{"class":5195},[91,168954,147],{"class":97},[91,168956,146786],{"class":206},[91,168958,13693],{"class":101},[91,168960,31358],{"class":97},[91,168962,148128],{"class":5195},[91,168964,3717],{"class":101},[91,168966,168967,168969],{"class":93,"line":1172},[91,168968,168859],{"class":5195},[91,168970,168971],{"class":101},".writelines(lines)\n",[33,168973,168975],{"id":168974},"_87-追加文件","8.7 追加文件",[38,168977,168978,168980],{},[88,168979,340],{}," 模式不会清空原内容，而是在末尾追加。",[83,168982,168984],{"className":30353,"code":168983,"language":30355,"meta":10,"style":10},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[88,168985,168986,169017],{"__ignoreMap":10},[91,168987,168988,168990,168992,168994,168997,168999,169001,169003,169005,169007,169009,169011,169013,169015],{"class":93,"line":94},[91,168989,107808],{"class":97},[91,168991,146766],{"class":150},[91,168993,102],{"class":101},[91,168995,168996],{"class":206},"\"log.txt\"",[91,168998,12414],{"class":101},[91,169000,165300],{"class":206},[91,169002,12414],{"class":101},[91,169004,146781],{"class":5195},[91,169006,147],{"class":97},[91,169008,146786],{"class":206},[91,169010,13693],{"class":101},[91,169012,31358],{"class":97},[91,169014,148128],{"class":5195},[91,169016,3717],{"class":101},[91,169018,169019,169021,169023,169026,169028,169030],{"class":93,"line":11},[91,169020,168859],{"class":5195},[91,169022,168862],{"class":101},[91,169024,169025],{"class":206},"\"程序启动",[91,169027,156500],{"class":150},[91,169029,353],{"class":206},[91,169031,108],{"class":101},[38,169033,169034],{},"日志类文件常用追加模式。",[33,169036,169038],{"id":169037},"_88-文件编码","8.8 文件编码",[38,169040,169041],{},"编码决定文字如何保存为字节。",[38,169043,169044],{},"常见编码：",[46,169046,169047,169050],{},[49,169048,169049],{},"UTF-8：推荐。",[49,169051,169052],{},"GBK：部分 Windows 中文文件常见。",[38,169054,169055],{},"读取文件乱码时，可以尝试：",[83,169057,169059],{"className":30353,"code":169058,"language":30355,"meta":10,"style":10},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[88,169060,169061,169092],{"__ignoreMap":10},[91,169062,169063,169065,169067,169069,169071,169073,169075,169077,169079,169081,169084,169086,169088,169090],{"class":93,"line":94},[91,169064,107808],{"class":97},[91,169066,146766],{"class":150},[91,169068,102],{"class":101},[91,169070,146771],{"class":206},[91,169072,12414],{"class":101},[91,169074,146776],{"class":206},[91,169076,12414],{"class":101},[91,169078,146781],{"class":5195},[91,169080,147],{"class":97},[91,169082,169083],{"class":206},"\"gbk\"",[91,169085,13693],{"class":101},[91,169087,31358],{"class":97},[91,169089,148128],{"class":5195},[91,169091,3717],{"class":101},[91,169093,169094,169096,169098,169100],{"class":93,"line":11},[91,169095,146798],{"class":101},[91,169097,147],{"class":97},[91,169099,148128],{"class":5195},[91,169101,168476],{"class":101},[38,169103,169104],{},"写文件时建议统一 UTF-8：",[83,169106,169108],{"className":30353,"code":169107,"language":30355,"meta":10,"style":10},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[88,169109,169110,169140],{"__ignoreMap":10},[91,169111,169112,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138],{"class":93,"line":94},[91,169113,107808],{"class":97},[91,169115,146766],{"class":150},[91,169117,102],{"class":101},[91,169119,146771],{"class":206},[91,169121,12414],{"class":101},[91,169123,151951],{"class":206},[91,169125,12414],{"class":101},[91,169127,146781],{"class":5195},[91,169129,147],{"class":97},[91,169131,146786],{"class":206},[91,169133,13693],{"class":101},[91,169135,31358],{"class":97},[91,169137,148128],{"class":5195},[91,169139,3717],{"class":101},[91,169141,169142,169144,169146,169149],{"class":93,"line":11},[91,169143,168859],{"class":5195},[91,169145,168862],{"class":101},[91,169147,169148],{"class":206},"\"中文内容\"",[91,169150,108],{"class":101},[33,169152,169154],{"id":169153},"_89-pathlib","8.9 pathlib",[38,169156,169157,169160],{},[88,169158,169159],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[83,169162,169164],{"className":30353,"code":169163,"language":30355,"meta":10,"style":10},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[88,169165,169166,169176,169180,169198],{"__ignoreMap":10},[91,169167,169168,169170,169172,169174],{"class":93,"line":94},[91,169169,30712],{"class":97},[91,169171,108286],{"class":101},[91,169173,30367],{"class":97},[91,169175,108291],{"class":101},[91,169177,169178],{"class":93,"line":11},[91,169179,2378],{"emptyLinePlaceholder":17},[91,169181,169182,169184,169186,169188,169191,169193,169195],{"class":93,"line":1157},[91,169183,168286],{"class":101},[91,169185,147],{"class":97},[91,169187,108520],{"class":101},[91,169189,169190],{"class":206},"\"data\"",[91,169192,13693],{"class":101},[91,169194,686],{"class":97},[91,169196,169197],{"class":206}," \"students.txt\"\n",[91,169199,169200,169202],{"class":93,"line":1172},[91,169201,30390],{"class":150},[91,169203,169204],{"class":101},"(path)\n",[38,169206,169207],{},"创建目录：",[83,169209,169211],{"className":30353,"code":169210,"language":30355,"meta":10,"style":10},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[88,169212,169213,169223,169227,169240],{"__ignoreMap":10},[91,169214,169215,169217,169219,169221],{"class":93,"line":94},[91,169216,30712],{"class":97},[91,169218,108286],{"class":101},[91,169220,30367],{"class":97},[91,169222,108291],{"class":101},[91,169224,169225],{"class":93,"line":11},[91,169226,2378],{"emptyLinePlaceholder":17},[91,169228,169229,169232,169234,169236,169238],{"class":93,"line":1157},[91,169230,169231],{"class":101},"data_dir ",[91,169233,147],{"class":97},[91,169235,108520],{"class":101},[91,169237,169190],{"class":206},[91,169239,108],{"class":101},[91,169241,169242,169245,169248,169250,169252],{"class":93,"line":1172},[91,169243,169244],{"class":101},"data_dir.mkdir(",[91,169246,169247],{"class":5195},"exist_ok",[91,169249,147],{"class":97},[91,169251,31451],{"class":150},[91,169253,108],{"class":101},[38,169255,169256],{},"判断文件是否存在：",[83,169258,169260],{"className":30353,"code":169259,"language":30355,"meta":10,"style":10},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[88,169261,169262,169275,169279,169286],{"__ignoreMap":10},[91,169263,169264,169266,169268,169270,169273],{"class":93,"line":94},[91,169265,168286],{"class":101},[91,169267,147],{"class":97},[91,169269,108520],{"class":101},[91,169271,169272],{"class":206},"\"data\u002Fstudents.txt\"",[91,169274,108],{"class":101},[91,169276,169277],{"class":93,"line":11},[91,169278,2378],{"emptyLinePlaceholder":17},[91,169280,169281,169283],{"class":93,"line":1157},[91,169282,1509],{"class":97},[91,169284,169285],{"class":101}," path.exists():\n",[91,169287,169288,169290,169292,169295],{"class":93,"line":1172},[91,169289,31274],{"class":150},[91,169291,102],{"class":101},[91,169293,169294],{"class":206},"\"文件存在\"",[91,169296,108],{"class":101},[38,169298,169299],{},"读写文本：",[83,169301,169303],{"className":30353,"code":169302,"language":30355,"meta":10,"style":10},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[88,169304,169305,169317,169321,169338,169355],{"__ignoreMap":10},[91,169306,169307,169309,169311,169313,169315],{"class":93,"line":94},[91,169308,168286],{"class":101},[91,169310,147],{"class":97},[91,169312,108520],{"class":101},[91,169314,146771],{"class":206},[91,169316,108],{"class":101},[91,169318,169319],{"class":93,"line":11},[91,169320,2378],{"emptyLinePlaceholder":17},[91,169322,169323,169326,169328,169330,169332,169334,169336],{"class":93,"line":1157},[91,169324,169325],{"class":101},"path.write_text(",[91,169327,145851],{"class":206},[91,169329,12414],{"class":101},[91,169331,146781],{"class":5195},[91,169333,147],{"class":97},[91,169335,146786],{"class":206},[91,169337,108],{"class":101},[91,169339,169340,169342,169344,169347,169349,169351,169353],{"class":93,"line":1172},[91,169341,168469],{"class":101},[91,169343,147],{"class":97},[91,169345,169346],{"class":101}," path.read_text(",[91,169348,146781],{"class":5195},[91,169350,147],{"class":97},[91,169352,146786],{"class":206},[91,169354,108],{"class":101},[91,169356,169357,169359],{"class":93,"line":1178},[91,169358,30390],{"class":150},[91,169360,168483],{"class":101},[33,169362,169364],{"id":169363},"_810-json文件","8.10 JSON文件",[38,169366,169367],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[83,169369,169371],{"className":30353,"code":169370,"language":30355,"meta":10,"style":10},"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",[88,169372,169373,169379,169383,169391,169401,169411,169419,169423,169427,169452],{"__ignoreMap":10},[91,169374,169375,169377],{"class":93,"line":94},[91,169376,30367],{"class":97},[91,169378,147066],{"class":101},[91,169380,169381],{"class":93,"line":11},[91,169382,2378],{"emptyLinePlaceholder":17},[91,169384,169385,169387,169389],{"class":93,"line":1157},[91,169386,149456],{"class":101},[91,169388,147],{"class":97},[91,169390,15551],{"class":101},[91,169392,169393,169395,169397,169399],{"class":93,"line":1172},[91,169394,146995],{"class":206},[91,169396,51412],{"class":101},[91,169398,149863],{"class":206},[91,169400,31441],{"class":101},[91,169402,169403,169405,169407,169409],{"class":93,"line":1178},[91,169404,164512],{"class":206},[91,169406,51412],{"class":101},[91,169408,752],{"class":150},[91,169410,31441],{"class":101},[91,169412,169413,169415,169417],{"class":93,"line":1192},[91,169414,164523],{"class":206},[91,169416,51412],{"class":101},[91,169418,164528],{"class":150},[91,169420,169421],{"class":93,"line":1198},[91,169422,1543],{"class":101},[91,169424,169425],{"class":93,"line":1289},[91,169426,2378],{"emptyLinePlaceholder":17},[91,169428,169429,169431,169433,169436,169438,169440,169442,169444,169446,169448,169450],{"class":93,"line":1295},[91,169430,156419],{"class":101},[91,169432,147],{"class":97},[91,169434,169435],{"class":101}," json.dumps(student, ",[91,169437,147112],{"class":5195},[91,169439,147],{"class":97},[91,169441,33962],{"class":150},[91,169443,12414],{"class":101},[91,169445,151987],{"class":5195},[91,169447,147],{"class":97},[91,169449,179],{"class":150},[91,169451,108],{"class":101},[91,169453,169454,169456],{"class":93,"line":1307},[91,169455,30390],{"class":150},[91,169457,164046],{"class":101},[38,169459,169460],{},"写入 JSON 文件：",[83,169462,169464],{"className":30353,"code":169463,"language":30355,"meta":10,"style":10},"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",[88,169465,169466,169472,169476,169484,169512,169540,169544,169548,169578],{"__ignoreMap":10},[91,169467,169468,169470],{"class":93,"line":94},[91,169469,30367],{"class":97},[91,169471,147066],{"class":101},[91,169473,169474],{"class":93,"line":11},[91,169475,2378],{"emptyLinePlaceholder":17},[91,169477,169478,169480,169482],{"class":93,"line":1157},[91,169479,159691],{"class":101},[91,169481,147],{"class":97},[91,169483,55422],{"class":101},[91,169485,169486,169488,169490,169492,169494,169496,169498,169500,169502,169504,169506,169508,169510],{"class":93,"line":1172},[91,169487,148360],{"class":101},[91,169489,62654],{"class":206},[91,169491,51412],{"class":101},[91,169493,149863],{"class":206},[91,169495,12414],{"class":101},[91,169497,69099],{"class":206},[91,169499,51412],{"class":101},[91,169501,752],{"class":150},[91,169503,12414],{"class":101},[91,169505,151447],{"class":206},[91,169507,51412],{"class":101},[91,169509,1091],{"class":150},[91,169511,4908],{"class":101},[91,169513,169514,169516,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538],{"class":93,"line":1178},[91,169515,148360],{"class":101},[91,169517,62654],{"class":206},[91,169519,51412],{"class":101},[91,169521,150911],{"class":206},[91,169523,12414],{"class":101},[91,169525,69099],{"class":206},[91,169527,51412],{"class":101},[91,169529,727],{"class":150},[91,169531,12414],{"class":101},[91,169533,151447],{"class":206},[91,169535,51412],{"class":101},[91,169537,913],{"class":150},[91,169539,4908],{"class":101},[91,169541,169542],{"class":93,"line":1192},[91,169543,33221],{"class":101},[91,169545,169546],{"class":93,"line":1198},[91,169547,2378],{"emptyLinePlaceholder":17},[91,169549,169550,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576],{"class":93,"line":1289},[91,169551,107808],{"class":97},[91,169553,146766],{"class":150},[91,169555,102],{"class":101},[91,169557,151806],{"class":206},[91,169559,12414],{"class":101},[91,169561,151951],{"class":206},[91,169563,12414],{"class":101},[91,169565,146781],{"class":5195},[91,169567,147],{"class":97},[91,169569,146786],{"class":206},[91,169571,13693],{"class":101},[91,169573,31358],{"class":97},[91,169575,148128],{"class":5195},[91,169577,3717],{"class":101},[91,169579,169580,169583,169585,169587,169589,169591,169593,169595,169597,169599,169601],{"class":93,"line":1295},[91,169581,169582],{"class":101},"    json.dump(students, ",[91,169584,45329],{"class":5195},[91,169586,12414],{"class":101},[91,169588,147112],{"class":5195},[91,169590,147],{"class":97},[91,169592,33962],{"class":150},[91,169594,12414],{"class":101},[91,169596,151987],{"class":5195},[91,169598,147],{"class":97},[91,169600,179],{"class":150},[91,169602,108],{"class":101},[38,169604,169605],{},"读取 JSON 文件：",[83,169607,169609],{"className":30353,"code":169608,"language":30355,"meta":10,"style":10},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[88,169610,169611,169617,169621,169651,169663,169667],{"__ignoreMap":10},[91,169612,169613,169615],{"class":93,"line":94},[91,169614,30367],{"class":97},[91,169616,147066],{"class":101},[91,169618,169619],{"class":93,"line":11},[91,169620,2378],{"emptyLinePlaceholder":17},[91,169622,169623,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649],{"class":93,"line":1157},[91,169624,107808],{"class":97},[91,169626,146766],{"class":150},[91,169628,102],{"class":101},[91,169630,151806],{"class":206},[91,169632,12414],{"class":101},[91,169634,146776],{"class":206},[91,169636,12414],{"class":101},[91,169638,146781],{"class":5195},[91,169640,147],{"class":97},[91,169642,146786],{"class":206},[91,169644,13693],{"class":101},[91,169646,31358],{"class":97},[91,169648,148128],{"class":5195},[91,169650,3717],{"class":101},[91,169652,169653,169655,169657,169659,169661],{"class":93,"line":1172},[91,169654,153012],{"class":101},[91,169656,147],{"class":97},[91,169658,148139],{"class":101},[91,169660,45329],{"class":5195},[91,169662,108],{"class":101},[91,169664,169665],{"class":93,"line":1178},[91,169666,2378],{"emptyLinePlaceholder":17},[91,169668,169669,169671],{"class":93,"line":1192},[91,169670,30390],{"class":150},[91,169672,164970],{"class":101},[33,169674,169676],{"id":169675},"_811-csv文件","8.11 CSV文件",[38,169678,169679],{},"CSV 是逗号分隔值，常用于表格数据。",[38,169681,169682],{},"写入 CSV：",[83,169684,169686],{"className":30353,"code":169685,"language":30355,"meta":10,"style":10},"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",[88,169687,169688,169695,169699,169707,169725,169741,169757,169761,169765,169805,169819],{"__ignoreMap":10},[91,169689,169690,169692],{"class":93,"line":94},[91,169691,30367],{"class":97},[91,169693,169694],{"class":101}," csv\n",[91,169696,169697],{"class":93,"line":11},[91,169698,2378],{"emptyLinePlaceholder":17},[91,169700,169701,169703,169705],{"class":93,"line":1157},[91,169702,159691],{"class":101},[91,169704,147],{"class":97},[91,169706,55422],{"class":101},[91,169708,169709,169712,169714,169716,169718,169720,169723],{"class":93,"line":1172},[91,169710,169711],{"class":101},"    [",[91,169713,73074],{"class":206},[91,169715,12414],{"class":101},[91,169717,73107],{"class":206},[91,169719,12414],{"class":101},[91,169721,169722],{"class":206},"\"成绩\"",[91,169724,87811],{"class":101},[91,169726,169727,169729,169731,169733,169735,169737,169739],{"class":93,"line":1178},[91,169728,169711],{"class":101},[91,169730,149863],{"class":206},[91,169732,12414],{"class":101},[91,169734,752],{"class":150},[91,169736,12414],{"class":101},[91,169738,1091],{"class":150},[91,169740,87811],{"class":101},[91,169742,169743,169745,169747,169749,169751,169753,169755],{"class":93,"line":1192},[91,169744,169711],{"class":101},[91,169746,150911],{"class":206},[91,169748,12414],{"class":101},[91,169750,727],{"class":150},[91,169752,12414],{"class":101},[91,169754,913],{"class":150},[91,169756,87811],{"class":101},[91,169758,169759],{"class":93,"line":1198},[91,169760,33221],{"class":101},[91,169762,169763],{"class":93,"line":1289},[91,169764,2378],{"emptyLinePlaceholder":17},[91,169766,169767,169769,169771,169773,169776,169778,169780,169782,169784,169786,169788,169790,169793,169795,169797,169799,169801,169803],{"class":93,"line":1295},[91,169768,107808],{"class":97},[91,169770,146766],{"class":150},[91,169772,102],{"class":101},[91,169774,169775],{"class":206},"\"students.csv\"",[91,169777,12414],{"class":101},[91,169779,151951],{"class":206},[91,169781,12414],{"class":101},[91,169783,146781],{"class":5195},[91,169785,147],{"class":97},[91,169787,146786],{"class":206},[91,169789,12414],{"class":101},[91,169791,169792],{"class":5195},"newline",[91,169794,147],{"class":97},[91,169796,7631],{"class":206},[91,169798,13693],{"class":101},[91,169800,31358],{"class":97},[91,169802,148128],{"class":5195},[91,169804,3717],{"class":101},[91,169806,169807,169810,169812,169815,169817],{"class":93,"line":1307},[91,169808,169809],{"class":101},"    writer ",[91,169811,147],{"class":97},[91,169813,169814],{"class":101}," csv.writer(",[91,169816,45329],{"class":5195},[91,169818,108],{"class":101},[91,169820,169821],{"class":93,"line":1590},[91,169822,169823],{"class":101},"    writer.writerows(students)\n",[38,169825,169826],{},"读取 CSV：",[83,169828,169830],{"className":30353,"code":169829,"language":30355,"meta":10,"style":10},"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",[88,169831,169832,169838,169842,169872,169886,169898],{"__ignoreMap":10},[91,169833,169834,169836],{"class":93,"line":94},[91,169835,30367],{"class":97},[91,169837,169694],{"class":101},[91,169839,169840],{"class":93,"line":11},[91,169841,2378],{"emptyLinePlaceholder":17},[91,169843,169844,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870],{"class":93,"line":1157},[91,169845,107808],{"class":97},[91,169847,146766],{"class":150},[91,169849,102],{"class":101},[91,169851,169775],{"class":206},[91,169853,12414],{"class":101},[91,169855,146776],{"class":206},[91,169857,12414],{"class":101},[91,169859,146781],{"class":5195},[91,169861,147],{"class":97},[91,169863,146786],{"class":206},[91,169865,13693],{"class":101},[91,169867,31358],{"class":97},[91,169869,148128],{"class":5195},[91,169871,3717],{"class":101},[91,169873,169874,169877,169879,169882,169884],{"class":93,"line":1172},[91,169875,169876],{"class":101},"    reader ",[91,169878,147],{"class":97},[91,169880,169881],{"class":101}," csv.reader(",[91,169883,45329],{"class":5195},[91,169885,108],{"class":101},[91,169887,169888,169890,169893,169895],{"class":93,"line":1178},[91,169889,3179],{"class":97},[91,169891,169892],{"class":101}," row ",[91,169894,26018],{"class":97},[91,169896,169897],{"class":101}," reader:\n",[91,169899,169900,169902],{"class":93,"line":1192},[91,169901,32426],{"class":150},[91,169903,169904],{"class":101},"(row)\n",[38,169906,169907],{},"使用字典写入：",[83,169909,169911],{"className":30353,"code":169910,"language":30355,"meta":10,"style":10},"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",[88,169912,169913,169919,169923,169931,169959,169987,169991,169995,170033,170054,170075,170080],{"__ignoreMap":10},[91,169914,169915,169917],{"class":93,"line":94},[91,169916,30367],{"class":97},[91,169918,169694],{"class":101},[91,169920,169921],{"class":93,"line":11},[91,169922,2378],{"emptyLinePlaceholder":17},[91,169924,169925,169927,169929],{"class":93,"line":1157},[91,169926,159691],{"class":101},[91,169928,147],{"class":97},[91,169930,55422],{"class":101},[91,169932,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957],{"class":93,"line":1172},[91,169934,148360],{"class":101},[91,169936,62654],{"class":206},[91,169938,51412],{"class":101},[91,169940,149863],{"class":206},[91,169942,12414],{"class":101},[91,169944,69099],{"class":206},[91,169946,51412],{"class":101},[91,169948,752],{"class":150},[91,169950,12414],{"class":101},[91,169952,151447],{"class":206},[91,169954,51412],{"class":101},[91,169956,1091],{"class":150},[91,169958,4908],{"class":101},[91,169960,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985],{"class":93,"line":1178},[91,169962,148360],{"class":101},[91,169964,62654],{"class":206},[91,169966,51412],{"class":101},[91,169968,150911],{"class":206},[91,169970,12414],{"class":101},[91,169972,69099],{"class":206},[91,169974,51412],{"class":101},[91,169976,727],{"class":150},[91,169978,12414],{"class":101},[91,169980,151447],{"class":206},[91,169982,51412],{"class":101},[91,169984,913],{"class":150},[91,169986,4908],{"class":101},[91,169988,169989],{"class":93,"line":1192},[91,169990,33221],{"class":101},[91,169992,169993],{"class":93,"line":1198},[91,169994,2378],{"emptyLinePlaceholder":17},[91,169996,169997,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031],{"class":93,"line":1289},[91,169998,107808],{"class":97},[91,170000,146766],{"class":150},[91,170002,102],{"class":101},[91,170004,169775],{"class":206},[91,170006,12414],{"class":101},[91,170008,151951],{"class":206},[91,170010,12414],{"class":101},[91,170012,146781],{"class":5195},[91,170014,147],{"class":97},[91,170016,146786],{"class":206},[91,170018,12414],{"class":101},[91,170020,169792],{"class":5195},[91,170022,147],{"class":97},[91,170024,7631],{"class":206},[91,170026,13693],{"class":101},[91,170028,31358],{"class":97},[91,170030,148128],{"class":5195},[91,170032,3717],{"class":101},[91,170034,170035,170038,170040,170042,170044,170046,170048,170050,170052],{"class":93,"line":1295},[91,170036,170037],{"class":101},"    fieldnames ",[91,170039,147],{"class":97},[91,170041,52201],{"class":101},[91,170043,62654],{"class":206},[91,170045,12414],{"class":101},[91,170047,69099],{"class":206},[91,170049,12414],{"class":101},[91,170051,151447],{"class":206},[91,170053,33221],{"class":101},[91,170055,170056,170058,170060,170063,170065,170067,170070,170072],{"class":93,"line":1307},[91,170057,169809],{"class":101},[91,170059,147],{"class":97},[91,170061,170062],{"class":101}," csv.DictWriter(",[91,170064,45329],{"class":5195},[91,170066,12414],{"class":101},[91,170068,170069],{"class":5195},"fieldnames",[91,170071,147],{"class":97},[91,170073,170074],{"class":101},"fieldnames)\n",[91,170076,170077],{"class":93,"line":1590},[91,170078,170079],{"class":101},"    writer.writeheader()\n",[91,170081,170082],{"class":93,"line":1595},[91,170083,169823],{"class":101},[33,170085,170087],{"id":170086},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[38,170089,123267],{},[46,170091,170092,170095,170098],{},[49,170093,170094],{},"读取文本文件。",[49,170096,170097],{},"统计每个单词出现次数。",[49,170099,170100],{},"输出出现次数最多的前 10 个单词。",[38,170102,10014],{},[83,170104,170106],{"className":30353,"code":170105,"language":30355,"meta":10,"style":10},"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",[88,170107,170108,170118,170122,170135,170151,170155,170165,170174,170178,170190,170210,170219,170223,170241,170245,170275,170279,170295],{"__ignoreMap":10},[91,170109,170110,170112,170114,170116],{"class":93,"line":94},[91,170111,30712],{"class":97},[91,170113,108286],{"class":101},[91,170115,30367],{"class":97},[91,170117,108291],{"class":101},[91,170119,170120],{"class":93,"line":11},[91,170121,2378],{"emptyLinePlaceholder":17},[91,170123,170124,170126,170128,170130,170133],{"class":93,"line":1157},[91,170125,168286],{"class":101},[91,170127,147],{"class":97},[91,170129,108520],{"class":101},[91,170131,170132],{"class":206},"\"article.txt\"",[91,170134,108],{"class":101},[91,170136,170137,170139,170141,170143,170145,170147,170149],{"class":93,"line":1172},[91,170138,168469],{"class":101},[91,170140,147],{"class":97},[91,170142,169346],{"class":101},[91,170144,146781],{"class":5195},[91,170146,147],{"class":97},[91,170148,146786],{"class":206},[91,170150,108],{"class":101},[91,170152,170153],{"class":93,"line":1178},[91,170154,2378],{"emptyLinePlaceholder":17},[91,170156,170157,170160,170162],{"class":93,"line":1192},[91,170158,170159],{"class":101},"words ",[91,170161,147],{"class":97},[91,170163,170164],{"class":101}," content.lower().split()\n",[91,170166,170167,170170,170172],{"class":93,"line":1198},[91,170168,170169],{"class":101},"counter ",[91,170171,147],{"class":97},[91,170173,87843],{"class":101},[91,170175,170176],{"class":93,"line":1289},[91,170177,2378],{"emptyLinePlaceholder":17},[91,170179,170180,170182,170185,170187],{"class":93,"line":1295},[91,170181,3003],{"class":97},[91,170183,170184],{"class":101}," word ",[91,170186,26018],{"class":97},[91,170188,170189],{"class":101}," words:\n",[91,170191,170192,170195,170197,170200,170203,170205,170208],{"class":93,"line":1307},[91,170193,170194],{"class":101},"    word ",[91,170196,147],{"class":97},[91,170198,170199],{"class":101}," word.strip(",[91,170201,170202],{"class":206},"\".,!?;:",[91,170204,156470],{"class":150},[91,170206,170207],{"class":206},"'()[]\"",[91,170209,108],{"class":101},[91,170211,170212,170214,170216],{"class":93,"line":1590},[91,170213,3079],{"class":97},[91,170215,38905],{"class":97},[91,170217,170218],{"class":101}," word:\n",[91,170220,170221],{"class":93,"line":1595},[91,170222,148487],{"class":97},[91,170224,170225,170228,170230,170233,170235,170237,170239],{"class":93,"line":1601},[91,170226,170227],{"class":101},"    counter[word] ",[91,170229,147],{"class":97},[91,170231,170232],{"class":101}," counter.get(word, ",[91,170234,293],{"class":150},[91,170236,13693],{"class":101},[91,170238,583],{"class":97},[91,170240,55674],{"class":150},[91,170242,170243],{"class":93,"line":1606},[91,170244,2378],{"emptyLinePlaceholder":17},[91,170246,170247,170250,170252,170254,170257,170259,170261,170263,170265,170267,170269,170271,170273],{"class":93,"line":1620},[91,170248,170249],{"class":101},"items ",[91,170251,147],{"class":97},[91,170253,163579],{"class":150},[91,170255,170256],{"class":101},"(counter.items(), ",[91,170258,153921],{"class":5195},[91,170260,153924],{"class":97},[91,170262,153927],{"class":101},[91,170264,319],{"class":150},[91,170266,112177],{"class":101},[91,170268,163503],{"class":5195},[91,170270,147],{"class":97},[91,170272,31451],{"class":150},[91,170274,108],{"class":101},[91,170276,170277],{"class":93,"line":1625},[91,170278,2378],{"emptyLinePlaceholder":17},[91,170280,170281,170283,170286,170288,170291,170293],{"class":93,"line":1631},[91,170282,3003],{"class":97},[91,170284,170285],{"class":101}," word, count ",[91,170287,26018],{"class":97},[91,170289,170290],{"class":101}," items[:",[91,170292,548],{"class":150},[91,170294,165730],{"class":101},[91,170296,170297,170299],{"class":93,"line":1652},[91,170298,31274],{"class":150},[91,170300,170301],{"class":101},"(word, count)\n",[33,170303,170305],{"id":170304},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[83,170307,170309],{"className":30353,"code":170308,"language":30355,"meta":10,"style":10},"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",[88,170310,170311,170317,170327,170331,170343,170347,170351,170359,170369,170375,170379,170409,170419,170423,170427,170435,170465,170489,170493,170497,170505,170534,170539],{"__ignoreMap":10},[91,170312,170313,170315],{"class":93,"line":94},[91,170314,30367],{"class":97},[91,170316,147066],{"class":101},[91,170318,170319,170321,170323,170325],{"class":93,"line":11},[91,170320,30712],{"class":97},[91,170322,108286],{"class":101},[91,170324,30367],{"class":97},[91,170326,108291],{"class":101},[91,170328,170329],{"class":93,"line":1157},[91,170330,2378],{"emptyLinePlaceholder":17},[91,170332,170333,170335,170337,170339,170341],{"class":93,"line":1172},[91,170334,151799],{"class":150},[91,170336,13543],{"class":97},[91,170338,108520],{"class":101},[91,170340,151806],{"class":206},[91,170342,108],{"class":101},[91,170344,170345],{"class":93,"line":1178},[91,170346,2378],{"emptyLinePlaceholder":17},[91,170348,170349],{"class":93,"line":1192},[91,170350,2378],{"emptyLinePlaceholder":17},[91,170352,170353,170355,170357],{"class":93,"line":1198},[91,170354,31922],{"class":97},[91,170356,151823],{"class":1941},[91,170358,31928],{"class":101},[91,170360,170361,170363,170365,170367],{"class":93,"line":1289},[91,170362,3079],{"class":97},[91,170364,38905],{"class":97},[91,170366,151834],{"class":150},[91,170368,151837],{"class":101},[91,170370,170371,170373],{"class":93,"line":1295},[91,170372,14731],{"class":97},[91,170374,51813],{"class":101},[91,170376,170377],{"class":93,"line":1307},[91,170378,2378],{"emptyLinePlaceholder":17},[91,170380,170381,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407],{"class":93,"line":1590},[91,170382,34153],{"class":97},[91,170384,146766],{"class":150},[91,170386,102],{"class":101},[91,170388,151799],{"class":150},[91,170390,12414],{"class":101},[91,170392,146776],{"class":206},[91,170394,12414],{"class":101},[91,170396,146781],{"class":5195},[91,170398,147],{"class":97},[91,170400,146786],{"class":206},[91,170402,13693],{"class":101},[91,170404,31358],{"class":97},[91,170406,148128],{"class":5195},[91,170408,3717],{"class":101},[91,170410,170411,170413,170415,170417],{"class":93,"line":1595},[91,170412,14731],{"class":97},[91,170414,148139],{"class":101},[91,170416,45329],{"class":5195},[91,170418,108],{"class":101},[91,170420,170421],{"class":93,"line":1601},[91,170422,2378],{"emptyLinePlaceholder":17},[91,170424,170425],{"class":93,"line":1606},[91,170426,2378],{"emptyLinePlaceholder":17},[91,170428,170429,170431,170433],{"class":93,"line":1620},[91,170430,31922],{"class":97},[91,170432,151933],{"class":1941},[91,170434,151936],{"class":101},[91,170436,170437,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463],{"class":93,"line":1625},[91,170438,34153],{"class":97},[91,170440,146766],{"class":150},[91,170442,102],{"class":101},[91,170444,151799],{"class":150},[91,170446,12414],{"class":101},[91,170448,151951],{"class":206},[91,170450,12414],{"class":101},[91,170452,146781],{"class":5195},[91,170454,147],{"class":97},[91,170456,146786],{"class":206},[91,170458,13693],{"class":101},[91,170460,31358],{"class":97},[91,170462,148128],{"class":5195},[91,170464,3717],{"class":101},[91,170466,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487],{"class":93,"line":1631},[91,170468,151972],{"class":101},[91,170470,45329],{"class":5195},[91,170472,12414],{"class":101},[91,170474,147112],{"class":5195},[91,170476,147],{"class":97},[91,170478,33962],{"class":150},[91,170480,12414],{"class":101},[91,170482,151987],{"class":5195},[91,170484,147],{"class":97},[91,170486,179],{"class":150},[91,170488,108],{"class":101},[91,170490,170491],{"class":93,"line":1652},[91,170492,2378],{"emptyLinePlaceholder":17},[91,170494,170495],{"class":93,"line":1657},[91,170496,2378],{"emptyLinePlaceholder":17},[91,170498,170499,170501,170503],{"class":93,"line":1671},[91,170500,159691],{"class":101},[91,170502,147],{"class":97},[91,170504,153017],{"class":101},[91,170506,170507,170510,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532],{"class":93,"line":1676},[91,170508,170509],{"class":101},"students.append({",[91,170511,62654],{"class":206},[91,170513,51412],{"class":101},[91,170515,149863],{"class":206},[91,170517,12414],{"class":101},[91,170519,69099],{"class":206},[91,170521,51412],{"class":101},[91,170523,752],{"class":150},[91,170525,12414],{"class":101},[91,170527,151447],{"class":206},[91,170529,51412],{"class":101},[91,170531,1091],{"class":150},[91,170533,165127],{"class":101},[91,170535,170536],{"class":93,"line":1705},[91,170537,170538],{"class":101},"save_students(students)\n",[91,170540,170541,170543,170545,170548],{"class":93,"line":1710},[91,170542,30390],{"class":150},[91,170544,102],{"class":101},[91,170546,170547],{"class":206},"\"保存成功\"",[91,170549,108],{"class":101},[33,170551,170553],{"id":170552},"_814-易错点","8.14 易错点",[46,170555,170556,170560,170566,170571,170578,170585],{},[49,170557,170558,168819],{},[88,170559,897],{},[49,170561,170562,170563,28360],{},"读写中文要指定 ",[88,170564,170565],{},"encoding=\"utf-8\"",[49,170567,170568,170569,28360],{},"打开文件后要关闭，推荐使用 ",[88,170570,107808],{},[49,170572,170573,170574,170577],{},"读取大文件不要直接 ",[88,170575,170576],{},"read()"," 全部内容。",[49,170579,170580,170581,170584],{},"Windows 写 CSV 时建议加 ",[88,170582,170583],{},"newline=\"\"","，避免空行。",[49,170586,170587],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[33,170589,170591],{"id":170590},"_815-本章练习","8.15 本章练习",[46,170593,170594,170601,170606,170609,170612],{},[49,170595,170596,170597,170600],{},"写入一个 ",[88,170598,170599],{},"students.txt","，每行保存一个学生姓名。",[49,170602,104330,170603,170605],{},[88,170604,170599],{}," 并输出所有学生。",[49,170607,170608],{},"把学生列表保存为 JSON 文件。",[49,170610,170611],{},"从 JSON 文件读取学生数据，计算平均分。",[49,170613,170614,170615,170618,170619,170622],{},"写一个日志函数 ",[88,170616,170617],{},"write_log(message)","，每次调用向 ",[88,170620,170621],{},"app.log"," 追加一行。",[5105,170624,170625],{},"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":10,"searchDepth":11,"depth":11,"links":170627},[170628,170629,170633,170634,170640,170641,170642,170643,170644,170645,170646,170647,170648,170649,170650],{"id":168139,"depth":11,"text":168140},{"id":168180,"depth":11,"text":168181,"children":170630},[170631,170632],{"id":168184,"depth":1157,"text":168185},{"id":168218,"depth":1157,"text":168219},{"id":168332,"depth":11,"text":168333},{"id":168425,"depth":11,"text":168426,"children":170635},[170636,170637,170638,170639],{"id":168429,"depth":1157,"text":168430},{"id":168516,"depth":1157,"text":168517},{"id":168586,"depth":1157,"text":168587},{"id":168680,"depth":1157,"text":168681},{"id":168750,"depth":11,"text":168751},{"id":168813,"depth":11,"text":168814},{"id":168974,"depth":11,"text":168975},{"id":169037,"depth":11,"text":169038},{"id":169153,"depth":11,"text":169154},{"id":169363,"depth":11,"text":169364},{"id":169675,"depth":11,"text":169676},{"id":170086,"depth":11,"text":170087},{"id":170304,"depth":11,"text":170305},{"id":170552,"depth":11,"text":170553},{"id":170590,"depth":11,"text":170591},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168131,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170657,"title":170658,"body":170659,"description":13,"extension":14,"meta":172845,"navigation":17,"path":172846,"seo":172847,"stem":172848,"__hash__":172849},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170660,"toc":172812},[170661,170664,170668,170671,170674,170766,170768,170787,170792,170796,170799,170802,170831,170838,170841,170845,170848,170877,170879,170931,170937,170990,170994,171092,171095,171162,171166,171223,171225,171231,171235,171240,171246,171337,171342,171346,171349,171427,171430,171468,171472,171590,171593,171597,171600,171645,171648,171652,171657,171663,171713,171716,171747,171751,171755,171785,171789,171824,171828,171863,171903,171907,171923,171926,171930,171934,172013,172017,172058,172062,172117,172121,172155,172159,172189,172198,172205,172211,172268,172271,172279,172282,172286,172293,172296,172302,172305,172322,172327,172331,172337,172350,172353,172390,172393,172404,172407,172421,172424,172438,172442,172449,172482,172485,172487,172493,172496,172500,172502,172508,172513,172686,172690,172753,172757,172781,172785,172809],[29,170662,170658],{"id":170663},"_9-异常模块与包",[33,170665,170667],{"id":170666},"_91-什么是异常","9.1 什么是异常",[38,170669,170670],{},"异常是程序运行过程中出现的错误。",[38,170672,170673],{},"常见异常：",[239,170675,170676,170685],{},[242,170677,170678],{},[245,170679,170680,170683],{},[248,170681,170682],{},"异常",[248,170684,25844],{},[286,170686,170687,170697,170707,170716,170726,170736,170746,170756],{},[245,170688,170689,170694],{},[291,170690,170691],{},[88,170692,170693],{},"NameError",[291,170695,170696],{},"使用了未定义变量",[245,170698,170699,170704],{},[291,170700,170701],{},[88,170702,170703],{},"TypeError",[291,170705,170706],{},"类型不匹配",[245,170708,170709,170713],{},[291,170710,170711],{},[88,170712,154809],{},[291,170714,170715],{},"值不合法",[245,170717,170718,170723],{},[291,170719,170720],{},[88,170721,170722],{},"IndexError",[291,170724,170725],{},"列表索引越界",[245,170727,170728,170733],{},[291,170729,170730],{},[88,170731,170732],{},"KeyError",[291,170734,170735],{},"字典 key 不存在",[245,170737,170738,170743],{},[291,170739,170740],{},[88,170741,170742],{},"FileNotFoundError",[291,170744,170745],{},"文件不存在",[245,170747,170748,170753],{},[291,170749,170750],{},[88,170751,170752],{},"ZeroDivisionError",[291,170754,170755],{},"除数为 0",[245,170757,170758,170763],{},[291,170759,170760],{},[88,170761,170762],{},"ImportError",[291,170764,170765],{},"导入失败",[38,170767,15114],{},[83,170769,170771],{"className":30353,"code":170770,"language":30355,"meta":10,"style":10},"num = int(\"abc\")\n",[88,170772,170773],{"__ignoreMap":10},[91,170774,170775,170777,170779,170781,170783,170785],{"class":93,"line":94},[91,170776,155762],{"class":101},[91,170778,147],{"class":97},[91,170780,2360],{"class":150},[91,170782,102],{"class":101},[91,170784,155855],{"class":206},[91,170786,108],{"class":101},[38,170788,170789,170790,28360],{},"会触发 ",[88,170791,154809],{},[33,170793,170795],{"id":170794},"_92-为什么要处理异常","9.2 为什么要处理异常",[38,170797,170798],{},"如果不处理异常，程序会直接终止。",[38,170800,170801],{},"例如用户输入年龄：",[83,170803,170805],{"className":30353,"code":170804,"language":30355,"meta":10,"style":10},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[88,170806,170807,170825],{"__ignoreMap":10},[91,170808,170809,170811,170813,170815,170817,170819,170821,170823],{"class":93,"line":94},[91,170810,146521],{"class":101},[91,170812,147],{"class":97},[91,170814,2360],{"class":150},[91,170816,102],{"class":101},[91,170818,53796],{"class":150},[91,170820,102],{"class":101},[91,170822,152369],{"class":206},[91,170824,30472],{"class":101},[91,170826,170827,170829],{"class":93,"line":11},[91,170828,30390],{"class":150},[91,170830,155736],{"class":101},[38,170832,170833,170834,170837],{},"用户输入 ",[88,170835,170836],{},"abc","，程序就会报错退出。",[38,170839,170840],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[33,170842,170844],{"id":170843},"_93-try-except","9.3 try except",[38,170846,170847],{},"基础语法：",[83,170849,170851],{"className":30353,"code":170850,"language":30355,"meta":10,"style":10},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[88,170852,170853,170860,170865,170872],{"__ignoreMap":10},[91,170854,170855,170858],{"class":93,"line":94},[91,170856,170857],{"class":97},"try",[91,170859,3717],{"class":101},[91,170861,170862],{"class":93,"line":11},[91,170863,170864],{"class":101},"    可能出错的代码\n",[91,170866,170867,170870],{"class":93,"line":1157},[91,170868,170869],{"class":97},"except",[91,170871,3717],{"class":101},[91,170873,170874],{"class":93,"line":1172},[91,170875,170876],{"class":101},"    出错后的处理代码\n",[38,170878,15114],{},[83,170880,170882],{"className":30353,"code":170881,"language":30355,"meta":10,"style":10},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[88,170883,170884,170890,170908,170914,170920],{"__ignoreMap":10},[91,170885,170886,170888],{"class":93,"line":94},[91,170887,170857],{"class":97},[91,170889,3717],{"class":101},[91,170891,170892,170894,170896,170898,170900,170902,170904,170906],{"class":93,"line":11},[91,170893,152361],{"class":101},[91,170895,147],{"class":97},[91,170897,2360],{"class":150},[91,170899,102],{"class":101},[91,170901,53796],{"class":150},[91,170903,102],{"class":101},[91,170905,152369],{"class":206},[91,170907,30472],{"class":101},[91,170909,170910,170912],{"class":93,"line":1157},[91,170911,31274],{"class":150},[91,170913,155736],{"class":101},[91,170915,170916,170918],{"class":93,"line":1172},[91,170917,170869],{"class":97},[91,170919,3717],{"class":101},[91,170921,170922,170924,170926,170929],{"class":93,"line":1178},[91,170923,31274],{"class":150},[91,170925,102],{"class":101},[91,170927,170928],{"class":206},"\"年龄必须是数字\"",[91,170930,108],{"class":101},[38,170932,170933,170934,170936],{},"不建议裸写 ",[88,170935,170869],{},"，最好指定异常类型。",[83,170938,170940],{"className":30353,"code":170939,"language":30355,"meta":10,"style":10},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[88,170941,170942,170948,170966,170972,170980],{"__ignoreMap":10},[91,170943,170944,170946],{"class":93,"line":94},[91,170945,170857],{"class":97},[91,170947,3717],{"class":101},[91,170949,170950,170952,170954,170956,170958,170960,170962,170964],{"class":93,"line":11},[91,170951,152361],{"class":101},[91,170953,147],{"class":97},[91,170955,2360],{"class":150},[91,170957,102],{"class":101},[91,170959,53796],{"class":150},[91,170961,102],{"class":101},[91,170963,152369],{"class":206},[91,170965,30472],{"class":101},[91,170967,170968,170970],{"class":93,"line":1157},[91,170969,31274],{"class":150},[91,170971,155736],{"class":101},[91,170973,170974,170976,170978],{"class":93,"line":1172},[91,170975,170869],{"class":97},[91,170977,152201],{"class":150},[91,170979,3717],{"class":101},[91,170981,170982,170984,170986,170988],{"class":93,"line":1178},[91,170983,31274],{"class":150},[91,170985,102],{"class":101},[91,170987,170928],{"class":206},[91,170989,108],{"class":101},[33,170991,170993],{"id":170992},"_94-捕获多个异常","9.4 捕获多个异常",[83,170995,170997],{"className":30353,"code":170996,"language":30355,"meta":10,"style":10},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[88,170998,170999,171005,171026,171046,171053,171061,171072,171081],{"__ignoreMap":10},[91,171000,171001,171003],{"class":93,"line":94},[91,171002,170857],{"class":97},[91,171004,3717],{"class":101},[91,171006,171007,171010,171012,171014,171016,171018,171020,171022,171024],{"class":93,"line":11},[91,171008,171009],{"class":101},"    nums ",[91,171011,147],{"class":97},[91,171013,52201],{"class":101},[91,171015,319],{"class":150},[91,171017,12414],{"class":101},[91,171019,179],{"class":150},[91,171021,12414],{"class":101},[91,171023,173],{"class":150},[91,171025,33221],{"class":101},[91,171027,171028,171031,171033,171035,171037,171039,171041,171044],{"class":93,"line":1157},[91,171029,171030],{"class":101},"    index ",[91,171032,147],{"class":97},[91,171034,2360],{"class":150},[91,171036,102],{"class":101},[91,171038,53796],{"class":150},[91,171040,102],{"class":101},[91,171042,171043],{"class":206},"\"请输入索引:\"",[91,171045,30472],{"class":101},[91,171047,171048,171050],{"class":93,"line":1172},[91,171049,31274],{"class":150},[91,171051,171052],{"class":101},"(nums[index])\n",[91,171054,171055,171057,171059],{"class":93,"line":1178},[91,171056,170869],{"class":97},[91,171058,152201],{"class":150},[91,171060,3717],{"class":101},[91,171062,171063,171065,171067,171070],{"class":93,"line":1192},[91,171064,31274],{"class":150},[91,171066,102],{"class":101},[91,171068,171069],{"class":206},"\"索引必须是整数\"",[91,171071,108],{"class":101},[91,171073,171074,171076,171079],{"class":93,"line":1198},[91,171075,170869],{"class":97},[91,171077,171078],{"class":150}," IndexError",[91,171080,3717],{"class":101},[91,171082,171083,171085,171087,171090],{"class":93,"line":1289},[91,171084,31274],{"class":150},[91,171086,102],{"class":101},[91,171088,171089],{"class":206},"\"索引越界\"",[91,171091,108],{"class":101},[38,171093,171094],{},"多个异常使用相同处理逻辑：",[83,171096,171098],{"className":30353,"code":171097,"language":30355,"meta":10,"style":10},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[88,171099,171100,171106,171124,171137,171151],{"__ignoreMap":10},[91,171101,171102,171104],{"class":93,"line":94},[91,171103,170857],{"class":97},[91,171105,3717],{"class":101},[91,171107,171108,171110,171112,171114,171116,171118,171120,171122],{"class":93,"line":11},[91,171109,45568],{"class":101},[91,171111,147],{"class":97},[91,171113,2360],{"class":150},[91,171115,102],{"class":101},[91,171117,53796],{"class":150},[91,171119,102],{"class":101},[91,171121,155771],{"class":206},[91,171123,30472],{"class":101},[91,171125,171126,171128,171130,171132,171134],{"class":93,"line":1157},[91,171127,31274],{"class":150},[91,171129,102],{"class":101},[91,171131,548],{"class":150},[91,171133,156021],{"class":97},[91,171135,171136],{"class":101}," num)\n",[91,171138,171139,171141,171143,171145,171147,171149],{"class":93,"line":1172},[91,171140,170869],{"class":97},[91,171142,1636],{"class":101},[91,171144,154809],{"class":150},[91,171146,12414],{"class":101},[91,171148,170752],{"class":150},[91,171150,30761],{"class":101},[91,171152,171153,171155,171157,171160],{"class":93,"line":1178},[91,171154,31274],{"class":150},[91,171156,102],{"class":101},[91,171158,171159],{"class":206},"\"输入不合法\"",[91,171161,108],{"class":101},[33,171163,171165],{"id":171164},"_95-获取异常信息","9.5 获取异常信息",[83,171167,171169],{"className":30353,"code":171168,"language":30355,"meta":10,"style":10},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[88,171170,171171,171177,171191,171202],{"__ignoreMap":10},[91,171172,171173,171175],{"class":93,"line":94},[91,171174,170857],{"class":97},[91,171176,3717],{"class":101},[91,171178,171179,171181,171183,171185,171187,171189],{"class":93,"line":11},[91,171180,45568],{"class":101},[91,171182,147],{"class":97},[91,171184,2360],{"class":150},[91,171186,102],{"class":101},[91,171188,155855],{"class":206},[91,171190,108],{"class":101},[91,171192,171193,171195,171197,171199],{"class":93,"line":1157},[91,171194,170869],{"class":97},[91,171196,152201],{"class":150},[91,171198,64579],{"class":97},[91,171200,171201],{"class":101}," e:\n",[91,171203,171204,171206,171208,171210,171213,171215,171217,171219,171221],{"class":93,"line":1172},[91,171205,31274],{"class":150},[91,171207,102],{"class":101},[91,171209,154],{"class":97},[91,171211,171212],{"class":206},"\"出错了:",[91,171214,998],{"class":150},[91,171216,176],{"class":101},[91,171218,1048],{"class":150},[91,171220,353],{"class":206},[91,171222,108],{"class":101},[38,171224,146432],{},[83,171226,171229],{"className":171227,"code":171228,"language":5166,"meta":10},[5164],"出错了:invalid literal for int() with base 10: 'abc'\n",[88,171230,171228],{"__ignoreMap":10},[33,171232,171234],{"id":171233},"_96-else和finally","9.6 else和finally",[38,171236,171237,171239],{},[88,171238,1679],{},"：没有异常时执行。",[38,171241,171242,171245],{},[88,171243,171244],{},"finally","：无论是否异常都会执行。",[83,171247,171249],{"className":30353,"code":171248,"language":30355,"meta":10,"style":10},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[88,171250,171251,171257,171275,171283,171293,171299,171320,171326],{"__ignoreMap":10},[91,171252,171253,171255],{"class":93,"line":94},[91,171254,170857],{"class":97},[91,171256,3717],{"class":101},[91,171258,171259,171261,171263,171265,171267,171269,171271,171273],{"class":93,"line":11},[91,171260,45568],{"class":101},[91,171262,147],{"class":97},[91,171264,2360],{"class":150},[91,171266,102],{"class":101},[91,171268,53796],{"class":150},[91,171270,102],{"class":101},[91,171272,155771],{"class":206},[91,171274,30472],{"class":101},[91,171276,171277,171279,171281],{"class":93,"line":1157},[91,171278,170869],{"class":97},[91,171280,152201],{"class":150},[91,171282,3717],{"class":101},[91,171284,171285,171287,171289,171291],{"class":93,"line":1172},[91,171286,31274],{"class":150},[91,171288,102],{"class":101},[91,171290,153189],{"class":206},[91,171292,108],{"class":101},[91,171294,171295,171297],{"class":93,"line":1178},[91,171296,1679],{"class":97},[91,171298,3717],{"class":101},[91,171300,171301,171303,171305,171307,171310,171312,171314,171316,171318],{"class":93,"line":1192},[91,171302,31274],{"class":150},[91,171304,102],{"class":101},[91,171306,154],{"class":97},[91,171308,171309],{"class":206},"\"输入正确:",[91,171311,998],{"class":150},[91,171313,1643],{"class":101},[91,171315,1048],{"class":150},[91,171317,353],{"class":206},[91,171319,108],{"class":101},[91,171321,171322,171324],{"class":93,"line":1198},[91,171323,171244],{"class":97},[91,171325,3717],{"class":101},[91,171327,171328,171330,171332,171335],{"class":93,"line":1289},[91,171329,31274],{"class":150},[91,171331,102],{"class":101},[91,171333,171334],{"class":206},"\"程序结束\"",[91,171336,108],{"class":101},[38,171338,171339,171341],{},[88,171340,171244],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[33,171343,171345],{"id":171344},"_97-抛出异常","9.7 抛出异常",[38,171347,171348],{},"程序可以主动抛出异常。",[83,171350,171352],{"className":30353,"code":171351,"language":30355,"meta":10,"style":10},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[88,171353,171354,171363,171375,171388,171408,171412,171416],{"__ignoreMap":10},[91,171355,171356,171358,171361],{"class":93,"line":94},[91,171357,31922],{"class":97},[91,171359,171360],{"class":1941}," set_age",[91,171362,161390],{"class":101},[91,171364,171365,171367,171369,171371,171373],{"class":93,"line":11},[91,171366,3079],{"class":97},[91,171368,15686],{"class":101},[91,171370,1012],{"class":97},[91,171372,4071],{"class":150},[91,171374,3717],{"class":101},[91,171376,171377,171379,171381,171383,171386],{"class":93,"line":1157},[91,171378,103407],{"class":97},[91,171380,152201],{"class":150},[91,171382,102],{"class":101},[91,171384,171385],{"class":206},"\"年龄不能为负数\"",[91,171387,108],{"class":101},[91,171389,171390,171392,171394,171396,171398,171400,171402,171404,171406],{"class":93,"line":1172},[91,171391,31274],{"class":150},[91,171393,102],{"class":101},[91,171395,154],{"class":97},[91,171397,161958],{"class":206},[91,171399,998],{"class":150},[91,171401,70196],{"class":101},[91,171403,1048],{"class":150},[91,171405,353],{"class":206},[91,171407,108],{"class":101},[91,171409,171410],{"class":93,"line":1178},[91,171411,2378],{"emptyLinePlaceholder":17},[91,171413,171414],{"class":93,"line":1192},[91,171415,2378],{"emptyLinePlaceholder":17},[91,171417,171418,171421,171423,171425],{"class":93,"line":1198},[91,171419,171420],{"class":101},"set_age(",[91,171422,634],{"class":97},[91,171424,319],{"class":150},[91,171426,108],{"class":101},[38,171428,171429],{},"调用者可以捕获：",[83,171431,171433],{"className":30353,"code":171432,"language":30355,"meta":10,"style":10},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[88,171434,171435,171441,171452,171462],{"__ignoreMap":10},[91,171436,171437,171439],{"class":93,"line":94},[91,171438,170857],{"class":97},[91,171440,3717],{"class":101},[91,171442,171443,171446,171448,171450],{"class":93,"line":11},[91,171444,171445],{"class":101},"    set_age(",[91,171447,634],{"class":97},[91,171449,319],{"class":150},[91,171451,108],{"class":101},[91,171453,171454,171456,171458,171460],{"class":93,"line":1157},[91,171455,170869],{"class":97},[91,171457,152201],{"class":150},[91,171459,64579],{"class":97},[91,171461,171201],{"class":101},[91,171463,171464,171466],{"class":93,"line":1172},[91,171465,31274],{"class":150},[91,171467,66974],{"class":101},[33,171469,171471],{"id":171470},"_98-自定义异常","9.8 自定义异常",[83,171473,171475],{"className":30353,"code":171474,"language":30355,"meta":10,"style":10},"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",[88,171476,171477,171491,171495,171499,171503,171511,171521,171532,171542,171546,171550,171556,171573,171584],{"__ignoreMap":10},[91,171478,171479,171481,171484,171486,171489],{"class":93,"line":94},[91,171480,14673],{"class":97},[91,171482,171483],{"class":1941}," BalanceNotEnoughError",[91,171485,102],{"class":101},[91,171487,171488],{"class":150},"Exception",[91,171490,30761],{"class":101},[91,171492,171493],{"class":93,"line":11},[91,171494,149512],{"class":97},[91,171496,171497],{"class":93,"line":1157},[91,171498,2378],{"emptyLinePlaceholder":17},[91,171500,171501],{"class":93,"line":1172},[91,171502,2378],{"emptyLinePlaceholder":17},[91,171504,171505,171507,171509],{"class":93,"line":1178},[91,171506,31922],{"class":97},[91,171508,150161],{"class":1941},[91,171510,162787],{"class":101},[91,171512,171513,171515,171517,171519],{"class":93,"line":1192},[91,171514,3079],{"class":97},[91,171516,150117],{"class":101},[91,171518,1062],{"class":97},[91,171520,162564],{"class":101},[91,171522,171523,171525,171528,171530],{"class":93,"line":1198},[91,171524,103407],{"class":97},[91,171526,171527],{"class":101}," BalanceNotEnoughError(",[91,171529,150212],{"class":206},[91,171531,108],{"class":101},[91,171533,171534,171536,171538,171540],{"class":93,"line":1289},[91,171535,4068],{"class":97},[91,171537,162794],{"class":101},[91,171539,634],{"class":97},[91,171541,150150],{"class":101},[91,171543,171544],{"class":93,"line":1295},[91,171545,2378],{"emptyLinePlaceholder":17},[91,171547,171548],{"class":93,"line":1307},[91,171549,2378],{"emptyLinePlaceholder":17},[91,171551,171552,171554],{"class":93,"line":1590},[91,171553,170857],{"class":97},[91,171555,3717],{"class":101},[91,171557,171558,171560,171562,171565,171567,171569,171571],{"class":93,"line":1595},[91,171559,162465],{"class":101},[91,171561,147],{"class":97},[91,171563,171564],{"class":101}," withdraw(",[91,171566,413],{"class":150},[91,171568,12414],{"class":101},[91,171570,1700],{"class":150},[91,171572,108],{"class":101},[91,171574,171575,171577,171580,171582],{"class":93,"line":1601},[91,171576,170869],{"class":97},[91,171578,171579],{"class":101}," BalanceNotEnoughError ",[91,171581,31358],{"class":97},[91,171583,171201],{"class":101},[91,171585,171586,171588],{"class":93,"line":1606},[91,171587,31274],{"class":150},[91,171589,66974],{"class":101},[38,171591,171592],{},"入门阶段大多数情况使用内置异常即可。",[33,171594,171596],{"id":171595},"_99-traceback","9.9 traceback",[38,171598,171599],{},"调试时可以输出完整异常堆栈。",[83,171601,171603],{"className":30353,"code":171602,"language":30355,"meta":10,"style":10},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[88,171604,171605,171612,171616,171622,171632,171640],{"__ignoreMap":10},[91,171606,171607,171609],{"class":93,"line":94},[91,171608,30367],{"class":97},[91,171610,171611],{"class":101}," traceback\n",[91,171613,171614],{"class":93,"line":11},[91,171615,2378],{"emptyLinePlaceholder":17},[91,171617,171618,171620],{"class":93,"line":1157},[91,171619,170857],{"class":97},[91,171621,3717],{"class":101},[91,171623,171624,171626,171628,171630],{"class":93,"line":1172},[91,171625,1963],{"class":150},[91,171627,102],{"class":101},[91,171629,155855],{"class":206},[91,171631,108],{"class":101},[91,171633,171634,171636,171638],{"class":93,"line":1178},[91,171635,170869],{"class":97},[91,171637,152201],{"class":150},[91,171639,3717],{"class":101},[91,171641,171642],{"class":93,"line":1192},[91,171643,171644],{"class":101},"    traceback.print_exc()\n",[38,171646,171647],{},"日志系统中常把异常堆栈记录到文件。",[33,171649,171651],{"id":171650},"_910-什么是模块","9.10 什么是模块",[38,171653,171654,171655,125958],{},"模块就是一个 ",[88,171656,146327],{},[38,171658,171659,171660,24593],{},"例如创建 ",[88,171661,171662],{},"my_math.py",[83,171664,171666],{"className":30353,"code":171665,"language":30355,"meta":10,"style":10},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[88,171667,171668,171676,171686,171690,171694,171703],{"__ignoreMap":10},[91,171669,171670,171672,171674],{"class":93,"line":94},[91,171671,31922],{"class":97},[91,171673,5188],{"class":1941},[91,171675,151068],{"class":101},[91,171677,171678,171680,171682,171684],{"class":93,"line":11},[91,171679,4068],{"class":97},[91,171681,10848],{"class":101},[91,171683,583],{"class":97},[91,171685,151079],{"class":101},[91,171687,171688],{"class":93,"line":1157},[91,171689,2378],{"emptyLinePlaceholder":17},[91,171691,171692],{"class":93,"line":1172},[91,171693,2378],{"emptyLinePlaceholder":17},[91,171695,171696,171698,171701],{"class":93,"line":1178},[91,171697,31922],{"class":97},[91,171699,171700],{"class":1941}," sub",[91,171702,151068],{"class":101},[91,171704,171705,171707,171709,171711],{"class":93,"line":1192},[91,171706,4068],{"class":97},[91,171708,10848],{"class":101},[91,171710,634],{"class":97},[91,171712,151079],{"class":101},[38,171714,171715],{},"在另一个文件中导入：",[83,171717,171719],{"className":30353,"code":171718,"language":30355,"meta":10,"style":10},"import my_math\n\nprint(my_math.add(1, 2))\n",[88,171720,171721,171728,171732],{"__ignoreMap":10},[91,171722,171723,171725],{"class":93,"line":94},[91,171724,30367],{"class":97},[91,171726,171727],{"class":101}," my_math\n",[91,171729,171730],{"class":93,"line":11},[91,171731,2378],{"emptyLinePlaceholder":17},[91,171733,171734,171736,171739,171741,171743,171745],{"class":93,"line":1157},[91,171735,30390],{"class":150},[91,171737,171738],{"class":101},"(my_math.add(",[91,171740,319],{"class":150},[91,171742,12414],{"class":101},[91,171744,179],{"class":150},[91,171746,30472],{"class":101},[33,171748,171750],{"id":171749},"_911-import导入","9.11 import导入",[63,171752,171754],{"id":171753},"_9111-导入模块","9.11.1 导入模块",[83,171756,171758],{"className":30353,"code":171757,"language":30355,"meta":10,"style":10},"import random\n\nprint(random.randint(1, 10))\n",[88,171759,171760,171766,171770],{"__ignoreMap":10},[91,171761,171762,171764],{"class":93,"line":94},[91,171763,30367],{"class":97},[91,171765,45303],{"class":101},[91,171767,171768],{"class":93,"line":11},[91,171769,2378],{"emptyLinePlaceholder":17},[91,171771,171772,171774,171777,171779,171781,171783],{"class":93,"line":1157},[91,171773,30390],{"class":150},[91,171775,171776],{"class":101},"(random.randint(",[91,171778,319],{"class":150},[91,171780,12414],{"class":101},[91,171782,548],{"class":150},[91,171784,30472],{"class":101},[63,171786,171788],{"id":171787},"_9112-导入指定内容","9.11.2 导入指定内容",[83,171790,171792],{"className":30353,"code":171791,"language":30355,"meta":10,"style":10},"from random import randint\n\nprint(randint(1, 10))\n",[88,171793,171794,171805,171809],{"__ignoreMap":10},[91,171795,171796,171798,171800,171802],{"class":93,"line":94},[91,171797,30712],{"class":97},[91,171799,57771],{"class":101},[91,171801,30367],{"class":97},[91,171803,171804],{"class":101}," randint\n",[91,171806,171807],{"class":93,"line":11},[91,171808,2378],{"emptyLinePlaceholder":17},[91,171810,171811,171813,171816,171818,171820,171822],{"class":93,"line":1157},[91,171812,30390],{"class":150},[91,171814,171815],{"class":101},"(randint(",[91,171817,319],{"class":150},[91,171819,12414],{"class":101},[91,171821,548],{"class":150},[91,171823,30472],{"class":101},[63,171825,171827],{"id":171826},"_9113-起别名","9.11.3 起别名",[83,171829,171831],{"className":30353,"code":171830,"language":30355,"meta":10,"style":10},"import random as rd\n\nprint(rd.randint(1, 10))\n",[88,171832,171833,171844,171848],{"__ignoreMap":10},[91,171834,171835,171837,171839,171841],{"class":93,"line":94},[91,171836,30367],{"class":97},[91,171838,57771],{"class":101},[91,171840,31358],{"class":97},[91,171842,171843],{"class":101}," rd\n",[91,171845,171846],{"class":93,"line":11},[91,171847,2378],{"emptyLinePlaceholder":17},[91,171849,171850,171852,171855,171857,171859,171861],{"class":93,"line":1157},[91,171851,30390],{"class":150},[91,171853,171854],{"class":101},"(rd.randint(",[91,171856,319],{"class":150},[91,171858,12414],{"class":101},[91,171860,548],{"class":150},[91,171862,30472],{"class":101},[83,171864,171866],{"className":30353,"code":171865,"language":30355,"meta":10,"style":10},"from random import randint as rint\n\nprint(rint(1, 10))\n",[88,171867,171868,171884,171888],{"__ignoreMap":10},[91,171869,171870,171872,171874,171876,171879,171881],{"class":93,"line":94},[91,171871,30712],{"class":97},[91,171873,57771],{"class":101},[91,171875,30367],{"class":97},[91,171877,171878],{"class":101}," randint ",[91,171880,31358],{"class":97},[91,171882,171883],{"class":101}," rint\n",[91,171885,171886],{"class":93,"line":11},[91,171887,2378],{"emptyLinePlaceholder":17},[91,171889,171890,171892,171895,171897,171899,171901],{"class":93,"line":1157},[91,171891,30390],{"class":150},[91,171893,171894],{"class":101},"(rint(",[91,171896,319],{"class":150},[91,171898,12414],{"class":101},[91,171900,548],{"class":150},[91,171902,30472],{"class":101},[63,171904,171906],{"id":171905},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[83,171908,171910],{"className":30353,"code":171909,"language":30355,"meta":10,"style":10},"from random import *\n",[88,171911,171912],{"__ignoreMap":10},[91,171913,171914,171916,171918,171920],{"class":93,"line":94},[91,171915,30712],{"class":97},[91,171917,57771],{"class":101},[91,171919,30367],{"class":97},[91,171921,171922],{"class":97}," *\n",[38,171924,171925],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[33,171927,171929],{"id":171928},"_912-常用内置模块","9.12 常用内置模块",[63,171931,171933],{"id":171932},"_9121-random","9.12.1 random",[83,171935,171937],{"className":30353,"code":171936,"language":30355,"meta":10,"style":10},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[88,171938,171939,171945,171949,171963,171982],{"__ignoreMap":10},[91,171940,171941,171943],{"class":93,"line":94},[91,171942,30367],{"class":97},[91,171944,45303],{"class":101},[91,171946,171947],{"class":93,"line":11},[91,171948,2378],{"emptyLinePlaceholder":17},[91,171950,171951,171953,171955,171957,171959,171961],{"class":93,"line":1157},[91,171952,30390],{"class":150},[91,171954,171776],{"class":101},[91,171956,319],{"class":150},[91,171958,12414],{"class":101},[91,171960,548],{"class":150},[91,171962,30472],{"class":101},[91,171964,171965,171967,171970,171972,171974,171976,171978,171980],{"class":93,"line":1172},[91,171966,30390],{"class":150},[91,171968,171969],{"class":101},"(random.choice([",[91,171971,149863],{"class":206},[91,171973,12414],{"class":101},[91,171975,150911],{"class":206},[91,171977,12414],{"class":101},[91,171979,159706],{"class":206},[91,171981,33118],{"class":101},[91,171983,171984,171986,171989,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011],{"class":93,"line":1178},[91,171985,30390],{"class":150},[91,171987,171988],{"class":101},"(random.sample([",[91,171990,319],{"class":150},[91,171992,12414],{"class":101},[91,171994,179],{"class":150},[91,171996,12414],{"class":101},[91,171998,173],{"class":150},[91,172000,12414],{"class":101},[91,172002,395],{"class":150},[91,172004,12414],{"class":101},[91,172006,421],{"class":150},[91,172008,112177],{"class":101},[91,172010,179],{"class":150},[91,172012,30472],{"class":101},[63,172014,172016],{"id":172015},"_9122-time","9.12.2 time",[83,172018,172020],{"className":30353,"code":172019,"language":30355,"meta":10,"style":10},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[88,172021,172022,172028,172032,172039,172047],{"__ignoreMap":10},[91,172023,172024,172026],{"class":93,"line":94},[91,172025,30367],{"class":97},[91,172027,31804],{"class":101},[91,172029,172030],{"class":93,"line":11},[91,172031,2378],{"emptyLinePlaceholder":17},[91,172033,172034,172036],{"class":93,"line":1157},[91,172035,30390],{"class":150},[91,172037,172038],{"class":101},"(time.time())\n",[91,172040,172041,172043,172045],{"class":93,"line":1172},[91,172042,95046],{"class":101},[91,172044,319],{"class":150},[91,172046,108],{"class":101},[91,172048,172049,172051,172053,172056],{"class":93,"line":1178},[91,172050,30390],{"class":150},[91,172052,102],{"class":101},[91,172054,172055],{"class":206},"\"1秒后执行\"",[91,172057,108],{"class":101},[63,172059,172061],{"id":172060},"_9123-datetime","9.12.3 datetime",[83,172063,172065],{"className":30353,"code":172064,"language":30355,"meta":10,"style":10},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[88,172066,172067,172079,172083,172093,172100],{"__ignoreMap":10},[91,172068,172069,172071,172074,172076],{"class":93,"line":94},[91,172070,30712],{"class":97},[91,172072,172073],{"class":101}," datetime ",[91,172075,30367],{"class":97},[91,172077,172078],{"class":101}," datetime\n",[91,172080,172081],{"class":93,"line":11},[91,172082,2378],{"emptyLinePlaceholder":17},[91,172084,172085,172088,172090],{"class":93,"line":1157},[91,172086,172087],{"class":101},"now ",[91,172089,147],{"class":97},[91,172091,172092],{"class":101}," datetime.now()\n",[91,172094,172095,172097],{"class":93,"line":1172},[91,172096,30390],{"class":150},[91,172098,172099],{"class":101},"(now)\n",[91,172101,172102,172104,172107,172110,172112,172115],{"class":93,"line":1178},[91,172103,30390],{"class":150},[91,172105,172106],{"class":101},"(now.strftime(",[91,172108,172109],{"class":206},"\"%Y-%m-",[91,172111,156666],{"class":150},[91,172113,172114],{"class":206}," %H:%M:%S\"",[91,172116,30472],{"class":101},[63,172118,172120],{"id":172119},"_9124-os","9.12.4 os",[83,172122,172124],{"className":30353,"code":172123,"language":30355,"meta":10,"style":10},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[88,172125,172126,172132,172136,172143],{"__ignoreMap":10},[91,172127,172128,172130],{"class":93,"line":94},[91,172129,30367],{"class":97},[91,172131,45280],{"class":101},[91,172133,172134],{"class":93,"line":11},[91,172135,2378],{"emptyLinePlaceholder":17},[91,172137,172138,172140],{"class":93,"line":1157},[91,172139,30390],{"class":150},[91,172141,172142],{"class":101},"(os.getcwd())\n",[91,172144,172145,172147,172150,172153],{"class":93,"line":1172},[91,172146,30390],{"class":150},[91,172148,172149],{"class":101},"(os.listdir(",[91,172151,172152],{"class":206},"\".\"",[91,172154,30472],{"class":101},[63,172156,172158],{"id":172157},"_9125-sys","9.12.5 sys",[83,172160,172162],{"className":30353,"code":172161,"language":30355,"meta":10,"style":10},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[88,172163,172164,172171,172175,172182],{"__ignoreMap":10},[91,172165,172166,172168],{"class":93,"line":94},[91,172167,30367],{"class":97},[91,172169,172170],{"class":101}," sys\n",[91,172172,172173],{"class":93,"line":11},[91,172174,2378],{"emptyLinePlaceholder":17},[91,172176,172177,172179],{"class":93,"line":1157},[91,172178,30390],{"class":150},[91,172180,172181],{"class":101},"(sys.version)\n",[91,172183,172184,172186],{"class":93,"line":1172},[91,172185,30390],{"class":150},[91,172187,172188],{"class":101},"(sys.path)\n",[33,172190,172192,172193,172195,172196,353],{"id":172191},"_913-if-name-main","9.13 if ",[251,172194,79785],{}," == \"",[251,172197,102033],{},[38,172199,172200,172201,172204],{},"模块被直接运行和被导入时，",[88,172202,172203],{},"__name__"," 的值不同。",[38,172206,172207,172208,24593],{},"创建 ",[88,172209,172210],{},"my_module.py",[83,172212,172214],{"className":30353,"code":172213,"language":30355,"meta":10,"style":10},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[88,172215,172216,172224,172234,172238,172242,172254],{"__ignoreMap":10},[91,172217,172218,172220,172222],{"class":93,"line":94},[91,172219,31922],{"class":97},[91,172221,5188],{"class":1941},[91,172223,151068],{"class":101},[91,172225,172226,172228,172230,172232],{"class":93,"line":11},[91,172227,4068],{"class":97},[91,172229,10848],{"class":101},[91,172231,583],{"class":97},[91,172233,151079],{"class":101},[91,172235,172236],{"class":93,"line":1157},[91,172237,2378],{"emptyLinePlaceholder":17},[91,172239,172240],{"class":93,"line":1172},[91,172241,2378],{"emptyLinePlaceholder":17},[91,172243,172244,172246,172248,172250,172252],{"class":93,"line":1178},[91,172245,1509],{"class":97},[91,172247,31195],{"class":150},[91,172249,101534],{"class":97},[91,172251,101537],{"class":206},[91,172253,3717],{"class":101},[91,172255,172256,172258,172260,172262,172264,172266],{"class":93,"line":1192},[91,172257,31274],{"class":150},[91,172259,166575],{"class":101},[91,172261,319],{"class":150},[91,172263,12414],{"class":101},[91,172265,179],{"class":150},[91,172267,30472],{"class":101},[38,172269,172270],{},"作用：",[46,172272,172273,172276],{},[49,172274,172275],{},"直接运行该文件时，执行测试代码。",[49,172277,172278],{},"被其他文件导入时，不执行测试代码。",[38,172280,172281],{},"这是写模块时很常用的习惯。",[33,172283,172285],{"id":172284},"_914-包","9.14 包",[38,172287,172288,172289,172292],{},"包是包含 ",[88,172290,172291],{},"__init__.py"," 的目录，用于组织多个模块。",[38,172294,172295],{},"目录结构：",[83,172297,172300],{"className":172298,"code":172299,"language":5166,"meta":10},[5164],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[88,172301,172299],{"__ignoreMap":10},[38,172303,172304],{},"导入：",[83,172306,172308],{"className":30353,"code":172307,"language":30355,"meta":10,"style":10},"from utils.file_utils import read_file\n",[88,172309,172310],{"__ignoreMap":10},[91,172311,172312,172314,172317,172319],{"class":93,"line":94},[91,172313,30712],{"class":97},[91,172315,172316],{"class":101}," utils.file_utils ",[91,172318,30367],{"class":97},[91,172320,172321],{"class":101}," read_file\n",[38,172323,172324,172326],{},[88,172325,172291],{}," 可以为空，也可以写包初始化逻辑。",[33,172328,172330],{"id":172329},"_915-第三方包","9.15 第三方包",[38,172332,172333,172334,172336],{},"第三方包通过 ",[88,172335,23805],{}," 安装。",[83,172338,172340],{"className":23796,"code":172339,"language":23798,"meta":10,"style":10},"pip install requests\n",[88,172341,172342],{"__ignoreMap":10},[91,172343,172344,172346,172348],{"class":93,"line":94},[91,172345,23805],{"class":1941},[91,172347,23808],{"class":206},[91,172349,146073],{"class":206},[38,172351,172352],{},"使用：",[83,172354,172356],{"className":30353,"code":172355,"language":30355,"meta":10,"style":10},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[88,172357,172358,172364,172368,172383],{"__ignoreMap":10},[91,172359,172360,172362],{"class":93,"line":94},[91,172361,30367],{"class":97},[91,172363,146073],{"class":101},[91,172365,172366],{"class":93,"line":11},[91,172367,2378],{"emptyLinePlaceholder":17},[91,172369,172370,172373,172375,172378,172381],{"class":93,"line":1157},[91,172371,172372],{"class":101},"response ",[91,172374,147],{"class":97},[91,172376,172377],{"class":101}," requests.get(",[91,172379,172380],{"class":206},"\"https:\u002F\u002Fwww.example.com\"",[91,172382,108],{"class":101},[91,172384,172385,172387],{"class":93,"line":1172},[91,172386,30390],{"class":150},[91,172388,172389],{"class":101},"(response.status_code)\n",[38,172391,172392],{},"查看已安装包：",[83,172394,172396],{"className":23796,"code":172395,"language":23798,"meta":10,"style":10},"pip list\n",[88,172397,172398],{"__ignoreMap":10},[91,172399,172400,172402],{"class":93,"line":94},[91,172401,23805],{"class":1941},[91,172403,118930],{"class":206},[38,172405,172406],{},"导出项目依赖：",[83,172408,172409],{"className":23796,"code":146268,"language":23798,"meta":10,"style":10},[88,172410,172411],{"__ignoreMap":10},[91,172412,172413,172415,172417,172419],{"class":93,"line":94},[91,172414,23805],{"class":1941},[91,172416,146277],{"class":206},[91,172418,26197],{"class":97},[91,172420,146282],{"class":206},[38,172422,172423],{},"安装项目依赖：",[83,172425,172426],{"className":23796,"code":146288,"language":23798,"meta":10,"style":10},[88,172427,172428],{"__ignoreMap":10},[91,172429,172430,172432,172434,172436],{"class":93,"line":94},[91,172431,23805],{"class":1941},[91,172433,23808],{"class":206},[91,172435,119614],{"class":150},[91,172437,146282],{"class":206},[33,172439,172441],{"id":172440},"_916-模块搜索路径","9.16 模块搜索路径",[38,172443,172444,172445,172448],{},"Python 导入模块时会在 ",[88,172446,172447],{},"sys.path"," 中查找。",[83,172450,172452],{"className":30353,"code":172451,"language":30355,"meta":10,"style":10},"import sys\n\nfor path in sys.path:\n    print(path)\n",[88,172453,172454,172460,172464,172476],{"__ignoreMap":10},[91,172455,172456,172458],{"class":93,"line":94},[91,172457,30367],{"class":97},[91,172459,172170],{"class":101},[91,172461,172462],{"class":93,"line":11},[91,172463,2378],{"emptyLinePlaceholder":17},[91,172465,172466,172468,172471,172473],{"class":93,"line":1157},[91,172467,3003],{"class":97},[91,172469,172470],{"class":101}," path ",[91,172472,26018],{"class":97},[91,172474,172475],{"class":101}," sys.path:\n",[91,172477,172478,172480],{"class":93,"line":1172},[91,172479,31274],{"class":150},[91,172481,169204],{"class":101},[38,172483,172484],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[38,172486,157598],{},[83,172488,172491],{"className":172489,"code":172490,"language":5166,"meta":10},[5164],"random.py\njson.py\ntime.py\n",[88,172492,172490],{"__ignoreMap":10},[38,172494,172495],{},"这些文件名可能导致导入异常。",[33,172497,172499],{"id":172498},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[38,172501,172295],{},[83,172503,172506],{"className":172504,"code":172505,"language":5166,"meta":10},[5164],"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",[88,172507,172505],{"__ignoreMap":10},[38,172509,172510,24593],{},[88,172511,172512],{},"utils\u002Ffile_utils.py",[83,172514,172516],{"className":30353,"code":172515,"language":30355,"meta":10,"style":10},"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",[88,172517,172518,172524,172534,172538,172542,172552,172562,172570,172576,172580,172607,172617,172621,172625,172635,172661],{"__ignoreMap":10},[91,172519,172520,172522],{"class":93,"line":94},[91,172521,30367],{"class":97},[91,172523,147066],{"class":101},[91,172525,172526,172528,172530,172532],{"class":93,"line":11},[91,172527,30712],{"class":97},[91,172529,108286],{"class":101},[91,172531,30367],{"class":97},[91,172533,108291],{"class":101},[91,172535,172536],{"class":93,"line":1157},[91,172537,2378],{"emptyLinePlaceholder":17},[91,172539,172540],{"class":93,"line":1172},[91,172541,2378],{"emptyLinePlaceholder":17},[91,172543,172544,172546,172549],{"class":93,"line":1178},[91,172545,31922],{"class":97},[91,172547,172548],{"class":1941}," read_json",[91,172550,172551],{"class":101},"(path):\n",[91,172553,172554,172557,172559],{"class":93,"line":1192},[91,172555,172556],{"class":101},"    path ",[91,172558,147],{"class":97},[91,172560,172561],{"class":101}," Path(path)\n",[91,172563,172564,172566,172568],{"class":93,"line":1198},[91,172565,3079],{"class":97},[91,172567,38905],{"class":97},[91,172569,169285],{"class":101},[91,172571,172572,172574],{"class":93,"line":1289},[91,172573,14731],{"class":97},[91,172575,51813],{"class":101},[91,172577,172578],{"class":93,"line":1295},[91,172579,2378],{"emptyLinePlaceholder":17},[91,172581,172582,172584,172586,172589,172591,172593,172595,172597,172599,172601,172603,172605],{"class":93,"line":1307},[91,172583,34153],{"class":97},[91,172585,146766],{"class":150},[91,172587,172588],{"class":101},"(path, ",[91,172590,146776],{"class":206},[91,172592,12414],{"class":101},[91,172594,146781],{"class":5195},[91,172596,147],{"class":97},[91,172598,146786],{"class":206},[91,172600,13693],{"class":101},[91,172602,31358],{"class":97},[91,172604,148128],{"class":5195},[91,172606,3717],{"class":101},[91,172608,172609,172611,172613,172615],{"class":93,"line":1590},[91,172610,14731],{"class":97},[91,172612,148139],{"class":101},[91,172614,45329],{"class":5195},[91,172616,108],{"class":101},[91,172618,172619],{"class":93,"line":1595},[91,172620,2378],{"emptyLinePlaceholder":17},[91,172622,172623],{"class":93,"line":1601},[91,172624,2378],{"emptyLinePlaceholder":17},[91,172626,172627,172629,172632],{"class":93,"line":1606},[91,172628,31922],{"class":97},[91,172630,172631],{"class":1941}," write_json",[91,172633,172634],{"class":101},"(path, data):\n",[91,172636,172637,172639,172641,172643,172645,172647,172649,172651,172653,172655,172657,172659],{"class":93,"line":1620},[91,172638,34153],{"class":97},[91,172640,146766],{"class":150},[91,172642,172588],{"class":101},[91,172644,151951],{"class":206},[91,172646,12414],{"class":101},[91,172648,146781],{"class":5195},[91,172650,147],{"class":97},[91,172652,146786],{"class":206},[91,172654,13693],{"class":101},[91,172656,31358],{"class":97},[91,172658,148128],{"class":5195},[91,172660,3717],{"class":101},[91,172662,172663,172666,172668,172670,172672,172674,172676,172678,172680,172682,172684],{"class":93,"line":1625},[91,172664,172665],{"class":101},"        json.dump(data, ",[91,172667,45329],{"class":5195},[91,172669,12414],{"class":101},[91,172671,147112],{"class":5195},[91,172673,147],{"class":97},[91,172675,33962],{"class":150},[91,172677,12414],{"class":101},[91,172679,151987],{"class":5195},[91,172681,147],{"class":97},[91,172683,179],{"class":150},[91,172685,108],{"class":101},[38,172687,172688,24593],{},[88,172689,154582],{},[83,172691,172693],{"className":30353,"code":172692,"language":30355,"meta":10,"style":10},"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",[88,172694,172695,172706,172710,172723,172743],{"__ignoreMap":10},[91,172696,172697,172699,172701,172703],{"class":93,"line":94},[91,172698,30712],{"class":97},[91,172700,172316],{"class":101},[91,172702,30367],{"class":97},[91,172704,172705],{"class":101}," read_json, write_json\n",[91,172707,172708],{"class":93,"line":11},[91,172709,2378],{"emptyLinePlaceholder":17},[91,172711,172712,172714,172716,172719,172721],{"class":93,"line":1157},[91,172713,159691],{"class":101},[91,172715,147],{"class":97},[91,172717,172718],{"class":101}," read_json(",[91,172720,151806],{"class":206},[91,172722,108],{"class":101},[91,172724,172725,172727,172729,172731,172733,172735,172737,172739,172741],{"class":93,"line":1172},[91,172726,170509],{"class":101},[91,172728,62654],{"class":206},[91,172730,51412],{"class":101},[91,172732,149863],{"class":206},[91,172734,12414],{"class":101},[91,172736,151447],{"class":206},[91,172738,51412],{"class":101},[91,172740,1091],{"class":150},[91,172742,165127],{"class":101},[91,172744,172745,172748,172750],{"class":93,"line":1178},[91,172746,172747],{"class":101},"write_json(",[91,172749,151806],{"class":206},[91,172751,172752],{"class":101},", students)\n",[33,172754,172756],{"id":172755},"_918-易错点","9.18 易错点",[46,172758,172759,172762,172767,172772,172775,172778],{},[49,172760,172761],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[49,172763,172764,172765,28360],{},"能指定异常类型就不要裸写 ",[88,172766,170869],{},[49,172768,172769,172771],{},[88,172770,171244],{}," 无论是否出错都会执行。",[49,172773,172774],{},"模块文件名不要和标准库重名。",[49,172776,172777],{},"导入自己写的模块时，要注意运行目录。",[49,172779,172780],{},"第三方包要安装到当前解释器或虚拟环境中。",[33,172782,172784],{"id":172783},"_919-本章练习","9.19 本章练习",[46,172786,172787,172790,172793,172799,172806],{},[49,172788,172789],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[49,172791,172792],{},"写函数读取文件，如果文件不存在则返回空字符串。",[49,172794,172207,172795,172798],{},[88,172796,172797],{},"math_utils.py","，实现加减乘除函数并导入使用。",[49,172800,172801,172802,172805],{},"创建一个 ",[88,172803,172804],{},"utils"," 包，把 JSON 读写函数放进去。",[49,172807,172808],{},"写一个程序，捕获除零异常和输入格式异常。",[5105,172810,172811],{},"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":10,"searchDepth":11,"depth":11,"links":172813},[172814,172815,172816,172817,172818,172819,172820,172821,172822,172823,172824,172830,172837,172839,172840,172841,172842,172843,172844],{"id":170666,"depth":11,"text":170667},{"id":170794,"depth":11,"text":170795},{"id":170843,"depth":11,"text":170844},{"id":170992,"depth":11,"text":170993},{"id":171164,"depth":11,"text":171165},{"id":171233,"depth":11,"text":171234},{"id":171344,"depth":11,"text":171345},{"id":171470,"depth":11,"text":171471},{"id":171595,"depth":11,"text":171596},{"id":171650,"depth":11,"text":171651},{"id":171749,"depth":11,"text":171750,"children":172825},[172826,172827,172828,172829],{"id":171753,"depth":1157,"text":171754},{"id":171787,"depth":1157,"text":171788},{"id":171826,"depth":1157,"text":171827},{"id":171905,"depth":1157,"text":171906},{"id":171928,"depth":11,"text":171929,"children":172831},[172832,172833,172834,172835,172836],{"id":171932,"depth":1157,"text":171933},{"id":172015,"depth":1157,"text":172016},{"id":172060,"depth":1157,"text":172061},{"id":172119,"depth":1157,"text":172120},{"id":172157,"depth":1157,"text":172158},{"id":172191,"depth":11,"text":172838},"9.13 if name == \"main\"",{"id":172284,"depth":11,"text":172285},{"id":172329,"depth":11,"text":172330},{"id":172440,"depth":11,"text":172441},{"id":172498,"depth":11,"text":172499},{"id":172755,"depth":11,"text":172756},{"id":172783,"depth":11,"text":172784},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170658,"description":13},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172851,"title":172852,"body":172853,"description":173016,"extension":14,"meta":173017,"navigation":17,"path":173018,"seo":173019,"stem":173020,"__hash__":173021},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172854,"toc":173011},[172855,172858,172861,172864,172875,172877,172951,172954,172957,172960,172963,172966,172969,172972,172975,172978,172981],[29,172856,172852],{"id":172857},"python教程",[38,172859,172860],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[38,172862,172863],{},"建议学习环境：",[46,172865,172866,172869,172872],{},[49,172867,172868],{},"Python 版本：Python 3.10 及以上。",[49,172870,172871],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[49,172873,172874],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[33,172876,117053],{"id":117053},[46,172878,172879,172885,172891,172897,172903,172909,172915,172921,172927,172933,172939,172945],{},[49,172880,172881],{},[340,172882,172884],{"href":172883},".\u002Fch1-Python","Python环境与第一个程序",[49,172886,172887],{},[340,172888,172890],{"href":172889},".\u002Fch2","基础语法、变量与字符串",[49,172892,172893],{},[340,172894,172896],{"href":172895},".\u002Fch3","判断语句",[49,172898,172899],{},[340,172900,172902],{"href":172901},".\u002Fch4","循环语句",[49,172904,172905],{},[340,172906,172908],{"href":172907},".\u002Fch5","函数基础",[49,172910,172911],{},[340,172912,172914],{"href":172913},".\u002Fch6","数据容器",[49,172916,172917],{},[340,172918,172920],{"href":172919},".\u002Fch7","函数进阶",[49,172922,172923],{},[340,172924,172926],{"href":172925},".\u002Fch8","文件操作",[49,172928,172929],{},[340,172930,172932],{"href":172931},".\u002Fch9","异常、模块与包",[49,172934,172935],{},[340,172936,172938],{"href":172937},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[49,172940,172941],{},[340,172942,172944],{"href":172943},".\u002Fch11","面向对象基础",[49,172946,172947],{},[340,172948,172950],{"href":172949},".\u002Fch12","综合案例与复习路线",[33,172952,172953],{"id":172953},"学习路线",[38,172955,172956],{},"第一阶段：能运行程序。",[38,172958,172959],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[38,172961,172962],{},"第二阶段：能组织数据。",[38,172964,172965],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[38,172967,172968],{},"第三阶段：能封装逻辑。",[38,172970,172971],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[38,172973,172974],{},"第四阶段：能做小项目。",[38,172976,172977],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[33,172979,172980],{"id":172980},"参考资料",[46,172982,172983,172990,172997,173004],{},[49,172984,172985,172986],{},"黑马程序员 Python 入门教程推荐：",[340,172987,172988],{"href":172988,"rel":172989},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23839],[49,172991,172992,172993],{},"Python 官方中文教程：",[340,172994,172995],{"href":172995,"rel":172996},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23839],[49,172998,172999,173000],{},"Python 标准库文档：",[340,173001,173002],{"href":173002,"rel":173003},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23839],[49,173005,173006,173007],{},"pyecharts 文档：",[340,173008,173009],{"href":173009,"rel":173010},"https:\u002F\u002Fpyecharts.org\u002F",[23839],{"title":10,"searchDepth":11,"depth":11,"links":173012},[173013,173014,173015],{"id":117053,"depth":11,"text":117053},{"id":172953,"depth":11,"text":172953},{"id":172980,"depth":11,"text":172980},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":16},"\u002Fwiki\u002F2024-10-10-python",{"title":172852,"description":173016},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331373251]